@domql/element 2.5.200 → 3.0.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/README.md +1 -1
- package/__tests__/checkIfOnUpdate.test.js +103 -0
- package/__tests__/children.test.js +213 -0
- package/__tests__/define.test.js +75 -0
- package/__tests__/inheritStateUpdates.test.js +79 -0
- package/__tests__/renderElement.test.js +131 -0
- package/__tests__/resetElement.test.js +44 -0
- package/__tests__/set.test.js +316 -0
- package/__tests__/throughExecProps.test.js +86 -0
- package/__tests__/throughInitialDefine.test.js +104 -0
- package/__tests__/throughInitialExec.test.js +92 -0
- package/__tests__/throughUpdatedDefine.test.js +92 -0
- package/__tests__/throughUpdatedExec.test.js +110 -0
- package/__tests__/tree.test.js +15 -0
- package/__tests__/update.test.js +253 -0
- package/children.js +105 -0
- package/create.js +125 -252
- package/dist/cjs/__tests__/checkIfOnUpdate.test.js +73 -0
- package/dist/cjs/__tests__/children.test.js +177 -0
- package/dist/cjs/__tests__/define.test.js +75 -0
- package/dist/cjs/__tests__/inheritStateUpdates.test.js +62 -0
- package/dist/cjs/__tests__/renderElement.test.js +138 -0
- package/dist/cjs/__tests__/resetElement.test.js +35 -0
- package/dist/cjs/__tests__/set.test.js +256 -0
- package/dist/cjs/__tests__/throughExecProps.test.js +62 -0
- package/dist/cjs/__tests__/throughInitialDefine.test.js +79 -0
- package/dist/cjs/__tests__/throughInitialExec.test.js +73 -0
- package/dist/cjs/__tests__/throughUpdatedDefine.test.js +69 -0
- package/dist/cjs/__tests__/throughUpdatedExec.test.js +84 -0
- package/dist/cjs/__tests__/tree.test.js +11 -0
- package/dist/cjs/__tests__/update.test.js +219 -0
- package/dist/cjs/children.js +87 -0
- package/dist/cjs/create.js +79 -177
- package/dist/cjs/iterate.js +29 -13
- package/dist/cjs/methods/set.js +27 -25
- package/dist/cjs/methods/v2.js +1 -5
- package/dist/cjs/mixins/attr.js +7 -6
- package/dist/cjs/mixins/index.js +0 -4
- package/dist/cjs/mixins/registry.js +7 -67
- package/dist/cjs/mixins/scope.js +1 -1
- package/dist/cjs/mixins/state.js +3 -4
- package/dist/cjs/mixins/text.js +3 -3
- package/dist/cjs/node.js +32 -22
- package/dist/cjs/set.js +112 -40
- package/dist/cjs/update.js +119 -64
- package/dist/cjs/utils/applyParam.js +2 -2
- package/dist/cjs/utils/index.js +8 -4
- package/dist/cjs/utils/onlyResolveExtends.js +4 -7
- package/dist/esm/__tests__/checkIfOnUpdate.test.js +73 -0
- package/dist/esm/__tests__/children.test.js +177 -0
- package/dist/esm/__tests__/define.test.js +53 -0
- package/dist/esm/__tests__/inheritStateUpdates.test.js +62 -0
- package/dist/esm/__tests__/renderElement.test.js +116 -0
- package/dist/esm/__tests__/resetElement.test.js +35 -0
- package/dist/esm/__tests__/set.test.js +256 -0
- package/dist/esm/__tests__/throughExecProps.test.js +62 -0
- package/dist/esm/__tests__/throughInitialDefine.test.js +79 -0
- package/dist/esm/__tests__/throughInitialExec.test.js +73 -0
- package/dist/esm/__tests__/throughUpdatedDefine.test.js +69 -0
- package/dist/esm/__tests__/throughUpdatedExec.test.js +84 -0
- package/dist/esm/__tests__/tree.test.js +11 -0
- package/dist/esm/__tests__/update.test.js +219 -0
- package/dist/esm/children.js +81 -0
- package/dist/esm/create.js +85 -188
- package/dist/esm/iterate.js +33 -16
- package/dist/esm/methods/set.js +6 -4
- package/dist/esm/methods/v2.js +1 -5
- package/dist/esm/mixins/attr.js +8 -7
- package/dist/esm/mixins/data.js +1 -1
- package/dist/esm/mixins/index.js +0 -4
- package/dist/esm/mixins/registry.js +7 -67
- package/dist/esm/mixins/scope.js +1 -1
- package/dist/esm/mixins/state.js +4 -5
- package/dist/esm/mixins/text.js +4 -7
- package/dist/esm/node.js +23 -23
- package/dist/esm/set.js +112 -40
- package/dist/esm/update.js +122 -68
- package/dist/esm/utils/applyParam.js +2 -2
- package/dist/esm/utils/index.js +4 -3
- package/dist/esm/utils/onlyResolveExtends.js +12 -8
- package/iterate.js +44 -26
- package/methods/set.js +5 -4
- package/methods/v2.js +5 -4
- package/mixins/attr.js +13 -7
- package/mixins/classList.js +7 -2
- package/mixins/data.js +1 -1
- package/mixins/index.js +1 -6
- package/mixins/registry.js +6 -53
- package/mixins/scope.js +1 -1
- package/mixins/state.js +4 -5
- package/mixins/text.js +4 -7
- package/node.js +31 -28
- package/package.json +7 -6
- package/set.js +129 -41
- package/update.js +169 -89
- package/utils/applyParam.js +7 -4
- package/utils/index.js +1 -3
- package/utils/onlyResolveExtends.js +27 -16
- package/cache/index.js +0 -3
- package/cache/options.js +0 -4
- package/dist/cjs/cache/index.js +0 -24
- package/dist/cjs/cache/options.js +0 -26
- package/dist/cjs/extend.js +0 -81
- package/dist/cjs/methods/index.js +0 -320
- package/dist/cjs/mixins/content.js +0 -67
- package/dist/cjs/props/create.js +0 -92
- package/dist/cjs/props/ignore.js +0 -24
- package/dist/cjs/props/index.js +0 -21
- package/dist/cjs/props/inherit.js +0 -51
- package/dist/cjs/props/update.js +0 -34
- package/dist/cjs/utils/component.js +0 -74
- package/dist/cjs/utils/extendUtils.js +0 -133
- package/dist/cjs/utils/object.js +0 -171
- package/dist/cjs/utils/propEvents.js +0 -39
- package/dist/esm/cache/index.js +0 -4
- package/dist/esm/cache/options.js +0 -6
- package/dist/esm/extend.js +0 -67
- package/dist/esm/methods/index.js +0 -300
- package/dist/esm/mixins/content.js +0 -47
- package/dist/esm/props/create.js +0 -72
- package/dist/esm/props/ignore.js +0 -4
- package/dist/esm/props/index.js +0 -4
- package/dist/esm/props/inherit.js +0 -31
- package/dist/esm/props/update.js +0 -14
- package/dist/esm/utils/component.js +0 -62
- package/dist/esm/utils/extendUtils.js +0 -113
- package/dist/esm/utils/object.js +0 -151
- package/dist/esm/utils/propEvents.js +0 -19
- package/extend.js +0 -90
- package/methods/index.js +0 -317
- package/mixins/content.js +0 -55
- package/props/create.js +0 -87
- package/props/ignore.js +0 -3
- package/props/index.js +0 -6
- package/props/inherit.js +0 -35
- package/props/update.js +0 -17
- package/utils/component.js +0 -68
- package/utils/extendUtils.js +0 -134
- package/utils/object.js +0 -172
- package/utils/propEvents.js +0 -19
package/create.js
CHANGED
|
@@ -4,83 +4,75 @@ import { createNode } from './node.js'
|
|
|
4
4
|
import { ROOT } from './tree.js'
|
|
5
5
|
|
|
6
6
|
import {
|
|
7
|
-
HTML_TAGS,
|
|
8
7
|
isObject,
|
|
9
|
-
isFunction,
|
|
10
|
-
isString,
|
|
11
8
|
exec,
|
|
12
|
-
is,
|
|
13
|
-
isNode,
|
|
14
9
|
isUndefined,
|
|
15
|
-
generateKey,
|
|
16
|
-
checkIfKeyIsComponent,
|
|
17
|
-
deepClone,
|
|
18
|
-
applyComponentFromContext,
|
|
19
|
-
applyKeyComponentAsExtend,
|
|
20
|
-
isVariant,
|
|
21
10
|
detectInfiniteLoop,
|
|
22
|
-
|
|
11
|
+
propertizeElement,
|
|
12
|
+
createElement,
|
|
13
|
+
applyExtends,
|
|
14
|
+
createScope,
|
|
15
|
+
isMethod,
|
|
16
|
+
OPTIONS,
|
|
17
|
+
initProps,
|
|
18
|
+
createIfConditionFlag,
|
|
19
|
+
deepClone,
|
|
20
|
+
createRoot
|
|
23
21
|
} from '@domql/utils'
|
|
24
22
|
|
|
25
23
|
import { applyAnimationFrame, triggerEventOn } from '@domql/event'
|
|
26
24
|
import { assignNode } from '@domql/render'
|
|
27
25
|
import { createState } from '@domql/state'
|
|
28
26
|
|
|
29
|
-
import {
|
|
30
|
-
import { createProps } from './props/index.js'
|
|
31
|
-
import { applyExtend } from './extend.js'
|
|
32
|
-
import { REGISTRY, registry } from './mixins/index.js'
|
|
27
|
+
import { REGISTRY } from './mixins/index.js'
|
|
33
28
|
import { addMethods } from './methods/set.js'
|
|
34
29
|
import { assignKeyAsClassname } from './mixins/classList.js'
|
|
35
30
|
import { throughInitialExec, throughInitialDefine } from './iterate.js'
|
|
36
31
|
|
|
37
|
-
import { OPTIONS } from './cache/options.js'
|
|
38
|
-
|
|
39
|
-
import {
|
|
40
|
-
applyVariant,
|
|
41
|
-
createValidDomqlObjectFromSugar
|
|
42
|
-
} from './utils/component.js'
|
|
43
|
-
|
|
44
32
|
const ENV = process.env.NODE_ENV
|
|
45
33
|
|
|
46
34
|
/**
|
|
47
|
-
* Creating a
|
|
35
|
+
* Creating a DOMQL element using passed parameters
|
|
48
36
|
*/
|
|
49
|
-
export const create = async (
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
37
|
+
export const create = async (
|
|
38
|
+
props,
|
|
39
|
+
parentEl,
|
|
40
|
+
passedKey,
|
|
41
|
+
options = OPTIONS.create || {},
|
|
42
|
+
attachOptions
|
|
43
|
+
) => {
|
|
44
|
+
cacheOptions(options)
|
|
56
45
|
|
|
57
|
-
element =
|
|
58
|
-
|
|
59
|
-
key = createKey(element, parent, key)
|
|
46
|
+
const element = createElement(props, parentEl, passedKey, options, ROOT)
|
|
47
|
+
if (!element) return
|
|
60
48
|
|
|
61
|
-
const
|
|
49
|
+
const { key, parent, __ref: ref } = element
|
|
62
50
|
|
|
63
|
-
|
|
51
|
+
createRoot(element, parent) // Call createRoot after addCaching
|
|
64
52
|
|
|
65
|
-
|
|
53
|
+
if (element.key === 'BannerHgroup') {
|
|
54
|
+
console.warn(deepClone(element))
|
|
55
|
+
}
|
|
66
56
|
|
|
67
|
-
|
|
57
|
+
applyExtends(element, parent, options)
|
|
68
58
|
|
|
69
|
-
if (
|
|
70
|
-
|
|
59
|
+
if (element.key === 'BannerHgroup') {
|
|
60
|
+
console.warn(deepClone(element))
|
|
71
61
|
}
|
|
72
62
|
|
|
73
|
-
element
|
|
63
|
+
propertizeElement(element, parent)
|
|
64
|
+
|
|
65
|
+
await triggerEventOn('start', element, options)
|
|
74
66
|
|
|
75
67
|
if (options.onlyResolveExtends) {
|
|
76
68
|
return onlyResolveExtends(element, parent, key, options)
|
|
77
69
|
}
|
|
78
70
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
71
|
+
if (element.key === 'BannerHgroup') {
|
|
72
|
+
console.warn(element)
|
|
73
|
+
}
|
|
82
74
|
|
|
83
|
-
|
|
75
|
+
resetOptions(element, parent, options)
|
|
84
76
|
|
|
85
77
|
addMethods(element, parent, options)
|
|
86
78
|
|
|
@@ -92,19 +84,21 @@ export const create = async (element, parent, key, options = OPTIONS.create || {
|
|
|
92
84
|
createIfConditionFlag(element, parent)
|
|
93
85
|
|
|
94
86
|
// apply props settings
|
|
95
|
-
|
|
96
|
-
if (element.scope === 'props' || element.scope === true)
|
|
87
|
+
initProps(element, parent, options)
|
|
88
|
+
if (element.scope === 'props' || element.scope === true) {
|
|
89
|
+
element.scope = element.props
|
|
90
|
+
}
|
|
97
91
|
|
|
98
92
|
// recatch if it passess props again
|
|
99
93
|
createIfConditionFlag(element, parent)
|
|
100
94
|
|
|
101
95
|
// if it already HAS a NODE
|
|
102
|
-
if (element.node
|
|
103
|
-
return assignNode(element, parent, key, attachOptions)
|
|
96
|
+
if (element.node) {
|
|
97
|
+
if (ref.__if) return assignNode(element, parent, key, attachOptions)
|
|
104
98
|
}
|
|
105
99
|
|
|
106
100
|
// apply variants
|
|
107
|
-
applyVariant(element, parent)
|
|
101
|
+
// applyVariant(element, parent)
|
|
108
102
|
|
|
109
103
|
const onInit = await triggerEventOn('init', element, options)
|
|
110
104
|
if (onInit === false) return element
|
|
@@ -114,8 +108,6 @@ export const create = async (element, parent, key, options = OPTIONS.create || {
|
|
|
114
108
|
// generate a CLASS name
|
|
115
109
|
assignKeyAsClassname(element)
|
|
116
110
|
|
|
117
|
-
addChildrenIfNotInOriginal(element, parent, key)
|
|
118
|
-
|
|
119
111
|
await renderElement(element, parent, options, attachOptions)
|
|
120
112
|
|
|
121
113
|
addElementIntoParentChildren(element, parent)
|
|
@@ -125,97 +117,32 @@ export const create = async (element, parent, key, options = OPTIONS.create || {
|
|
|
125
117
|
return element
|
|
126
118
|
}
|
|
127
119
|
|
|
128
|
-
const
|
|
129
|
-
// if ELEMENT is not given
|
|
130
|
-
if (element === undefined) {
|
|
131
|
-
if (ENV === 'test' || ENV === 'development') {
|
|
132
|
-
console.warn(key, 'element is undefined in', parent && parent.__ref && parent.__ref.path)
|
|
133
|
-
}
|
|
134
|
-
return {}
|
|
135
|
-
}
|
|
136
|
-
if (isString(key) && key.slice(0, 2 === '__')) {
|
|
137
|
-
if (ENV === 'test' || ENV === 'development') {
|
|
138
|
-
console.warn(key, 'seems like to be in __ref')
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
if (element === null) return
|
|
142
|
-
if (element === true) return { text: true }
|
|
143
|
-
|
|
144
|
-
// if element is extend
|
|
145
|
-
if (element.__hash) {
|
|
146
|
-
return { extend: element }
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
return element
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
const redefineElement = (element, parent, key, options) => {
|
|
153
|
-
const elementWrapper = createBasedOnType(element, parent, key, options)
|
|
154
|
-
|
|
155
|
-
if (options.syntaxv3 || (element.props && element.props.syntaxv3) || (parent && parent.props && parent.props.syntaxv3) /* kalduna guard */) {
|
|
156
|
-
if (element.props) element.props.syntaxv3 = true
|
|
157
|
-
else element.syntaxv3 = true
|
|
158
|
-
return createValidDomqlObjectFromSugar(element, parent, key, options)
|
|
159
|
-
} else if (checkIfKeyIsComponent(key)) {
|
|
160
|
-
return applyKeyComponentAsExtend(elementWrapper, parent, key)
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
// TODO: move as define plugins
|
|
164
|
-
// Responsive rendering
|
|
165
|
-
if (checkIfMedia(key)) {
|
|
166
|
-
return applyMediaProps(elementWrapper, parent, key)
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
return elementWrapper
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
const redefineParent = (element, parent, key, options) => {
|
|
173
|
-
if (!parent) return ROOT
|
|
174
|
-
if (isNode(parent)) {
|
|
175
|
-
const parentNodeWrapper = { key: ':root', node: parent }
|
|
176
|
-
ROOT[`${key}_parent`] = parentNodeWrapper
|
|
177
|
-
return parentNodeWrapper
|
|
178
|
-
}
|
|
179
|
-
return parent
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
const cacheOptions = (element, options) => {
|
|
120
|
+
const cacheOptions = options => {
|
|
183
121
|
if (options && !OPTIONS.create) {
|
|
184
122
|
OPTIONS.create = options
|
|
185
|
-
OPTIONS.create.context =
|
|
123
|
+
OPTIONS.create.context = options.context
|
|
186
124
|
}
|
|
187
125
|
}
|
|
188
126
|
|
|
189
|
-
const
|
|
190
|
-
return (
|
|
191
|
-
exec(key, element) ||
|
|
192
|
-
key ||
|
|
193
|
-
element.key ||
|
|
194
|
-
generateKey()
|
|
195
|
-
).toString()
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
const addRef = (element, parent) => {
|
|
199
|
-
if (element.__ref) element.__ref.origin = element
|
|
200
|
-
else element.__ref = { origin: element }
|
|
201
|
-
return element.__ref
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
const switchDefaultOptions = (element, parent, options) => {
|
|
127
|
+
const resetOptions = (element, parent, options) => {
|
|
205
128
|
if (Object.keys(options).length) {
|
|
206
|
-
|
|
207
|
-
if (options.
|
|
129
|
+
OPTIONS.defaultOptions = options
|
|
130
|
+
if (options.ignoreChildExtends) delete options.ignoreChildExtends
|
|
208
131
|
}
|
|
209
132
|
}
|
|
210
133
|
|
|
211
134
|
const addElementIntoParentChildren = (element, parent) => {
|
|
212
|
-
if (parent.__ref && parent.__ref.__children)
|
|
135
|
+
if (parent.__ref && parent.__ref.__children) {
|
|
136
|
+
parent.__ref.__children.push(element.key)
|
|
137
|
+
}
|
|
213
138
|
}
|
|
214
139
|
|
|
215
140
|
const visitedElements = new WeakMap()
|
|
216
141
|
const renderElement = async (element, parent, options, attachOptions) => {
|
|
217
142
|
if (visitedElements.has(element)) {
|
|
218
|
-
if (ENV === 'test' || ENV === 'development')
|
|
143
|
+
if (ENV === 'test' || ENV === 'development') {
|
|
144
|
+
console.warn('Cyclic rendering detected:', element.__ref.path)
|
|
145
|
+
}
|
|
219
146
|
}
|
|
220
147
|
|
|
221
148
|
visitedElements.set(element, true)
|
|
@@ -237,14 +164,31 @@ const renderElement = async (element, parent, options, attachOptions) => {
|
|
|
237
164
|
await createNestedChild()
|
|
238
165
|
} catch (e) {
|
|
239
166
|
const path = ref.path
|
|
240
|
-
if (path.includes('ComponentsGrid'))
|
|
241
|
-
|
|
167
|
+
if (path.includes('ComponentsGrid')) {
|
|
168
|
+
path.splice(0, path.indexOf('ComponentsGrid') + 2)
|
|
169
|
+
}
|
|
170
|
+
if (path.includes('demoComponent')) {
|
|
171
|
+
path.splice(0, path.indexOf('demoComponent') + 1)
|
|
172
|
+
}
|
|
242
173
|
const isDemoComponent = element.lookup(el => el.state.key)?.state?.key
|
|
243
|
-
element.warn(
|
|
174
|
+
element.warn(
|
|
175
|
+
'Error happened in:',
|
|
176
|
+
isDemoComponent ? isDemoComponent + ' ' : '' + path.join('.')
|
|
177
|
+
)
|
|
244
178
|
element.verbose()
|
|
245
179
|
element.error(e, options)
|
|
246
|
-
if (element.on?.error)
|
|
247
|
-
|
|
180
|
+
if (element.on?.error) {
|
|
181
|
+
element.on.error(e, element, element.state, element.context, options)
|
|
182
|
+
}
|
|
183
|
+
if (element.props?.onError) {
|
|
184
|
+
element.props.onError(
|
|
185
|
+
e,
|
|
186
|
+
element,
|
|
187
|
+
element.state,
|
|
188
|
+
element.context,
|
|
189
|
+
options
|
|
190
|
+
)
|
|
191
|
+
}
|
|
248
192
|
}
|
|
249
193
|
}
|
|
250
194
|
|
|
@@ -273,109 +217,32 @@ const renderElement = async (element, parent, options, attachOptions) => {
|
|
|
273
217
|
await triggerEventOn('create', element, options)
|
|
274
218
|
}
|
|
275
219
|
|
|
276
|
-
const checkIfPrimitive = (element) => is(element)('string', 'number')
|
|
277
|
-
|
|
278
|
-
const applyValueAsText = (element, parent, key) => {
|
|
279
|
-
const extendTag = element.extend && element.extend.tag
|
|
280
|
-
const childExtendTag = parent.childExtend && parent.childExtend.tag
|
|
281
|
-
const childPropsTag = parent.props.childProps && parent.props.childProps.tag
|
|
282
|
-
const isKeyValidHTMLTag = ((HTML_TAGS.body.indexOf(key) > -1) && key)
|
|
283
|
-
return {
|
|
284
|
-
text: element,
|
|
285
|
-
tag: extendTag || childExtendTag || childPropsTag || isKeyValidHTMLTag || 'string'
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
const applyContext = (element, parent, options) => {
|
|
290
|
-
const forcedOptionsContext = options.context && !ROOT.context && !element.context
|
|
291
|
-
if (forcedOptionsContext) ROOT.context = options.context
|
|
292
|
-
|
|
293
|
-
// inherit from parent or root
|
|
294
|
-
if (!element.context) element.context = parent.context || options.context || ROOT.context
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
// Create scope - shared object across the elements to the own or the nearest parent
|
|
298
|
-
const createScope = (element, parent) => {
|
|
299
|
-
const { __ref: ref } = element
|
|
300
|
-
// If the element doesn't have a scope, initialize it using the parent's scope or the root's scope.
|
|
301
|
-
if (!element.scope) element.scope = parent.scope || ref.root.scope || {}
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
const createIfConditionFlag = (element, parent) => {
|
|
305
|
-
const { __ref: ref } = element
|
|
306
|
-
|
|
307
|
-
if (isFunction(element.if) && !element.if(element, element.state, element.context)) {
|
|
308
|
-
delete ref.__if
|
|
309
|
-
} else ref.__if = true
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
const addCaching = (element, parent) => {
|
|
313
|
-
const { __ref: ref, key } = element
|
|
314
|
-
let { __ref: parentRef } = parent
|
|
315
|
-
|
|
316
|
-
// enable TRANSFORM in data
|
|
317
|
-
if (!element.transform) element.transform = {}
|
|
318
|
-
|
|
319
|
-
// enable CACHING
|
|
320
|
-
if (!ref.__cached) ref.__cached = {}
|
|
321
|
-
if (!ref.__defineCache) ref.__defineCache = {}
|
|
322
|
-
|
|
323
|
-
// enable EXEC
|
|
324
|
-
if (!ref.__exec) ref.__exec = {}
|
|
325
|
-
if (!ref.__execProps) ref.__execProps = {}
|
|
326
|
-
|
|
327
|
-
// enable CLASS CACHING
|
|
328
|
-
if (!ref.__class) ref.__class = {}
|
|
329
|
-
if (!ref.__classNames) ref.__classNames = {}
|
|
330
|
-
|
|
331
|
-
// enable CLASS CACHING
|
|
332
|
-
if (!ref.__attr) ref.__attr = {}
|
|
333
|
-
|
|
334
|
-
// enable CHANGES storing
|
|
335
|
-
if (!ref.__changes) ref.__changes = []
|
|
336
|
-
|
|
337
|
-
// enable CHANGES storing
|
|
338
|
-
if (!ref.__children) ref.__children = []
|
|
339
|
-
|
|
340
|
-
if (checkIfKeyIsComponent(key)) ref.__componentKey = key.split('_')[0].split('.')[0].split('+')[0]
|
|
341
|
-
|
|
342
|
-
// Add _root element property
|
|
343
|
-
const hasRoot = parent && parent.key === ':root'
|
|
344
|
-
if (!ref.root) ref.root = hasRoot ? element : parentRef.root
|
|
345
|
-
|
|
346
|
-
// set the PATH array
|
|
347
|
-
// if (ENV === 'test' || ENV === 'development') {
|
|
348
|
-
if (!parentRef) parentRef = parent.ref = {}
|
|
349
|
-
if (!parentRef.path) parentRef.path = []
|
|
350
|
-
ref.path = parentRef.path.concat(element.key)
|
|
351
|
-
// }
|
|
352
|
-
}
|
|
353
|
-
|
|
354
220
|
const onlyResolveExtends = (element, parent, key, options) => {
|
|
355
221
|
const { __ref: ref } = element
|
|
356
|
-
if (!ref.__skipCreate) {
|
|
357
|
-
addCaching(element, parent)
|
|
358
222
|
|
|
359
|
-
|
|
223
|
+
addMethods(element, parent, options)
|
|
360
224
|
|
|
361
|
-
|
|
225
|
+
createScope(element, parent)
|
|
362
226
|
|
|
363
|
-
|
|
364
|
-
|
|
227
|
+
createState(element, parent)
|
|
228
|
+
if (element.scope === 'state') element.scope = element.state
|
|
365
229
|
|
|
366
|
-
|
|
230
|
+
createIfConditionFlag(element, parent)
|
|
367
231
|
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
232
|
+
// apply props settings
|
|
233
|
+
initProps(element, parent, options)
|
|
234
|
+
if (element.scope === 'props' || element.scope === true) {
|
|
235
|
+
element.scope = element.props
|
|
236
|
+
}
|
|
371
237
|
|
|
372
|
-
|
|
238
|
+
if (element.node && ref.__if) {
|
|
239
|
+
parent[key || element.key] = element
|
|
240
|
+
} // Borrowed from assignNode()
|
|
373
241
|
|
|
374
|
-
|
|
375
|
-
|
|
242
|
+
if (!element.props) element.props = {}
|
|
243
|
+
// applyVariant(element, parent)
|
|
376
244
|
|
|
377
|
-
|
|
378
|
-
}
|
|
245
|
+
addElementIntoParentChildren(element, parent)
|
|
379
246
|
|
|
380
247
|
if (element.tag !== 'string' && element.tag !== 'fragment') {
|
|
381
248
|
throughInitialDefine(element)
|
|
@@ -385,18 +252,24 @@ const onlyResolveExtends = (element, parent, key, options) => {
|
|
|
385
252
|
if (
|
|
386
253
|
isUndefined(element[k]) ||
|
|
387
254
|
isMethod(k, element) ||
|
|
388
|
-
isObject(
|
|
389
|
-
|
|
390
|
-
|
|
255
|
+
isObject(REGISTRY[k])
|
|
256
|
+
) {
|
|
257
|
+
continue
|
|
258
|
+
}
|
|
391
259
|
|
|
392
260
|
const hasDefine = element.define && element.define[k]
|
|
393
|
-
const contextHasDefine =
|
|
394
|
-
|
|
261
|
+
const contextHasDefine =
|
|
262
|
+
element.context && element.context.define && element.context.define[k]
|
|
395
263
|
const optionsHasDefine = options.define && options.define[k]
|
|
396
264
|
|
|
397
265
|
if (!ref.__skipCreate && REGISTRY[k] && !optionsHasDefine) {
|
|
398
266
|
continue
|
|
399
|
-
} else if (
|
|
267
|
+
} else if (
|
|
268
|
+
element[k] &&
|
|
269
|
+
!hasDefine &&
|
|
270
|
+
!optionsHasDefine &&
|
|
271
|
+
!contextHasDefine
|
|
272
|
+
) {
|
|
400
273
|
create(exec(element[k], element), element, k, options)
|
|
401
274
|
}
|
|
402
275
|
}
|
|
@@ -407,7 +280,7 @@ const onlyResolveExtends = (element, parent, key, options) => {
|
|
|
407
280
|
delete element.update
|
|
408
281
|
delete element.__element
|
|
409
282
|
|
|
410
|
-
// added by
|
|
283
|
+
// added by initProps
|
|
411
284
|
if (element.props) {
|
|
412
285
|
delete element.props.update
|
|
413
286
|
delete element.props.__element
|
|
@@ -416,24 +289,24 @@ const onlyResolveExtends = (element, parent, key, options) => {
|
|
|
416
289
|
return element
|
|
417
290
|
}
|
|
418
291
|
|
|
419
|
-
const checkIfMedia = (key) => key.slice(0, 1) === '@'
|
|
420
|
-
|
|
421
|
-
const applyMediaProps = (element, parent, key) => {
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
}
|
|
292
|
+
// const checkIfMedia = (key) => key.slice(0, 1) === '@'
|
|
293
|
+
|
|
294
|
+
// const applyMediaProps = (element, parent, key) => {
|
|
295
|
+
// const { props } = element
|
|
296
|
+
// if (props) {
|
|
297
|
+
// props.display = 'none'
|
|
298
|
+
// if (props[key]) props[key].display = props.display
|
|
299
|
+
// else props[key] = { display: props.display || 'block' }
|
|
300
|
+
// return element
|
|
301
|
+
// } else {
|
|
302
|
+
// return {
|
|
303
|
+
// ...element,
|
|
304
|
+
// props: {
|
|
305
|
+
// display: 'none',
|
|
306
|
+
// [key]: { display: 'block' }
|
|
307
|
+
// }
|
|
308
|
+
// }
|
|
309
|
+
// }
|
|
310
|
+
// }
|
|
438
311
|
|
|
439
312
|
export default create
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
var import_update = require("../update");
|
|
2
|
+
describe("checkIfOnUpdate via update()", () => {
|
|
3
|
+
let element, parent, options;
|
|
4
|
+
beforeEach(() => {
|
|
5
|
+
parent = {
|
|
6
|
+
node: document.createElement("div"),
|
|
7
|
+
props: {},
|
|
8
|
+
state: {}
|
|
9
|
+
};
|
|
10
|
+
element = {
|
|
11
|
+
__ref: {
|
|
12
|
+
__if: void 0,
|
|
13
|
+
__state: null,
|
|
14
|
+
__hasRootState: false,
|
|
15
|
+
__execProps: {},
|
|
16
|
+
contentElementKey: "content"
|
|
17
|
+
},
|
|
18
|
+
parent,
|
|
19
|
+
props: {},
|
|
20
|
+
state: {
|
|
21
|
+
update: (el, st) => {
|
|
22
|
+
return st;
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
context: {
|
|
26
|
+
defaultExtends: {}
|
|
27
|
+
},
|
|
28
|
+
node: document.createElement("div"),
|
|
29
|
+
if: () => true,
|
|
30
|
+
previousElement: () => {
|
|
31
|
+
return {};
|
|
32
|
+
},
|
|
33
|
+
nextElement: () => {
|
|
34
|
+
return {};
|
|
35
|
+
},
|
|
36
|
+
removeContent: () => {
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
options = {};
|
|
41
|
+
});
|
|
42
|
+
it("uses props.if when element.if missing", async () => {
|
|
43
|
+
delete element.if;
|
|
44
|
+
element.props.if = () => false;
|
|
45
|
+
await import_update.update.call(element, {}, options);
|
|
46
|
+
expect(element.node).toEqual(document.createElement("div"));
|
|
47
|
+
});
|
|
48
|
+
it("retains state when __hasRootState=true", async () => {
|
|
49
|
+
element.__ref.__hasRootState = true;
|
|
50
|
+
element.state.critical = true;
|
|
51
|
+
element.__ref.__if = false;
|
|
52
|
+
await import_update.update.call(element, {}, options);
|
|
53
|
+
expect(element.state.critical).toBe(true);
|
|
54
|
+
expect(element.state.preserved).toBeUndefined();
|
|
55
|
+
});
|
|
56
|
+
it("processes nested content with parseDeep", async () => {
|
|
57
|
+
element.content = {
|
|
58
|
+
parseDeep: () => ({ parsed: true }),
|
|
59
|
+
existing: "data"
|
|
60
|
+
};
|
|
61
|
+
await import_update.update.call(element, {}, options);
|
|
62
|
+
expect(element.content.parsed).toBe(true);
|
|
63
|
+
expect(element.content.existing).toBeUndefined();
|
|
64
|
+
});
|
|
65
|
+
it("reattaches after previous sibling", async () => {
|
|
66
|
+
const prevNode = document.createElement("span");
|
|
67
|
+
parent.node.appendChild(prevNode);
|
|
68
|
+
await import_update.update.call(element, {}, options);
|
|
69
|
+
const newElement = parent.node.children[0];
|
|
70
|
+
expect(newElement).toEqual(document.createElement("span"));
|
|
71
|
+
expect(newElement.previousSibling).toBe(null);
|
|
72
|
+
});
|
|
73
|
+
});
|