"use strict"; // Display text component Toolkit.Label = class Label extends Toolkit.Component { // Object constructor constructor(application, options) { super(application, options&&options.label ? "label" : "div", options); options = options || {}; // Configure instance fields this.focusable = "focusable" in options ? !!options.focusable : false; this.localized = "localized" in options ? !!options.localized : false; this.text = options.text || ""; // Configure element this.element.style.cursor = "default"; this.element.style.userSelect = "none"; // Configure properties this.setFocusable(this.focusable); this.setText (this.text); if (this.localized) this.application.addComponent(this); } ///////////////////////////// Public Methods ////////////////////////////// // Request focus on the appropriate element focus() { if (this.focusable) this.element.focus(); } // Retrieve the label's display text getText() { return this.text; } // Determine whether the component is focusable isFocusable() { return this.focusable; } // Specify the label's display text setText(text) { this.text = text || ""; this.localize(); } // Specify whether the component is focusable setFocusable(focusable) { this.focusable = focusable = !!focusable; if (focusable) { this.element.setAttribute("tabindex", "0"); this.localized && this.application && this.application.addComponent(this); } else { this.element.removeAttribute("aria-label"); this.element.removeAttribute("tabindex"); this.localized && this.application && this.application.removeComponent(this); } } ///////////////////////////// Package Methods ///////////////////////////// // Update display text with localized strings localize() { let text = this.text; if (this.localized && this.application) text = this.application.translate(text, this); this.element.innerText = text; } };