X-Git-Url: https://jfr.im/git/irc/quakenet/qwebirc.git/blobdiff_plain/27add99a28c4bf17dea0e8819c2a7aadcbc90a4c..c16d092d4ae070832b806472b046623f89b5bcb2:/js/ui/frontends/qui.js diff --git a/js/ui/frontends/qui.js b/js/ui/frontends/qui.js index 4efc974..a8ac001 100644 --- a/js/ui/frontends/qui.js +++ b/js/ui/frontends/qui.js @@ -1,9 +1,10 @@ qwebirc.ui.QUI = new Class({ - Extends: qwebirc.ui.NewLoginUI, + Extends: qwebirc.ui.RootUI, initialize: function(parentElement, theme, options) { this.parent(parentElement, qwebirc.ui.QUI.Window, "qui", options); this.theme = theme; this.parentElement = parentElement; + this.setModifiableStylesheet("qui"); }, postInitialize: function() { this.qjsui = new qwebirc.ui.QUI.JSUI("qwebirc-qui", this.parentElement); @@ -49,7 +50,8 @@ qwebirc.ui.QUI = new Class({ this.createInput(); this.reflow(); - + this.reflow.delay(100); /* Konqueror fix */ + /* HACK, in Chrome this should work immediately but doesn't */ this.__createDropdownHint.delay(100, this); }, @@ -82,7 +84,7 @@ qwebirc.ui.QUI = new Class({ var dropdown = new Element("div"); dropdown.addClass("dropdown-tab"); - dropdown.appendChild(new Element("img", {src: "images/favicon.png", title: "menu", alt: "menu"})); + dropdown.appendChild(new Element("img", {src: qwebirc.global.staticBaseURL + "images/icon.png", title: "menu", alt: "menu"})); dropdown.setStyle("opacity", 1); var dropdownEffect = new Fx.Tween(dropdown, {duration: "long", property: "opacity", link: "chain"}); @@ -136,27 +138,56 @@ qwebirc.ui.QUI = new Class({ document.addEvent("mousedown", hider2); document.addEvent("keypress", hider2); - }, createInput: function() { var form = new Element("form"); this.input.appendChild(form); + form.addClass("input"); var inputbox = new Element("input"); form.appendChild(inputbox); this.inputbox = inputbox; - - form.addEvent("submit", function(e) { - new Event(e).stop(); - + this.inputbox.maxLength = 512; + + var sendInput = function() { if(inputbox.value == "") return; this.resetTabComplete(); this.getActiveWindow().historyExec(inputbox.value); inputbox.value = ""; - }.bind(this)); + }.bind(this); + + if(!qwebirc.util.deviceHasKeyboard()) { + inputbox.addClass("mobile-input"); + var inputButton = new Element("input", {type: "button"}); + inputButton.addClass("mobile-button"); + inputButton.addEvent("click", function() { + sendInput(); + inputbox.focus(); + }); + inputButton.value = ">"; + this.input.appendChild(inputButton); + var reflowButton = function() { + var containerSize = this.input.getSize(); + var buttonSize = inputButton.getSize(); + + var buttonLeft = containerSize.x - buttonSize.x - 5; /* lovely 5 */ + + inputButton.setStyle("left", buttonLeft); + inputbox.setStyle("width", buttonLeft - 5); + inputButton.setStyle("height", containerSize.y); + }.bind(this); + this.qjsui.addEvent("reflow", reflowButton); + } else { + inputbox.addClass("keyboard-input"); + } + + form.addEvent("submit", function(e) { + new Event(e).stop(); + sendInput(); + }); inputbox.addEvent("focus", this.resetTabComplete.bind(this)); inputbox.addEvent("mousedown", this.resetTabComplete.bind(this)); @@ -323,8 +354,10 @@ qwebirc.ui.QUI.Window = new Class({ this.tab = new Element("a", {"href": "#"}); this.tab.addClass("tab"); this.tab.addEvent("focus", function() { this.blur() }.bind(this.tab));; - + + this.spaceNode = document.createTextNode(" "); parentObject.tabs.appendChild(this.tab); + parentObject.tabs.appendChild(this.spaceNode); this.tab.appendText(name); this.tab.addEvent("click", function(e) { @@ -384,6 +417,7 @@ qwebirc.ui.QUI.Window = new Class({ this.topic.addClass("topic"); this.topic.addClass("tab-invisible"); this.topic.set("html", " "); + this.topic.addEvent("dblclick", this.editTopic.bind(this)); this.parentObject.qjsui.applyClasses("topic", this.topic); this.prevNick = null; @@ -394,11 +428,25 @@ qwebirc.ui.QUI.Window = new Class({ this.parentObject.qjsui.applyClasses("nicklist", this.nicklist); } - if(type == qwebirc.ui.WINDOW_CHANNEL) { + if(type == qwebirc.ui.WINDOW_CHANNEL) this.updateTopic(""); - } else { - this.reflow(); + + this.nicksColoured = this.parentObject.uiOptions.NICK_COLOURS; + this.reflow(); + }, + editTopic: function() { + if(!this.client.nickOnChanHasPrefix(this.client.nickname, this.name, "@")) { +/* var cmodes = this.client.getChannelModes(channel); + if(cmodes.indexOf("t")) {*/ + alert("Sorry, you need to be a channel operator to change the topic!"); + return; + /*}*/ } + var newTopic = prompt("Change topic of " + this.name + " to:", this.topic.topicText); + if(newTopic === null) + return; + + this.client.exec("/TOPIC " + newTopic); }, reflow: function() { this.parentObject.reflow(); @@ -467,13 +515,22 @@ qwebirc.ui.QUI.Window = new Class({ this.prevNick = null; }, nickListAdd: function(nick, position) { + var realNick = this.client.stripPrefix(nick); + var e = new Element("a"); qwebirc.ui.insertAt(position, this.nicklist, e); e.href = "#"; - e.appendChild(document.createTextNode(nick)); + var span = new Element("span"); + if(this.parentObject.uiOptions.NICK_COLOURS) { + var colour = realNick.toHSBColour(this.client); + if($defined(colour)) + span.setStyle("color", colour.rgbToHex()); + } + span.set("text", nick); + e.appendChild(span); - e.realNick = this.client.stripPrefix(nick); + e.realNick = realNick; e.addEvent("click", function(x) { if(this.prevNick == e) { @@ -504,8 +561,10 @@ qwebirc.ui.QUI.Window = new Class({ t.removeChild(t.firstChild); if(topic) { + t.topicText = topic; this.parent(topic, t); } else { + t.topicText = topic; var e = new Element("div"); e.set("text", "(no topic set)"); e.addClass("emptytopic"); @@ -530,6 +589,25 @@ qwebirc.ui.QUI.Window = new Class({ if(inputVisible) this.parentObject.inputbox.focus(); + + if(this.type == qwebirc.ui.WINDOW_CHANNEL && this.nicksColoured != this.parentObject.uiOptions.NICK_COLOURS) { + this.nicksColoured = this.parentObject.uiOptions.NICK_COLOURS; + + var nodes = this.nicklist.childNodes; + if(this.parentObject.uiOptions.NICK_COLOURS) { + for(var i=0;i