@schukai/monster 3.96.0 → 3.96.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/package.json +1 -1
- package/source/components/content/copy.mjs +1 -1
- package/source/components/datatable/dataset.mjs +7 -7
- package/source/components/datatable/datasource/rest.mjs +3 -3
- package/source/components/datatable/pagination.mjs +1 -1
- package/source/components/form/api-bar.mjs +1 -1
- package/source/components/form/api-button.mjs +1 -1
- package/source/components/form/button-bar.mjs +1 -1
- package/source/components/form/button.mjs +2 -2
- package/source/components/form/confirm-button.mjs +1 -1
- package/source/components/form/form.mjs +7 -5
- package/source/components/form/select.mjs +2014 -2006
- package/source/components/form/style/field-set.pcss +9 -0
- package/source/components/form/style/toggle-switch.pcss +3 -0
- package/source/components/form/stylesheet/field-set.mjs +7 -14
- package/source/components/form/stylesheet/toggle-switch.mjs +7 -14
- package/source/components/form/toggle-switch.mjs +386 -330
- package/source/components/layout/tabs.mjs +3 -3
- package/source/components/layout/width-toggle.mjs +1 -1
- package/source/components/navigation/table-of-content.mjs +1 -1
- package/source/components/notify/message.mjs +1 -1
- package/source/components/notify/notify.mjs +2 -2
- package/source/components/state/log.mjs +1 -1
- package/source/components/state/state.mjs +1 -1
- package/source/components/style/theme.css +4 -4
- package/source/dom/constants.mjs +8 -5
- package/source/dom/updater.mjs +3 -6
- package/test/cases/components/form/toggle-switch.mjs +80 -65
@@ -12,26 +12,24 @@
|
|
12
12
|
* SPDX-License-Identifier: AGPL-3.0
|
13
13
|
*/
|
14
14
|
|
15
|
-
import {
|
16
|
-
import {
|
17
|
-
import {
|
18
|
-
import {
|
19
|
-
import { ProxyObserver } from "../../types/proxyobserver.mjs";
|
15
|
+
import {instanceSymbol, internalSymbol} from "../../constants.mjs";
|
16
|
+
import {CustomControl} from "../../dom/customcontrol.mjs";
|
17
|
+
import {Observer} from "../../types/observer.mjs";
|
18
|
+
import {ProxyObserver} from "../../types/proxyobserver.mjs";
|
20
19
|
|
21
|
-
import {
|
20
|
+
import {addAttributeToken} from "../../dom/attributes.mjs";
|
22
21
|
import {
|
23
|
-
|
24
|
-
|
25
|
-
|
22
|
+
assembleMethodSymbol,
|
23
|
+
registerCustomElement,
|
24
|
+
updaterTransformerMethodsSymbol,
|
26
25
|
} from "../../dom/customelement.mjs";
|
27
|
-
import { isObject
|
28
|
-
import {
|
29
|
-
import {
|
30
|
-
|
31
|
-
|
32
|
-
} from "../../dom/constants.mjs";
|
26
|
+
import {isFunction, isObject} from "../../types/is.mjs";
|
27
|
+
import {ToggleSwitchStyleSheet} from "./stylesheet/toggle-switch.mjs";
|
28
|
+
import {ATTRIBUTE_ERRORMESSAGE, ATTRIBUTE_ROLE,} from "../../dom/constants.mjs";
|
29
|
+
import {getWindow} from "../../dom/util.mjs";
|
30
|
+
import {fireEvent} from "../../dom/events.mjs";
|
33
31
|
|
34
|
-
export {
|
32
|
+
export {ToggleSwitch};
|
35
33
|
|
36
34
|
/**
|
37
35
|
* @private
|
@@ -54,7 +52,7 @@ export const STATE_OFF = "off";
|
|
54
52
|
*
|
55
53
|
* @fragments /fragments/components/form/toggle-switch
|
56
54
|
*
|
57
|
-
* @example /examples/components/form/toggle-switch-simple
|
55
|
+
* @example /examples/components/form/toggle-switch-simple Simple example
|
58
56
|
*
|
59
57
|
* @since 3.57.0
|
60
58
|
* @copyright schukai GmbH
|
@@ -65,336 +63,374 @@ export const STATE_OFF = "off";
|
|
65
63
|
* @fires monster-changed
|
66
64
|
*/
|
67
65
|
class ToggleSwitch extends CustomControl {
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
66
|
+
/**
|
67
|
+
* To set the options via the HTML tag, the attribute `data-monster-options` must be used.
|
68
|
+
* @see {@link https://monsterjs.org/en/doc/#configurate-a-monster-control}
|
69
|
+
*
|
70
|
+
* The individual configuration values can be found in the table.
|
71
|
+
*
|
72
|
+
* @property {string} value=current value of the element
|
73
|
+
* @property {Boolean} disabled=disabled=false Disabled state
|
74
|
+
* @property {Object} classes
|
75
|
+
* @property {string} classes.on=specifies the class for the on state.
|
76
|
+
* @property {string} classes.off=specifies the class for the off state.
|
77
|
+
* @property {Object} values
|
78
|
+
* @property {string} values.off=specifies the value of the element if it is not selected
|
79
|
+
* @property {Object} labels
|
80
|
+
* @property {string} labels.on=specifies the label for the on state.
|
81
|
+
* @property {string} labels.off=specifies the label for the off state.
|
82
|
+
* @property {string} actions
|
83
|
+
* @property {string} actions.on=specifies the action for the on state.
|
84
|
+
* @property {string} actions.off=specifies the action for the off state.
|
85
|
+
* @property {Object} templates
|
86
|
+
* @property {string} templates.main the main template used by the control.
|
87
|
+
*/
|
88
|
+
get defaults() {
|
89
|
+
return Object.assign({}, super.defaults, {
|
90
|
+
value: null,
|
91
|
+
disabled: false,
|
92
|
+
classes: {
|
93
|
+
on: "monster-theme-on",
|
94
|
+
off: "monster-theme-off",
|
95
|
+
handle: "monster-theme-primary-1",
|
96
|
+
error: "monster-theme-error-1",
|
97
|
+
},
|
98
|
+
values: {
|
99
|
+
on: "on",
|
100
|
+
off: "off",
|
101
|
+
},
|
102
|
+
labels: {
|
103
|
+
toggleSwitchOn: "✔",
|
104
|
+
toggleSwitchOff: "✖",
|
105
|
+
},
|
106
|
+
templates: {
|
107
|
+
main: getTemplate(),
|
108
|
+
},
|
109
|
+
actions: {
|
110
|
+
on: () => {
|
111
|
+
},
|
112
|
+
off: () => {
|
113
|
+
},
|
114
|
+
},
|
115
|
+
});
|
116
|
+
}
|
117
|
+
|
118
|
+
/**
|
119
|
+
* @return {void}
|
120
|
+
*/
|
121
|
+
[assembleMethodSymbol]() {
|
122
|
+
const self = this;
|
123
|
+
super[assembleMethodSymbol]();
|
124
|
+
|
125
|
+
initControlReferences.call(this);
|
126
|
+
initEventHandler.call(this);
|
127
|
+
|
128
|
+
getWindow().requestAnimationFrame(() => {
|
129
|
+
|
130
|
+
/**
|
131
|
+
* init value to off
|
132
|
+
* if the value was not defined before inserting it into the HTML
|
133
|
+
*/
|
134
|
+
if (self.getOption("value") === null) {
|
135
|
+
self.setOption("value", self.getOption("values.off"));
|
136
|
+
}
|
137
|
+
|
138
|
+
/**
|
139
|
+
* value from attribute
|
140
|
+
*/
|
141
|
+
if (self.hasAttribute("value")) {
|
142
|
+
self.setOption("value", self.getAttribute("value"));
|
143
|
+
}
|
144
|
+
|
145
|
+
/**
|
146
|
+
* validate value
|
147
|
+
*/
|
148
|
+
validateAndSetValue.call(self);
|
149
|
+
|
150
|
+
// this state is a getter
|
151
|
+
if (this.state === STATE_ON) {
|
152
|
+
toggleOn.call(self);
|
153
|
+
} else {
|
154
|
+
toggleOff.call(self);
|
155
|
+
}
|
156
|
+
|
157
|
+
});
|
158
|
+
|
159
|
+
}
|
160
|
+
|
161
|
+
/**
|
162
|
+
* updater transformer methods for pipe
|
163
|
+
*
|
164
|
+
* @return {function}
|
165
|
+
*/
|
166
|
+
[updaterTransformerMethodsSymbol]() {
|
167
|
+
return {
|
168
|
+
"state-callback": (Wert) => {
|
169
|
+
return this.state;
|
170
|
+
},
|
171
|
+
};
|
172
|
+
}
|
173
|
+
|
174
|
+
/**
|
175
|
+
* @return [CSSStyleSheet]
|
176
|
+
*/
|
177
|
+
static getCSSStyleSheet() {
|
178
|
+
return [ToggleSwitchStyleSheet];
|
179
|
+
}
|
180
|
+
|
181
|
+
/**
|
182
|
+
* toggle switch
|
183
|
+
*
|
184
|
+
* ```
|
185
|
+
* e = document.querySelector('monster-toggle-switch');
|
186
|
+
* e.click()
|
187
|
+
* ```
|
188
|
+
*/
|
189
|
+
click() {
|
190
|
+
this.toggle();
|
191
|
+
}
|
192
|
+
|
193
|
+
/**
|
194
|
+
* toggle switch on/off
|
195
|
+
*
|
196
|
+
* ```
|
197
|
+
* e = document.querySelector('monster-toggle-switch');
|
198
|
+
* e.toggle()
|
199
|
+
* ```
|
200
|
+
*
|
201
|
+
* @return {ToggleSwitch}
|
202
|
+
*/
|
203
|
+
toggle() {
|
204
|
+
if (this.getOption("value") === this.getOption("values.on")) {
|
205
|
+
return this.toggleOff()
|
206
|
+
}
|
207
|
+
return this.toggleOn()
|
208
|
+
}
|
209
|
+
|
210
|
+
/**
|
211
|
+
* toggle switch on
|
212
|
+
*
|
213
|
+
* ```
|
214
|
+
* e = document.querySelector('monster-toggle-switch');
|
215
|
+
* e.toggleOn()
|
216
|
+
* ```
|
217
|
+
*
|
218
|
+
* @return {ToggleSwitch}
|
219
|
+
*/
|
220
|
+
toggleOn() {
|
221
|
+
this.setOption("value", this.getOption("values.on"));
|
222
|
+
fireEvent(this, "change");
|
223
|
+
return this;
|
224
|
+
}
|
225
|
+
|
226
|
+
/**
|
227
|
+
* toggle switch off
|
228
|
+
*
|
229
|
+
* ```
|
230
|
+
* e = document.querySelector('monster-toggle-switch');
|
231
|
+
* e.toggleOff()
|
232
|
+
* ```
|
233
|
+
*
|
234
|
+
* @return {ToggleSwitch}
|
235
|
+
*/
|
236
|
+
toggleOff() {
|
237
|
+
this.setOption("value", this.getOption("values.off"));
|
238
|
+
fireEvent(this, "change");
|
239
|
+
return this;
|
240
|
+
}
|
241
|
+
|
242
|
+
/**
|
243
|
+
* returns the status of the element
|
244
|
+
*
|
245
|
+
* ```
|
246
|
+
* e = document.querySelector('monster-toggle-switch');
|
247
|
+
* console.log(e.state)
|
248
|
+
* // ↦ off
|
249
|
+
* ```
|
250
|
+
*
|
251
|
+
* @return {string}
|
252
|
+
*/
|
253
|
+
get state() {
|
254
|
+
return this.getOption("value") === this.getOption("values.on")
|
255
|
+
? STATE_ON
|
256
|
+
: STATE_OFF;
|
257
|
+
}
|
258
|
+
|
259
|
+
/**
|
260
|
+
* The current value of the Switch
|
261
|
+
*
|
262
|
+
* ```
|
263
|
+
* e = document.querySelector('monster-toggle-switch');
|
264
|
+
* console.log(e.value)
|
265
|
+
* // ↦ on
|
266
|
+
* ```
|
267
|
+
*
|
268
|
+
* @return {string}
|
269
|
+
*/
|
270
|
+
get value() {
|
271
|
+
return this.getOption("value");
|
272
|
+
}
|
273
|
+
|
274
|
+
/**
|
275
|
+
* Set value
|
276
|
+
*
|
277
|
+
* ```
|
278
|
+
* e = document.querySelector('monster-toggle-switch');
|
279
|
+
* e.value="on"
|
280
|
+
* ```
|
281
|
+
*
|
282
|
+
* @property {string} value
|
283
|
+
*/
|
284
|
+
set value(value) {
|
285
|
+
|
286
|
+
if (value === this.getOption("values.on") || value === this.getOption("values.off")) {
|
287
|
+
if (this.state !== (value === this.getOption("values.on") ? STATE_ON : STATE_OFF)) {
|
288
|
+
this.setOption("value", value);
|
289
|
+
}
|
290
|
+
return;
|
291
|
+
}
|
292
|
+
|
293
|
+
addAttributeToken(
|
294
|
+
this,
|
295
|
+
ATTRIBUTE_ERRORMESSAGE,
|
296
|
+
'The value "' +
|
297
|
+
value +
|
298
|
+
'" must be "' +
|
299
|
+
this.getOption("values.on") +
|
300
|
+
'" or "' +
|
301
|
+
this.getOption("values.off"),
|
302
|
+
);
|
303
|
+
|
304
|
+
showError.call(this);
|
305
|
+
|
306
|
+
|
307
|
+
}
|
308
|
+
|
309
|
+
/**
|
310
|
+
* This method is called by the `instanceof` operator.
|
311
|
+
* @return {symbol}
|
312
|
+
*/
|
313
|
+
static get [instanceSymbol]() {
|
314
|
+
return Symbol.for(
|
315
|
+
"@schukai/monster/components/form/toggle-switch@@instance",
|
316
|
+
);
|
317
|
+
}
|
318
|
+
|
319
|
+
/**
|
320
|
+
*
|
321
|
+
* @returns {string}
|
322
|
+
*/
|
323
|
+
static getTag() {
|
324
|
+
return "monster-toggle-switch";
|
325
|
+
}
|
305
326
|
}
|
306
327
|
|
307
328
|
/**
|
308
329
|
* @private
|
309
330
|
*/
|
310
331
|
function initControlReferences() {
|
311
|
-
|
312
|
-
|
313
|
-
|
332
|
+
this[switchElementSymbol] = this.shadowRoot.querySelector(
|
333
|
+
`[${ATTRIBUTE_ROLE}=switch]`,
|
334
|
+
);
|
314
335
|
}
|
315
336
|
|
316
|
-
/**
|
317
|
-
* @private
|
318
|
-
*/
|
319
|
-
function toggleClassOn() {
|
320
|
-
this[switchElementSymbol].classList.remove(this.getOption("classes.off")); // change color
|
321
|
-
this[switchElementSymbol].classList.add(this.getOption("classes.on")); // change color
|
322
|
-
}
|
323
337
|
|
324
338
|
/**
|
325
339
|
* @private
|
326
340
|
*/
|
327
|
-
function
|
328
|
-
this[switchElementSymbol].classList.remove(this.getOption("classes.on")); // change color
|
329
|
-
this[switchElementSymbol].classList.add(this.getOption("classes.off")); // change color
|
330
|
-
}
|
341
|
+
function toggleOn() {
|
331
342
|
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
343
|
+
if (!this[switchElementSymbol]) {
|
344
|
+
return;
|
345
|
+
}
|
346
|
+
|
347
|
+
this[switchElementSymbol].classList.remove(this.getOption("classes.off")); // change color
|
348
|
+
this[switchElementSymbol].classList.add(this.getOption("classes.on")); // change color
|
349
|
+
|
350
|
+
const callback = this.getOption("actions.on");
|
351
|
+
if (isFunction(callback)) {
|
352
|
+
callback.call(this);
|
353
|
+
}
|
354
|
+
|
355
|
+
if (typeof this.setFormValue === "function") {
|
356
|
+
this.setFormValue(this.getOption("values.on"));
|
357
|
+
}
|
341
358
|
}
|
342
359
|
|
343
360
|
/**
|
344
361
|
* @private
|
345
362
|
*/
|
346
|
-
function
|
347
|
-
|
348
|
-
|
349
|
-
|
363
|
+
function toggleOff() {
|
364
|
+
|
365
|
+
if (!this[switchElementSymbol]) {
|
366
|
+
return;
|
367
|
+
}
|
350
368
|
|
351
|
-
|
369
|
+
this[switchElementSymbol].classList.remove(this.getOption("classes.on")); // change color
|
370
|
+
this[switchElementSymbol].classList.add(this.getOption("classes.off")); // change color
|
352
371
|
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
value = this.getOption("values.on");
|
358
|
-
callback = this.getOption("actions.on");
|
359
|
-
}
|
372
|
+
const callback = this.getOption("actions.off");
|
373
|
+
if (isFunction(callback)) {
|
374
|
+
callback.call(this);
|
375
|
+
}
|
360
376
|
|
361
|
-
|
362
|
-
|
377
|
+
if (typeof this.setFormValue === "function") {
|
378
|
+
this.setFormValue(this.getOption("values.off"));
|
379
|
+
}
|
363
380
|
|
364
|
-
if (isFunction(callback)) {
|
365
|
-
callback.call(this);
|
366
|
-
}
|
367
381
|
|
368
|
-
|
382
|
+
}
|
383
|
+
|
384
|
+
function showError() {
|
385
|
+
|
386
|
+
if (!this[switchElementSymbol]) {
|
387
|
+
return;
|
388
|
+
}
|
389
|
+
|
390
|
+
this[switchElementSymbol].classList.remove(this.getOption("classes.on"));
|
391
|
+
this[switchElementSymbol].classList.remove(this.getOption("classes.off"));
|
392
|
+
this[switchElementSymbol].classList.add(this.getOption("classes.error"));
|
369
393
|
}
|
370
394
|
|
371
395
|
/**
|
372
396
|
* @private
|
373
397
|
*/
|
374
398
|
function validateAndSetValue() {
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
399
|
+
|
400
|
+
const value = this.getOption("value");
|
401
|
+
|
402
|
+
const validatedValues = [];
|
403
|
+
validatedValues.push(this.getOption("values.on"));
|
404
|
+
validatedValues.push(this.getOption("values.off"));
|
405
|
+
|
406
|
+
if (validatedValues.includes(value) === false) {
|
407
|
+
addAttributeToken(
|
408
|
+
this,
|
409
|
+
ATTRIBUTE_ERRORMESSAGE,
|
410
|
+
'The value "' +
|
411
|
+
value +
|
412
|
+
'" must be "' +
|
413
|
+
this.getOption("values.on") +
|
414
|
+
'" or "' +
|
415
|
+
this.getOption("values.off"),
|
416
|
+
);
|
417
|
+
this.setOption("disabled", true);
|
418
|
+
this.formDisabledCallback(true);
|
419
|
+
showError.call(this);
|
420
|
+
return;
|
421
|
+
}
|
422
|
+
|
423
|
+
this.setOption("disabled", false);
|
424
|
+
this.formDisabledCallback(false);
|
425
|
+
|
426
|
+
if (value === this.getOption("values.on")) {
|
427
|
+
toggleOn.call(this);
|
428
|
+
return;
|
429
|
+
}
|
430
|
+
|
431
|
+
toggleOff.call(this);
|
432
|
+
|
433
|
+
|
398
434
|
}
|
399
435
|
|
400
436
|
/**
|
@@ -402,16 +438,36 @@ function validateAndSetValue() {
|
|
402
438
|
* @return {initEventHandler}
|
403
439
|
*/
|
404
440
|
function initEventHandler() {
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
441
|
+
const self = this;
|
442
|
+
|
443
|
+
let lastValue = self.value;
|
444
|
+
self[internalSymbol].attachObserver(
|
445
|
+
new Observer(function () {
|
446
|
+
if (isObject(this) && this instanceof ProxyObserver) {
|
447
|
+
const n = this.getSubject()?.options?.value;
|
448
|
+
if (lastValue !== n) {
|
449
|
+
lastValue = n;
|
450
|
+
validateAndSetValue.call(self);
|
451
|
+
}
|
452
|
+
}
|
453
|
+
}),
|
454
|
+
);
|
455
|
+
|
456
|
+
self.addEventListener("keyup", (event) => {
|
457
|
+
if (event.keyCode === 32) {
|
458
|
+
self.toggle();
|
459
|
+
}
|
460
|
+
});
|
461
|
+
|
462
|
+
self.addEventListener("click", (event) => {
|
463
|
+
self.toggle();
|
464
|
+
});
|
465
|
+
|
466
|
+
self.addEventListener("touch", (event) => {
|
467
|
+
self.toggle();
|
468
|
+
});
|
469
|
+
|
470
|
+
return this;
|
415
471
|
}
|
416
472
|
|
417
473
|
/**
|
@@ -419,8 +475,8 @@ function initEventHandler() {
|
|
419
475
|
* @return {string}
|
420
476
|
*/
|
421
477
|
function getTemplate() {
|
422
|
-
|
423
|
-
|
478
|
+
// language=HTML
|
479
|
+
return `
|
424
480
|
<div data-monster-role="control" part="control" tabindex="0">
|
425
481
|
<div class="switch" data-monster-role="switch"
|
426
482
|
data-monster-attributes="data-monster-state path:value | call:state-callback">
|