@@ -89,38 +89,42 @@ export class SliderWebcomponent extends BaseCustomWebComponentConstructorAppend
89
89
90
90
<!-- Slider -->
91
91
< div class ="range-input ">
92
- < input type ="range " class ="min-range " min =" 0 " max =" 10000 " value =" 2500 " step ="1 ">
93
- < input type ="range " class ="max-range " min =" 0 " max =" 10000 " value =" 7500 " step ="1 ">
92
+ < input type ="range " class ="min-range " step ="1 ">
93
+ < input type ="range " class ="max-range " step ="1 ">
94
94
</ div >
95
95
96
96
< div class ="inputs-wrapper ">
97
- < div class ="input-field ">
98
- < input type ="number " class ="min-input " value ="2500 ">
99
- </ div >
100
- < div class ="input-field ">
101
- < input type ="number " class ="max-input " value ="7500 ">
97
+ < div class ="input-field ">
98
+ < input type ="number " class ="min-input ">
99
+ </ div >
100
+ < div class ="input-field ">
101
+ < input type ="number " class ="max-input ">
102
+ </ div >
102
103
</ div >
103
- </ div >
104
104
105
105
` ;
106
106
107
107
public static readonly is = 'node-projects-slider' ;
108
108
109
109
public static properties = {
110
+ valueMin : Number ,
111
+ valueMax : Number ,
110
112
min : Number ,
111
113
max : Number
112
114
}
113
115
114
- static observedAttributes = [ 'value-min' , 'value-max' ] ;
116
+ static observedAttributes = [ 'value-min' , 'value-max' , 'min' , 'max' ] ;
115
117
116
- private _ValueMin : number = 0 ;
118
+ private _valueMin : number = 0 ;
117
119
private _valueMax : number = 0 ;
118
- private _inputValues : HTMLInputElement [ ] ;
119
- private _rangeInputvalues : HTMLInputElement [ ] ;
120
+ private _min : number = 0 ;
121
+ private _max : number = 0 ;
122
+ private _inputs : HTMLInputElement [ ] ;
123
+ private _rangeInputs : HTMLInputElement [ ] ;
120
124
private _ready : Boolean = false ;
121
125
122
126
public get valueMin ( ) {
123
- return this . _ValueMin ;
127
+ return this . _valueMin ;
124
128
}
125
129
public set valueMin ( value ) {
126
130
this . setAttribute ( 'value-min' , value . toString ( ) ) ;
@@ -133,17 +137,39 @@ export class SliderWebcomponent extends BaseCustomWebComponentConstructorAppend
133
137
this . setAttribute ( 'value-max' , value . toString ( ) ) ;
134
138
}
135
139
140
+ public get min ( ) {
141
+ return this . _min ;
142
+ }
143
+ public set min ( value ) {
144
+ this . setAttribute ( 'min' , value . toString ( ) ) ;
145
+ }
146
+
147
+ public get max ( ) {
148
+ return this . _max ;
149
+ }
150
+ public set max ( value ) {
151
+ this . setAttribute ( 'max' , value . toString ( ) ) ;
152
+ }
153
+
136
154
attributeChangedCallback ( name : string , oldValue : string , newValue : string ) {
137
- if ( this . _ready ) {
155
+ // if (this._ready) {
138
156
if ( name == "value-min" ) {
139
- this . _ValueMin = Number ( newValue ) ;
157
+ this . _valueMin = Number ( newValue ) ;
140
158
this . _valueMinChanged ( ) ;
141
159
}
142
160
if ( name === "value-max" ) {
143
161
this . _valueMax = Number ( newValue ) ;
144
162
this . _valueMaxChanged ( ) ;
145
163
}
146
- }
164
+ if ( name == "min" ) {
165
+ this . _min = Number ( newValue ) ;
166
+ this . _minChanged ( ) ;
167
+ }
168
+ if ( name === "max" ) {
169
+ this . _max = Number ( newValue ) ;
170
+ this . _maxChanged ( ) ;
171
+ }
172
+ //}
147
173
}
148
174
149
175
constructor ( ) {
@@ -152,8 +178,8 @@ export class SliderWebcomponent extends BaseCustomWebComponentConstructorAppend
152
178
}
153
179
154
180
connectedCallback ( ) {
155
- this . _inputValues = Array . from ( this . _getDomElements ( ".inputs-wrapper input" ) ) ;
156
- this . _rangeInputvalues = Array . from ( this . _getDomElements ( ".range-input input" ) ) ;
181
+ this . _inputs = Array . from ( this . _getDomElements ( ".inputs-wrapper input" ) ) ;
182
+ this . _rangeInputs = Array . from ( this . _getDomElements ( ".range-input input" ) ) ;
157
183
}
158
184
159
185
disconnectedCallback ( ) { }
@@ -165,20 +191,20 @@ export class SliderWebcomponent extends BaseCustomWebComponentConstructorAppend
165
191
166
192
let valuesGap = 500 ;
167
193
168
- for ( let i = 0 ; i < this . _inputValues . length ; i ++ ) {
169
- this . _inputValues [ i ] . addEventListener ( "blur" , this . _handleInputChange . bind ( this ) ) ;
170
- this . _inputValues [ i ] . addEventListener ( "keydown" , ( e ) => {
194
+ for ( let i = 0 ; i < this . _inputs . length ; i ++ ) {
195
+ this . _inputs [ i ] . addEventListener ( "blur" , this . _handleInputChange . bind ( this ) ) ;
196
+ this . _inputs [ i ] . addEventListener ( "keydown" , ( e ) => {
171
197
if ( e . key === "Enter" ) {
172
198
this . _handleInputChange ( e ) ;
173
199
}
174
200
} ) ;
175
201
}
176
202
177
203
// Add event listeners to range input elements
178
- for ( let i = 0 ; i < this . _rangeInputvalues . length ; i ++ ) {
179
- this . _rangeInputvalues [ i ] . addEventListener ( "input" , e => {
180
- let minVal = parseInt ( this . _rangeInputvalues [ 0 ] . value ) ;
181
- let maxVal = parseInt ( this . _rangeInputvalues [ 1 ] . value ) ;
204
+ for ( let i = 0 ; i < this . _rangeInputs . length ; i ++ ) {
205
+ this . _rangeInputs [ i ] . addEventListener ( "input" , e => {
206
+ let minVal = parseInt ( this . _rangeInputs [ 0 ] . value ) ;
207
+ let maxVal = parseInt ( this . _rangeInputs [ 1 ] . value ) ;
182
208
183
209
let diff = maxVal - minVal ;
184
210
@@ -187,62 +213,81 @@ export class SliderWebcomponent extends BaseCustomWebComponentConstructorAppend
187
213
188
214
// Check if the input is the min range input
189
215
if ( ( e . target as HTMLInputElement ) . className === "min-range" ) {
190
- this . _rangeInputvalues [ 0 ] . value = ( maxVal - valuesGap ) . toString ( ) ;
216
+ this . _rangeInputs [ 0 ] . value = ( maxVal - valuesGap ) . toString ( ) ;
191
217
} else {
192
- this . _rangeInputvalues [ 1 ] . value = ( minVal + valuesGap ) . toString ( ) ;
218
+ this . _rangeInputs [ 1 ] . value = ( minVal + valuesGap ) . toString ( ) ;
193
219
}
194
220
} else {
195
221
196
222
// Update input values and range progress
197
- this . _inputValues [ 0 ] . value = minVal . toString ( ) ;
198
- this . _inputValues [ 1 ] . value = maxVal . toString ( ) ;
199
- rangevalue . style . left = `${ ( minVal / parseInt ( this . _rangeInputvalues [ 0 ] . max ) ) * 100 } %` ;
200
- rangevalue . style . right = `${ 100 - ( maxVal / parseInt ( this . _rangeInputvalues [ 1 ] . max ) ) * 100 } %` ;
223
+ this . _inputs [ 0 ] . value = minVal . toString ( ) ;
224
+ this . _inputs [ 1 ] . value = maxVal . toString ( ) ;
225
+ rangevalue . style . left = `${ ( minVal / parseInt ( this . _rangeInputs [ 0 ] . max ) ) * 100 } %` ;
226
+ rangevalue . style . right = `${ 100 - ( maxVal / parseInt ( this . _rangeInputs [ 1 ] . max ) ) * 100 } %` ;
201
227
}
202
228
} ) ;
203
229
}
204
230
205
231
this . _ready = true ;
232
+
233
+ this . _updateInputValues ( ) ;
234
+ this . _updateRangeInputsMinMax ( ) ;
235
+ this . _updateSliderPosition ( this . valueMin , parseInt ( this . _rangeInputs [ 0 ] . max ) , true ) ;
236
+ this . _updateSliderPosition ( this . valueMax , parseInt ( this . _rangeInputs [ 1 ] . max ) , false ) ;
237
+ }
238
+
239
+ private _updateInputValues ( ) {
240
+ this . _inputs [ 0 ] . value = this . _valueMin . toString ( ) ;
241
+ this . _inputs [ 1 ] . value = this . _valueMax . toString ( ) ;
242
+ }
243
+
244
+ private _updateRangeInputsMinMax ( ) {
245
+ this . _rangeInputs . forEach ( rangeInput => {
246
+ rangeInput . min = this . _min . toString ( ) ;
247
+ rangeInput . max = this . _max . toString ( ) ;
248
+ } ) ;
249
+ this . _rangeInputs [ 0 ] . value = this . valueMin . toString ( ) ;
250
+ this . _rangeInputs [ 1 ] . value = this . valueMax . toString ( ) ;
206
251
}
207
252
208
253
private _handleInputChange ( e : Event ) {
209
- const inputIndex = this . _inputValues . indexOf ( e . target as HTMLInputElement ) ;
254
+ const inputIndex = this . _inputs . indexOf ( e . target as HTMLInputElement ) ;
210
255
if ( inputIndex === - 1 ) return ;
211
256
212
- let minp = parseInt ( this . _inputValues [ 0 ] . value ) ;
213
- let maxp = parseInt ( this . _inputValues [ 1 ] . value ) ;
257
+ let minp = parseInt ( this . _inputs [ 0 ] . value ) ;
258
+ let maxp = parseInt ( this . _inputs [ 1 ] . value ) ;
214
259
let diff = maxp - minp ;
215
260
216
- if ( minp < 0 ) {
217
- alert ( " Minimum value cannot be less than 0" ) ;
218
- this . _inputValues [ 0 ] . value = '0' ;
261
+ if ( minp < this . _min ) {
262
+ alert ( `{ Minimum value cannot be less than $this.min.toString()}` ) ;
263
+ this . _inputs [ 0 ] . value = this . _min . toString ( ) ;
219
264
minp = 0 ;
220
265
}
221
266
222
- if ( maxp > 10000 ) {
223
- alert ( " Maximum value cannot be greater than 10000" ) ;
224
- this . _inputValues [ 1 ] . value = '10000' ;
225
- maxp = 10000 ;
267
+ if ( maxp > this . _max ) {
268
+ alert ( `{ Maximum value cannot be greater than $this.max.toString()}` ) ;
269
+ this . _inputs [ 1 ] . value = this . _max . toString ( ) ;
270
+ maxp = this . _max ;
226
271
}
227
272
228
273
if ( minp > maxp - diff ) {
229
- this . _inputValues [ 0 ] . value = ( maxp - diff ) . toString ( ) ;
274
+ this . _inputs [ 0 ] . value = ( maxp - diff ) . toString ( ) ;
230
275
minp = maxp - diff ;
231
276
232
- if ( minp < 0 ) {
233
- this . _inputValues [ 0 ] . value = '0' ;
234
- minp = 0 ;
277
+ if ( minp < this . _min ) {
278
+ this . _inputs [ 0 ] . value = this . _min . toString ( ) ;
279
+ minp = this . _min ;
235
280
}
236
281
}
237
282
238
- if ( diff >= 500 && maxp <= parseInt ( this . _rangeInputvalues [ 1 ] . max ) ) {
283
+ if ( diff >= 500 && maxp <= parseInt ( this . _rangeInputs [ 1 ] . max ) ) {
239
284
if ( inputIndex === 0 ) {
240
- this . _rangeInputvalues [ 0 ] . value = minp . toString ( ) ;
241
- let value1 = parseInt ( this . _rangeInputvalues [ 0 ] . max ) ;
285
+ this . _rangeInputs [ 0 ] . value = minp . toString ( ) ;
286
+ let value1 = parseInt ( this . _rangeInputs [ 0 ] . max ) ;
242
287
this . _updateSliderPosition ( minp , value1 , true ) ;
243
288
} else {
244
- this . _rangeInputvalues [ 1 ] . value = maxp . toString ( ) ;
245
- let value2 = parseInt ( this . _rangeInputvalues [ 1 ] . max ) ;
289
+ this . _rangeInputs [ 1 ] . value = maxp . toString ( ) ;
290
+ let value2 = parseInt ( this . _rangeInputs [ 1 ] . max ) ;
246
291
this . _updateSliderPosition ( maxp , value2 , false ) ;
247
292
}
248
293
}
@@ -258,13 +303,25 @@ export class SliderWebcomponent extends BaseCustomWebComponentConstructorAppend
258
303
}
259
304
260
305
private _valueMinChanged ( ) {
261
- this . _inputValues [ 0 ] . value = this . _ValueMin . toString ( ) ;
262
- this . _inputValues [ 0 ] . dispatchEvent ( new Event ( 'blur' , { bubbles : true } ) ) ;
306
+ if ( ! this . _ready ) return ;
307
+ this . _inputs [ 0 ] . value = this . _valueMin . toString ( ) ;
308
+ this . _inputs [ 0 ] . dispatchEvent ( new Event ( 'blur' , { bubbles : true } ) ) ;
263
309
}
264
310
265
311
private _valueMaxChanged ( ) {
266
- this . _inputValues [ 1 ] . value = this . _valueMax . toString ( ) ;
267
- this . _inputValues [ 1 ] . dispatchEvent ( new Event ( 'blur' , { bubbles : true } ) ) ;
312
+ if ( ! this . _ready ) return ;
313
+ this . _inputs [ 1 ] . value = this . _valueMax . toString ( ) ;
314
+ this . _inputs [ 1 ] . dispatchEvent ( new Event ( 'blur' , { bubbles : true } ) ) ;
315
+ }
316
+
317
+ private _minChanged ( ) {
318
+ if ( ! this . _ready ) return ;
319
+ this . _updateRangeInputsMinMax ( ) ;
320
+ }
321
+
322
+ private _maxChanged ( ) {
323
+ if ( ! this . _ready ) return ;
324
+ this . _updateRangeInputsMinMax ( ) ;
268
325
}
269
326
}
270
327
0 commit comments