]>
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
.CUSTOM_CLIENT
= "custom";
8 qwebirc
.ui
.BaseUI
= new Class({
9 Implements: [Events
, Options
],
11 appTitle: "QuakeNet Web IRC",
14 initialize: function(parentElement
, windowClass
, uiName
, options
) {
15 this.setOptions(options
);
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();
27 newClient: function(client
) {
28 client
.hilightController
= new qwebirc
.ui
.HilightController(client
);
30 this.windows
[client
] = {}
31 var w
= this.newWindow(client
, qwebirc
.ui
.WINDOW_STATUS
, "Status");
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");
42 newWindow: function(client
, type
, name
) {
43 var identifier
= name
;
44 if(type
== qwebirc
.ui
.WINDOW_STATUS
)
47 var w
= this.windows
[client
][identifier
] = new this.windowClass(this, client
, type
, name
, identifier
);
48 this.windowArray
.push(w
);
52 getActiveWindow: function() {
55 __setActiveWindow: function(window
) {
58 selectWindow: function(window
) {
60 this.active
.deselect();
61 window
.select(); /* calls setActiveWindow */
62 document
.title
= window
.name
+ " - " + this.options
.appTitle
;
64 nextWindow: function(direction
) {
65 if(this.windowArray
.length
== 0 || !this.active
)
71 var index
= this.windowArray
.indexOf(this.active
);
75 index
= index
+ direction
;
77 index
= this.windowArray
.length
- 1;
78 } else if(index
>= this.windowArray
.length
) {
82 this.selectWindow(this.windowArray
[index
]);
84 prevWindow: function() {
87 __closed: function(window
) {
89 this.active
= undefined;
90 if(this.windowArray
.length
== 1) {
91 this.windowArray
= [];
93 var index
= this.windowArray
.indexOf(window
);
96 } else if(index
== 0) {
97 this.selectWindow(this.windowArray
[1]);
99 this.selectWindow(this.windowArray
[index
- 1]);
104 this.windowArray
= this.windowArray
.erase(window
);
105 delete this.windows
[window
.client
][window
.identifier
];
108 this shouldn't be called by overriding classes!
109 they should implement their own!
110 some form of user input MUST be received before an
111 IRC connection is made, else users are going to get
112 tricked into getting themselves glined
114 loginBox: function(callback
, initialNickname
, initialChannels
, autoConnect
, autoNick
) {
115 qwebirc
.ui
.GenericLoginBox(this.parentElement
, callback
, initialNickname
, initialChannels
, autoConnect
, autoNick
);
119 qwebirc
.ui
.StandardUI
= new Class({
120 Extends: qwebirc
.ui
.BaseUI
,
121 initialize: function(parentElement
, windowClass
, uiName
, options
) {
122 this.parent(parentElement
, windowClass
, uiName
, options
);
123 window
.addEvent("keydown", function(x
) {
124 if(!x
.alt
|| x
.control
)
128 if(x
.key
== "a" || x
.key
== "A") {
130 var highestIndex
= -1;
134 for(var i
=0;i
<this.windowArray
.length
;i
++) {
135 var h
= this.windowArray
[i
].hilighted
;
141 if(highestIndex
> -1)
142 this.selectWindow(this.windowArray
[highestIndex
]);
143 } else if(x
.key
>= '0' && x
.key
<= '9') {
146 number
= x
.key
- '0';
152 if(number
>= this.windowArray
.length
)
155 this.selectWindow(this.windowArray
[number
]);
156 } else if(x
.key
== "left") {
159 } else if(x
.key
== "right") {
167 newCustomWindow: function(name
, select
, type
) {
169 type
= qwebirc
.ui
.WINDOW_CUSTOM
;
171 var w
= this.newWindow(qwebirc
.ui
.CUSTOM_CLIENT
, type
, name
);
172 w
.addEvent("close", function(w
) {
173 delete this.windows
[name
];
177 this.selectWindow(w
);
181 embeddedWindow: function() {
183 this.selectWindow(this.embedded
)
187 this.embedded
= this.newCustomWindow("Embedding wizard", true);
188 this.embedded
.addEvent("close", function() {
189 this.embedded
= null;
192 var ew
= new qwebirc
.ui
.EmbedWizard({parent: this.embedded
.lines
});
193 ew
.addEvent("close", function() {
194 this.embedded
.close();
197 urlDispatcher: function(name
) {
198 if(name
== "embedded")
199 return ["a", this.embeddedWindow
.bind(this)];
205 qwebirc
.ui
.QuakeNetUI
= new Class({
206 Extends: qwebirc
.ui
.StandardUI
,
207 urlDispatcher: function(name
, window
) {
208 if(name
== "qwhois") {
209 return ["a", function(auth
) {
210 this.client
.exec("/MSG Q whois #" + auth
);
213 if(name
== "whois") {
214 return ["span", function(nick
) {
215 this.client
.exec("/WHOIS " + nick
);
219 return this.parent(name
);
223 qwebirc
.ui
.NewLoginUI
= new Class({
224 Extends: qwebirc
.ui
.QuakeNetUI
,
225 loginBox: function(callbackfn
, initialNickname
, initialChannels
, autoConnect
, autoNick
) {
226 this.postInitialize();
227 var w
= this.newCustomWindow("Connect", true, qwebirc
.ui
.WINDOW_CONNECT
);
228 var callback = function(args
) {
233 qwebirc
.ui
.GenericLoginBox(w
.lines
, callback
, initialNickname
, initialChannels
, autoConnect
, autoNick
);