X-Git-Url: https://jfr.im/git/irc/quakenet/qwebirc.git/blobdiff_plain/398b5566af687b3cd5cf66b726eacae82d6b1980..5f464ed53c5b2178c516fbf98607f801f24a9953:/js/ui/frontends/qui.js diff --git a/js/ui/frontends/qui.js b/js/ui/frontends/qui.js index f89fda4..cfe4b71 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)); @@ -300,12 +331,12 @@ qwebirc.ui.QUI.JSUI = new Class({ bottom.setStyle("top", (docsize.y - bottomsize.y)); this.fireEvent("reflow"); }, - showChannel: function(state) { + showChannel: function(state, nicklistVisible) { var display = "none"; if(state) display = "block"; - this.right.setStyle("display", display); + this.right.setStyle("display", nicklistVisible ? display : "none"); this.topic.setStyle("display", display); }, showInput: function(state) { @@ -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(); @@ -423,19 +471,19 @@ qwebirc.ui.QUI.Window = new Class({ parent.appendChild(e); e.addClass("menu"); + var nickArray = [nick]; qwebirc.ui.MENU_ITEMS.forEach(function(x) { - var text = x[0], fn = x[1], visible_fn = x[2]; - - if(visible_fn == qwebirc.ui.menuitems.fns.always || visible_fn.apply(this)) { - var e2 = new Element("a"); - e.appendChild(e2); + if(!x.predicate || x.predicate !== true && !x.predicate.apply(this, nickArray)) + return; + + var e2 = new Element("a"); + e.appendChild(e2); - e2.href = "#"; - e2.set("text", "- " + text); + e2.href = "#"; + e2.set("text", "- " + x.text); - e2.addEvent("focus", function() { this.blur() }.bind(e2)); - e2.addEvent("click", function(ev) { new Event(ev.stop()); this.menuClick(fn); }.bind(this)); - } + e2.addEvent("focus", function() { this.blur() }.bind(e2)); + e2.addEvent("click", function(ev) { new Event(ev.stop()); this.menuClick(x.fn); }.bind(this)); }.bind(this)); return e; }, @@ -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) { @@ -485,7 +542,7 @@ qwebirc.ui.QUI.Window = new Class({ this.prevNick = e; e.addClass("selected"); this.moveMenuClass(); - e.menu = this.createMenu(x.realNick, e); + e.menu = this.createMenu(e.realNick, e); new Event(x).stop(); }.bind(this)); @@ -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"); @@ -522,7 +581,7 @@ qwebirc.ui.QUI.Window = new Class({ this.parentObject.setLines(this.lines); this.parentObject.setChannelItems(this.nicklist, this.topic); this.parentObject.qjsui.showInput(inputVisible); - this.parentObject.qjsui.showChannel($defined(this.nicklist)); + this.parentObject.qjsui.showChannel($defined(this.nicklist), this.parentObject.uiOptions.SHOW_NICKLIST); this.reflow(); @@ -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