]>
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
)
127 if(x
.key
== "a" || x
.key
== "A") {
129 var highestIndex
= -1;
131 for(var i
=0;i
<this.windowArray
.length
;i
++) {
132 var h
= this.windowArray
[i
].hilighted
;
138 if(highestIndex
> -1)
139 this.selectWindow(this.windowArray
[highestIndex
]);
140 } else if(x
.key
>= '0' && x
.key
<= '9') {
143 number
= x
.key
- '0';
149 if(number
>= this.windowArray
.length
)
152 this.selectWindow(this.windowArray
[number
]);
153 } else if(x
.key
== "left") {
155 } else if(x
.key
== "right") {
160 newCustomWindow: function(name
, select
, type
) {
162 type
= qwebirc
.ui
.WINDOW_CUSTOM
;
164 var w
= this.newWindow(qwebirc
.ui
.CUSTOM_CLIENT
, type
, name
);
165 w
.addEvent("close", function(w
) {
166 delete this.windows
[name
];
170 this.selectWindow(w
);
174 embeddedWindow: function() {
176 this.selectWindow(this.embedded
)
180 this.embedded
= this.newCustomWindow("Embedding wizard", true);
181 this.embedded
.addEvent("close", function() {
182 this.embedded
= null;
185 var ew
= new qwebirc
.ui
.EmbedWizard({parent: this.embedded
.lines
});
186 ew
.addEvent("close", function() {
187 this.embedded
.close();
190 urlDispatcher: function(name
) {
191 if(name
== "embedded")
192 return ["a", this.embeddedWindow
.bind(this)];
198 qwebirc
.ui
.QuakeNetUI
= new Class({
199 Extends: qwebirc
.ui
.StandardUI
,
200 urlDispatcher: function(name
, window
) {
201 if(name
== "qwhois") {
202 return ["a", function(auth
) {
203 this.client
.exec("/MSG Q whois #" + auth
);
206 if(name
== "whois") {
207 return ["span", function(nick
) {
208 this.client
.exec("/WHOIS " + nick
);
212 return this.parent(name
);
216 qwebirc
.ui
.NewLoginUI
= new Class({
217 Extends: qwebirc
.ui
.QuakeNetUI
,
218 loginBox: function(callbackfn
, initialNickname
, initialChannels
, autoConnect
, autoNick
) {
219 this.postInitialize();
220 var w
= this.newCustomWindow("Connect", true, qwebirc
.ui
.WINDOW_CONNECT
);
221 var callback = function(args
) {
226 qwebirc
.ui
.GenericLoginBox(w
.lines
, callback
, initialNickname
, initialChannels
, autoConnect
, autoNick
);