1 | /* |
2 | Copyright - 2017 2023 - wwwouaiebe - Contact: https://www.ouaie.be/ |
3 | |
4 | This program is free software; |
5 | you can redistribute it and/or modify it under the terms of the |
6 | GNU General Public License as published by the Free Software Foundation; |
7 | either version 3 of the License, or any later version. |
8 | |
9 | This program is distributed in the hope that it will be useful, |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
12 | GNU General Public License for more details. |
13 | |
14 | You should have received a copy of the GNU General Public License |
15 | along with this program; if not, write to the Free Software |
16 | Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
17 | */ |
18 | /* |
19 | Changes: |
20 | - v4.0.0: |
21 | - created from v3.6.0 |
22 | Doc reviewed 202208 |
23 | */ |
24 | |
25 | import BaseControl from '../baseControl/BaseControl.js'; |
26 | import theHTMLElementsFactory from '../../core/uiLib/HTMLElementsFactory.js'; |
27 | import { ZERO } from '../../main/Constants.js'; |
28 | |
29 | /* ------------------------------------------------------------------------------------------------------------------------- */ |
30 | /** |
31 | This class is a generic control with a input element for text |
32 | */ |
33 | /* ------------------------------------------------------------------------------------------------------------------------- */ |
34 | |
35 | class NumberInputControl extends BaseControl { |
36 | |
37 | /** |
38 | The input HTMLElement |
39 | @type {HTMLElement} |
40 | */ |
41 | |
42 | #valueInput; |
43 | |
44 | /** |
45 | The constructor |
46 | @param {Object} options An object with the options ( beforeText, value, min, max, datasetName, afterText ) |
47 | */ |
48 | |
49 | constructor ( options ) { |
50 | super ( ); |
51 | theHTMLElementsFactory.create ( |
52 | 'text', |
53 | { |
54 | value : options?.beforeText || '' |
55 | }, |
56 | this.controlHTMLElement |
57 | ); |
58 | this.#valueInput = theHTMLElementsFactory.create ( |
59 | 'input', |
60 | { |
61 | type : 'number', |
62 | className : 'TravelNotes-NumberInputControl-NumberInput', |
63 | value : options?.value || ZERO, |
64 | min : options?.min || ZERO, |
65 | max : options?.max || Number.MAX_VALUE, |
66 | dataset : { Name : options?.datasetName || 'NumberInputControl' } |
67 | }, |
68 | this.controlHTMLElement |
69 | ); |
70 | theHTMLElementsFactory.create ( |
71 | 'text', |
72 | { |
73 | value : options?.afterText || '' |
74 | }, |
75 | this.controlHTMLElement |
76 | ); |
77 | } |
78 | |
79 | /** |
80 | The value in the control |
81 | @type {String} |
82 | */ |
83 | |
84 | get value ( ) { return Number.parseInt ( this.#valueInput.value ); } |
85 | |
86 | set value ( value ) { this.#valueInput.value = value; } |
87 | |
88 | } |
89 | |
90 | export default NumberInputControl; |
91 | |
92 | /* --- End of file --------------------------------------------------------------------------------------------------------- */ |
93 |