Merge branch 'text_themes' of https://github.com/CoryChaplin/KiwiIRC into CoryChaplin...
[KiwiIRC.git] / client / src / models / application.js
index bc60a95be33d6a0023fbe4773fe91e1d23e12cbe..feb251ef25f9a9ddaa756aab94b00def7572f01d 100644 (file)
@@ -32,6 +32,9 @@
             // Best guess at where the kiwi server is if not already specified\r
             this.kiwi_server = options.kiwi_server || this.detectKiwiServer();\r
 \r
+            // The applet to initially load\r
+            this.startup_applet_name = options.startup || 'kiwi_startup';\r
+\r
             // Set any default settings before anything else is applied\r
             if (this.server_settings && this.server_settings.client && this.server_settings.client.settings) {\r
                 this.applyDefaultClientSettings(this.server_settings.client.settings);\r
@@ -39,7 +42,7 @@
         },\r
 \r
 \r
-        start: function () {\r
+        initializeInterfaces: function () {\r
             // Set the gateway up\r
             _kiwi.gateway = new _kiwi.model.Gateway();\r
             this.bindGatewayCommands(_kiwi.gateway);\r
@@ -48,8 +51,6 @@
             this.initializeGlobals();\r
 \r
             this.view.barsHide(true);\r
-\r
-            this.showIntialConenctionDialog();\r
         },\r
 \r
 \r
         },\r
 \r
 \r
-        showIntialConenctionDialog: function() {\r
-            var connection_dialog = new _kiwi.model.NewConnection();\r
-            this.populateDefaultServerSettings(connection_dialog);\r
-\r
-            connection_dialog.view.$el.addClass('initial');\r
-            this.view.$el.find('.panel_container:first').append(connection_dialog.view.$el);\r
-\r
-            var $info = $($('#tmpl_new_connection_info').html().trim());\r
-\r
-            if ($info.html()) {\r
-                connection_dialog.view.infoBoxSet($info);\r
-                connection_dialog.view.infoBoxShow();\r
-            }\r
-\r
-            // TODO: Shouldn't really be here but it's not working in the view.. :/\r
-            // Hack for firefox browers: Focus is not given on this event loop iteration\r
-            setTimeout(function(){\r
-                connection_dialog.view.$el.find('.nick').select();\r
-            }, 0);\r
-\r
-            // Once connected, close this dialog and remove its own event\r
-            var fn = function() {\r
-                connection_dialog.view.$el.slideUp(function() {\r
-                    connection_dialog.view.dispose();\r
-                    connection_dialog = null;\r
-\r
-                    _kiwi.gateway.off('onconnect', fn);\r
-                });\r
-\r
-            };\r
-            _kiwi.gateway.on('onconnect', fn);\r
+        showStartup: function() {\r
+            this.startup_applet = _kiwi.model.Applet.load(this.startup_applet_name, {no_tab: true});\r
+            this.startup_applet.tab = this.view.$('.console');\r
+            this.startup_applet.view.show();\r
         },\r
 \r
 \r
         },\r
 \r
 \r
