Input aliasing (InputPreProcessor)
[KiwiIRC.git] / client_backbone / dev / model_application.js
CommitLineData
2c80d916
D
1kiwi.model.Application = Backbone.Model.extend(new (function () {\r
2 var that = this;\r
3\r
99e0111e
D
4 // The auto connect details entered into the server select box\r
5 var auto_connect_details = {};\r
6\r
b5141adb
D
7 /** Instance of kiwi.model.PanelList */\r
8 this.panels = null;\r
9\r
f8ce99b4
D
10 /** kiwi.view.Application */\r
11 this.view;\r
12\r
13 /** kiwi.view.StatusMessage */\r
14 this.message;\r
15\r
a37b761a
D
16 /* Address for the kiwi server */\r
17 this.kiwi_server = null;\r
18\r
2c80d916
D
19 this.initialize = function () {\r
20 // Update `that` with this new Model object\r
21 that = this;\r
a37b761a
D
22\r
23 // Best guess at where the kiwi server is\r
24 this.detectKiwiServer();\r
48d660e6 25 };\r
2c80d916 26\r
48d660e6 27 this.start = function () {\r
9df70c63
D
28 // Only debug if set in the querystring\r
29 if (!getQueryVariable('debug')) {\r
c4fc06f6 30 //manageDebug(false);\r
9df70c63 31 } else {\r
c4fc06f6 32 //manageDebug(true);\r
9df70c63
D
33 }\r
34 \r
2c80d916
D
35 // Set the gateway up\r
36 kiwi.gateway = new kiwi.model.Gateway();\r
37 this.bindGatewayCommands(kiwi.gateway);\r
38\r
2c80d916 39 this.initializeClient();\r
721ad945
D
40 this.initializeGlobals();\r
41\r
2af70088 42 this.view.barsHide(true);\r
2c80d916 43\r
4c1f047c 44 this.panels.server.server_login.bind('server_connect', function (event) {\r
a37b761a 45 var server_login = this;\r
c4fc06f6 46 auto_connect_details = event;\r
a37b761a 47\r
c4fc06f6
D
48 server_login.networkConnecting();\r
49 \r
50 $script(that.kiwi_server + '/socket.io/socket.io.js?ts='+(new Date().getTime()), function () {\r
51 if (!window.io) {\r
52 kiwiServerNotFound();\r
53 return;\r
54 }\r
55 kiwi.gateway.set('kiwi_server', that.kiwi_server + '/kiwi');\r
a37b761a 56 kiwi.gateway.set('nick', event.nick);\r
0f3d4221
D
57 \r
58 kiwi.gateway.connect(event.server, event.port, event.ssl, event.password, function () {});\r
a37b761a 59 });\r
2af70088 60 });\r
2c80d916 61\r
2c80d916
D
62 };\r
63\r
64\r
c4fc06f6
D
65 function kiwiServerNotFound (e) {\r
66 that.panels.server.server_login.showError();\r
67 }\r
68\r
69\r
a37b761a
D
70 this.detectKiwiServer = function () {\r
71 // If running from file, default to localhost:7777 by default\r
72 if (window.location.protocol === 'file') {\r
73 this.kiwi_server = 'http://localhost:7777';\r
74\r
75 } else {\r
76 // Assume the kiwi server is on the same server\r
77 var proto = window.location.protocol === 'https' ?\r
78 'https' :\r
79 'http';\r
80\r
c4fc06f6 81 this.kiwi_server = proto + '://' + window.location.host + ':' + (window.location.port || '80');\r
a37b761a
D
82 }\r
83 \r
84 };\r
85\r
86\r
2c80d916 87 this.initializeClient = function () {\r
b5141adb 88 this.view = new kiwi.view.Application({model: this, el: this.get('container')});\r
2c80d916
D
89\r
90 \r
91 /**\r
92 * Set the UI components up\r
93 */\r
4c1f047c
D
94 this.panels = new kiwi.model.PanelList();\r
95\r
2c80d916
D
96 this.controlbox = new kiwi.view.ControlBox({el: $('#controlbox')[0]});\r
97 this.bindControllboxCommands(this.controlbox);\r
98\r
52773494
D
99 this.topicbar = new kiwi.view.TopicBar({el: $('#topic')[0]});\r
100\r
f8ce99b4
D
101 this.message = new kiwi.view.StatusMessage({el: $('#status_message')[0]});\r
102\r
4c1f047c 103 \r
2c80d916
D
104 this.panels.server.view.show();\r
105\r
106 // Rejigg the UI sizes\r
107 this.view.doLayout();\r
2af70088
D
108\r
109 // Populate the server select box with defaults\r
110 this.panels.server.server_login.populateFields({\r
0f3d4221
D
111 nick: getQueryVariable('nick') || 'kiwi_' + Math.ceil(Math.random() * 10000).toString(),\r
112 server: getQueryVariable('server') || 'irc.kiwiirc.com',\r
113 port: 6667,\r
114 ssl: false,\r
115 channel: window.location.hash || '#test'\r
2af70088 116 });\r
2c80d916
D
117 };\r
118\r
119\r
721ad945
D
120 this.initializeGlobals = function () {\r
121 kiwi.global.control = this.controlbox;\r
122 };\r
123\r
124\r
2c80d916
D
125\r
126 this.bindGatewayCommands = function (gw) {\r
127 gw.on('onmotd', function (event) {\r
128 that.panels.server.addMsg(event.server, event.msg, 'motd');\r
129 });\r
130\r
131\r
99e0111e
D
132 gw.on('onconnect', function (event) {\r
133 that.view.barsShow();\r
134 \r
135 if (auto_connect_details.channel) {\r
136 kiwi.gateway.join(auto_connect_details.channel);\r
137 }\r
138 });\r
2c80d916
D
139\r
140\r
f8ce99b4
D
141 (function () {\r
142 var gw_stat = 0;\r
143\r
144 gw.on('disconnect', function (event) {\r
145 that.message.text('You have been disconnected. Attempting to reconnect..');\r
146 gw_stat = 1;\r
147 });\r
148 gw.on('reconnecting', function (event) {\r
149 that.message.text('You have been disconnected. Attempting to reconnect again in ' + (event.delay/1000) + ' seconds..');\r
150 });\r
151 gw.on('connect', function (event) {\r
152 if (gw_stat !== 1) return;\r
153\r
154 that.message.text('It\'s OK, you\'re connected again :)', {timeout: 5000});\r
155 gw_stat = 0;\r
156 });\r
157 })();\r
158\r
159\r
2c80d916 160 gw.on('onjoin', function (event) {\r
2c80d916
D
161 var c, members, user;\r
162 c = that.panels.getByName(event.channel);\r
163 if (!c) {\r
164 c = new kiwi.model.Channel({name: event.channel});\r
165 that.panels.add(c);\r
166 }\r
167\r
168 members = c.get('members');\r
169 if (!members) return;\r
170\r
171 user = new kiwi.model.Member({nick: event.nick, ident: event.ident, hostname: event.hostname});\r
172 members.add(user);\r
173 // TODO: highlight the new channel in some way\r
174 });\r
175\r
176\r
177 gw.on('onpart', function (event) {\r
5712c148
D
178 var channel, members, user,\r
179 part_options = {};\r
180\r
181 part_options.type = 'part';\r
182 part_options.message = event.message || '';\r
2c80d916
D
183\r
184 channel = that.panels.getByName(event.channel);\r
185 if (!channel) return;\r
186\r
187 // If this is us, close the panel\r
188 if (event.nick === kiwi.gateway.get('nick')) {\r
189 channel.close();\r
190 return;\r
191 }\r
192\r
193 members = channel.get('members');\r
194 if (!members) return;\r
195\r
196 user = members.getByNick(event.nick);\r
197 if (!user) return;\r
198\r
5712c148
D
199 members.remove(user, part_options);\r
200 });\r
201\r
202\r
203 gw.on('onquit', function (event) {\r
204 var member, members,\r
205 quit_options = {};\r
206\r
207 quit_options.type = 'quit';\r
208 quit_options.message = event.message || '';\r
209\r
210 $.each(that.panels.models, function (index, panel) {\r
211 if (!panel.isChannel()) return;\r
212\r
213 member = panel.get('members').getByNick(event.nick);\r
214 if (member) {\r
215 panel.get('members').remove(member, quit_options);\r
216 }\r
217 });\r
2c80d916
D
218 });\r
219\r
220\r
94016cd4
D
221 gw.on('onkick', function (event) {\r
222 var channel, members, user,\r
223 part_options = {};\r
224\r
225 part_options.type = 'kick';\r
226 part_options.by = event.nick;\r
227 part_options.message = event.message || '';\r
228\r
229 channel = that.panels.getByName(event.channel);\r
230 if (!channel) return;\r
231\r
232 members = channel.get('members');\r
233 if (!members) return;\r
234\r
235 user = members.getByNick(event.kicked);\r
236 if (!user) return;\r
237\r
238 members.remove(user, part_options);\r
239\r
240 if (event.kicked === kiwi.gateway.get('nick')) {\r
241 members.reset([]);\r
242 }\r
243 \r
244 });\r
245\r
246\r
2c80d916
D
247 gw.on('onmsg', function (event) {\r
248 var panel,\r
249 is_pm = (event.channel == kiwi.gateway.get('nick'));\r
250\r
251 if (is_pm) {\r
252 // If a panel isn't found for this PM, create one\r
253 panel = that.panels.getByName(event.nick);\r
254 if (!panel) {\r
255 panel = new kiwi.model.Channel({name: event.nick});\r
256 that.panels.add(panel);\r
257 }\r
258\r
259 } else {\r
260 // If a panel isn't found for this channel, reroute to the\r
261 // server panel\r
262 panel = that.panels.getByName(event.channel);\r
263 if (!panel) {\r
264 panel = that.panels.server;\r
265 }\r
266 }\r
267 \r
268 panel.addMsg(event.nick, event.msg);\r
269 });\r
270\r
271\r
272 gw.on('onnotice', function (event) {\r
68314431
D
273 var panel;\r
274\r
9783a703
D
275 // Find a panel for the destination(channel) or who its from\r
276 panel = that.panels.getByName(event.target) || that.panels.getByName(event.nick);\r
68314431
D
277 if (!panel) {\r
278 panel = that.panels.server;\r
279 }\r
280\r
281 panel.addMsg('[' + (event.nick||'') + ']', event.msg);\r
2c80d916
D
282 });\r
283\r
284\r
0f40d499
D
285 gw.on('onaction', function (event) {\r
286 var panel,\r
287 is_pm = (event.channel == kiwi.gateway.get('nick'));\r
288\r
289 if (is_pm) {\r
290 // If a panel isn't found for this PM, create one\r
291 panel = that.panels.getByName(event.nick);\r
292 if (!panel) {\r
293 panel = new kiwi.model.Channel({name: event.nick});\r
294 that.panels.add(panel);\r
295 }\r
296\r
297 } else {\r
298 // If a panel isn't found for this channel, reroute to the\r
299 // server panel\r
300 panel = that.panels.getByName(event.channel);\r
301 if (!panel) {\r
302 panel = that.panels.server;\r
303 }\r
304 }\r
305\r
306 panel.addMsg('', '* ' + event.nick + ' ' + event.msg, 'action');\r
307 });\r
308\r
309\r
2c80d916
D
310 gw.on('ontopic', function (event) {\r
311 var c;\r
312 c = that.panels.getByName(event.channel);\r
313 if (!c) return;\r
314\r
315 // Set the channels topic\r
316 c.set('topic', event.topic);\r
317\r
318 // If this is the active channel, update the topic bar too\r
48d660e6 319 if (c.get('name') === kiwi.app.panels.active.get('name')) {\r
52773494 320 that.topicbar.setCurrentTopic(event.topic);\r
2c80d916
D
321 }\r
322 });\r
323\r
324\r
4a9e8527
D
325 gw.on('ontopicsetby', function (event) {\r
326 var c, when;\r
327 c = that.panels.getByName(event.channel);\r
328 if (!c) return;\r
329\r
330 when = new Date(event.when * 1000).toLocaleString();\r
331 c.addMsg('', 'Topic set by ' + event.nick + ' at ' + when, 'topic');\r
332 });\r
333\r
334\r
2c80d916
D
335 gw.on('onuserlist', function (event) {\r
336 var channel;\r
337 channel = that.panels.getByName(event.channel);\r
338\r
339 // If we didn't find a channel for this, may aswell leave\r
340 if (!channel) return;\r
341\r
342 channel.temp_userlist = channel.temp_userlist || [];\r
343 _.each(event.users, function (item) {\r
344 var user = new kiwi.model.Member({nick: item.nick, modes: item.modes});\r
345 channel.temp_userlist.push(user);\r
346 });\r
347 });\r
348\r
349\r
350 gw.on('onuserlist_end', function (event) {\r
351 var channel;\r
352 channel = that.panels.getByName(event.channel);\r
353\r
354 // If we didn't find a channel for this, may aswell leave\r
355 if (!channel) return;\r
356\r
357 // Update the members list with the new list\r
358 channel.get('members').reset(channel.temp_userlist || []);\r
359\r
360 // Clear the temporary userlist\r
361 delete channel.temp_userlist;\r
362 });\r
dfe8ef37
D
363\r
364\r
365 gw.on('onmode', function (event) {\r
366 var channel, members, member;\r
367\r
368 if (!event.channel) return;\r
369 channel = that.panels.getByName(event.channel);\r
370 if (!channel) return;\r
371\r
372 members = channel.get('members');\r
373 if (!members) return;\r
374\r
375 member = members.getByNick(event.effected_nick);\r
376 if (!member) return;\r
377\r
378 if (event.mode[0] === '+') {\r
379 member.addMode(event.mode.substr(1));\r
380 } else if (event.mode[0] === '-') {\r
381 member.removeMode(event.mode.substr(1));\r
382 }\r
967687fc
D
383 });\r
384\r
385\r
386 gw.on('onnick', function (event) {\r
387 var member;\r
dfe8ef37 388\r
967687fc
D
389 $.each(that.panels.models, function (index, panel) {\r
390 if (!panel.isChannel()) return;\r
391\r
392 member = panel.get('members').getByNick(event.nick);\r
393 if (member) {\r
394 member.set('nick', event.newnick);\r
395 panel.addMsg('', '== ' + event.nick + ' is now known as ' + event.newnick, 'action nick');\r
396 }\r
397 });\r
dfe8ef37 398 });\r
a7758021
D
399\r
400\r
401 gw.on('onwhois', function (event) {\r
402 /*globals secondsToTime */\r
403 var logon_date, idle_time = '', panel;\r
404\r
405 if (event.end) {\r
406 return;\r
407 }\r
408\r
409 if (typeof event.idle !== 'undefined') {\r
410 idle_time = secondsToTime(parseInt(event.idle, 10));\r
411 idle_time = idle_time.h.toString().lpad(2, "0") + ':' + idle_time.m.toString().lpad(2, "0") + ':' + idle_time.s.toString().lpad(2, "0");\r
412 }\r
413\r
414 panel = kiwi.app.panels.active;\r
415 if (event.msg) {\r
416 panel.addMsg(event.nick, event.msg, 'whois');\r
417 } else if (event.logon) {\r
418 logon_date = new Date();\r
419 logon_date.setTime(event.logon * 1000);\r
420 logon_date = logon_date.toLocaleString();\r
421\r
422 panel.addMsg(event.nick, 'idle for ' + idle_time + ', signed on ' + logon_date, 'whois');\r
423 } else {\r
424 panel.addMsg(event.nick, 'idle for ' + idle_time, 'whois');\r
425 }\r
426 });\r
3f77e986
D
427\r
428\r
429 gw.on('onirc_error', function (data) {\r
430 var panel, tmp;\r
431\r
432 if (data.channel !== undefined && !(panel = kiwi.app.panels.getByName(data.channel))) {\r
433 panel = kiwi.app.panels.server;\r
434 }\r
435\r
436 switch (data.error) {\r
437 case 'banned_from_channel':\r
438 panel.addMsg(' ', '=== You are banned from ' + data.channel + '. ' + data.reason, 'status');\r
439 kiwi.app.message.text('You are banned from ' + data.channel + '. ' + data.reason);\r
440 break;\r
441 case 'bad_channel_key':\r
442 panel.addMsg(' ', '=== Bad channel key for ' + data.channel, 'status');\r
443 kiwi.app.message.text('Bad channel key or password for ' + data.channel);\r
444 break;\r
445 case 'invite_only_channel':\r
446 panel.addMsg(' ', '=== ' + data.channel + ' is invite only.', 'status');\r
447 kiwi.app.message.text(data.channel + ' is invite only');\r
448 break;\r
449 case 'channel_is_full':\r
450 panel.addMsg(' ', '=== ' + data.channel + ' is full.', 'status');\r
451 kiwi.app.message.text(data.channel + ' is full');\r
452 break;\r
453 case 'chanop_privs_needed':\r
454 panel.addMsg(' ', '=== ' + data.reason, 'status');\r
455 kiwi.app.message.text(data.reason + ' (' + data.channel + ')');\r
456 break;\r
457 case 'no_such_nick':\r
458 tmp = kiwi.app.panels.getByName(data.nick);\r
459 if (tmp) {\r
460 tmp.addMsg(' ', '=== ' + data.nick + ': ' + data.reason, 'status');\r
461 } else {\r
462 kiwi.app.panels.server.addMsg(' ', '=== ' + data.nick + ': ' + data.reason, 'status');\r
463 }\r
464 break;\r
465 case 'nickname_in_use':\r
466 kiwi.app.panels.server.addMsg(' ', '=== The nickname ' + data.nick + ' is already in use. Please select a new nickname', 'status');\r
467 if (kiwi.app.panels.server !== kiwi.app.panels.active) {\r
468 kiwi.app.message.text('The nickname "' + data.nick + '" is already in use. Please select a new nickname');\r
469 }\r
470 // TODO: Show a nick change box or something\r
471 break;\r
472 default:\r
473 // We don't know what data contains, so don't do anything with it.\r
474 //kiwi.front.tabviews.server.addMsg(null, ' ', '=== ' + data, 'status');\r
475 }\r
476 });\r
2c80d916
D
477 };\r
478\r
479\r
480\r
481 /**\r
482 * Bind to certain commands that may be typed into the control box\r
483 */\r
484 this.bindControllboxCommands = function (controlbox) {\r
64c6bcb4
D
485 $.extend(controlbox.preprocessor.aliases, {\r
486 '/p': '/part $1+',\r
487 '/me': '/action $1+',\r
488 '/j': '/join $1+',\r
489 '/q': '/query $1+',\r
490 '/k': '/kick $1+',\r
491 });\r
492\r
2c80d916
D
493 controlbox.on('unknown_command', this.unknownCommand);\r
494\r
495 controlbox.on('command', this.allCommands);\r
496 controlbox.on('command_msg', this.msgCommand);\r
497\r
0f40d499 498 controlbox.on('command_action', this.actionCommand);\r
0f40d499 499\r
2c80d916 500 controlbox.on('command_join', this.joinCommand);\r
2c80d916
D
501\r
502 controlbox.on('command_part', this.partCommand);\r
2c80d916
D
503\r
504 controlbox.on('command_nick', function (ev) {\r
505 kiwi.gateway.changeNick(ev.params[0]);\r
506 });\r
507\r
9783a703 508 controlbox.on('command_query', this.queryCommand);\r
9783a703 509\r
b5141adb
D
510 controlbox.on('command_topic', this.topicCommand);\r
511\r
68314431
D
512 controlbox.on('command_notice', this.noticeCommand);\r
513\r
31325e67
D
514 controlbox.on('command_quote', this.quoteCommand);\r
515\r
e32b5eca
D
516 controlbox.on('command_kick', this.kickCommand);\r
517\r
31325e67 518\r
2c80d916
D
519 controlbox.on('command_css', function (ev) {\r
520 var queryString = '?reload=' + new Date().getTime();\r
521 $('link[rel="stylesheet"]').each(function () {\r
522 this.href = this.href.replace(/\?.*|$/, queryString);\r
523 });\r
524 });\r
bacc69cb 525\r
19cc6364
D
526 controlbox.on('command_js', function (ev) {\r
527 if (!ev.params[0]) return;\r
528 $script(ev.params[0] + '?' + (new Date().getTime()));\r
529 });\r
530\r
64c6bcb4
D
531 controlbox.on('command_alias', function (ev) {\r
532 // No parameters passed so list them\r
533 if (!ev.params[1]) {\r
534 $.each(controlbox.preprocessor.aliases, function (name, rule) {\r
535 kiwi.app.panels.server.addMsg(' ', name + ' => ' + rule);\r
536 });\r
537 return;\r
538 }\r
539\r
540 // Deleting an alias?\r
541 if (ev.params[0] === 'del' || ev.params[0] === 'delete') {\r
542 var name = ev.params[1];\r
543 if (name[0] !== '/') name = '/' + name;\r
544 delete controlbox.preprocessor.aliases[name];\r
545 return;\r
546 }\r
547\r
548 // Add the alias\r
549 var name = ev.params[0];\r
550 ev.params.shift();\r
551 var rule = ev.params.join(' ');\r
552\r
553 if (name[0] !== '/') name = '/' + name;\r
554 console.log('added', name, 'as', rule);\r
555 controlbox.preprocessor.aliases[name] = rule;\r
556 });\r
557\r
26738910 558 controlbox.on('command_applet', this.appletCommand);\r
19cc6364 559 controlbox.on('command_settings', this.settingsCommand);\r
2c80d916
D
560 };\r
561\r
9783a703 562 // A fallback action. Send a raw command to the server\r
2c80d916 563 this.unknownCommand = function (ev) {\r
9783a703
D
564 var raw_cmd = ev.command + ' ' + ev.params.join(' ');\r
565 console.log('RAW: ' + raw_cmd);\r
566 kiwi.gateway.raw(raw_cmd);\r
2c80d916
D
567 };\r
568\r
569 this.allCommands = function (ev) {\r
570 console.log('allCommands', ev);\r
571 };\r
572\r
573 this.joinCommand = function (ev) {\r
0e12f51d
D
574 var channel, channel_names;\r
575\r
576 channel_names = ev.params.join(' ').split(',');\r
577\r
578 $.each(channel_names, function (index, channel_name) {\r
579 // Trim any whitespace off the name\r
580 channel_name = channel_name.trim();\r
581\r
582 // Check if we have the panel already. If not, create it\r
583 channel = that.panels.getByName(channel_name);\r
584 if (!channel) {\r
585 channel = new kiwi.model.Channel({name: channel_name});\r
586 kiwi.app.panels.add(channel);\r
587 }\r
588\r
589 kiwi.gateway.join(channel_name);\r
590 });\r
591\r
592 if (channel) channel.view.show();\r
593 \r
2c80d916
D
594 };\r
595\r
9783a703
D
596 this.queryCommand = function (ev) {\r
597 var destination, panel;\r
598\r
599 destination = ev.params[0];\r
600\r
601 // Check if we have the panel already. If not, create it\r
602 panel = that.panels.getByName(destination);\r
603 if (!panel) {\r
604 panel = new kiwi.model.Channel({name: destination});\r
605 kiwi.app.panels.add(panel);\r
606 }\r
607\r
608 if (panel) panel.view.show();\r
609 \r
610 };\r
611\r
2c80d916 612 this.msgCommand = function (ev) {\r
9783a703
D
613 var destination = ev.params[0],\r
614 panel = that.panels.getByName(destination) || that.panels.server;\r
615\r
616 ev.params.shift();\r
617\r
618 panel.addMsg(kiwi.gateway.get('nick'), ev.params.join(' '));\r
619 kiwi.gateway.privmsg(destination, ev.params.join(' '));\r
2c80d916
D
620 };\r
621\r
0f40d499 622 this.actionCommand = function (ev) {\r
48d660e6 623 if (kiwi.app.panels.active === kiwi.app.panels.server) {\r
0f40d499
D
624 return;\r
625 }\r
626\r
48d660e6 627 var panel = kiwi.app.panels.active;\r
0f40d499
D
628 panel.addMsg('', '* ' + kiwi.gateway.get('nick') + ' ' + ev.params.join(' '), 'action');\r
629 kiwi.gateway.action(panel.get('name'), ev.params.join(' '));\r
630 };\r
631\r
2c80d916
D
632 this.partCommand = function (ev) {\r
633 if (ev.params.length === 0) {\r
48d660e6 634 kiwi.gateway.part(kiwi.app.panels.active.get('name'));\r
2c80d916
D
635 } else {\r
636 _.each(ev.params, function (channel) {\r
637 kiwi.gateway.part(channel);\r
638 });\r
639 }\r
52773494 640 // TODO: More responsive = close tab now, more accurate = leave until part event\r
48d660e6 641 //kiwi.app.panels.remove(kiwi.app.panels.active);\r
2c80d916
D
642 };\r
643\r
b5141adb
D
644 this.topicCommand = function (ev) {\r
645 var channel_name;\r
646\r
647 if (ev.params.length === 0) return;\r
648\r
649 if (that.isChannelName(ev.params[0])) {\r
650 channel_name = ev.params[0];\r
651 ev.params.shift();\r
652 } else {\r
48d660e6 653 channel_name = kiwi.app.panels.active.get('name');\r
b5141adb
D
654 }\r
655\r
656 kiwi.gateway.topic(channel_name, ev.params.join(' '));\r
657 };\r
658\r
68314431
D
659 this.noticeCommand = function (ev) {\r
660 var destination;\r
661\r
662 // Make sure we have a destination and some sort of message\r
663 if (ev.params.length <= 1) return;\r
664\r
665 destination = ev.params[0];\r
666 ev.params.shift();\r
667\r
668 kiwi.gateway.notice(destination, ev.params.join(' '));\r
669 };\r
670\r
31325e67
D
671 this.quoteCommand = function (ev) {\r
672 var raw = ev.params.join(' ');\r
673 kiwi.gateway.raw(raw);\r
674 };\r
675\r
e32b5eca
D
676 this.kickCommand = function (ev) {\r
677 var nick, panel = kiwi.app.panels.active;\r
678\r
679 if (!panel.isChannel()) return;\r
680\r
681 // Make sure we have a nick\r
682 if (ev.params.length === 0) return;\r
683\r
684 nick = ev.params[0];\r
685 ev.params.shift();\r
686\r
687 kiwi.gateway.kick(panel.get('name'), nick, ev.params.join(' '));\r
688 };\r
689\r
19cc6364
D
690 this.settingsCommand = function (ev) {\r
691 var panel = new kiwi.model.Applet();\r
692 panel.load(new kiwi.applets.Settings());\r
693 \r
694 kiwi.app.panels.add(panel);\r
695 panel.view.show();\r
bacc69cb
D
696 };\r
697\r
26738910
D
698 this.appletCommand = function (ev) {\r
699 if (!ev.params[0]) return;\r
700\r
701 var panel = new kiwi.model.Applet();\r
702\r
703 if (ev.params[1]) {\r
704 // Url and name given\r
705 panel.load(ev.params[0], ev.params[1]);\r
706 } else {\r
707 // Load a pre-loaded applet\r
708 if (kiwi.applets[ev.params[0]]) {\r
721ad945 709 panel.load(new kiwi.applets[ev.params[0]]());\r
26738910
D
710 } else {\r
711 kiwi.app.panels.server.addMsg('', 'Applet "' + ev.params[0] + '" does not exist');\r
712 return;\r
713 }\r
714 }\r
715 \r
716 kiwi.app.panels.add(panel);\r
717 panel.view.show();\r
718 };\r
719\r
2c80d916
D
720\r
721\r
722\r
723\r
b5141adb
D
724 this.isChannelName = function (channel_name) {\r
725 var channel_prefix = kiwi.gateway.get('channel_prefix');\r
726\r
727 if (!channel_name || !channel_name.length) return false;\r
728 return (channel_prefix.indexOf(channel_name[0]) > -1);\r
729 };\r
730\r
2dd6a025 731})());