/* This file is part of »dali«. Copyright 2025 'kcf' »dali« is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. »dali« is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with »dali«. If not, see . */ namespace _dali.widgets { /** */ export class class_widget_special_number_input implements lib_plankton.zoo_widget.interface_widget { /** */ private action_change : ((int) => Promise); /** */ private label : (null | string); /** */ private minimum : (null | int); /** */ private maximum : (null | int); /** */ private value : int; /** */ public constructor( { "label": label = null, "minimum": minimum = null, "maximum": maximum = null, "initial_value": initial_value = 0, "action_change": action_change = ((value) => Promise.resolve(undefined)), } : { label ?: (null | string); minimum ?: (null | int); maximum ?: (null | int); initial_value ?: int; action_change ?: ((int) => Promise); } = { } ) { this.label = label; this.minimum = minimum; this.maximum = maximum; this.value = initial_value; this.action_change = action_change; } /** * [implementation] */ public async load( target_element : HTMLElement ) : Promise { const dom_dummy = document.createElement("div"); dom_dummy.innerHTML = await _dali.helpers.template_coin( "widget-special_number_input", "main", { "label": this.label, } ); const dom_input : HTMLInputElement = (dom_dummy.querySelector(".widget-special_number_input-input") as HTMLInputElement); // listeners { dom_input.addEventListener( "change", () => { this.value = parseInt(dom_input.value); if ( ((this.minimum === null) || (this.value >= this.minimum)) && ((this.maximum === null) || (this.value <= this.maximum)) ) { this.action_change(this.value); } else { // do nothing } } ); dom_dummy.querySelector(".widget-special_number_input-prev").addEventListener( "click", () => { if ((this.minimum === null) || (this.value > this.minimum)) { this.value -= 1; dom_input.value = this.value.toFixed(0); this.action_change(this.value); } else { // do nothing } } ); dom_dummy.querySelector(".widget-special_number_input-next").addEventListener( "click", () => { if ((this.maximum === null) || (this.value < this.maximum)) { this.value += 1; dom_input.value = this.value.toFixed(0); this.action_change(this.value); } else { // do nothing } } ); } dom_input.value = this.value.toFixed(0); target_element.appendChild(dom_dummy.querySelector(".widget-special_number_input")); } } }