--- /dev/null
+(function() {
+
+ function ClientUiCommands(app, controlbox) {
+ this.app = app;
+ this.controlbox = controlbox;
+
+ this.addDefaultAliases();
+ this.bindCommand(fn_to_bind);
+ }
+
+ _kiwi.misc.ClientUiCommands = ClientUiCommands;
+
+
+ // Add the default user command aliases
+ ClientUiCommands.prototype.addDefaultAliases = function() {
+ $.extend(this.controlbox.preprocessor.aliases, {
+ // General aliases
+ '/p': '/part $1+',
+ '/me': '/action $1+',
+ '/j': '/join $1+',
+ '/q': '/query $1+',
+ '/w': '/whois $1+',
+ '/raw': '/quote $1+',
+
+ // Op related aliases
+ '/op': '/quote mode $channel +o $1+',
+ '/deop': '/quote mode $channel -o $1+',
+ '/hop': '/quote mode $channel +h $1+',
+ '/dehop': '/quote mode $channel -h $1+',
+ '/voice': '/quote mode $channel +v $1+',
+ '/devoice': '/quote mode $channel -v $1+',
+ '/k': '/kick $channel $1+',
+ '/ban': '/quote mode $channel +b $1+',
+ '/unban': '/quote mode $channel -b $1+',
+
+ // Misc aliases
+ '/slap': '/me slaps $1 around a bit with a large trout'
+ });
+ };
+
+
+ /**
+ * Add a new command action
+ * @var command Object {'command:the_command': fn}
+ */
+ ClientUiCommands.prototype.bindCommand = function(command) {
+ var that = this;
+
+ _.each(command, function(fn, event_name) {
+ that.controlbox.on(event_name, _.bind(fn, that));
+ });
+ };
+
+
+
+
+ /**
+ * Default functions to bind to controlbox events
+ **/
+
+ var fn_to_bind = {
+ 'unknown_command': unknownCommand,
+ 'command': allCommands,
+ 'command:msg': msgCommand,
+ 'command:action': actionCommand,
+ 'command:join': joinCommand,
+ 'command:part': partCommand,
+ 'command:nick': nickCommand,
+ 'command:query': queryCommand,
+ 'command:invite': inviteCommand,
+ 'command:topic': topicCommand,
+ 'command:notice': noticeCommand,
+ 'command:quote': quoteCommand,
+ 'command:kick': kickCommand,
+ 'command:clear': clearCommand,
+ 'command:ctcp': ctcpCommand,
+ 'command:server': serverCommand,
+ 'command:whois': whoisCommand,
+ 'command:whowas': whowasCommand,
+ 'command:encoding': encodingCommand,
+ 'command:channel': channelCommand,
+ 'command:applet': appletCommand,
+ 'command:settings': settingsCommand,
+ 'command:script': scriptCommand
+ };
+
+
+ fn_to_bind['command:css'] = function (ev) {
+ var queryString = '?reload=' + new Date().getTime();
+ $('link[rel="stylesheet"]').each(function () {
+ this.href = this.href.replace(/\?.*|$/, queryString);
+ });
+ };
+
+
+ fn_to_bind['command:js'] = function (ev) {
+ if (!ev.params[0]) return;
+ $script(ev.params[0] + '?' + (new Date().getTime()));
+ };
+
+
+ fn_to_bind['command:set'] = function (ev) {
+ if (!ev.params[0]) return;
+
+ var setting = ev.params[0],
+ value;
+
+ // Do we have a second param to set a value?
+ if (ev.params[1]) {
+ ev.params.shift();
+
+ value = ev.params.join(' ');
+
+ // If we're setting a true boolean value..
+ if (value === 'true')
+ value = true;
+
+ // If we're setting a false boolean value..
+ if (value === 'false')
+ value = false;
+
+ // If we're setting a number..
+ if (parseInt(value, 10).toString() === value)
+ value = parseInt(value, 10);
+
+ _kiwi.global.settings.set(setting, value);
+ }
+
+ // Read the value to the user
+ this.app.panels().active.addMsg('', styleText('set_setting', {text: setting + ' = ' + _kiwi.global.settings.get(setting).toString()}));
+ };
+
+
+ fn_to_bind['command:save'] = function (ev) {
+ _kiwi.global.settings.save();
+ this.app.panels().active.addMsg('', styleText('settings_saved', {text: translateText('client_models_application_settings_saved')}));
+ };
+
+
+ fn_to_bind['command:alias'] = function (ev) {
+ var that = this,
+ name, rule;
+
+ // No parameters passed so list them
+ if (!ev.params[1]) {
+ $.each(controlbox.preprocessor.aliases, function (name, rule) {
+ that.app.panels().server.addMsg(' ', styleText('list_aliases', {text: name + ' => ' + rule}));
+ });
+ return;
+ }
+
+ // Deleting an alias?
+ if (ev.params[0] === 'del' || ev.params[0] === 'delete') {
+ name = ev.params[1];
+ if (name[0] !== '/') name = '/' + name;
+ delete controlbox.preprocessor.aliases[name];
+ return;
+ }
+
+ // Add the alias
+ name = ev.params[0];
+ ev.params.shift();
+ rule = ev.params.join(' ');
+
+ // Make sure the name starts with a slash
+ if (name[0] !== '/') name = '/' + name;
+
+ // Now actually add the alias
+ controlbox.preprocessor.aliases[name] = rule;
+ };
+
+
+ fn_to_bind['command:ignore'] = function (ev) {
+ var that = this,
+ list = this.app.connections.active_connection.get('ignore_list');
+
+ // No parameters passed so list them
+ if (!ev.params[0]) {
+ if (list.length > 0) {
+ this.app.panels().active.addMsg(' ', styleText('ignore_title', {text: translateText('client_models_application_ignore_title')}));
+ $.each(list, function (idx, ignored_pattern) {
+ that.app.panels().active.addMsg(' ', styleText('ignored_pattern', {text: ignored_pattern}));
+ });
+ } else {
+ this.app.panels().active.addMsg(' ', styleText('ignore_none', {text: translateText('client_models_application_ignore_none')}));
+ }
+ return;
+ }
+
+ // We have a parameter, so add it
+ list.push(ev.params[0]);
+ this.app.connections.active_connection.set('ignore_list', list);
+ this.app.panels().active.addMsg(' ', styleText('ignore_nick', {text: translateText('client_models_application_ignore_nick', [ev.params[0]])}));
+ };
+
+
+ fn_to_bind['command:unignore'] = function (ev) {
+ var list = this.app.connections.active_connection.get('ignore_list');
+
+ if (!ev.params[0]) {
+ this.app.panels().active.addMsg(' ', styleText('ignore_stop_notice', {text: translateText('client_models_application_ignore_stop_notice')}));
+ return;
+ }
+
+ list = _.reject(list, function(pattern) {
+ return pattern === ev.params[0];
+ });
+
+ this.app.connections.active_connection.set('ignore_list', list);
+
+ this.app.panels().active.addMsg(' ', styleText('ignore_stopped', {text: translateText('client_models_application_ignore_stopped', [ev.params[0]])}));
+ };
+
+
+
+
+ // A fallback action. Send a raw command to the server
+ function unknownCommand (ev) {
+ var raw_cmd = ev.command + ' ' + ev.params.join(' ');
+ console.log('RAW: ' + raw_cmd);
+ this.app.connections.active_connection.gateway.raw(raw_cmd);
+ }
+
+
+ function allCommands (ev) {}
+
+
+ function joinCommand (ev) {
+ var panels, channel_names;
+
+ channel_names = ev.params.join(' ').split(',');
+ panels = this.app.connections.active_connection.createAndJoinChannels(channel_names);
+
+ // Show the last channel if we have one
+ if (panels.length)
+ panels[panels.length - 1].view.show();
+ }
+
+
+ function queryCommand (ev) {
+ var destination, message, panel;
+
+ destination = ev.params[0];
+ ev.params.shift();
+
+ message = ev.params.join(' ');
+
+ // Check if we have the panel already. If not, create it
+ panel = this.app.connections.active_connection.panels.getByName(destination);
+ if (!panel) {
+ panel = new _kiwi.model.Query({name: destination});
+ this.app.connections.active_connection.panels.add(panel);
+ }
+
+ if (panel) panel.view.show();
+
+ if (message) {
+ this.app.connections.active_connection.gateway.msg(panel.get('name'), message);
+ panel.addMsg(this.app.connections.active_connection.get('nick'), styleText('privmsg', {text: message}), 'privmsg');
+ }
+
+ }
+
+
+ function msgCommand (ev) {
+ var message,
+ destination = ev.params[0],
+ panel = this.app.connections.active_connection.panels.getByName(destination) || this.app.panels().server;
+
+ ev.params.shift();
+ message = formatToIrcMsg(ev.params.join(' '));
+
+ panel.addMsg(this.app.connections.active_connection.get('nick'), styleText('privmsg', {text: message}), 'privmsg');
+ this.app.connections.active_connection.gateway.msg(destination, message);
+ }
+
+
+ function actionCommand (ev) {
+ if (this.app.panels().active.isServer()) {
+ return;
+ }
+
+ var panel = this.app.panels().active;
+ panel.addMsg('', styleText('action', {nick: this.app.connections.active_connection.get('nick'), text: ev.params.join(' ')}), 'action');
+ this.app.connections.active_connection.gateway.action(panel.get('name'), ev.params.join(' '));
+ }
+
+
+ function partCommand (ev) {
+ var that = this,
+ chans,
+ msg;
+ if (ev.params.length === 0) {
+ this.app.connections.active_connection.gateway.part(this.app.panels().active.get('name'));
+ } else {
+ chans = ev.params[0].split(',');
+ msg = ev.params[1];
+ _.each(chans, function (channel) {
+ that.connections.active_connection.gateway.part(channel, msg);
+ });
+ }
+ }
+
+
+ function nickCommand (ev) {
+ this.app.connections.active_connection.gateway.changeNick(ev.params[0]);
+ }
+
+
+ function topicCommand (ev) {
+ var channel_name;
+
+ if (ev.params.length === 0) return;
+
+ if (this.app.connections.active_connection.isChannelName(ev.params[0])) {
+ channel_name = ev.params[0];
+ ev.params.shift();
+ } else {
+ channel_name = this.app.panels().active.get('name');
+ }
+
+ this.app.connections.active_connection.gateway.topic(channel_name, ev.params.join(' '));
+ }
+
+
+ function noticeCommand (ev) {
+ var destination;
+
+ // Make sure we have a destination and some sort of message
+ if (ev.params.length <= 1) return;
+
+ destination = ev.params[0];
+ ev.params.shift();
+
+ this.app.connections.active_connection.gateway.notice(destination, ev.params.join(' '));
+ }
+
+
+ function quoteCommand (ev) {
+ var raw = ev.params.join(' ');
+ this.app.connections.active_connection.gateway.raw(raw);
+ }
+
+
+ function kickCommand (ev) {
+ var nick, panel = this.app.panels().active;
+
+ if (!panel.isChannel()) return;
+
+ // Make sure we have a nick
+ if (ev.params.length === 0) return;
+
+ nick = ev.params[0];
+ ev.params.shift();
+
+ this.app.connections.active_connection.gateway.kick(panel.get('name'), nick, ev.params.join(' '));
+ }
+
+
+ function clearCommand (ev) {
+ // Can't clear a server or applet panel
+ if (this.app.panels().active.isServer() || this.app.panels().active.isApplet()) {
+ return;
+ }
+
+ if (this.app.panels().active.clearMessages) {
+ this.app.panels().active.clearMessages();
+ }
+ }
+
+
+ function ctcpCommand(ev) {
+ var target, type;
+
+ // Make sure we have a target and a ctcp type (eg. version, time)
+ if (ev.params.length < 2) return;
+
+ target = ev.params[0];
+ ev.params.shift();
+
+ type = ev.params[0];
+ ev.params.shift();
+
+ this.app.connections.active_connection.gateway.ctcpRequest(type, target, ev.params.join(' '));
+ }
+
+
+ function settingsCommand (ev) {
+ var settings = _kiwi.model.Applet.loadOnce('kiwi_settings');
+ settings.view.show();
+ }
+
+
+ function scriptCommand (ev) {
+ var editor = _kiwi.model.Applet.loadOnce('kiwi_script_editor');
+ editor.view.show();
+ }
+
+
+ function appletCommand (ev) {
+ if (!ev.params[0]) return;
+
+ var panel = new _kiwi.model.Applet();
+
+ if (ev.params[1]) {
+ // Url and name given
+ panel.load(ev.params[0], ev.params[1]);
+ } else {
+ // Load a pre-loaded applet
+ if (this.applets[ev.params[0]]) {
+ panel.load(new this.applets[ev.params[0]]());
+ } else {
+ this.app.panels().server.addMsg('', styleText('applet_notfound', {text: translateText('client_models_application_applet_notfound', [ev.params[0]])}));
+ return;
+ }
+ }
+
+ this.app.connections.active_connection.panels.add(panel);
+ panel.view.show();
+ }
+
+
+ function inviteCommand (ev) {
+ var nick, channel;
+
+ // A nick must be specified
+ if (!ev.params[0])
+ return;
+
+ // Can only invite into channels
+ if (!this.app.panels().active.isChannel())
+ return;
+
+ nick = ev.params[0];
+ channel = this.app.panels().active.get('name');
+
+ this.app.connections.active_connection.gateway.raw('INVITE ' + nick + ' ' + channel);
+
+ this.app.panels().active.addMsg('', styleText('channel_has_been_invited', {nick: nick, text: translateText('client_models_application_has_been_invited', [channel])}), 'action');
+ }
+
+
+ function whoisCommand (ev) {
+ var nick;
+
+ if (ev.params[0]) {
+ nick = ev.params[0];
+ } else if (this.app.panels().active.isQuery()) {
+ nick = this.app.panels().active.get('name');
+ }
+
+ if (nick)
+ this.app.connections.active_connection.gateway.raw('WHOIS ' + nick + ' ' + nick);
+ }
+
+
+ function whowasCommand (ev) {
+ var nick;
+
+ if (ev.params[0]) {
+ nick = ev.params[0];
+ } else if (this.app.panels().active.isQuery()) {
+ nick = this.app.panels().active.get('name');
+ }
+
+ if (nick)
+ this.app.connections.active_connection.gateway.raw('WHOWAS ' + nick);
+ }
+
+
+ function encodingCommand (ev) {
+ var that = this;
+
+ if (ev.params[0]) {
+ _kiwi.gateway.setEncoding(null, ev.params[0], function (success) {
+ if (success) {
+ that.app.panels().active.addMsg('', styleText('encoding_changed', {text: translateText('client_models_application_encoding_changed', [ev.params[0]])}));
+ } else {
+ that.app.panels().active.addMsg('', styleText('encoding_invalid', {text: translateText('client_models_application_encoding_invalid', [ev.params[0]])}));
+ }
+ });
+ } else {
+ this.app.panels().active.addMsg('', styleText('client_models_application_encoding_notspecified', {text: translateText('client_models_application_encoding_notspecified')}));
+ this.app.panels().active.addMsg('', styleText('client_models_application_encoding_usage', {text: translateText('client_models_application_encoding_usage')}));
+ }
+ }
+
+
+ function channelCommand (ev) {
+ var active_panel = this.app.panels().active;
+
+ if (!active_panel.isChannel())
+ return;
+
+ new _kiwi.model.ChannelInfo({channel: this.app.panels().active});
+ }
+
+
+ function serverCommand (ev) {
+ var that = this,
+ server, port, ssl, password, nick,
+ tmp;
+
+ // If no server address given, show the new connection dialog
+ if (!ev.params[0]) {
+ tmp = new _kiwi.view.MenuBox(_kiwi.global.i18n.translate('client_models_application_connection_create').fetch());
+ tmp.addItem('new_connection', new _kiwi.model.NewConnection().view.$el);
+ tmp.show();
+
+ // Center screen the dialog
+ tmp.$el.offset({
+ top: (this.app.view.$el.height() / 2) - (tmp.$el.height() / 2),
+ left: (this.app.view.$el.width() / 2) - (tmp.$el.width() / 2)
+ });
+
+ return;
+ }
+
+ // Port given in 'host:port' format and no specific port given after a space
+ if (ev.params[0].indexOf(':') > 0) {
+ tmp = ev.params[0].split(':');
+ server = tmp[0];
+ port = tmp[1];
+
+ password = ev.params[1] || undefined;
+
+ } else {
+ // Server + port given as 'host port'
+ server = ev.params[0];
+ port = ev.params[1] || 6667;
+
+ password = ev.params[2] || undefined;
+ }
+
+ // + in the port means SSL
+ if (port.toString()[0] === '+') {
+ ssl = true;
+ port = parseInt(port.substring(1), 10);
+ } else {
+ ssl = false;
+ }
+
+ // Default port if one wasn't found
+ port = port || 6667;
+
+ // Use the same nick as we currently have
+ nick = this.app.connections.active_connection.get('nick');
+
+ this.app.panels().active.addMsg('', styleText('server_connecting', {text: translateText('client_models_application_connection_connecting', [server, port.toString()])}));
+
+ _kiwi.gateway.newConnection({
+ nick: nick,
+ host: server,
+ port: port,
+ ssl: ssl,
+ password: password
+ }, function(err, new_connection) {
+ var translated_err_text = {text: translateText('client_models_application_connection_error', [server, port.toString(), err.toString()])};
+
+ if (err) {
+ that.app.panels().active.addMsg('', styleText('server_connecting_error', translated_err_text));
+ }
+ });
+ }
+
+})();
\ No newline at end of file
* Set the UI components up\r
*/\r
this.controlbox = new _kiwi.view.ControlBox({el: $('#kiwi .controlbox')[0]});\r
- this.bindControllboxCommands(this.controlbox);\r
- this.rightbar = new _kiwi.view.RightBar({el: this.view.$('.right_bar')[0]});\r
+ this.client_ui_commands = new _kiwi.misc.ClientUiCommands(this, this.controlbox);\r
\r
+ this.rightbar = new _kiwi.view.RightBar({el: this.view.$('.right_bar')[0]});\r
this.topicbar = new _kiwi.view.TopicBar({el: this.view.$el.find('.topic')[0]});\r
\r
new _kiwi.view.AppToolbar({el: _kiwi.app.view.$el.find('.toolbar .app_tools')[0]});\r
}, jump_server_interval * 1000);\r
}\r
});\r
- },\r
-\r
-\r
-\r
- /**\r
- * Bind to certain commands that may be typed into the control box\r
- */\r
- bindControllboxCommands: function (controlbox) {\r
- var that = this;\r
-\r
- // Default aliases\r
- $.extend(controlbox.preprocessor.aliases, {\r
- // General aliases\r
- '/p': '/part $1+',\r
- '/me': '/action $1+',\r
- '/j': '/join $1+',\r
- '/q': '/query $1+',\r
- '/w': '/whois $1+',\r
- '/raw': '/quote $1+',\r
-\r
- // Op related aliases\r
- '/op': '/quote mode $channel +o $1+',\r
- '/deop': '/quote mode $channel -o $1+',\r
- '/hop': '/quote mode $channel +h $1+',\r
- '/dehop': '/quote mode $channel -h $1+',\r
- '/voice': '/quote mode $channel +v $1+',\r
- '/devoice': '/quote mode $channel -v $1+',\r
- '/k': '/kick $channel $1+',\r
- '/ban': '/quote mode $channel +b $1+',\r
- '/unban': '/quote mode $channel -b $1+',\r
-\r
- // Misc aliases\r
- '/slap': '/me slaps $1 around a bit with a large trout'\r
- });\r
-\r
- // Functions to bind to controlbox events\r
- var fn_to_bind = {\r
- 'unknown_command': unknownCommand,\r
- 'command': allCommands,\r
- 'command:msg': msgCommand,\r
- 'command:action': actionCommand,\r
- 'command:join': joinCommand,\r
- 'command:part': partCommand,\r
- 'command:nick': nickCommand,\r
- 'command:query': queryCommand,\r
- 'command:invite': inviteCommand,\r
- 'command:topic': topicCommand,\r
- 'command:notice': noticeCommand,\r
- 'command:quote': quoteCommand,\r
- 'command:kick': kickCommand,\r
- 'command:clear': clearCommand,\r
- 'command:ctcp': ctcpCommand,\r
- 'command:server': serverCommand,\r
- 'command:whois': whoisCommand,\r
- 'command:whowas': whowasCommand,\r
- 'command:encoding': encodingCommand,\r
- 'command:channel': channelCommand,\r
- 'command:applet': appletCommand,\r
- 'command:settings': settingsCommand,\r
- 'command:script': scriptCommand\r
- };\r
-\r
- fn_to_bind['command:css'] = function (ev) {\r
- var queryString = '?reload=' + new Date().getTime();\r
- $('link[rel="stylesheet"]').each(function () {\r
- this.href = this.href.replace(/\?.*|$/, queryString);\r
- });\r
- };\r
-\r
- fn_to_bind['command:js'] = function (ev) {\r
- if (!ev.params[0]) return;\r
- $script(ev.params[0] + '?' + (new Date().getTime()));\r
- };\r
-\r
-\r
- fn_to_bind['command:set'] = function (ev) {\r
- if (!ev.params[0]) return;\r
-\r
- var setting = ev.params[0],\r
- value;\r
-\r
- // Do we have a second param to set a value?\r
- if (ev.params[1]) {\r
- ev.params.shift();\r
-\r
- value = ev.params.join(' ');\r
-\r
- // If we're setting a true boolean value..\r
- if (value === 'true')\r
- value = true;\r
-\r
- // If we're setting a false boolean value..\r
- if (value === 'false')\r
- value = false;\r
-\r
- // If we're setting a number..\r
- if (parseInt(value, 10).toString() === value)\r
- value = parseInt(value, 10);\r
-\r
- _kiwi.global.settings.set(setting, value);\r
- }\r
-\r
- // Read the value to the user\r
- _kiwi.app.panels().active.addMsg('', styleText('set_setting', {text: setting + ' = ' + _kiwi.global.settings.get(setting).toString()}));\r
- };\r
-\r
-\r
- fn_to_bind['command:save'] = function (ev) {\r
- _kiwi.global.settings.save();\r
- _kiwi.app.panels().active.addMsg('', styleText('settings_saved', {text: translateText('client_models_application_settings_saved')}));\r
- };\r
-\r
-\r
- fn_to_bind['command:alias'] = function (ev) {\r
- var name, rule;\r
-\r
- // No parameters passed so list them\r
- if (!ev.params[1]) {\r
- $.each(controlbox.preprocessor.aliases, function (name, rule) {\r
- _kiwi.app.panels().server.addMsg(' ', styleText('list_aliases', {text: name + ' => ' + rule}));\r
- });\r
- return;\r
- }\r
-\r
- // Deleting an alias?\r
- if (ev.params[0] === 'del' || ev.params[0] === 'delete') {\r
- name = ev.params[1];\r
- if (name[0] !== '/') name = '/' + name;\r
- delete controlbox.preprocessor.aliases[name];\r
- return;\r
- }\r
-\r
- // Add the alias\r
- name = ev.params[0];\r
- ev.params.shift();\r
- rule = ev.params.join(' ');\r
-\r
- // Make sure the name starts with a slash\r
- if (name[0] !== '/') name = '/' + name;\r
-\r
- // Now actually add the alias\r
- controlbox.preprocessor.aliases[name] = rule;\r
- };\r
-\r
-\r
- fn_to_bind['command:ignore'] = function (ev) {\r
- var list = this.connections.active_connection.get('ignore_list');\r
-\r
- // No parameters passed so list them\r
- if (!ev.params[0]) {\r
- if (list.length > 0) {\r
- _kiwi.app.panels().active.addMsg(' ', styleText('ignore_title', {text: translateText('client_models_application_ignore_title')}));\r
- $.each(list, function (idx, ignored_pattern) {\r
- _kiwi.app.panels().active.addMsg(' ', styleText('ignored_pattern', {text: ignored_pattern}));\r
- });\r
- } else {\r
- _kiwi.app.panels().active.addMsg(' ', styleText('ignore_none', {text: translateText('client_models_application_ignore_none')}));\r
- }\r
- return;\r
- }\r
-\r
- // We have a parameter, so add it\r
- list.push(ev.params[0]);\r
- this.connections.active_connection.set('ignore_list', list);\r
- _kiwi.app.panels().active.addMsg(' ', styleText('ignore_nick', {text: translateText('client_models_application_ignore_nick', [ev.params[0]])}));\r
- };\r
-\r
-\r
- fn_to_bind['command:unignore'] = function (ev) {\r
- var list = this.connections.active_connection.get('ignore_list');\r
-\r
- if (!ev.params[0]) {\r
- _kiwi.app.panels().active.addMsg(' ', styleText('ignore_stop_notice', {text: translateText('client_models_application_ignore_stop_notice')}));\r
- return;\r
- }\r
-\r
- list = _.reject(list, function(pattern) {\r
- return pattern === ev.params[0];\r
- });\r
-\r
- this.connections.active_connection.set('ignore_list', list);\r
-\r
- _kiwi.app.panels().active.addMsg(' ', styleText('ignore_stopped', {text: translateText('client_models_application_ignore_stopped', [ev.params[0]])}));\r
- };\r
-\r
-\r
- _.each(fn_to_bind, function(fn, event_name) {\r
- controlbox.on(event_name, _.bind(fn, that));\r
- });\r
- }\r
- });\r
-\r
-\r
-\r
-\r
- // A fallback action. Send a raw command to the server\r
- function unknownCommand (ev) {\r
- var raw_cmd = ev.command + ' ' + ev.params.join(' ');\r
- console.log('RAW: ' + raw_cmd);\r
- this.connections.active_connection.gateway.raw(raw_cmd);\r
- }\r
-\r
- function allCommands (ev) {}\r
-\r
- function joinCommand (ev) {\r
- var panels, channel_names;\r
-\r
- channel_names = ev.params.join(' ').split(',');\r
- panels = this.connections.active_connection.createAndJoinChannels(channel_names);\r
-\r
- // Show the last channel if we have one\r
- if (panels.length)\r
- panels[panels.length - 1].view.show();\r
- }\r
-\r
- function queryCommand (ev) {\r
- var destination, message, panel;\r
-\r
- destination = ev.params[0];\r
- ev.params.shift();\r
-\r
- message = ev.params.join(' ');\r
-\r
- // Check if we have the panel already. If not, create it\r
- panel = this.connections.active_connection.panels.getByName(destination);\r
- if (!panel) {\r
- panel = new _kiwi.model.Query({name: destination});\r
- this.connections.active_connection.panels.add(panel);\r
}\r
\r
- if (panel) panel.view.show();\r
-\r
- if (message) {\r
- this.connections.active_connection.gateway.msg(panel.get('name'), message);\r
- panel.addMsg(_kiwi.app.connections.active_connection.get('nick'), styleText('privmsg', {text: message}), 'privmsg');\r
- }\r
-\r
- }\r
-\r
- function msgCommand (ev) {\r
- var message,\r
- destination = ev.params[0],\r
- panel = this.connections.active_connection.panels.getByName(destination) || this.panels().server;\r
-\r
- ev.params.shift();\r
- message = formatToIrcMsg(ev.params.join(' '));\r
-\r
- panel.addMsg(_kiwi.app.connections.active_connection.get('nick'), styleText('privmsg', {text: message}), 'privmsg');\r
- this.connections.active_connection.gateway.msg(destination, message);\r
- }\r
-\r
- function actionCommand (ev) {\r
- if (_kiwi.app.panels().active.isServer()) {\r
- return;\r
- }\r
-\r
- var panel = _kiwi.app.panels().active;\r
- panel.addMsg('', styleText('action', {nick: _kiwi.app.connections.active_connection.get('nick'), text: ev.params.join(' ')}), 'action');\r
- this.connections.active_connection.gateway.action(panel.get('name'), ev.params.join(' '));\r
- }\r
-\r
- function partCommand (ev) {\r
- var that = this,\r
- chans,\r
- msg;\r
- if (ev.params.length === 0) {\r
- this.connections.active_connection.gateway.part(_kiwi.app.panels().active.get('name'));\r
- } else {\r
- chans = ev.params[0].split(',');\r
- msg = ev.params[1];\r
- _.each(chans, function (channel) {\r
- that.connections.active_connection.gateway.part(channel, msg);\r
- });\r
- }\r
- }\r
-\r
- function nickCommand (ev) {\r
- this.connections.active_connection.gateway.changeNick(ev.params[0]);\r
- }\r
-\r
- function topicCommand (ev) {\r
- var channel_name;\r
-\r
- if (ev.params.length === 0) return;\r
-\r
- if (this.connections.active_connection.isChannelName(ev.params[0])) {\r
- channel_name = ev.params[0];\r
- ev.params.shift();\r
- } else {\r
- channel_name = _kiwi.app.panels().active.get('name');\r
- }\r
-\r
- this.connections.active_connection.gateway.topic(channel_name, ev.params.join(' '));\r
- }\r
-\r
- function noticeCommand (ev) {\r
- var destination;\r
-\r
- // Make sure we have a destination and some sort of message\r
- if (ev.params.length <= 1) return;\r
-\r
- destination = ev.params[0];\r
- ev.params.shift();\r
-\r
- this.connections.active_connection.gateway.notice(destination, ev.params.join(' '));\r
- }\r
-\r
- function quoteCommand (ev) {\r
- var raw = ev.params.join(' ');\r
- this.connections.active_connection.gateway.raw(raw);\r
- }\r
-\r
- function kickCommand (ev) {\r
- var nick, panel = _kiwi.app.panels().active;\r
-\r
- if (!panel.isChannel()) return;\r
-\r
- // Make sure we have a nick\r
- if (ev.params.length === 0) return;\r
-\r
- nick = ev.params[0];\r
- ev.params.shift();\r
-\r
- this.connections.active_connection.gateway.kick(panel.get('name'), nick, ev.params.join(' '));\r
- }\r
-\r
- function clearCommand (ev) {\r
- // Can't clear a server or applet panel\r
- if (_kiwi.app.panels().active.isServer() || _kiwi.app.panels().active.isApplet()) {\r
- return;\r
- }\r
-\r
- if (_kiwi.app.panels().active.clearMessages) {\r
- _kiwi.app.panels().active.clearMessages();\r
- }\r
- }\r
-\r
- function ctcpCommand(ev) {\r
- var target, type;\r
-\r
- // Make sure we have a target and a ctcp type (eg. version, time)\r
- if (ev.params.length < 2) return;\r
-\r
- target = ev.params[0];\r
- ev.params.shift();\r
-\r
- type = ev.params[0];\r
- ev.params.shift();\r
-\r
- this.connections.active_connection.gateway.ctcpRequest(type, target, ev.params.join(' '));\r
- }\r
-\r
- function settingsCommand (ev) {\r
- var settings = _kiwi.model.Applet.loadOnce('kiwi_settings');\r
- settings.view.show();\r
- }\r
-\r
- function scriptCommand (ev) {\r
- var editor = _kiwi.model.Applet.loadOnce('kiwi_script_editor');\r
- editor.view.show();\r
- }\r
-\r
- function appletCommand (ev) {\r
- if (!ev.params[0]) return;\r
-\r
- var panel = new _kiwi.model.Applet();\r
-\r
- if (ev.params[1]) {\r
- // Url and name given\r
- panel.load(ev.params[0], ev.params[1]);\r
- } else {\r
- // Load a pre-loaded applet\r
- if (_kiwi.applets[ev.params[0]]) {\r
- panel.load(new _kiwi.applets[ev.params[0]]());\r
- } else {\r
- _kiwi.app.panels().server.addMsg('', styleText('applet_notfound', {text: translateText('client_models_application_applet_notfound', [ev.params[0]])}));\r
- return;\r
- }\r
- }\r
-\r
- _kiwi.app.connections.active_connection.panels.add(panel);\r
- panel.view.show();\r
- }\r
-\r
-\r
-\r
- function inviteCommand (ev) {\r
- var nick, channel;\r
-\r
- // A nick must be specified\r
- if (!ev.params[0])\r
- return;\r
-\r
- // Can only invite into channels\r
- if (!_kiwi.app.panels().active.isChannel())\r
- return;\r
-\r
- nick = ev.params[0];\r
- channel = _kiwi.app.panels().active.get('name');\r
-\r
- _kiwi.app.connections.active_connection.gateway.raw('INVITE ' + nick + ' ' + channel);\r
-\r
- _kiwi.app.panels().active.addMsg('', styleText('channel_has_been_invited', {nick: nick, text: translateText('client_models_application_has_been_invited', [channel])}), 'action');\r
- }\r
-\r
-\r
- function whoisCommand (ev) {\r
- var nick;\r
-\r
- if (ev.params[0]) {\r
- nick = ev.params[0];\r
- } else if (_kiwi.app.panels().active.isQuery()) {\r
- nick = _kiwi.app.panels().active.get('name');\r
- }\r
-\r
- if (nick)\r
- _kiwi.app.connections.active_connection.gateway.raw('WHOIS ' + nick + ' ' + nick);\r
- }\r
-\r
-\r
- function whowasCommand (ev) {\r
- var nick;\r
-\r
- if (ev.params[0]) {\r
- nick = ev.params[0];\r
- } else if (_kiwi.app.panels().active.isQuery()) {\r
- nick = _kiwi.app.panels().active.get('name');\r
- }\r
-\r
- if (nick)\r
- _kiwi.app.connections.active_connection.gateway.raw('WHOWAS ' + nick);\r
- }\r
-\r
- function encodingCommand (ev) {\r
- if (ev.params[0]) {\r
- _kiwi.gateway.setEncoding(null, ev.params[0], function (success) {\r
- if (success) {\r
- _kiwi.app.panels().active.addMsg('', styleText('encoding_changed', {text: translateText('client_models_application_encoding_changed', [ev.params[0]])}));\r
- } else {\r
- _kiwi.app.panels().active.addMsg('', styleText('encoding_invalid', {text: translateText('client_models_application_encoding_invalid', [ev.params[0]])}));\r
- }\r
- });\r
- } else {\r
- _kiwi.app.panels().active.addMsg('', styleText('client_models_application_encoding_notspecified', {text: translateText('client_models_application_encoding_notspecified')}));\r
- _kiwi.app.panels().active.addMsg('', styleText('client_models_application_encoding_usage', {text: translateText('client_models_application_encoding_usage')}));\r
- }\r
- }\r
-\r
- function channelCommand (ev) {\r
- var active_panel = _kiwi.app.panels().active;\r
-\r
- if (!active_panel.isChannel())\r
- return;\r
-\r
- new _kiwi.model.ChannelInfo({channel: _kiwi.app.panels().active});\r
- }\r
-\r
- function serverCommand (ev) {\r
- var server, port, ssl, password, nick,\r
- tmp;\r
-\r
- // If no server address given, show the new connection dialog\r
- if (!ev.params[0]) {\r
- tmp = new _kiwi.view.MenuBox(_kiwi.global.i18n.translate('client_models_application_connection_create').fetch());\r
- tmp.addItem('new_connection', new _kiwi.model.NewConnection().view.$el);\r
- tmp.show();\r
-\r
- // Center screen the dialog\r
- tmp.$el.offset({\r
- top: (this.view.$el.height() / 2) - (tmp.$el.height() / 2),\r
- left: (this.view.$el.width() / 2) - (tmp.$el.width() / 2)\r
- });\r
-\r
- return;\r
- }\r
-\r
- // Port given in 'host:port' format and no specific port given after a space\r
- if (ev.params[0].indexOf(':') > 0) {\r
- tmp = ev.params[0].split(':');\r
- server = tmp[0];\r
- port = tmp[1];\r
-\r
- password = ev.params[1] || undefined;\r
-\r
- } else {\r
- // Server + port given as 'host port'\r
- server = ev.params[0];\r
- port = ev.params[1] || 6667;\r
-\r
- password = ev.params[2] || undefined;\r
- }\r
-\r
- // + in the port means SSL\r
- if (port.toString()[0] === '+') {\r
- ssl = true;\r
- port = parseInt(port.substring(1), 10);\r
- } else {\r
- ssl = false;\r
- }\r
-\r
- // Default port if one wasn't found\r
- port = port || 6667;\r
-\r
- // Use the same nick as we currently have\r
- nick = _kiwi.app.connections.active_connection.get('nick');\r
-\r
- _kiwi.app.panels().active.addMsg('', styleText('server_connecting', {text: translateText('client_models_application_connection_connecting', [server, port.toString()])}));\r
-\r
- _kiwi.gateway.newConnection({\r
- nick: nick,\r
- host: server,\r
- port: port,\r
- ssl: ssl,\r
- password: password\r
- }, function(err, new_connection) {\r
- if (err)\r
- _kiwi.app.panels().active.addMsg('', styleText('server_connecting_error', {text: translateText('client_models_application_connection_error', [server, port.toString(), err.toString()])}));\r
- });\r
- }\r
+ });\r
\r
})();\r