]>
Commit | Line | Data |
---|---|---|
1 | qwebirc.ui.WINDOW_STATUS = 1; | |
2 | qwebirc.ui.WINDOW_QUERY = 2; | |
3 | qwebirc.ui.WINDOW_CHANNEL = 3; | |
4 | qwebirc.ui.WINDOW_CUSTOM = 4; | |
5 | qwebirc.ui.WINDOW_CONNECT = 5; | |
6 | qwebirc.ui.CUSTOM_CLIENT = "custom"; | |
7 | ||
8 | qwebirc.ui.BaseUI = new Class({ | |
9 | Implements: [Events, Options], | |
10 | options: { | |
11 | appTitle: "QuakeNet Web IRC", | |
12 | singleWindow: true | |
13 | }, | |
14 | initialize: function(parentElement, windowClass, uiName, options) { | |
15 | this.setOptions(options); | |
16 | ||
17 | this.windows = {}; | |
18 | this.windows[qwebirc.ui.CUSTOM_CLIENT] = {}; | |
19 | this.windowArray = []; | |
20 | this.windowClass = windowClass; | |
21 | this.parentElement = parentElement; | |
22 | this.parentElement.addClass("qwebirc"); | |
23 | this.parentElement.addClass("qwebirc-" + uiName); | |
24 | this.firstClient = false; | |
25 | this.commandhistory = new qwebirc.irc.CommandHistory(); | |
26 | }, | |
27 | newClient: function(client) { | |
28 | client.hilightController = new qwebirc.ui.HilightController(client); | |
29 | ||
30 | this.windows[client] = {} | |
31 | var w = this.newWindow(client, qwebirc.ui.WINDOW_STATUS, "Status"); | |
32 | this.selectWindow(w); | |
33 | if(!this.firstClient) { | |
34 | this.firstClient = true; | |
35 | w.addLine("", "qwebirc v" + qwebirc.VERSION); | |
36 | w.addLine("", "Copyright (C) 2008 Chris Porter. All rights reserved."); | |
37 | w.addLine("", "http://webchat.quakenet.org/"); | |
38 | w.addLine("", "This is BETA quality software, please report bugs to slug@quakenet.org"); | |
39 | } | |
40 | return w; | |
41 | }, | |
42 | newWindow: function(client, type, name) { | |
43 | var identifier = name; | |
44 | if(type == qwebirc.ui.WINDOW_STATUS) | |
45 | identifier = ""; | |
46 | ||
47 | var w = this.windows[client][identifier] = new this.windowClass(this, client, type, name, identifier); | |
48 | this.windowArray.push(w); | |
49 | ||
50 | return w; | |
51 | }, | |
52 | getActiveWindow: function() { | |
53 | return this.active; | |
54 | }, | |
55 | __setActiveWindow: function(window) { | |
56 | this.active = window; | |
57 | }, | |
58 | selectWindow: function(window) { | |
59 | if(this.active) | |
60 | this.active.deselect(); | |
61 | window.select(); /* calls setActiveWindow */ | |
62 | document.title = window.name + " - " + this.options.appTitle; | |
63 | }, | |
64 | __closed: function(window) { | |
65 | if(window.active) { | |
66 | this.active = undefined; | |
67 | if(this.windowArray.length == 1) { | |
68 | this.windowArray = []; | |
69 | } else { | |
70 | var index = this.windowArray.indexOf(window); | |
71 | if(index == -1) { | |
72 | return; | |
73 | } else if(index == 0) { | |
74 | this.selectWindow(this.windowArray[1]); | |
75 | } else { | |
76 | this.selectWindow(this.windowArray[index - 1]); | |
77 | } | |
78 | } | |
79 | } | |
80 | ||
81 | this.windowArray = this.windowArray.erase(window); | |
82 | delete this.windows[window.client][window.identifier]; | |
83 | }, | |
84 | /* | |
85 | this shouldn't be called by overriding classes! | |
86 | they should implement their own! | |
87 | some form of user input MUST be received before an | |
88 | IRC connection is made, else users are going to get | |
89 | tricked into getting themselves glined | |
90 | */ | |
91 | loginBox: function(callback, initialNickname, initialChannels, autoConnect, autoNick) { | |
92 | qwebirc.ui.GenericLoginBox(this.parentElement, callback, initialNickname, initialChannels, autoConnect, autoNick); | |
93 | } | |
94 | }); | |
95 | ||
96 | qwebirc.ui.StandardUI = new Class({ | |
97 | Extends: qwebirc.ui.BaseUI, | |
98 | initialize: function(parentElement, windowClass, uiName, options) { | |
99 | this.parent(parentElement, windowClass, uiName, options); | |
100 | window.addEvent("keydown", function(x) { | |
101 | if(!x.alt || x.control) | |
102 | return; | |
103 | ||
104 | if(x.key == "a" || x.key == "A") { | |
105 | var highestNum = 0; | |
106 | var highestIndex = -1; | |
107 | new Event(x).stop(); | |
108 | for(var i=0;i<this.windowArray.length;i++) { | |
109 | var h = this.windowArray[i].hilighted; | |
110 | if(h > highestNum) { | |
111 | highestIndex = i; | |
112 | highestNum = h; | |
113 | } | |
114 | } | |
115 | if(highestIndex > -1) | |
116 | this.selectWindow(this.windowArray[highestIndex]); | |
117 | } else if(x.key >= '0' && x.key <= '9') { | |
118 | new Event(x).stop(); | |
119 | ||
120 | number = x.key - '0'; | |
121 | if(number == 0) | |
122 | number = 10 | |
123 | ||
124 | number = number - 1; | |
125 | ||
126 | if(number >= this.windowArray.length) | |
127 | return; | |
128 | ||
129 | this.selectWindow(this.windowArray[number]); | |
130 | } | |
131 | }.bind(this)); | |
132 | }, | |
133 | newCustomWindow: function(name, select, type) { | |
134 | if(!type) | |
135 | type = qwebirc.ui.WINDOW_CUSTOM; | |
136 | ||
137 | var w = this.newWindow(qwebirc.ui.CUSTOM_CLIENT, type, name); | |
138 | w.addEvent("close", function(w) { | |
139 | delete this.windows[name]; | |
140 | }.bind(this)); | |
141 | ||
142 | if(select) | |
143 | this.selectWindow(w); | |
144 | ||
145 | return w; | |
146 | }, | |
147 | embeddedWindow: function() { | |
148 | if(this.embedded) { | |
149 | this.selectWindow(this.embedded) | |
150 | return; | |
151 | } | |
152 | ||
153 | this.embedded = this.newCustomWindow("Embedding wizard", true); | |
154 | this.embedded.addEvent("close", function() { | |
155 | this.embedded = null; | |
156 | }.bind(this)); | |
157 | ||
158 | var ew = new qwebirc.ui.EmbedWizard({parent: this.embedded.lines}); | |
159 | ew.addEvent("close", function() { | |
160 | this.embedded.close(); | |
161 | }.bind(this)); | |
162 | }, | |
163 | urlDispatcher: function(name) { | |
164 | if(name == "embedded") | |
165 | return ["a", this.embeddedWindow.bind(this)]; | |
166 | ||
167 | return null; | |
168 | } | |
169 | }); | |
170 | ||
171 | qwebirc.ui.QuakeNetUI = new Class({ | |
172 | Extends: qwebirc.ui.StandardUI, | |
173 | urlDispatcher: function(name, window) { | |
174 | if(name == "qwhois") { | |
175 | return ["a", function(auth) { | |
176 | this.client.exec("/MSG Q whois #" + auth); | |
177 | }.bind(window)]; | |
178 | } | |
179 | if(name == "whois") { | |
180 | return ["span", function(nick) { | |
181 | this.client.exec("/WHOIS " + nick); | |
182 | }.bind(window)]; | |
183 | } | |
184 | ||
185 | return this.parent(name); | |
186 | } | |
187 | }); | |
188 | ||
189 | qwebirc.ui.NewLoginUI = new Class({ | |
190 | Extends: qwebirc.ui.QuakeNetUI, | |
191 | loginBox: function(callbackfn, initialNickname, initialChannels, autoConnect, autoNick) { | |
192 | this.postInitialize(); | |
193 | var w = this.newCustomWindow("Connect", true, qwebirc.ui.WINDOW_CONNECT); | |
194 | var callback = function(args) { | |
195 | w.close(); | |
196 | callbackfn(args); | |
197 | }; | |
198 | ||
199 | qwebirc.ui.GenericLoginBox(w.lines, callback, initialNickname, initialChannels, autoConnect, autoNick); | |
200 | } | |
201 | }); |