Extracting client user commands from application.js
authorDarren <darren@darrenwhitlen.com>
Mon, 23 Jun 2014 00:04:26 +0000 (01:04 +0100)
committerDarren <darren@darrenwhitlen.com>
Mon, 23 Jun 2014 00:04:26 +0000 (01:04 +0100)
client/build.js
client/src/app.js
client/src/misc/clientuicommands.js [new file with mode: 0644]
client/src/models/application.js
server/settingsgenerator.js

index e7c4b2eada5dc7dfb859974d52a2703aa23a064c..bf8702a8aadd5a29105707ac6702f7c9cf5b1a89 100644 (file)
@@ -80,6 +80,9 @@ var source_files = [
     __dirname + '/src/views/channeltools.js',\r
     __dirname + '/src/views/channelinfo.js',\r
     __dirname + '/src/views/rightbar.js',\r
+\r
+    __dirname + '/src/misc/clientuicommands.js',\r
+\r
     __dirname + '/src/applets/settings.js',\r
     __dirname + '/src/applets/chanlist.js',\r
     __dirname + '/src/applets/scripteditor.js',\r
index c9863af205f9af6360cf035b3b4b38603accaf77..c759d994cf2801a282c185d46d408cbf1c2036f0 100644 (file)
@@ -4,6 +4,7 @@
 */\r
 var _kiwi = {};\r
 \r
+_kiwi.misc = {};\r
 _kiwi.model = {};\r
 _kiwi.view = {};\r
 _kiwi.applets = {};\r
diff --git a/client/src/misc/clientuicommands.js b/client/src/misc/clientuicommands.js
new file mode 100644 (file)
index 0000000..5ea5e2f
--- /dev/null
@@ -0,0 +1,566 @@
+(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
index cf47c5960a650761eced9cb259e0de4ae753148f..d37b99c4cfd09b09ded7e90ef3a0811b25295fae 100644 (file)
@@ -88,9 +88,9 @@
              * 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
index ce09159a32f42a56dc16fd3dc68643505fb02abe..0eefe79d7cb91851b330d59943024cf2709b327b 100644 (file)
@@ -253,6 +253,11 @@ function addScripts(vars, debug) {
             'src/views/channelinfo.js',
             'src/views/rightbar.js'
         ],
+
+        [
+            'src/misc/clientuicommands.js'
+        ],
+
         [
             'src/applets/settings.js',
             'src/applets/chanlist.js',