@domql/element 2.5.200 → 3.0.0
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 -255
- 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 +78 -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 +83 -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,72 @@ 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
|
|
23
20
|
} from '@domql/utils'
|
|
24
21
|
|
|
25
22
|
import { applyAnimationFrame, triggerEventOn } from '@domql/event'
|
|
26
23
|
import { assignNode } from '@domql/render'
|
|
27
24
|
import { createState } from '@domql/state'
|
|
28
25
|
|
|
29
|
-
import {
|
|
30
|
-
import { createProps } from './props/index.js'
|
|
31
|
-
import { applyExtend } from './extend.js'
|
|
32
|
-
import { REGISTRY, registry } from './mixins/index.js'
|
|
26
|
+
import { REGISTRY } from './mixins/index.js'
|
|
33
27
|
import { addMethods } from './methods/set.js'
|
|
34
28
|
import { assignKeyAsClassname } from './mixins/classList.js'
|
|
35
29
|
import { throughInitialExec, throughInitialDefine } from './iterate.js'
|
|
36
30
|
|
|
37
|
-
import { OPTIONS } from './cache/options.js'
|
|
38
|
-
|
|
39
|
-
import {
|
|
40
|
-
applyVariant,
|
|
41
|
-
createValidDomqlObjectFromSugar
|
|
42
|
-
} from './utils/component.js'
|
|
43
|
-
|
|
44
31
|
const ENV = process.env.NODE_ENV
|
|
45
32
|
|
|
46
33
|
/**
|
|
47
|
-
* Creating a
|
|
34
|
+
* Creating a DOMQL element using passed parameters
|
|
48
35
|
*/
|
|
49
|
-
export const create = async (
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
36
|
+
export const create = async (
|
|
37
|
+
props,
|
|
38
|
+
parentEl,
|
|
39
|
+
passedKey,
|
|
40
|
+
options = OPTIONS.create || {},
|
|
41
|
+
attachOptions
|
|
42
|
+
) => {
|
|
43
|
+
cacheOptions(options)
|
|
44
|
+
|
|
45
|
+
const element = createElement(props, parentEl, passedKey, options, ROOT)
|
|
46
|
+
if (!element) return
|
|
47
|
+
|
|
48
|
+
const { key, parent, __ref: ref } = element
|
|
49
|
+
|
|
50
|
+
if (element.key === 'BannerHgroup') {
|
|
51
|
+
console.warn(deepClone(element))
|
|
55
52
|
}
|
|
56
53
|
|
|
57
|
-
|
|
58
|
-
parent = redefineParent(element, parent, key)
|
|
59
|
-
key = createKey(element, parent, key)
|
|
60
|
-
|
|
61
|
-
const ref = addRef(element, parent, key)
|
|
62
|
-
|
|
63
|
-
ref.__initialProps = deepClone(element.props)
|
|
54
|
+
applyExtends(element, parent, options)
|
|
64
55
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
applyComponentFromContext(element, parent, options)
|
|
68
|
-
|
|
69
|
-
if (!ref.__skipCreate) {
|
|
70
|
-
applyExtend(element, parent, options)
|
|
56
|
+
if (element.key === 'BannerHgroup') {
|
|
57
|
+
console.warn(deepClone(element))
|
|
71
58
|
}
|
|
72
59
|
|
|
73
|
-
element
|
|
60
|
+
propertizeElement(element, parent)
|
|
61
|
+
|
|
62
|
+
await triggerEventOn('start', element, options)
|
|
74
63
|
|
|
75
64
|
if (options.onlyResolveExtends) {
|
|
76
65
|
return onlyResolveExtends(element, parent, key, options)
|
|
77
66
|
}
|
|
78
67
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
68
|
+
if (element.key === 'BannerHgroup') {
|
|
69
|
+
console.warn(element)
|
|
70
|
+
}
|
|
82
71
|
|
|
83
|
-
|
|
72
|
+
resetOptions(element, parent, options)
|
|
84
73
|
|
|
85
74
|
addMethods(element, parent, options)
|
|
86
75
|
|
|
@@ -92,19 +81,21 @@ export const create = async (element, parent, key, options = OPTIONS.create || {
|
|
|
92
81
|
createIfConditionFlag(element, parent)
|
|
93
82
|
|
|
94
83
|
// apply props settings
|
|
95
|
-
|
|
96
|
-
if (element.scope === 'props' || element.scope === true)
|
|
84
|
+
initProps(element, parent, options)
|
|
85
|
+
if (element.scope === 'props' || element.scope === true) {
|
|
86
|
+
element.scope = element.props
|
|
87
|
+
}
|
|
97
88
|
|
|
98
89
|
// recatch if it passess props again
|
|
99
90
|
createIfConditionFlag(element, parent)
|
|
100
91
|
|
|
101
92
|
// if it already HAS a NODE
|
|
102
|
-
if (element.node
|
|
103
|
-
return assignNode(element, parent, key, attachOptions)
|
|
93
|
+
if (element.node) {
|
|
94
|
+
if (ref.__if) return assignNode(element, parent, key, attachOptions)
|
|
104
95
|
}
|
|
105
96
|
|
|
106
97
|
// apply variants
|
|
107
|
-
applyVariant(element, parent)
|
|
98
|
+
// applyVariant(element, parent)
|
|
108
99
|
|
|
109
100
|
const onInit = await triggerEventOn('init', element, options)
|
|
110
101
|
if (onInit === false) return element
|
|
@@ -114,8 +105,6 @@ export const create = async (element, parent, key, options = OPTIONS.create || {
|
|
|
114
105
|
// generate a CLASS name
|
|
115
106
|
assignKeyAsClassname(element)
|
|
116
107
|
|
|
117
|
-
addChildrenIfNotInOriginal(element, parent, key)
|
|
118
|
-
|
|
119
108
|
await renderElement(element, parent, options, attachOptions)
|
|
120
109
|
|
|
121
110
|
addElementIntoParentChildren(element, parent)
|
|
@@ -125,97 +114,32 @@ export const create = async (element, parent, key, options = OPTIONS.create || {
|
|
|
125
114
|
return element
|
|
126
115
|
}
|
|
127
116
|
|
|
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) => {
|
|
117
|
+
const cacheOptions = options => {
|
|
183
118
|
if (options && !OPTIONS.create) {
|
|
184
119
|
OPTIONS.create = options
|
|
185
|
-
OPTIONS.create.context =
|
|
120
|
+
OPTIONS.create.context = options.context
|
|
186
121
|
}
|
|
187
122
|
}
|
|
188
123
|
|
|
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) => {
|
|
124
|
+
const resetOptions = (element, parent, options) => {
|
|
205
125
|
if (Object.keys(options).length) {
|
|
206
|
-
|
|
207
|
-
if (options.
|
|
126
|
+
OPTIONS.defaultOptions = options
|
|
127
|
+
if (options.ignoreChildExtends) delete options.ignoreChildExtends
|
|
208
128
|
}
|
|
209
129
|
}
|
|
210
130
|
|
|
211
131
|
const addElementIntoParentChildren = (element, parent) => {
|
|
212
|
-
if (parent.__ref && parent.__ref.__children)
|
|
132
|
+
if (parent.__ref && parent.__ref.__children) {
|
|
133
|
+
parent.__ref.__children.push(element.key)
|
|
134
|
+
}
|
|
213
135
|
}
|
|
214
136
|
|
|
215
137
|
const visitedElements = new WeakMap()
|
|
216
138
|
const renderElement = async (element, parent, options, attachOptions) => {
|
|
217
139
|
if (visitedElements.has(element)) {
|
|
218
|
-
if (ENV === 'test' || ENV === 'development')
|
|
140
|
+
if (ENV === 'test' || ENV === 'development') {
|
|
141
|
+
console.warn('Cyclic rendering detected:', element.__ref.path)
|
|
142
|
+
}
|
|
219
143
|
}
|
|
220
144
|
|
|
221
145
|
visitedElements.set(element, true)
|
|
@@ -237,14 +161,31 @@ const renderElement = async (element, parent, options, attachOptions) => {
|
|
|
237
161
|
await createNestedChild()
|
|
238
162
|
} catch (e) {
|
|
239
163
|
const path = ref.path
|
|
240
|
-
if (path.includes('ComponentsGrid'))
|
|
241
|
-
|
|
164
|
+
if (path.includes('ComponentsGrid')) {
|
|
165
|
+
path.splice(0, path.indexOf('ComponentsGrid') + 2)
|
|
166
|
+
}
|
|
167
|
+
if (path.includes('demoComponent')) {
|
|
168
|
+
path.splice(0, path.indexOf('demoComponent') + 1)
|
|
169
|
+
}
|
|
242
170
|
const isDemoComponent = element.lookup(el => el.state.key)?.state?.key
|
|
243
|
-
element.warn(
|
|
171
|
+
element.warn(
|
|
172
|
+
'Error happened in:',
|
|
173
|
+
isDemoComponent ? isDemoComponent + ' ' : '' + path.join('.')
|
|
174
|
+
)
|
|
244
175
|
element.verbose()
|
|
245
176
|
element.error(e, options)
|
|
246
|
-
if (element.on?.error)
|
|
247
|
-
|
|
177
|
+
if (element.on?.error) {
|
|
178
|
+
element.on.error(e, element, element.state, element.context, options)
|
|
179
|
+
}
|
|
180
|
+
if (element.props?.onError) {
|
|
181
|
+
element.props.onError(
|
|
182
|
+
e,
|
|
183
|
+
element,
|
|
184
|
+
element.state,
|
|
185
|
+
element.context,
|
|
186
|
+
options
|
|
187
|
+
)
|
|
188
|
+
}
|
|
248
189
|
}
|
|
249
190
|
}
|
|
250
191
|
|
|
@@ -273,109 +214,32 @@ const renderElement = async (element, parent, options, attachOptions) => {
|
|
|
273
214
|
await triggerEventOn('create', element, options)
|
|
274
215
|
}
|
|
275
216
|
|
|
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
217
|
const onlyResolveExtends = (element, parent, key, options) => {
|
|
355
218
|
const { __ref: ref } = element
|
|
356
|
-
if (!ref.__skipCreate) {
|
|
357
|
-
addCaching(element, parent)
|
|
358
219
|
|
|
359
|
-
|
|
220
|
+
addMethods(element, parent, options)
|
|
360
221
|
|
|
361
|
-
|
|
222
|
+
createScope(element, parent)
|
|
362
223
|
|
|
363
|
-
|
|
364
|
-
|
|
224
|
+
createState(element, parent)
|
|
225
|
+
if (element.scope === 'state') element.scope = element.state
|
|
365
226
|
|
|
366
|
-
|
|
227
|
+
createIfConditionFlag(element, parent)
|
|
367
228
|
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
229
|
+
// apply props settings
|
|
230
|
+
initProps(element, parent, options)
|
|
231
|
+
if (element.scope === 'props' || element.scope === true) {
|
|
232
|
+
element.scope = element.props
|
|
233
|
+
}
|
|
371
234
|
|
|
372
|
-
|
|
235
|
+
if (element.node && ref.__if) {
|
|
236
|
+
parent[key || element.key] = element
|
|
237
|
+
} // Borrowed from assignNode()
|
|
373
238
|
|
|
374
|
-
|
|
375
|
-
|
|
239
|
+
if (!element.props) element.props = {}
|
|
240
|
+
// applyVariant(element, parent)
|
|
376
241
|
|
|
377
|
-
|
|
378
|
-
}
|
|
242
|
+
addElementIntoParentChildren(element, parent)
|
|
379
243
|
|
|
380
244
|
if (element.tag !== 'string' && element.tag !== 'fragment') {
|
|
381
245
|
throughInitialDefine(element)
|
|
@@ -385,18 +249,24 @@ const onlyResolveExtends = (element, parent, key, options) => {
|
|
|
385
249
|
if (
|
|
386
250
|
isUndefined(element[k]) ||
|
|
387
251
|
isMethod(k, element) ||
|
|
388
|
-
isObject(
|
|
389
|
-
|
|
390
|
-
|
|
252
|
+
isObject(REGISTRY[k])
|
|
253
|
+
) {
|
|
254
|
+
continue
|
|
255
|
+
}
|
|
391
256
|
|
|
392
257
|
const hasDefine = element.define && element.define[k]
|
|
393
|
-
const contextHasDefine =
|
|
394
|
-
|
|
258
|
+
const contextHasDefine =
|
|
259
|
+
element.context && element.context.define && element.context.define[k]
|
|
395
260
|
const optionsHasDefine = options.define && options.define[k]
|
|
396
261
|
|
|
397
262
|
if (!ref.__skipCreate && REGISTRY[k] && !optionsHasDefine) {
|
|
398
263
|
continue
|
|
399
|
-
} else if (
|
|
264
|
+
} else if (
|
|
265
|
+
element[k] &&
|
|
266
|
+
!hasDefine &&
|
|
267
|
+
!optionsHasDefine &&
|
|
268
|
+
!contextHasDefine
|
|
269
|
+
) {
|
|
400
270
|
create(exec(element[k], element), element, k, options)
|
|
401
271
|
}
|
|
402
272
|
}
|
|
@@ -407,7 +277,7 @@ const onlyResolveExtends = (element, parent, key, options) => {
|
|
|
407
277
|
delete element.update
|
|
408
278
|
delete element.__element
|
|
409
279
|
|
|
410
|
-
// added by
|
|
280
|
+
// added by initProps
|
|
411
281
|
if (element.props) {
|
|
412
282
|
delete element.props.update
|
|
413
283
|
delete element.props.__element
|
|
@@ -416,24 +286,24 @@ const onlyResolveExtends = (element, parent, key, options) => {
|
|
|
416
286
|
return element
|
|
417
287
|
}
|
|
418
288
|
|
|
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
|
-
}
|
|
289
|
+
// const checkIfMedia = (key) => key.slice(0, 1) === '@'
|
|
290
|
+
|
|
291
|
+
// const applyMediaProps = (element, parent, key) => {
|
|
292
|
+
// const { props } = element
|
|
293
|
+
// if (props) {
|
|
294
|
+
// props.display = 'none'
|
|
295
|
+
// if (props[key]) props[key].display = props.display
|
|
296
|
+
// else props[key] = { display: props.display || 'block' }
|
|
297
|
+
// return element
|
|
298
|
+
// } else {
|
|
299
|
+
// return {
|
|
300
|
+
// ...element,
|
|
301
|
+
// props: {
|
|
302
|
+
// display: 'none',
|
|
303
|
+
// [key]: { display: 'block' }
|
|
304
|
+
// }
|
|
305
|
+
// }
|
|
306
|
+
// }
|
|
307
|
+
// }
|
|
438
308
|
|
|
439
309
|
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
|
+
});
|