@domql/element 3.1.2 → 3.2.7
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/README.md +4 -6
- package/children.js +45 -18
- package/create.js +58 -46
- package/define.js +1 -1
- package/dist/cjs/children.js +43 -13
- package/dist/cjs/create.js +57 -27
- package/dist/cjs/define.js +1 -1
- package/dist/cjs/event/animationFrame.js +96 -0
- package/dist/cjs/event/can.js +28 -0
- package/dist/cjs/event/index.js +20 -0
- package/dist/cjs/event/on.js +84 -0
- package/dist/cjs/event/store.js +27 -0
- package/dist/cjs/extend.js +88 -0
- package/dist/cjs/index.js +9 -6
- package/dist/cjs/iterate.js +89 -33
- package/dist/cjs/methods/set.js +5 -0
- package/dist/cjs/methods/v2.js +1 -1
- package/dist/cjs/mixins/attr.js +3 -2
- package/dist/cjs/mixins/classList.js +11 -1
- package/dist/cjs/mixins/content.js +72 -0
- package/dist/cjs/mixins/html.js +1 -2
- package/dist/cjs/mixins/registry.js +2 -2
- package/dist/cjs/mixins/scope.js +1 -1
- package/dist/cjs/mixins/state.js +4 -4
- package/dist/cjs/mixins/style.js +11 -2
- package/dist/cjs/mixins/text.js +9 -5
- package/dist/cjs/node.js +22 -19
- package/dist/cjs/render/append.js +72 -0
- package/dist/cjs/render/cache.js +80 -0
- package/dist/cjs/render/create.js +25 -0
- package/dist/cjs/render/index.js +20 -0
- package/dist/cjs/set.js +33 -40
- package/dist/cjs/update.js +100 -69
- package/dist/cjs/utils/applyParam.js +7 -7
- package/dist/cjs/utils/extendUtils.js +132 -0
- package/dist/cjs/utils/index.js +2 -0
- package/dist/cjs/utils/propEvents.js +56 -0
- package/dist/esm/children.js +44 -14
- package/dist/esm/create.js +58 -27
- package/dist/esm/define.js +1 -1
- package/dist/esm/event/animationFrame.js +76 -0
- package/dist/esm/event/can.js +8 -0
- package/dist/esm/event/index.js +3 -0
- package/dist/esm/event/on.js +64 -0
- package/dist/esm/event/store.js +7 -0
- package/dist/esm/extend.js +74 -0
- package/dist/esm/index.js +8 -6
- package/dist/esm/iterate.js +90 -35
- package/dist/esm/methods/set.js +10 -0
- package/dist/esm/methods/v2.js +1 -1
- package/dist/esm/mixins/attr.js +4 -3
- package/dist/esm/mixins/classList.js +11 -1
- package/dist/esm/mixins/content.js +52 -0
- package/dist/esm/mixins/html.js +1 -2
- package/dist/esm/mixins/registry.js +1 -1
- package/dist/esm/mixins/scope.js +1 -1
- package/dist/esm/mixins/state.js +5 -5
- package/dist/esm/mixins/style.js +12 -3
- package/dist/esm/mixins/text.js +10 -6
- package/dist/esm/node.js +22 -19
- package/dist/esm/render/append.js +52 -0
- package/dist/esm/render/cache.js +60 -0
- package/dist/esm/render/create.js +5 -0
- package/dist/esm/render/index.js +3 -0
- package/dist/esm/set.js +34 -41
- package/dist/esm/update.js +100 -71
- package/dist/esm/utils/applyParam.js +8 -8
- package/dist/esm/utils/extendUtils.js +119 -0
- package/dist/esm/utils/index.js +1 -0
- package/dist/esm/utils/propEvents.js +36 -0
- package/dist/iife/index.js +4718 -0
- package/extend.js +95 -0
- package/index.js +9 -6
- package/iterate.js +100 -38
- package/node.js +25 -23
- package/package.json +44 -20
- package/set.js +28 -32
- package/update.js +111 -82
- package/__tests__/checkIfOnUpdate.test.js +0 -103
- package/__tests__/children.test.js +0 -213
- package/__tests__/define.test.js +0 -75
- package/__tests__/inheritStateUpdates.test.js +0 -79
- package/__tests__/renderElement.test.js +0 -131
- package/__tests__/resetElement.test.js +0 -44
- package/__tests__/set.test.js +0 -316
- package/__tests__/throughExecProps.test.js +0 -86
- package/__tests__/throughInitialDefine.test.js +0 -104
- package/__tests__/throughInitialExec.test.js +0 -92
- package/__tests__/throughUpdatedDefine.test.js +0 -92
- package/__tests__/throughUpdatedExec.test.js +0 -110
- package/__tests__/tree.test.js +0 -15
- package/__tests__/update.test.js +0 -256
- package/dist/cjs/__tests__/checkIfOnUpdate.test.js +0 -73
- package/dist/cjs/__tests__/children.test.js +0 -177
- package/dist/cjs/__tests__/define.test.js +0 -75
- package/dist/cjs/__tests__/inheritStateUpdates.test.js +0 -62
- package/dist/cjs/__tests__/renderElement.test.js +0 -138
- package/dist/cjs/__tests__/resetElement.test.js +0 -35
- package/dist/cjs/__tests__/set.test.js +0 -256
- package/dist/cjs/__tests__/throughExecProps.test.js +0 -62
- package/dist/cjs/__tests__/throughInitialDefine.test.js +0 -79
- package/dist/cjs/__tests__/throughInitialExec.test.js +0 -73
- package/dist/cjs/__tests__/throughUpdatedDefine.test.js +0 -69
- package/dist/cjs/__tests__/throughUpdatedExec.test.js +0 -84
- package/dist/cjs/__tests__/tree.test.js +0 -11
- package/dist/cjs/__tests__/update.test.js +0 -222
- package/dist/cjs/package.json +0 -4
- package/dist/esm/__tests__/checkIfOnUpdate.test.js +0 -73
- package/dist/esm/__tests__/children.test.js +0 -177
- package/dist/esm/__tests__/define.test.js +0 -53
- package/dist/esm/__tests__/inheritStateUpdates.test.js +0 -62
- package/dist/esm/__tests__/renderElement.test.js +0 -116
- package/dist/esm/__tests__/resetElement.test.js +0 -35
- package/dist/esm/__tests__/set.test.js +0 -256
- package/dist/esm/__tests__/throughExecProps.test.js +0 -62
- package/dist/esm/__tests__/throughInitialDefine.test.js +0 -79
- package/dist/esm/__tests__/throughInitialExec.test.js +0 -73
- package/dist/esm/__tests__/throughUpdatedDefine.test.js +0 -69
- package/dist/esm/__tests__/throughUpdatedExec.test.js +0 -84
- package/dist/esm/__tests__/tree.test.js +0 -11
- package/dist/esm/__tests__/update.test.js +0 -222
- package/methods/set.js +0 -63
- package/methods/v2.js +0 -83
- package/mixins/attr.js +0 -32
- package/mixins/classList.js +0 -54
- package/mixins/data.js +0 -26
- package/mixins/html.js +0 -21
- package/mixins/index.js +0 -23
- package/mixins/registry.js +0 -46
- package/mixins/scope.js +0 -23
- package/mixins/state.js +0 -19
- package/mixins/style.js +0 -16
- package/mixins/text.js +0 -26
- package/utils/applyParam.js +0 -34
- package/utils/index.js +0 -3
package/dist/esm/methods/v2.js
CHANGED
|
@@ -44,7 +44,7 @@ const log = function(...args) {
|
|
|
44
44
|
args.forEach((v) => console.log(`%c${v}:
|
|
45
45
|
`, "font-weight: bold", element[v]));
|
|
46
46
|
} else {
|
|
47
|
-
console.log(__ref
|
|
47
|
+
console.log(__ref?.path);
|
|
48
48
|
const keys2 = element.keys();
|
|
49
49
|
keys2.forEach((v) => console.log(`%c${v}:
|
|
50
50
|
`, "font-weight: bold", element[v]));
|
package/dist/esm/mixins/attr.js
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import { deepMerge, exec, isNot
|
|
1
|
+
import { deepMerge, exec, isNot } from "@domql/utils";
|
|
2
2
|
import { report } from "@domql/report";
|
|
3
3
|
function attr(params, element, node) {
|
|
4
4
|
const { __ref: ref, props } = element;
|
|
5
5
|
const { __attr } = ref;
|
|
6
|
-
if (isNot("object")) report("HTMLInvalidAttr", params);
|
|
6
|
+
if (isNot(params)("object")) report("HTMLInvalidAttr", params);
|
|
7
7
|
if (params) {
|
|
8
8
|
const attrs = exec(params, element);
|
|
9
9
|
if (props.attr) deepMerge(attrs, props.attr);
|
|
10
10
|
for (const attr2 in attrs) {
|
|
11
11
|
const val = exec(attrs[attr2], element);
|
|
12
|
-
if (val
|
|
12
|
+
if (val === __attr[attr2]) continue;
|
|
13
|
+
if (val !== false && val !== void 0 && val !== null && node.setAttribute) {
|
|
13
14
|
node.setAttribute(attr2, val);
|
|
14
15
|
} else if (node.removeAttribute) node.removeAttribute(attr2);
|
|
15
16
|
__attr[attr2] = val;
|
|
@@ -29,7 +29,17 @@ const classList = (params, element) => {
|
|
|
29
29
|
};
|
|
30
30
|
const applyClassListOnNode = (params, element, node) => {
|
|
31
31
|
const className = classList(params, element);
|
|
32
|
-
|
|
32
|
+
const { __ref } = element;
|
|
33
|
+
if (className === __ref.__className) return className;
|
|
34
|
+
__ref.__className = className;
|
|
35
|
+
if (node && typeof node.setAttribute === "function") {
|
|
36
|
+
node.setAttribute("class", className);
|
|
37
|
+
} else if (node) {
|
|
38
|
+
try {
|
|
39
|
+
node.className = className;
|
|
40
|
+
} catch (e) {
|
|
41
|
+
}
|
|
42
|
+
}
|
|
33
43
|
return className;
|
|
34
44
|
};
|
|
35
45
|
function applyClasslist(params, element, node) {
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { isFunction, setContentKey } from "@domql/utils";
|
|
2
|
+
import { set } from "../set.js";
|
|
3
|
+
const updateContent = function(params, options) {
|
|
4
|
+
const element = this;
|
|
5
|
+
const ref = element.__ref;
|
|
6
|
+
const contentKey = ref.contentElementKey;
|
|
7
|
+
if (!element[contentKey]) return;
|
|
8
|
+
if (element[contentKey].update) element[contentKey].update(params, options);
|
|
9
|
+
};
|
|
10
|
+
const removeContent = function(el, opts = {}) {
|
|
11
|
+
const element = el || this;
|
|
12
|
+
const { __ref: ref } = element;
|
|
13
|
+
const contentElementKey = setContentKey(element, opts);
|
|
14
|
+
if (opts.contentElementKey !== "content") opts.contentElementKey = "content";
|
|
15
|
+
if (element[contentElementKey]) {
|
|
16
|
+
if (element[contentElementKey].node && element.node) {
|
|
17
|
+
if (element[contentElementKey].tag === "fragment")
|
|
18
|
+
element.node.innerHTML = "";
|
|
19
|
+
else {
|
|
20
|
+
const contentNode = element[contentElementKey].node;
|
|
21
|
+
if (contentNode.parentNode === element.node)
|
|
22
|
+
element.node.removeChild(element[contentElementKey].node);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
const { __cached } = ref;
|
|
26
|
+
if (__cached && __cached[contentElementKey]) {
|
|
27
|
+
if (__cached[contentElementKey].tag === "fragment")
|
|
28
|
+
__cached[contentElementKey].parent.node.innerHTML = "";
|
|
29
|
+
else if (__cached[contentElementKey] && isFunction(__cached[contentElementKey].remove))
|
|
30
|
+
__cached[contentElementKey].remove();
|
|
31
|
+
}
|
|
32
|
+
ref.__children.splice(ref.__children.indexOf(element[contentElementKey]), 1);
|
|
33
|
+
delete element[contentElementKey];
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
function setContent(param, element, node, opts) {
|
|
37
|
+
const contentElementKey = setContentKey(element, opts);
|
|
38
|
+
if (param && element) {
|
|
39
|
+
if (element[contentElementKey]?.update) {
|
|
40
|
+
element[contentElementKey].update({}, opts);
|
|
41
|
+
} else {
|
|
42
|
+
set.call(element, param, opts);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
var content_default = setContent;
|
|
47
|
+
export {
|
|
48
|
+
content_default as default,
|
|
49
|
+
removeContent,
|
|
50
|
+
setContent,
|
|
51
|
+
updateContent
|
|
52
|
+
};
|
package/dist/esm/mixins/html.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { exec } from "@domql/utils";
|
|
2
2
|
function html(param, element, node) {
|
|
3
|
-
|
|
4
|
-
const prop = exec(param, element) || exec((_a = element == null ? void 0 : element.props) == null ? void 0 : _a.html, element);
|
|
3
|
+
const prop = exec(element?.props?.html || param, element);
|
|
5
4
|
const { __ref } = element;
|
|
6
5
|
if (prop !== __ref.__html) {
|
|
7
6
|
if (node.nodeName === "SVG") node.textContent = prop;
|
package/dist/esm/mixins/scope.js
CHANGED
package/dist/esm/mixins/state.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
const state2 =
|
|
1
|
+
import { exec, isObject, STATE_METHODS } from "@domql/utils";
|
|
2
|
+
function state(params, element, node) {
|
|
3
|
+
const state2 = exec(params, element);
|
|
4
4
|
if (isObject(state2)) {
|
|
5
5
|
for (const param in state2) {
|
|
6
|
-
if (STATE_METHODS.
|
|
7
|
-
if (!Object.hasOwnProperty.call(state2, param)) continue;
|
|
6
|
+
if (STATE_METHODS.has(param)) continue;
|
|
7
|
+
if (!Object.prototype.hasOwnProperty.call(state2, param)) continue;
|
|
8
8
|
}
|
|
9
9
|
}
|
|
10
10
|
return element;
|
package/dist/esm/mixins/style.js
CHANGED
|
@@ -1,9 +1,18 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { exec, isObject } from "@domql/utils";
|
|
2
2
|
import { report } from "@domql/report";
|
|
3
3
|
function style(params, element, node) {
|
|
4
4
|
if (params) {
|
|
5
|
-
if (isObject(params))
|
|
6
|
-
|
|
5
|
+
if (isObject(params)) {
|
|
6
|
+
const { __ref } = element;
|
|
7
|
+
if (!__ref.__style) __ref.__style = {};
|
|
8
|
+
const cache = __ref.__style;
|
|
9
|
+
for (const prop in params) {
|
|
10
|
+
const val = exec(params[prop], element);
|
|
11
|
+
if (val === cache[prop]) continue;
|
|
12
|
+
cache[prop] = val;
|
|
13
|
+
node.style[prop] = val;
|
|
14
|
+
}
|
|
15
|
+
} else report("HTMLInvalidStyles", params);
|
|
7
16
|
}
|
|
8
17
|
}
|
|
9
18
|
var style_default = style;
|
package/dist/esm/mixins/text.js
CHANGED
|
@@ -1,18 +1,22 @@
|
|
|
1
1
|
import { create } from "../create.js";
|
|
2
|
-
import { exec, isString } from "@domql/utils";
|
|
3
|
-
|
|
4
|
-
let prop = exec(
|
|
2
|
+
import { exec, isString, SVG_TAGS } from "@domql/utils";
|
|
3
|
+
function text(param, element, node) {
|
|
4
|
+
let prop = exec(element.props.text || param, element);
|
|
5
5
|
if (isString(prop) && prop.includes("{{")) {
|
|
6
|
-
prop = element.call("replaceLiteralsWithObjectFields", prop);
|
|
6
|
+
prop = element.call("replaceLiteralsWithObjectFields", prop, element.state);
|
|
7
7
|
}
|
|
8
8
|
if (element.tag === "string") {
|
|
9
9
|
node.nodeValue = prop;
|
|
10
|
-
} else if (param !== void 0
|
|
10
|
+
} else if (param !== void 0 && param !== null) {
|
|
11
|
+
if (SVG_TAGS.has(element.tag)) {
|
|
12
|
+
if (node) node.textContent = prop;
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
11
15
|
if (element.__text) {
|
|
12
16
|
if (element.__text.text === prop) return;
|
|
13
17
|
element.__text.text = prop;
|
|
14
18
|
if (element.__text.node) element.__text.node.nodeValue = prop;
|
|
15
|
-
} else
|
|
19
|
+
} else create({ tag: "string", text: prop }, element, "__text");
|
|
16
20
|
}
|
|
17
21
|
}
|
|
18
22
|
var text_default = text;
|
package/dist/esm/node.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { isFunction, isMethod, isObject, isUndefined } from "@domql/utils";
|
|
2
|
-
import { applyEventsOnNode, triggerEventOn } from "
|
|
3
|
-
import {
|
|
2
|
+
import { applyEventsOnNode, triggerEventOn } from "./event/index.js";
|
|
3
|
+
import { propagateEventsFromProps, propagateEventsFromElement } from "./utils/propEvents.js";
|
|
4
|
+
import { cacheNode } from "./render/index.js";
|
|
4
5
|
import { create } from "./create.js";
|
|
5
6
|
import {
|
|
6
7
|
throughExecProps,
|
|
@@ -11,8 +12,8 @@ import { REGISTRY } from "./mixins/index.js";
|
|
|
11
12
|
import { applyParam } from "./utils/applyParam.js";
|
|
12
13
|
import setChildren from "./children.js";
|
|
13
14
|
import { setContent } from "./set.js";
|
|
14
|
-
const ENV =
|
|
15
|
-
const createNode =
|
|
15
|
+
const ENV = process.env.NODE_ENV;
|
|
16
|
+
const createNode = (element, opts) => {
|
|
16
17
|
let { node, tag, __ref: ref } = element;
|
|
17
18
|
if (!ref.__if) return element;
|
|
18
19
|
let isNewNode;
|
|
@@ -21,42 +22,44 @@ const createNode = async (element, opts) => {
|
|
|
21
22
|
if (tag === "shadow") {
|
|
22
23
|
node = element.node = element.parent.node.attachShadow({ mode: "open" });
|
|
23
24
|
} else node = element.node = cacheNode(element);
|
|
24
|
-
|
|
25
|
+
triggerEventOn("attachNode", element, opts);
|
|
25
26
|
}
|
|
26
27
|
if (ENV === "test" || ENV === "development" || opts.alowRefReference) {
|
|
27
28
|
node.ref = element;
|
|
28
29
|
if (isFunction(node.setAttribute)) node.setAttribute("key", element.key);
|
|
29
30
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
throughExecProps(element);
|
|
32
|
+
throughInitialDefine(element);
|
|
33
|
+
throughInitialExec(element);
|
|
34
|
+
propagateEventsFromProps(element);
|
|
35
|
+
propagateEventsFromElement(element);
|
|
36
|
+
applyEventsOnNode(element, { isNewNode, ...opts });
|
|
34
37
|
for (const param in element) {
|
|
35
38
|
const value = element[param];
|
|
36
|
-
if (!Object.hasOwnProperty.call(element, param) ||
|
|
39
|
+
if (!Object.prototype.hasOwnProperty.call(element, param) || value === void 0 || isMethod(param, element) || isObject(REGISTRY[param]) || param.length > 2 && param.charCodeAt(0) === 111 && param.charCodeAt(1) === 110 && param.charCodeAt(2) >= 65 && param.charCodeAt(2) <= 90) {
|
|
37
40
|
continue;
|
|
38
41
|
}
|
|
39
|
-
const isElement =
|
|
42
|
+
const isElement = applyParam(param, element, opts);
|
|
40
43
|
if (isElement) {
|
|
41
44
|
const { hasDefine, hasContextDefine } = isElement;
|
|
42
45
|
if (element[param] && !hasDefine && !hasContextDefine) {
|
|
43
|
-
const createAsync =
|
|
44
|
-
|
|
46
|
+
const createAsync = () => {
|
|
47
|
+
create(value, element, param, opts);
|
|
45
48
|
};
|
|
46
49
|
if (element.props && element.props.lazyLoad || opts.lazyLoad) {
|
|
47
|
-
window.requestAnimationFrame(
|
|
48
|
-
|
|
50
|
+
window.requestAnimationFrame(() => {
|
|
51
|
+
createAsync();
|
|
49
52
|
if (!opts.preventUpdateListener) {
|
|
50
|
-
|
|
53
|
+
triggerEventOn("lazyLoad", element, opts);
|
|
51
54
|
}
|
|
52
55
|
});
|
|
53
|
-
} else
|
|
56
|
+
} else createAsync();
|
|
54
57
|
}
|
|
55
58
|
}
|
|
56
59
|
}
|
|
57
|
-
const content = element.children ?
|
|
60
|
+
const content = element.children ? setChildren(element.children, element, opts) : element.children || element.content;
|
|
58
61
|
if (content) {
|
|
59
|
-
|
|
62
|
+
setContent(content, element, opts);
|
|
60
63
|
}
|
|
61
64
|
return element;
|
|
62
65
|
};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
const appendNode = (node, parentNode) => {
|
|
2
|
+
try {
|
|
3
|
+
parentNode.appendChild(node);
|
|
4
|
+
return node;
|
|
5
|
+
} catch (e) {
|
|
6
|
+
console.error("Does not support to append", parentNode, node);
|
|
7
|
+
}
|
|
8
|
+
};
|
|
9
|
+
const insertNodeAfter = (node, siblingNode, parentNode) => {
|
|
10
|
+
if (!node) {
|
|
11
|
+
throw new Error("Node is required");
|
|
12
|
+
}
|
|
13
|
+
const parent = parentNode || siblingNode?.parentNode;
|
|
14
|
+
if (siblingNode?.nextSibling) {
|
|
15
|
+
parent?.insertBefore(node, siblingNode.nextSibling);
|
|
16
|
+
} else if (siblingNode?.insertAdjacentElement) {
|
|
17
|
+
siblingNode.insertAdjacentElement("afterend", node);
|
|
18
|
+
} else {
|
|
19
|
+
parent?.insertBefore(node, siblingNode);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
const insertNodeBefore = (node, siblingNode, parentNode) => {
|
|
23
|
+
if (!node) {
|
|
24
|
+
throw new Error("Node is required");
|
|
25
|
+
}
|
|
26
|
+
const parent = parentNode || siblingNode.parentNode;
|
|
27
|
+
parent?.insertBefore(node, siblingNode);
|
|
28
|
+
};
|
|
29
|
+
const assignNode = (element, parent, key, attachOptions) => {
|
|
30
|
+
if (!element) {
|
|
31
|
+
throw new Error("Element is required");
|
|
32
|
+
}
|
|
33
|
+
if (!parent) {
|
|
34
|
+
throw new Error("Parent is required");
|
|
35
|
+
}
|
|
36
|
+
parent[key || element.key] = element;
|
|
37
|
+
if (element.tag !== "shadow") {
|
|
38
|
+
if (attachOptions && attachOptions.position) {
|
|
39
|
+
;
|
|
40
|
+
(attachOptions.position === "before" ? insertNodeBefore : insertNodeAfter)(element.node, attachOptions.node || parent.node);
|
|
41
|
+
} else {
|
|
42
|
+
appendNode(element.node, parent.node, element);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return element;
|
|
46
|
+
};
|
|
47
|
+
export {
|
|
48
|
+
appendNode,
|
|
49
|
+
assignNode,
|
|
50
|
+
insertNodeAfter,
|
|
51
|
+
insertNodeBefore
|
|
52
|
+
};
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { report } from "@domql/report";
|
|
2
|
+
import { canRenderTag } from "../event/index.js";
|
|
3
|
+
import { exec, isObject, isString, isValidHtmlTag, SVG_TAGS, document } from "@domql/utils";
|
|
4
|
+
const SVG_NS = "http://www.w3.org/2000/svg";
|
|
5
|
+
const createHTMLNode = (element) => {
|
|
6
|
+
const { tag, context } = element;
|
|
7
|
+
const doc = context.document || document;
|
|
8
|
+
if (tag) {
|
|
9
|
+
if (tag === "string") return doc.createTextNode(element.text);
|
|
10
|
+
else if (tag === "fragment") {
|
|
11
|
+
return doc.createDocumentFragment();
|
|
12
|
+
} else if (SVG_TAGS.has(tag)) {
|
|
13
|
+
if (tag === "svg" || element.parent?.node?.namespaceURI === SVG_NS) {
|
|
14
|
+
return doc.createElementNS(SVG_NS, tag);
|
|
15
|
+
}
|
|
16
|
+
return doc.createElement(tag);
|
|
17
|
+
} else return doc.createElement(tag);
|
|
18
|
+
} else {
|
|
19
|
+
return doc.createElement("div");
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
const detectTag = (element) => {
|
|
23
|
+
let { tag, key, props } = element;
|
|
24
|
+
tag = exec(tag, element);
|
|
25
|
+
if (tag === true) tag = key;
|
|
26
|
+
if (isObject(props) && isString(props.tag)) {
|
|
27
|
+
const tagExists = isValidHtmlTag(props.tag);
|
|
28
|
+
if (tagExists) return props.tag;
|
|
29
|
+
}
|
|
30
|
+
if (isString(tag)) {
|
|
31
|
+
if (isValidHtmlTag(tag)) return tag;
|
|
32
|
+
} else {
|
|
33
|
+
let keyAsTag = key.toLowerCase();
|
|
34
|
+
if (keyAsTag.includes(".")) keyAsTag = keyAsTag.split(".")[0];
|
|
35
|
+
if (keyAsTag.includes("_")) keyAsTag = keyAsTag.split("_")[0];
|
|
36
|
+
if (isValidHtmlTag(keyAsTag)) return keyAsTag;
|
|
37
|
+
}
|
|
38
|
+
return "div";
|
|
39
|
+
};
|
|
40
|
+
const cacheNode = (element) => {
|
|
41
|
+
const { context } = element;
|
|
42
|
+
const win = context.window || window;
|
|
43
|
+
const tag = element.tag = detectTag(element);
|
|
44
|
+
if (!canRenderTag(tag)) {
|
|
45
|
+
return report("HTMLInvalidTag", element.tag, element);
|
|
46
|
+
}
|
|
47
|
+
if (!win.nodeCaches) win.nodeCaches = {};
|
|
48
|
+
const isSvgContext = SVG_TAGS.has(tag) && (tag === "svg" || element.parent?.node?.namespaceURI === SVG_NS);
|
|
49
|
+
const cacheKey = isSvgContext ? "svg:" + tag : tag;
|
|
50
|
+
let cachedTag = win.nodeCaches[cacheKey];
|
|
51
|
+
if (!cachedTag) cachedTag = win.nodeCaches[cacheKey] = createHTMLNode(element);
|
|
52
|
+
const clonedNode = cachedTag.cloneNode(true);
|
|
53
|
+
if (tag === "string") clonedNode.nodeValue = element.text;
|
|
54
|
+
return clonedNode;
|
|
55
|
+
};
|
|
56
|
+
export {
|
|
57
|
+
cacheNode,
|
|
58
|
+
createHTMLNode,
|
|
59
|
+
detectTag
|
|
60
|
+
};
|
package/dist/esm/set.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { deepContains,
|
|
1
|
+
import { deepContains, exec, isFunction, OPTIONS } from "@domql/utils";
|
|
2
2
|
import { create } from "./create.js";
|
|
3
|
-
import { triggerEventOn, triggerEventOnUpdate } from "
|
|
3
|
+
import { triggerEventOn, triggerEventOnUpdate } from "./event/index.js";
|
|
4
4
|
const setContentKey = (element, opts = {}) => {
|
|
5
5
|
const { __ref: ref } = element;
|
|
6
6
|
const contentElementKey = opts.contentElementKey;
|
|
@@ -9,49 +9,42 @@ const setContentKey = (element, opts = {}) => {
|
|
|
9
9
|
}
|
|
10
10
|
return ref.contentElementKey;
|
|
11
11
|
};
|
|
12
|
-
|
|
13
|
-
const element =
|
|
14
|
-
|
|
12
|
+
function reset(options) {
|
|
13
|
+
const element = this;
|
|
14
|
+
create(element, element.parent, void 0, {
|
|
15
15
|
ignoreChildExtends: true,
|
|
16
16
|
...OPTIONS.defaultOptions,
|
|
17
17
|
...OPTIONS.create,
|
|
18
18
|
...options
|
|
19
19
|
});
|
|
20
|
-
}
|
|
21
|
-
const resetContent =
|
|
22
|
-
var _a;
|
|
20
|
+
}
|
|
21
|
+
const resetContent = (params, element, opts) => {
|
|
23
22
|
const contentElementKey = setContentKey(element, opts);
|
|
24
|
-
if (
|
|
25
|
-
const contentElem =
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
...OPTIONS.defaultOptions,
|
|
32
|
-
...OPTIONS.create,
|
|
33
|
-
...opts
|
|
34
|
-
}
|
|
35
|
-
);
|
|
23
|
+
if (element[contentElementKey]?.node) removeContent(element, opts);
|
|
24
|
+
const contentElem = create(params, element, contentElementKey || "content", {
|
|
25
|
+
ignoreChildExtends: true,
|
|
26
|
+
...OPTIONS.defaultOptions,
|
|
27
|
+
...OPTIONS.create,
|
|
28
|
+
...opts
|
|
29
|
+
});
|
|
36
30
|
if (contentElementKey !== "content") opts.contentElementKey = "content";
|
|
37
31
|
return contentElem;
|
|
38
32
|
};
|
|
39
|
-
const updateContent =
|
|
33
|
+
const updateContent = function(params, opts) {
|
|
40
34
|
const element = this;
|
|
41
35
|
const contentElementKey = setContentKey(element, opts);
|
|
42
36
|
if (!element[contentElementKey]) return;
|
|
43
37
|
if (element[contentElementKey].update) {
|
|
44
|
-
|
|
38
|
+
element[contentElementKey].update(params, opts);
|
|
45
39
|
}
|
|
46
40
|
};
|
|
47
|
-
|
|
48
|
-
const content =
|
|
41
|
+
function setContent(param, element, opts) {
|
|
42
|
+
const content = exec(param, element);
|
|
49
43
|
if (content && element) {
|
|
50
|
-
|
|
44
|
+
set.call(element, content, opts);
|
|
51
45
|
}
|
|
52
46
|
}
|
|
53
47
|
const removeContent = function(el, opts = {}) {
|
|
54
|
-
var _a;
|
|
55
48
|
const element = el || this;
|
|
56
49
|
const contentElementKey = setContentKey(element, opts);
|
|
57
50
|
if (opts.contentElementKey !== "content") {
|
|
@@ -59,16 +52,17 @@ const removeContent = function(el, opts = {}) {
|
|
|
59
52
|
}
|
|
60
53
|
const content = element[contentElementKey];
|
|
61
54
|
if (!content) return;
|
|
62
|
-
if (content.tag === "fragment" &&
|
|
63
|
-
content.__ref.__children
|
|
64
|
-
|
|
55
|
+
if (content.tag === "fragment" && content.__ref?.__children) {
|
|
56
|
+
const __children = content.__ref.__children;
|
|
57
|
+
for (let i = 0; i < __children.length; i++) {
|
|
58
|
+
const child = content[__children[i]];
|
|
65
59
|
if (child.node && child.node.parentNode) {
|
|
66
60
|
child.node.parentNode.removeChild(child.node);
|
|
67
61
|
}
|
|
68
62
|
if (isFunction(child.remove)) {
|
|
69
63
|
child.remove();
|
|
70
64
|
}
|
|
71
|
-
}
|
|
65
|
+
}
|
|
72
66
|
} else {
|
|
73
67
|
if (content.node && content.node.parentNode) {
|
|
74
68
|
content.node.parentNode.removeChild(content.node);
|
|
@@ -79,8 +73,7 @@ const removeContent = function(el, opts = {}) {
|
|
|
79
73
|
}
|
|
80
74
|
delete element[contentElementKey];
|
|
81
75
|
};
|
|
82
|
-
const set =
|
|
83
|
-
var _a;
|
|
76
|
+
const set = function(params, options = {}, el) {
|
|
84
77
|
const element = el || this;
|
|
85
78
|
const { __ref: ref } = element;
|
|
86
79
|
const contentElementKey = setContentKey(element, options);
|
|
@@ -91,9 +84,9 @@ const set = async function(params, options = {}, el) {
|
|
|
91
84
|
if (options.preventContentUpdate === true && !hasChildren) return;
|
|
92
85
|
const childHasChanged = !ref.__noChildrenDifference;
|
|
93
86
|
const childrenIsDifferentFromCache = childHasChanged && __contentRef && Object.keys(params).length === Object.keys(content).length && deepContains(params, content);
|
|
94
|
-
if (
|
|
87
|
+
if (content?.update && !childHasChanged && !childrenIsDifferentFromCache) {
|
|
95
88
|
if (!options.preventBeforeUpdateListener && !options.preventListeners) {
|
|
96
|
-
const beforeUpdateReturns =
|
|
89
|
+
const beforeUpdateReturns = triggerEventOnUpdate(
|
|
97
90
|
"beforeUpdate",
|
|
98
91
|
params,
|
|
99
92
|
element,
|
|
@@ -101,9 +94,9 @@ const set = async function(params, options = {}, el) {
|
|
|
101
94
|
);
|
|
102
95
|
if (beforeUpdateReturns === false) return element;
|
|
103
96
|
}
|
|
104
|
-
|
|
97
|
+
content.update(params);
|
|
105
98
|
if (!options.preventUpdateListener && !options.preventListeners) {
|
|
106
|
-
|
|
99
|
+
triggerEventOn("update", element, options);
|
|
107
100
|
}
|
|
108
101
|
return;
|
|
109
102
|
}
|
|
@@ -115,20 +108,20 @@ const set = async function(params, options = {}, el) {
|
|
|
115
108
|
params.childExtends = element.childExtends;
|
|
116
109
|
props.ignoreChildExtends = true;
|
|
117
110
|
}
|
|
118
|
-
if (!
|
|
111
|
+
if (!props?.childProps && element.props?.childProps) {
|
|
119
112
|
props.childProps = element.props.childProps;
|
|
120
113
|
props.ignoreChildProps = true;
|
|
121
114
|
}
|
|
122
115
|
}
|
|
123
116
|
if (lazyLoad) {
|
|
124
|
-
window.requestAnimationFrame(
|
|
125
|
-
|
|
117
|
+
window.requestAnimationFrame(() => {
|
|
118
|
+
resetContent(params, element, options);
|
|
126
119
|
if (!options.preventUpdateListener) {
|
|
127
|
-
|
|
120
|
+
triggerEventOn("lazyLoad", element, options);
|
|
128
121
|
}
|
|
129
122
|
});
|
|
130
123
|
} else {
|
|
131
|
-
|
|
124
|
+
resetContent(params, element, options);
|
|
132
125
|
}
|
|
133
126
|
};
|
|
134
127
|
var set_default = set;
|