]> jfr.im git - irc/quakenet/qwebirc.git/commitdiff
Add command history.
authorChris Porter <redacted>
Wed, 15 Oct 2008 04:18:28 +0000 (05:18 +0100)
committerChris Porter <redacted>
Wed, 15 Oct 2008 04:18:28 +0000 (05:18 +0100)
compile.bat
compile.sh
js/irc/commandhistory.js [new file with mode: 0644]
js/jslib.js
js/ui/baseui.js
js/ui/baseuiwindow.js
js/ui/qui.js
static/mochauidebug.html
static/quidebug.html
static/swmuidebug.html
static/uglyuidebug.html

index 2c78662859f523ee41b0c11394aeb0ce7b874942..7d1f84888030949368e2c0bb231c2ab220ffa363 100644 (file)
@@ -4,7 +4,7 @@ del /q compiled\*.js
 \r
 cd js\r
 copy version.js + jslib.js + irc\ircconnection.js + irc\irclib.js + irc\baseircclient.js + irc\irctracker.js + irc\commandparser.js + irc\ircclient.js + ui\baseui.js + ui\baseuiwindow.js + ui\colour.js + ui\url.js + ui\theme.js + qwebircinterface.js ..\compiled\qwebirc-concat.js /b\r
-copy ui\swmlayout.js + ui\swmui.js ..\compiled\swmui-concat.js /b\r
+copy ui\swmlayout.js + ui\swmui.js + irc\commandhistory.js ..\compiled\swmui-concat.js /b\r
 cd ..\compiled\r
 \r
 java -jar ..\bin\yuicompressor-2.3.5.jar ..\static\js\mochaui\mocha.js > mocha-compressed.js\r
