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