Skip to content

Commit

Permalink
added /twittername command and twitter avatars next to usernames.
Browse files Browse the repository at this point in the history
  • Loading branch information
toolness committed Jul 3, 2012
1 parent 0480222 commit 12e55ce
Show file tree
Hide file tree
Showing 8 changed files with 135 additions and 9 deletions.
5 changes: 4 additions & 1 deletion app.js
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,10 @@ function onUserLogin(socket, username) {
});
socket.on('set-custom-global-metadata', function(data) {
var metadata = customGlobalMetadata.get('data', {});
metadata[data.key] = data.value;
if (!data.value)
delete metadata[data.key];
else
metadata[data.key] = data.value;
customGlobalMetadata.setSync('data', metadata);
socket.broadcast.emit('change-custom-global-metadata', data);
});
Expand Down
18 changes: 17 additions & 1 deletion static/cmdline.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"use strict";

define(["jquery", "underscore"], function($, _) {
return function(cmd, irc, logArea, login) {
return function(cmd, irc, logArea, login, twitterUsers) {
var log = logArea.log;
var commands = {
login: function(arg) {
Expand Down Expand Up @@ -44,6 +44,22 @@ define(["jquery", "underscore"], function($, _) {
return log("error", "Please specify a channel to leave.");
log("Attempting to leave " + arg + "...");
irc.part(arg);
},
twittername: function(arg) {
if (!arg)
return log("error", "Please provide a nick and, optionally, " +
"its respective Twitter name.");
var parts = arg.split(" ");
var nick = parts[0].trim();
var twitterName = (parts[1] || "").trim();

if (!twitterName)
log("Dissociating " + nick + " from any Twitter username.");
else
log("Associating " + nick + " with the Twitter username @" +
twitterName + ".");

twitterUsers.set(nick, twitterName);
}
};

Expand Down
14 changes: 13 additions & 1 deletion static/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@
}

#users .user {
padding: 8px;
position: relative;
padding: 8px 8px 8px 32px;
}

#users .user:first-child {
Expand All @@ -40,6 +41,17 @@
border-top: 1px dotted gray;
}

#users .user .twitter-user {
position: absolute;
top: 4px;
left: 4px;
}

#users .user .twitter-user img {
width: 24px;
height: 24px;
}

#messages {
padding: 0;
font-size: 14px;
Expand Down
3 changes: 1 addition & 2 deletions static/irc.js
Original file line number Diff line number Diff line change
Expand Up @@ -115,9 +115,8 @@ define([
this.socket.emit('set-custom-global-metadata',
{key: key, value: value});
},
getCustomGlobalMetadata: function(cb) {
getCustomGlobalMetadata: function() {
this.socket.emit('get-custom-global-metadata');
this.socket.once('custom-global-metadata', cb);
},
getLoggedMessages: function(start, end, cb) {
var self = this;
Expand Down
12 changes: 9 additions & 3 deletions static/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,10 @@ define([
"cmdline",
"login",
"util/pretty-date",
"util/misc"
"util/misc",
"twitter"
], function($, _, LogArea, IRC, UserListView, CommandLine, Login,
prettyDate, misc) {
prettyDate, misc, twitter) {
function showLoggedMessages(irc, logArea) {
var CHUNK_SIZE = 10;
var lastChunk = -CHUNK_SIZE;
Expand Down Expand Up @@ -62,7 +63,11 @@ define([
var log = logArea.log;
var irc = new IRC();
var userListView = new UserListView(irc.users, $("#users"));
var cmdLine = new CommandLine($("#cmd"), irc, logArea, login);
var twitterUsers = new twitter.TwitterUsers(irc);
var twitterViewMixIn = new twitter.TwitterViewMixIn(userListView,
twitterUsers);
var cmdLine = new CommandLine($("#cmd"), irc, logArea, login,
twitterUsers);
var isUnloading = false;

if (loginInfo) {
Expand All @@ -78,6 +83,7 @@ define([
log("info", "Your nick is " + irc.nick +
". You are in channels: " + channels.join(", ") + ".");
channels.forEach(function(channel) { irc.getNames(channel); });
irc.getCustomGlobalMetadata();
showLoggedMessages(irc, logArea);
});
irc.on('join', function(info) {
Expand Down
84 changes: 84 additions & 0 deletions static/twitter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
"use strict";

define([
"jquery",
"util/misc",
"event-emitter"
], function($, misc, EventEmitter) {
var AVATAR_IMG = 'http://twitter.com/api/users/profile_image/';
var PROFILE_URL = 'http://twitter.com/';

function TwitterUsers(irc) {
var self = this;

this.users = {};
this.irc = irc;

irc.on('custom-global-metadata', function(data) {
data = data || {};
Object.keys(data).forEach(function(key) {
if (key.indexOf(self.PREFIX) == 0) {
var nick = key.slice(self.PREFIX.length);
self.users[nick] = data[key];
}
});
self.emit('change');
});
}

TwitterUsers.prototype = {
PREFIX: 'twitter-mapping/',
set: function(nick, twitterUser) {
if (twitterUser)
this.users[nick] = twitterUser;
else
delete this.users[nick];
this.irc.setCustomGlobalMetadata(this.PREFIX + nick, twitterUser);
this.emit('change');
}
};

EventEmitter.mixInto(TwitterUsers);

return {
TwitterUsers: TwitterUsers,
TwitterViewMixIn: function(userListView, twitterUsers) {
function insertTwitterInfo(nick) {
for (var baseNick in twitterUsers.users) {
if (misc.doesNickMatch(baseNick, nick)) {
var twitterName = twitterUsers.users[baseNick];

if (!twitterName)
return;

var a = $('<a class="twitter-user" target="_blank"></a>')
.attr('href', PROFILE_URL + twitterName)
.attr('title', nick + ' is @' + twitterName + ' on Twitter.');
var img = $('<img>')
.attr('alt', 'Twitter avator for ' + twitterName)
.attr('src', AVATAR_IMG + twitterName)
.appendTo(a);
userListView.getElementForNick(nick).prepend(a);
return;
}
}
}

userListView.users.on('add', insertTwitterInfo);
userListView.users.on('rename', function(oldnick, newnick) {
userListView.getElementForNick(newnick)
.find(".twitter-user").remove();
insertTwitterInfo(newnick);
});
twitterUsers.on('change', function() {
userListView.el.find(".twitter-user").remove();
userListView.users.getAllNicks().forEach(insertTwitterInfo);
});

return {
userListView: userListView,
twitterUsers: twitterUsers
};
}
};
});
5 changes: 4 additions & 1 deletion static/user-list-view.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,10 @@ define([
});
return {
users: users,
el: el
el: el,
getElementForNick: function(nick) {
return nicks[nick];
}
};
};
});
3 changes: 3 additions & 0 deletions static/users.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ define([
});
return allChannels;
},
getAllNicks: function() {
return Object.keys(this.nicks);
},
add: function(nicks, channel) {
var self = this;
if (typeof(nicks) == "string")
Expand Down

0 comments on commit 12e55ce

Please sign in to comment.