]>
jfr.im git - irc/quakenet/qwebirc.git/blob - js/ui/baseui.js
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
.WINDOW_MESSAGES
= 6;
7 qwebirc
.ui
.CUSTOM_CLIENT
= "custom";
9 qwebirc
.ui
.BaseUI
= new Class({
11 initialize: function(parentElement
, windowClass
, uiName
, options
) {
12 this.options
= options
;
16 this.windows
[qwebirc
.ui
.CUSTOM_CLIENT
] = {};
17 this.windowArray
= [];
18 this.windowClass
= windowClass
;
19 this.parentElement
= parentElement
;
20 this.parentElement
.addClass("qwebirc");
21 this.parentElement
.addClass("qwebirc-" + uiName
);
22 this.firstClient
= false;
23 this.commandhistory
= new qwebirc
.irc
.CommandHistory();
26 newClient: function(client
) {
27 client
.id
= this.clientId
++;
28 client
.hilightController
= new qwebirc
.ui
.HilightController(client
);
30 this.windows
[client
.id
] = {}
31 this.clients
[client
.id
] = client
;
32 var w
= this.newWindow(client
, qwebirc
.ui
.WINDOW_STATUS
, "Status");
34 if(!this.firstClient
) {
35 this.firstClient
= true;
36 w
.addLine("", "qwebirc v" + qwebirc
.VERSION
);
37 w
.addLine("", "Copyright (C) 2008 Chris Porter. All rights reserved.");
38 w
.addLine("", "http://webchat.quakenet.org/");
39 w
.addLine("", "This is BETA quality software, please report bugs to slug@quakenet.org");
43 getClientId: function(client
) {
44 if(client
== qwebirc
.ui
.CUSTOM_CLIENT
) {
45 return qwebirc
.ui
.CUSTOM_CLIENT
;
50 getWindowIdentifier: function(type
, name
) {
51 if(type
== qwebirc
.ui
.WINDOW_MESSAGES
)
53 if(type
== qwebirc
.ui
.WINDOW_STATUS
)
55 return "_" + name
.toIRCLower();
57 newWindow: function(client
, type
, name
) {
58 var w
= this.getWindow(client
, type
, name
);
62 var wId
= this.getWindowIdentifier(type
, name
);
63 var w
= this.windows
[this.getClientId(client
)][wId
] = new this.windowClass(this, client
, type
, name
, wId
);
64 this.windowArray
.push(w
);
68 getWindow: function(client
, type
, name
) {
69 var c
= this.windows
[this.getClientId(client
)];
73 return c
[this.getWindowIdentifier(type
, name
)];
75 getActiveWindow: function() {
78 getActiveIRCWindow: function(client
) {
79 if(!this.active
|| this.active
.type
== qwebirc
.ui
.WINDOW_CUSTOM
) {
80 return this.windows
[this.getClientId(client
)][this.getWindowIdentifier(qwebirc
.ui
.WINDOW_STATUS
)];
85 __setActiveWindow: function(window
) {
88 selectWindow: function(window
) {
90 this.active
.deselect();
91 window
.select(); /* calls setActiveWindow */
92 document
.title
= window
.name
+ " - " + this.options
.appTitle
;
94 nextWindow: function(direction
) {
95 if(this.windowArray
.length
== 0 || !this.active
)
101 var index
= this.windowArray
.indexOf(this.active
);
105 index
= index
+ direction
;
107 index
= this.windowArray
.length
- 1;
108 } else if(index
>= this.windowArray
.length
) {
112 this.selectWindow(this.windowArray
[index
]);
114 prevWindow: function() {
117 __closed: function(window
) {
119 this.active
= undefined;
120 if(this.windowArray
.length
== 1) {
121 this.windowArray
= [];
123 var index
= this.windowArray
.indexOf(window
);
126 } else if(index
== 0) {
127 this.selectWindow(this.windowArray
[1]);
129 this.selectWindow(this.windowArray
[index
- 1]);
134 this.windowArray
= this.windowArray
.erase(window
);
135 delete this.windows
[this.getClientId(window
.client
)][window
.identifier
];
138 this shouldn't be called by overriding classes!
139 they should implement their own!
140 some form of user input MUST be received before an
141 IRC connection is made, else users are going to get
142 tricked into getting themselves glined
144 loginBox: function(callback
, initialNickname
, initialChannels
, autoConnect
, autoNick
) {
145 qwebirc
.ui
.GenericLoginBox(this.parentElement
, callback
, initialNickname
, initialChannels
, autoConnect
, autoNick
, this.options
.networkName
);
149 qwebirc
.ui
.StandardUI
= new Class({
150 Extends: qwebirc
.ui
.BaseUI
,
151 initialize: function(parentElement
, windowClass
, uiName
, options
) {
152 this.parent(parentElement
, windowClass
, uiName
, options
);
154 this.tabCompleter
= new qwebirc
.ui
.TabCompleterFactory(this);
155 this.uiOptions
= new qwebirc
.ui
.DefaultOptionsClass(this);
156 this.customWindows
= {};
158 if(Browser
.Engine
.trident
) {
163 document
.addEvent(ev
, this.__handleHotkey
.bind(this));
165 __handleHotkey: function(x
) {
166 if(!x
.alt
|| x
.control
) {
167 if(x
.key
== "backspace" || x
.key
== "/")
168 if(!this.getInputFocused(x
))
173 if(x
.key
== "a" || x
.key
== "A") {
175 var highestIndex
= -1;
179 for(var i
=0;i
<this.windowArray
.length
;i
++) {
180 var h
= this.windowArray
[i
].hilighted
;
186 if(highestIndex
> -1)
187 this.selectWindow(this.windowArray
[highestIndex
]);
188 } else if(x
.key
>= '0' && x
.key
<= '9') {
191 number
= x
.key
- '0';
197 if(number
>= this.windowArray
.length
)
200 this.selectWindow(this.windowArray
[number
]);
201 } else if(x
.key
== "left") {
204 } else if(x
.key
== "right") {
211 getInputFocused: function(x
) {
212 return $$("input").indexOf(x
.target
) > -1;
214 newCustomWindow: function(name
, select
, type
) {
216 type
= qwebirc
.ui
.WINDOW_CUSTOM
;
218 var w
= this.newWindow(qwebirc
.ui
.CUSTOM_CLIENT
, type
, name
);
219 w
.addEvent("close", function(w
) {
220 delete this.windows
[qwebirc
.ui
.CUSTOM_CLIENT
][w
.identifier
];
224 this.selectWindow(w
);
228 addCustomWindow: function(windowName
, class_
, cssClass
, options
) {
229 if(!$defined(options
))
232 if(this.customWindows
[windowName
]) {
233 this.selectWindow(this.customWindows
[windowName
]);
237 var d
= this.newCustomWindow(windowName
, true);
238 this.customWindows
[windowName
] = d
;
240 d
.addEvent("close", function() {
241 this.customWindows
[windowName
] = null;
245 d
.lines
.addClass("qwebirc-" + cssClass
);
247 var ew
= new class_(d
.lines
, options
);
248 ew
.addEvent("close", function() {
252 embeddedWindow: function() {
253 this.addCustomWindow("Embedded Wizard", qwebirc
.ui
.EmbedWizard
, "embeddedwizard");
255 optionsWindow: function() {
256 this.addCustomWindow("Options", qwebirc
.ui
.OptionsPane
, "optionspane", this.uiOptions
);
258 aboutWindow: function() {
259 this.addCustomWindow("About", qwebirc
.ui
.AboutPane
, "aboutpane", this.uiOptions
);
261 urlDispatcher: function(name
) {
262 if(name
== "embedded")
263 return ["a", this.embeddedWindow
.bind(this)];
265 if(name
== "options")
266 return ["a", this.optionsWindow
.bind(this)];
270 tabComplete: function(element
) {
271 this.tabCompleter
.tabComplete(element
);
273 resetTabComplete: function() {
274 this.tabCompleter
.reset();
278 qwebirc
.ui
.SoundUI
= new Class({
279 Extends: qwebirc
.ui
.StandardUI
,
280 initialize: function(parentElement
, windowClass
, uiName
, options
) {
281 this.parent(parentElement
, windowClass
, uiName
, options
);
283 this.soundInited
= false;
284 this.soundReady
= false;
286 this.setBeepOnMention(this.uiOptions
.BEEP_ON_MENTION
);
288 soundInit: function() {
291 if(!$defined(Browser
.Plugins
.Flash
) || Browser
.Plugins
.Flash
.version
< 8)
293 this.soundInited
= true;
295 this.soundPlayer
= new qwebirc
.sound
.SoundPlayer();
296 this.soundPlayer
.addEvent("ready", function() {
297 this.soundReady
= true;
299 this.soundPlayer
.go();
301 setBeepOnMention: function(value
) {
304 this.beepOnMention
= value
;
307 if(!this.soundReady
|| !this.beepOnMention
)
310 this.soundPlayer
.beep();
314 qwebirc
.ui
.QuakeNetUI
= new Class({
315 Extends: qwebirc
.ui
.SoundUI
,
316 urlDispatcher: function(name
, window
) {
317 if(name
== "qwhois") {
318 return ["span", function(auth
) {
319 this.client
.exec("/MSG Q whois #" + auth
);
322 if(name
== "whois") {
323 return ["span", function(nick
) {
324 this.client
.exec("/WHOIS " + nick
);
327 return this.parent(name
);
330 if(!qwebirc
.auth
.loggedin())
332 if(confirm("Log out?")) {
333 for(var client
in this.clients
) {
334 this.clients
[client
].quit("Logged out");
336 document
.location
= "/auth?logout=1";
341 qwebirc
.ui
.NewLoginUI
= new Class({
342 Extends: qwebirc
.ui
.QuakeNetUI
,
343 loginBox: function(callbackfn
, initialNickname
, initialChannels
, autoConnect
, autoNick
) {
344 this.postInitialize();
346 var w
= this.newCustomWindow("Connect", true, qwebirc
.ui
.WINDOW_CONNECT
);
347 var callback = function(args
) {
352 qwebirc
.ui
.GenericLoginBox(w
.lines
, callback
, initialNickname
, initialChannels
, autoConnect
, autoNick
, this.options
.networkName
);