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

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

Issue 6155008: DOMUI: Implement the new Fonts and Encoding page. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixes. Created 9 years, 11 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/options/pref_ui.js
diff --git a/chrome/browser/resources/options/pref_ui.js b/chrome/browser/resources/options/pref_ui.js
index 0734b6bce6ea7d68ff3309e4a58e5c6f7efa4a2a..4f26303539c579eae3a0fbf3fd71f940b7853422 100644
--- a/chrome/browser/resources/options/pref_ui.js
+++ b/chrome/browser/resources/options/pref_ui.js
@@ -1,4 +1,4 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// 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.
@@ -247,36 +247,133 @@ cr.define('options', function() {
PrefRange.prototype = {
csilv 2011/01/11 21:48:43 Just curious... I believe PrefRange is used in CrO
James Hawkins 2011/01/11 23:45:54 The only thing I removed from this class was updat
// Set up the prototype chain
- __proto__: PrefNumeric.prototype,
+ __proto__: HTMLInputElement.prototype,
+
+ /**
+ * The map from input range value to the corresponding preference value.
+ * @private
+ */
+ 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
arv (Not doing code reviews) 2011/01/11 21:50:35 Using mouseup seems wrong since it will not work w
James Hawkins 2011/01/11 23:45:54 Not wrong, just not completely right ;-) Added ke
+ * the drag.
+ * @private
+ */
+ continuous_: true,
/**
* Initialization function for the cr.ui framework.
*/
decorate: function() {
this.type = 'range';
- PrefNumeric.prototype.decorate.call(this);
- var self = this;
- // Additionally change the indicator as well.
- Preferences.getInstance().addEventListener(this.pref,
- function(event) {
- self.updateIndicator();
- });
+ // Update the UI when the pref changes.
+ Preferences.getInstance().addEventListener(
+ this.pref, this.onPrefChange_.bind(this));
// Listen to user events.
- this.addEventListener('input',
- function(e) {
- this.updateIndicator();
- });
+ this.onchange = this.onChange_.bind(this);
+ this.onmouseup = this.onMouseUp_.bind(this);
},
- updateIndicator: function() {
- if ($(this.id + '-value')) {
- $(this.id + '-value').textContent = this.value;
- }
- }
+ /**
+ * 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 ?
arv (Not doing code reviews) 2011/01/11 21:50:35 I see these lines all over. Maybe we could provide
James Hawkins 2011/01/11 23:45:54 I have a plan to refactor this, though it's large
+ 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_();
+
+ 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);
+ },
+
+ /**
+ * onmouseup handler that modifies the pref if |continuous_| is false.
+ * @private
+ */
+ onMouseUp_: function() {
+ if (!this.continuous)
arv (Not doing code reviews) 2011/01/11 21:50:35 You also need to handle keyboard (and mousewheel?)
James Hawkins 2011/01/11 23:45:54 Done.
+ this.setRangePref_();
+ },
+
+ /**
+ * Maps the value of this element into the range provided by the client,
+ * represented by |valueMap|.
+ * @param {Integer} value The value to map.
arv (Not doing code reviews) 2011/01/11 21:50:35 {number} JS has no int type
James Hawkins 2011/01/11 23:45:54 Done.
+ * @private
+ */
+ mapValueToRange_: function(value) {
+ return this.valueMap ? this.valueMap[value] : value;
+ },
+
+ /**
+ * Get and set the value map for the range element.
+ * @type {Array}
+ */
+ get valueMap() {
arv (Not doing code reviews) 2011/01/11 21:50:35 Just use a plain old property if there are no side
James Hawkins 2011/01/11 23:45:54 Done.
+ return this.valueMap_;
+ },
+ set valueMap(valueMap) {
+ this.valueMap_ = valueMap;
+ },
+
+ /**
+ * Get and set the continuous_ flag.
+ * @type {Boolean}
+ */
+ get continuous() {
+ return this.continuous_;
arv (Not doing code reviews) 2011/01/11 21:50:35 same here
James Hawkins 2011/01/11 23:45:54 Done.
+ },
+ set continuous(continuous) {
+ this.continuous_ = continuous;
+ },
+
+ /**
+ * Called when the client has specified non-continuous mode and the value of
+ * the range control changes.
+ * @param {Element} el This element.
+ * @param {Integer} 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:

Powered by Google App Engine
This is Rietveld 408576698