File : controls/numberInputControl/NumberInputControl.js

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