X-Git-Url: https://jfr.im/git/irc/quakenet/qwebirc.git/blobdiff_plain/c0ddb931ca4684e2302701e5c22805dd75c8f4f7..6d3d46b5084c75f074ce9e08ef248ff3586f7685:/js/ui/baseui.js diff --git a/js/ui/baseui.js b/js/ui/baseui.js index 80ffdd4..86145c9 100644 --- a/js/ui/baseui.js +++ b/js/ui/baseui.js @@ -6,6 +6,7 @@ qwebirc.ui.WINDOW_CONNECT = 0x10; qwebirc.ui.WINDOW_MESSAGES = 0x20; qwebirc.ui.CUSTOM_CLIENT = "custom"; +qwebirc.ui.DEFAULT_HUE = 210; /* nice blue */ qwebirc.ui.BaseUI = new Class({ Implements: [Events], @@ -60,6 +61,7 @@ qwebirc.ui.BaseUI = new Class({ client.id = String(this.clientId++); client.hilightController = new qwebirc.ui.HilightController(client); client.addEvent("signedOn", function() { + this.poller = new qwebirc.xdomain.Poller(this.oobMessage.bind(this)); this.fireEvent("signedOn", client); }.bind(this)); this.windows.put(client.id, new QHash()); @@ -69,7 +71,7 @@ qwebirc.ui.BaseUI = new Class({ if(!this.firstClient) { this.firstClient = true; w.addLine("", "qwebirc v" + qwebirc.VERSION); - w.addLine("", "Copyright (C) 2008-2014 Chris Porter and the qwebirc project."); + w.addLine("", "Copyright (C) 2008-2017 Chris Porter and the qwebirc project."); w.addLine("", "http://www.qwebirc.org"); w.addLine("", "Licensed under the GNU General Public License, Version 2."); } @@ -110,7 +112,7 @@ qwebirc.ui.BaseUI = new Class({ if(!$defined(c)) return null; - return c[this.getWindowIdentifier(client, type, name)]; + return c.get(this.getWindowIdentifier(client, type, name)); }, getActiveWindow: function() { return this.active; @@ -208,12 +210,40 @@ qwebirc.ui.BaseUI = new Class({ tricked into getting themselves glined */ loginBox: function(callback, initialNickname, initialChannels, autoConnect, autoNick) { - qwebirc.ui.GenericLoginBox(this.parentElement, callback, initialNickname, initialChannels, autoConnect, autoNick, this.options.networkName); + this.postInitialize(); + + this.addCustomWindow("Connect", qwebirc.ui.ConnectPane, "connectpane", { + initialNickname: initialNickname, initialChannels: initialChannels, autoConnect: autoConnect, callback: callback, autoNick: autoNick, + uiOptions: this.options + }, qwebirc.ui.WINDOW_CONNECT); }, focusChange: function(newValue) { var window_ = this.getActiveWindow(); if($defined(window_)) window_.focusChange(newValue); + }, + oobMessage: function(message) { + var c = message.splitMax(" ", 2); + if(c.length != 2) + return; + + var command = c[0]; + if(command != "CMD") + return; + + var d = c[1].splitMax(" ", 2); + if(d.length != 2) + return; + + var command = d[0]; + var args = d[1]; + if(command == "SAY") { + var w = this.getActiveIRCWindow(); + if($defined(w) && (w.type == qwebirc.ui.WINDOW_CHANNEL || w.type == qwebirc.ui.WINDOW_QUERY)) { + w.client.exec("/SAY " + args); + return; + } + } } }); @@ -223,27 +253,35 @@ qwebirc.ui.StandardUI = new Class({ initialize: function(parentElement, windowClass, uiName, options) { this.parent(parentElement, windowClass, uiName, options); + this.__styleValues = {hue: qwebirc.ui.DEFAULT_HUE, saturation: 0, lightness: 0, textHue: null, textSaturation: null, textLightness: null}; + if($defined(this.options.hue)) this.__styleValues.hue = this.options.hue; this.tabCompleter = new qwebirc.ui.TabCompleterFactory(this); this.uiOptions = new qwebirc.ui.DefaultOptionsClass(this, options.uiOptionsArg); this.customWindows = new QHash(); - - this.__styleValues = {hue: this.uiOptions.STYLE_HUE, saturation: 0, lightness: 0}; - if($defined(this.options.hue)) this.__styleValues.hue = this.options.hue; + if($defined(this.options.saturation)) this.__styleValues.saturation = this.options.saturation; if($defined(this.options.lightness)) this.__styleValues.lightness = this.options.lightness; + if($defined(this.options.tsaturation)) this.__styleValues.textSaturation = this.options.tsaturation; + if($defined(this.options.tlightness)) this.__styleValues.textLightness = this.options.tlightness; + + if($defined(this.options.hue)) { /* overridden in url */ + /* ugh... this will go away when we add proper options for hue/sat/light for text and background */ + this.uiOptions.setValueByPrefix("STYLE_HUE", this.__styleValues.hue); + } else { + this.__styleValues.hue = this.uiOptions.STYLE_HUE; /* otherwise copy from serialised store */ + } + this.__styleValues.textHue = $defined(this.options.thue) ? this.options.thue : this.__styleValues.hue; - if(this.options.thue !== null) this.__styleValues.textHue = this.options.thue; - if(this.options.tsaturation !== null) this.__styleValues.textSaturation = this.options.tsaturation; - if(this.options.tlightness !== null) this.__styleValues.textLightness = this.options.tlightness; - document.addEvent("keydown", this.__handleHotkey.bind(this)); }, __handleHotkey: function(x) { var success = false; - if(!x.alt || x.control) { + if(!x.alt && !x.control && !x.shift && !x.meta) { if((x.key == "backspace" || x.key == "/") && !this.getInputFocused(x)) { success = true; } + } else if(!x.alt || x.control || x.meta) { + /* do nothing */ } else if(x.key == "a" || x.key == "A") { var highestNum = 0; var highestIndex = -1; @@ -258,7 +296,7 @@ qwebirc.ui.StandardUI = new Class({ } if(highestIndex > -1) this.selectWindow(this.windowArray[highestIndex]); - } else if(x.key >= '0' && x.key <= '9') { + } else if((x.key >= '0' && x.key <= '9') && !x.shift) { success = true; number = x.key - '0'; @@ -271,13 +309,14 @@ qwebirc.ui.StandardUI = new Class({ return; this.selectWindow(this.windowArray[number]); - } else if(x.key == "left") { + } else if((x.key == "left" || x.key == "up") && !x.shift) { this.prevWindow(); success = true; - } else if(x.key == "right") { + } else if((x.key == "right" || x.key == "down") && !x.shift) { this.nextWindow(); success = true; } + if(success) { new Event(x).stop(); x.preventDefault(); @@ -291,7 +330,7 @@ qwebirc.ui.StandardUI = new Class({ newCustomWindow: function(name, select, type) { if(!type) type = qwebirc.ui.WINDOW_CUSTOM; - + var w = this.newWindow(qwebirc.ui.CUSTOM_CLIENT, type, name); w.addEvent("close", function(w) { this.windows.get(qwebirc.ui.CUSTOM_CLIENT).remove(w.identifier); @@ -302,7 +341,7 @@ qwebirc.ui.StandardUI = new Class({ return w; }, - addCustomWindow: function(windowName, class_, cssClass, options) { + addCustomWindow: function(windowName, class_, cssClass, options, type) { if(!$defined(options)) options = {}; @@ -311,7 +350,7 @@ qwebirc.ui.StandardUI = new Class({ return; } - var d = this.newCustomWindow(windowName, true); + var d = this.newCustomWindow(windowName, true, type); this.customWindows.put(windowName, d); d.addEvent("close", function() { @@ -368,8 +407,8 @@ qwebirc.ui.StandardUI = new Class({ return null; }, - tabComplete: function(element) { - this.tabCompleter.tabComplete(element); + tabComplete: function(element, backwards) { + this.tabCompleter.tabComplete(element, backwards); }, resetTabComplete: function() { this.tabCompleter.reset(); @@ -379,18 +418,19 @@ qwebirc.ui.StandardUI = new Class({ this.setModifiableStylesheetValues({}); }, setModifiableStylesheetValues: function(values) { - for(var k in values) + for (var k in values) this.__styleValues[k] = values[k]; - - if(!$defined(this.__styleSheet)) + + if (!$defined(this.__styleSheet)) return; - - var back = {hue: this.__styleValues.hue, lightness: this.__styleValues.lightness, saturation: this.__styleValues.saturation}; - var front = {hue: this.__styleValues.textHue, lightness: this.__styleValues.textLightness, saturation: this.__styleValues.textSaturation}; - if(!this.__styleValues.textHue && !this.__styleValues.textLightness && !this.__styleValues.textSaturation) + var back = {hue: this.__styleValues.hue, lightness: this.__styleValues.lightness, saturation: this.__styleValues.saturation}; + var front; + if (!$defined(this.__styleValues.textHue) && !$defined(this.__styleValues.textLightness) && !$defined(this.__styleValues.textSaturation)) { front = back; - + } else { + front = {hue: Number(this.__styleValues.textHue), lightness: Number(this.__styleValues.textLightness), saturation: Number(this.__styleValues.textSaturation)} + } var colours = { back: back, front: front @@ -450,28 +490,13 @@ qwebirc.ui.NotificationUI = new Class({ } }); -qwebirc.ui.NewLoginUI = new Class({ - Extends: qwebirc.ui.NotificationUI, - loginBox: function(callbackfn, initialNickname, initialChannels, autoConnect, autoNick) { - this.postInitialize(); - - /* I'd prefer something shorter and snappier! */ - var w = this.newCustomWindow("Connect", true, qwebirc.ui.WINDOW_CONNECT); - var callback = function(args) { - w.close(); - callbackfn(args); - }; - - qwebirc.ui.GenericLoginBox(w.lines, callback, initialNickname, initialChannels, autoConnect, autoNick, this.options.networkName); - } -}); - qwebirc.ui.QuakeNetUI = new Class({ - Extends: qwebirc.ui.NewLoginUI, + Extends: qwebirc.ui.NotificationUI, urlDispatcher: function(name, window) { if(name == "qwhois") { return ["span", function(auth) { - this.client.exec("/MSG Q whois #" + auth); + if($defined(this.parentObject.options.accountWhoisCommand)) + this.client.exec(this.parentObject.options.accountWhoisCommand + auth); }.bind(window)]; } return this.parent(name, window);