Commit 8bea8800 authored by dschuyler's avatar dschuyler Committed by Commit bot

[MD settings] change dropdown to accept array of objects rather than array of tuples

This is an optional CL.  There was a question from Micael about using named keys
for the menu options rather than an array index.  This CL shows what that would
look like.

Performance side-effect: inconsequential (measured by hand).

BUG=531786

Review URL: https://codereview.chromium.org/1420533011

Cr-Commit-Position: refs/heads/master@{#361390}
parent 778a7e84
...@@ -185,11 +185,20 @@ Polymer({ ...@@ -185,11 +185,20 @@ Polymer({
* @private * @private
*/ */
setFontsData_: function(fontList, encodingList) { setFontsData_: function(fontList, encodingList) {
this.$.standardFont.menuOptions = fontList; var fontMenuOptions = [];
this.$.serifFont.menuOptions = fontList; for (var i = 0; i < fontList.length; ++i)
this.$.sansSerifFont.menuOptions = fontList; fontMenuOptions.push({value: fontList[i][0], name: fontList[i][1]});
this.$.fixedFont.menuOptions = fontList; this.$.standardFont.menuOptions = fontMenuOptions;
this.$.encoding.menuOptions = encodingList; this.$.serifFont.menuOptions = fontMenuOptions;
this.$.sansSerifFont.menuOptions = fontMenuOptions;
this.$.fixedFont.menuOptions = fontMenuOptions;
var encodingMenuOptions = [];
for (var i = 0; i < encodingList.length; ++i) {
encodingMenuOptions.push({
value: encodingList[i][0], name: encodingList[i][1]});
}
this.$.encoding.menuOptions = encodingMenuOptions;
}, },
/** /**
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
<link rel="import" href="chrome://resources/polymer/v1_0/paper-button/paper-button.html"> <link rel="import" href="chrome://resources/polymer/v1_0/paper-button/paper-button.html">
<link rel="import" href="chrome://resources/polymer/v1_0/paper-radio-button/paper-radio-button.html"> <link rel="import" href="chrome://resources/polymer/v1_0/paper-radio-button/paper-radio-button.html">
<link rel="import" href="chrome://resources/polymer/v1_0/paper-toggle-button/paper-toggle-button.html"> <link rel="import" href="chrome://resources/polymer/v1_0/paper-toggle-button/paper-toggle-button.html">
<link rel="import" href="chrome://md-settings/controls/settings_dropdown_menu.html">
<link rel="import" href="chrome://md-settings/controls/settings_input.html"> <link rel="import" href="chrome://md-settings/controls/settings_input.html">
<link rel="import" href="chrome://md-settings/controls/settings_radio_group.html"> <link rel="import" href="chrome://md-settings/controls/settings_radio_group.html">
<link rel="import" href="chrome://md-settings/settings_page/settings_animated_pages.html"> <link rel="import" href="chrome://md-settings/settings_page/settings_animated_pages.html">
...@@ -85,7 +86,7 @@ ...@@ -85,7 +86,7 @@
<div class="settings-box split"> <div class="settings-box split">
<div class="start" i18n-content="pageZoom"></div> <div class="start" i18n-content="pageZoom"></div>
<settings-dropdown-menu id="pageZoom" <settings-dropdown-menu id="pageZoom"
pref="{{prefs.partition.default_zoom_level}}" pref="{{defaultZoomLevel_}}"
menu-options="[[pageZoomOptions_]]"> menu-options="[[pageZoomOptions_]]">
</settings-dropdown-menu> </settings-dropdown-menu>
</div> </div>
......
...@@ -29,6 +29,14 @@ Polymer({ ...@@ -29,6 +29,14 @@ Polymer({
type: Object, type: Object,
}, },
/**
* Preferences state.
*/
prefs: {
type: Object,
notify: true,
},
/** /**
* @private * @private
*/ */
...@@ -38,33 +46,79 @@ Polymer({ ...@@ -38,33 +46,79 @@ Polymer({
value: false, value: false,
}, },
/**
* @private
*/
defaultZoomLevel_: {
notify: true,
type: Object,
value: function() {
return {
type: chrome.settingsPrivate.PrefType.NUMBER,
};
},
},
/** /**
* List of options for the font size drop-down menu. * List of options for the font size drop-down menu.
* The order of entries in this array matches the * @type {!DropdownMenuOptionList}
* prefs.browser.clear_data.time_period.value enum.
* @private {!Array<!Array<{0: number, 1: string}>>}
*/ */
fontSizeOptions_: { fontSizeOptions_: {
readOnly: true, readOnly: true,
type: Array, type: Array,
value: function() { value: function() {
return [ return [
[9, loadTimeData.getString('verySmall')], {value: 9, name: loadTimeData.getString('verySmall')},
[12, loadTimeData.getString('small')], {value: 12, name: loadTimeData.getString('small')},
[16, loadTimeData.getString('medium')], {value: 16, name: loadTimeData.getString('medium')},
[20, loadTimeData.getString('large')], {value: 20, name: loadTimeData.getString('large')},
[24, loadTimeData.getString('veryLarge')], {value: 24, name: loadTimeData.getString('veryLarge')},
]; ];
}, },
}, },
/**
* List of options for the page zoom drop-down menu.
* @type {!DropdownMenuOptionList}
*/
pageZoomOptions_: {
readOnly: true,
type: Array,
value: [
{value: 25, name: '25%'},
{value: 33, name: '33%'},
{value: 50, name: '50%'},
{value: 67, name: '67%'},
{value: 75, name: '75%'},
{value: 90, name: '90%'},
{value: 100, name: '100%'},
{value: 110, name: '110%'},
{value: 125, name: '125%'},
{value: 150, name: '150%'},
{value: 175, name: '175%'},
{value: 200, name: '200%'},
{value: 300, name: '300%'},
{value: 400, name: '400%'},
{value: 500, name: '500%'},
],
},
}, },
behaviors: [ behaviors: [
I18nBehavior, I18nBehavior,
], ],
observers: [
'zoomLevelChanged_(defaultZoomLevel_.value)',
],
ready: function() { ready: function() {
this.$.defaultFontSize.menuOptions = this.fontSizeOptions_; this.$.defaultFontSize.menuOptions = this.fontSizeOptions_;
this.$.pageZoom.menuOptions = this.pageZoomOptions_;
// TODO(dschuyler): Look into adding a listener for the
// default zoom percent.
chrome.settingsPrivate.getDefaultZoomPercent(
this.zoomPrefChanged_.bind(this));
}, },
/** @override */ /** @override */
...@@ -104,4 +158,23 @@ Polymer({ ...@@ -104,4 +158,23 @@ Polymer({
showFontsPage_: function() { showFontsPage_: function() {
return this.currentRoute.subpage[0] == 'appearance-fonts'; return this.currentRoute.subpage[0] == 'appearance-fonts';
}, },
/**
* @param {number} percent The integer percentage of the page zoom.
* @private
*/
zoomPrefChanged_: function(percent) {
this.set('defaultZoomLevel_.value', percent);
},
/**
* @param {number} percent The integer percentage of the page zoom.
* @private
*/
zoomLevelChanged_: function(percent) {
// The |percent| may be undefined on startup.
if (percent === undefined)
return;
chrome.settingsPrivate.setDefaultZoomPercent(percent);
},
}); });
...@@ -20,6 +20,8 @@ ...@@ -20,6 +20,8 @@
'../../../../../third_party/polymer/v1_0/components-chromium/paper-behaviors/paper-ripple-behavior-extracted.js', '../../../../../third_party/polymer/v1_0/components-chromium/paper-behaviors/paper-ripple-behavior-extracted.js',
'../../../../../third_party/polymer/v1_0/components-chromium/paper-ripple/paper-ripple-extracted.js', '../../../../../third_party/polymer/v1_0/components-chromium/paper-ripple/paper-ripple-extracted.js',
'../../../../../third_party/polymer/v1_0/components-chromium/paper-slider/paper-slider-extracted.js', '../../../../../third_party/polymer/v1_0/components-chromium/paper-slider/paper-slider-extracted.js',
'../controls/settings_dropdown_menu.js',
'../prefs/pref_util.js'
], ],
'externs': [ 'externs': [
'../../../../../third_party/closure_compiler/externs/settings_private.js' '../../../../../third_party/closure_compiler/externs/settings_private.js'
...@@ -35,6 +37,8 @@ ...@@ -35,6 +37,8 @@
'../../../../../ui/webui/resources/js/compiled_resources.gyp:load_time_data', '../../../../../ui/webui/resources/js/compiled_resources.gyp:load_time_data',
'../../../../../ui/webui/resources/js/cr.js', '../../../../../ui/webui/resources/js/cr.js',
'../../../../../ui/webui/resources/js/i18n_behavior.js', '../../../../../ui/webui/resources/js/i18n_behavior.js',
'../controls/settings_dropdown_menu.js',
'../prefs/pref_util.js',
'../settings_page/settings_animated_pages.js' '../settings_page/settings_animated_pages.js'
], ],
'externs': [ 'externs': [
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
<span i18n-content="clearFollowingItemsFrom"></span> <span i18n-content="clearFollowingItemsFrom"></span>
<settings-dropdown-menu id="clearFrom" <settings-dropdown-menu id="clearFrom"
pref="{{prefs.browser.clear_data.time_period}}" pref="{{prefs.browser.clear_data.time_period}}"
menu-options="[[clearFromOptions_]]" disabled> menu-options="[[clearFromOptions_]]">
</settings-dropdown-menu> </settings-dropdown-menu>
<settings-checkbox id="browsingCheckbox" <settings-checkbox id="browsingCheckbox"
pref="{{prefs.browser.clear_data.browsing_history}}" pref="{{prefs.browser.clear_data.browsing_history}}"
......
...@@ -40,19 +40,17 @@ Polymer({ ...@@ -40,19 +40,17 @@ Polymer({
/** /**
* List of options for the dropdown menu. * List of options for the dropdown menu.
* The order of entries in this array matches the * @private {!DropdownMenuOptionList>}
* prefs.browser.clear_data.time_period.value enum.
* @private {!Array<!Array<number, string>>}
*/ */
clearFromOptions_: { clearFromOptions_: {
readOnly: true, readOnly: true,
type: Array, type: Array,
value: [ value: [
[0, loadTimeData.getString('clearDataHour')], {value: 0, name: loadTimeData.getString('clearDataHour')},
[1, loadTimeData.getString('clearDataDay')], {value: 1, name: loadTimeData.getString('clearDataDay')},
[2, loadTimeData.getString('clearDataWeek')], {value: 2, name: loadTimeData.getString('clearDataWeek')},
[3, loadTimeData.getString('clearData4Weeks')], {value: 3, name: loadTimeData.getString('clearData4Weeks')},
[4, loadTimeData.getString('clearDataEverything')], {value: 4, name: loadTimeData.getString('clearDataEverything')},
], ],
}, },
}, },
......
...@@ -7,10 +7,10 @@ ...@@ -7,10 +7,10 @@
'target_name': 'settings_checkbox', 'target_name': 'settings_checkbox',
'variables': { 'variables': {
'depends': [ 'depends': [
'../../../../../ui/webui/resources/js/compiled_resources.gyp:assert',
'../../../../../ui/webui/resources/js/compiled_resources.gyp:load_time_data',
'../../../../../ui/webui/resources/cr_elements/policy/cr_policy_indicator_behavior.js', '../../../../../ui/webui/resources/cr_elements/policy/cr_policy_indicator_behavior.js',
'../../../../../ui/webui/resources/cr_elements/policy/cr_policy_pref_behavior.js', '../../../../../ui/webui/resources/cr_elements/policy/cr_policy_pref_behavior.js',
'../../../../../ui/webui/resources/js/compiled_resources.gyp:assert',
'../../../../../ui/webui/resources/js/compiled_resources.gyp:load_time_data',
], ],
'externs': [ 'externs': [
'../../../../../third_party/closure_compiler/externs/settings_private.js' '../../../../../third_party/closure_compiler/externs/settings_private.js'
...@@ -38,10 +38,10 @@ ...@@ -38,10 +38,10 @@
'target_name': 'settings_input', 'target_name': 'settings_input',
'variables': { 'variables': {
'depends': [ 'depends': [
'../../../../../ui/webui/resources/js/compiled_resources.gyp:assert',
'../../../../../ui/webui/resources/js/compiled_resources.gyp:load_time_data',
'../../../../../ui/webui/resources/cr_elements/policy/cr_policy_indicator_behavior.js', '../../../../../ui/webui/resources/cr_elements/policy/cr_policy_indicator_behavior.js',
'../../../../../ui/webui/resources/cr_elements/policy/cr_policy_pref_behavior.js', '../../../../../ui/webui/resources/cr_elements/policy/cr_policy_pref_behavior.js',
'../../../../../ui/webui/resources/js/compiled_resources.gyp:assert',
'../../../../../ui/webui/resources/js/compiled_resources.gyp:load_time_data',
], ],
'externs': [ 'externs': [
'../../../../../third_party/closure_compiler/externs/settings_private.js' '../../../../../third_party/closure_compiler/externs/settings_private.js'
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
<paper-menu class="dropdown-content" selected="{{selected_}}" <paper-menu class="dropdown-content" selected="{{selected_}}"
attr-for-selected="data-value"> attr-for-selected="data-value">
<template is="dom-repeat" items="[[menuOptions]]"> <template is="dom-repeat" items="[[menuOptions]]">
<paper-item data-value$="[[item.0]]">[[item.1]]</paper-item> <paper-item data-value$="[[item.value]]">[[item.name]]</paper-item>
</template> </template>
<paper-item data-value$="[[notFoundValue_]]" <paper-item data-value$="[[notFoundValue_]]"
hidden$="[[!isSelectedNotFound_(selected_)]]"> hidden$="[[!isSelectedNotFound_(selected_)]]">
......
...@@ -2,14 +2,12 @@ ...@@ -2,14 +2,12 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
/** /**
* This tuple is made up of a (value, name, attribute). The value and name are * The |name| is shown in the gui. The |value| us use to set or compare with
* used by the dropdown menu. The attribute is optional 'user data' that is * the preference value.
* ignored by the dropdown menu.
* @typedef {{ * @typedef {{
* 0: (number|string), * name: string,
* 1: string, * value: (number|string)
* 2: (string|undefined)
* }} * }}
*/ */
var DropdownMenuOption; var DropdownMenuOption;
...@@ -40,7 +38,6 @@ Polymer({ ...@@ -40,7 +38,6 @@ Polymer({
/** /**
* List of options for the drop-down menu. * List of options for the drop-down menu.
* TODO(michaelpg): use named properties instead of indices.
* @type {DropdownMenuOptionList} * @type {DropdownMenuOptionList}
*/ */
menuOptions: { menuOptions: {
...@@ -139,7 +136,7 @@ Polymer({ ...@@ -139,7 +136,7 @@ Polymer({
return; return;
var prefValue = this.pref.value; var prefValue = this.pref.value;
var option = this.menuOptions.find(function(menuItem) { var option = this.menuOptions.find(function(menuItem) {
return menuItem[0] == prefValue; return menuItem.value == prefValue;
}); });
if (option == undefined) if (option == undefined)
this.selected_ = this.notFoundValue_; this.selected_ = this.notFoundValue_;
......
...@@ -37,8 +37,10 @@ cr.define('settings_dropdown_menu', function() { ...@@ -37,8 +37,10 @@ cr.define('settings_dropdown_menu', function() {
type: chrome.settingsPrivate.PrefType.NUMBER, type: chrome.settingsPrivate.PrefType.NUMBER,
value: 100, value: 100,
}; };
dropdown.menuOptions = [[100, 'Option 100'], [200, 'Option 200'], dropdown.menuOptions = [{value: 100, name: 'Option 100'},
[300, 'Option 300'], [400, 'Option 400']]; {value: 200, name: 'Option 200'},
{value: 300, name: 'Option 300'},
{value: 400, name: 'Option 400'}];
// IronSelectable uses a DOM observer, which uses a debouncer. // IronSelectable uses a DOM observer, which uses a debouncer.
Polymer.dom.flush(); Polymer.dom.flush();
...@@ -62,7 +64,10 @@ cr.define('settings_dropdown_menu', function() { ...@@ -62,7 +64,10 @@ cr.define('settings_dropdown_menu', function() {
value: 'c', value: 'c',
}; };
dropdown.menuOptions = dropdown.menuOptions =
[['a', 'AAA'], ['b', 'BBB'], ['c', 'CCC'], ['d', 'DDD']]; [{value: 'a', name: 'AAA'},
{value: 'b', name: 'BBB'},
{value: 'c', name: 'CCC'},
{value: 'd', name: 'DDD'}];
Polymer.dom.flush(); Polymer.dom.flush();
// Initially selected item. // Initially selected item.
...@@ -84,7 +89,10 @@ cr.define('settings_dropdown_menu', function() { ...@@ -84,7 +89,10 @@ cr.define('settings_dropdown_menu', function() {
value: 'f', value: 'f',
}; };
dropdown.menuOptions = dropdown.menuOptions =
[['a', 'AAA'], ['b', 'BBB'], ['c', 'CCC'], ['d', 'DDD']]; [{value: 'a', name: 'AAA'},
{value: 'b', name: 'BBB'},
{value: 'c', name: 'CCC'},
{value: 'd', name: 'DDD'}];
Polymer.dom.flush(); Polymer.dom.flush();
// "Custom" initially selected. // "Custom" initially selected.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment