qwebirc.ui.QUI = new Class({
Extends: qwebirc.ui.NewLoginUI,
- initialize: function(parentElement, theme) {
- this.parent(parentElement, qwebirc.ui.QUI.Window, "qui");
+ initialize: function(parentElement, theme, options) {
+ this.parent(parentElement, qwebirc.ui.QUI.Window, "qui", options);
this.theme = theme;
this.parentElement = parentElement;
},
postInitialize: function() {
this.qjsui = new qwebirc.ui.QUI.JSUI("qwebirc-qui", this.parentElement);
-
+ this.qjsui.addEvent("reflow", function() {
+ var w = this.getActiveWindow();
+ if($defined(w))
+ w.onResize();
+ }.bind(this));
this.qjsui.top.addClass("tabbar");
this.qjsui.bottom.addClass("input");
this.input = this.qjsui.bottom;
this.reflow = this.qjsui.reflow.bind(this.qjsui);
+ this.tabs.addEvent("mousewheel", function(x) {
+ var event = new Event(x);
+
+ /* up */
+ if(event.wheel > 0) {
+ this.nextWindow();
+ } else if(event.wheel < 0) {
+ /* down */
+ this.prevWindow();
+ }
+ event.stop();
+ }.bind(this));
+
this.createInput();
this.reflow();
},
if(inputbox.value == "")
return;
+ this.resetTabComplete();
this.getActiveWindow().historyExec(inputbox.value);
inputbox.value = "";
}.bind(this));
+ inputbox.addEvent("focus", this.resetTabComplete.bind(this));
+ inputbox.addEvent("mousedown", this.resetTabComplete.bind(this));
+
inputbox.addEvent("keydown", function(e) {
var resultfn;
var cvalue = inputbox.value;
-
+
if(e.key == "up") {
resultfn = this.commandhistory.upLine;
} else if(e.key == "down") {
resultfn = this.commandhistory.downLine;
+ } else if(e.key == "tab") {
+ new Event(e).stop();
+ this.tabComplete(inputbox);
+ return;
} else {
+ /* ideally alt and other keys wouldn't break this */
+ this.resetTabComplete();
return;
}
+ this.resetTabComplete();
if((cvalue != "") && (this.lastcvalue != cvalue))
this.commandhistory.addLine(cvalue, true);
});
qwebirc.ui.QUI.JSUI = new Class({
+ Implements: [Events],
initialize: function(class_, parent, sizer) {
this.parent = parent;
this.sizer = $defined(sizer)?sizer:parent;
right.setStyle("left", mwidth + "px");
bottom.setStyle("top", (docsize.y - bottomsize.y) + "px");
+ this.fireEvent("reflow");
},
showChannel: function(state) {
var display = "none";
qwebirc.ui.QUI.Window = new Class({
Extends: qwebirc.ui.Window,
- initialize: function(parentObject, client, type, name) {
- this.parent(parentObject, client, type, name);
+ initialize: function(parentObject, client, type, name, identifier) {
+ this.parent(parentObject, client, type, name, identifier);
this.tab = new Element("a", {"href": "#"});
this.tab.addClass("tab");
+ this.tab.addEvent("focus", function() { this.blur() }.bind(this.tab));;
+
parentObject.tabs.appendChild(this.tab);
this.tab.appendText(name);
this.tab.addEvent("click", function(e) {
new Event(e).stop();
+
+ if(this.closed)
+ return;
+
parentObject.selectWindow(this);
}.bind(this));
var tabclose = new Element("span");
tabclose.set("text", "X");
tabclose.addClass("tabclose");
- tabclose.addEvent("click", function(e) {
+ var close = function(e) {
new Event(e).stop();
+ if(this.closed)
+ return;
+
if(type == qwebirc.ui.WINDOW_CHANNEL)
this.client.exec("/PART " + name);
this.close();
- }.bind(this));
+
+ parentObject.inputbox.focus();
+ }.bind(this);
+
+ tabclose.addEvent("click", close);
+ this.tab.addEvent("mouseup", function(e) {
+ var button = 1;
+
+ if(Browser.Engine.trident)
+ button = 4;
+ if(e.event.button == button)
+ close(e);
+ }.bind(this));
+
this.tab.appendChild(tabclose);
}
this.lines = new Element("div");
this.parentObject.qjsui.applyClasses("middle", this.lines);
this.lines.addClass("lines");
+ if(type != qwebirc.ui.WINDOW_CUSTOM && type != qwebirc.ui.WINDOW_CONNECT)
+ this.lines.addClass("ircwindow");
this.lines.addEvent("scroll", function() {
this.scrolleddown = this.scrolledDown();
+ this.scrollpos = this.getScrollParent().getScroll();
}.bind(this));
if(type == qwebirc.ui.WINDOW_CHANNEL) {
this.topic.set("html", " ");
this.parentObject.qjsui.applyClasses("topic", this.topic);
+ this.prevNick = null;
this.nicklist = new Element("div");
this.nicklist.addClass("nicklist");
this.nicklist.addClass("tab-invisible");
+ this.nicklist.addEvent("click", this.removePrevMenu.bind(this));
this.parentObject.qjsui.applyClasses("nicklist", this.nicklist);
}
this.parentObject.reflow();
},
onResize: function() {
- if(this.scrolleddown)
- this.scrollToBottom();
+ if(this.scrolleddown) {
+ if(Browser.Engine.trident) {
+ this.scrollToBottom.delay(5, this);
+ } else {
+ this.scrollToBottom();
+ }
+ } else if($defined(this.scrollpos)) {
+ if(Browser.Engine.trident) {
+ this.getScrollParent().scrollTo(this.scrollpos.x, this.scrollpos.y);
+ } else {
+ this.getScrollParent().scrollTo.delay(5, this, [this.scrollpos.x, this.scrollpos.y]);
+ }
+ }
},
- updateNickList: function(nicks) {
- this.parent(nicks);
+ createMenu: function(nick, parent) {
+ var e = new Element("div");
+ parent.appendChild(e);
+ e.addClass("menu");
- var n = this.nicklist;
- while(n.firstChild)
- n.removeChild(n.firstChild);
-
- nicks.each(function(nick) {
- var e = new Element("div");
- n.appendChild(e);
- e.appendChild(document.createTextNode(nick));
- });
+ qwebirc.ui.MENU_ITEMS.forEach(function(x) {
+ var e2 = new Element("a");
+ e.appendChild(e2);
+
+ e2.href = "#";
+ e2.set("text", "- " + x[0]);
+
+ e2.addEvent("focus", function() { this.blur() }.bind(e2));
+ e2.addEvent("click", function(ev) { new Event(ev.stop()); this.menuClick(x[1]); }.bind(this));
+ }.bind(this));
+ return e;
+ },
+ menuClick: function(fn) {
+ /*
+ this.prevNick.removeChild(this.prevNick.menu);
+ this.prevNick.menu = null;
+ */
+ fn.bind(this)(this.prevNick.realNick);
+ this.removePrevMenu();
+ },
+ moveMenuClass: function() {
+ if(!this.prevNick)
+ return;
+ if(this.nicklist.firstChild == this.prevNick) {
+ this.prevNick.removeClass("selected-middle");
+ } else {
+ this.prevNick.addClass("selected-middle");
+ }
+ },
+ removePrevMenu: function() {
+ if(!this.prevNick)
+ return;
+
+ this.prevNick.removeClass("selected");
+ this.prevNick.removeClass("selected-middle");
+ if(this.prevNick.menu)
+ this.prevNick.removeChild(this.prevNick.menu);
+ this.prevNick = null;
+ },
+ nickListAdd: function(nick, position) {
+ var e = new Element("a");
+ qwebirc.ui.insertAt(position, this.nicklist, e);
+
+ e.href = "#";
+ e.appendChild(document.createTextNode(nick));
+
+ e.realNick = this.client.stripPrefix(nick);
+
+ e.addEvent("click", function(x) {
+ if(this.prevNick == e) {
+ this.removePrevMenu();
+ return;
+ }
+
+ this.removePrevMenu();
+ this.prevNick = e;
+ e.addClass("selected");
+ this.moveMenuClass();
+ e.menu = this.createMenu(x.realNick, e);
+ new Event(x).stop();
+ }.bind(this));
+ e.addEvent("dblclick", function(x) {
+ new Event(x).stop();
+ this.client.exec("/QUERY " + e.realNick);
+ }.bind(this));
+
+ e.addEvent("focus", function() { this.blur() }.bind(e));
+ this.moveMenuClass();
+ return e;
+ },
+ nickListRemove: function(nick, stored) {
+ this.nicklist.removeChild(stored);
+ this.moveMenuClass();
},
updateTopic: function(topic) {
var t = this.topic;