]>
Commit | Line | Data |
---|---|---|
ebb21d2e CP |
1 | qwebirc.config.CHECK_BOX = 1; |
2 | qwebirc.config.TEXT_BOX = 2; | |
3 | qwebirc.config.RADIO_BUTTONS = 3; | |
4 | ||
5 | qwebirc.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 | ||
23 | qwebirc.config.DefaultOptions = null; | |
24 | ||
c38a0240 | 25 | qwebirc.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 | ||
70 | qwebirc.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 | ||
85 | qwebirc.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 | ||
100 | qwebirc.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 | 130 | qwebirc.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 |
143 | qwebirc.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 | ||
170 | qwebirc.config.TextOption = new Class({ | |
171 | Extends: qwebirc.config.Option, | |
172 | Element: qwebirc.config.TextInput | |
173 | }); | |
174 | ||
175 | qwebirc.config.CheckOption = new Class({ | |
176 | Extends: qwebirc.config.Option, | |
177 | Element: qwebirc.config.CheckInput | |
178 | }); | |
179 | ||
ebb21d2e | 180 | qwebirc.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 | ||
235 | qwebirc.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 | |
295 | qwebirc.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 | ||
318 | qwebirc.ui.DefaultOptionsClass = new Class({ | |
319 | Extends: qwebirc.ui.CookieOptions | |
320 | }); |