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

Unified Diff: chrome/browser/resources/options2/pref_ui.js

Issue 10827141: Move handling of dialog preferences to Preferences class (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix my rushed copy & paste :( Created 8 years, 5 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/resources/options2/pref_ui.js
diff --git a/chrome/browser/resources/options2/pref_ui.js b/chrome/browser/resources/options2/pref_ui.js
index 82bab8613980c09ad549c69850c6a79aa8e32b15..1d48ebc80776dd7c9a35e2c65b5e654ea9b57d55 100644
--- a/chrome/browser/resources/options2/pref_ui.js
+++ b/chrome/browser/resources/options2/pref_ui.js
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// TODO(jhawkins): Add dialog-pref support to all preference controls.
-
cr.define('options', function() {
var Preferences = options.Preferences;
@@ -48,15 +46,8 @@ cr.define('options', function() {
* @param {!Event} event The pref change event.
*/
function updateElementState_(el, event) {
- el.controlledBy = null;
-
- if (!event.value)
- return;
-
updateDisabledState_(el, 'notUserModifiable', event.value.disabled);
-
el.controlledBy = event.value.controlledBy;
-
OptionsPage.updateManagedBannerVisibility();
}
@@ -72,12 +63,6 @@ cr.define('options', function() {
__proto__: HTMLInputElement.prototype,
/**
- * The stored value of the preference that this checkbox controls.
- * @type {boolean}
- */
- prefValue_: null,
-
- /**
* Initialization function for the cr.ui framework.
*/
decorate: function() {
@@ -88,54 +73,31 @@ cr.define('options', function() {
// Listen to pref changes.
Preferences.getInstance().addEventListener(this.pref, function(event) {
- self.prefValue_ = Boolean(event.value.value);
- self.resetPrefState();
-
+ var value = event.value.value;
+ self.checked = self.inverted_pref ? !value : value;
updateElementState_(self, event);
});
// Listen to user events.
- this.addEventListener('change', function(e) {
- if (self.customChangeHandler(e))
+ this.addEventListener('change', function(event) {
+ if (this.customChangeHandler(event))
James Hawkins 2012/08/02 20:33:32 We have an inconsistency here: we use |self| above
bartfab (slow) 2012/08/31 14:14:30 Done.
return;
- if (!this.dialogPref)
- this.updatePreferenceValue_();
+ var value = this.inverted_pref ? !this.checked : this.checked;
+ switch (this.valueType) {
+ case 'number':
+ Preferences.setIntegerPref(this.pref, Number(value),
+ !this.dialogPref, this.metric);
+ break;
+ case 'boolean':
+ Preferences.setBooleanPref(this.pref, value,
+ !this.dialogPref, this.metric);
+ break;
+ }
});
},
/**
- * Update the preference value based on the checkbox state.
- * @private
- */
- updatePreferenceValue_: function() {
- var value = this.inverted_pref ? !this.checked : this.checked;
- switch (this.valueType) {
- case 'number':
- Preferences.setIntegerPref(this.pref, Number(value), this.metric);
- break;
- case 'boolean':
- Preferences.setBooleanPref(this.pref, value, this.metric);
- break;
- }
- },
-
- /**
- * Called by SettingsDialog to save the preference.
- */
- savePrefState: function() {
- this.updatePreferenceValue_();
- },
-
- /**
- * Called by SettingsDialog to reset the UI to match the current preference
- * value.
- */
- resetPrefState: function() {
- this.checked = this.inverted_pref ? !this.prefValue_ : this.prefValue_;
- },
-
- /**
* Sets up options in checkbox element.
* @param {String} valueType The preference type for this checkbox.
*/
@@ -170,7 +132,7 @@ cr.define('options', function() {
/**
* A special preference type specific to dialogs. These preferences are reset
James Hawkins 2012/08/02 20:33:32 This sentence now doesn't make as much sense. I'd
bartfab (slow) 2012/08/31 14:14:30 Done.
- * when the dialog is shown and are not saved until the user confirms the
+ * when the dialog is closed and are not saved until the user confirms the
* dialog.
* @type {boolean}
*/
@@ -222,38 +184,24 @@ cr.define('options', function() {
if (self.customChangeHandler(event))
return;
self.checked = String(event.value.value) == self.value;
- self.storedValue_ = self.checked;
updateElementState_(self, event);
});
- // Dialog preferences are not saved until savePrefState() is explicitly
- // called.
- if (!this.dialogPref)
- this.onchange = this.savePrefState.bind(this);
- },
-
- /**
- * Resets the input to the stored value.
- */
- resetPrefState: function() {
- this.checked = this.storedValue_;
- },
+ // Listen to user events.
+ this.addEventListener('change', function(event) {
+ if (this.customChangeHandler(event))
+ return;
- /**
- * Saves the value of the input back into the preference. May be called
- * directly to save dialog preferences.
- */
- savePrefState: function() {
- this.storedValue_ = this.checked;
- if (this.value == 'true' || this.value == 'false') {
- var value = String(this.value);
- Preferences.setBooleanPref(this.pref, value == String(this.checked),
- this.metric);
- } else {
- Preferences.setIntegerPref(this.pref, parseInt(this.value, 10),
- this.metric);
- }
+ if (this.value == 'true' || this.value == 'false') {
+ var value = String(this.value);
+ Preferences.setBooleanPref(this.pref, value == String(this.checked),
+ !this.dialogPref, this.metric);
+ } else {
+ Preferences.setIntegerPref(this.pref, parseInt(this.value, 10),
+ !this.dialogPref, this.metric);
+ }
+ });
},
/**
@@ -283,7 +231,7 @@ cr.define('options', function() {
/**
* A special preference type specific to dialogs. These preferences are reset
- * when the dialog is shown and are not saved until the user confirms the
+ * when the dialog is closed and are not saved until the user confirms the
* dialog.
* @type {boolean}
*/
@@ -329,7 +277,8 @@ cr.define('options', function() {
this.addEventListener('change',
function(e) {
if (this.validity.valid) {
- Preferences.setIntegerPref(self.pref, self.value, self.metric);
+ Preferences.setIntegerPref(self.pref, self.value,
+ !self.dialogPref, self.metric);
}
});
},
@@ -349,6 +298,14 @@ cr.define('options', function() {
cr.defineProperty(PrefNumeric, 'pref', cr.PropertyKind.ATTR);
/**
+ * A special preference type specific to dialogs. These preferences are reset
+ * when the dialog is closed and are not saved until the user confirms the
+ * dialog.
+ * @type {boolean}
+ */
+ cr.defineProperty(PrefRadio, 'dialogPref', cr.PropertyKind.BOOL_ATTR);
+
+ /**
* Whether the preference is controlled by something else than the user's
* settings (either 'policy' or 'extension').
* @type {string}
@@ -382,7 +339,8 @@ cr.define('options', function() {
this.addEventListener('input',
function(e) {
if (this.validity.valid) {
- Preferences.setIntegerPref(self.pref, self.value, self.metric);
+ Preferences.setIntegerPref(self.pref, self.value,
+ !self.dialogPref, self.metric);
}
});
},
@@ -442,8 +400,7 @@ cr.define('options', function() {
*/
onPrefChange_: function(event) {
var value = event.value.value;
- if (value != undefined)
- this.value = this.valueMap ? this.valueMap.indexOf(value) : value;
+ this.value = this.valueMap ? this.valueMap.indexOf(value) : value;
},
/**
@@ -464,11 +421,8 @@ cr.define('options', function() {
* @private
*/
setRangePref_: function() {
- Preferences.setIntegerPref(
- this.pref, this.mapValueToRange_(this.value), this.metric);
-
- if (this.notifyPrefChange)
- this.notifyPrefChange(this, this.mapValueToRange_(this.value));
+ Preferences.setIntegerPref(this.pref, this.mapValueToRange_(this.value),
+ !this.dialogPref, this.metric);
},
/**
@@ -515,6 +469,14 @@ cr.define('options', function() {
cr.defineProperty(PrefRange, 'pref', cr.PropertyKind.ATTR);
/**
+ * A special preference type specific to dialogs. These preferences are reset
+ * when the dialog is closed and are not saved until the user confirms the
+ * dialog.
+ * @type {boolean}
+ */
+ cr.defineProperty(PrefRadio, 'dialogPref', cr.PropertyKind.BOOL_ATTR);
+
+ /**
* Whether the preference is controlled by something else than the user's
* settings (either 'policy' or 'extension').
* @type {string}
@@ -538,12 +500,6 @@ cr.define('options', function() {
__proto__: HTMLSelectElement.prototype,
/**
- * @type {string} The stored value of the preference that this select
- * controls.
- */
- prefValue_: null,
-
- /**
* Initialization function for the cr.ui framework.
*/
decorate: function() {
@@ -556,72 +512,54 @@ cr.define('options', function() {
value = event.value.value.toString();
updateElementState_(self, event);
- self.prefValue_ = value;
- self.resetPrefState();
- });
- // Listen to user events.
- this.addEventListener('change', function(event) {
- if (!self.dialogPref)
- self.updatePreference_(self.prefValue_);
- });
- },
-
- /**
- * Resets the input to the stored value.
- */
- resetPrefState: function() {
- var found = false;
- for (var i = 0; i < this.options.length; i++) {
- if (this.options[i].value == this.prefValue_) {
- this.selectedIndex = i;
- found = true;
+ var found = false;
+ for (var i = 0; i < self.options.length; i++) {
+ if (self.options[i].value == self.prefValue_) {
+ self.selectedIndex = i;
+ found = true;
+ }
}
- }
- // Item not found, select first item.
- if (!found)
- this.selectedIndex = 0;
+ // Item not found, select first item.
+ if (!found)
+ self.selectedIndex = 0;
- if (this.onchange)
- this.onchange(event);
- },
+ if (this.onchange)
+ self.onchange(event);
+ });
- /**
- * Updates the preference to the currently selected value.
- */
- updatePreference_: function() {
- if (!this.dataType) {
- console.error('undefined data type for <select> pref');
- return;
- }
-
- var prefValue = this.options[this.selectedIndex].value;
- switch (this.dataType) {
- case 'number':
- Preferences.setIntegerPref(this.pref, prefValue, this.metric);
- break;
- case 'double':
- Preferences.setDoublePref(this.pref, prefValue, this.metric);
- break;
- case 'boolean':
- var value = (prefValue == 'true');
- Preferences.setBooleanPref(this.pref, value, this.metric);
- break;
- case 'string':
- Preferences.setStringPref(this.pref, prefValue, this.metric);
- break;
- default:
- console.error('unknown data type for <select> pref: ' +
- this.dataType);
- }
- },
+ // Listen to user events.
+ this.addEventListener('change', function(event) {
+ if (!this.dataType) {
+ console.error('undefined data type for <select> pref');
+ return;
+ }
- /**
- * Called by SettingsDialog to save the stored value to preferences.
- */
- savePrefState: function() {
- this.updatePreference_();
+ var prefValue = this.options[this.selectedIndex].value;
+ switch (this.dataType) {
+ case 'number':
+ Preferences.setIntegerPref(this.pref, prefValue,
+ !this.dialogPref, this.metric);
+ break;
+ case 'double':
+ Preferences.setDoublePref(this.pref, prefValue,
+ !this.dialogPref, this.metric);
+ break;
+ case 'boolean':
+ var value = (prefValue == 'true');
+ Preferences.setBooleanPref(this.pref, value,
+ !this.dialogPref, this.metric);
+ break;
+ case 'string':
+ Preferences.setStringPref(this.pref, prefValue,
+ !this.dialogPref, this.metric);
+ break;
+ default:
+ console.error('unknown data type for <select> pref: ' +
+ this.dataType);
+ }
+ });
},
/**
@@ -647,7 +585,7 @@ cr.define('options', function() {
/**
* A special preference type specific to dialogs. These preferences are reset
- * when the dialog is shown and are not saved until the user confirms the
+ * when the dialog is closed and are not saved until the user confirms the
* dialog.
* @type {boolean}
*/
@@ -676,40 +614,6 @@ cr.define('options', function() {
__proto__: HTMLInputElement.prototype,
/**
- * @type {string} The stored value of the preference that this text field
- * controls.
- */
- prefValue_: null,
-
- /**
- * Saves the value of the input back into the preference. May be called
- * directly to save dialog preferences.
- */
- savePrefState: function() {
- switch (this.dataType) {
- case 'number':
- Preferences.setIntegerPref(this.pref, this.value, this.metric);
- break;
- case 'double':
- Preferences.setDoublePref(this.pref, this.value, this.metric);
- break;
- case 'url':
- Preferences.setURLPref(this.pref, this.value, this.metric);
- break;
- default:
- Preferences.setStringPref(this.pref, this.value, this.metric);
- break;
- }
- },
-
- /**
- * Resets the input to the stored value.
- */
- resetPrefState: function() {
- this.value = this.prefValue_;
- },
-
- /**
* Initialization function for the cr.ui framework.
*/
decorate: function() {
@@ -721,13 +625,29 @@ cr.define('options', function() {
self.value = event.value.value;
updateElementState_(self, event);
-
- self.prefValue_ = self.value;
});
// Listen to user events.
- if (!this.dialogPref)
- this.addEventListener('change', this.savePrefState.bind(this));
+ this.addEventListener('change', function(event) {
+ switch (this.dataType) {
James Hawkins 2012/08/02 20:33:32 I'm not a fan of inlining large functions, so plea
bartfab (slow) 2012/08/31 14:14:30 Done.
+ case 'number':
+ Preferences.setIntegerPref(this.pref, this.value,
+ !this.dialogPref, this.metric);
+ break;
+ case 'double':
+ Preferences.setDoublePref(this.pref, this.value,
+ !this.dialogPref, this.metric);
+ break;
+ case 'url':
+ Preferences.setURLPref(this.pref, this.value,
+ !this.dialogPref, this.metric);
+ break;
+ default:
+ Preferences.setStringPref(this.pref, this.value,
+ !this.dialogPref, this.metric);
+ break;
+ }
+ });
window.addEventListener('unload',
function() {
@@ -752,7 +672,7 @@ cr.define('options', function() {
/**
* A special preference type specific to dialogs. These preferences are reset
- * when the dialog is shown and are not saved until the user confirms the
+ * when the dialog is closed and are not saved until the user confirms the
* dialog.
* @type {boolean}
*/

Powered by Google App Engine
This is Rietveld 408576698