-        populateDefaultServerSettings: function (new_connection_dialog) {\r
-            var parts;\r
-            var defaults = {\r
-                nick: '',\r
-                server: '',\r
-                port: 6667,\r
-                ssl: false,\r
-                channel: '#chat',\r
-                channel_key: ''\r
-            };\r
-            var uricheck;\r
-\r
-\r
-            /**\r
-             * Get any settings set by the server\r
-             * These settings may be changed in the server selection dialog or via URL parameters\r
-             */\r
-            if (this.server_settings.client) {\r
-                if (this.server_settings.client.nick)\r
-                    defaults.nick = this.server_settings.client.nick;\r
-\r
-                if (this.server_settings.client.server)\r
-                    defaults.server = this.server_settings.client.server;\r
-\r
-                if (this.server_settings.client.port)\r
-                    defaults.port = this.server_settings.client.port;\r
-\r
-                if (this.server_settings.client.ssl)\r
-                    defaults.ssl = this.server_settings.client.ssl;\r
-\r
-                if (this.server_settings.client.channel)\r
-                    defaults.channel = this.server_settings.client.channel;\r
-\r
-                if (this.server_settings.client.channel_key)\r
-                    defaults.channel_key = this.server_settings.client.channel_key;\r
-            }\r
-\r
-\r
-\r
-            /**\r
-             * Get any settings passed in the URL\r
-             * These settings may be changed in the server selection dialog\r
-             */\r
-\r
-            // Any query parameters first\r
-            if (getQueryVariable('nick'))\r
-                defaults.nick = getQueryVariable('nick');\r
-\r
-            if (window.location.hash)\r
-                defaults.channel = window.location.hash;\r
-\r
-\r
-            // Process the URL part by part, extracting as we go\r
-            parts = window.location.pathname.toString().replace(this.get('base_path'), '').split('/');\r
-\r
-            if (parts.length > 0) {\r
-                parts.shift();\r
-\r
-                if (parts.length > 0 && parts[0]) {\r
-                    // Check to see if we're dealing with an irc: uri, or whether we need to extract the server/channel info from the HTTP URL path.\r
-                    uricheck = parts[0].substr(0, 7).toLowerCase();\r
-                    if ((uricheck === 'ircs%3a') || (uricheck.substr(0,6) === 'irc%3a')) {\r
-                        parts[0] = decodeURIComponent(parts[0]);\r
-                        // irc[s]://<host>[:<port>]/[<channel>[?<password>]]\r
-                        uricheck = /^irc(s)?:(?:\/\/?)?([^:\/]+)(?::([0-9]+))?(?:(?:\/)([^\?]*)(?:(?:\?)(.*))?)?$/.exec(parts[0]);\r
-                        /*\r
-                            uricheck[1] = ssl (optional)\r
-                            uricheck[2] = host\r
-                            uricheck[3] = port (optional)\r
-                            uricheck[4] = channel (optional)\r
-                            uricheck[5] = channel key (optional, channel must also be set)\r
-                        */\r
-                        if (uricheck) {\r
-                            if (typeof uricheck[1] !== 'undefined') {\r
-                                defaults.ssl = true;\r
-                                if (defaults.port === 6667) {\r
-                                    defaults.port = 6697;\r
-                                }\r
-                            }\r
-                            defaults.server = uricheck[2];\r
-                            if (typeof uricheck[3] !== 'undefined') {\r
-                                defaults.port = uricheck[3];\r
-                            }\r
-                            if (typeof uricheck[4] !== 'undefined') {\r
-                                defaults.channel = '#' + uricheck[4];\r
-                                if (typeof uricheck[5] !== 'undefined') {\r
-                                    defaults.channel_key = uricheck[5];\r
-                                }\r
-                            }\r
-                        }\r
-                        parts = [];\r
-                    } else {\r
-                        // Extract the port+ssl if we find one\r
-                        if (parts[0].search(/:/) > 0) {\r
-                            defaults.port = parts[0].substring(parts[0].search(/:/) + 1);\r
-                            defaults.server = parts[0].substring(0, parts[0].search(/:/));\r
-                            if (defaults.port[0] === '+') {\r
-                                defaults.port = parseInt(defaults.port.substring(1), 10);\r
-                                defaults.ssl = true;\r
-                            } else {\r
-                                defaults.ssl = false;\r
-                            }\r
-\r
-                        } else {\r
-                            defaults.server = parts[0];\r
-                        }\r
-\r
-                        parts.shift();\r
-                    }\r
-                }\r
-\r
-                if (parts.length > 0 && parts[0]) {\r
-                    defaults.channel = '#' + parts[0];\r
-                    parts.shift();\r
-                }\r
-            }\r
-\r
-            // If any settings have been given by the server.. override any auto detected settings\r
-            /**\r
-             * Get any server restrictions as set in the server config\r
-             * These settings can not be changed in the server selection dialog\r
-             */\r
-            if (this.server_settings && this.server_settings.connection) {\r
-                if (this.server_settings.connection.server) {\r
-                    defaults.server = this.server_settings.connection.server;\r
-                }\r
-\r
-                if (this.server_settings.connection.port) {\r
-                    defaults.port = this.server_settings.connection.port;\r
-                }\r
-\r
-                if (this.server_settings.connection.ssl) {\r
-                    defaults.ssl = this.server_settings.connection.ssl;\r
-                }\r
-\r
-                if (this.server_settings.connection.channel) {\r
-                    defaults.channel = this.server_settings.connection.channel;\r
-                }\r
-\r
-                if (this.server_settings.connection.channel_key) {\r
-                    defaults.channel_key = this.server_settings.connection.channel_key;\r
-                }\r
-\r
-                if (this.server_settings.connection.nick) {\r
-                    defaults.nick = this.server_settings.connection.nick;\r
-                }\r
-            }\r
-\r
-            // Set any random numbers if needed\r
-            defaults.nick = defaults.nick.replace('?', Math.floor(Math.random() * 100000).toString());\r
-\r
-            if (getQueryVariable('encoding'))\r
-                defaults.encoding = getQueryVariable('encoding');\r
-\r
-            // Populate the server select box with defaults\r
-            new_connection_dialog.view.populateFields(defaults);\r
-        },\r
-\r
-\r
         panels: (function() {\r
+            var active_panel;\r
+\r
             var fn = function(panel_type) {\r
                 var panels;\r
 \r
                 }\r
 \r
                 // Active panels / server\r
-                panels.active = this.connections.active_panel;\r
+                panels.active = active_panel;\r
                 panels.server = this.connections.active_connection ?\r
                     this.connections.active_connection.panels.server :\r
                     null;\r
 \r
             _.extend(fn, Backbone.Events);\r
 \r
+            // Keep track of the active panel. Channel/query/server or applet\r
+            fn.bind('active', function (new_active_panel) {\r
+                active_panel = new_active_panel;\r
+            });\r
+\r
             return fn;\r
         })(),\r
 \r
 \r
                     // Mention the disconnection on every channel\r
                     _kiwi.app.connections.forEach(function(connection) {\r
-                        connection.panels.server.addMsg('', msg, 'action quit');\r
+                        connection.panels.server.addMsg('', styleText('quit', {'%T': msg}), 'action quit');\r
 \r
                         connection.panels.forEach(function(panel) {\r
                             if (!panel.isChannel())\r
                                 return;\r
 \r
-                            panel.addMsg('', msg, 'action quit');\r
+                            panel.addMsg('', styleText('quit', {'%T': msg}), 'action quit');\r
                         });\r
                     });\r
 \r
 \r
                     // Only need to mention the repeating re-connection messages on server panels\r
                     _kiwi.app.connections.forEach(function(connection) {\r
-                        connection.panels.server.addMsg('', msg, 'action quit');\r
+                        connection.panels.server.addMsg('', styleText('quit', {'%T': msg}), 'action quit');\r
                     });\r
                 });\r
 \r
 \r
                     // Mention the re-connection on every channel\r
                     _kiwi.app.connections.forEach(function(connection) {\r
-                        connection.panels.server.addMsg('', msg, 'action join');\r
+                        connection.panels.server.addMsg('', styleText('rejoin', {'%T': msg}), 'action join');\r
 \r
                         connection.panels.forEach(function(panel) {\r
                             if (!panel.isChannel())\r
                                 return;\r
 \r
-                            panel.addMsg('', msg, 'action join');\r
+                            panel.addMsg('', styleText('rejoin', {'%T': msg}), 'action join');\r
                         });\r
                     });\r
 \r
                 }\r
 \r
                 // Read the value to the user\r
