]> jfr.im git - irc/quakenet/qwebirc.git/blame - js/ui/optionspane.js
Fix font issue.
[irc/quakenet/qwebirc.git] / js / ui / optionspane.js
CommitLineData
ebb21d2e
CP
1qwebirc.config.CHECK_BOX = 1;
2qwebirc.config.TEXT_BOX = 2;
3qwebirc.config.RADIO_BUTTONS = 3;
4
5qwebirc.config.DEFAULT_OPTIONS = [
aeb8c784 6 [1, "BEEP_ON_MENTION", "Beep when nick mentioned or on query activity (requires Flash)", true, {
fb71087a
CP
7 render: function(input) {
8 if(!$defined(Browser.Plugins.Flash) || Browser.Plugins.Flash.version < 8) {
9 input.disabled = true;
10 input.checked = false;
11 }
12 },
13 get: function(value, ui) {
127631e0
CP
14 if(ui.setBeepOnMention)
15 ui.setBeepOnMention(value);
fb71087a
CP
16 }
17 }],
7af2d0c1
CP
18 [2, "DEDICATED_MSG_WINDOW", "Send privmsgs to dedicated messages window", false],
19 [4, "DEDICATED_NOTICE_WINDOW", "Send notices to dedicated message window", false],
c6b78d06 20 [3, "NICK_OV_STATUS", "Show status (@/+) before nicknames", true]
ebb21d2e
CP
21];
22
23qwebirc.config.DefaultOptions = null;
24
c38a0240 25qwebirc.config.Input = new Class({
fb71087a 26 initialize: function(parent, option, position, parentObject) {
c38a0240
CP
27 this.option = option;
28 this.value = option.value;
29 this.position = position;
fb71087a
CP
30 this.parentElement = parent;
31 this.parentObject = parentObject;
c38a0240
CP
32
33 this.render();
34 },
a1e826c7
CP
35 createInput: function(type, parent, name, selected) {
36 if(!$defined(parent))
37 parent = this.parentElement;
38
39 return qwebirc.util.createInput(type, parent, name, selected);
40 },
c38a0240
CP
41 FE: function(element, parent) {
42 var n = new Element(element);
43 if(!$defined(parent))
fb71087a 44 parent = this.parentElement;
c38a0240
CP
45
46 parent.appendChild(n);
47 return n;
48 },
49 focus: function() {
50 this.mainElement.focus();
fb71087a
CP
51 },
52 render: function() {
53 this.event("render", this.mainElement);
54 },
55 get: function(value) {
56 this.event("get", [value, this.parentObject.optionObject.ui]);
57 return value;
58 },
59 event: function(name, x) {
60 if(!$defined(this.option.extras))
61 return;
62 var t = this.option.extras[name];
63 if(!$defined(t))
64 return;
65
66 t.pass(x, this)();
c38a0240
CP
67 }
68});
69
70qwebirc.config.TextInput = new Class({
71 Extends: qwebirc.config.Input,
72 render: function() {
a1e826c7 73 var i = this.createInput("text");
c38a0240
CP
74 this.mainElement = i;
75
c38a0240 76 i.value = this.value;
fb71087a
CP
77
78 this.parent();
c38a0240
CP
79 },
80 get: function() {
fb71087a 81 return this.parent(this.mainElement.value);
c38a0240
CP
82 }
83});
84
85qwebirc.config.CheckInput = new Class({
86 Extends: qwebirc.config.Input,
87 render: function() {
a1e826c7 88 var i = this.createInput("checkbox");
c38a0240
CP
89 this.mainElement = i;
90
c38a0240 91 i.checked = this.value;
fb71087a
CP
92
93 this.parent();
c38a0240
CP
94 },
95 get: function() {
fb71087a 96 return this.parent(this.mainElement.checked);
c38a0240
CP
97 }
98});
99
100qwebirc.config.RadioInput = new Class({
101 Extends: qwebirc.config.Input,
102 render: function() {
103 var value = this.option.options;
104
105 this.elements = [];
106
107 for(var i=0;i<value.length;i++) {
108 var d = this.FE("div", this.parentObject);
a1e826c7 109 var e = this.createInput("radio", d, "options_radio" + this.position, i == this.option.position);
c38a0240
CP
110 this.elements.push(e);
111
c38a0240
CP
112 if(i == 0)
113 this.mainElement = e;
114
115 d.appendChild(document.createTextNode(value[i][0]));
116 };
fb71087a 117 this.parent();
c38a0240
CP
118 },
119 get: function() {
120 for(var i=0;i<this.elements.length;i++) {
121 var x = this.elements[i];
122 if(x.checked) {
123 this.option.position = i;
fb71087a 124 return this.parent(this.option.options[i][1]);
c38a0240
CP
125 }
126 }
127 }
128});
129
ebb21d2e 130qwebirc.config.Option = new Class({
fb71087a 131 initialize: function(optionId, prefix, label, default_, extras) {
c38a0240 132 this.prefix = prefix;
ebb21d2e 133 this.label = label;
c38a0240
CP
134 this.default_ = default_;
135 this.optionId = optionId;
fb71087a 136 this.extras = extras;
c38a0240
CP
137 },
138 setSavedValue: function(x) {
139 this.value = x;
ebb21d2e
CP
140 }
141});
142
c38a0240
CP
143qwebirc.config.RadioOption = new Class({
144 Extends: qwebirc.config.Option,
145 Element: qwebirc.config.RadioInput,
fb71087a 146 initialize: function(optionId, prefix, label, default_, extras, options) {
c38a0240
CP
147 this.options = options.map(function(x) {
148 if(typeof(x) == "string")
149 return [x, x];
150 return x;
151 });
152 this.defaultposition = default_;
153
fb71087a 154 this.parent(optionId, prefix, label, this.options[default_][1], extras);
c38a0240
CP
155 },
156 setSavedValue: function(x) {
157 for(var i=0;i<this.options.length;i++) {
158 var y = this.options[i][1];
159 if(x == y) {
160 this.position = i;
161 this.value = x;
162 return;
163 }
164 }
165 this.position = this.defaultposition;
166 this.value = this.default_;
167 }
168});
169
170qwebirc.config.TextOption = new Class({
171 Extends: qwebirc.config.Option,
172 Element: qwebirc.config.TextInput
173});
174
175qwebirc.config.CheckOption = new Class({
176 Extends: qwebirc.config.Option,
177 Element: qwebirc.config.CheckInput
178});
179
ebb21d2e 180qwebirc.ui.Options = new Class({
fb71087a 181 initialize: function(ui) {
ebb21d2e
CP
182 if(!$defined(qwebirc.config.DefaultOptions))
183 this.__configureDefaults();
184
c38a0240
CP
185 this.optionList = qwebirc.config.DefaultOptions.slice();
186 this.optionHash = {}
fb71087a 187 this.ui = ui;
c38a0240
CP
188
189 this._setup();
190 this.optionList.forEach(function(x) {
191 x.setSavedValue(this._get(x));
192 this.optionHash[x.prefix] = x;
193 this[x.prefix] = x.value;
ebb21d2e
CP
194 }.bind(this));
195 },
196 __configureDefaults: function() {
c38a0240
CP
197 qwebirc.config.DefaultOptions = qwebirc.config.DEFAULT_OPTIONS.map(function(x) {
198 var optionId = x[0];
199 var prefix = x[1];
200 var label = x[2];
201 var default_ = x[3];
fb71087a
CP
202 var moreextras = x[4];
203 var extras = x[5];
ebb21d2e 204
c38a0240
CP
205 var stype = typeof(default_);
206 if(stype == "number") {
fb71087a 207 return new qwebirc.config.RadioOption(optionId, prefix, label, default_, moreextras, extra);
ebb21d2e 208 } else {
c38a0240
CP
209 var type;
210 if(stype == "boolean") {
211 type = qwebirc.config.CheckOption;
212 } else {
213 type = qwebirc.config.TextOption;
214 }
fb71087a 215 return new type(optionId, prefix, label, default_, moreextras);
ebb21d2e 216 }
ebb21d2e 217 });
c38a0240
CP
218 },
219 setValue: function(option, value) {
220 this.optionHash[option.prefix].value = value;
221 this[option.prefix] = value;
222 },
223 getOptionList: function() {
224 return this.optionList;
225 },
226 _get: function(x) {
227 return x.default_;
228 },
229 _setup: function() {
230 },
231 flush: function() {
ebb21d2e
CP
232 }
233});
234
235qwebirc.ui.OptionsPane = new Class({
c38a0240
CP
236 Implements: [Events],
237 initialize: function(parentElement, optionObject) {
ebb21d2e 238 this.parentElement = parentElement;
c38a0240 239 this.optionObject = optionObject;
ebb21d2e
CP
240
241 this.createElements();
242 },
243 createElements: function() {
244 var FE = function(element, parent) {
245 var n = new Element(element);
246 parent.appendChild(n);
247 return n;
248 };
ebb21d2e
CP
249
250 var t = FE("table", this.parentElement);
251 var tb = FE("tbody", t);
252
c38a0240
CP
253 this.boxList = [];
254
255 var optList = this.optionObject.getOptionList();
256 for(var i=0;i<optList.length;i++) {
257 var x = optList[i];
258
ebb21d2e
CP
259 var row = FE("tr", tb);
260 var cella = FE("td", row);
c38a0240
CP
261 cella.set("text", x.label + ":");
262
ebb21d2e 263 var cellb = FE("td", row);
fb71087a 264 this.boxList.push([x, new x.Element(cellb, x, i, this)]);
c38a0240 265
c38a0240
CP
266 }
267
268 var r = FE("tr", tb);
269 var cella = FE("td", r);
270 var cellb = FE("td", r);
a1e826c7 271 var save = qwebirc.util.createInput("submit", cellb);
c38a0240
CP
272 save.value = "Save";
273
274 save.addEvent("click", function() {
275 this.save();
276 this.fireEvent("close");
277 }.bind(this));
278
a1e826c7 279 var cancel = qwebirc.util.createInput("submit", cellb);
c38a0240
CP
280 cancel.value = "Cancel";
281 cancel.addEvent("click", function() {
282 this.fireEvent("close");
283 }.bind(this));
284 },
285 save: function() {
286 this.boxList.forEach(function(x) {
287 var option = x[0];
288 var box = x[1];
289 this.optionObject.setValue(option, box.get());
ebb21d2e 290 }.bind(this));
c38a0240 291 this.optionObject.flush();
ebb21d2e
CP
292 }
293});
c38a0240
CP
294
295qwebirc.ui.CookieOptions = new Class({
296 Extends: qwebirc.ui.Options,
297 _setup: function() {
298 this.__cookie = new Hash.Cookie("opt1", {duration: 3650, autoSave: false});
299 },
300 _get: function(x) {
301 var v = this.__cookie.get(x.optionId);
302 if(!$defined(v))
303 return x.default_;
304
305 return v;
306 },
307 flush: function() {
308 this.__cookie.erase();
309 this._setup();
310
311 this.getOptionList().forEach(function(x) {
312 this.__cookie.set(x.optionId, x.value);
313 }.bind(this));
314 this.__cookie.save();
315 }
316});
317
318qwebirc.ui.DefaultOptionsClass = new Class({
319 Extends: qwebirc.ui.CookieOptions
320});