@schukai/monster 3.51.5 → 3.52.0
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 +17 -0
- package/README.md +15 -12
- package/example/components/form/button.mjs +10 -0
- package/example/components/form/select.mjs +25 -0
- package/example/components/form/tree-select.mjs +27 -0
- package/example/components/host/host.mjs +0 -0
- package/example/components/notify/message.mjs +4 -0
- package/example/components/notify/notify.mjs +4 -0
- package/example/components/state/log.mjs +0 -0
- package/example/components/state/state.mjs +0 -0
- package/package.json +6 -2
- package/source/components/constants.mjs +132 -0
- package/source/components/datatable/columnbar.mjs +310 -0
- package/source/components/datatable/constants.mjs +121 -0
- package/source/components/datatable/dataset.mjs +219 -0
- package/source/components/datatable/datasource/dom.mjs +186 -0
- package/source/components/datatable/datasource/namespace.mjs +13 -0
- package/source/components/datatable/datasource/rest.mjs +400 -0
- package/source/components/datatable/datasource.mjs +102 -0
- package/source/components/datatable/datatable/header.mjs +268 -0
- package/source/components/datatable/datatable/namespace.mjs +13 -0
- package/source/components/datatable/datatable.mjs +789 -0
- package/source/components/datatable/embedded-pagination.mjs +113 -0
- package/source/components/datatable/filter/abstract-base.mjs +31 -0
- package/source/components/datatable/filter/date-range.mjs +1041 -0
- package/source/components/datatable/filter/input.mjs +175 -0
- package/source/components/datatable/filter/namespace.mjs +13 -0
- package/source/components/datatable/filter/range.mjs +671 -0
- package/source/components/datatable/filter/select.mjs +65 -0
- package/source/components/datatable/filter/settings.mjs +116 -0
- package/source/components/datatable/filter-button.mjs +98 -0
- package/source/components/datatable/filter.mjs +929 -0
- package/source/components/datatable/namespace.mjs +11 -0
- package/source/components/datatable/pagination.mjs +456 -0
- package/source/components/datatable/style/column-bar.pcss +123 -0
- package/source/components/datatable/style/dataset.pcss +13 -0
- package/source/components/datatable/style/datasource.pcss +16 -0
- package/source/components/datatable/style/datatable.pcss +239 -0
- package/source/components/datatable/style/embedded-pagination.pcss +101 -0
- package/source/components/datatable/style/filter-button.pcss +22 -0
- package/source/components/datatable/style/filter-controls-defaults.pcss +46 -0
- package/source/components/datatable/style/filter-date-range.pcss +9 -0
- package/source/components/datatable/style/filter-range.pcss +5 -0
- package/source/components/datatable/style/filter.pcss +156 -0
- package/source/components/datatable/style/pagination.pcss +59 -0
- package/source/components/datatable/style/select-filter.pcss +27 -0
- package/source/components/datatable/stylesheet/column-bar.mjs +33 -0
- package/source/components/datatable/stylesheet/dataset.mjs +33 -0
- package/source/components/datatable/stylesheet/datasource.mjs +33 -0
- package/source/components/datatable/stylesheet/datatable.mjs +33 -0
- package/source/components/datatable/stylesheet/embedded-pagination.mjs +33 -0
- package/source/components/datatable/stylesheet/filter-button.mjs +33 -0
- package/source/components/datatable/stylesheet/filter-controls-defaults.mjs +33 -0
- package/source/components/datatable/stylesheet/filter-date-range.mjs +33 -0
- package/source/components/datatable/stylesheet/filter-range.mjs +33 -0
- package/source/components/datatable/stylesheet/filter.mjs +33 -0
- package/source/components/datatable/stylesheet/namespace.mjs +13 -0
- package/source/components/datatable/stylesheet/pagination.mjs +33 -0
- package/source/components/datatable/stylesheet/select-filter.mjs +33 -0
- package/source/components/datatable/util.mjs +60 -0
- package/source/components/form/action-button.mjs +262 -0
- package/source/components/form/api-button.mjs +515 -0
- package/source/components/form/button-bar.mjs +739 -0
- package/source/components/form/button.mjs +350 -0
- package/source/components/form/confirm-button.mjs +330 -0
- package/source/components/form/constants.mjs +111 -0
- package/source/components/form/context-help.mjs +123 -0
- package/source/components/form/events.mjs +84 -0
- package/source/components/form/form.mjs +601 -0
- package/source/components/form/message-state-button.mjs +396 -0
- package/source/components/form/namespace.mjs +13 -0
- package/source/components/form/popper-button.mjs +435 -0
- package/source/components/form/popper.mjs +487 -0
- package/source/components/form/reload.mjs +360 -0
- package/source/components/form/select.mjs +2314 -0
- package/source/components/form/shadow-reload.mjs +137 -0
- package/source/components/form/state-button.mjs +182 -0
- package/source/components/form/style/action-button.pcss +41 -0
- package/source/components/form/style/api-button.pcss +0 -0
- package/source/components/form/style/button-bar.pcss +51 -0
- package/source/components/form/style/button.pcss +8 -0
- package/source/components/form/style/confirm-button.pcss +17 -0
- package/source/components/form/style/context-help.pcss +16 -0
- package/source/components/form/style/form.pcss +10 -0
- package/source/components/form/style/message-state-button.pcss +10 -0
- package/source/components/form/style/popper-button.pcss +16 -0
- package/source/components/form/style/popper.pcss +8 -0
- package/source/components/form/style/select.pcss +265 -0
- package/source/components/form/style/state-button.pcss +116 -0
- package/source/components/form/style/tabs.pcss +170 -0
- package/source/components/form/style/tree-select.pcss +81 -0
- package/source/components/form/stylesheet/action-button.mjs +33 -0
- package/source/components/form/stylesheet/api-button.mjs +33 -0
- package/source/components/form/stylesheet/button-bar.mjs +33 -0
- package/source/components/form/stylesheet/button.mjs +33 -0
- package/source/components/form/stylesheet/confirm-button.mjs +33 -0
- package/source/components/form/stylesheet/context-help.mjs +33 -0
- package/source/components/form/stylesheet/form.mjs +33 -0
- package/source/components/form/stylesheet/message-state-button.mjs +33 -0
- package/source/components/form/stylesheet/namespace.mjs +13 -0
- package/source/components/form/stylesheet/popper-button.mjs +33 -0
- package/source/components/form/stylesheet/popper.mjs +33 -0
- package/source/components/form/stylesheet/select.mjs +33 -0
- package/source/components/form/stylesheet/state-button.mjs +33 -0
- package/source/components/form/stylesheet/tabs.mjs +33 -0
- package/source/components/form/stylesheet/tree-select.mjs +33 -0
- package/source/components/form/tabs.mjs +1011 -0
- package/source/components/form/template.mjs +373 -0
- package/source/components/form/tree-select.mjs +527 -0
- package/source/components/form/types/namespace.mjs +13 -0
- package/source/components/form/types/state.mjs +93 -0
- package/source/components/form/util/fetch.mjs +133 -0
- package/source/components/form/util/floating-ui.mjs +245 -0
- package/source/components/form/util/namespace.mjs +13 -0
- package/source/components/form/util/popper.mjs +49 -0
- package/source/components/host/call-button.mjs +236 -0
- package/source/components/host/collapse.mjs +526 -0
- package/source/components/host/config-manager.mjs +304 -0
- package/source/components/host/constants.mjs +18 -0
- package/source/components/host/details.mjs +268 -0
- package/source/components/host/events.mjs +131 -0
- package/source/components/host/host.mjs +420 -0
- package/source/components/host/namespace.mjs +13 -0
- package/source/components/host/overlay.mjs +339 -0
- package/source/components/host/style/call-button.pcss +36 -0
- package/source/components/host/style/collapse.pcss +67 -0
- package/source/components/host/style/config-manager.pcss +5 -0
- package/source/components/host/style/details.pcss +68 -0
- package/source/components/host/style/host.pcss +43 -0
- package/source/components/host/style/overlay.pcss +73 -0
- package/source/components/host/style/toggle-button.pcss +36 -0
- package/source/components/host/style/viewer.pcss +13 -0
- package/source/components/host/stylesheet/call-button.mjs +33 -0
- package/source/components/host/stylesheet/collapse.mjs +33 -0
- package/source/components/host/stylesheet/config-manager.mjs +33 -0
- package/source/components/host/stylesheet/details.mjs +33 -0
- package/source/components/host/stylesheet/host.mjs +33 -0
- package/source/components/host/stylesheet/namespace.mjs +13 -0
- package/source/components/host/stylesheet/overlay.mjs +33 -0
- package/source/components/host/stylesheet/toggle-button.mjs +33 -0
- package/source/components/host/stylesheet/viewer.mjs +33 -0
- package/source/components/host/toggle-button.mjs +88 -0
- package/source/components/host/util.mjs +23 -0
- package/source/components/host/viewer.mjs +309 -0
- package/source/components/namespace.mjs +14 -0
- package/source/components/notify/constants.mjs +15 -0
- package/source/components/notify/events.mjs +15 -0
- package/source/components/notify/message.mjs +374 -0
- package/source/components/notify/namespace.mjs +15 -0
- package/source/components/notify/notify.mjs +236 -0
- package/source/components/notify/style/message.pcss +57 -0
- package/source/components/notify/style/notify.pcss +118 -0
- package/source/components/notify/stylesheet/message.mjs +33 -0
- package/source/components/notify/stylesheet/namespace.mjs +15 -0
- package/source/components/notify/stylesheet/notify.mjs +33 -0
- package/source/components/state/log/entry.mjs +126 -0
- package/source/components/state/log/namespace.mjs +13 -0
- package/source/components/state/log.mjs +275 -0
- package/source/components/state/namespace.mjs +13 -0
- package/source/components/state/state.mjs +131 -0
- package/source/components/state/style/log.pcss +111 -0
- package/source/components/state/style/state.pcss +113 -0
- package/source/components/state/stylesheet/log.mjs +33 -0
- package/source/components/state/stylesheet/state.mjs +33 -0
- package/source/components/style/badge.pcss +92 -0
- package/source/components/style/border.pcss +77 -0
- package/source/components/style/button.pcss +105 -0
- package/source/components/style/card.pcss +108 -0
- package/source/components/style/color.pcss +257 -0
- package/source/components/style/common.pcss +103 -0
- package/source/components/style/control.pcss +11 -0
- package/source/components/style/data-grid.pcss +43 -0
- package/source/components/style/display.pcss +42 -0
- package/source/components/style/floating-ui.pcss +33 -0
- package/source/components/style/form.pcss +5 -0
- package/source/components/style/host.pcss +15 -0
- package/source/components/style/link.pcss +63 -0
- package/source/components/style/mixin/badge.pcss +18 -0
- package/source/components/style/mixin/button.pcss +54 -0
- package/source/components/style/mixin/form.pcss +247 -0
- package/source/components/style/mixin/hover.pcss +8 -0
- package/source/components/style/mixin/media.pcss +107 -0
- package/source/components/style/mixin/property.pcss +288 -0
- package/source/components/style/mixin/skeleton.pcss +26 -0
- package/source/components/style/mixin/spinner.pcss +24 -0
- package/source/components/style/mixin/typography.pcss +52 -0
- package/source/components/style/normalize.pcss +14 -0
- package/source/components/style/popper.pcss +78 -0
- package/source/components/style/property.pcss +17 -0
- package/source/components/style/ripple.pcss +14 -0
- package/source/components/style/skeleton.pcss +28 -0
- package/source/components/style/space.pcss +47 -0
- package/source/components/style/spinner.pcss +6 -0
- package/source/components/style/table.pcss +46 -0
- package/source/components/style/theme.pcss +119 -0
- package/source/components/style/typography.pcss +131 -0
- package/source/components/stylesheet/badge.mjs +33 -0
- package/source/components/stylesheet/border.mjs +33 -0
- package/source/components/stylesheet/button.mjs +33 -0
- package/source/components/stylesheet/card.mjs +33 -0
- package/source/components/stylesheet/color.mjs +33 -0
- package/source/components/stylesheet/common.mjs +33 -0
- package/source/components/stylesheet/control.mjs +33 -0
- package/source/components/stylesheet/data-grid.mjs +33 -0
- package/source/components/stylesheet/display.mjs +33 -0
- package/source/components/stylesheet/floating-ui.mjs +33 -0
- package/source/components/stylesheet/form.mjs +33 -0
- package/source/components/stylesheet/host.mjs +33 -0
- package/source/components/stylesheet/link.mjs +33 -0
- package/source/components/stylesheet/namespace.mjs +13 -0
- package/source/components/stylesheet/normalize.mjs +33 -0
- package/source/components/stylesheet/popper.mjs +33 -0
- package/source/components/stylesheet/property.mjs +33 -0
- package/source/components/stylesheet/ripple.mjs +33 -0
- package/source/components/stylesheet/skeleton.mjs +33 -0
- package/source/components/stylesheet/space.mjs +33 -0
- package/source/components/stylesheet/spinner.mjs +33 -0
- package/source/components/stylesheet/table.mjs +33 -0
- package/source/components/stylesheet/theme.mjs +33 -0
- package/source/components/stylesheet/tree-menu.mjs +33 -0
- package/source/components/stylesheet/typography.mjs +33 -0
- package/source/components/tree-menu/namespace.mjs +13 -0
- package/source/components/tree-menu/style/tree-menu.pcss +107 -0
- package/source/components/tree-menu/stylesheet/namespace.mjs +13 -0
- package/source/components/tree-menu/stylesheet/tree-menu.mjs +33 -0
- package/source/components/tree-menu/tree-menu.mjs +660 -0
- package/source/constraints/abstract.mjs +17 -24
- package/source/constraints/abstractoperator.mjs +27 -22
- package/source/constraints/andoperator.mjs +20 -17
- package/source/constraints/invalid.mjs +17 -17
- package/source/constraints/isarray.mjs +20 -20
- package/source/constraints/isobject.mjs +20 -20
- package/source/constraints/oroperator.mjs +45 -45
- package/source/constraints/valid.mjs +17 -17
- package/source/data/buildmap.mjs +108 -103
- package/source/data/buildtree.mjs +59 -57
- package/source/data/datasource/dom.mjs +80 -84
- package/source/data/datasource/namespace.mjs +1 -1
- package/source/data/datasource/server/restapi/data-fetch-error.mjs +27 -25
- package/source/data/datasource/server/restapi/writeerror.mjs +34 -32
- package/source/data/datasource/server/restapi.mjs +176 -177
- package/source/data/datasource/server/webconnect.mjs +150 -156
- package/source/data/datasource/server.mjs +58 -59
- package/source/data/datasource/storage/localstorage.mjs +25 -24
- package/source/data/datasource/storage/sessionstorage.mjs +28 -25
- package/source/data/datasource/storage.mjs +74 -73
- package/source/data/datasource.mjs +176 -167
- package/source/data/diff.mjs +98 -97
- package/source/data/extend.mjs +42 -42
- package/source/data/pathfinder.mjs +301 -288
- package/source/data/pipe.mjs +36 -36
- package/source/data/transformer.mjs +742 -726
- package/source/dom/assembler.mjs +44 -44
- package/source/dom/attributes.mjs +142 -122
- package/source/dom/constants.mjs +62 -58
- package/source/dom/customcontrol.mjs +299 -299
- package/source/dom/customelement.mjs +843 -806
- package/source/dom/dimension.mjs +56 -46
- package/source/dom/events.mjs +74 -69
- package/source/dom/focusmanager.mjs +175 -175
- package/source/dom/locale.mjs +28 -28
- package/source/dom/ready.mjs +13 -13
- package/source/dom/resource/data.mjs +117 -111
- package/source/dom/resource/link/stylesheet.mjs +16 -16
- package/source/dom/resource/link.mjs +94 -96
- package/source/dom/resource/script.mjs +72 -74
- package/source/dom/resource.mjs +174 -172
- package/source/dom/resourcemanager.mjs +152 -156
- package/source/dom/slotted.mjs +78 -80
- package/source/dom/template.mjs +126 -112
- package/source/dom/theme.mjs +35 -35
- package/source/dom/updater.mjs +673 -651
- package/source/dom/util/extract-keys.mjs +34 -22
- package/source/dom/util/init-options-from-attributes.mjs +46 -38
- package/source/dom/util/namespace.mjs +13 -0
- package/source/dom/util/set-option-from-attribute.mjs +35 -29
- package/source/dom/util.mjs +112 -81
- package/source/dom/worker/factory.mjs +83 -83
- package/source/i18n/formatter.mjs +75 -73
- package/source/i18n/locale.mjs +146 -144
- package/source/i18n/provider.mjs +70 -64
- package/source/i18n/providers/embed.mjs +136 -127
- package/source/i18n/providers/fetch.mjs +84 -76
- package/source/i18n/translations.mjs +205 -195
- package/source/logging/handler/console.mjs +36 -36
- package/source/logging/handler.mjs +140 -140
- package/source/logging/logentry.mjs +25 -25
- package/source/logging/logger.mjs +177 -175
- package/source/math/random.mjs +63 -59
- package/source/monster.mjs +223 -103
- package/source/net/webconnect/message.mjs +31 -31
- package/source/net/webconnect.mjs +278 -271
- package/source/text/bracketed-key-value-hash.mjs +182 -179
- package/source/text/formatter.mjs +235 -210
- package/source/text/generate-range-comparison-expression.mjs +56 -34
- package/source/text/namespace.mjs +1 -1
- package/source/types/base.mjs +69 -61
- package/source/types/basewithoptions.mjs +46 -46
- package/source/types/binary.mjs +20 -20
- package/source/types/dataurl.mjs +96 -90
- package/source/types/global.mjs +45 -39
- package/source/types/id.mjs +25 -25
- package/source/types/internal.mjs +115 -114
- package/source/types/is.mjs +56 -40
- package/source/types/mediatype.mjs +119 -119
- package/source/types/namespace.mjs +1 -1
- package/source/types/node.mjs +160 -150
- package/source/types/nodelist.mjs +94 -96
- package/source/types/noderecursiveiterator.mjs +50 -50
- package/source/types/observablequeue.mjs +73 -73
- package/source/types/observer.mjs +104 -104
- package/source/types/observerlist.mjs +66 -66
- package/source/types/proxyobserver.mjs +210 -210
- package/source/types/queue.mjs +63 -63
- package/source/types/randomid.mjs +13 -13
- package/source/types/regex.mjs +3 -1
- package/source/types/stack.mjs +64 -64
- package/source/types/tokenlist.mjs +206 -205
- package/source/types/typeof.mjs +12 -10
- package/source/types/uniquequeue.mjs +48 -48
- package/source/types/uuid.mjs +32 -32
- package/source/types/validate.mjs +67 -67
- package/source/types/version.mjs +115 -105
- package/source/util/clone.mjs +103 -91
- package/source/util/comparator.mjs +97 -97
- package/source/util/deadmansswitch.mjs +40 -44
- package/source/util/freeze.mjs +10 -9
- package/source/util/namespace.mjs +1 -1
- package/source/util/processing.mjs +104 -105
- package/source/util/runtime.mjs +56 -44
- package/source/util/trimspaces.mjs +24 -24
- package/test/cases/components/form/button.mjs +122 -0
- package/test/cases/components/form/confirm-button.mjs +127 -0
- package/test/cases/components/form/form.mjs +317 -0
- package/test/cases/components/form/reload.mjs +188 -0
- package/test/cases/components/form/select.mjs +229 -0
- package/test/cases/components/form/state-button.mjs +130 -0
- package/test/cases/components/form/tabs.mjs +98 -0
- package/test/cases/components/form/template.mjs +189 -0
- package/test/cases/components/form/tree-select.mjs +216 -0
- package/test/cases/components/host/details.mjs +68 -0
- package/test/cases/components/host/host.mjs +70 -0
- package/test/cases/components/host/overlay.mjs +60 -0
- package/test/cases/components/host/util.mjs +79 -0
- package/test/cases/components/notify/message.mjs +39 -0
- package/test/cases/components/notify/notify.mjs +89 -0
- package/test/cases/dom/customcontrol.mjs +5 -4
- package/test/cases/math/random.mjs +0 -1
- package/test/cases/monster.mjs +1 -1
- package/test/cases/net/webconnect/message.mjs +0 -1
- package/test/cases/types/node.mjs +1 -1
- package/test/util/chai-dom.mjs +2 -2
- package/test/util/intersection-mock.mjs +69 -0
- package/test/util/jsdom.mjs +41 -25
- package/test/util/localstorage.mjs +1 -0
- package/test/util/resize-observer.mjs +29 -0
- package/test/util/websocket.mjs +4 -1
- package/test/web/import.js +16 -1
- package/test/web/test.html +28 -5
- package/test/web/tests.js +30398 -17879
|
@@ -17,28 +17,40 @@ export { extractKeys };
|
|
|
17
17
|
* @param {string} valueSeparator
|
|
18
18
|
* @returns {Map<any, any>}
|
|
19
19
|
*/
|
|
20
|
-
function extractKeys(
|
|
21
|
-
|
|
20
|
+
function extractKeys(
|
|
21
|
+
obj,
|
|
22
|
+
keyPrefix = "",
|
|
23
|
+
keySeparator = "-",
|
|
24
|
+
valueSeparator = ".",
|
|
25
|
+
) {
|
|
26
|
+
const resultMap = new Map();
|
|
22
27
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
28
|
+
function helper(currentObj, currentKeyPrefix, currentValuePrefix) {
|
|
29
|
+
for (const key in currentObj) {
|
|
30
|
+
if (
|
|
31
|
+
currentObj[key] !== null &&
|
|
32
|
+
typeof currentObj[key] === "object" &&
|
|
33
|
+
!Array.isArray(currentObj[key])
|
|
34
|
+
) {
|
|
35
|
+
const newKeyPrefix = currentKeyPrefix
|
|
36
|
+
? currentKeyPrefix + keySeparator + key.toLowerCase()
|
|
37
|
+
: key.toLowerCase();
|
|
38
|
+
const newValuePrefix = currentValuePrefix
|
|
39
|
+
? currentValuePrefix + valueSeparator + key
|
|
40
|
+
: key;
|
|
41
|
+
helper(currentObj[key], newKeyPrefix, newValuePrefix);
|
|
42
|
+
} else {
|
|
43
|
+
const finalKey = currentKeyPrefix
|
|
44
|
+
? currentKeyPrefix + keySeparator + key.toLowerCase()
|
|
45
|
+
: key.toLowerCase();
|
|
46
|
+
const finalValue = currentValuePrefix
|
|
47
|
+
? currentValuePrefix + valueSeparator + key
|
|
48
|
+
: key;
|
|
49
|
+
resultMap.set(finalKey, finalValue);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
40
53
|
|
|
41
|
-
|
|
42
|
-
|
|
54
|
+
helper(obj, keyPrefix, keyPrefix);
|
|
55
|
+
return resultMap;
|
|
43
56
|
}
|
|
44
|
-
|
|
@@ -41,50 +41,58 @@ export { initOptionsFromAttributes };
|
|
|
41
41
|
* @returns {Object} - The initialized options object.
|
|
42
42
|
* @this HTMLElement - The context of the DOM element.
|
|
43
43
|
*/
|
|
44
|
-
function initOptionsFromAttributes(
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
function initOptionsFromAttributes(
|
|
45
|
+
element,
|
|
46
|
+
options,
|
|
47
|
+
mapping = {},
|
|
48
|
+
prefix = "data-monster-option-",
|
|
49
|
+
) {
|
|
50
|
+
if (!(element instanceof HTMLElement)) return options;
|
|
51
|
+
if (!element.hasAttributes()) return options;
|
|
47
52
|
|
|
48
|
-
|
|
53
|
+
const keyMap = extractKeys(options);
|
|
49
54
|
|
|
50
|
-
|
|
55
|
+
const finder = new Pathfinder(options);
|
|
51
56
|
|
|
52
|
-
|
|
53
|
-
|
|
57
|
+
element.getAttributeNames().forEach((name) => {
|
|
58
|
+
if (!name.startsWith(prefix)) return;
|
|
54
59
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
+
// check if the attribute name is a valid option.
|
|
61
|
+
// the mapping between the attribute is simple. The dash is replaced by a dot.
|
|
62
|
+
// e.g. data-monster-url => url
|
|
63
|
+
const optionName = keyMap.get(name.substring(prefix.length).toLowerCase());
|
|
64
|
+
if (!finder.exists(optionName)) return;
|
|
60
65
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
+
if (element.hasAttribute(name)) {
|
|
67
|
+
let value = element.getAttribute(name);
|
|
68
|
+
if (
|
|
69
|
+
mapping.hasOwnProperty(optionName) &&
|
|
70
|
+
isFunction(mapping[optionName])
|
|
71
|
+
) {
|
|
72
|
+
value = mapping[optionName](value);
|
|
73
|
+
}
|
|
66
74
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
const typeOfOptionValue = typeof optionValue;
|
|
73
|
-
if (optionValue === null || optionValue === undefined) {
|
|
74
|
-
value = null;
|
|
75
|
-
} else if (typeOfOptionValue === "boolean") {
|
|
76
|
-
value = value === "true";
|
|
77
|
-
} else if (typeOfOptionValue === "number") {
|
|
78
|
-
value = Number(value);
|
|
79
|
-
} else if (typeOfOptionValue === "string") {
|
|
80
|
-
value = String(value);
|
|
81
|
-
} else if (typeOfOptionValue === "object") {
|
|
82
|
-
value = JSON.parse(value);
|
|
83
|
-
}
|
|
75
|
+
let optionValue = finder.getVia(optionName);
|
|
76
|
+
if (optionValue === null || optionValue === undefined) {
|
|
77
|
+
optionValue = value;
|
|
78
|
+
}
|
|
84
79
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
80
|
+
const typeOfOptionValue = typeof optionValue;
|
|
81
|
+
if (optionValue === null || optionValue === undefined) {
|
|
82
|
+
value = null;
|
|
83
|
+
} else if (typeOfOptionValue === "boolean") {
|
|
84
|
+
value = value === "true";
|
|
85
|
+
} else if (typeOfOptionValue === "number") {
|
|
86
|
+
value = Number(value);
|
|
87
|
+
} else if (typeOfOptionValue === "string") {
|
|
88
|
+
value = String(value);
|
|
89
|
+
} else if (typeOfOptionValue === "object") {
|
|
90
|
+
value = JSON.parse(value);
|
|
91
|
+
}
|
|
88
92
|
|
|
89
|
-
|
|
93
|
+
finder.setVia(optionName, value);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
return options;
|
|
90
98
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2023 schukai GmbH
|
|
3
|
+
* SPDX-License-Identifier: AGPL-3.0
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* In this namespace all DOM utility functions are stored.
|
|
8
|
+
*
|
|
9
|
+
* @namespace Monster.DOM.Util
|
|
10
|
+
* @memberOf Monster
|
|
11
|
+
* @author schukai GmbH
|
|
12
|
+
*/
|
|
13
|
+
const ns = {};
|
|
@@ -42,40 +42,46 @@ export { setOptionFromAttribute };
|
|
|
42
42
|
* @returns {Object} - The initialized options object.
|
|
43
43
|
* @this HTMLElement - The context of the DOM element.
|
|
44
44
|
*/
|
|
45
|
-
function setOptionFromAttribute(
|
|
46
|
-
|
|
47
|
-
|
|
45
|
+
function setOptionFromAttribute(
|
|
46
|
+
element,
|
|
47
|
+
name,
|
|
48
|
+
options,
|
|
49
|
+
mapping = {},
|
|
50
|
+
prefix = "data-monster-option-",
|
|
51
|
+
) {
|
|
52
|
+
if (!(element instanceof HTMLElement)) return options;
|
|
53
|
+
if (!element.hasAttributes()) return options;
|
|
48
54
|
|
|
49
|
-
|
|
50
|
-
|
|
55
|
+
const keyMap = extractKeys(options);
|
|
56
|
+
const finder = new Pathfinder(options);
|
|
51
57
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
58
|
+
// check if the attribute name is a valid option.
|
|
59
|
+
// the mapping between the attribute is simple. The dash is replaced by a dot.
|
|
60
|
+
// e.g. data-monster-url => url
|
|
61
|
+
const optionName = keyMap.get(name.substring(prefix.length).toLowerCase());
|
|
62
|
+
if (!finder.exists(optionName)) return;
|
|
57
63
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
64
|
+
if (!element.hasAttribute(name)) {
|
|
65
|
+
return options;
|
|
66
|
+
}
|
|
61
67
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
68
|
+
let value = element.getAttribute(name);
|
|
69
|
+
if (mapping.hasOwnProperty(optionName) && isFunction(mapping[optionName])) {
|
|
70
|
+
value = mapping[optionName](value);
|
|
71
|
+
}
|
|
66
72
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
73
|
+
const typeOfOptionValue = typeof finder.getVia(optionName);
|
|
74
|
+
if (typeOfOptionValue === "boolean") {
|
|
75
|
+
value = value === "true";
|
|
76
|
+
} else if (typeOfOptionValue === "number") {
|
|
77
|
+
value = Number(value);
|
|
78
|
+
} else if (typeOfOptionValue === "string") {
|
|
79
|
+
value = String(value);
|
|
80
|
+
} else if (typeOfOptionValue === "object") {
|
|
81
|
+
value = JSON.parse(value);
|
|
82
|
+
}
|
|
77
83
|
|
|
78
|
-
|
|
84
|
+
finder.setVia(optionName, value);
|
|
79
85
|
|
|
80
|
-
|
|
86
|
+
return options;
|
|
81
87
|
}
|
package/source/dom/util.mjs
CHANGED
|
@@ -8,7 +8,14 @@
|
|
|
8
8
|
import { getGlobal } from "../types/global.mjs";
|
|
9
9
|
import { validateString } from "../types/validate.mjs";
|
|
10
10
|
|
|
11
|
-
export {
|
|
11
|
+
export {
|
|
12
|
+
getDocument,
|
|
13
|
+
getWindow,
|
|
14
|
+
getDocumentFragmentFromString,
|
|
15
|
+
findElementWithIdUpwards,
|
|
16
|
+
getContainingDocument,
|
|
17
|
+
getRegisteredCustomElements,
|
|
18
|
+
};
|
|
12
19
|
|
|
13
20
|
/**
|
|
14
21
|
* This method fetches the document object
|
|
@@ -48,12 +55,12 @@ export { getDocument, getWindow, getDocumentFragmentFromString, findElementWithI
|
|
|
48
55
|
* @throws {Error} not supported environment
|
|
49
56
|
*/
|
|
50
57
|
function getDocument() {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
58
|
+
const document = getGlobal()?.["document"];
|
|
59
|
+
if (typeof document !== "object") {
|
|
60
|
+
throw new Error("not supported environment");
|
|
61
|
+
}
|
|
55
62
|
|
|
56
|
-
|
|
63
|
+
return document;
|
|
57
64
|
}
|
|
58
65
|
|
|
59
66
|
/**
|
|
@@ -96,12 +103,12 @@ function getDocument() {
|
|
|
96
103
|
* @throws {Error} not supported environment
|
|
97
104
|
*/
|
|
98
105
|
function getWindow() {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
106
|
+
const window = getGlobal()?.["window"];
|
|
107
|
+
if (typeof window !== "object") {
|
|
108
|
+
throw new Error("not supported environment");
|
|
109
|
+
}
|
|
103
110
|
|
|
104
|
-
|
|
111
|
+
return window;
|
|
105
112
|
}
|
|
106
113
|
|
|
107
114
|
/**
|
|
@@ -143,13 +150,13 @@ function getWindow() {
|
|
|
143
150
|
* @throws {TypeError} value is not a string
|
|
144
151
|
*/
|
|
145
152
|
function getDocumentFragmentFromString(html) {
|
|
146
|
-
|
|
153
|
+
validateString(html);
|
|
147
154
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
155
|
+
const document = getDocument();
|
|
156
|
+
const template = document.createElement("template");
|
|
157
|
+
template.innerHTML = html;
|
|
151
158
|
|
|
152
|
-
|
|
159
|
+
return template.content;
|
|
153
160
|
}
|
|
154
161
|
|
|
155
162
|
/**
|
|
@@ -165,39 +172,39 @@ function getDocumentFragmentFromString(html) {
|
|
|
165
172
|
* @copyright schukai GmbH
|
|
166
173
|
*/
|
|
167
174
|
function findElementWithIdUpwards(element, targetId) {
|
|
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
|
-
|
|
175
|
+
if (!element) {
|
|
176
|
+
return null;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// Check if the current element has the target ID
|
|
180
|
+
if (element.id === targetId) {
|
|
181
|
+
return element;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// Search within the current element's shadow root, if it exists
|
|
185
|
+
if (element.shadowRoot) {
|
|
186
|
+
const target = element.shadowRoot.getElementById(targetId);
|
|
187
|
+
if (target) {
|
|
188
|
+
return target;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// If the current element is the document.documentElement, search within the main document
|
|
193
|
+
if (element === document.documentElement) {
|
|
194
|
+
const target = document.getElementById(targetId);
|
|
195
|
+
if (target) {
|
|
196
|
+
return target;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// If the current element is inside a shadow root, search its host's ancestors
|
|
201
|
+
const rootNode = element.getRootNode();
|
|
202
|
+
if (rootNode && rootNode instanceof ShadowRoot) {
|
|
203
|
+
return findElementWithIdUpwards(rootNode.host, targetId);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
// Otherwise, search the current element's parent
|
|
207
|
+
return findElementWithIdUpwards(element.parentElement, targetId);
|
|
201
208
|
}
|
|
202
209
|
|
|
203
210
|
/**
|
|
@@ -206,30 +213,34 @@ function findElementWithIdUpwards(element, targetId) {
|
|
|
206
213
|
* @returns {HTMLElement|null}
|
|
207
214
|
*/
|
|
208
215
|
function traverseShadowRoots(element) {
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
216
|
+
let currentRoot = element.shadowRoot;
|
|
217
|
+
let currentParent = element.parentNode;
|
|
218
|
+
|
|
219
|
+
while (
|
|
220
|
+
currentParent &&
|
|
221
|
+
currentParent.nodeType !== Node.DOCUMENT_NODE &&
|
|
222
|
+
currentParent.nodeType !== Node.DOCUMENT_FRAGMENT_NODE
|
|
223
|
+
) {
|
|
224
|
+
if (currentRoot && currentRoot.parentNode) {
|
|
225
|
+
currentParent = currentRoot.parentNode;
|
|
226
|
+
currentRoot = currentParent.shadowRoot;
|
|
227
|
+
} else if (currentParent.parentNode) {
|
|
228
|
+
currentParent = currentParent.parentNode;
|
|
229
|
+
currentRoot = null;
|
|
230
|
+
} else if (
|
|
231
|
+
currentRoot &&
|
|
232
|
+
currentRoot.host &&
|
|
233
|
+
currentRoot.host.nodeType === Node.DOCUMENT_NODE
|
|
234
|
+
) {
|
|
235
|
+
currentParent = currentRoot.host;
|
|
236
|
+
currentRoot = null;
|
|
237
|
+
} else {
|
|
238
|
+
currentParent = null;
|
|
239
|
+
currentRoot = null;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
return currentParent;
|
|
233
244
|
}
|
|
234
245
|
|
|
235
246
|
/**
|
|
@@ -242,12 +253,32 @@ function traverseShadowRoots(element) {
|
|
|
242
253
|
* @since 3.36.0
|
|
243
254
|
*/
|
|
244
255
|
function getContainingDocument(element) {
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
256
|
+
if (
|
|
257
|
+
!element ||
|
|
258
|
+
!(
|
|
259
|
+
element instanceof HTMLElement ||
|
|
260
|
+
element instanceof element.ownerDocument.defaultView.HTMLElement
|
|
261
|
+
)
|
|
262
|
+
) {
|
|
263
|
+
throw new Error("Invalid argument. Expected an HTMLElement.");
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
return traverseShadowRoots(element) || null;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* Returns a list of all registered custom elements in the current document.
|
|
272
|
+
*
|
|
273
|
+
* @returns {string[]}
|
|
274
|
+
* @since 4.0.0
|
|
275
|
+
* @memberOf Monster.DOM
|
|
276
|
+
* @returns {string[]}
|
|
277
|
+
*/
|
|
278
|
+
function getRegisteredCustomElements() {
|
|
279
|
+
const customElementTags = Array.from(document.querySelectorAll('*'))
|
|
280
|
+
.map(tag => tag.tagName.toLowerCase())
|
|
281
|
+
.filter(tagName => tagName.includes('-') && customElements.get(tagName));
|
|
282
|
+
|
|
283
|
+
return Array.from(new Set(customElementTags));
|
|
253
284
|
}
|
|
@@ -23,87 +23,87 @@ export { Factory };
|
|
|
23
23
|
* @summary A small factory to create worker
|
|
24
24
|
*/
|
|
25
25
|
class Factory extends Base {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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
|
-
|
|
26
|
+
/**
|
|
27
|
+
*
|
|
28
|
+
*/
|
|
29
|
+
constructor() {
|
|
30
|
+
super();
|
|
31
|
+
this[internalSymbol] = {
|
|
32
|
+
worker: new WeakMap(),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Creates a worker from a URL
|
|
38
|
+
*
|
|
39
|
+
* @param {string|URL} url
|
|
40
|
+
* @param {function} messageHandler
|
|
41
|
+
* @param {function} errorHandler
|
|
42
|
+
* @return {Worker}
|
|
43
|
+
*/
|
|
44
|
+
createFromURL = function (url, messageHandler, errorHandler) {
|
|
45
|
+
if (url instanceof URL) {
|
|
46
|
+
url = url.toString();
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const workerClass = getGlobalFunction("Worker");
|
|
50
|
+
var worker = new workerClass(validateString(url));
|
|
51
|
+
|
|
52
|
+
if (isFunction(messageHandler)) {
|
|
53
|
+
worker.onmessage = (event) => {
|
|
54
|
+
messageHandler.call(worker, event);
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (isFunction(errorHandler)) {
|
|
59
|
+
worker.onerror = (event) => {
|
|
60
|
+
errorHandler.call(worker, event);
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return worker;
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Creates a worker from a script
|
|
69
|
+
*
|
|
70
|
+
* @param {string} content
|
|
71
|
+
* @param {function} messageHandler
|
|
72
|
+
* @param {function} errorHandler
|
|
73
|
+
* @return {Worker}
|
|
74
|
+
* @see https://developer.mozilla.org/de/docs/Web/API/URL/createObjectURL
|
|
75
|
+
*/
|
|
76
|
+
createFromScript = function (content, messageHandler, errorHandler) {
|
|
77
|
+
const blobFunction = new getGlobalFunction("Blob");
|
|
78
|
+
const blob = new blobFunction([validateString(content)], {
|
|
79
|
+
type: "script/javascript",
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
const url = getGlobalFunction("URL").createObjectURL(blob);
|
|
83
|
+
const worker = this.createFromURL(url, messageHandler, errorHandler);
|
|
84
|
+
|
|
85
|
+
this[internalSymbol]["worker"].set(worker, url);
|
|
86
|
+
|
|
87
|
+
return worker;
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Terminate the worker and call revokeObjectURL if necessary.
|
|
92
|
+
*
|
|
93
|
+
* @param worker
|
|
94
|
+
* @return {Monster.DOM.Worker.Factory}
|
|
95
|
+
*/
|
|
96
|
+
terminate(worker) {
|
|
97
|
+
const workerClass = getGlobalFunction("Worker");
|
|
98
|
+
validateInstance(worker, workerClass);
|
|
99
|
+
|
|
100
|
+
worker.terminate();
|
|
101
|
+
|
|
102
|
+
if (this[internalSymbol]["worker"].has(worker)) {
|
|
103
|
+
const url = this[internalSymbol]["worker"].get(worker);
|
|
104
|
+
URL.revokeObjectURL(url);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
return this;
|
|
108
|
+
}
|
|
109
109
|
}
|