Elim cr-checkbox
[chromium-blink-merge.git] / chrome / browser / resources / settings / checkbox / checkbox.js
blob834e856aab2fff01141e8682307b308f685ff926
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 /**
6  * @fileoverview
7  * `cr-settings-checkbox` is a checkbox that controls a supplied preference.
8  *
9  * Example:
10  *      <cr-settings-checkbox pref="{{prefs.settings.enableFoo}}"
11  *          label="Enable foo setting." subLabel="(bar also)">
12  *      </cr-settings-checkbox>
13  *
14  * @element cr-settings-checkbox
15  */
16 Polymer({
17   is: 'cr-settings-checkbox',
19   properties: {
20     /**
21      * The boolean preference object to control.
22      * @type {?chrome.settingsPrivate.PrefObject}
23      */
24     pref: {
25       type: Object,
26       notify: true,
27     },
29     /** Whether the checkbox should represent the inverted value. */
30     inverted: {
31       type: Boolean,
32       value: false,
33     },
35     /** Whether the checkbox is checked. */
36     checked: {
37       type: Boolean,
38       value: false,
39       notify: true,
40       observer: 'checkedChanged_',
41       reflectToAttribute: true
42     },
44     /** Disabled property for the element. */
45     disabled: {
46       type: Boolean,
47       value: false,
48       notify: true,
49       reflectToAttribute: true
50     },
52     /** Checkbox label. */
53     label: {
54       type: String,
55       value: '',
56     },
58     /** Additional sub-label for the checkbox. */
59     subLabel: {
60       type: String,
61       value: '',
62     },
63   },
65   observers: [
66     'prefValueChanged_(pref.value)'
67   ],
69   /** @override */
70   ready: function() {
71     this.$.events.forward(this.$.checkbox, ['change']);
72   },
74   /**
75    * Polymer observer for pref.value.
76    * @param {*} prefValue
77    * @private
78    */
79   prefValueChanged_: function(prefValue) {
80     this.checked = this.getNewValue_(prefValue);
81   },
83   /**
84    * Polymer observer for checked.
85    * @private
86    */
87   checkedChanged_: function() {
88     this.set('pref.value', this.getNewValue_(this.checked));
89   },
91   /**
92    * @param {*} value
93    * @return {boolean} The value as a boolean, inverted if |inverted| is true.
94    * @private
95    */
96   getNewValue_: function(value) {
97     return this.inverted ? !value : !!value;
98   },
100   /**
101    * @param {boolean} disabled
102    * @param {?chrome.settingsPrivate.PrefObject} pref
103    * @return {boolean} Whether the checkbox should be disabled.
104    * @private
105    */
106   checkboxDisabled_: function(disabled, pref) {
107     return disabled || (!!pref &&
108                         pref.policyEnforcement ==
109                             chrome.settingsPrivate.PolicyEnforcement.ENFORCED);
110   },