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