]>
jfr.im git - irc/quakenet/qwebirc.git/blob - js/ui/qui.js
1 qwebirc
.ui
.QUI
= new Class({
2 Extends: qwebirc
.ui
.NewLoginUI
,
3 initialize: function(parentElement
, theme
) {
4 this.parent(parentElement
, qwebirc
.ui
.QUI
.Window
, "qui");
6 this.parentElement
= parentElement
;
8 postInitialize: function() {
9 this.qjsui
= new qwebirc
.ui
.QUI
.JSUI("qwebirc-qui", this.parentElement
);
11 this.qjsui
.top
.addClass("tabbar");
13 this.qjsui
.bottom
.addClass("input");
14 this.qjsui
.right
.addClass("nicklist");
15 this.qjsui
.topic
.addClass("topic");
16 this.qjsui
.middle
.addClass("lines");
18 this.tabs
= this.qjsui
.top
;
19 this.origtopic
= this.topic
= this.qjsui
.topic
;
20 this.origlines
= this.lines
= this.qjsui
.middle
;
21 this.orignicklist
= this.nicklist
= this.qjsui
.right
;
23 this.input
= this.qjsui
.bottom
;
24 this.reflow
= this.qjsui
.reflow
.bind(this.qjsui
);
29 createInput: function() {
30 var form
= new Element("form");
31 this.input
.appendChild(form
);
32 form
.addClass("input");
34 var inputbox
= new Element("input");
35 form
.appendChild(inputbox
);
36 this.inputbox
= inputbox
;
38 form
.addEvent("submit", function(e
) {
41 if(inputbox
.value
== "")
44 this.getActiveWindow().historyExec(inputbox
.value
);
48 inputbox
.addEvent("keydown", function(e
) {
50 var cvalue
= inputbox
.value
;
53 resultfn
= this.commandhistory
.upLine
;
54 } else if(e
.key
== "down") {
55 resultfn
= this.commandhistory
.downLine
;
60 if((cvalue
!= "") && (this.lastcvalue
!= cvalue
))
61 this.commandhistory
.addLine(cvalue
, true);
63 var result
= resultfn
.bind(this.commandhistory
)();
68 this.lastcvalue
= result
;
70 inputbox
.value
= result
;
71 qwebirc
.util
.setAtEnd(inputbox
);
74 setLines: function(lines
) {
75 this.lines
.parentNode
.replaceChild(lines
, this.lines
);
76 this.qjsui
.middle
= this.lines
= lines
;
78 setChannelItems: function(nicklist
, topic
) {
79 if(!$defined(nicklist
)) {
80 nicklist
= this.orignicklist
;
81 topic
= this.origtopic
;
83 this.nicklist
.parentNode
.replaceChild(nicklist
, this.nicklist
);
84 this.qjsui
.right
= this.nicklist
= nicklist
;
86 this.topic
.parentNode
.replaceChild(topic
, this.topic
);
87 this.qjsui
.topic
= this.topic
= topic
;
91 qwebirc
.ui
.QUI
.JSUI
= new Class({
92 initialize: function(class_
, parent
, sizer
) {
94 this.sizer
= $defined(sizer
)?sizer:parent
;
99 this.reflowevent
= null;
101 window
.addEvent("resize", function() {
105 applyClasses: function(pos
, l
) {
106 l
.addClass("dynamicpanel");
107 l
.addClass(this.class_
);
109 if(pos
== "middle") {
110 l
.addClass("leftboundpanel");
111 } else if(pos
== "top") {
112 l
.addClass("topboundpanel");
113 l
.addClass("widepanel");
114 } else if(pos
== "topic") {
115 l
.addClass("widepanel");
116 } else if(pos
== "right") {
117 l
.addClass("rightboundpanel");
118 } else if(pos
== "bottom") {
119 l
.addClass("bottomboundpanel");
120 l
.addClass("widepanel");
124 var XE = function(pos
) {
125 var element
= new Element("div");
126 this.applyClasses(pos
, element
);
128 this.parent
.appendChild(element
);
132 this.top
= XE("top");
133 this.topic
= XE("topic");
134 this.middle
= XE("middle");
135 this.right
= XE("right");
136 this.bottom
= XE("bottom");
138 reflow: function(delay
) {
143 $clear(this.reflowevent
);
145 this.reflowevent
= this.__reflow
.delay(delay
, this);
147 __reflow: function() {
148 var bottom
= this.bottom
;
149 var middle
= this.middle
;
150 var right
= this.right
;
151 var topic
= this.topic
;
154 var topicsize
= topic
.getSize();
155 var topsize
= top
.getSize();
156 var rightsize
= right
.getSize();
157 var bottomsize
= bottom
.getSize();
158 var docsize
= this.sizer
.getSize();
160 var mheight
= (docsize
.y
- topsize
.y
- bottomsize
.y
- topicsize
.y
);
161 var mwidth
= (docsize
.x
- rightsize
.x
);
163 topic
.setStyle("top", topsize
.y
+ "px");
165 middle
.setStyle("top", (topsize
.y
+ topicsize
.y
) + "px");
167 middle
.setStyle("height", mheight
+ "px");
168 right
.setStyle("height", mheight
+ "px");
172 middle
.setStyle("width", mwidth
+ "px");
173 right
.setStyle("top", (topsize
.y
+ topicsize
.y
) + "px");
174 right
.setStyle("left", mwidth
+ "px");
176 bottom
.setStyle("top", (docsize
.y
- bottomsize
.y
) + "px");
178 showChannel: function(state
) {
179 var display
= "none";
183 this.right
.setStyle("display", display
);
184 this.topic
.setStyle("display", display
);
186 showInput: function(state
) {
187 this.bottom
.setStyle("display", state
?"block":"none");
191 qwebirc
.ui
.QUI
.Window
= new Class({
192 Extends: qwebirc
.ui
.Window
,
194 initialize: function(parentObject
, client
, type
, name
) {
195 this.parent(parentObject
, client
, type
, name
);
197 this.tab
= new Element("a", {"href": "#"});
198 this.tab
.addClass("tab");
199 parentObject
.tabs
.appendChild(this.tab
);
201 this.tab
.appendText(name
);
202 this.tab
.addEvent("click", function(e
) {
204 parentObject
.selectWindow(this);
207 if(type
!= qwebirc
.ui
.WINDOW_STATUS
&& type
!= qwebirc
.ui
.WINDOW_CONNECT
) {
208 var tabclose
= new Element("span");
209 tabclose
.set("text", "X");
210 tabclose
.addClass("tabclose");
211 tabclose
.addEvent("click", function(e
) {
214 if(type
== qwebirc
.ui
.WINDOW_CHANNEL
)
215 this.client
.exec("/PART " + name
);
220 this.tab
.appendChild(tabclose
);
223 this.lines
= new Element("div");
224 this.parentObject
.qjsui
.applyClasses("middle", this.lines
);
225 this.lines
.addClass("lines");
227 this.lines
.addEvent("scroll", function() {
228 this.scrolleddown
= this.scrolledDown();
231 if(type
== qwebirc
.ui
.WINDOW_CHANNEL
) {
232 this.topic
= new Element("div");
233 this.topic
.addClass("topic");
234 this.topic
.addClass("tab-invisible");
235 this.topic
.set("html", " ");
236 this.parentObject
.qjsui
.applyClasses("topic", this.topic
);
238 this.nicklist
= new Element("div");
239 this.nicklist
.addClass("nicklist");
240 this.nicklist
.addClass("tab-invisible");
241 this.parentObject
.qjsui
.applyClasses("nicklist", this.nicklist
);
244 if(type
== qwebirc
.ui
.WINDOW_CHANNEL
) {
245 this.updateTopic("");
251 this.parentObject
.reflow();
253 onResize: function() {
254 if(this.scrolleddown
)
255 this.scrollToBottom();
257 updateNickList: function(nicks
) {
260 var n
= this.nicklist
;
262 n
.removeChild(n
.firstChild
);
264 nicks
.each(function(nick
) {
265 var e
= new Element("div");
267 e
.appendChild(document
.createTextNode(nick
));
270 updateTopic: function(topic
) {
274 t
.removeChild(t
.firstChild
);
277 this.parent(topic
, t
);
279 var e
= new Element("div");
280 e
.set("text", "(no topic set)");
281 e
.addClass("emptytopic");
287 var inputVisible
= this.type
!= qwebirc
.ui
.WINDOW_CONNECT
&& this.type
!= qwebirc
.ui
.WINDOW_CUSTOM
;
289 this.tab
.removeClass("tab-unselected");
290 this.tab
.addClass("tab-selected");
292 this.parentObject
.setLines(this.lines
);
293 this.parentObject
.setChannelItems(this.nicklist
, this.topic
);
294 this.parentObject
.qjsui
.showInput(inputVisible
);
295 this.parentObject
.qjsui
.showChannel($defined(this.nicklist
));
302 this.parentObject
.inputbox
.focus();
304 deselect: function() {
307 this.tab
.removeClass("tab-selected");
308 this.tab
.addClass("tab-unselected");
313 this.parentObject
.tabs
.removeChild(this.tab
);
315 addLine: function(type
, line
, colour
) {
316 var e
= new Element("div");
319 e
.setStyles({"background": colour
});
320 } else if(this.lastcolour
) {
321 e
.addClass("linestyle1");
323 e
.addClass("linestyle2");
325 this.lastcolour
= !this.lastcolour
;
327 this.parent(type
, line
, colour
, e
);
329 setHilighted: function(state
) {
333 this.tab
.addClass("tab-hilighted");
335 this.tab
.removeClass("tab-hilighted");