]> jfr.im git - irc/quakenet/qwebirc.git/blob - js/ui/swmui.js
Fix swmui login box in IE.
[irc/quakenet/qwebirc.git] / js / ui / swmui.js
1 var SWMUIWindow = new Class({
2 Extends: UIWindow,
3
4 initialize: function(parentObject, client, type, name) {
5 this.parent(parentObject, client, type, name);
6 this.contentPanel = new SWMPanel(parentObject.mainPanel.element, true);
7 this.contentPanel.element.addClass("content");
8 this.contentPanel.element.setStyle("overflow", "auto");
9
10 if(type == WINDOW_CHANNEL) {
11 this.nickList = new SWMPanel(this.contentPanel.element);
12 this.nickList.anchor = SWM_ANCHOR_RIGHT;
13 this.nickList.element.setStyle("overflow", "auto");
14 this.nickList.element.addClass("nicklist");
15 }
16
17 if(type == WINDOW_CHANNEL) {
18 this.topic = new SWMPanel(this.contentPanel.element);
19 this.topic.anchor = SWM_ANCHOR_TOP;
20 this.topic.element.addClass("topic");
21 }
22
23 this.lines = new SWMPanel(this.contentPanel.element);
24 this.lines.element.setStyle("overflow", "auto");
25
26 this.tab = new Element("span");
27 this.tab.addClass("tab");
28
29 this.tab.appendText(name);
30 this.tab.addEvent("click", function() {
31 parentObject.selectWindow(this);
32 }.bind(this));
33
34 parentObject.tabPanel.element.appendChild(this.tab);
35 parentObject.resize();
36
37 if(type != WINDOW_STATUS) {
38 tabclose = new Element("span");
39 tabclose.addClass("tabclose");
40 tabclose.addEvent("click", function(e) {
41 new Event(e).stop();
42
43 if(type == WINDOW_CHANNEL)
44 this.client.exec("/PART " + name);
45
46 this.close();
47 }.bind(this));
48 tabclose.set("text", "X");
49 this.tab.appendChild(tabclose);
50 }
51 },
52 updateNickList: function(nicks) {
53 this.parent(nicks);
54
55 var n = this.nickList.element;
56 while(n.firstChild)
57 n.removeChild(n.firstChild);
58
59 nicks.each(function(nick) {
60 var e = new Element("div");
61 n.appendChild(e);
62 e.appendChild(document.createTextNode(nick));
63 });
64
65 this.parentObject.resize();
66 },
67 updateTopic: function(topic) {
68 this.parent(topic);
69 var t = this.topic.element;
70
71 while(t.firstChild)
72 t.removeChild(t.firstChild);
73
74 Colourise(topic, t);
75
76 this.parentObject.resize();
77 },
78 select: function() {
79 this.parent();
80
81 this.contentPanel.setHidden(false);
82 this.parentObject.resize();
83 this.tab.removeClass("tab-highlighted");
84 this.tab.removeClass("tab-unselected");
85 this.tab.addClass("tab-selected");
86 },
87 deselect: function() {
88 this.parent();
89
90 this.contentPanel.setHidden(true);
91 this.parentObject.resize();
92 this.tab.removeClass("tab-selected");
93 this.tab.addClass("tab-unselected");
94 },
95 close: function() {
96 this.parent();
97
98 this.parentObject.mainPanel.element.removeChild(this.contentPanel.element);
99 this.parentObject.tabPanel.element.removeChild(this.tab);
100 },
101 addLine: function(type, line, colour) {
102 this.parent(type, line, colour);
103
104 var e = new Element("div");
105
106 if(colour) {
107 e.setStyles({"background": colour});
108 } else if(this.lastcolour) {
109 e.addClass("linestyle1");
110 } else {
111 e.addClass("linestyle2");
112 }
113
114 if(type)
115 line = this.parentObject.theme.message(type, line);
116
117 Colourise(IRCTimestamp(new Date()) + " " + line, e);
118
119 this.lastcolour = !this.lastcolour;
120
121 var prev = this.lines.element.getScroll();
122 var prevbottom = this.lines.element.getScrollSize().y;
123 var prevsize = this.lines.element.getSize();
124 this.lines.element.appendChild(e);
125
126 if(prev.y + prevsize.y == prevbottom)
127 this.lines.element.scrollTo(prev.x, this.lines.element.getScrollSize().y);
128
129 if(!this.active)
130 this.tab.addClass("tab-highlighted");
131 }
132 });
133
134 var SWMUI = new Class({
135 Extends: UI,
136 initialize: function(parentElement, theme) {
137 this.parent(parentElement, SWMUIWindow, "swmui");
138 this.parentElement = parentElement;
139 this.theme = theme;
140 },
141 postInitialize: function() {
142 this.tabPanel = new SWMPanel(this.parentElement);
143 this.tabPanel.anchor = SWM_ANCHOR_TOP;
144 this.tabPanel.element.addClass("tabs");
145
146 this.mainPanel = new SWMPanel(this.parentElement);
147 this.mainPanel.element.addClass("main");
148
149 this.entryPanel = new SWMPanel(this.parentElement);
150 this.entryPanel.anchor = SWM_ANCHOR_BOTTOM;
151 this.entryPanel.element.addClass("entry");
152
153 var form = new Element("form");
154
155 var inputbox = new Element("input");
156
157 window.addEvent("resize", function() {
158 var s = this.entryPanel.element.getSize().x - 4;
159 inputbox.setStyle("width", s + "px");
160 }.bind(this));
161
162 form.addEvent("submit", function(e) {
163 new Event(e).stop();
164
165 this.getActiveWindow().client.exec(inputbox.value);
166 inputbox.value = "";
167 }.bind(this));
168
169 this.entryPanel.element.appendChild(form);
170 form.appendChild(inputbox);
171 inputbox.focus();
172
173 this.resize();
174 },
175 resize: function() {
176 window.fireEvent("resize");
177 },
178 loginBox: function(callback, initialNickname, initialChannels) {
179 var box = new Element("div");
180 this.parentElement.appendChild(box);
181
182 var header = new Element("h1");
183 header.set("text", "qwebirc");
184 box.appendChild(header);
185
186 var form = new Element("form");
187 box.appendChild(form);
188
189 var boxtable = new Element("table");
190 form.appendChild(boxtable);
191
192 var tbody = new Element("tbody");
193 boxtable.appendChild(tbody); /* stupid IE */
194
195 function createRow(label, e2) {
196 var r = new Element("tr");
197 tbody.appendChild(r);
198
199 var d1 = new Element("td");
200 if(label)
201 d1.set("text", label);
202 r.appendChild(d1);
203
204 var d2 = new Element("td");
205 r.appendChild(d2);
206 d2.appendChild(e2);
207 return d1;
208 }
209
210 var nick = new Element("input");
211 createRow("Nickname:", nick);
212 var chan = new Element("input");
213 createRow("Channels (comma seperated):", chan);
214
215 var connbutton = new Element("input", {"type": "submit"});
216 connbutton.set("value", "Connect");
217 createRow(undefined, connbutton)
218
219 form.addEvent("submit", function(e) {
220 new Event(e).stop();
221 var nickname = nick.value;
222 var chans = chan.value;
223 if(chans == "#") /* sorry channel "#" :P */
224 chans = "";
225
226 if(!nickname) {
227 alert("You must supply a nickname.");
228 nick.focus();
229 return;
230 }
231
232 this.parentElement.removeChild(box);
233 this.postInitialize();
234 callback({"nickname": nickname, "autojoin": chans});
235 }.bind(this));
236
237 nick.set("value", initialNickname);
238 chan.set("value", initialChannels);
239
240 nick.focus();
241 }
242 });