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