-                _kiwi.app.panels().active.addMsg('', setting + ' = ' + _kiwi.global.settings.get(setting).toString());\r
+                _kiwi.app.panels().active.addMsg('', styleText('set_setting', {'%T': 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('', _kiwi.global.i18n.translate('client_models_application_settings_saved').fetch());\r
+                _kiwi.app.panels().active.addMsg('', styleText('client_models_application_settings_saved', {'%T': translateText('client_models_application_settings_saved')}));\r
             };\r
 \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(' ', name + '   =>   ' + rule);\r
+                        _kiwi.app.panels().server.addMsg(' ', styleText('list_aliases', {'%T': name + '   =>   ' + rule}));\r
                     });\r
                     return;\r
                 }\r
                 // No parameters passed so list them\r
                 if (!ev.params[0]) {\r
                     if (list.length > 0) {\r
-                        _kiwi.app.panels().active.addMsg(' ', _kiwi.global.i18n.translate('client_models_application_ignore_title').fetch() + ':');\r
+                        _kiwi.app.panels().active.addMsg(' ', styleText('client_models_application_ignore_title', {'%T': translateText('client_models_application_ignore_title')}));\r
                         $.each(list, function (idx, ignored_pattern) {\r
-                            _kiwi.app.panels().active.addMsg(' ', ignored_pattern);\r
+                            _kiwi.app.panels().active.addMsg(' ', styleText('ignored_pattern', {'%T': ignored_pattern}));\r
                         });\r
                     } else {\r
-                        _kiwi.app.panels().active.addMsg(' ', _kiwi.global.i18n.translate('client_models_application_ignore_none').fetch());\r
+                        _kiwi.app.panels().active.addMsg(' ', styleText('client_models_application_ignore_none', {'%T': translateText('client_models_application_ignore_none')}));\r
                     }\r
                     return;\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(' ', _kiwi.global.i18n.translate('client_models_application_ignore_nick').fetch(ev.params[0]));\r
+                _kiwi.app.panels().active.addMsg(' ', styleText('client_models_application_ignore_nick', {'%T': translateText('client_models_application_ignore_nick', [ev.params[0]])}));\r
             };\r
 \r
 \r
                 var list = this.connections.active_connection.get('ignore_list');\r
 \r
                 if (!ev.params[0]) {\r
-                    _kiwi.app.panels().active.addMsg(' ', _kiwi.global.i18n.translate('client_models_application_ignore_stop_notice').fetch());\r
+                    _kiwi.app.panels().active.addMsg(' ', styleText('client_models_application_ignore_stop_notice', {'%T': translateText('client_models_application_ignore_stop_notice')}));\r
                     return;\r
                 }\r
 \r
 \r
                 this.connections.active_connection.set('ignore_list', list);\r
 \r
