| // Copyright 2024 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| import './value_display.js'; |
| import './mojo_timestamp.js'; |
| |
| import {CustomElement} from 'chrome://resources/js/custom_element.js'; |
| import type {Value} from 'chrome://resources/mojo/mojo/public/mojom/base/values.mojom-webui.js'; |
| |
| import {getTemplate} from './pref_display.html.js'; |
| import {defaultLogicalFn} from './value_display.js'; |
| |
| export class PrefDisplayElement extends CustomElement { |
| static override get template() { |
| return getTemplate(); |
| } |
| |
| getElement(key: string) { |
| return this.shadowRoot!.querySelector<HTMLElement>(`.id-${key}`)!; |
| } |
| |
| configure( |
| prefName: string, value: Value, |
| valueLogicalFn: (v: Value) => HTMLElement | |
| undefined = defaultLogicalFn) { |
| const nameElem = this.getElement('pref-name'); |
| nameElem.textContent = prefName; |
| |
| // Hide the name of the pref from its usual position if the value of this |
| // pref is a list or a dictionary |
| if (!!value.dictionaryValue || !!value.listValue) { |
| const nameWrapperElem = this.getElement('pref-label'); |
| nameWrapperElem.hidden = true; |
| } |
| |
| const valueElem = this.getElement('pref-value'); |
| const v = document.createElement('value-display'); |
| v.configure(value, valueLogicalFn, prefName); |
| valueElem.replaceChildren(v); |
| } |
| } |
| |
| declare global { |
| interface HTMLElementTagNameMap { |
| 'pref-display': PrefDisplayElement; |
| } |
| } |
| |
| customElements.define('pref-display', PrefDisplayElement); |