| // Copyright 2016 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import '//resources/cr_elements/cr_button/cr_button.js'; |
| import '/shared/settings/controls/cr_policy_pref_indicator.js'; |
| import '//resources/cr_elements/cr_shared_vars.css.js'; |
| |
| import {PolymerElement} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js'; |
| import {CrPolicyPrefMixin} from '/shared/settings/controls/cr_policy_pref_mixin.js'; |
| import {PrefControlMixin} from '/shared/settings/controls/pref_control_mixin.js'; |
| |
| import {getTemplate} from './controlled_button.html.js'; |
| |
| const ControlledButtonElementBase = |
| CrPolicyPrefMixin(PrefControlMixin(PolymerElement)); |
| |
| export class ControlledButtonElement extends ControlledButtonElementBase { |
| static get is() { |
| return 'controlled-button'; |
| } |
| |
| static get template() { |
| return getTemplate(); |
| } |
| |
| static get properties() { |
| return { |
| endJustified: { |
| type: Boolean, |
| value: false, |
| reflectToAttribute: true, |
| }, |
| |
| label: String, |
| |
| disabled: { |
| type: Boolean, |
| value: false, |
| reflectToAttribute: true, |
| }, |
| |
| actionClass_: {type: String, value: ''}, |
| |
| enforced_: { |
| type: Boolean, |
| computed: 'isPrefEnforced(pref.*)', |
| reflectToAttribute: true, |
| }, |
| }; |
| } |
| |
| endJustified: boolean; |
| label: string; |
| disabled: boolean; |
| private actionClass_: string; |
| private enforced_: boolean; |
| |
| override connectedCallback() { |
| super.connectedCallback(); |
| |
| if (this.classList.contains('action-button')) { |
| this.actionClass_ = 'action-button'; |
| } |
| } |
| |
| /** Focus on the inner cr-button. */ |
| override focus() { |
| this.shadowRoot!.querySelector('cr-button')!.focus(); |
| } |
| |
| private onIndicatorClick_(e: Event) { |
| // Disallow <controlled-button on-click="..."> when controlled. |
| e.preventDefault(); |
| e.stopPropagation(); |
| } |
| |
| private buttonEnabled_(enforced: boolean, disabled: boolean): boolean { |
| return !enforced && !disabled; |
| } |
| } |
| |
| declare global { |
| interface HTMLElementTagNameMap { |
| 'controlled-button': ControlledButtonElement; |
| } |
| } |
| |
| customElements.define(ControlledButtonElement.is, ControlledButtonElement); |