Commit | Line | Data |
---|---|---|
7af36ece JA |
1 | /*jslint browser: true, devel: true, sloppy: true, plusplus: true, nomen: true, forin: true, continue: true */\r |
2 | /*globals kiwi, $, _, Tabview, Userlist, User, Box, init_data */\r | |
5a29866a JA |
3 | /**\r |
4 | * @namespace\r | |
5 | */\r | |
b41a381f D |
6 | kiwi.front.events = {\r |
7 | \r | |
5a29866a JA |
8 | /**\r |
9 | * Binds all of the event handlers to their events\r | |
10 | */\r | |
f7a9a13c | 11 | bindAll: function () {\r |
2a4e22fa D |
12 | $(kiwi.gateway).bind('onmsg', this.onMsg)\r |
13 | .bind('onnotice', this.onNotice)\r | |
14 | .bind('onaction', this.onAction)\r | |
15 | .bind('onmotd', this.onMOTD)\r | |
16 | .bind('onoptions', this.onOptions)\r | |
17 | .bind('onconnect', this.onConnect)\r | |
18 | .bind('onconnect_fail', this.onConnectFail)\r | |
19 | .bind('ondisconnect', this.onDisconnect)\r | |
20 | .bind('onreconnecting', this.onReconnecting)\r | |
21 | .bind('onnick', this.onNick)\r | |
22 | .bind('onuserlist', this.onUserList)\r | |
23 | .bind('onuserlist_end', this.onUserListEnd)\r | |
24 | .bind('onlist_start', this.onChannelListStart)\r | |
25 | .bind('onlist_channel', this.onChannelList)\r | |
26 | .bind('onlist_end', this.onChannelListEnd)\r | |
27 | .bind('onbanlist', this.onBanList)\r | |
28 | .bind('onbanlist_end', this.onBanListEnd)\r | |
29 | .bind('onjoin', this.onJoin)\r | |
30 | .bind('ontopic', this.onTopic)\r | |
31 | .bind('ontopicsetby', this.onTopicSetBy)\r | |
32 | .bind('onpart', this.onPart)\r | |
33 | .bind('onkick', this.onKick)\r | |
34 | .bind('onquit', this.onQuit)\r | |
35 | .bind('onmode', this.onMode)\r | |
36 | .bind('onwhois', this.onWhois)\r | |
37 | .bind('onsync', this.onSync)\r | |
38 | .bind('onchannel_redirect', this.onChannelRedirect)\r | |
39 | .bind('ondebug', this.onDebug)\r | |
40 | .bind('onctcp_request', this.onCTCPRequest)\r | |
41 | .bind('onctcp_response', this.onCTCPResponse)\r | |
42 | .bind('onirc_error', this.onIRCError)\r | |
43 | .bind('onkiwi', this.onKiwi);\r | |
f7a9a13c | 44 | },\r |
b41a381f | 45 | \r |
5a29866a JA |
46 | /**\r |
47 | * Handles the msg event\r | |
48 | * @param {eventObject} e The event object\r | |
49 | * @param {Object} data The event data\r | |
50 | */\r | |
b41a381f D |
51 | onMsg: function (e, data) {\r |
52 | var destination, plugin_event, tab;\r | |
53 | // Is this message from a user?\r | |
54 | if (data.channel === kiwi.gateway.nick) {\r | |
55 | destination = data.nick.toLowerCase();\r | |
56 | } else {\r | |
57 | destination = data.channel.toLowerCase();\r | |
58 | }\r | |
59 | \r | |
60 | plugin_event = {nick: data.nick, msg: data.msg, destination: destination};\r | |
61 | plugin_event = kiwi.plugs.run('msg_recieved', plugin_event);\r | |
62 | if (!plugin_event) {\r | |
63 | return;\r | |
64 | }\r | |
f7a9a13c | 65 | \r |
bb6a9775 | 66 | var chan = kiwi.channels.getByName(plugin_event.destination);\r |
54a2a4e1 JA |
67 | if (chan) {\r |
68 | chan.addMsg(null, plugin_event.nick, plugin_event.msg);\r | |
69 | }\r | |
b41a381f D |
70 | },\r |
71 | \r | |
5a29866a JA |
72 | /**\r |
73 | * Handles the debug event\r | |
74 | * @param {eventObject} e The event object\r | |
75 | * @param {Object} data The event data\r | |
76 | */\r | |
b41a381f D |
77 | onDebug: function (e, data) {\r |
78 | var tab = Tabview.getTab('kiwi_debug');\r | |
79 | if (!tab) {\r | |
80 | tab = new Tabview('kiwi_debug');\r | |
81 | }\r | |
82 | tab.addMsg(null, ' ', data.msg);\r | |
83 | },\r | |
84 | \r | |
5a29866a JA |
85 | /**\r |
86 | * Handles the action event\r | |
87 | * @param {eventObject} e The event object\r | |
88 | * @param {Object} data The event data\r | |
89 | */\r | |
b41a381f D |
90 | onAction: function (e, data) {\r |
91 | var destination, tab;\r | |
92 | // Is this message from a user?\r | |
93 | if (data.channel === kiwi.gateway.nick) {\r | |
94 | destination = data.nick;\r | |
95 | } else {\r | |
96 | destination = data.channel;\r | |
97 | }\r | |
98 | \r | |
bb6a9775 | 99 | var chan = kiwi.channels.getByName(destination);\r |
54a2a4e1 JA |
100 | if (chan) {\r |
101 | chan.addMsg(null, ' ', '* ' + data.nick + ' ' + data.msg, 'action', 'color:#555;');\r | |
bb6a9775 JA |
102 | } else {\r |
103 | kiwi.channels.server.addMsg(null, ' ', '* ' + data.nick + ' ' + data.msg, 'action', 'color:#555;');\r | |
b41a381f | 104 | }\r |
b41a381f D |
105 | },\r |
106 | \r | |
5a29866a JA |
107 | /**\r |
108 | * Handles the topic event\r | |
109 | * @param {eventObject} e The event object\r | |
110 | * @param {Object} data The event data\r | |
111 | */\r | |
b41a381f | 112 | onTopic: function (e, data) {\r |
bb6a9775 | 113 | var chan = kiwi.channels.getByName(data.channel);\r |
54a2a4e1 JA |
114 | if (chan) {\r |
115 | chan.set({"topic": data.topic});\r | |
bb6a9775 | 116 | chan.addMsg(null, ' ', '=== Topic for ' + data.channel + ' is: ' + data.topic, 'topic');\r |
b41a381f D |
117 | }\r |
118 | },\r | |
119 | \r | |
2a4e22fa D |
120 | /**\r |
121 | * Handles the topicsetby event\r | |
122 | * @param {eventObject} e The event object\r | |
123 | * @param {Object} data The event data\r | |
124 | */\r | |
125 | onTopicSetBy: function (e, data) {\r | |
54a2a4e1 | 126 | var when,\r |
bb6a9775 JA |
127 | chan = kiwi.channels.getByName(data.channel);\r |
128 | if (chan) {\r | |
129 | when = new Date(data.when * 1000).toLocaleString();\r | |
130 | chan.addMsg(null, '', 'Topic set by ' + data.nick + ' at ' + when, 'topic');\r | |
131 | }\r | |
2a4e22fa D |
132 | },\r |
133 | \r | |
5a29866a JA |
134 | /**\r |
135 | * Handles the notice event\r | |
136 | * @param {eventObject} e The event object\r | |
137 | * @param {Object} data The event data\r | |
138 | */\r | |
b41a381f D |
139 | onNotice: function (e, data) {\r |
140 | var nick = (data.nick === undefined) ? '' : data.nick,\r | |
54a2a4e1 JA |
141 | enick = '[' + nick + ']',\r |
142 | chan;\r | |
b41a381f | 143 | \r |
bb6a9775 | 144 | chan = kiwi.channels.getByName(data.channel);\r |
54a2a4e1 JA |
145 | if (chan) {\r |
146 | chan.addMsg(null, enick, data.msg, 'notice');\r | |
bb6a9775 JA |
147 | } else {\r |
148 | kiwi.channels.server.addMsg(null, enick, data.msg, 'notice');\r | |
b41a381f D |
149 | }\r |
150 | },\r | |
151 | \r | |
5a29866a JA |
152 | /**\r |
153 | * Handles the CTCP request event\r | |
154 | * @param {eventObject} e The event object\r | |
155 | * @param {Object} data The event data\r | |
156 | */\r | |
b41a381f D |
157 | onCTCPRequest: function (e, data) {\r |
158 | var msg = data.msg.split(" ", 2);\r | |
159 | switch (msg[0]) {\r | |
160 | case 'PING':\r | |
161 | if (typeof msg[1] === 'undefined') {\r | |
162 | msg[1] = '';\r | |
163 | }\r | |
312d2d7c | 164 | kiwi.gateway.ctcp(false, 'PING', data.nick, msg[1]);\r |
b41a381f D |
165 | break;\r |
166 | case 'TIME':\r | |
312d2d7c | 167 | kiwi.gateway.ctcp(false, 'TIME', data.nick, (new Date()).toLocaleString());\r |
b41a381f D |
168 | break;\r |
169 | }\r | |
bb6a9775 JA |
170 | kiwi.channels.server.addMsg(null, 'CTCP Request', '[from ' + data.nick + '] ' + data.msg, 'ctcp');\r |
171 | \r | |
b41a381f D |
172 | },\r |
173 | \r | |
5a29866a JA |
174 | /**\r |
175 | * Handles the CTCP response event\r | |
176 | * @param {eventObject} e The event object\r | |
177 | * @param {Object} data The event data\r | |
178 | */\r | |
b41a381f | 179 | onCTCPResponse: function (e, data) {\r |
bb6a9775 | 180 | kiwi.channels.server.addMsg(null, 'CTCP Reply', '[from ' + data.nick + '] ' + data.msg, 'ctcp');\r |
b41a381f D |
181 | },\r |
182 | \r | |
5a29866a JA |
183 | /**\r |
184 | * Handles the kiwi event\r | |
185 | * @param {eventObject} e The event object\r | |
186 | * @param {Object} data The event data\r | |
187 | */\r | |
b41a381f D |
188 | onKiwi: function (e, data) {\r |
189 | //console.log(data);\r | |
190 | },\r | |
191 | \r | |
5a29866a JA |
192 | /**\r |
193 | * Handles the connect event\r | |
194 | * @param {eventObject} e The event object\r | |
195 | * @param {Object} data The event data\r | |
196 | */\r | |
b41a381f D |
197 | onConnect: function (e, data) {\r |
198 | var err_box, channels;\r | |
199 | \r | |
200 | if (data.connected) {\r | |
201 | // Did we disconnect?\r | |
202 | err_box = $('.messages .msg.error.disconnect .text');\r | |
203 | if (typeof err_box[0] !== 'undefined') {\r | |
204 | err_box.text('Reconnected OK :)');\r | |
205 | err_box.parent().removeClass('disconnect');\r | |
206 | \r | |
207 | // Rejoin channels\r | |
54a2a4e1 JA |
208 | //channels = '';\r |
209 | //_.each(Tabview.getAllTabs(), function (tabview) {\r | |
210 | // if (tabview.name === 'server') {\r | |
211 | // return;\r | |
212 | // }\r | |
213 | // channels += tabview.name + ',';\r | |
214 | //});\r | |
215 | //console.log('Rejoining: ' + channels);\r | |
216 | //kiwi.gateway.join(channels);\r | |
b41a381f D |
217 | return;\r |
218 | }\r | |
219 | \r | |
220 | if (kiwi.gateway.nick !== data.nick) {\r | |
221 | kiwi.gateway.nick = data.nick;\r | |
3586a76e | 222 | kiwi.front.ui.doLayout();\r |
b41a381f D |
223 | }\r |
224 | \r | |
bb6a9775 JA |
225 | kiwi.channels.server.addMsg(null, ' ', '=== Connected OK :)', 'status');\r |
226 | if (typeof init_data.channel === "string") {\r | |
227 | kiwi.front.joinChannel(init_data.channel);\r | |
228 | }\r | |
b41a381f D |
229 | kiwi.plugs.run('connect', {success: true});\r |
230 | } else {\r | |
bb6a9775 | 231 | kiwi.channels.server.addMsg(null, ' ', '=== Failed to connect :(', 'status');\r |
b41a381f D |
232 | kiwi.plugs.run('connect', {success: false});\r |
233 | }\r | |
f97fe3d2 D |
234 | \r |
235 | // Now that we're connected, warn the user if they really want to quit\r | |
32a2d88b | 236 | kiwi.front.ui.preventRefresh();\r |
b41a381f | 237 | },\r |
5a29866a JA |
238 | /**\r |
239 | * Handles the connectFail event\r | |
240 | * @param {eventObject} e The event object\r | |
241 | * @param {Object} data The event data\r | |
242 | */\r | |
b41a381f D |
243 | onConnectFail: function (e, data) {\r |
244 | var reason = (typeof data.reason === 'string') ? data.reason : '';\r | |
bb6a9775 | 245 | kiwi.channels.server.addMsg(null, '', 'There\'s a problem connecting! (' + reason + ')', 'error');\r |
b41a381f D |
246 | kiwi.plugs.run('connect', {success: false});\r |
247 | },\r | |
5a29866a JA |
248 | /**\r |
249 | * Handles the disconnect event\r | |
250 | * @param {eventObject} e The event object\r | |
251 | * @param {Object} data The event data\r | |
252 | */\r | |
b41a381f D |
253 | onDisconnect: function (e, data) {\r |
254 | var tab, tabs;\r | |
54a2a4e1 JA |
255 | //tabs = Tabview.getAllTabs();\r |
256 | //for (tab in tabs) {\r | |
257 | // tabs[tab].addMsg(null, '', 'Disconnected from server!', 'error disconnect');\r | |
258 | //}\r | |
b41a381f D |
259 | kiwi.plugs.run('disconnect', {success: false});\r |
260 | },\r | |
5a29866a JA |
261 | /**\r |
262 | * Handles the reconnecting event\r | |
263 | * @param {eventObject} e The event object\r | |
264 | * @param {Object} data The event data\r | |
265 | */\r | |
b41a381f | 266 | onReconnecting: function (e, data) {\r |
ffc2f74a | 267 | var err_box, f, msg, mins, secs;\r |
b41a381f D |
268 | \r |
269 | err_box = $('.messages .msg.error.disconnect .text');\r | |
270 | if (!err_box) {\r | |
271 | return;\r | |
272 | }\r | |
273 | \r | |
5a29866a JA |
274 | /**\r |
275 | * @inner\r | |
276 | */\r | |
b41a381f D |
277 | f = function (num) {\r |
278 | switch (num) {\r | |
279 | case 1: return 'First';\r | |
280 | case 2: return 'Second';\r | |
281 | case 3: return 'Third';\r | |
282 | case 4: return 'Fourth';\r | |
283 | case 5: return 'Fifth';\r | |
284 | case 6: return 'Sixth';\r | |
285 | case 7: return 'Seventh';\r | |
286 | default: return 'Next';\r | |
287 | }\r | |
288 | };\r | |
289 | \r | |
ffc2f74a JA |
290 | secs = Math.floor(data.delay / 1000);\r |
291 | mins = Math.floor(secs / 60);\r | |
292 | secs = secs % 60;\r | |
293 | if (mins > 0) {\r | |
ab6e33f8 | 294 | msg = f(data.attempts) + ' attempt at reconnecting in ' + mins + ' minute' + ((mins > 1) ? 's' : '') + ', ' + secs + ' second' + (((secs > 1) || (secs === 0)) ? 's' : '') + '...';\r |
ffc2f74a JA |
295 | } else {\r |
296 | msg = f(data.attempts) + ' attempt at reconnecting in ' + secs + ' second' + (((secs > 1) || (secs === 0)) ? 's' : '') + '...';\r | |
297 | }\r | |
f93aafe5 | 298 | \r |
b41a381f D |
299 | err_box.text(msg);\r |
300 | },\r | |
5a29866a JA |
301 | /**\r |
302 | * Handles the options event\r | |
303 | * @param {eventObject} e The event object\r | |
304 | * @param {Object} data The event data\r | |
305 | */\r | |
b41a381f D |
306 | onOptions: function (e, data) {\r |
307 | if (typeof kiwi.gateway.network_name === "string" && kiwi.gateway.network_name !== "") {\r | |
bb6a9775 | 308 | kiwi.channels.server.set({"name": kiwi.gateway.network_name});\r |
b41a381f D |
309 | }\r |
310 | },\r | |
5a29866a JA |
311 | /**\r |
312 | * Handles the MOTD event\r | |
313 | * @param {eventObject} e The event object\r | |
314 | * @param {Object} data The event data\r | |
315 | */\r | |
b41a381f | 316 | onMOTD: function (e, data) {\r |
bb6a9775 | 317 | kiwi.channels.server.addMsg(null, data.server, data.msg, 'motd');\r |
b41a381f | 318 | },\r |
5a29866a JA |
319 | /**\r |
320 | * Handles the whois event\r | |
321 | * @param {eventObject} e The event object\r | |
322 | * @param {Object} data The event data\r | |
323 | */\r | |
b41a381f | 324 | onWhois: function (e, data) {\r |
7af36ece | 325 | /*globals secondsToTime */\r |
a146029e D |
326 | var d, tab, idle_time = '';\r |
327 | \r | |
7af36ece JA |
328 | if (data.end) {\r |
329 | return;\r | |
330 | }\r | |
a146029e | 331 | \r |
dde5dcd9 | 332 | if (typeof data.idle !== 'undefined') {\r |
a146029e D |
333 | idle_time = secondsToTime(parseInt(data.idle, 10));\r |
334 | idle_time = idle_time.h.toString().lpad(2, "0") + ':' + idle_time.m.toString().lpad(2, "0") + ':' + idle_time.s.toString().lpad(2, "0");\r | |
335 | }\r | |
336 | \r | |
bb6a9775 JA |
337 | tab = kiwi.currentPanel;\r |
338 | if (data.msg) {\r | |
339 | tab.addMsg(null, data.nick, data.msg, 'whois');\r | |
340 | } else if (data.logon) {\r | |
341 | d = new Date();\r | |
342 | d.setTime(data.logon * 1000);\r | |
343 | d = d.toLocaleString();\r | |
344 | \r | |
345 | tab.addMsg(null, data.nick, 'idle for ' + idle_time + ', signed on ' + d, 'whois');\r | |
346 | } else {\r | |
347 | tab.addMsg(null, data.nick, 'idle for ' + idle_time, 'whois');\r | |
348 | }\r | |
b41a381f | 349 | },\r |
5a29866a JA |
350 | /**\r |
351 | * Handles the mode event\r | |
352 | * @param {eventObject} e The event object\r | |
353 | * @param {Object} data The event data\r | |
354 | */\r | |
b41a381f | 355 | onMode: function (e, data) {\r |
54a2a4e1 | 356 | var tab, mem;\r |
b41a381f | 357 | if ((typeof data.channel === 'string') && (typeof data.effected_nick === 'string')) {\r |
bb6a9775 | 358 | chan = kiwi.channels.getByName(data.channel);\r |
54a2a4e1 JA |
359 | if (chan) {\r |
360 | chan.addMsg(null, ' ', '[' + data.mode + '] ' + data.effected_nick + ' by ' + data.nick, 'mode', '');\r | |
361 | mem = _.detect(chan.get("members"), function (m) {\r | |
362 | return data.effected_nick === m.get("nick");\r | |
363 | });\r | |
364 | if (mem) {\r | |
365 | if (data.mode[0] === '+') {\r | |
366 | mem.addMode(data.mode);\r | |
367 | } else {\r | |
368 | mem.removeMode(data.mode);\r | |
369 | }\r | |
370 | }\r | |
b41a381f D |
371 | }\r |
372 | }\r | |
b41a381f D |
373 | // TODO: Other mode changes that aren't +/- qaohv. - JA\r |
374 | },\r | |
5a29866a JA |
375 | /**\r |
376 | * Handles the userList event\r | |
377 | * @param {eventObject} e The event object\r | |
378 | * @param {Object} data The event data\r | |
379 | */\r | |
b41a381f | 380 | onUserList: function (e, data) {\r |
54a2a4e1 | 381 | var tab, chan;\r |
bb6a9775 | 382 | chan = kiwi.channels.getByName(data.channel);\r |
54a2a4e1 | 383 | if (chan) {\r |
ce119b06 JA |
384 | if ((!kiwi.front.cache.userlist) || (!kiwi.front.cache.userlist.updating)) {\r |
385 | if (!kiwi.front.cache.userlist) {\r | |
386 | kiwi.front.cache.userlist = {updating: true};\r | |
387 | } else {\r | |
388 | kiwi.front.cache.userlist.updating = true;\r | |
389 | }\r | |
390 | chan.get("members").reset([],{"silent": true});\r | |
391 | }\r | |
392 | _.forEach(data.users, function (u) {\r | |
393 | chan.get("members").add(new kiwi.model.Member(u), {"silent": true});\r | |
394 | });\r | |
54a2a4e1 | 395 | }\r |
b41a381f | 396 | },\r |
5a29866a JA |
397 | /**\r |
398 | * Handles the userListEnd event\r | |
399 | * @param {eventObject} e The event object\r | |
400 | * @param {Object} data The event data\r | |
401 | */\r | |
b41a381f | 402 | onUserListEnd: function (e, data) {\r |
ce119b06 | 403 | var chan;\r |
b41a381f D |
404 | if (!kiwi.front.cache.userlist) {\r |
405 | kiwi.front.cache.userlist = {};\r | |
406 | }\r | |
407 | kiwi.front.cache.userlist.updating = false;\r | |
bb6a9775 | 408 | chan = kiwi.channels.getByName(data.channel);\r |
54a2a4e1 JA |
409 | if (chan) {\r |
410 | chan.get("members").trigger("change");\r | |
411 | }\r | |
b41a381f D |
412 | },\r |
413 | \r | |
5a29866a JA |
414 | /**\r |
415 | * Handles the channelListStart event\r | |
416 | * @param {eventObject} e The event object\r | |
417 | * @param {Object} data The event data\r | |
418 | */\r | |
b41a381f | 419 | onChannelListStart: function (e, data) {\r |
dde5dcd9 JA |
420 | /*global ChannelList */\r |
421 | kiwi.front.cache.list = new ChannelList();\r | |
422 | console.profile('list');\r | |
b41a381f | 423 | },\r |
5a29866a JA |
424 | /**\r |
425 | * Handles the channelList event\r | |
426 | * @param {eventObject} e The event object\r | |
427 | * @param {Object} data The event data\r | |
428 | */\r | |
b41a381f | 429 | onChannelList: function (e, data) {\r |
dde5dcd9 | 430 | kiwi.front.cache.list.addChannel(data.chans);\r |
b41a381f | 431 | },\r |
5a29866a JA |
432 | /**\r |
433 | * Handles the channelListEnd event\r | |
434 | * @param {eventObject} e The event object\r | |
435 | * @param {Object} data The event data\r | |
436 | */\r | |
b41a381f | 437 | onChannelListEnd: function (e, data) {\r |
dde5dcd9 JA |
438 | kiwi.front.cache.list.show();\r |
439 | console.profileEnd();\r | |
b41a381f D |
440 | },\r |
441 | \r | |
5a29866a JA |
442 | /**\r |
443 | * Handles the banList event\r | |
444 | * @param {eventObject} e The event object\r | |
445 | * @param {Object} data The event data\r | |
446 | */\r | |
936eabe7 JA |
447 | onBanList: function (e, data) {\r |
448 | },\r | |
449 | \r | |
5a29866a JA |
450 | /**\r |
451 | * Handles the banListEnd event\r | |
452 | * @param {eventObject} e The event object\r | |
453 | * @param {Object} data The event data\r | |
454 | */\r | |
936eabe7 JA |
455 | onBanListEnd: function (e, data) {\r |
456 | },\r | |
b41a381f | 457 | \r |
5a29866a JA |
458 | /**\r |
459 | * Handles the join event\r | |
460 | * @param {eventObject} e The event object\r | |
461 | * @param {Object} data The event data\r | |
462 | */\r | |
b41a381f | 463 | onJoin: function (e, data) {\r |
bb6a9775 | 464 | var chan = kiwi.channels.getByName(data.channel);\r |
54a2a4e1 JA |
465 | if (!chan) {\r |
466 | chan = new kiwi.model.Channel({"name": data.channel.toLowerCase()});\r | |
bb6a9775 | 467 | kiwi.channels.add(chan);\r |
ce119b06 | 468 | // No need to add ourselves to the MemberList as RPL_NAMESREPLY will be next\r |
bb6a9775 | 469 | chan.view.show();\r |
54a2a4e1 | 470 | } else {\r |
ce119b06 | 471 | chan.get("members").add(new kiwi.model.Member({"nick": data.nick, "modes": [], "ident": data.ident, "hostname": data.hostname}));\r |
b41a381f | 472 | }\r |
b41a381f | 473 | },\r |
5a29866a JA |
474 | /**\r |
475 | * Handles the part event\r | |
476 | * @param {eventObject} e The event object\r | |
477 | * @param {Object} data The event data\r | |
478 | */\r | |
b41a381f | 479 | onPart: function (e, data) {\r |
ce119b06 | 480 | var chan, members, cid;\r |
bb6a9775 | 481 | chan = kiwi.channels.getByName(data.channel);\r |
54a2a4e1 | 482 | if (chan) {\r |
b41a381f | 483 | if (data.nick === kiwi.gateway.nick) {\r |
54a2a4e1 JA |
484 | chan.trigger("close");\r |
485 | } else {\r | |
54a2a4e1 | 486 | members = chan.get("members");\r |
ce119b06 | 487 | members.remove(members.detect(function (m) {\r |
54a2a4e1 | 488 | return data.nick === m.get("nick");\r |
ce119b06 | 489 | }).cid, {"message": data.message})\r |
b41a381f | 490 | }\r |
b41a381f D |
491 | }\r |
492 | },\r | |
5a29866a JA |
493 | /**\r |
494 | * Handles the kick event\r | |
495 | * @param {eventObject} e The event object\r | |
496 | * @param {Object} data The event data\r | |
497 | */\r | |
b41a381f | 498 | onKick: function (e, data) {\r |
bb6a9775 JA |
499 | var panel = kiwi.channels.getByName(data.channel);\r |
500 | if (panel) {\r | |
501 | // If this is us, close the panel\r | |
502 | if (data.kicked === kiwi.gateway.nick) {\r | |
503 | kiwi.channels.remove(panel);\r | |
504 | kiwi.channels.server.addMsg(null, ' ', '=== You have been kicked from ' + data.channel + '. ' + data.message, 'status kick');\r | |
505 | return;\r | |
506 | }\r | |
507 | \r | |
508 | panel.addMsg(null, ' ', '<-- ' + data.kicked + ' kicked by ' + data.nick + '(' + data.message + ')', 'action kick', 'color:#990000;');\r | |
509 | panel.userlist.removeUser(data.nick);\r | |
510 | }\r | |
b41a381f | 511 | },\r |
5a29866a JA |
512 | /**\r |
513 | * Handles the nick event\r | |
514 | * @param {eventObject} e The event object\r | |
515 | * @param {Object} data The event data\r | |
516 | */\r | |
b41a381f | 517 | onNick: function (e, data) {\r |
bb6a9775 JA |
518 | if (data.nick === kiwi.gateway.nick) {\r |
519 | kiwi.gateway.nick = data.newnick;\r | |
520 | kiwi.front.ui.doLayout();\r | |
521 | }\r | |
b41a381f | 522 | \r |
bb6a9775 JA |
523 | kiwi.channels.each(function (panel) {\r |
524 | if (panel.isChannel) {\r | |
525 | var member = panel.get("members").getByNick(data.nick);\r | |
526 | if (member) {\r | |
527 | member.set({"nick": data.newnick});\r | |
528 | panel.addMsg(null, ' ', '=== ' + data.nick + ' is now known as ' + data.newnick, 'action changenick');\r | |
529 | }\r | |
530 | }\r | |
531 | });\r | |
b41a381f | 532 | },\r |
5a29866a JA |
533 | /**\r |
534 | * Handles the quit event\r | |
535 | * @param {eventObject} e The event object\r | |
536 | * @param {Object} data The event data\r | |
537 | */\r | |
b41a381f | 538 | onQuit: function (e, data) {\r |
ce119b06 | 539 | var chan, members, member;\r |
bb6a9775 | 540 | kiwi.channels.forEach(function (chan) {\r |
ce119b06 JA |
541 | members = chan.get("members");\r |
542 | member = members.detect(function (m) {\r | |
543 | return data.nick === m.get("nick");\r | |
544 | });\r | |
545 | if (member) {\r | |
546 | members.trigger("quit", {"member": member, "message": data.message});\r | |
547 | members.remove(member.cid);\r | |
548 | }\r | |
549 | });\r | |
b41a381f | 550 | },\r |
5a29866a JA |
551 | /**\r |
552 | * Handles the channelRedirect event\r | |
553 | * @param {eventObject} e The event object\r | |
554 | * @param {Object} data The event data\r | |
555 | */\r | |
b41a381f | 556 | onChannelRedirect: function (e, data) {\r |
54a2a4e1 JA |
557 | //var tab = Tabview.getTab(data.from);\r |
558 | //tab.close();\r | |
559 | //tab = new Tabview(data.to);\r | |
560 | //tab.addMsg(null, ' ', '=== Redirected from ' + data.from, 'action');\r | |
b41a381f D |
561 | },\r |
562 | \r | |
5a29866a JA |
563 | /**\r |
564 | * Handles the IRCError event\r | |
565 | * @param {eventObject} e The event object\r | |
566 | * @param {Object} data The event data\r | |
567 | */\r | |
b41a381f | 568 | onIRCError: function (e, data) {\r |
54a2a4e1 | 569 | /*var t_view,\r |
b41a381f D |
570 | tab = Tabview.getTab(data.channel);\r |
571 | if (data.channel !== undefined && tab) {\r | |
572 | t_view = data.channel;\r | |
573 | } else {\r | |
574 | t_view = 'server';\r | |
575 | tab = Tabview.getServerTab();\r | |
576 | }\r | |
577 | \r | |
578 | switch (data.error) {\r | |
579 | case 'banned_from_channel':\r | |
580 | tab.addMsg(null, ' ', '=== You are banned from ' + data.channel + '. ' + data.reason, 'status');\r | |
581 | if (t_view !== 'server') {\r | |
582 | tab.safe_to_close = true;\r | |
583 | }\r | |
584 | break;\r | |
585 | case 'bad_channel_key':\r | |
586 | tab.addMsg(null, ' ', '=== Bad channel key for ' + data.channel, 'status');\r | |
587 | if (t_view !== 'server') {\r | |
588 | tab.safe_to_close = true;\r | |
589 | }\r | |
590 | break;\r | |
591 | case 'invite_only_channel':\r | |
592 | tab.addMsg(null, ' ', '=== ' + data.channel + ' is invite only.', 'status');\r | |
593 | if (t_view !== 'server') {\r | |
dde5dcd9 | 594 | tab.safe_to_close = true;\r |
b41a381f D |
595 | }\r |
596 | break;\r | |
597 | case 'channel_is_full':\r | |
598 | tab.addMsg(null, ' ', '=== ' + data.channel + ' is full.', 'status');\r | |
599 | if (t_view !== 'server') {\r | |
600 | tab.safe_to_close = true;\r | |
601 | }\r | |
602 | break;\r | |
603 | case 'chanop_privs_needed':\r | |
604 | tab.addMsg(null, ' ', '=== ' + data.reason, 'status');\r | |
605 | break;\r | |
606 | case 'no_such_nick':\r | |
607 | Tabview.getServerTab().addMsg(null, ' ', '=== ' + data.nick + ': ' + data.reason, 'status');\r | |
608 | break;\r | |
609 | case 'nickname_in_use':\r | |
610 | Tabview.getServerTab().addMsg(null, ' ', '=== The nickname ' + data.nick + ' is already in use. Please select a new nickname', 'status');\r | |
3586a76e | 611 | kiwi.front.ui.showChangeNick('That nick is already taken');\r |
b41a381f D |
612 | break;\r |
613 | default:\r | |
614 | // We don't know what data contains, so don't do anything with it.\r | |
af979742 | 615 | console.log(e, data);\r |
54a2a4e1 | 616 | }*/\r |
b41a381f D |
617 | },\r |
618 | \r | |
619 | \r | |
620 | \r | |
621 | \r | |
622 | \r | |
623 | \r | |
624 | \r | |
5a29866a JA |
625 | /**\r |
626 | * Handles the sync event\r | |
627 | * @param {eventObject} e The event object\r | |
628 | * @param {Object} data The event data\r | |
629 | */\r | |
b41a381f D |
630 | onSync: function (e, data) {\r |
631 | // Set any settings\r | |
632 | if (data.nick !== undefined) {\r | |
633 | kiwi.gateway.nick = data.nick;\r | |
634 | }\r | |
635 | \r | |
636 | // Add the tabviews\r | |
637 | if (data.tabviews !== undefined) {\r | |
638 | _.each(data.tabviews, function (tab) {\r | |
639 | var newTab;\r | |
640 | if (!Tabview.tabExists(tab.name)) {\r | |
641 | newTab = new Tabview(kiwi.gateway.channel_prefix + tab.name);\r | |
642 | \r | |
643 | if (tab.userlist !== undefined) {\r | |
644 | kiwi.front.events.onUserList({'channel': kiwi.gateway.channel_prefix + tab.name, 'users': tab.userlist.getUsers(false)});\r | |
645 | }\r | |
646 | }\r | |
647 | });\r | |
648 | }\r | |
649 | \r | |
3586a76e | 650 | kiwi.front.ui.doLayout();\r |
bfdeb872 | 651 | }\r |
b41a381f D |
652 | \r |
653 | \r | |
bfdeb872 | 654 | }; |