]> jfr.im git - irc/quakenet/qwebirc.git/blob - js/ui/swmui.js
Add login box to SWMUI, add login box to base classes.
[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.addStyle("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) {
179 var box = new Element("div");
180
181 var header = new Element("h1");
182 header.set("text", "qwebirc");
183 box.appendChild(header);
184
185 var form = new Element("form");
186
187 var boxtable = new Element("table");
188
189 var nickrow = new Element("tr");
190 var nicklabel = new Element("td");
191 nicklabel.set("text", "Nickname:");
192 nickrow.appendChild(nicklabel);
193
194 var nickbox = new Element("td");
195 var nick = new Element("input");
196 nickbox.appendChild(nick);
197 nickrow.appendChild(nickbox);
198
199 var chanrow = new Element("tr");
200 var chanlabel = new Element("td");
201 chanlabel.set("text", "Channels (comma seperated):");
202 chanrow.appendChild(chanlabel);
203
204 var chanbox = new Element("td");
205 var chan = new Element("input");
206 chanbox.appendChild(chan);
207 chanrow.appendChild(chanbox);
208
209 var connrow = new Element("tr");
210 var connblank = new Element("td");
211 var connbuttontd = new Element("td");
212 var connbutton = new Element("input", {"type": "submit"});
213 connbutton.set("value", "Connect");
214 connbuttontd.appendChild(connbutton);
215
216 connrow.appendChild(connblank);
217 connrow.appendChild(connbuttontd);
218
219 boxtable.appendChild(nickrow);
220 boxtable.appendChild(chanrow);
221 boxtable.appendChild(connrow);
222 form.appendChild(boxtable);
223
224 form.addEvent("submit", function(e) {
225 new Event(e).stop();
226 var nickname = nick.value;
227 var chans = chan.value;
228 if(!nickname) {
229 alert("You must supply a nickname.");
230 nick.focus();
231 return;
232 }
233
234 this.parentElement.removeChild(box);
235 this.postInitialize();
236 callback(nickname, chans);
237 }.bind(this));
238
239 box.appendChild(form);
240 this.parentElement.appendChild(box);
241
242 nick.set("value", "qwebirc" + Math.ceil(Math.random() * 1000));
243 chan.set("value", "#");
244
245 nick.focus();
246 }
247 });