-                _kiwi.app.panels().active.addMsg(' ', _kiwi.global.i18n.translate('client_models_application_ignore_stopped').fetch(ev.params[0]));\r
+                _kiwi.app.panels().active.addMsg(' ', styleText('client_models_application_ignore_stopped', {'%T': translateText('client_models_application_ignore_stopped', [ev.params[0]])}));\r
             };\r
 \r
 \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'), message);\r
+            panel.addMsg(_kiwi.app.connections.active_connection.get('nick'), styleText('query', {'%T': message}));\r
         }\r
 \r
     }\r
         ev.params.shift();\r
         message = formatToIrcMsg(ev.params.join(' '));\r
 \r
-        panel.addMsg(_kiwi.app.connections.active_connection.get('nick'), message);\r
+        panel.addMsg(_kiwi.app.connections.active_connection.get('nick'), styleText('msg', {'%T': message}));\r
         this.connections.active_connection.gateway.msg(destination, message);\r
     }\r
 \r
         }\r
 \r
         var panel = _kiwi.app.panels().active;\r
-        panel.addMsg('', '* ' + _kiwi.app.connections.active_connection.get('nick') + ' ' + ev.params.join(' '), 'action');\r
+        panel.addMsg('', styleText('action', {'%N': _kiwi.app.connections.active_connection.get('nick'), '%T': 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
+\r
         if (ev.params.length === 0) {\r
             this.connections.active_connection.gateway.part(_kiwi.app.panels().active.get('name'));\r
         } else {\r
             _.each(ev.params, function (channel) {\r
-                this.connections.active_connection.gateway.part(channel);\r
+                that.connections.active_connection.gateway.part(channel);\r
             });\r
         }\r
     }\r
             if (_kiwi.applets[ev.params[0]]) {\r
                 panel.load(new _kiwi.applets[ev.params[0]]());\r
             } else {\r
-                _kiwi.app.panels().server.addMsg('', _kiwi.global.i18n.translate('client_models_application_applet_notfound').fetch(ev.params[0]));\r
+                _kiwi.app.panels().server.addMsg('', styleText('client_models_application_applet_notfound', {'%T': translateText('client_models_application_applet_notfound', [ev.params[0]])}));\r
                 return;\r
             }\r
         }\r
 \r
         _kiwi.app.connections.active_connection.gateway.raw('INVITE ' + nick + ' ' + channel);\r
 \r
-        _kiwi.app.panels().active.addMsg('', '== ' + nick + ' has been invited to ' + channel, 'action');\r
+        _kiwi.app.panels().active.addMsg('', styleText('client_models_application_has_been_invited', {'%N': nick, '%T': translateText('client_models_application_has_been_invited', [channel])}), 'action');\r
     }\r
 \r
 \r
         if (ev.params[0]) {\r
             _kiwi.gateway.setEncoding(null, ev.params[0], function (success) {\r
                 if (success) {\r
-                    _kiwi.app.panels().active.addMsg('', _kiwi.global.i18n.translate('client_models_application_encoding_changed').fetch(ev.params[0]));\r
+                    _kiwi.app.panels().active.addMsg('', styleText('client_models_application_encoding_changed', {'%T': translateText('client_models_application_encoding_changed', [ev.params[0]])}));\r
                 } else {\r
-                    _kiwi.app.panels().active.addMsg('', _kiwi.global.i18n.translate('client_models_application_encoding_invalid').fetch(ev.params[0]));\r
+                    _kiwi.app.panels().active.addMsg('', styleText('client_models_application_encoding_invalid', {'%T': translateText('client_models_application_encoding_invalid', [ev.params[0]])}));\r
                 }\r
             });\r
         } else {\r
-            _kiwi.app.panels().active.addMsg('', _kiwi.global.i18n.translate('client_models_application_encoding_notspecified').fetch());\r
-            _kiwi.app.panels().active.addMsg('', _kiwi.global.i18n.translate('client_models_application_encoding_usage').fetch());\r
+            _kiwi.app.panels().active.addMsg('', styleText('client_models_application_encoding_notspecified', {'%T': translateText('client_models_application_encoding_notspecified')}));\r
+            _kiwi.app.panels().active.addMsg('', styleText('client_models_application_encoding_usage', {'%T': translateText('client_models_application_encoding_usage')}));\r
         }\r
     }\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('', _kiwi.global.i18n.translate('client_models_application_connection_connecting').fetch(server, port.toString()));\r
+        _kiwi.app.panels().active.addMsg('', styleText('client_models_application_connection_connecting', {'%T': translateText('client_models_application_connection_connecting', [server, port.toString()])}));\r
 \r
         _kiwi.gateway.newConnection({\r
             nick: nick,\r
             password: password\r
         }, function(err, new_connection) {\r
             if (err)\r
-                _kiwi.app.panels().active.addMsg('', _kiwi.global.i18n.translate('client_models_application_connection_error').fetch(server, port.toString(), err.toString()));\r
+                _kiwi.app.panels().active.addMsg('', styleText('client_models_application_connection_error', {'%T': translateText('client_models_application_connection_error', [server, port.toString(), err.toString()])}));\r
         });\r
     }\r
 \r