@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/extend.js
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
import { isFunction, exec } from '@domql/utils'
|
|
4
|
+
import {
|
|
5
|
+
getExtendStack,
|
|
6
|
+
jointStacks,
|
|
7
|
+
cloneAndMergeArrayExtend,
|
|
8
|
+
deepMergeExtend,
|
|
9
|
+
fallbackStringExtend
|
|
10
|
+
} from './utils/index.js'
|
|
11
|
+
|
|
12
|
+
// Module-level cache for context.defaultExtends merged result.
|
|
13
|
+
// Set once on first use, never invalidated — assumes defaultExtends is static.
|
|
14
|
+
let mainExtend
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Checks whether element has `extend` or is a part
|
|
18
|
+
* of parent's `childExtend` extend
|
|
19
|
+
*/
|
|
20
|
+
export const applyExtend = (element, parent, options = {}) => {
|
|
21
|
+
if (isFunction(element)) element = exec(element, parent)
|
|
22
|
+
|
|
23
|
+
const { props, __ref } = element
|
|
24
|
+
let extend = props?.extends || element.extends || element.extend
|
|
25
|
+
const variant = props?.variant
|
|
26
|
+
const context = element.context || parent.context
|
|
27
|
+
|
|
28
|
+
extend = fallbackStringExtend(extend, context, options, variant)
|
|
29
|
+
|
|
30
|
+
const extendStack = getExtendStack(extend, context)
|
|
31
|
+
|
|
32
|
+
delete element.extend
|
|
33
|
+
|
|
34
|
+
let childExtendStack = []
|
|
35
|
+
if (parent) {
|
|
36
|
+
element.parent = parent
|
|
37
|
+
// Assign parent attr to the element
|
|
38
|
+
if (!options.ignoreChildExtend && !props?.ignoreChildExtend) {
|
|
39
|
+
childExtendStack = getExtendStack(parent.childExtend, context)
|
|
40
|
+
|
|
41
|
+
const ignoreChildExtendRecursive = props?.ignoreChildExtendRecursive
|
|
42
|
+
if (parent.childExtendRecursive && !ignoreChildExtendRecursive) {
|
|
43
|
+
const canExtendRecursive = element.key !== '__text'
|
|
44
|
+
if (canExtendRecursive) {
|
|
45
|
+
const childExtendRecursiveStack = getExtendStack(
|
|
46
|
+
parent.childExtendRecursive,
|
|
47
|
+
context
|
|
48
|
+
)
|
|
49
|
+
// add error if childExtendRecursive contains element which goes to infinite loop
|
|
50
|
+
childExtendStack = childExtendStack.concat(childExtendRecursiveStack)
|
|
51
|
+
element.childExtendRecursive = parent.childExtendRecursive
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const extendLength = extendStack.length
|
|
58
|
+
const childExtendLength = childExtendStack.length
|
|
59
|
+
|
|
60
|
+
let stack = []
|
|
61
|
+
if (extendLength && childExtendLength) {
|
|
62
|
+
stack = jointStacks(extendStack, childExtendStack)
|
|
63
|
+
} else if (extendLength) {
|
|
64
|
+
stack = extendStack
|
|
65
|
+
} else if (childExtendLength) {
|
|
66
|
+
stack = childExtendStack
|
|
67
|
+
} else if (!context.defaultExtends) return element
|
|
68
|
+
|
|
69
|
+
if (context.defaultExtends) {
|
|
70
|
+
if (!mainExtend) {
|
|
71
|
+
const defaultOptionsExtend = getExtendStack(
|
|
72
|
+
context.defaultExtends,
|
|
73
|
+
context
|
|
74
|
+
)
|
|
75
|
+
mainExtend = cloneAndMergeArrayExtend(defaultOptionsExtend)
|
|
76
|
+
delete mainExtend.extend
|
|
77
|
+
}
|
|
78
|
+
stack = [].concat(stack, mainExtend)
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if (__ref) __ref.__extend = stack
|
|
82
|
+
let mergedExtend = cloneAndMergeArrayExtend(stack)
|
|
83
|
+
|
|
84
|
+
const COMPONENTS = context?.components || options.components
|
|
85
|
+
const component = exec(element.component || mergedExtend.component, element)
|
|
86
|
+
if (component && COMPONENTS?.[component]) {
|
|
87
|
+
const componentExtend = cloneAndMergeArrayExtend(
|
|
88
|
+
getExtendStack(COMPONENTS[component])
|
|
89
|
+
)
|
|
90
|
+
mergedExtend = deepMergeExtend(componentExtend, mergedExtend)
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const merged = deepMergeExtend(element, mergedExtend)
|
|
94
|
+
return merged
|
|
95
|
+
}
|
package/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
import { TREE } from './tree'
|
|
4
|
-
import create from './create'
|
|
5
|
-
import createNode from './node'
|
|
6
|
-
import define from './define'
|
|
7
|
-
import update from './update'
|
|
8
|
-
import set from './set'
|
|
3
|
+
import { TREE } from './tree.js'
|
|
4
|
+
import create from './create.js'
|
|
5
|
+
import createNode from './node.js'
|
|
6
|
+
import define from './define.js'
|
|
7
|
+
import update from './update.js'
|
|
8
|
+
import set from './set.js'
|
|
9
9
|
|
|
10
10
|
export {
|
|
11
11
|
TREE,
|
|
@@ -15,3 +15,6 @@ export {
|
|
|
15
15
|
update,
|
|
16
16
|
set
|
|
17
17
|
}
|
|
18
|
+
|
|
19
|
+
export * from './event/index.js'
|
|
20
|
+
export * from './render/index.js'
|
package/iterate.js
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
4
|
isObject,
|
|
5
|
-
exec,
|
|
6
5
|
isFunction,
|
|
7
6
|
isNumber,
|
|
8
7
|
isString,
|
|
@@ -10,17 +9,24 @@ import {
|
|
|
10
9
|
isContextComponent,
|
|
11
10
|
isMethod,
|
|
12
11
|
overwrite,
|
|
13
|
-
|
|
12
|
+
exec
|
|
14
13
|
} from '@domql/utils'
|
|
15
14
|
|
|
16
|
-
export const throughInitialExec =
|
|
15
|
+
export const throughInitialExec = (element, exclude = {}) => {
|
|
17
16
|
const { __ref: ref } = element
|
|
18
17
|
for (const param in element) {
|
|
19
18
|
if (exclude[param]) continue
|
|
20
19
|
const prop = element[param]
|
|
21
20
|
if (isFunction(prop) && !isMethod(param, element)) {
|
|
22
21
|
ref.__exec[param] = prop
|
|
23
|
-
|
|
22
|
+
const result = prop(element, element.state, element.context)
|
|
23
|
+
if (result && typeof result.then === 'function') {
|
|
24
|
+
result.then(resolved => {
|
|
25
|
+
element[param] = resolved
|
|
26
|
+
})
|
|
27
|
+
} else {
|
|
28
|
+
element[param] = result
|
|
29
|
+
}
|
|
24
30
|
}
|
|
25
31
|
}
|
|
26
32
|
}
|
|
@@ -36,9 +42,14 @@ export const throughUpdatedExec = (element, options = {}) => {
|
|
|
36
42
|
if (isDefinedParam) continue
|
|
37
43
|
|
|
38
44
|
const newExec = ref.__exec[param](element, element.state, element.context)
|
|
45
|
+
if (newExec && typeof newExec.then === 'function') {
|
|
46
|
+
newExec.then(resolved => {
|
|
47
|
+
element[param] = resolved
|
|
48
|
+
})
|
|
49
|
+
continue
|
|
50
|
+
}
|
|
39
51
|
const execReturnsString = isString(newExec) || isNumber(newExec)
|
|
40
|
-
|
|
41
|
-
if (prop && prop.node && execReturnsString) {
|
|
52
|
+
if (prop?.node && execReturnsString) {
|
|
42
53
|
overwrite(prop, { text: newExec })
|
|
43
54
|
} else if (newExec !== prop) {
|
|
44
55
|
if (matchesComponentNaming(param)) {
|
|
@@ -58,81 +69,132 @@ export const throughUpdatedExec = (element, options = {}) => {
|
|
|
58
69
|
return changes
|
|
59
70
|
}
|
|
60
71
|
|
|
61
|
-
export const throughExecProps =
|
|
72
|
+
export const throughExecProps = element => {
|
|
62
73
|
const { __ref: ref } = element
|
|
63
74
|
const { props } = element
|
|
64
75
|
for (const k in props) {
|
|
76
|
+
// Check for 'is', 'has', 'use' prefixes using charCodeAt
|
|
77
|
+
const c0 = k.charCodeAt(0)
|
|
78
|
+
const c1 = k.charCodeAt(1)
|
|
65
79
|
const isDefine =
|
|
66
|
-
|
|
80
|
+
(c0 === 105 && c1 === 115) || // 'is'
|
|
81
|
+
(c0 === 104 && c1 === 97 && k.charCodeAt(2) === 115) || // 'has'
|
|
82
|
+
(c0 === 117 && c1 === 115 && k.charCodeAt(2) === 101) // 'use'
|
|
67
83
|
const cachedExecProp = ref.__execProps[k]
|
|
68
84
|
if (isFunction(cachedExecProp)) {
|
|
69
|
-
|
|
85
|
+
const result = exec(cachedExecProp, element)
|
|
86
|
+
if (result && typeof result.then === 'function') {
|
|
87
|
+
result.then(resolved => {
|
|
88
|
+
props[k] = resolved
|
|
89
|
+
})
|
|
90
|
+
} else {
|
|
91
|
+
props[k] = result
|
|
92
|
+
}
|
|
70
93
|
} else if (isDefine && isFunction(props[k])) {
|
|
71
94
|
ref.__execProps[k] = props[k]
|
|
72
|
-
|
|
95
|
+
const result = exec(props[k], element)
|
|
96
|
+
if (result && typeof result.then === 'function') {
|
|
97
|
+
result.then(resolved => {
|
|
98
|
+
props[k] = resolved
|
|
99
|
+
})
|
|
100
|
+
} else {
|
|
101
|
+
props[k] = result
|
|
102
|
+
}
|
|
73
103
|
}
|
|
74
104
|
}
|
|
75
105
|
}
|
|
76
106
|
|
|
77
|
-
export const
|
|
78
|
-
|
|
79
|
-
export const throughInitialDefine = async element => {
|
|
107
|
+
export const throughInitialDefine = element => {
|
|
80
108
|
const { define, context, __ref: ref } = element
|
|
81
109
|
|
|
82
|
-
|
|
110
|
+
const hasLocalDefine = isObject(define)
|
|
83
111
|
const hasGlobalDefine = context && isObject(context.define)
|
|
84
|
-
if (
|
|
85
|
-
|
|
112
|
+
if (!hasLocalDefine && !hasGlobalDefine) return element
|
|
113
|
+
|
|
114
|
+
const defineObj = hasLocalDefine && hasGlobalDefine
|
|
115
|
+
? { ...define, ...context.define }
|
|
116
|
+
: hasLocalDefine ? define : context.define
|
|
86
117
|
|
|
87
118
|
for (const param in defineObj) {
|
|
88
119
|
let elementProp = element[param]
|
|
89
120
|
|
|
90
121
|
if (isFunction(elementProp) && !isMethod(param, element)) {
|
|
91
122
|
ref.__exec[param] = elementProp
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
123
|
+
let execParam = exec(elementProp, element)
|
|
124
|
+
if (execParam && typeof execParam.then === 'function') {
|
|
125
|
+
execParam.then(resolved => {
|
|
126
|
+
elementProp = element[param] =
|
|
127
|
+
resolved && resolved.parse ? resolved.parse() : resolved
|
|
128
|
+
if (resolved) {
|
|
129
|
+
ref.__defineCache[param] = elementProp
|
|
130
|
+
}
|
|
131
|
+
})
|
|
132
|
+
} else {
|
|
133
|
+
elementProp = element[param] =
|
|
134
|
+
execParam && execParam.parse ? execParam.parse() : execParam
|
|
135
|
+
if (execParam) {
|
|
136
|
+
ref.__defineCache[param] = elementProp
|
|
137
|
+
}
|
|
99
138
|
}
|
|
100
139
|
}
|
|
101
140
|
|
|
102
|
-
const execParam =
|
|
141
|
+
const execParam = defineObj[param](
|
|
103
142
|
elementProp,
|
|
104
143
|
element,
|
|
105
144
|
element.state,
|
|
106
145
|
element.context
|
|
107
146
|
)
|
|
108
|
-
if (execParam
|
|
147
|
+
if (execParam && typeof execParam.then === 'function') {
|
|
148
|
+
execParam.then(resolved => {
|
|
149
|
+
if (resolved) element[param] = resolved
|
|
150
|
+
})
|
|
151
|
+
} else if (execParam) {
|
|
152
|
+
element[param] = execParam
|
|
153
|
+
}
|
|
109
154
|
}
|
|
110
155
|
return element
|
|
111
156
|
}
|
|
112
157
|
|
|
113
|
-
export const throughUpdatedDefine =
|
|
158
|
+
export const throughUpdatedDefine = element => {
|
|
114
159
|
const { context, define, __ref: ref } = element
|
|
115
|
-
const changes = {}
|
|
116
160
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
if (
|
|
161
|
+
const hasLocalDefine = isObject(define)
|
|
162
|
+
const hasGlobalDefine = isObject(context?.define)
|
|
163
|
+
if (!hasLocalDefine && !hasGlobalDefine) return
|
|
164
|
+
|
|
165
|
+
const obj = hasLocalDefine && hasGlobalDefine
|
|
166
|
+
? { ...define, ...context.define }
|
|
167
|
+
: hasLocalDefine ? define : context.define
|
|
120
168
|
|
|
121
169
|
for (const param in obj) {
|
|
122
170
|
const execParam = ref.__exec[param]
|
|
123
171
|
if (execParam) {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
172
|
+
const result = execParam(element, element.state, element.context)
|
|
173
|
+
if (result && typeof result.then === 'function') {
|
|
174
|
+
result.then(resolved => {
|
|
175
|
+
ref.__defineCache[param] = resolved
|
|
176
|
+
})
|
|
177
|
+
} else {
|
|
178
|
+
ref.__defineCache[param] = result
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
const cached = exec(ref.__defineCache[param], element)
|
|
182
|
+
if (cached && typeof cached.then === 'function') {
|
|
183
|
+
cached.then(resolved => {
|
|
184
|
+
// Optionally assign or use resolved value if needed
|
|
185
|
+
})
|
|
186
|
+
continue
|
|
129
187
|
}
|
|
130
|
-
const cached = await execPromise(ref.__defineCache[param], element)
|
|
131
188
|
const newExecParam =
|
|
132
189
|
typeof obj[param] === 'function'
|
|
133
190
|
? obj[param](cached, element, element.state, element.context)
|
|
134
191
|
: undefined
|
|
135
|
-
if (newExecParam
|
|
192
|
+
if (newExecParam && typeof newExecParam.then === 'function') {
|
|
193
|
+
newExecParam.then(resolved => {
|
|
194
|
+
element[param] = resolved
|
|
195
|
+
})
|
|
196
|
+
} else if (newExecParam) {
|
|
197
|
+
element[param] = newExecParam
|
|
198
|
+
}
|
|
136
199
|
}
|
|
137
|
-
return changes
|
|
138
200
|
}
|
package/node.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
3
|
import { isFunction, isMethod, isObject, isUndefined } from '@domql/utils'
|
|
4
|
-
import { applyEventsOnNode, triggerEventOn } from '
|
|
5
|
-
import {
|
|
4
|
+
import { applyEventsOnNode, triggerEventOn } from './event/index.js'
|
|
5
|
+
import { propagateEventsFromProps, propagateEventsFromElement } from './utils/propEvents.js'
|
|
6
|
+
import { cacheNode } from './render/index.js'
|
|
6
7
|
import { create } from './create.js'
|
|
7
8
|
|
|
8
9
|
import {
|
|
@@ -14,11 +15,9 @@ import { REGISTRY } from './mixins/index.js'
|
|
|
14
15
|
import { applyParam } from './utils/applyParam.js'
|
|
15
16
|
import setChildren from './children.js'
|
|
16
17
|
import { setContent } from './set.js'
|
|
17
|
-
// import { defineSetter } from './methods'
|
|
18
|
-
|
|
19
18
|
const ENV = process.env.NODE_ENV
|
|
20
19
|
|
|
21
|
-
export const createNode =
|
|
20
|
+
export const createNode = (element, opts) => {
|
|
22
21
|
// create and assign a node
|
|
23
22
|
let { node, tag, __ref: ref } = element
|
|
24
23
|
|
|
@@ -34,7 +33,7 @@ export const createNode = async (element, opts) => {
|
|
|
34
33
|
} else node = element.node = cacheNode(element)
|
|
35
34
|
|
|
36
35
|
// trigger `on.attachNode`
|
|
37
|
-
|
|
36
|
+
triggerEventOn('attachNode', element, opts)
|
|
38
37
|
}
|
|
39
38
|
// node.dataset // .key = element.key
|
|
40
39
|
|
|
@@ -44,56 +43,59 @@ export const createNode = async (element, opts) => {
|
|
|
44
43
|
}
|
|
45
44
|
|
|
46
45
|
// iterate through exec props
|
|
47
|
-
|
|
46
|
+
throughExecProps(element)
|
|
48
47
|
|
|
49
48
|
// iterate through define
|
|
50
|
-
|
|
49
|
+
throughInitialDefine(element)
|
|
51
50
|
|
|
52
51
|
// iterate through exec
|
|
53
|
-
|
|
52
|
+
throughInitialExec(element)
|
|
54
53
|
|
|
55
|
-
|
|
54
|
+
propagateEventsFromProps(element)
|
|
55
|
+
propagateEventsFromElement(element)
|
|
56
|
+
applyEventsOnNode(element, { isNewNode, ...opts })
|
|
56
57
|
|
|
57
58
|
for (const param in element) {
|
|
58
59
|
const value = element[param]
|
|
59
60
|
|
|
60
61
|
if (
|
|
61
|
-
!Object.hasOwnProperty.call(element, param) ||
|
|
62
|
-
|
|
62
|
+
!Object.prototype.hasOwnProperty.call(element, param) ||
|
|
63
|
+
value === undefined ||
|
|
63
64
|
isMethod(param, element) ||
|
|
64
|
-
isObject(REGISTRY[param])
|
|
65
|
+
isObject(REGISTRY[param]) ||
|
|
66
|
+
(param.length > 2 && param.charCodeAt(0) === 111 && param.charCodeAt(1) === 110 && param.charCodeAt(2) >= 65 && param.charCodeAt(2) <= 90)
|
|
65
67
|
) {
|
|
66
68
|
continue
|
|
67
69
|
}
|
|
68
70
|
|
|
69
|
-
const isElement =
|
|
71
|
+
const isElement = applyParam(param, element, opts)
|
|
70
72
|
if (isElement) {
|
|
71
73
|
const { hasDefine, hasContextDefine } = isElement
|
|
72
74
|
if (element[param] && !hasDefine && !hasContextDefine) {
|
|
73
|
-
const createAsync =
|
|
74
|
-
|
|
75
|
+
const createAsync = () => {
|
|
76
|
+
create(value, element, param, opts)
|
|
75
77
|
}
|
|
76
78
|
|
|
77
79
|
// TODO: test this with promise
|
|
78
80
|
// handle lazy load
|
|
79
81
|
if ((element.props && element.props.lazyLoad) || opts.lazyLoad) {
|
|
80
|
-
window.requestAnimationFrame(
|
|
81
|
-
|
|
82
|
+
window.requestAnimationFrame(() => {
|
|
83
|
+
createAsync()
|
|
82
84
|
if (!opts.preventUpdateListener) {
|
|
83
|
-
|
|
85
|
+
triggerEventOn('lazyLoad', element, opts)
|
|
84
86
|
}
|
|
85
87
|
})
|
|
86
|
-
} else
|
|
88
|
+
} else createAsync()
|
|
87
89
|
}
|
|
88
90
|
}
|
|
89
91
|
}
|
|
90
92
|
|
|
91
93
|
const content = element.children
|
|
92
|
-
?
|
|
93
|
-
: element.
|
|
94
|
+
? setChildren(element.children, element, opts)
|
|
95
|
+
: element.children || element.content
|
|
94
96
|
|
|
95
97
|
if (content) {
|
|
96
|
-
|
|
98
|
+
setContent(content, element, opts)
|
|
97
99
|
}
|
|
98
100
|
|
|
99
101
|
// node.dataset.key = key
|
package/package.json
CHANGED
|
@@ -1,39 +1,63 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@domql/element",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.2.7",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
|
-
"module": "index.js",
|
|
7
|
-
"main": "index.js",
|
|
6
|
+
"module": "./dist/esm/index.js",
|
|
7
|
+
"main": "./dist/cjs/index.js",
|
|
8
8
|
"exports": {
|
|
9
9
|
".": {
|
|
10
|
-
"
|
|
11
|
-
"
|
|
10
|
+
"import": "./dist/esm/index.js",
|
|
11
|
+
"require": "./dist/cjs/index.js",
|
|
12
|
+
"browser": "./dist/iife/index.js",
|
|
13
|
+
"default": "./dist/esm/index.js"
|
|
12
14
|
},
|
|
13
|
-
"./
|
|
14
|
-
|
|
15
|
+
"./event": {
|
|
16
|
+
"import": "./dist/esm/event/index.js",
|
|
17
|
+
"require": "./dist/cjs/event/index.js",
|
|
18
|
+
"default": "./dist/esm/event/index.js"
|
|
19
|
+
},
|
|
20
|
+
"./render": {
|
|
21
|
+
"import": "./dist/esm/render/index.js",
|
|
22
|
+
"require": "./dist/cjs/render/index.js",
|
|
23
|
+
"default": "./dist/esm/render/index.js"
|
|
24
|
+
},
|
|
25
|
+
"./*.js": {
|
|
26
|
+
"import": "./dist/esm/*.js",
|
|
27
|
+
"require": "./dist/cjs/*.js",
|
|
28
|
+
"default": "./dist/esm/*.js"
|
|
29
|
+
},
|
|
30
|
+
"./*": {
|
|
31
|
+
"import": "./dist/esm/*.js",
|
|
32
|
+
"require": "./dist/cjs/*.js",
|
|
33
|
+
"default": "./dist/esm/*.js"
|
|
34
|
+
}
|
|
15
35
|
},
|
|
16
36
|
"source": "index.js",
|
|
17
37
|
"files": [
|
|
18
|
-
"
|
|
19
|
-
"*.js"
|
|
20
|
-
"dist"
|
|
38
|
+
"dist",
|
|
39
|
+
"*.js"
|
|
21
40
|
],
|
|
22
41
|
"scripts": {
|
|
23
42
|
"copy:package:cjs": "cp ../../build/package-cjs.json dist/cjs/package.json",
|
|
24
|
-
"build:esm": "
|
|
25
|
-
"build:cjs": "
|
|
26
|
-
"build": "
|
|
27
|
-
"prepublish": "
|
|
43
|
+
"build:esm": "cross-env NODE_ENV=$NODE_ENV esbuild *.js methods/*.js mixins/*.js utils/*.js event/*.js render/*.js --target=es2020 --format=esm --outdir=dist/esm --define:process.env.NODE_ENV=process.env.NODE_ENV",
|
|
44
|
+
"build:cjs": "cross-env NODE_ENV=$NODE_ENV esbuild *.js methods/*.js mixins/*.js utils/*.js event/*.js render/*.js --target=node18 --format=cjs --outdir=dist/cjs --define:process.env.NODE_ENV=process.env.NODE_ENV",
|
|
45
|
+
"build": "node ../../build/build.js",
|
|
46
|
+
"prepublish": "npm run build && npm run copy:package:cjs",
|
|
47
|
+
"build:iife": "cross-env NODE_ENV=$NODE_ENV esbuild index.js --bundle --target=es2020 --format=iife --global-name=DomqlElement --outfile=dist/iife/index.js --define:process.env.NODE_ENV=process.env.NODE_ENV"
|
|
28
48
|
},
|
|
29
49
|
"dependencies": {
|
|
30
|
-
"@domql/
|
|
31
|
-
"@domql/
|
|
32
|
-
"@domql/
|
|
33
|
-
"
|
|
50
|
+
"@domql/report": "^3.2.3",
|
|
51
|
+
"@domql/state": "^3.2.3",
|
|
52
|
+
"@domql/utils": "^3.2.3",
|
|
53
|
+
"attrs-in-props": "^3.2.3"
|
|
34
54
|
},
|
|
35
|
-
"gitHead": "
|
|
55
|
+
"gitHead": "9fc1b79b41cdc725ca6b24aec64920a599634681",
|
|
36
56
|
"devDependencies": {
|
|
37
57
|
"@babel/core": "^7.26.0"
|
|
38
|
-
}
|
|
58
|
+
},
|
|
59
|
+
"browser": "./dist/iife/index.js",
|
|
60
|
+
"unpkg": "./dist/iife/index.js",
|
|
61
|
+
"jsdelivr": "./dist/iife/index.js",
|
|
62
|
+
"sideEffects": false
|
|
39
63
|
}
|
package/set.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
import { deepContains,
|
|
3
|
+
import { deepContains, exec, isFunction, OPTIONS } from '@domql/utils'
|
|
4
4
|
import { create } from './create.js'
|
|
5
|
-
import { triggerEventOn, triggerEventOnUpdate } from '
|
|
5
|
+
import { triggerEventOn, triggerEventOnUpdate } from './event/index.js'
|
|
6
6
|
|
|
7
7
|
export const setContentKey = (element, opts = {}) => {
|
|
8
8
|
const { __ref: ref } = element
|
|
@@ -13,9 +13,9 @@ export const setContentKey = (element, opts = {}) => {
|
|
|
13
13
|
return ref.contentElementKey
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
export
|
|
16
|
+
export function reset (options) {
|
|
17
17
|
const element = this
|
|
18
|
-
|
|
18
|
+
create(element, element.parent, undefined, {
|
|
19
19
|
ignoreChildExtends: true,
|
|
20
20
|
...OPTIONS.defaultOptions,
|
|
21
21
|
...OPTIONS.create,
|
|
@@ -23,30 +23,25 @@ export const reset = async options => {
|
|
|
23
23
|
})
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
export const resetContent =
|
|
26
|
+
export const resetContent = (params, element, opts) => {
|
|
27
27
|
const contentElementKey = setContentKey(element, opts)
|
|
28
28
|
if (element[contentElementKey]?.node) removeContent(element, opts)
|
|
29
|
-
const contentElem =
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
...OPTIONS.defaultOptions,
|
|
36
|
-
...OPTIONS.create,
|
|
37
|
-
...opts
|
|
38
|
-
}
|
|
39
|
-
)
|
|
29
|
+
const contentElem = create(params, element, contentElementKey || 'content', {
|
|
30
|
+
ignoreChildExtends: true,
|
|
31
|
+
...OPTIONS.defaultOptions,
|
|
32
|
+
...OPTIONS.create,
|
|
33
|
+
...opts
|
|
34
|
+
})
|
|
40
35
|
if (contentElementKey !== 'content') opts.contentElementKey = 'content' // reset to default
|
|
41
36
|
return contentElem
|
|
42
37
|
}
|
|
43
38
|
|
|
44
|
-
export const updateContent =
|
|
39
|
+
export const updateContent = function (params, opts) {
|
|
45
40
|
const element = this
|
|
46
41
|
const contentElementKey = setContentKey(element, opts)
|
|
47
42
|
if (!element[contentElementKey]) return
|
|
48
43
|
if (element[contentElementKey].update) {
|
|
49
|
-
|
|
44
|
+
element[contentElementKey].update(params, opts)
|
|
50
45
|
}
|
|
51
46
|
}
|
|
52
47
|
|
|
@@ -54,11 +49,11 @@ export const updateContent = async function (params, opts) {
|
|
|
54
49
|
* Appends anything as content
|
|
55
50
|
* an original one as a child
|
|
56
51
|
*/
|
|
57
|
-
export
|
|
58
|
-
const content =
|
|
52
|
+
export function setContent (param, element, opts) {
|
|
53
|
+
const content = exec(param, element)
|
|
59
54
|
|
|
60
55
|
if (content && element) {
|
|
61
|
-
|
|
56
|
+
set.call(element, content, opts)
|
|
62
57
|
}
|
|
63
58
|
}
|
|
64
59
|
|
|
@@ -76,15 +71,16 @@ export const removeContent = function (el, opts = {}) {
|
|
|
76
71
|
// Handle fragment removal
|
|
77
72
|
if (content.tag === 'fragment' && content.__ref?.__children) {
|
|
78
73
|
// Remove all child nodes
|
|
79
|
-
content.__ref.__children
|
|
80
|
-
|
|
74
|
+
const __children = content.__ref.__children
|
|
75
|
+
for (let i = 0; i < __children.length; i++) {
|
|
76
|
+
const child = content[__children[i]]
|
|
81
77
|
if (child.node && child.node.parentNode) {
|
|
82
78
|
child.node.parentNode.removeChild(child.node)
|
|
83
79
|
}
|
|
84
80
|
if (isFunction(child.remove)) {
|
|
85
81
|
child.remove()
|
|
86
82
|
}
|
|
87
|
-
}
|
|
83
|
+
}
|
|
88
84
|
} else {
|
|
89
85
|
// Handle regular element removal
|
|
90
86
|
if (content.node && content.node.parentNode) {
|
|
@@ -98,7 +94,7 @@ export const removeContent = function (el, opts = {}) {
|
|
|
98
94
|
delete element[contentElementKey]
|
|
99
95
|
}
|
|
100
96
|
|
|
101
|
-
export const set =
|
|
97
|
+
export const set = function (params, options = {}, el) {
|
|
102
98
|
const element = el || this
|
|
103
99
|
const { __ref: ref } = element
|
|
104
100
|
|
|
@@ -119,7 +115,7 @@ export const set = async function (params, options = {}, el) {
|
|
|
119
115
|
|
|
120
116
|
if (content?.update && !childHasChanged && !childrenIsDifferentFromCache) {
|
|
121
117
|
if (!options.preventBeforeUpdateListener && !options.preventListeners) {
|
|
122
|
-
const beforeUpdateReturns =
|
|
118
|
+
const beforeUpdateReturns = triggerEventOnUpdate(
|
|
123
119
|
'beforeUpdate',
|
|
124
120
|
params,
|
|
125
121
|
element,
|
|
@@ -127,9 +123,9 @@ export const set = async function (params, options = {}, el) {
|
|
|
127
123
|
)
|
|
128
124
|
if (beforeUpdateReturns === false) return element
|
|
129
125
|
}
|
|
130
|
-
|
|
126
|
+
content.update(params)
|
|
131
127
|
if (!options.preventUpdateListener && !options.preventListeners) {
|
|
132
|
-
|
|
128
|
+
triggerEventOn('update', element, options)
|
|
133
129
|
}
|
|
134
130
|
return
|
|
135
131
|
}
|
|
@@ -152,15 +148,15 @@ export const set = async function (params, options = {}, el) {
|
|
|
152
148
|
}
|
|
153
149
|
|
|
154
150
|
if (lazyLoad) {
|
|
155
|
-
window.requestAnimationFrame(
|
|
156
|
-
|
|
151
|
+
window.requestAnimationFrame(() => {
|
|
152
|
+
resetContent(params, element, options)
|
|
157
153
|
// handle lazy load
|
|
158
154
|
if (!options.preventUpdateListener) {
|
|
159
|
-
|
|
155
|
+
triggerEventOn('lazyLoad', element, options)
|
|
160
156
|
}
|
|
161
157
|
})
|
|
162
158
|
} else {
|
|
163
|
-
|
|
159
|
+
resetContent(params, element, options)
|
|
164
160
|
}
|
|
165
161
|
}
|
|
166
162
|
|