@schukai/monster 3.73.9 → 3.75.0
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +27 -0
- package/package.json +1 -1
- package/source/components/datatable/change-button.mjs +4 -4
- package/source/components/datatable/columnbar.mjs +2 -2
- package/source/components/datatable/dataset.mjs +2 -2
- package/source/components/datatable/datasource/rest.mjs +8 -8
- package/source/components/datatable/datatable.mjs +6 -6
- package/source/components/datatable/filter/date-range.mjs +6 -6
- package/source/components/datatable/filter/range.mjs +4 -4
- package/source/components/datatable/filter.mjs +4 -4
- package/source/components/datatable/save-button.mjs +4 -4
- package/source/components/datatable/util.mjs +2 -2
- package/source/components/form/api-button.mjs +0 -1
- package/source/components/form/context-error.mjs +0 -1
- package/source/components/form/context-help.mjs +0 -1
- package/source/components/form/message-state-button.mjs +0 -1
- package/source/components/form/popper-button.mjs +0 -1
- package/source/components/form/select.mjs +16 -5
- package/source/components/form/toggle-switch.mjs +0 -3
- package/source/components/form/tree-select.mjs +0 -1
- package/source/components/layout/slider.mjs +649 -0
- package/source/components/layout/style/slider.pcss +114 -0
- package/source/components/layout/stylesheet/slider.mjs +38 -0
- package/source/components/navigation/table-of-content.mjs +0 -1
- package/source/components/tree-menu/dragable-tree-menu.mjs +4 -4
- package/source/components/tree-menu/tree-menu.mjs +6 -6
- package/source/data/datasource/server/restapi.mjs +0 -1
- package/source/dom/events.mjs +1 -1
- package/source/dom/updater.mjs +767 -772
- package/source/monster.mjs +11 -3
- package/source/types/observer.mjs +7 -8
- package/source/types/version.mjs +1 -1
- package/test/cases/monster.mjs +1 -1
- package/test/web/test.html +2 -2
- package/test/web/tests.js +243 -202
package/CHANGELOG.md
CHANGED
@@ -2,6 +2,33 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
+
## [3.75.0] - 2024-09-23
|
6
|
+
|
7
|
+
### Add Features
|
8
|
+
|
9
|
+
- marker for select filter [#240](https://gitlab.schukai.com/oss/libraries/javascript/monster/issues/240)
|
10
|
+
### Changes
|
11
|
+
|
12
|
+
- remove unused files
|
13
|
+
- run webtests
|
14
|
+
- new development cert
|
15
|
+
### Documentation
|
16
|
+
|
17
|
+
- fix some small issues
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
## [3.74.0] - 2024-09-18
|
22
|
+
|
23
|
+
### Add Features
|
24
|
+
|
25
|
+
- new slider [#237](https://gitlab.schukai.com/oss/libraries/javascript/monster/issues/237)
|
26
|
+
### Bug Fixes
|
27
|
+
|
28
|
+
- performance tweak [#235](https://gitlab.schukai.com/oss/libraries/javascript/monster/issues/235)
|
29
|
+
|
30
|
+
|
31
|
+
|
5
32
|
## [3.73.9] - 2024-09-15
|
6
33
|
|
7
34
|
### Bug Fixes
|
package/package.json
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"author":"schukai GmbH","dependencies":{"@floating-ui/dom":"^1.6.11","@popperjs/core":"^2.11.8"},"description":"Monster is a simple library for creating fast, robust and lightweight websites.","homepage":"https://monsterjs.org/","keywords":["framework","web","dom","css","sass","mobile-first","app","front-end","templates","schukai","core","shopcloud","alvine","monster","buildmap","stack","observer","observable","uuid","node","nodelist","css-in-js","logger","log","theme"],"license":"AGPL 3.0","main":"source/monster.mjs","module":"source/monster.mjs","name":"@schukai/monster","repository":{"type":"git","url":"https://gitlab.schukai.com/oss/libraries/javascript/monster.git"},"type":"module","version":"3.
|
1
|
+
{"author":"schukai GmbH","dependencies":{"@floating-ui/dom":"^1.6.11","@popperjs/core":"^2.11.8"},"description":"Monster is a simple library for creating fast, robust and lightweight websites.","homepage":"https://monsterjs.org/","keywords":["framework","web","dom","css","sass","mobile-first","app","front-end","templates","schukai","core","shopcloud","alvine","monster","buildmap","stack","observer","observable","uuid","node","nodelist","css-in-js","logger","log","theme"],"license":"AGPL 3.0","main":"source/monster.mjs","module":"source/monster.mjs","name":"@schukai/monster","repository":{"type":"git","url":"https://gitlab.schukai.com/oss/libraries/javascript/monster.git"},"type":"module","version":"3.75.0"}
|
@@ -222,7 +222,7 @@ function initControlReferences() {
|
|
222
222
|
);
|
223
223
|
|
224
224
|
if (this[stateButtonElementSymbol]) {
|
225
|
-
|
225
|
+
queueMicrotask(() => {
|
226
226
|
const states = {
|
227
227
|
changed: new State(
|
228
228
|
"changed",
|
@@ -239,7 +239,7 @@ function initControlReferences() {
|
|
239
239
|
"labels.button",
|
240
240
|
this.getOption("labels.button"),
|
241
241
|
);
|
242
|
-
}
|
242
|
+
});
|
243
243
|
}
|
244
244
|
|
245
245
|
return this;
|
@@ -278,7 +278,7 @@ function getIndex() {
|
|
278
278
|
* @private
|
279
279
|
*/
|
280
280
|
function initEventHandler() {
|
281
|
-
|
281
|
+
queueMicrotask(() => {
|
282
282
|
this[stateButtonElementSymbol].setOption("actions.click", () => {
|
283
283
|
const index = getIndex.call(this);
|
284
284
|
|
@@ -287,7 +287,7 @@ function initEventHandler() {
|
|
287
287
|
this[overlayLinkedElementSymbol].open();
|
288
288
|
}
|
289
289
|
});
|
290
|
-
}
|
290
|
+
});
|
291
291
|
}
|
292
292
|
|
293
293
|
/**
|
@@ -249,12 +249,12 @@ function initEventHandler() {
|
|
249
249
|
if (self[settingsLayerElementSymbol].classList.contains("visible")) {
|
250
250
|
self[popperInstanceSymbol].update();
|
251
251
|
|
252
|
-
|
252
|
+
queueMicrotask(() => {
|
253
253
|
document.body.addEventListener(
|
254
254
|
"click",
|
255
255
|
self[settingsButtonEventHandlerSymbol],
|
256
256
|
);
|
257
|
-
}
|
257
|
+
});
|
258
258
|
}
|
259
259
|
}
|
260
260
|
});
|
@@ -198,7 +198,7 @@ class DataSet extends CustomElement {
|
|
198
198
|
return;
|
199
199
|
}
|
200
200
|
|
201
|
-
|
201
|
+
queueMicrotask(() => {
|
202
202
|
const path = this.getOption("mapping.data");
|
203
203
|
const index = this.getOption("mapping.index");
|
204
204
|
|
@@ -224,7 +224,7 @@ class DataSet extends CustomElement {
|
|
224
224
|
this[datasourceLinkedElementSymbol].data = ref;
|
225
225
|
|
226
226
|
resolve();
|
227
|
-
}
|
227
|
+
});
|
228
228
|
});
|
229
229
|
}
|
230
230
|
|
@@ -234,7 +234,7 @@ class Rest extends Datasource {
|
|
234
234
|
datasource: this,
|
235
235
|
});
|
236
236
|
|
237
|
-
|
237
|
+
queueMicrotask(() => {
|
238
238
|
this[dataSourceSymbol]
|
239
239
|
.read()
|
240
240
|
.then((response) => {
|
@@ -252,7 +252,7 @@ class Rest extends Datasource {
|
|
252
252
|
addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, error.toString());
|
253
253
|
reject(error);
|
254
254
|
});
|
255
|
-
}
|
255
|
+
});
|
256
256
|
});
|
257
257
|
}
|
258
258
|
|
@@ -289,11 +289,11 @@ class Rest extends Datasource {
|
|
289
289
|
connectedCallback() {
|
290
290
|
super.connectedCallback();
|
291
291
|
|
292
|
-
|
292
|
+
queueMicrotask(() => {
|
293
293
|
if (this.getOption("features.filter", false) === true) {
|
294
294
|
initFilter.call(this);
|
295
295
|
}
|
296
|
-
}
|
296
|
+
});
|
297
297
|
}
|
298
298
|
|
299
299
|
/**
|
@@ -335,7 +335,7 @@ class Rest extends Datasource {
|
|
335
335
|
datasource: this,
|
336
336
|
});
|
337
337
|
|
338
|
-
|
338
|
+
queueMicrotask(() => {
|
339
339
|
this[dataSourceSymbol]
|
340
340
|
.write()
|
341
341
|
.then((response) => {
|
@@ -353,7 +353,7 @@ class Rest extends Datasource {
|
|
353
353
|
addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, error.toString());
|
354
354
|
reject(error);
|
355
355
|
});
|
356
|
-
}
|
356
|
+
});
|
357
357
|
});
|
358
358
|
}
|
359
359
|
}
|
@@ -492,9 +492,9 @@ function initAutoInit() {
|
|
492
492
|
return;
|
493
493
|
}
|
494
494
|
|
495
|
-
|
495
|
+
queueMicrotask(() => {
|
496
496
|
this.fetch().catch(() => {});
|
497
|
-
}
|
497
|
+
});
|
498
498
|
}
|
499
499
|
|
500
500
|
function initEventHandler() {
|
@@ -290,12 +290,12 @@ class DataTable extends CustomElement {
|
|
290
290
|
|
291
291
|
this[datasourceLinkedElementSymbol] = element;
|
292
292
|
|
293
|
-
|
293
|
+
queueMicrotask(() => {
|
294
294
|
handleDataSourceChanges.call(this);
|
295
295
|
element.datasource.attachObserver(
|
296
296
|
new Observer(handleDataSourceChanges.bind(this)),
|
297
297
|
);
|
298
|
-
}
|
298
|
+
});
|
299
299
|
}
|
300
300
|
|
301
301
|
getHostConfig
|
@@ -658,7 +658,7 @@ function initEventHandler() {
|
|
658
658
|
|
659
659
|
headers[index].changeDirection();
|
660
660
|
|
661
|
-
|
661
|
+
queueMicrotask(function () {
|
662
662
|
/** hotfix, normally this should be done via the updater, no idea why this is not possible. */
|
663
663
|
element.setAttribute(
|
664
664
|
ATTRIBUTE_DATATABLE_SORTABLE,
|
@@ -666,7 +666,7 @@ function initEventHandler() {
|
|
666
666
|
);
|
667
667
|
|
668
668
|
storeOrderStatement.call(self, true);
|
669
|
-
}
|
669
|
+
});
|
670
670
|
}
|
671
671
|
});
|
672
672
|
}
|
@@ -797,9 +797,9 @@ function initGridAndStructs(hostConfig, headerOrderMap) {
|
|
797
797
|
}
|
798
798
|
|
799
799
|
this.setOption("headers", headers);
|
800
|
-
|
800
|
+
queueMicrotask(() => {
|
801
801
|
storeOrderStatement.call(this, this.getOption("features.autoInit"));
|
802
|
-
}
|
802
|
+
});
|
803
803
|
}
|
804
804
|
|
805
805
|
/**
|
@@ -480,9 +480,9 @@ function initEventHandler() {
|
|
480
480
|
|
481
481
|
// change the input value if the user change the value of the radio button
|
482
482
|
this[inputElementSymbol].addEventListener("change", (event) => {
|
483
|
-
|
483
|
+
queueMicrotask(() => {
|
484
484
|
updatePopperInputsFromMainValue.call(this);
|
485
|
-
}
|
485
|
+
});
|
486
486
|
});
|
487
487
|
|
488
488
|
// if the user change the value of on of the input fields, we should update the value of the input field
|
@@ -514,9 +514,9 @@ function initEventHandler() {
|
|
514
514
|
if (event.key === "Escape") {
|
515
515
|
hide.call(this);
|
516
516
|
|
517
|
-
|
517
|
+
queueMicrotask(() => {
|
518
518
|
this[inputElementSymbol].focus();
|
519
|
-
}
|
519
|
+
});
|
520
520
|
|
521
521
|
return;
|
522
522
|
}
|
@@ -600,10 +600,10 @@ function show() {
|
|
600
600
|
clearAndDisableFormGroups.call(this);
|
601
601
|
}
|
602
602
|
|
603
|
-
|
603
|
+
queueMicrotask(() => {
|
604
604
|
updatePopperInputsFromMainValue.call(this);
|
605
605
|
updatePopper.call(this);
|
606
|
-
}
|
606
|
+
});
|
607
607
|
}
|
608
608
|
|
609
609
|
/**
|
@@ -412,9 +412,9 @@ function initEventHandler() {
|
|
412
412
|
// if key code esc than hide dialog
|
413
413
|
if (event.key === "Escape") {
|
414
414
|
hide.call(this);
|
415
|
-
|
415
|
+
queueMicrotask(() => {
|
416
416
|
this[inputElementSymbol].focus();
|
417
|
-
}
|
417
|
+
});
|
418
418
|
|
419
419
|
return;
|
420
420
|
}
|
@@ -438,7 +438,7 @@ function initEventHandler() {
|
|
438
438
|
if (radio) {
|
439
439
|
radio.checked = true;
|
440
440
|
}
|
441
|
-
|
441
|
+
queueMicrotask(() => {
|
442
442
|
// focus the input field
|
443
443
|
const input = this[formContainerElementSymbol].querySelector(
|
444
444
|
"input[type=radio][value=single] ~ input[name=singleValue]",
|
@@ -446,7 +446,7 @@ function initEventHandler() {
|
|
446
446
|
if (input) {
|
447
447
|
input.focus();
|
448
448
|
}
|
449
|
-
}
|
449
|
+
});
|
450
450
|
}
|
451
451
|
});
|
452
452
|
|
@@ -386,14 +386,14 @@ function initControlReferences() {
|
|
386
386
|
}
|
387
387
|
|
388
388
|
function updateFilterSelections() {
|
389
|
-
|
389
|
+
queueMicrotask(() => {
|
390
390
|
const options = this[settingsSymbol].getOptions();
|
391
391
|
this[filterSelectElementSymbol].setOption("options", options);
|
392
|
-
|
392
|
+
queueMicrotask(() => {
|
393
393
|
this[filterSelectElementSymbol].value =
|
394
394
|
this[settingsSymbol].getSelected();
|
395
|
-
}
|
396
|
-
}
|
395
|
+
});
|
396
|
+
});
|
397
397
|
}
|
398
398
|
|
399
399
|
/**
|
@@ -260,7 +260,7 @@ function initControlReferences() {
|
|
260
260
|
);
|
261
261
|
|
262
262
|
if (this[stateButtonElementSymbol]) {
|
263
|
-
|
263
|
+
queueMicrotask(() => {
|
264
264
|
const states = {
|
265
265
|
changed: new State(
|
266
266
|
"changed",
|
@@ -278,7 +278,7 @@ function initControlReferences() {
|
|
278
278
|
"labels.button",
|
279
279
|
this.getOption("labels.button"),
|
280
280
|
);
|
281
|
-
}
|
281
|
+
});
|
282
282
|
}
|
283
283
|
|
284
284
|
return this;
|
@@ -288,7 +288,7 @@ function initControlReferences() {
|
|
288
288
|
* @private
|
289
289
|
*/
|
290
290
|
function initEventHandler() {
|
291
|
-
|
291
|
+
queueMicrotask(() => {
|
292
292
|
this[stateButtonElementSymbol].setOption("actions.click", () => {
|
293
293
|
this[datasourceLinkedElementSymbol]
|
294
294
|
.write()
|
@@ -308,7 +308,7 @@ function initEventHandler() {
|
|
308
308
|
addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, error.toString());
|
309
309
|
});
|
310
310
|
});
|
311
|
-
}
|
311
|
+
});
|
312
312
|
}
|
313
313
|
|
314
314
|
/**
|
@@ -277,7 +277,6 @@ const FILTER_POSITION_INLINE = "inline";
|
|
277
277
|
* @example /examples/components/form/select-simple
|
278
278
|
* @example /examples/components/form/select-with-options
|
279
279
|
*
|
280
|
-
* @since 1.0.0
|
281
280
|
* @copyright schukai GmbH
|
282
281
|
* @summary A beautiful select control that can make your life easier and also looks good.
|
283
282
|
* @fires monster-options-set
|
@@ -297,7 +296,6 @@ class Select extends CustomControl {
|
|
297
296
|
/**
|
298
297
|
* This method is called by the `instanceof` operator.
|
299
298
|
* @returns {Symbol}
|
300
|
-
* @since 2.1.0
|
301
299
|
*/
|
302
300
|
static get [instanceSymbol]() {
|
303
301
|
return Symbol.for("@schukai/monster/components/form/select@@instance");
|
@@ -336,7 +334,6 @@ class Select extends CustomControl {
|
|
336
334
|
* ```
|
337
335
|
*
|
338
336
|
* @property {string|array} value
|
339
|
-
* @since 1.2.0
|
340
337
|
* @throws {Error} unsupported type
|
341
338
|
*/
|
342
339
|
set value(value) {
|
@@ -458,6 +455,10 @@ class Select extends CustomControl {
|
|
458
455
|
defaultValue: "*",
|
459
456
|
mode: FILTER_MODE_DISABLED,
|
460
457
|
position: FILTER_POSITION_INLINE,
|
458
|
+
marker: {
|
459
|
+
open: "{",
|
460
|
+
close: "}",
|
461
|
+
},
|
461
462
|
},
|
462
463
|
classes: {
|
463
464
|
badge: "monster-badge-primary",
|
@@ -721,7 +722,6 @@ class Select extends CustomControl {
|
|
721
722
|
* Import Select Options from dataset
|
722
723
|
* Not to be confused with the control defaults/options
|
723
724
|
*
|
724
|
-
* @since 0.16.0
|
725
725
|
* @param {array|object|Map|Set} data
|
726
726
|
* @return {Select}
|
727
727
|
* @throws {Error} map is not iterable
|
@@ -1473,7 +1473,18 @@ function filterFromRemote() {
|
|
1473
1473
|
);
|
1474
1474
|
let url = optionUrl;
|
1475
1475
|
if (filterValue.length > 0) {
|
1476
|
-
|
1476
|
+
const formatter = new Formatter({ filter: filterValue });
|
1477
|
+
const openMarker = this.getOption("formatter.marker.open");
|
1478
|
+
let closeMarker = this.getOption("formatter.marker.close");
|
1479
|
+
if (!closeMarker) {
|
1480
|
+
closeMarker = openMarker;
|
1481
|
+
}
|
1482
|
+
|
1483
|
+
if (openMarker && closeMarker) {
|
1484
|
+
formatter.setMarker(openMarker, closeMarker);
|
1485
|
+
}
|
1486
|
+
|
1487
|
+
url = formatter.format(optionUrl);
|
1477
1488
|
}
|
1478
1489
|
|
1479
1490
|
this.fetch(url)
|
@@ -105,8 +105,6 @@ class ToggleSwitch extends CustomControl {
|
|
105
105
|
* @property {string} actions.off=specifies the action for the off state.
|
106
106
|
* @property {Object} templates
|
107
107
|
* @property {string} templates.main=specifies the main template used by the control.
|
108
|
-
*
|
109
|
-
* @since 3.57.0
|
110
108
|
*/
|
111
109
|
get defaults() {
|
112
110
|
return Object.assign({}, super.defaults, {
|
@@ -317,7 +315,6 @@ class ToggleSwitch extends CustomControl {
|
|
317
315
|
/**
|
318
316
|
* This method is called by the `instanceof` operator.
|
319
317
|
* @returns {symbol}
|
320
|
-
* @since 2.1.0
|
321
318
|
*/
|
322
319
|
static get [instanceSymbol]() {
|
323
320
|
return Symbol.for(
|
@@ -133,7 +133,6 @@ class TreeSelect extends Select {
|
|
133
133
|
* Import Select Options from dataset
|
134
134
|
* Not to be confused with the control defaults/options
|
135
135
|
*
|
136
|
-
* @since 0.16.0
|
137
136
|
* @param {array|object|Map|Set} data
|
138
137
|
* @return {Select}
|
139
138
|
* @throws {Error} map is not iterable
|