| // Copyright 2015 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| /** |
| * @fileoverview |
| * 'settings-section' shows a paper material themed section with a header |
| * which shows its page title. |
| * |
| * The section can expand vertically to fill its container's padding edge. |
| * |
| * Example: |
| * |
| * <settings-section page-title="[[pageTitle]]" section="privacy"> |
| * <!-- Insert your section controls here --> |
| * </settings-section> |
| */ |
| |
| import '//resources/cr_elements/cr_icon_button/cr_icon_button.js'; |
| import '//resources/cr_elements/cr_shared_vars.css.js'; |
| |
| import {PolymerElement} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js'; |
| |
| import {getTemplate} from './settings_section.html.js'; |
| |
| export class SettingsSectionElement extends PolymerElement { |
| static get is() { |
| return 'settings-section'; |
| } |
| |
| static get template() { |
| return getTemplate(); |
| } |
| |
| static get properties() { |
| return { |
| /** |
| * The section name should match a name specified in route.js. The |
| * MainPageBeMixin will expand this section if this section name matches |
| * currentRoute.section. |
| */ |
| section: String, |
| |
| /** |
| * Title for the section header. Initialize so we can use the |
| * getTitleHiddenStatus_ method for accessibility. |
| */ |
| pageTitle: { |
| type: String, |
| value: '', |
| }, |
| |
| /** |
| * A CSS attribute used for temporarily hiding a SETTINGS-SECTION for the |
| * purposes of searching. |
| */ |
| hiddenBySearch: { |
| type: Boolean, |
| value: false, |
| reflectToAttribute: true, |
| }, |
| |
| /** |
| * When this attribute is enabled, a send feedback button will be shown |
| * that emits a 'send-feedback' event. |
| */ |
| showSendFeedbackButton: { |
| type: Boolean, |
| value: false, |
| }, |
| }; |
| } |
| |
| section: string; |
| pageTitle: string; |
| hiddenBySearch: boolean; |
| showSendFeedbackButton: boolean; |
| |
| /** |
| * Get the value to which to set the aria-hidden attribute of the section |
| * heading. |
| * @return A return value of false will not add aria-hidden while aria-hidden |
| * requires a string of 'true' to be hidden as per aria specs. This |
| * function ensures we have the right return type. |
| */ |
| private getTitleHiddenStatus_(): boolean|string { |
| return this.pageTitle ? false : 'true'; |
| } |
| |
| override focus() { |
| this.shadowRoot!.querySelector<HTMLElement>('.title')!.focus(); |
| } |
| |
| private onSendFeedbackClick_() { |
| this.dispatchEvent( |
| new CustomEvent('send-feedback', {bubbles: true, composed: true})); |
| } |
| } |
| |
| declare global { |
| interface HTMLElementTagNameMap { |
| 'settings-section': SettingsSectionElement; |
| } |
| } |
| |
| customElements.define(SettingsSectionElement.is, SettingsSectionElement); |