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.outerTabs = this.qjsui.top;
- this.__createDropdownMenu();
- this.__createDropdownHint();
-
this.tabs = new Element("div");
this.tabs.addClass("tabbar");
+
+ this.__createDropdownMenu();
+
this.outerTabs.appendChild(this.tabs);
this.origtopic = this.topic = this.qjsui.topic;
this.origlines = this.lines = this.qjsui.middle;
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);
},
__createDropdownMenu: function() {
- var dropdownMenu = new Element("div");
+ var dropdownMenu = new Element("span");
dropdownMenu.addClass("dropdownmenu");
dropdownMenu.hide = function() {
dropdownMenu.setStyle("display", "none");
dropdownMenu.visible = false;
+ document.removeEvent("mousedown", hideEvent);
}.bind(this);
- document.addEvent("mousedown", function() { dropdownMenu.hide() });
+ var hideEvent = function() { dropdownMenu.hide(); };
dropdownMenu.hide();
this.parentElement.appendChild(dropdownMenu);
dropdownEffect.start(1);
this.outerTabs.appendChild(dropdown);
- dropdownMenu.show = function(x){
+ dropdownMenu.show = function(x) {
new Event(x).stop();
+ this.hideHint();
if(dropdownMenu.visible) {
dropdownMenu.hide();
return;
}
-/*
- var left = x.client.x;
- var top = x.client.y;
- */
- /* -1 == border */
- var top = this.tabs.getSize().y;
-
+ var top = this.outerTabs.getSize().y;
+
dropdownMenu.setStyle("left", 0);
- dropdownMenu.setStyle("top", top);
+ dropdownMenu.setStyle("top", top-1); /* -1 == top border */
dropdownMenu.setStyle("display", "inline-block");
dropdownMenu.visible = true;
+
+ document.addEvent("mousedown", hideEvent);
}.bind(this);
+ dropdown.addEvent("mousedown", function(e) { new Event(e).stop(); });
dropdown.addEvent("click", dropdownMenu.show);
},
- __createDropdownHint: function() {
+ __createDropdownHint: function() {
var dropdownhint = new Element("div");
dropdownhint.addClass("dropdownhint");
dropdownhint.set("text", "Click the icon for the main menu.");
-
+ dropdownhint.setStyle("top", this.outerTabs.getSize().y + 5);
+
+ this.parentElement.appendChild(dropdownhint);
new Fx.Morph(dropdownhint, {duration: "normal", transition: Fx.Transitions.Sine.easeOut}).start({left: [900, 5]});
var hider = function() {
var hider2 = function() {
if(dropdownhint.hidden)
return;
- this.parentElement.removeChild(dropdownhint);
+ this.parentElement.removeChild(dropdownhint);
dropdownhint.hidden = 1;
}.bind(this);
hider2.delay(4000);
+ this.hideHint = hider2;
document.addEvent("mousedown", hider2);
document.addEvent("keypress", hider2);
- this.parentElement.appendChild(dropdownhint);
},
createInput: function() {
var form = new Element("form");
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 mheight = (docsize.y - topsize.y - bottomsize.y - topicsize.y);
var mwidth = (docsize.x - rightsize.x);
- topic.setStyle("top", topsize.y + "px");
+ topic.setStyle("top", topsize.y);
- middle.setStyle("top", (topsize.y + topicsize.y) + "px");
+ middle.setStyle("top", (topsize.y + topicsize.y));
if(mheight > 0) {
- middle.setStyle("height", mheight + "px");
- right.setStyle("height", mheight + "px");
+ middle.setStyle("height", mheight);
+ right.setStyle("height", mheight);
}
if(mwidth > 0)
- middle.setStyle("width", mwidth + "px");
- right.setStyle("top", (topsize.y + topicsize.y) + "px");
- right.setStyle("left", mwidth + "px");
+ middle.setStyle("width", mwidth);
+ right.setStyle("top", (topsize.y + topicsize.y));
+ right.setStyle("left", mwidth);
- bottom.setStyle("top", (docsize.y - bottomsize.y) + "px");
+ bottom.setStyle("top", (docsize.y - bottomsize.y));
this.fireEvent("reflow");
},
showChannel: function(state) {
this.topic.addClass("topic");
this.topic.addClass("tab-invisible");
this.topic.set("html", " ");
+ this.topic.addEvent("click", this.editTopic.bind(this));
this.parentObject.qjsui.applyClasses("topic", this.topic);
this.prevNick = null;
this.reflow();
}
},
+ 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 opped 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();
},
parent.appendChild(e);
e.addClass("menu");
+ var nickArray = [nick];
qwebirc.ui.MENU_ITEMS.forEach(function(x) {
+ if(!x.predicate || x.predicate !== true && !x.predicate.apply(this, nickArray))
+ return;
+
var e2 = new Element("a");
e.appendChild(e2);
-
+
e2.href = "#";
- e2.set("text", "- " + x[0]);
-
+ e2.set("text", "- " + x.text);
+
e2.addEvent("focus", function() { this.blur() }.bind(e2));
- e2.addEvent("click", function(ev) { new Event(ev.stop()); this.menuClick(x[1]); }.bind(this));
+ e2.addEvent("click", function(ev) { new Event(ev.stop()); this.menuClick(x.fn); }.bind(this));
}.bind(this));
return e;
},
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) {
+ e.menu = this.createMenu(e.realNick, e);
new Event(x).stop();
- this.client.exec("/QUERY " + e.realNick);
}.bind(this));
e.addEvent("focus", function() { this.blur() }.bind(e));
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");
this.parent(type, line, colourClass, e);
},
setHilighted: function(state) {
- laststate = this.hilighted;
+ var laststate = this.hilighted;
this.parent(state);