| Index: chrome/browser/resources/options/pref_ui.js
|
| ===================================================================
|
| --- chrome/browser/resources/options/pref_ui.js (revision 84868)
|
| +++ chrome/browser/resources/options/pref_ui.js (working copy)
|
| @@ -1,534 +0,0 @@
|
| -// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -cr.define('options', function() {
|
| -
|
| - var Preferences = options.Preferences;
|
| -
|
| - /**
|
| - * Helper function update element's state from pref change event.
|
| - * @private
|
| - * @param {!HTMLElement} el The element to update.
|
| - * @param {!Event} event The pref change event.
|
| - */
|
| - function updateElementState_(el, event) {
|
| - el.managed = event.value && event.value['managed'] != undefined ?
|
| - event.value['managed'] : false;
|
| -
|
| - // Managed UI elements can only be disabled as a result of being
|
| - // managed. They cannot be enabled as a result of a pref being
|
| - // unmanaged.
|
| - if (el.managed)
|
| - el.disabled = true;
|
| -
|
| - // Disable UI elements if backend says so.
|
| - if (!el.disabled && event.value && event.value['disabled'])
|
| - el.disabled = true;
|
| - }
|
| -
|
| - /////////////////////////////////////////////////////////////////////////////
|
| - // PrefCheckbox class:
|
| - // TODO(jhawkins): Refactor all this copy-pasted code!
|
| -
|
| - // Define a constructor that uses an input element as its underlying element.
|
| - var PrefCheckbox = cr.ui.define('input');
|
| -
|
| - PrefCheckbox.prototype = {
|
| - // Set up the prototype chain
|
| - __proto__: HTMLInputElement.prototype,
|
| -
|
| - /**
|
| - * Initialization function for the cr.ui framework.
|
| - */
|
| - decorate: function() {
|
| - this.type = 'checkbox';
|
| - var self = this;
|
| -
|
| - self.initializeValueType(self.getAttribute('value-type'));
|
| -
|
| - // Listen to pref changes.
|
| - Preferences.getInstance().addEventListener(
|
| - this.pref,
|
| - function(event) {
|
| - var value = event.value && event.value['value'] != undefined ?
|
| - event.value['value'] : event.value;
|
| -
|
| - // Invert pref value if inverted_pref == true.
|
| - if (self.inverted_pref)
|
| - self.checked = !Boolean(value);
|
| - else
|
| - self.checked = Boolean(value);
|
| -
|
| - updateElementState_(self, event);
|
| - });
|
| -
|
| - // Listen to user events.
|
| - this.addEventListener(
|
| - 'change',
|
| - function(e) {
|
| - var value = self.inverted_pref ? !self.checked : self.checked;
|
| - switch(self.valueType) {
|
| - case 'number':
|
| - Preferences.setIntegerPref(self.pref,
|
| - Number(value), self.metric);
|
| - break;
|
| - case 'boolean':
|
| - Preferences.setBooleanPref(self.pref,
|
| - value, self.metric);
|
| - break;
|
| - }
|
| - });
|
| - },
|
| -
|
| - /**
|
| - * Sets up options in checkbox element.
|
| - * @param {String} valueType The preference type for this checkbox.
|
| - */
|
| - initializeValueType: function(valueType) {
|
| - this.valueType = valueType || 'boolean';
|
| - },
|
| - };
|
| -
|
| - /**
|
| - * The preference name.
|
| - * @type {string}
|
| - */
|
| - cr.defineProperty(PrefCheckbox, 'pref', cr.PropertyKind.ATTR);
|
| -
|
| - /**
|
| - * The user metric string.
|
| - * @type {string}
|
| - */
|
| - cr.defineProperty(PrefCheckbox, 'metric', cr.PropertyKind.ATTR);
|
| -
|
| - /**
|
| - * Whether to use inverted pref value.
|
| - * @type {boolean}
|
| - */
|
| - cr.defineProperty(PrefCheckbox, 'inverted_pref', cr.PropertyKind.BOOL_ATTR);
|
| -
|
| - /////////////////////////////////////////////////////////////////////////////
|
| - // PrefRadio class:
|
| -
|
| - //Define a constructor that uses an input element as its underlying element.
|
| - var PrefRadio = cr.ui.define('input');
|
| -
|
| - PrefRadio.prototype = {
|
| - // Set up the prototype chain
|
| - __proto__: HTMLInputElement.prototype,
|
| -
|
| - /**
|
| - * Initialization function for the cr.ui framework.
|
| - */
|
| - decorate: function() {
|
| - this.type = 'radio';
|
| - var self = this;
|
| -
|
| - // Listen to pref changes.
|
| - Preferences.getInstance().addEventListener(this.pref,
|
| - function(event) {
|
| - var value = event.value && event.value['value'] != undefined ?
|
| - event.value['value'] : event.value;
|
| - self.checked = String(value) == self.value;
|
| -
|
| - updateElementState_(self, event);
|
| - });
|
| -
|
| - // Listen to user events.
|
| - // Use the 'click' event instead of 'change', because of a bug in WebKit
|
| - // which prevents 'change' from being sent when the user changes selection
|
| - // using the keyboard.
|
| - // https://bugs.webkit.org/show_bug.cgi?id=32013
|
| - this.addEventListener('click',
|
| - function(e) {
|
| - if(self.value == 'true' || self.value == 'false') {
|
| - Preferences.setBooleanPref(self.pref,
|
| - self.value == 'true', self.metric);
|
| - } else {
|
| - Preferences.setIntegerPref(self.pref,
|
| - parseInt(self.value, 10), self.metric);
|
| - }
|
| - });
|
| - },
|
| - };
|
| -
|
| - /**
|
| - * The preference name.
|
| - * @type {string}
|
| - */
|
| - cr.defineProperty(PrefRadio, 'pref', cr.PropertyKind.ATTR);
|
| -
|
| - /**
|
| - * The user metric string.
|
| - * @type {string}
|
| - */
|
| - cr.defineProperty(PrefRadio, 'metric', cr.PropertyKind.ATTR);
|
| -
|
| - /////////////////////////////////////////////////////////////////////////////
|
| - // PrefNumeric class:
|
| -
|
| - // Define a constructor that uses an input element as its underlying element.
|
| - var PrefNumeric = function() {};
|
| - PrefNumeric.prototype = {
|
| - // Set up the prototype chain
|
| - __proto__: HTMLInputElement.prototype,
|
| -
|
| - /**
|
| - * Initialization function for the cr.ui framework.
|
| - */
|
| - decorate: function() {
|
| - var self = this;
|
| -
|
| - // Listen to pref changes.
|
| - Preferences.getInstance().addEventListener(this.pref,
|
| - function(event) {
|
| - self.value = event.value && event.value['value'] != undefined ?
|
| - event.value['value'] : event.value;
|
| -
|
| - updateElementState_(self, event);
|
| - });
|
| -
|
| - // Listen to user events.
|
| - this.addEventListener('change',
|
| - function(e) {
|
| - if (this.validity.valid) {
|
| - Preferences.setIntegerPref(self.pref, self.value, self.metric);
|
| - }
|
| - });
|
| - }
|
| - };
|
| -
|
| - /**
|
| - * The preference name.
|
| - * @type {string}
|
| - */
|
| - cr.defineProperty(PrefNumeric, 'pref', cr.PropertyKind.ATTR);
|
| -
|
| - /**
|
| - * The user metric string.
|
| - * @type {string}
|
| - */
|
| - cr.defineProperty(PrefNumeric, 'metric', cr.PropertyKind.ATTR);
|
| -
|
| - /////////////////////////////////////////////////////////////////////////////
|
| - // PrefNumber class:
|
| -
|
| - // Define a constructor that uses an input element as its underlying element.
|
| - var PrefNumber = cr.ui.define('input');
|
| -
|
| - PrefNumber.prototype = {
|
| - // Set up the prototype chain
|
| - __proto__: PrefNumeric.prototype,
|
| -
|
| - /**
|
| - * Initialization function for the cr.ui framework.
|
| - */
|
| - decorate: function() {
|
| - this.type = 'number';
|
| - PrefNumeric.prototype.decorate.call(this);
|
| -
|
| - // Listen to user events.
|
| - this.addEventListener('input',
|
| - function(e) {
|
| - if (this.validity.valid) {
|
| - Preferences.setIntegerPref(self.pref, self.value, self.metric);
|
| - }
|
| - });
|
| - }
|
| - };
|
| -
|
| - /////////////////////////////////////////////////////////////////////////////
|
| - // PrefRange class:
|
| -
|
| - // Define a constructor that uses an input element as its underlying element.
|
| - var PrefRange = cr.ui.define('input');
|
| -
|
| - PrefRange.prototype = {
|
| - // Set up the prototype chain
|
| - __proto__: HTMLInputElement.prototype,
|
| -
|
| - /**
|
| - * The map from input range value to the corresponding preference value.
|
| - */
|
| - valueMap: undefined,
|
| -
|
| - /**
|
| - * If true, the associated pref will be modified on each onchange event;
|
| - * otherwise, the pref will only be modified on the onmouseup event after
|
| - * the drag.
|
| - */
|
| - continuous: true,
|
| -
|
| - /**
|
| - * Initialization function for the cr.ui framework.
|
| - */
|
| - decorate: function() {
|
| - this.type = 'range';
|
| -
|
| - // Update the UI when the pref changes.
|
| - Preferences.getInstance().addEventListener(
|
| - this.pref, this.onPrefChange_.bind(this));
|
| -
|
| - // Listen to user events.
|
| - // TODO(jhawkins): Add onmousewheel handling once the associated WK bug is
|
| - // fixed.
|
| - // https://bugs.webkit.org/show_bug.cgi?id=52256
|
| - this.onchange = this.onChange_.bind(this);
|
| - this.onkeyup = this.onmouseup = this.onInputUp_.bind(this);
|
| - },
|
| -
|
| - /**
|
| - * Event listener that updates the UI when the underlying pref changes.
|
| - * @param {Event} event The event that details the pref change.
|
| - * @private
|
| - */
|
| - onPrefChange_: function(event) {
|
| - var value = event.value && event.value['value'] != undefined ?
|
| - event.value['value'] : event.value;
|
| - if (value != undefined)
|
| - this.value = this.valueMap ? this.valueMap.indexOf(value) : value;
|
| - },
|
| -
|
| - /**
|
| - * onchange handler that sets the pref when the user changes the value of
|
| - * the input element.
|
| - * @private
|
| - */
|
| - onChange_: function(event) {
|
| - if (this.continuous)
|
| - this.setRangePref_();
|
| -
|
| - if (this.notifyChange)
|
| - this.notifyChange(this, this.mapValueToRange_(this.value));
|
| - },
|
| -
|
| - /**
|
| - * Sets the integer value of |pref| to the value of this element.
|
| - * @private
|
| - */
|
| - setRangePref_: function() {
|
| - Preferences.setIntegerPref(
|
| - this.pref, this.mapValueToRange_(this.value), this.metric);
|
| -
|
| - if (this.notifyPrefChange)
|
| - this.notifyPrefChange(this, this.mapValueToRange_(this.value));
|
| - },
|
| -
|
| - /**
|
| - * onkeyup/onmouseup handler that modifies the pref if |continuous| is
|
| - * false.
|
| - * @private
|
| - */
|
| - onInputUp_: function(event) {
|
| - if (!this.continuous)
|
| - this.setRangePref_();
|
| - },
|
| -
|
| - /**
|
| - * Maps the value of this element into the range provided by the client,
|
| - * represented by |valueMap|.
|
| - * @param {number} value The value to map.
|
| - * @private
|
| - */
|
| - mapValueToRange_: function(value) {
|
| - return this.valueMap ? this.valueMap[value] : value;
|
| - },
|
| -
|
| - /**
|
| - * Called when the client has specified non-continuous mode and the value of
|
| - * the range control changes.
|
| - * @param {Element} el This element.
|
| - * @param {number} value The value of this element.
|
| - */
|
| - notifyChange: function(el, value) {
|
| - },
|
| - };
|
| -
|
| - /**
|
| - * The preference name.
|
| - * @type {string}
|
| - */
|
| - cr.defineProperty(PrefRange, 'pref', cr.PropertyKind.ATTR);
|
| -
|
| - /**
|
| - * The user metric string.
|
| - * @type {string}
|
| - */
|
| - cr.defineProperty(PrefRange, 'metric', cr.PropertyKind.ATTR);
|
| -
|
| - /////////////////////////////////////////////////////////////////////////////
|
| - // PrefSelect class:
|
| -
|
| - // Define a constructor that uses a select element as its underlying element.
|
| - var PrefSelect = cr.ui.define('select');
|
| -
|
| - PrefSelect.prototype = {
|
| - // Set up the prototype chain
|
| - __proto__: HTMLSelectElement.prototype,
|
| -
|
| - /**
|
| - * Initialization function for the cr.ui framework.
|
| - */
|
| - decorate: function() {
|
| - var self = this;
|
| -
|
| - // Listen to pref changes.
|
| - Preferences.getInstance().addEventListener(this.pref,
|
| - function(event) {
|
| - var value = event.value && event.value['value'] != undefined ?
|
| - event.value['value'] : event.value;
|
| -
|
| - // Make sure |value| is a string, because the value is stored as a
|
| - // string in the HTMLOptionElement.
|
| - value = value.toString();
|
| -
|
| - updateElementState_(self, event);
|
| -
|
| - var found = false;
|
| - for (var i = 0; i < self.options.length; i++) {
|
| - if (self.options[i].value == value) {
|
| - self.selectedIndex = i;
|
| - found = true;
|
| - }
|
| - }
|
| -
|
| - // Item not found, select first item.
|
| - if (!found)
|
| - self.selectedIndex = 0;
|
| -
|
| - if (self.onchange != undefined)
|
| - self.onchange(event);
|
| - });
|
| -
|
| - // Listen to user events.
|
| - this.addEventListener('change',
|
| - function(e) {
|
| - if (!self.dataType) {
|
| - console.error('undefined data type for <select> pref');
|
| - return;
|
| - }
|
| -
|
| - switch(self.dataType) {
|
| - case 'number':
|
| - Preferences.setIntegerPref(self.pref,
|
| - self.options[self.selectedIndex].value, self.metric);
|
| - break;
|
| - case 'double':
|
| - Preferences.setDoublePref(self.pref,
|
| - self.options[self.selectedIndex].value, self.metric);
|
| - break;
|
| - case 'boolean':
|
| - var option = self.options[self.selectedIndex];
|
| - var value = (option.value == 'true') ? true : false;
|
| - Preferences.setBooleanPref(self.pref, value, self.metric);
|
| - break;
|
| - case 'string':
|
| - Preferences.setStringPref(self.pref,
|
| - self.options[self.selectedIndex].value, self.metric);
|
| - break;
|
| - default:
|
| - console.error('unknown data type for <select> pref: ' +
|
| - self.dataType);
|
| - }
|
| - });
|
| - },
|
| - };
|
| -
|
| - /**
|
| - * The preference name.
|
| - * @type {string}
|
| - */
|
| - cr.defineProperty(PrefSelect, 'pref', cr.PropertyKind.ATTR);
|
| -
|
| - /**
|
| - * The user metric string.
|
| - * @type {string}
|
| - */
|
| - cr.defineProperty(PrefSelect, 'metric', cr.PropertyKind.ATTR);
|
| -
|
| - /**
|
| - * The data type for the preference options.
|
| - * @type {string}
|
| - */
|
| - cr.defineProperty(PrefSelect, 'dataType', cr.PropertyKind.ATTR);
|
| -
|
| - /////////////////////////////////////////////////////////////////////////////
|
| - // PrefTextField class:
|
| -
|
| - // Define a constructor that uses an input element as its underlying element.
|
| - var PrefTextField = cr.ui.define('input');
|
| -
|
| - PrefTextField.prototype = {
|
| - // Set up the prototype chain
|
| - __proto__: HTMLInputElement.prototype,
|
| -
|
| - /**
|
| - * Initialization function for the cr.ui framework.
|
| - */
|
| - decorate: function() {
|
| - var self = this;
|
| -
|
| - // Listen to pref changes.
|
| - Preferences.getInstance().addEventListener(this.pref,
|
| - function(event) {
|
| - self.value = event.value && event.value['value'] != undefined ?
|
| - event.value['value'] : event.value;
|
| -
|
| - updateElementState_(self, event);
|
| - });
|
| -
|
| - // Listen to user events.
|
| - this.addEventListener('change',
|
| - function(e) {
|
| - switch(self.dataType) {
|
| - case 'number':
|
| - Preferences.setIntegerPref(self.pref, self.value, self.metric);
|
| - break;
|
| - case 'double':
|
| - Preferences.setDoublePref(self.pref, self.value, self.metric);
|
| - break;
|
| - default:
|
| - Preferences.setStringPref(self.pref, self.value, self.metric);
|
| - break;
|
| - }
|
| - });
|
| -
|
| - window.addEventListener('unload',
|
| - function() {
|
| - if (document.activeElement == self)
|
| - self.blur();
|
| - });
|
| - }
|
| - };
|
| -
|
| - /**
|
| - * The preference name.
|
| - * @type {string}
|
| - */
|
| - cr.defineProperty(PrefTextField, 'pref', cr.PropertyKind.ATTR);
|
| -
|
| - /**
|
| - * The user metric string.
|
| - * @type {string}
|
| - */
|
| - cr.defineProperty(PrefTextField, 'metric', cr.PropertyKind.ATTR);
|
| -
|
| - /**
|
| - * The data type for the preference options.
|
| - * @type {string}
|
| - */
|
| - cr.defineProperty(PrefTextField, 'dataType', cr.PropertyKind.ATTR);
|
| -
|
| - // Export
|
| - return {
|
| - PrefCheckbox: PrefCheckbox,
|
| - PrefNumber: PrefNumber,
|
| - PrefNumeric: PrefNumeric,
|
| - PrefRadio: PrefRadio,
|
| - PrefRange: PrefRange,
|
| - PrefSelect: PrefSelect,
|
| - PrefTextField: PrefTextField
|
| - };
|
| -
|
| -});
|
|
|