]> jfr.im git - irc/quakenet/qwebirc.git/commitdiff
Fix issue 5 (send button for mobile phones).
authorChris Porter <redacted>
Sun, 21 Jun 2009 17:51:48 +0000 (18:51 +0100)
committerChris Porter <redacted>
Sun, 21 Jun 2009 17:51:48 +0000 (18:51 +0100)
css/qui.css
js/jslib.js
js/ui/frontends/qui.js

index f5576165513c31e5119e532675d41cdceb428e53..6e6b8cae5290b71e3534f3eed8dbdc79b46c95b3 100644 (file)
@@ -53,12 +53,22 @@ html {
   display: none;
 }
 
-.qwebirc-qui .input input {
+.qwebirc-qui .input input.keyboard-input {
   border: 0px;
   margin: 2px 0px 0px 0px;
   width: 99%;
 }
 
+.qwebirc-qui .input input.mobile-input {
+  border: 0px;
+  margin: 2px 0px 0px 0px;
+}
+
+.qwebirc-qui .input input.mobile-button {
+  position: absolute;
+  top: 0px;
+}
+
 .qwebirc-qui form {
   margin: 0px;
   padding: 0px;
index f9389f4dc998e39a103d7020db08e186f7c795fd..b61038dc6d7e290b056f24a283779f0a40c24fe5 100644 (file)
@@ -330,3 +330,37 @@ qwebirc.util.invertFn = function(fn) {
     return !fn.apply(this, arguments);
   }
 }
+
+qwebirc.util.deviceHasKeyboard = function() {
+  var determine = function() {
+    if(Browser.Engine.ipod)
+      return true;
+
+    var MOBILE_UAs = ["Nintendo Wii", " PIE", "BlackBerry", "IEMobile", "Windows CE", "Nokia", "Opera Mini", "Mobile", "mobile", "Pocket", "pocket", "Android"];
+    /* safari not included because iphones/ipods send that, and we checked for iphone/ipod specifically above */
+    var DESKTOP_UAs = ["Chrome", "Firefox", "Camino", "Iceweasel", "K-Meleon", "Konqueror", "SeaMonkey", "Windows NT", "Windows 9"];
+
+    var ua = navigator.userAgent;
+
+    var contains = function(v) {
+      return ua.indexOf(v) > -1;
+    }
+
+    for(var i=0;i<MOBILE_UAs.length;i++)
+      if(contains(MOBILE_UAs[i]))
+        return false;
+      
+    for(var i=0;i<DESKTOP_UAs.length;i++)
+      if(contains(DESKTOP_UAs[i]))
+        return true;
+      
+    return false;
+  };
+  var v = determine();
+  
+  qwebirc.util.deviceHasKeyboard = function() {
+    return v;
+  }
+  
+  return v;
+}
index 8863808c41acb59f40976ff8123be0e52ab288be..9c10dc54248063d72f951d3ad8466adef2834a4f 100644 (file)
@@ -137,28 +137,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;
     this.inputbox.maxLength = 512;
-    
-    form.addEvent("submit", function(e) {
-      new Event(e).stop();
-    
+
+    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));