\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
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() {
--- /dev/null
+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];
+ }
+});
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);
+ }
+}
this.parentElement.addClass("qwebirc");
this.parentElement.addClass("qwebirc-" + uiName);
this.firstClient = false;
+ this.commandhistory = new CommandHistory();
},
newClient: function(client) {
this.windows[client] = {}
this.identifier = identifier;
this.hilighted = false;
this.scrolltimer = null;
+ this.commandhistory = this.parentObject.commandhistory;
+ //new CommandHistory();
},
updateNickList: function(nicks) {
},
scrollparent.scrollTo(prev.x, parent.getScrollSize().y);
this.scrolltimer = null;
}
+ },
+ historyExec: function(line) {
+ this.commandhistory.addLine(line);
+ this.client.exec(line);
}
});
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;
<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>
<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>
<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>
<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>