-
Notifications
You must be signed in to change notification settings - Fork 3
/
twitter.js
84 lines (73 loc) · 2.38 KB
/
twitter.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
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
};
}
};
});