]>
jfr.im git - irc/quakenet/qwebirc.git/blob - js/ui/swmui.js
1 var SWMUIWindow
= new Class({
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");
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");
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");
23 this.lines
= new SWMPanel(this.contentPanel
.element
);
24 this.lines
.element
.setStyle("overflow", "auto");
26 this.tab
= new Element("span");
27 this.tab
.addClass("tab");
29 this.tab
.appendText(name
);
30 this.tab
.addEvent("click", function() {
31 parentObject
.selectWindow(this);
34 parentObject
.tabPanel
.element
.appendChild(this.tab
);
35 parentObject
.resize();
37 if(type
!= WINDOW_STATUS
) {
38 tabclose
= new Element("span");
39 tabclose
.addClass("tabclose");
40 tabclose
.addEvent("click", function(e
) {
43 if(type
== WINDOW_CHANNEL
)
44 this.client
.exec("/PART " + name
);
48 tabclose
.set("text", "X");
49 this.tab
.appendChild(tabclose
);
52 updateNickList: function(nicks
) {
55 var n
= this.nickList
.element
;
57 n
.removeChild(n
.firstChild
);
59 nicks
.each(function(nick
) {
60 var e
= new Element("div");
62 e
.appendChild(document
.createTextNode(nick
));
65 this.parentObject
.resize();
67 updateTopic: function(topic
) {
69 var t
= this.topic
.element
;
72 t
.removeChild(t
.firstChild
);
76 this.parentObject
.resize();
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");
87 deselect: function() {
90 this.contentPanel
.setHidden(true);
91 this.parentObject
.resize();
92 this.tab
.removeClass("tab-selected");
93 this.tab
.addClass("tab-unselected");
98 this.parentObject
.mainPanel
.element
.removeChild(this.contentPanel
.element
);
99 this.parentObject
.tabPanel
.element
.removeChild(this.tab
);
101 addLine: function(type
, line
, colour
) {
102 this.parent(type
, line
, colour
);
104 var e
= new Element("div");
107 e
.addStyle("background", colour
);
108 } else if(this.lastcolour
) {
109 e
.addClass("linestyle1");
111 e
.addClass("linestyle2");
115 line
= this.parentObject
.theme
.message(type
, line
);
117 Colourise(IRCTimestamp(new Date()) + " " + line
, e
);
119 this.lastcolour
= !this.lastcolour
;
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
);
126 if(prev
.y
+ prevsize
.y
== prevbottom
)
127 this.lines
.element
.scrollTo(prev
.x
, this.lines
.element
.getScrollSize().y
);
130 this.tab
.addClass("tab-highlighted");
134 var SWMUI
= new Class({
136 initialize: function(parentElement
, theme
) {
137 this.parent(parentElement
, SWMUIWindow
, "swmui");
138 this.parentElement
= parentElement
;
141 postInitialize: function() {
142 this.tabPanel
= new SWMPanel(this.parentElement
);
143 this.tabPanel
.anchor
= SWM_ANCHOR_TOP
;
144 this.tabPanel
.element
.addClass("tabs");
146 this.mainPanel
= new SWMPanel(this.parentElement
);
147 this.mainPanel
.element
.addClass("main");
149 this.entryPanel
= new SWMPanel(this.parentElement
);
150 this.entryPanel
.anchor
= SWM_ANCHOR_BOTTOM
;
151 this.entryPanel
.element
.addClass("entry");
153 var form
= new Element("form");
155 var inputbox
= new Element("input");
157 window
.addEvent("resize", function() {
158 var s
= this.entryPanel
.element
.getSize().x
- 4;
159 inputbox
.setStyle("width", s
+ "px");
162 form
.addEvent("submit", function(e
) {
165 this.getActiveWindow().client
.exec(inputbox
.value
);
169 this.entryPanel
.element
.appendChild(form
);
170 form
.appendChild(inputbox
);
176 window
.fireEvent("resize");
178 loginBox: function(callback
) {
179 var box
= new Element("div");
181 var header
= new Element("h1");
182 header
.set("text", "qwebirc");
183 box
.appendChild(header
);
185 var form
= new Element("form");
187 var boxtable
= new Element("table");
189 var nickrow
= new Element("tr");
190 var nicklabel
= new Element("td");
191 nicklabel
.set("text", "Nickname:");
192 nickrow
.appendChild(nicklabel
);
194 var nickbox
= new Element("td");
195 var nick
= new Element("input");
196 nickbox
.appendChild(nick
);
197 nickrow
.appendChild(nickbox
);
199 var chanrow
= new Element("tr");
200 var chanlabel
= new Element("td");
201 chanlabel
.set("text", "Channels (comma seperated):");
202 chanrow
.appendChild(chanlabel
);
204 var chanbox
= new Element("td");
205 var chan
= new Element("input");
206 chanbox
.appendChild(chan
);
207 chanrow
.appendChild(chanbox
);
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
);
216 connrow
.appendChild(connblank
);
217 connrow
.appendChild(connbuttontd
);
219 boxtable
.appendChild(nickrow
);
220 boxtable
.appendChild(chanrow
);
221 boxtable
.appendChild(connrow
);
222 form
.appendChild(boxtable
);
224 form
.addEvent("submit", function(e
) {
226 var nickname
= nick
.value
;
227 var chans
= chan
.value
;
229 alert("You must supply a nickname.");
234 this.parentElement
.removeChild(box
);
235 this.postInitialize();
236 callback(nickname
, chans
);
239 box
.appendChild(form
);
240 this.parentElement
.appendChild(box
);
242 nick
.set("value", "qwebirc" + Math
.ceil(Math
.random() * 1000));
243 chan
.set("value", "#");