]> jfr.im git - irc/quakenet/qwebirc.git/blobdiff - js/ui/frontends/qui.js
Slight change to alert dialog sent to non-opped users when trying to change topic.
[irc/quakenet/qwebirc.git] / js / ui / frontends / qui.js
index 4efc974ccd7e4e9ae9b405f18f07ab7c114b5988..d934644b1ebf6fb29bcbc3f21e00b08c06c8de36 100644 (file)
@@ -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: "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));
@@ -384,6 +415,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;
@@ -399,6 +431,22 @@ qwebirc.ui.QUI.Window = new Class({
     } else {
       this.reflow();
     }
+    
+    this.nicksColoured = this.parentObject.uiOptions.NICK_COLOURS;
+  },
+  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<nodes.length;i++) {
+          var e = nodes[i], span = e.firstChild;
+          var colour = e.realNick.toHSBColour(this.client);
+          if($defined(colour))
+            span.setStyle("color", colour.rgbToHex());
+        };
+      } else {
+        for(var i=0;i<nodes.length;i++) {
+          var span = nodes[i].firstChild;
+          span.setStyle("color", null);
+        };
+      }
+    }
   },
   deselect: function() {
     this.parent();