@domql/element 3.2.3 → 3.2.8
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/children.js +40 -12
- package/create.js +40 -26
- package/define.js +1 -1
- package/dist/cjs/children.js +39 -11
- package/dist/cjs/create.js +41 -11
- 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 +6 -6
- package/dist/cjs/index.js +9 -6
- package/dist/cjs/iterate.js +13 -13
- 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 +1 -2
- package/dist/cjs/mixins/html.js +1 -2
- package/dist/cjs/mixins/state.js +2 -2
- package/dist/cjs/mixins/style.js +11 -2
- package/dist/cjs/mixins/text.js +5 -1
- package/dist/cjs/node.js +8 -5
- 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 +12 -14
- package/dist/cjs/update.js +80 -40
- package/dist/cjs/utils/applyParam.js +3 -3
- package/dist/cjs/utils/extendUtils.js +5 -5
- package/dist/cjs/utils/index.js +2 -0
- package/dist/cjs/utils/propEvents.js +21 -4
- package/dist/esm/children.js +39 -11
- package/dist/esm/create.js +42 -11
- 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 +7 -7
- package/dist/esm/index.js +8 -6
- package/dist/esm/iterate.js +13 -13
- 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 +1 -2
- package/dist/esm/mixins/html.js +1 -2
- package/dist/esm/mixins/state.js +2 -2
- package/dist/esm/mixins/style.js +12 -3
- package/dist/esm/mixins/text.js +6 -2
- package/dist/esm/node.js +8 -5
- 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 +12 -14
- package/dist/esm/update.js +80 -42
- package/dist/esm/utils/applyParam.js +3 -3
- package/dist/esm/utils/extendUtils.js +5 -5
- package/dist/esm/utils/index.js +1 -0
- package/dist/esm/utils/propEvents.js +21 -4
- package/dist/iife/index.js +4718 -0
- package/extend.js +7 -10
- package/index.js +9 -6
- package/iterate.js +20 -13
- package/node.js +10 -8
- package/package.json +42 -18
- package/set.js +6 -5
- package/update.js +90 -52
- package/__tests__/checkIfOnUpdate.test.js +0 -103
- package/__tests__/children.test.js +0 -209
- 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 -312
- 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 -111
- package/__tests__/tree.test.js +0 -15
- package/__tests__/update.test.js +0 -256
- package/dist/cjs/package.json +0 -4
- 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/content.js +0 -65
- 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/extendUtils.js +0 -149
- package/utils/index.js +0 -3
- package/utils/propEvents.js +0 -19
package/dist/esm/update.js
CHANGED
|
@@ -9,16 +9,14 @@ import {
|
|
|
9
9
|
isUndefined,
|
|
10
10
|
merge,
|
|
11
11
|
overwriteDeep,
|
|
12
|
-
deepClone,
|
|
13
12
|
isMethod,
|
|
14
13
|
findInheritedState,
|
|
15
|
-
deepMerge,
|
|
16
14
|
OPTIONS,
|
|
17
15
|
updateProps,
|
|
18
16
|
captureSnapshot,
|
|
19
17
|
propertizeUpdate
|
|
20
18
|
} from "@domql/utils";
|
|
21
|
-
import { applyEvent, triggerEventOn, triggerEventOnUpdate } from "
|
|
19
|
+
import { applyEvent, triggerEventOn, triggerEventOnUpdate } from "./event/index.js";
|
|
22
20
|
import { createState } from "@domql/state";
|
|
23
21
|
import { create } from "./create.js";
|
|
24
22
|
import {
|
|
@@ -40,12 +38,7 @@ const UPDATE_DEFAULT_OPTIONS = {
|
|
|
40
38
|
exclude: METHODS_EXL
|
|
41
39
|
};
|
|
42
40
|
const update = function(params = {}, opts) {
|
|
43
|
-
const
|
|
44
|
-
const options = deepClone(
|
|
45
|
-
isObject(opts) ? deepMerge(opts, UPDATE_DEFAULT_OPTIONS) : UPDATE_DEFAULT_OPTIONS,
|
|
46
|
-
{ exclude: ["calleeElement"] }
|
|
47
|
-
);
|
|
48
|
-
options.calleeElement = calleeElementCache;
|
|
41
|
+
const options = isObject(opts) ? { ...UPDATE_DEFAULT_OPTIONS, ...opts } : { ...UPDATE_DEFAULT_OPTIONS };
|
|
49
42
|
const element = this;
|
|
50
43
|
let ref = element.__ref;
|
|
51
44
|
if (!ref) ref = element.__ref = {};
|
|
@@ -73,19 +66,22 @@ const update = function(params = {}, opts) {
|
|
|
73
66
|
if (ifFails) return;
|
|
74
67
|
if (ref.__if && !options.preventPropsUpdate) {
|
|
75
68
|
const hasParentProps = parent.props && (parent.props[key] || parent.props.childProps);
|
|
76
|
-
const hasFunctionInProps = ref.__propsStack.
|
|
77
|
-
const props = params.props || hasParentProps || hasFunctionInProps
|
|
69
|
+
const hasFunctionInProps = ref.__propsStack.some(isFunction);
|
|
70
|
+
const props = params.props || hasParentProps || hasFunctionInProps;
|
|
78
71
|
if (props) updateProps(props, element, parent);
|
|
79
72
|
}
|
|
80
73
|
if (!options.preventBeforeUpdateListener && !options.preventListeners) {
|
|
81
|
-
const
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
74
|
+
const hasBeforeUpdate = element.on?.beforeUpdate || element.props?.onBeforeUpdate;
|
|
75
|
+
if (hasBeforeUpdate) {
|
|
76
|
+
const simulate = { ...params, ...element };
|
|
77
|
+
const beforeUpdateReturns = triggerEventOnUpdate(
|
|
78
|
+
"beforeUpdate",
|
|
79
|
+
params,
|
|
80
|
+
simulate,
|
|
81
|
+
options
|
|
82
|
+
);
|
|
83
|
+
if (beforeUpdateReturns === false) return element;
|
|
84
|
+
}
|
|
89
85
|
}
|
|
90
86
|
overwriteDeep(element, params);
|
|
91
87
|
throughExecProps(element);
|
|
@@ -95,9 +91,7 @@ const update = function(params = {}, opts) {
|
|
|
95
91
|
triggerEventOn("beforeClassAssign", element, options);
|
|
96
92
|
}
|
|
97
93
|
if (!ref.__if) return false;
|
|
98
|
-
if (!node)
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
94
|
+
if (!node) return;
|
|
101
95
|
const {
|
|
102
96
|
preventUpdate,
|
|
103
97
|
preventDefineUpdate,
|
|
@@ -115,12 +109,16 @@ const update = function(params = {}, opts) {
|
|
|
115
109
|
options.preventUpdateAfterCount = 1;
|
|
116
110
|
} else options.preventUpdateAfterCount++;
|
|
117
111
|
}
|
|
112
|
+
const preventUpdateSet = isArray(preventUpdate) ? new Set(preventUpdate) : null;
|
|
113
|
+
const preventDefineUpdateSet = isArray(preventDefineUpdate) ? new Set(preventDefineUpdate) : null;
|
|
118
114
|
for (const param in element) {
|
|
119
115
|
const prop = element[param];
|
|
120
|
-
if (!Object.hasOwnProperty.call(element, param)) continue;
|
|
121
|
-
const isInPreventUpdate =
|
|
122
|
-
const isInPreventDefineUpdate =
|
|
123
|
-
|
|
116
|
+
if (!Object.prototype.hasOwnProperty.call(element, param)) continue;
|
|
117
|
+
const isInPreventUpdate = preventUpdateSet && preventUpdateSet.has(param);
|
|
118
|
+
const isInPreventDefineUpdate = preventDefineUpdateSet && preventDefineUpdateSet.has(param);
|
|
119
|
+
const isRootEventHandler = isFunction(prop) && param.length > 2 && param.charCodeAt(0) === 111 && param.charCodeAt(1) === 110 && // 'on'
|
|
120
|
+
param.charCodeAt(2) >= 65 && param.charCodeAt(2) <= 90;
|
|
121
|
+
if (isUndefined(prop) || isInPreventUpdate || isInPreventDefineUpdate || preventDefineUpdate === true || preventDefineUpdate === param || preventStateUpdate && param === "state" || isMethod(param, element) || isRootEventHandler || isObject(REGISTRY[param])) {
|
|
124
122
|
continue;
|
|
125
123
|
}
|
|
126
124
|
if (preventStateUpdate === "once") options.preventStateUpdate = false;
|
|
@@ -133,7 +131,9 @@ const update = function(params = {}, opts) {
|
|
|
133
131
|
if (options.onEachUpdate) {
|
|
134
132
|
options.onEachUpdate(param, element, element.state, element.context);
|
|
135
133
|
}
|
|
136
|
-
const
|
|
134
|
+
const childParams = params[param];
|
|
135
|
+
if (childParams === void 0 && !options.isForced) continue;
|
|
136
|
+
const childUpdateCall = () => update.call(prop, childParams, {
|
|
137
137
|
...options,
|
|
138
138
|
currentSnapshot: snapshotOnCallee,
|
|
139
139
|
calleeElement
|
|
@@ -141,7 +141,7 @@ const update = function(params = {}, opts) {
|
|
|
141
141
|
if (lazyLoad) {
|
|
142
142
|
window.requestAnimationFrame(() => {
|
|
143
143
|
childUpdateCall();
|
|
144
|
-
if (!options.preventUpdateListener) {
|
|
144
|
+
if (!options.preventUpdateListener && !options.preventListeners) {
|
|
145
145
|
triggerEventOn("lazyLoad", element, options);
|
|
146
146
|
}
|
|
147
147
|
});
|
|
@@ -149,23 +149,61 @@ const update = function(params = {}, opts) {
|
|
|
149
149
|
}
|
|
150
150
|
}
|
|
151
151
|
if (!preventContentUpdate) {
|
|
152
|
-
const
|
|
153
|
-
const
|
|
154
|
-
|
|
155
|
-
|
|
152
|
+
const contentKey = ref.contentElementKey || "content";
|
|
153
|
+
const existingContent = element[contentKey];
|
|
154
|
+
const childrenProp = params.children || element.children;
|
|
155
|
+
if (childrenProp) {
|
|
156
|
+
const content = setChildren(childrenProp, element, opts);
|
|
157
|
+
if (content && !ref.__noChildrenDifference) {
|
|
158
|
+
setContent(content, element, options);
|
|
159
|
+
} else if (existingContent?.__ref && isFunction(existingContent.update)) {
|
|
160
|
+
const lazyLoad = element.props?.lazyLoad || options.lazyLoad;
|
|
161
|
+
const contentUpdateCall = () => update.call(existingContent, params[contentKey], {
|
|
162
|
+
...options,
|
|
163
|
+
currentSnapshot: snapshotOnCallee,
|
|
164
|
+
calleeElement
|
|
165
|
+
});
|
|
166
|
+
if (lazyLoad) {
|
|
167
|
+
window.requestAnimationFrame(() => {
|
|
168
|
+
contentUpdateCall();
|
|
169
|
+
if (!options.preventUpdateListener && !options.preventListeners) {
|
|
170
|
+
triggerEventOn("lazyLoad", element, options);
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
} else contentUpdateCall();
|
|
174
|
+
}
|
|
175
|
+
} else if (existingContent?.__ref && isFunction(existingContent.update)) {
|
|
176
|
+
const lazyLoad = element.props?.lazyLoad || options.lazyLoad;
|
|
177
|
+
const contentUpdateCall = () => update.call(existingContent, params[contentKey], {
|
|
178
|
+
...options,
|
|
179
|
+
currentSnapshot: snapshotOnCallee,
|
|
180
|
+
calleeElement
|
|
181
|
+
});
|
|
182
|
+
if (lazyLoad) {
|
|
183
|
+
window.requestAnimationFrame(() => {
|
|
184
|
+
contentUpdateCall();
|
|
185
|
+
if (!options.preventUpdateListener && !options.preventListeners) {
|
|
186
|
+
triggerEventOn("lazyLoad", element, options);
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
} else contentUpdateCall();
|
|
190
|
+
} else {
|
|
191
|
+
const content = element.children || params.content;
|
|
192
|
+
if (content) {
|
|
193
|
+
setContent(content, element, options);
|
|
194
|
+
}
|
|
156
195
|
}
|
|
157
196
|
}
|
|
158
|
-
if (!preventUpdateListener) {
|
|
197
|
+
if (!preventUpdateListener && !options.preventListeners) {
|
|
159
198
|
triggerEventOn("update", element, options);
|
|
160
199
|
}
|
|
161
200
|
};
|
|
162
201
|
const checkIfOnUpdate = (element, parent, options) => {
|
|
163
|
-
|
|
164
|
-
if (!isFunction(element.if) && !isFunction((_a = element.props) == null ? void 0 : _a.if) || !parent) {
|
|
202
|
+
if (!isFunction(element.if) && !isFunction(element.props?.if) || !parent) {
|
|
165
203
|
return;
|
|
166
204
|
}
|
|
167
205
|
const ref = element.__ref;
|
|
168
|
-
const ifPassed = (element.if ||
|
|
206
|
+
const ifPassed = (element.if || element.props?.if)(
|
|
169
207
|
element,
|
|
170
208
|
element.state,
|
|
171
209
|
element.context,
|
|
@@ -193,15 +231,15 @@ const checkIfOnUpdate = (element, parent, options) => {
|
|
|
193
231
|
const contentKey = ref.contentElementKey;
|
|
194
232
|
if (element.children) {
|
|
195
233
|
element.removeContent();
|
|
196
|
-
} else if (
|
|
234
|
+
} else if (element[contentKey]?.parseDeep) {
|
|
197
235
|
element[contentKey] = element[contentKey].parseDeep();
|
|
198
236
|
}
|
|
199
237
|
const previousElement = element.previousElement();
|
|
200
|
-
const previousNode = previousElement
|
|
201
|
-
const hasPrevious = previousNode
|
|
238
|
+
const previousNode = previousElement?.node;
|
|
239
|
+
const hasPrevious = previousNode?.parentNode;
|
|
202
240
|
const nextElement = element.nextElement();
|
|
203
|
-
const nextNode = nextElement
|
|
204
|
-
const hasNext = nextNode
|
|
241
|
+
const nextNode = nextElement?.node;
|
|
242
|
+
const hasNext = nextNode?.parentNode;
|
|
205
243
|
const attachOptions = (hasPrevious || hasNext) && {
|
|
206
244
|
position: hasPrevious ? "after" : hasNext ? "before" : null,
|
|
207
245
|
node: hasPrevious && previousNode || hasNext && nextNode
|
|
@@ -232,7 +270,7 @@ const inheritStateUpdates = (element, options) => {
|
|
|
232
270
|
const { preventUpdateTriggerStateUpdate, isHoisted, execStateFunction } = options;
|
|
233
271
|
if (preventUpdateTriggerStateUpdate) return;
|
|
234
272
|
if (!stateKey && !ref.__hasRootState) {
|
|
235
|
-
element.state = parent
|
|
273
|
+
element.state = parent?.state || {};
|
|
236
274
|
return;
|
|
237
275
|
}
|
|
238
276
|
const shouldForceFunctionState = isFunction(stateKey) && !isHoisted && execStateFunction;
|
|
@@ -5,10 +5,10 @@ const applyParam = (param, element, options) => {
|
|
|
5
5
|
const prop = exec(element[param], element);
|
|
6
6
|
const { onlyUpdate } = options;
|
|
7
7
|
const DOMQLProperty = REGISTRY[param];
|
|
8
|
-
const DOMQLPropertyFromContext = context
|
|
8
|
+
const DOMQLPropertyFromContext = context?.registry?.[param];
|
|
9
9
|
const isGlobalTransformer = DOMQLPropertyFromContext || DOMQLProperty;
|
|
10
|
-
const hasDefine = element.define
|
|
11
|
-
const hasContextDefine = context
|
|
10
|
+
const hasDefine = element.define?.[param];
|
|
11
|
+
const hasContextDefine = context?.define?.[param];
|
|
12
12
|
if (!ref.__if) return;
|
|
13
13
|
const hasOnlyUpdate = onlyUpdate ? onlyUpdate === param || element.lookup(onlyUpdate) : true;
|
|
14
14
|
if (isGlobalTransformer && !hasContextDefine && hasOnlyUpdate) {
|
|
@@ -27,7 +27,7 @@ const getExtendStackRegistry = (extend, stack) => {
|
|
|
27
27
|
return setHashedExtend(extend, stack);
|
|
28
28
|
};
|
|
29
29
|
const extractArrayExtend = (extend, stack, context) => {
|
|
30
|
-
extend.
|
|
30
|
+
for (let i = 0; i < extend.length; i++) flattenExtend(extend[i], stack, context);
|
|
31
31
|
return stack;
|
|
32
32
|
};
|
|
33
33
|
const deepExtend = (extend, stack, context) => {
|
|
@@ -47,7 +47,7 @@ const flattenExtend = (extend, stack, context) => {
|
|
|
47
47
|
};
|
|
48
48
|
const deepMergeExtend = (element, extend) => {
|
|
49
49
|
for (const e in extend) {
|
|
50
|
-
if (
|
|
50
|
+
if (e === "parent" || e === "node" || e === "__element") continue;
|
|
51
51
|
const elementProp = element[e];
|
|
52
52
|
const extendProp = extend[e];
|
|
53
53
|
if (elementProp === void 0) {
|
|
@@ -71,11 +71,11 @@ const cloneAndMergeArrayExtend = (stack) => {
|
|
|
71
71
|
}, {});
|
|
72
72
|
};
|
|
73
73
|
const fallbackStringExtend = (extend, context, options = {}, variant) => {
|
|
74
|
-
const COMPONENTS = context
|
|
75
|
-
const PAGES = context
|
|
74
|
+
const COMPONENTS = context?.components || options.components;
|
|
75
|
+
const PAGES = context?.pages || options.pages;
|
|
76
76
|
if (isString(extend)) {
|
|
77
77
|
const componentExists = COMPONENTS && (COMPONENTS[extend + "." + variant] || COMPONENTS[extend] || COMPONENTS["smbls." + extend]);
|
|
78
|
-
const pageExists = PAGES && extend.
|
|
78
|
+
const pageExists = PAGES && extend.charCodeAt(0) === 47 && PAGES[extend];
|
|
79
79
|
if (componentExists) return componentExists;
|
|
80
80
|
else if (pageExists) return pageExists;
|
|
81
81
|
else {
|
package/dist/esm/utils/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { isFunction, lowercaseFirstLetter } from "@domql/utils";
|
|
2
2
|
const propagateEventsFromProps = (element) => {
|
|
3
3
|
const { props, on } = element;
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
const eventName = lowercaseFirstLetter(v.
|
|
4
|
+
for (const v in props) {
|
|
5
|
+
if (v.charCodeAt(0) !== 111 || v.charCodeAt(1) !== 110) continue;
|
|
6
|
+
const eventName = lowercaseFirstLetter(v.slice(2));
|
|
7
7
|
const origEvent = on[eventName];
|
|
8
8
|
const funcFromProps = props[v];
|
|
9
9
|
if (isFunction(origEvent)) {
|
|
@@ -12,8 +12,25 @@ const propagateEventsFromProps = (element) => {
|
|
|
12
12
|
if (originalEventRetunrs !== false) return funcFromProps(...args);
|
|
13
13
|
};
|
|
14
14
|
} else on[eventName] = funcFromProps;
|
|
15
|
-
}
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
const propagateEventsFromElement = (element) => {
|
|
18
|
+
const { on } = element;
|
|
19
|
+
for (const param in element) {
|
|
20
|
+
if (param.charCodeAt(0) !== 111 || param.charCodeAt(1) !== 110 || !Object.prototype.hasOwnProperty.call(element, param)) continue;
|
|
21
|
+
const fn = element[param];
|
|
22
|
+
if (!isFunction(fn)) continue;
|
|
23
|
+
const eventName = lowercaseFirstLetter(param.slice(2));
|
|
24
|
+
const origEvent = on[eventName];
|
|
25
|
+
if (isFunction(origEvent)) {
|
|
26
|
+
on[eventName] = (...args) => {
|
|
27
|
+
const ret = origEvent(...args);
|
|
28
|
+
if (ret !== false) return fn(...args);
|
|
29
|
+
};
|
|
30
|
+
} else on[eventName] = fn;
|
|
31
|
+
}
|
|
16
32
|
};
|
|
17
33
|
export {
|
|
34
|
+
propagateEventsFromElement,
|
|
18
35
|
propagateEventsFromProps
|
|
19
36
|
};
|