Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(194)

Side by Side Diff: chrome/browser/resources/options/pref_ui.js

Issue 660623002: options: fix "Import" button for idle options pages. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: nit Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 cr.define('options', function() { 5 cr.define('options', function() {
6
7 var Preferences = options.Preferences; 6 var Preferences = options.Preferences;
8 7
9 /** 8 /**
10 * Allows an element to be disabled for several reasons. 9 * Allows an element to be disabled for several reasons.
11 * The element is disabled if at least one reason is true, and the reasons 10 * The element is disabled if at least one reason is true, and the reasons
12 * can be set separately. 11 * can be set separately.
13 * @private 12 * @private
14 * @param {!HTMLElement} el The element to update. 13 * @param {!HTMLElement} el The element to update.
15 * @param {string} reason The reason for disabling the element. 14 * @param {string} reason The reason for disabling the element.
16 * @param {boolean} disabled Whether the element should be disabled or enabled 15 * @param {boolean} disabled Whether the element should be disabled or enabled
17 * for the given |reason|. 16 * for the given |reason|.
18 */ 17 */
19 function updateDisabledState_(el, reason, disabled) { 18 function updateDisabledState(el, reason, disabled) {
20 if (!el.disabledReasons) 19 if (!el.disabledReasons)
21 el.disabledReasons = {}; 20 el.disabledReasons = {};
22 if (el.disabled && (Object.keys(el.disabledReasons).length == 0)) { 21 if (el.disabled && (Object.keys(el.disabledReasons).length == 0)) {
23 // The element has been previously disabled without a reason, so we add 22 // The element has been previously disabled without a reason, so we add
24 // one to keep it disabled. 23 // one to keep it disabled.
25 el.disabledReasons.other = true; 24 el.disabledReasons.other = true;
26 } 25 }
27 if (!el.disabled) { 26 if (!el.disabled) {
28 // If the element is not disabled, there should be no reason, except for 27 // If the element is not disabled, there should be no reason, except for
29 // 'other'. 28 // 'other'.
(...skipping 23 matching lines...) Expand all
53 // Set up the prototype chain 52 // Set up the prototype chain
54 __proto__: HTMLInputElement.prototype, 53 __proto__: HTMLInputElement.prototype,
55 54
56 /** 55 /**
57 * Initialization function for the cr.ui framework. 56 * Initialization function for the cr.ui framework.
58 */ 57 */
59 decorate: function() { 58 decorate: function() {
60 var self = this; 59 var self = this;
61 60
62 // Listen for user events. 61 // Listen for user events.
63 this.addEventListener('change', this.handleChange_.bind(this)); 62 this.addEventListener('change', this.handleChange.bind(this));
64 63
65 // Listen for pref changes. 64 // Listen for pref changes.
66 Preferences.getInstance().addEventListener(this.pref, function(event) { 65 Preferences.getInstance().addEventListener(this.pref, function(event) {
67 if (event.value.uncommitted && !self.dialogPref) 66 if (event.value.uncommitted && !self.dialogPref)
68 return; 67 return;
69 self.updateStateFromPref_(event); 68 self.updateStateFromPref(event);
70 updateDisabledState_(self, 'notUserModifiable', event.value.disabled); 69 updateDisabledState(self, 'notUserModifiable', event.value.disabled);
71 self.controlledBy = event.value.controlledBy; 70 self.controlledBy = event.value.controlledBy;
72 }); 71 });
73 }, 72 },
74 73
75 /** 74 /**
76 * Handle changes to the input element's state made by the user. If a custom 75 * Handle changes to the input element's state made by the user. If a custom
77 * change handler does not suppress it, a default handler is invoked that 76 * change handler does not suppress it, a default handler is invoked that
78 * updates the associated pref. 77 * updates the associated pref.
79 * @param {Event} event Change event. 78 * @param {Event} event Change event.
80 * @private 79 * @protected
81 */ 80 */
82 handleChange_: function(event) { 81 handleChange: function(event) {
83 if (!this.customChangeHandler(event)) 82 if (!this.customChangeHandler(event))
84 this.updatePrefFromState_(); 83 this.updatePrefFromState();
85 }, 84 },
86 85
87 /** 86 /**
88 * Handles changes to the pref. If a custom change handler does not suppress 87 * Handles changes to the pref. If a custom change handler does not suppress
89 * it, a default handler is invoked that update the input element's state. 88 * it, a default handler is invoked that updates the input element's state.
90 * @param {Event} event Pref change event. 89 * @param {Event} event Pref change event.
91 * @private 90 * @protected
92 */ 91 */
93 updateStateFromPref_: function(event) { 92 updateStateFromPref: function(event) {
94 if (!this.customPrefChangeHandler(event)) 93 if (!this.customPrefChangeHandler(event))
95 this.value = event.value.value; 94 this.value = event.value.value;
96 }, 95 },
97 96
98 /** 97 /**
99 * See |updateDisabledState_| above. 98 * See |updateDisabledState| above.
100 */ 99 */
101 setDisabled: function(reason, disabled) { 100 setDisabled: function(reason, disabled) {
102 updateDisabledState_(this, reason, disabled); 101 updateDisabledState(this, reason, disabled);
103 }, 102 },
104 103
105 /** 104 /**
106 * Custom change handler that is invoked first when the user makes changes 105 * Custom change handler that is invoked first when the user makes changes
107 * to the input element's state. If it returns false, a default handler is 106 * to the input element's state. If it returns false, a default handler is
108 * invoked next that updates the associated pref. If it returns true, the 107 * invoked next that updates the associated pref. If it returns true, the
109 * default handler is suppressed (i.e., this works like stopPropagation or 108 * default handler is suppressed (i.e., this works like stopPropagation or
110 * cancelBubble). 109 * cancelBubble).
111 * @param {Event} event Input element change event. 110 * @param {Event} event Input element change event.
112 */ 111 */
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 /** 172 /**
174 * Initialization function for the cr.ui framework. 173 * Initialization function for the cr.ui framework.
175 */ 174 */
176 decorate: function() { 175 decorate: function() {
177 PrefInputElement.prototype.decorate.call(this); 176 PrefInputElement.prototype.decorate.call(this);
178 this.type = 'checkbox'; 177 this.type = 'checkbox';
179 178
180 // Consider a checked dialog checkbox as a 'suggestion' which is committed 179 // Consider a checked dialog checkbox as a 'suggestion' which is committed
181 // once the user confirms the dialog. 180 // once the user confirms the dialog.
182 if (this.dialogPref && this.checked) 181 if (this.dialogPref && this.checked)
183 this.updatePrefFromState_(); 182 this.updatePrefFromState();
184 }, 183 },
185 184
186 /** 185 /**
187 * Update the associated pref when when the user makes changes to the 186 * Update the associated pref when when the user makes changes to the
188 * checkbox state. 187 * checkbox state.
189 * @private 188 * @override
190 */ 189 */
191 updatePrefFromState_: function() { 190 updatePrefFromState: function() {
192 var value = this.inverted_pref ? !this.checked : this.checked; 191 var value = this.inverted_pref ? !this.checked : this.checked;
193 Preferences.setBooleanPref(this.pref, value, 192 Preferences.setBooleanPref(this.pref, value,
194 !this.dialogPref, this.metric); 193 !this.dialogPref, this.metric);
195 }, 194 },
196 195
196 /** @override */
197 updateStateFromPref: function(event) {
198 if (!this.customPrefChangeHandler(event))
199 this.defaultPrefChangeHandler(event);
200 },
201
197 /** 202 /**
198 * Update the checkbox state when the associated pref changes. 203 * @param {Event} event A pref change event.
199 * @param {Event} event Pref change event.
200 * @private
201 */ 204 */
202 updateStateFromPref_: function(event) { 205 defaultPrefChangeHandler: function(event) {
203 if (this.customPrefChangeHandler(event))
204 return;
205 var value = Boolean(event.value.value); 206 var value = Boolean(event.value.value);
206 this.checked = this.inverted_pref ? !value : value; 207 this.checked = this.inverted_pref ? !value : value;
207 }, 208 },
208 }; 209 };
209 210
210 /** 211 /**
211 * Whether the mapping between checkbox state and associated pref is inverted. 212 * Whether the mapping between checkbox state and associated pref is inverted.
212 */ 213 */
213 cr.defineProperty(PrefCheckbox, 'inverted_pref', cr.PropertyKind.BOOL_ATTR); 214 cr.defineProperty(PrefCheckbox, 'inverted_pref', cr.PropertyKind.BOOL_ATTR);
214 215
215 ///////////////////////////////////////////////////////////////////////////// 216 /////////////////////////////////////////////////////////////////////////////
216 // PrefNumber class: 217 // PrefNumber class:
217 218
218 // Define a constructor that uses an input element as its underlying element. 219 // Define a constructor that uses an input element as its underlying element.
219 var PrefNumber = cr.ui.define('input'); 220 var PrefNumber = cr.ui.define('input');
220 221
221 PrefNumber.prototype = { 222 PrefNumber.prototype = {
222 // Set up the prototype chain 223 // Set up the prototype chain
223 __proto__: PrefInputElement.prototype, 224 __proto__: PrefInputElement.prototype,
224 225
225 /** 226 /**
226 * Initialization function for the cr.ui framework. 227 * Initialization function for the cr.ui framework.
227 */ 228 */
228 decorate: function() { 229 decorate: function() {
229 PrefInputElement.prototype.decorate.call(this); 230 PrefInputElement.prototype.decorate.call(this);
230 this.type = 'number'; 231 this.type = 'number';
231 }, 232 },
232 233
233 /** 234 /**
234 * Update the associated pref when when the user inputs a number. 235 * Update the associated pref when the user inputs a number.
235 * @private 236 * @override
236 */ 237 */
237 updatePrefFromState_: function() { 238 updatePrefFromState: function() {
238 if (this.validity.valid) { 239 if (this.validity.valid) {
239 Preferences.setIntegerPref(this.pref, this.value, 240 Preferences.setIntegerPref(this.pref, this.value,
240 !this.dialogPref, this.metric); 241 !this.dialogPref, this.metric);
241 } 242 }
242 }, 243 },
243 }; 244 };
244 245
245 ///////////////////////////////////////////////////////////////////////////// 246 /////////////////////////////////////////////////////////////////////////////
246 // PrefRadio class: 247 // PrefRadio class:
247 248
248 //Define a constructor that uses an input element as its underlying element. 249 //Define a constructor that uses an input element as its underlying element.
249 var PrefRadio = cr.ui.define('input'); 250 var PrefRadio = cr.ui.define('input');
250 251
251 PrefRadio.prototype = { 252 PrefRadio.prototype = {
252 // Set up the prototype chain 253 // Set up the prototype chain
253 __proto__: PrefInputElement.prototype, 254 __proto__: PrefInputElement.prototype,
254 255
255 /** 256 /**
256 * Initialization function for the cr.ui framework. 257 * Initialization function for the cr.ui framework.
257 */ 258 */
258 decorate: function() { 259 decorate: function() {
259 PrefInputElement.prototype.decorate.call(this); 260 PrefInputElement.prototype.decorate.call(this);
260 this.type = 'radio'; 261 this.type = 'radio';
261 }, 262 },
262 263
263 /** 264 /**
264 * Update the associated pref when when the user selects the radio button. 265 * Update the associated pref when when the user selects the radio button.
265 * @private 266 * @override
266 */ 267 */
267 updatePrefFromState_: function() { 268 updatePrefFromState: function() {
268 if (this.value == 'true' || this.value == 'false') { 269 if (this.value == 'true' || this.value == 'false') {
269 Preferences.setBooleanPref(this.pref, 270 Preferences.setBooleanPref(this.pref,
270 this.value == String(this.checked), 271 this.value == String(this.checked),
271 !this.dialogPref, this.metric); 272 !this.dialogPref, this.metric);
272 } else { 273 } else {
273 Preferences.setIntegerPref(this.pref, this.value, 274 Preferences.setIntegerPref(this.pref, this.value,
274 !this.dialogPref, this.metric); 275 !this.dialogPref, this.metric);
275 } 276 }
276 }, 277 },
277 278
278 /** 279 /** @override */
279 * Update the radio button state when the associated pref changes. 280 updateStateFromPref: function(event) {
280 * @param {Event} event Pref change event.
281 * @private
282 */
283 updateStateFromPref_: function(event) {
284 if (!this.customPrefChangeHandler(event)) 281 if (!this.customPrefChangeHandler(event))
285 this.checked = this.value == String(event.value.value); 282 this.checked = this.value == String(event.value.value);
286 }, 283 },
287 }; 284 };
288 285
289 ///////////////////////////////////////////////////////////////////////////// 286 /////////////////////////////////////////////////////////////////////////////
290 // PrefRange class: 287 // PrefRange class:
291 288
292 /** 289 /**
293 * Define a constructor that uses an input element as its underlying element. 290 * Define a constructor that uses an input element as its underlying element.
(...skipping 23 matching lines...) Expand all
317 // fixed. 314 // fixed.
318 // https://bugs.webkit.org/show_bug.cgi?id=52256 315 // https://bugs.webkit.org/show_bug.cgi?id=52256
319 this.addEventListener('keyup', this.handleRelease_.bind(this)); 316 this.addEventListener('keyup', this.handleRelease_.bind(this));
320 this.addEventListener('mouseup', this.handleRelease_.bind(this)); 317 this.addEventListener('mouseup', this.handleRelease_.bind(this));
321 this.addEventListener('touchcancel', this.handleRelease_.bind(this)); 318 this.addEventListener('touchcancel', this.handleRelease_.bind(this));
322 this.addEventListener('touchend', this.handleRelease_.bind(this)); 319 this.addEventListener('touchend', this.handleRelease_.bind(this));
323 }, 320 },
324 321
325 /** 322 /**
326 * Update the associated pref when when the user releases the slider. 323 * Update the associated pref when when the user releases the slider.
327 * @private 324 * @override
328 */ 325 */
329 updatePrefFromState_: function() { 326 updatePrefFromState: function() {
330 Preferences.setIntegerPref( 327 Preferences.setIntegerPref(
331 this.pref, 328 this.pref,
332 this.mapPositionToPref(parseInt(this.value, 10)), 329 this.mapPositionToPref(parseInt(this.value, 10)),
333 !this.dialogPref, 330 !this.dialogPref,
334 this.metric); 331 this.metric);
335 }, 332 },
336 333
337 /** 334 /** @override */
338 * Ignore changes to the slider position made by the user while the slider 335 handleChange: function() {
339 * has not been released. 336 // Ignore changes to the slider position made by the user while the slider
340 * @private 337 // has not been released.
341 */
342 handleChange_: function() {
343 }, 338 },
344 339
345 /** 340 /**
346 * Handle changes to the slider position made by the user when the slider is 341 * Handle changes to the slider position made by the user when the slider is
347 * released. If a custom change handler does not suppress it, a default 342 * released. If a custom change handler does not suppress it, a default
348 * handler is invoked that updates the associated pref. 343 * handler is invoked that updates the associated pref.
349 * @param {Event} event Change event. 344 * @param {Event} event Change event.
350 * @private 345 * @private
351 */ 346 */
352 handleRelease_: function(event) { 347 handleRelease_: function(event) {
353 if (!this.customChangeHandler(event)) 348 if (!this.customChangeHandler(event))
354 this.updatePrefFromState_(); 349 this.updatePrefFromState();
355 }, 350 },
356 351
357 /** 352 /**
358 * Handles changes to the pref associated with the slider. If a custom 353 * Handles changes to the pref associated with the slider. If a custom
359 * change handler does not suppress it, a default handler is invoked that 354 * change handler does not suppress it, a default handler is invoked that
360 * updates the slider position. 355 * updates the slider position.
361 * @param {Event} event Pref change event. 356 * @override.
362 * @private
363 */ 357 */
364 updateStateFromPref_: function(event) { 358 updateStateFromPref: function(event) {
365 if (this.customPrefChangeHandler(event)) 359 if (this.customPrefChangeHandler(event))
366 return; 360 return;
367 var value = event.value.value; 361 var value = event.value.value;
368 this.value = this.valueMap ? this.valueMap.indexOf(value) : value; 362 this.value = this.valueMap ? this.valueMap.indexOf(value) : value;
369 }, 363 },
370 364
371 /** 365 /**
372 * Map slider position to the range of values provided by the client, 366 * Map slider position to the range of values provided by the client,
373 * represented by |valueMap|. 367 * represented by |valueMap|.
374 * @param {number} position The slider position to map. 368 * @param {number} position The slider position to map.
375 */ 369 */
376 mapPositionToPref: function(position) { 370 mapPositionToPref: function(position) {
377 return this.valueMap ? this.valueMap[position] : position; 371 return this.valueMap ? this.valueMap[position] : position;
378 }, 372 },
379 }; 373 };
380 374
381 ///////////////////////////////////////////////////////////////////////////// 375 /////////////////////////////////////////////////////////////////////////////
382 // PrefSelect class: 376 // PrefSelect class:
383 377
384 // Define a constructor that uses a select element as its underlying element. 378 // Define a constructor that uses a select element as its underlying element.
385 var PrefSelect = cr.ui.define('select'); 379 var PrefSelect = cr.ui.define('select');
386 380
387 PrefSelect.prototype = { 381 PrefSelect.prototype = {
388 // Set up the prototype chain 382 // Set up the prototype chain
389 __proto__: PrefInputElement.prototype, 383 __proto__: PrefInputElement.prototype,
390 384
391 /** 385 /**
392 * Update the associated pref when when the user selects an item. 386 * Update the associated pref when when the user selects an item.
393 * @private 387 * @override
394 */ 388 */
395 updatePrefFromState_: function() { 389 updatePrefFromState: function() {
396 var value = this.options[this.selectedIndex].value; 390 var value = this.options[this.selectedIndex].value;
397 switch (this.dataType) { 391 switch (this.dataType) {
398 case 'number': 392 case 'number':
399 Preferences.setIntegerPref(this.pref, value, 393 Preferences.setIntegerPref(this.pref, value,
400 !this.dialogPref, this.metric); 394 !this.dialogPref, this.metric);
401 break; 395 break;
402 case 'double': 396 case 'double':
403 Preferences.setDoublePref(this.pref, value, 397 Preferences.setDoublePref(this.pref, value,
404 !this.dialogPref, this.metric); 398 !this.dialogPref, this.metric);
405 break; 399 break;
406 case 'boolean': 400 case 'boolean':
407 Preferences.setBooleanPref(this.pref, value == 'true', 401 Preferences.setBooleanPref(this.pref, value == 'true',
408 !this.dialogPref, this.metric); 402 !this.dialogPref, this.metric);
409 break; 403 break;
410 case 'string': 404 case 'string':
411 Preferences.setStringPref(this.pref, value, 405 Preferences.setStringPref(this.pref, value,
412 !this.dialogPref, this.metric); 406 !this.dialogPref, this.metric);
413 break; 407 break;
414 default: 408 default:
415 console.error('Unknown data type for <select> UI element: ' + 409 console.error('Unknown data type for <select> UI element: ' +
416 this.dataType); 410 this.dataType);
417 } 411 }
418 }, 412 },
419 413
420 /** 414 /** @override */
421 * Update the selected item when the associated pref changes. 415 updateStateFromPref: function(event) {
422 * @param {Event} event Pref change event.
423 * @private
424 */
425 updateStateFromPref_: function(event) {
426 if (this.customPrefChangeHandler(event)) 416 if (this.customPrefChangeHandler(event))
427 return; 417 return;
428 418
429 // Make sure the value is a string, because the value is stored as a 419 // Make sure the value is a string, because the value is stored as a
430 // string in the HTMLOptionElement. 420 // string in the HTMLOptionElement.
431 var value = String(event.value.value); 421 var value = String(event.value.value);
432 422
433 var found = false; 423 var found = false;
434 for (var i = 0; i < this.options.length; i++) { 424 for (var i = 0; i < this.options.length; i++) {
435 if (this.options[i].value == value) { 425 if (this.options[i].value == value) {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 460
471 // Listen for user events. 461 // Listen for user events.
472 window.addEventListener('unload', function() { 462 window.addEventListener('unload', function() {
473 if (document.activeElement == self) 463 if (document.activeElement == self)
474 self.blur(); 464 self.blur();
475 }); 465 });
476 }, 466 },
477 467
478 /** 468 /**
479 * Update the associated pref when when the user inputs text. 469 * Update the associated pref when when the user inputs text.
480 * @private 470 * @override
481 */ 471 */
482 updatePrefFromState_: function(event) { 472 updatePrefFromState: function(event) {
483 switch (this.dataType) { 473 switch (this.dataType) {
484 case 'number': 474 case 'number':
485 Preferences.setIntegerPref(this.pref, this.value, 475 Preferences.setIntegerPref(this.pref, this.value,
486 !this.dialogPref, this.metric); 476 !this.dialogPref, this.metric);
487 break; 477 break;
488 case 'double': 478 case 'double':
489 Preferences.setDoublePref(this.pref, this.value, 479 Preferences.setDoublePref(this.pref, this.value,
490 !this.dialogPref, this.metric); 480 !this.dialogPref, this.metric);
491 break; 481 break;
492 case 'url': 482 case 'url':
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
547 decorate: function() { 537 decorate: function() {
548 var self = this; 538 var self = this;
549 539
550 // Listen for pref changes. 540 // Listen for pref changes.
551 // This element behaves like a normal button and does not affect the 541 // This element behaves like a normal button and does not affect the
552 // underlying preference; it just becomes disabled when the preference is 542 // underlying preference; it just becomes disabled when the preference is
553 // managed, and its value is false. This is useful for buttons that should 543 // managed, and its value is false. This is useful for buttons that should
554 // be disabled when the underlying Boolean preference is set to false by a 544 // be disabled when the underlying Boolean preference is set to false by a
555 // policy or extension. 545 // policy or extension.
556 Preferences.getInstance().addEventListener(this.pref, function(event) { 546 Preferences.getInstance().addEventListener(this.pref, function(event) {
557 updateDisabledState_(self, 'notUserModifiable', 547 updateDisabledState(self, 'notUserModifiable',
558 event.value.disabled && !event.value.value); 548 event.value.disabled && !event.value.value);
559 self.controlledBy = event.value.controlledBy; 549 self.controlledBy = event.value.controlledBy;
560 }); 550 });
561 }, 551 },
562 552
563 /** 553 /**
564 * See |updateDisabledState_| above. 554 * See |updateDisabledState| above.
565 */ 555 */
566 setDisabled: function(reason, disabled) { 556 setDisabled: function(reason, disabled) {
567 updateDisabledState_(this, reason, disabled); 557 updateDisabledState(this, reason, disabled);
568 }, 558 },
569 }; 559 };
570 560
571 /** 561 /**
572 * The name of the associated preference. 562 * The name of the associated preference.
573 */ 563 */
574 cr.defineProperty(PrefButton, 'pref', cr.PropertyKind.ATTR); 564 cr.defineProperty(PrefButton, 'pref', cr.PropertyKind.ATTR);
575 565
576 /** 566 /**
577 * Whether the associated preference is controlled by a source other than the 567 * Whether the associated preference is controlled by a source other than the
578 * user's setting (can be 'policy', 'extension', 'recommended' or unset). 568 * user's setting (can be 'policy', 'extension', 'recommended' or unset).
579 */ 569 */
580 cr.defineProperty(PrefButton, 'controlledBy', cr.PropertyKind.ATTR); 570 cr.defineProperty(PrefButton, 'controlledBy', cr.PropertyKind.ATTR);
581 571
582 // Export 572 // Export
583 return { 573 return {
584 PrefCheckbox: PrefCheckbox, 574 PrefCheckbox: PrefCheckbox,
585 PrefInputElement: PrefInputElement, 575 PrefInputElement: PrefInputElement,
586 PrefNumber: PrefNumber, 576 PrefNumber: PrefNumber,
587 PrefRadio: PrefRadio, 577 PrefRadio: PrefRadio,
588 PrefRange: PrefRange, 578 PrefRange: PrefRange,
589 PrefSelect: PrefSelect, 579 PrefSelect: PrefSelect,
590 PrefTextField: PrefTextField, 580 PrefTextField: PrefTextField,
591 PrefPortNumber: PrefPortNumber, 581 PrefPortNumber: PrefPortNumber,
592 PrefButton: PrefButton 582 PrefButton: PrefButton
593 }; 583 };
594
595 }); 584 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698