index 974a5c29da39c236c6aea28c67230cc8a322028a..f6468a64c6714e28baed0433fbb4c1e8a93c2f33 100755 (executable)
@@ -3,7 +3,7 @@ mkdir -p compiled
 rm -f compiled/*.js
 
 cd js
-cat version.js jslib.js irc/ircconnection.js irc/irclib.js irc/baseircclient.js irc/irctracker.js irc/commandparser.js irc/ircclient.js ui/baseui.js ui/baseuiwindow.js ui/colour.js ui/url.js ui/theme.js qwebircinterface.js > ../compiled/qwebirc-concat.js
+cat version.js jslib.js irc/ircconnection.js irc/irclib.js irc/baseircclient.js irc/irctracker.js irc/commandparser.js irc/ircclient.js ui/baseui.js ui/baseuiwindow.js ui/colour.js ui/url.js ui/theme.js irc/commandhistory.js qwebircinterface.js > ../compiled/qwebirc-concat.js
 cat ui/swmlayout.js ui/swmui.js > ../compiled/swmui-concat.js
 
 error() {
diff --git a/js/irc/commandhistory.js b/js/irc/commandhistory.js
new file mode 100644 (file)
index 0000000..5577b09
--- /dev/null
@@ -0,0 +1,33 @@
+var CommandHistory = new Class({
+  Implements: [Options],
+  options: {
+    lines: 20
+  },
+  initialize: function(options) {
+    this.setOptions(options);
+    
+    this.data = [];
+    this.position = -1;
+  },
+  addLine: function(line) {
+    this.data.unshift(line);
+    this.position = -1;
+    
+    if(this.data.length > this.options.lines)
+      this.data.pop();
+  },
+  prevLine: function() {
+    if(this.position == 0)
+      return null;
+    this.position = this.position - 1;
+    
+    return this.data[this.position];
+  },
+  nextLine: function() {
+    if(this.position >= this.data.length)
+      return null;
+    this.position = this.position + 1;
+    
+    return this.data[this.position];
+  }
+});
index 2450a006c01f2add1cf682205e75690298ea877e..e5ecbd59abba743066ef07d62c5ea41a1cf10ca0 100644 (file)
@@ -29,3 +29,16 @@ String.prototype.splitMax = function(by, max) {
   
   return newitems;
 }
+
+function setAtEnd(obj) {
+  pos = obj.value.length;
+  
+  if(obj.createTextRange) { 
+    var range = obj.createTextRange(); 
+    range.move("character", pos); 
+    range.select(); 
+  } else if(obj.selectionStart) { 
+    obj.focus(); 
+    obj.setSelectionRange(pos, pos); 
+  } 
+}
index effdb74b677255f44ef86889f8eab3baef158852..60b1b1269e200101fc117204e9b80de571510940 100644 (file)
@@ -17,6 +17,7 @@ var BaseUI = new Class({
     this.parentElement.addClass("qwebirc");
     this.parentElement.addClass("qwebirc-" + uiName);
     this.firstClient = false;
+    this.commandhistory = new CommandHistory();
   },
   newClient: function(client) {
     this.windows[client] = {}
index fe36b9352eac831e5a58e6eef7380766ab64c916..eab089a2ee837c9788c71d4ff58a0be37ac67f81 100644 (file)
@@ -9,6 +9,8 @@ var UIWindow = new Class({
     this.identifier = identifier;
     this.hilighted = false;
     this.scrolltimer = null;
+    this.commandhistory = this.parentObject.commandhistory;
+    //new CommandHistory();
   },
   updateNickList: function(nicks) {
   },
@@ -72,5 +74,9 @@ var UIWindow = new Class({
       scrollparent.scrollTo(prev.x, parent.getScrollSize().y);
       this.scrolltimer = null;
     }
+  },
+  historyExec: function(line) {
+    this.commandhistory.addLine(line);
+    this.client.exec(line);
   }
 });
index 2ba2b840ed28a73993a7ee2d74464de4f93d55e7..79446a413c9b209bd49d047e77885c1b5df9dc7f 100644 (file)
@@ -44,17 +44,35 @@ var QUIWindow = new Class({
     
     var form = new Element("form");
     var inputbox = new Element("input");
+    
     formdiv.addClass("input");
   
     form.addEvent("submit", function(e) {
       new Event(e).stop();
     
-      this.client.exec(inputbox.value);
+      this.historyExec(inputbox.value);
       inputbox.value = "";
     }.bind(this));
     formdiv.appendChild(form);
     form.appendChild(inputbox);
     
+    inputbox.addEvent("keypress", function(e) {
+      var result;
+      if(e.key == "up") {
+        result = this.commandhistory.nextLine();
+      } else if(e.key == "down") {
+        result = this.commandhistory.prevLine();
+      } else {
+        return;
+      }
+      
+      new Event(e).stop();
+      if(!result)
+        result = ""
+      inputbox.value = result;
+      setAtEnd(inputbox);
+    }.bind(this));
+
     var toppos = 0;
     var rightpos = 0;
     var bottompos = formdiv.getSize().y;
index 2876fe827d52f8a3b4a98c6ce2648f2dab68a389..6061551d5f51a6c2e3953ceebc58debfdd29c0bf 100644 (file)
@@ -20,6 +20,7 @@
   <script type="text/javascript" src="js/debug/irc/irctracker.js"></script>
   <script type="text/javascript" src="js/debug/irc/commandparser.js"></script>
   <script type="text/javascript" src="js/debug/irc/ircclient.js"></script>
+  <script type="text/javascript" src="js/debug/irc/commandhistory.js"></script>
   <script type="text/javascript" src="js/debug/ui/baseui.js"></script>
   <script type="text/javascript" src="js/debug/ui/baseuiwindow.js"></script>
   <script type="text/javascript" src="js/debug/ui/colour.js"></script>
index 4a77494c3f063a7eea44756b80b191acb1b65a6f..cf37a284d8db9a1a27ea19bf88ddc7bf2b555f6d 100644 (file)
@@ -13,6 +13,7 @@
   <script type="text/javascript" src="js/debug/irc/irctracker.js"></script>
   <script type="text/javascript" src="js/debug/irc/commandparser.js"></script>
   <script type="text/javascript" src="js/debug/irc/ircclient.js"></script>
+  <script type="text/javascript" src="js/debug/irc/commandhistory.js"></script>
   <script type="text/javascript" src="js/debug/ui/baseui.js"></script>
   <script type="text/javascript" src="js/debug/ui/baseuiwindow.js"></script>
   <script type="text/javascript" src="js/debug/ui/colour.js"></script>
index a687b98f16bccc8f6186a680dc4f086184239ffd..bad518c98be347041121dc02276cb0de968c7b8c 100644 (file)
@@ -13,6 +13,7 @@
   <script type="text/javascript" src="js/debug/irc/irctracker.js"></script>
   <script type="text/javascript" src="js/debug/irc/commandparser.js"></script>
   <script type="text/javascript" src="js/debug/irc/ircclient.js"></script>
+  <script type="text/javascript" src="js/debug/irc/commandhistory.js"></script>
   <script type="text/javascript" src="js/debug/ui/baseui.js"></script>
   <script type="text/javascript" src="js/debug/ui/baseuiwindow.js"></script>
   <script type="text/javascript" src="js/debug/ui/colour.js"></script>
index 859b4c152c44d416971bd4f13d738f6419864f09..eb4a49ade361f330e75d06ddd5fcfd78329b6dce 100644 (file)
@@ -13,6 +13,7 @@
   <script type="text/javascript" src="js/debug/irc/irctracker.js"></script>
   <script type="text/javascript" src="js/debug/irc/commandparser.js"></script>
   <script type="text/javascript" src="js/debug/irc/ircclient.js"></script>
+  <script type="text/javascript" src="js/debug/irc/commandhistory.js"></script>
   <script type="text/javascript" src="js/debug/ui/baseui.js"></script>
   <script type="text/javascript" src="js/debug/ui/baseuiwindow.js"></script>
   <script type="text/javascript" src="js/debug/ui/colour.js"></script>