@schukai/monster 3.51.5 → 3.52.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 +25 -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/example/data/datasource/server/restapi.mjs +7 -1
- 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 +27 -0
- package/source/components/datatable/stylesheet/dataset.mjs +27 -0
- package/source/components/datatable/stylesheet/datasource.mjs +27 -0
- package/source/components/datatable/stylesheet/datatable.mjs +27 -0
- package/source/components/datatable/stylesheet/embedded-pagination.mjs +27 -0
- package/source/components/datatable/stylesheet/filter-button.mjs +27 -0
- package/source/components/datatable/stylesheet/filter-controls-defaults.mjs +27 -0
- package/source/components/datatable/stylesheet/filter-date-range.mjs +27 -0
- package/source/components/datatable/stylesheet/filter-range.mjs +27 -0
- package/source/components/datatable/stylesheet/filter.mjs +27 -0
- package/source/components/datatable/stylesheet/namespace.mjs +13 -0
- package/source/components/datatable/stylesheet/pagination.mjs +27 -0
- package/source/components/datatable/stylesheet/select-filter.mjs +27 -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 +173 -0
- package/source/components/form/style/tree-select.pcss +81 -0
- package/source/components/form/stylesheet/action-button.mjs +27 -0
- package/source/components/form/stylesheet/api-button.mjs +27 -0
- package/source/components/form/stylesheet/button-bar.mjs +27 -0
- package/source/components/form/stylesheet/button.mjs +27 -0
- package/source/components/form/stylesheet/confirm-button.mjs +27 -0
- package/source/components/form/stylesheet/context-help.mjs +27 -0
- package/source/components/form/stylesheet/form.mjs +27 -0
- package/source/components/form/stylesheet/message-state-button.mjs +27 -0
- package/source/components/form/stylesheet/namespace.mjs +13 -0
- package/source/components/form/stylesheet/popper-button.mjs +27 -0
- package/source/components/form/stylesheet/popper.mjs +27 -0
- package/source/components/form/stylesheet/select.mjs +27 -0
- package/source/components/form/stylesheet/state-button.mjs +27 -0
- package/source/components/form/stylesheet/tabs.mjs +27 -0
- package/source/components/form/stylesheet/tree-select.mjs +27 -0
- package/source/components/form/tabs.mjs +1029 -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 +27 -0
- package/source/components/host/stylesheet/collapse.mjs +27 -0
- package/source/components/host/stylesheet/config-manager.mjs +27 -0
- package/source/components/host/stylesheet/details.mjs +27 -0
- package/source/components/host/stylesheet/host.mjs +27 -0
- package/source/components/host/stylesheet/namespace.mjs +13 -0
- package/source/components/host/stylesheet/overlay.mjs +27 -0
- package/source/components/host/stylesheet/toggle-button.mjs +27 -0
- package/source/components/host/stylesheet/viewer.mjs +27 -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 +27 -0
- package/source/components/notify/stylesheet/namespace.mjs +15 -0
- package/source/components/notify/stylesheet/notify.mjs +27 -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 +27 -0
- package/source/components/state/stylesheet/state.mjs +27 -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 +105 -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 +52 -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 +292 -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 +27 -0
- package/source/components/stylesheet/border.mjs +27 -0
- package/source/components/stylesheet/button.mjs +27 -0
- package/source/components/stylesheet/card.mjs +27 -0
- package/source/components/stylesheet/color.mjs +27 -0
- package/source/components/stylesheet/common.mjs +27 -0
- package/source/components/stylesheet/control.mjs +27 -0
- package/source/components/stylesheet/data-grid.mjs +27 -0
- package/source/components/stylesheet/display.mjs +27 -0
- package/source/components/stylesheet/floating-ui.mjs +27 -0
- package/source/components/stylesheet/form.mjs +27 -0
- package/source/components/stylesheet/host.mjs +27 -0
- package/source/components/stylesheet/link.mjs +27 -0
- package/source/components/stylesheet/namespace.mjs +13 -0
- package/source/components/stylesheet/normalize.mjs +27 -0
- package/source/components/stylesheet/popper.mjs +27 -0
- package/source/components/stylesheet/property.mjs +27 -0
- package/source/components/stylesheet/ripple.mjs +27 -0
- package/source/components/stylesheet/skeleton.mjs +27 -0
- package/source/components/stylesheet/space.mjs +27 -0
- package/source/components/stylesheet/spinner.mjs +27 -0
- package/source/components/stylesheet/table.mjs +27 -0
- package/source/components/stylesheet/theme.mjs +27 -0
- package/source/components/stylesheet/tree-menu.mjs +33 -0
- package/source/components/stylesheet/typography.mjs +27 -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 +27 -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 +35 -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 +62 -63
- 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 +177 -168
- 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 +114 -106
- 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
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright schukai GmbH and contributors 2023. All Rights Reserved.
|
|
3
|
+
* Node module: @schukai/monster
|
|
4
|
+
* This file is licensed under the AGPLv3 License.
|
|
5
|
+
* License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
|
|
6
|
+
*/
|
|
7
|
+
import { instanceSymbol } from "../../constants.mjs";
|
|
8
|
+
import { addAttributeToken } from "../../dom/attributes.mjs";
|
|
9
|
+
import {
|
|
10
|
+
ATTRIBUTE_ERRORMESSAGE,
|
|
11
|
+
ATTRIBUTE_ROLE,
|
|
12
|
+
} from "../../dom/constants.mjs";
|
|
13
|
+
import {
|
|
14
|
+
assembleMethodSymbol,
|
|
15
|
+
attributeObserverSymbol,
|
|
16
|
+
CustomElement,
|
|
17
|
+
initMethodSymbol,
|
|
18
|
+
registerCustomElement,
|
|
19
|
+
} from "../../dom/customelement.mjs";
|
|
20
|
+
import { isArray, isString } from "../../types/is.mjs";
|
|
21
|
+
import { ATTRIBUTE_FORM_RELOAD, ATTRIBUTE_FORM_URL } from "./constants.mjs";
|
|
22
|
+
import { loadAndAssignContent } from "./util/fetch.mjs";
|
|
23
|
+
|
|
24
|
+
export { Template };
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* @private
|
|
28
|
+
* @type {symbol}
|
|
29
|
+
*/
|
|
30
|
+
const intersectionObserverWasInitialized = Symbol("wasInitialized");
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* This CustomElement `monster-template` reloads a content and adds it to the ShadowRoot.
|
|
34
|
+
* The content is set to not visible,
|
|
35
|
+
*
|
|
36
|
+
* <img src="./images/template.png">
|
|
37
|
+
*
|
|
38
|
+
* You can create this control either by specifying the HTML tag `<monster-template />` directly in the HTML or using
|
|
39
|
+
* Javascript via the `document.createElement('monster-template');` method.
|
|
40
|
+
*
|
|
41
|
+
* ```html
|
|
42
|
+
* <monster-template></monster-template>
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
45
|
+
* Or you can create this CustomControl directly in Javascript:
|
|
46
|
+
*
|
|
47
|
+
* ```js
|
|
48
|
+
* import {Template} from '@schukai/component-form/source/template.js';
|
|
49
|
+
* document.createElement('monster-template');
|
|
50
|
+
* ```
|
|
51
|
+
*
|
|
52
|
+
* The content will not be loaded until this element is visible. If the element is invisible again and becomes visible again,
|
|
53
|
+
* the content is reloaded as well. you can disable this behavior by setting `reload=onshow`. *
|
|
54
|
+
*
|
|
55
|
+
* @startuml template.png
|
|
56
|
+
* skinparam monochrome true
|
|
57
|
+
* skinparam shadowing false
|
|
58
|
+
* HTMLElement <|-- CustomElement
|
|
59
|
+
* CustomElement <|-- CustomControl
|
|
60
|
+
* CustomControl <|-- Template
|
|
61
|
+
* @enduml
|
|
62
|
+
*
|
|
63
|
+
* @since 1.11.0
|
|
64
|
+
* @copyright schukai GmbH
|
|
65
|
+
* @memberOf Monster.Components.Form
|
|
66
|
+
* @summary A template control
|
|
67
|
+
* @fires Monster.Components.Form.event:monster-fetched
|
|
68
|
+
*/
|
|
69
|
+
class Template extends CustomElement {
|
|
70
|
+
/**
|
|
71
|
+
* This method is called by the `instanceof` operator.
|
|
72
|
+
* @returns {symbol}
|
|
73
|
+
* @since 2.1.0
|
|
74
|
+
*/
|
|
75
|
+
static get [instanceSymbol]() {
|
|
76
|
+
return Symbol.for("@schukai/component-form/template");
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* To set the options via the html tag the attribute `data-monster-options` must be used.
|
|
81
|
+
* @see {@link https://monsterjs.org/en/doc/#configurate-a-monster-control}
|
|
82
|
+
*
|
|
83
|
+
* The individual configuration values can be found in the table.
|
|
84
|
+
*
|
|
85
|
+
* @property {Object} templates Template definitions
|
|
86
|
+
* @property {string} templates.main Main template
|
|
87
|
+
* @property {string} url=undefined
|
|
88
|
+
* @property {string} reload=undefined currently the only value defined is `onshow`. Currently the only value defined is onshow. this removes the IntersectionObserver. this means that the content is only loaded once. reloading of the content does not occur.
|
|
89
|
+
* @property {Monster.Components.Form.Processor[]} processors
|
|
90
|
+
* @property {Object} fetch Fetch [see Using Fetch mozilla.org](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch)
|
|
91
|
+
* @property {String} fetch.redirect=error
|
|
92
|
+
* @property {String} fetch.method=GET
|
|
93
|
+
* @property {String} fetch.mode=same-origin
|
|
94
|
+
* @property {String} fetch.credentials=same-origin
|
|
95
|
+
* @property {Object} fetch.headers={"accept":"text/html"}}
|
|
96
|
+
*/
|
|
97
|
+
get defaults() {
|
|
98
|
+
return Object.assign(
|
|
99
|
+
{},
|
|
100
|
+
super.defaults,
|
|
101
|
+
{
|
|
102
|
+
templates: {
|
|
103
|
+
main: getTemplate(),
|
|
104
|
+
},
|
|
105
|
+
url: undefined,
|
|
106
|
+
reload: undefined,
|
|
107
|
+
processors: [],
|
|
108
|
+
fetch: {
|
|
109
|
+
redirect: "error",
|
|
110
|
+
method: "GET",
|
|
111
|
+
mode: "same-origin",
|
|
112
|
+
credentials: "same-origin",
|
|
113
|
+
headers: {
|
|
114
|
+
accept: "text/html",
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
initOptionsFromArguments.call(this),
|
|
119
|
+
);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* This method determines which attributes are to be monitored by `attributeChangedCallback()`.
|
|
124
|
+
*
|
|
125
|
+
* @return {string[]}
|
|
126
|
+
*/
|
|
127
|
+
static get observedAttributes() {
|
|
128
|
+
const list = super.observedAttributes;
|
|
129
|
+
list.push(ATTRIBUTE_FORM_URL);
|
|
130
|
+
return list;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
*
|
|
135
|
+
*/
|
|
136
|
+
[initMethodSymbol]() {;
|
|
137
|
+
super[initMethodSymbol]();
|
|
138
|
+
|
|
139
|
+
// data-monster-options
|
|
140
|
+
this[attributeObserverSymbol][ATTRIBUTE_FORM_URL] = (url) => {
|
|
141
|
+
if (this.hasAttribute(ATTRIBUTE_FORM_URL)) {
|
|
142
|
+
this.setOption("url", new URL(url, document.location).toString());
|
|
143
|
+
} else {
|
|
144
|
+
this.setOption("url", undefined);
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* This method is called internal and should not be called directly.
|
|
151
|
+
* @throws {Error} missing default slot
|
|
152
|
+
* @throws {Error} no shadow-root is defined
|
|
153
|
+
* @throws {Error} missing url
|
|
154
|
+
* @throws {Error} we won't be able to read the data
|
|
155
|
+
* @throws {Error} request failed
|
|
156
|
+
* @throws {Error} not found
|
|
157
|
+
* @throws {Error} undefined status or type
|
|
158
|
+
* @fires Monster.Components.Form.event:monster-fetched
|
|
159
|
+
* @return {Monster.Components.Form.Form}
|
|
160
|
+
*/
|
|
161
|
+
[assembleMethodSymbol]() {;
|
|
162
|
+
super[assembleMethodSymbol]();
|
|
163
|
+
initIntersectionObserver.call(this);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* This method is called internal and should not be called directly.
|
|
168
|
+
*
|
|
169
|
+
* @return {CSSStyleSheet[]}
|
|
170
|
+
*/
|
|
171
|
+
static getCSSStyleSheet() {
|
|
172
|
+
return [];
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* This method is called internal and should not be called directly.
|
|
177
|
+
*
|
|
178
|
+
* @return {string}
|
|
179
|
+
*/
|
|
180
|
+
static getTag() {
|
|
181
|
+
return "monster-template";
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* load content from url
|
|
186
|
+
*
|
|
187
|
+
* It is important to know that with this function the loading is executed
|
|
188
|
+
* directly. it is loaded as well when the element is not visible.
|
|
189
|
+
*
|
|
190
|
+
* @param {string|undefined} url
|
|
191
|
+
*/
|
|
192
|
+
fetch(url) {
|
|
193
|
+
if (isString(url) || url instanceof URL) {
|
|
194
|
+
this.setAttribute(ATTRIBUTE_FORM_URL, `${url}`);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
return loadContent.call(this);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* @typedef {Object} Processor
|
|
203
|
+
* @property {String} destination
|
|
204
|
+
* @property {String} source
|
|
205
|
+
* @memberOf Monster.Components.Form
|
|
206
|
+
* @since 1.11.8
|
|
207
|
+
*/
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* This attribute can be used to pass a URL to this select.
|
|
211
|
+
*
|
|
212
|
+
* ```
|
|
213
|
+
* <monster-select data-monster-url="https://example.com/"></monster-select>
|
|
214
|
+
* ```
|
|
215
|
+
*
|
|
216
|
+
* @private
|
|
217
|
+
* @return {object}
|
|
218
|
+
*/
|
|
219
|
+
function initOptionsFromArguments() {;
|
|
220
|
+
const options = {};
|
|
221
|
+
|
|
222
|
+
const url = this.getAttribute(ATTRIBUTE_FORM_URL);
|
|
223
|
+
|
|
224
|
+
if (isString(url)) {
|
|
225
|
+
options["url"] = new URL(url, document.location).toString();
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
if (this.hasAttribute(ATTRIBUTE_FORM_RELOAD)) {
|
|
229
|
+
options["reload"] = this.getAttribute(ATTRIBUTE_FORM_RELOAD).toLowerCase();
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
return options;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* @private
|
|
237
|
+
* @throws {Error} missing default slot
|
|
238
|
+
* @throws {Error} no shadow-root is defined
|
|
239
|
+
* @throws {Error} missing url
|
|
240
|
+
* @throws {Error} we won't be able to read the data
|
|
241
|
+
* @throws {Error} request failed
|
|
242
|
+
* @throws {Error} not found
|
|
243
|
+
* @throws {Error} undefined status or type
|
|
244
|
+
* @fires Monster.Components.Form.event:monster-fetched
|
|
245
|
+
*/
|
|
246
|
+
function initIntersectionObserver() {;
|
|
247
|
+
|
|
248
|
+
if (this[intersectionObserverWasInitialized] === true) {
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
this[intersectionObserverWasInitialized] = true;
|
|
253
|
+
|
|
254
|
+
const options = {
|
|
255
|
+
threshold: [0.5],
|
|
256
|
+
};
|
|
257
|
+
|
|
258
|
+
const callback = (entries, observer) => {
|
|
259
|
+
for (const [, entry] of entries.entries()) {
|
|
260
|
+
if (entry.isIntersecting === true) {
|
|
261
|
+
if (this.getOption("reload") === "onshow") {
|
|
262
|
+
observer.disconnect();
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
try {
|
|
266
|
+
loadContent.call(this);
|
|
267
|
+
} catch (e) {
|
|
268
|
+
addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, e.toString());
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
};
|
|
273
|
+
|
|
274
|
+
const observer = new IntersectionObserver(callback, options);
|
|
275
|
+
observer.observe(this);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* @private
|
|
280
|
+
* @throws {Error} missing default slot
|
|
281
|
+
* @throws {Error} no shadow-root is defined
|
|
282
|
+
* @throws {Error} missing url
|
|
283
|
+
* @throws {Error} we won't be able to read the data
|
|
284
|
+
* @throws {Error} request failed
|
|
285
|
+
* @throws {Error} not found
|
|
286
|
+
* @throws {Error} undefined status or type
|
|
287
|
+
* @throws {Error} client error
|
|
288
|
+
* @throws {Error} undefined status or type
|
|
289
|
+
* @throws {TypeError} value is not an instance of
|
|
290
|
+
* @throws {TypeError} value is not a string
|
|
291
|
+
* @fires Monster.Components.Form.event:monster-fetched
|
|
292
|
+
*/
|
|
293
|
+
function loadContent() {;
|
|
294
|
+
|
|
295
|
+
if (!this.shadowRoot) {
|
|
296
|
+
throw new Error("no shadow-root is defined");
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
const url = this.getOption("url", undefined);
|
|
300
|
+
if (!isString(url) || url === "") {
|
|
301
|
+
throw new Error("missing url");
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
const options = this.getOption("fetch", {});
|
|
305
|
+
|
|
306
|
+
const defaultSlot = this.shadowRoot.querySelector("slot[name=default]");
|
|
307
|
+
if (!(defaultSlot instanceof HTMLElement)) {
|
|
308
|
+
throw new Error("missing default slot");
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
defaultSlot.style.display = "block";
|
|
312
|
+
|
|
313
|
+
let container = this.shadowRoot.querySelector(
|
|
314
|
+
`[${ATTRIBUTE_ROLE}=container]`,
|
|
315
|
+
);
|
|
316
|
+
if (!(container instanceof HTMLElement)) {
|
|
317
|
+
container = document.createElement("div");
|
|
318
|
+
container.style.display = "none";
|
|
319
|
+
container.setAttribute(ATTRIBUTE_ROLE, "container");
|
|
320
|
+
this.shadowRoot.appendChild(container);
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
loadAndAssignContent(container, url, options)
|
|
324
|
+
.then(() => {
|
|
325
|
+
defaultSlot.style.display = "none";
|
|
326
|
+
runProcessors.call(this);
|
|
327
|
+
})
|
|
328
|
+
.catch((e) => {
|
|
329
|
+
throw e;
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* @private
|
|
335
|
+
* @return {runProcessors}
|
|
336
|
+
*/
|
|
337
|
+
function runProcessors() {;
|
|
338
|
+
|
|
339
|
+
const processors = this.getOption("processors");
|
|
340
|
+
if (!isArray(processors)) return;
|
|
341
|
+
|
|
342
|
+
for (const [, processor] of processors.entries()) {
|
|
343
|
+
const source = processor?.source;
|
|
344
|
+
const destination = processor?.destination;
|
|
345
|
+
|
|
346
|
+
if (isString(source) && isString(destination)) {
|
|
347
|
+
const sourceNode = this.shadowRoot.querySelector(source);
|
|
348
|
+
const destinationNode = document.querySelector(destination);
|
|
349
|
+
|
|
350
|
+
if (
|
|
351
|
+
sourceNode instanceof HTMLElement &&
|
|
352
|
+
destinationNode instanceof HTMLElement
|
|
353
|
+
) {
|
|
354
|
+
destinationNode.innerHTML = sourceNode.cloneNode(true).innerHTML;
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
return this;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
/**
|
|
363
|
+
* @private
|
|
364
|
+
* @return {string}
|
|
365
|
+
*/
|
|
366
|
+
function getTemplate() {
|
|
367
|
+
// language=HTML
|
|
368
|
+
return `
|
|
369
|
+
<slot name="default"></slot>
|
|
370
|
+
`;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
registerCustomElement(Template);
|