@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/mixins/index.js
CHANGED
|
@@ -2,20 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
import { attr } from './attr.js'
|
|
4
4
|
import { applyClasslist } from './classList.js'
|
|
5
|
-
import { setContent } from './content.js'
|
|
6
5
|
import { data } from './data.js'
|
|
7
6
|
import { html } from './html.js'
|
|
8
7
|
import { style } from './style.js'
|
|
9
8
|
import { text } from './text.js'
|
|
10
9
|
import { state } from './state.js'
|
|
11
10
|
import { scope } from './scope.js'
|
|
12
|
-
import { REGISTRY } from './registry.js'
|
|
13
|
-
|
|
14
|
-
export { REGISTRY as registry }
|
|
15
|
-
export { applyClasslist as classList }
|
|
16
|
-
export { setContent as content }
|
|
17
11
|
|
|
18
12
|
export {
|
|
13
|
+
applyClasslist as classList,
|
|
19
14
|
attr,
|
|
20
15
|
data,
|
|
21
16
|
style,
|
package/mixins/registry.js
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
import attr from './attr.js'
|
|
4
4
|
import { classList } from './classList.js'
|
|
5
|
-
import content from './content.js'
|
|
6
5
|
import data from './data.js'
|
|
7
6
|
import html from './html.js'
|
|
8
7
|
import scope from './scope.js'
|
|
@@ -15,79 +14,33 @@ export const REGISTRY = {
|
|
|
15
14
|
style,
|
|
16
15
|
text,
|
|
17
16
|
html,
|
|
18
|
-
content,
|
|
19
17
|
data,
|
|
20
18
|
class: classList,
|
|
21
19
|
state,
|
|
22
20
|
scope,
|
|
23
|
-
|
|
24
21
|
deps: (param, el) => param || el.parent.deps,
|
|
25
22
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
23
|
+
extends: {},
|
|
24
|
+
children: {},
|
|
25
|
+
content: {},
|
|
26
|
+
childExtends: {},
|
|
27
|
+
childExtendsRecursive: {},
|
|
29
28
|
props: {},
|
|
30
|
-
path: {},
|
|
31
29
|
if: {},
|
|
32
30
|
define: {},
|
|
33
|
-
transform: {},
|
|
34
31
|
__name: {},
|
|
35
32
|
__ref: {},
|
|
36
33
|
__hash: {},
|
|
37
34
|
__text: {},
|
|
38
|
-
nextElement: {},
|
|
39
|
-
previousElement: {},
|
|
40
35
|
key: {},
|
|
41
36
|
tag: {},
|
|
42
37
|
query: {},
|
|
43
38
|
parent: {},
|
|
44
39
|
node: {},
|
|
45
|
-
set: {},
|
|
46
|
-
reset: {},
|
|
47
|
-
update: {},
|
|
48
|
-
error: {},
|
|
49
|
-
warn: {},
|
|
50
|
-
call: {},
|
|
51
|
-
setProps: {},
|
|
52
|
-
remove: {},
|
|
53
|
-
updateContent: {},
|
|
54
|
-
removeContent: {},
|
|
55
40
|
variables: {},
|
|
56
|
-
lookup: {},
|
|
57
|
-
lookdown: {},
|
|
58
|
-
getRef: {},
|
|
59
|
-
getPath: {},
|
|
60
|
-
lookdownAll: {},
|
|
61
|
-
setNodeStyles: {},
|
|
62
|
-
spotByPath: {},
|
|
63
|
-
keys: {},
|
|
64
|
-
log: {},
|
|
65
|
-
parse: {},
|
|
66
|
-
parseDeep: {},
|
|
67
41
|
on: {},
|
|
68
42
|
component: {},
|
|
69
|
-
context: {}
|
|
70
|
-
$collection: {},
|
|
71
|
-
$stateCollection: {},
|
|
72
|
-
$propsCollection: {},
|
|
73
|
-
$setCollection: {},
|
|
74
|
-
$setStateCollection: {},
|
|
75
|
-
$setPropsCollection: {}
|
|
43
|
+
context: {}
|
|
76
44
|
}
|
|
77
45
|
|
|
78
46
|
export default REGISTRY
|
|
79
|
-
|
|
80
|
-
// List of keys for .parse() and .parseDeep() to include in the result.
|
|
81
|
-
// Keys not in the array are excluded.
|
|
82
|
-
export const parseFilters = {
|
|
83
|
-
elementKeys: [
|
|
84
|
-
'tag', 'text', 'style', 'attr', 'class', 'state', 'props',
|
|
85
|
-
'data', 'content', 'html', 'on', 'key', 'extend', 'childExtend',
|
|
86
|
-
'childExtendRecursive', 'scope', 'query',
|
|
87
|
-
'$collection', '$stateCollection', '$propsCollection'
|
|
88
|
-
],
|
|
89
|
-
propsKeys: ['__element', 'update'],
|
|
90
|
-
stateKeys: []
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
export const collectionFilters = ['$collection', '$stateCollection', '$propsCollection']
|
package/mixins/scope.js
CHANGED
|
@@ -6,7 +6,7 @@ import { isFunction, isObject } from '@domql/utils'
|
|
|
6
6
|
* Apply data parameters on the DOM nodes
|
|
7
7
|
* this should only work if `showOnNode: true` is passed
|
|
8
8
|
*/
|
|
9
|
-
export function scope (params, element, node) {
|
|
9
|
+
export async function scope (params, element, node) {
|
|
10
10
|
if (!isObject(params)) return
|
|
11
11
|
|
|
12
12
|
// Apply data params on node
|
package/mixins/state.js
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
import { exec, isObject } from '@domql/utils'
|
|
3
|
+
import { execPromise, isObject, STATE_METHODS } from '@domql/utils'
|
|
5
4
|
|
|
6
|
-
export function state (params, element, node) {
|
|
7
|
-
const state =
|
|
5
|
+
export async function state (params, element, node) {
|
|
6
|
+
const state = await execPromise(params, element)
|
|
8
7
|
|
|
9
8
|
if (isObject(state)) {
|
|
10
9
|
for (const param in state) {
|
|
11
|
-
if (
|
|
10
|
+
if (STATE_METHODS.includes(param)) continue
|
|
12
11
|
if (!Object.hasOwnProperty.call(state, param)) continue
|
|
13
12
|
// element.state[param] = exec(state[param], element)
|
|
14
13
|
}
|
package/mixins/text.js
CHANGED
|
@@ -1,17 +1,14 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
3
|
import { create } from '../create.js'
|
|
4
|
-
import {
|
|
5
|
-
exec,
|
|
6
|
-
isString
|
|
7
|
-
} from '@domql/utils'
|
|
4
|
+
import { exec, isString } from '@domql/utils'
|
|
8
5
|
|
|
9
6
|
/**
|
|
10
7
|
* Creates a text node and appends into
|
|
11
8
|
* an original one as a child
|
|
12
9
|
*/
|
|
13
|
-
export function text (param, element, node) {
|
|
14
|
-
let prop = exec(param, element)
|
|
10
|
+
export async function text (param, element, node) {
|
|
11
|
+
let prop = exec(param || element.props.text, element)
|
|
15
12
|
if (isString(prop) && prop.includes('{{')) {
|
|
16
13
|
prop = element.call('replaceLiteralsWithObjectFields', prop)
|
|
17
14
|
}
|
|
@@ -22,7 +19,7 @@ export function text (param, element, node) {
|
|
|
22
19
|
if (element.__text.text === prop) return
|
|
23
20
|
element.__text.text = prop
|
|
24
21
|
if (element.__text.node) element.__text.node.nodeValue = prop
|
|
25
|
-
} else create({ tag: 'string', text: prop }, element, '__text')
|
|
22
|
+
} else await create({ tag: 'string', text: prop }, element, '__text')
|
|
26
23
|
}
|
|
27
24
|
}
|
|
28
25
|
|
package/node.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { isFunction, isMethod, isObject, isUndefined } from '@domql/utils'
|
|
4
4
|
import { applyEventsOnNode, triggerEventOn } from '@domql/event'
|
|
5
5
|
import { cacheNode } from '@domql/render'
|
|
6
|
-
import { isMethod } from './methods/index.js'
|
|
7
6
|
import { create } from './create.js'
|
|
8
7
|
|
|
9
8
|
import {
|
|
@@ -13,79 +12,75 @@ import {
|
|
|
13
12
|
} from './iterate.js'
|
|
14
13
|
import { REGISTRY } from './mixins/index.js'
|
|
15
14
|
import { applyParam } from './utils/applyParam.js'
|
|
16
|
-
import
|
|
15
|
+
import setChildren from './children.js'
|
|
16
|
+
import { setContent } from './set.js'
|
|
17
17
|
// import { defineSetter } from './methods'
|
|
18
18
|
|
|
19
19
|
const ENV = process.env.NODE_ENV
|
|
20
20
|
|
|
21
|
-
export const createNode = async (element,
|
|
21
|
+
export const createNode = async (element, opts) => {
|
|
22
22
|
// create and assign a node
|
|
23
23
|
let { node, tag, __ref: ref } = element
|
|
24
24
|
|
|
25
|
+
if (!ref.__if) return element
|
|
26
|
+
|
|
25
27
|
let isNewNode
|
|
26
28
|
|
|
27
29
|
if (!node) {
|
|
28
30
|
isNewNode = true
|
|
29
31
|
|
|
30
|
-
if (!ref.__if) return element
|
|
31
|
-
|
|
32
32
|
if (tag === 'shadow') {
|
|
33
33
|
node = element.node = element.parent.node.attachShadow({ mode: 'open' })
|
|
34
34
|
} else node = element.node = cacheNode(element)
|
|
35
35
|
|
|
36
36
|
// trigger `on.attachNode`
|
|
37
|
-
triggerEventOn('attachNode', element,
|
|
37
|
+
await triggerEventOn('attachNode', element, opts)
|
|
38
38
|
}
|
|
39
39
|
// node.dataset // .key = element.key
|
|
40
40
|
|
|
41
|
-
if (ENV === 'test' || ENV === 'development' ||
|
|
41
|
+
if (ENV === 'test' || ENV === 'development' || opts.alowRefReference) {
|
|
42
42
|
node.ref = element
|
|
43
43
|
if (isFunction(node.setAttribute)) node.setAttribute('key', element.key)
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
// iterate through exec props
|
|
47
|
-
throughExecProps(element)
|
|
47
|
+
await throughExecProps(element)
|
|
48
48
|
|
|
49
49
|
// iterate through define
|
|
50
|
-
throughInitialDefine(element)
|
|
50
|
+
await throughInitialDefine(element)
|
|
51
51
|
|
|
52
52
|
// iterate through exec
|
|
53
|
-
throughInitialExec(element)
|
|
54
|
-
|
|
55
|
-
if (element.tag !== 'string' && element.tag !== 'fragment') {
|
|
56
|
-
propagateEventsFromProps(element)
|
|
53
|
+
await throughInitialExec(element)
|
|
57
54
|
|
|
58
|
-
|
|
59
|
-
applyEventsOnNode(element, options)
|
|
60
|
-
}
|
|
61
|
-
}
|
|
55
|
+
await applyEventsOnNode(element, { isNewNode, ...opts })
|
|
62
56
|
|
|
63
57
|
for (const param in element) {
|
|
64
58
|
const value = element[param]
|
|
65
59
|
|
|
66
|
-
if (!Object.hasOwnProperty.call(element, param)) continue
|
|
67
|
-
|
|
68
60
|
if (
|
|
61
|
+
!Object.hasOwnProperty.call(element, param) ||
|
|
69
62
|
isUndefined(value) ||
|
|
70
63
|
isMethod(param, element) ||
|
|
71
|
-
isVariant(param) ||
|
|
72
64
|
isObject(REGISTRY[param])
|
|
73
|
-
)
|
|
65
|
+
) {
|
|
66
|
+
continue
|
|
67
|
+
}
|
|
74
68
|
|
|
75
|
-
const isElement = applyParam(param, element,
|
|
69
|
+
const isElement = await applyParam(param, element, opts)
|
|
76
70
|
if (isElement) {
|
|
77
71
|
const { hasDefine, hasContextDefine } = isElement
|
|
78
72
|
if (element[param] && !hasDefine && !hasContextDefine) {
|
|
79
73
|
const createAsync = async () => {
|
|
80
|
-
await create(
|
|
74
|
+
await create(value, element, param, opts)
|
|
81
75
|
}
|
|
82
76
|
|
|
83
|
-
|
|
77
|
+
// TODO: test this with promise
|
|
78
|
+
// handle lazy load
|
|
79
|
+
if ((element.props && element.props.lazyLoad) || opts.lazyLoad) {
|
|
84
80
|
window.requestAnimationFrame(async () => {
|
|
85
81
|
await createAsync()
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
triggerEventOn('lazyLoad', element, options)
|
|
82
|
+
if (!opts.preventUpdateListener) {
|
|
83
|
+
await triggerEventOn('lazyLoad', element, opts)
|
|
89
84
|
}
|
|
90
85
|
})
|
|
91
86
|
} else await createAsync()
|
|
@@ -93,6 +88,14 @@ export const createNode = async (element, options) => {
|
|
|
93
88
|
}
|
|
94
89
|
}
|
|
95
90
|
|
|
91
|
+
const content = element.children
|
|
92
|
+
? await setChildren(element.children, element, opts)
|
|
93
|
+
: element.content || element.content
|
|
94
|
+
|
|
95
|
+
if (content) {
|
|
96
|
+
await setContent(content, element, opts)
|
|
97
|
+
}
|
|
98
|
+
|
|
96
99
|
// node.dataset.key = key
|
|
97
100
|
return element
|
|
98
101
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@domql/element",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"module": "index.js",
|
|
@@ -27,12 +27,13 @@
|
|
|
27
27
|
"prepublish": "rimraf -I dist && npm run build && npm run copy:package:cjs"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@domql/event": "^
|
|
31
|
-
"@domql/render": "^
|
|
32
|
-
"@domql/
|
|
33
|
-
"@domql/
|
|
30
|
+
"@domql/event": "^3.0.0",
|
|
31
|
+
"@domql/render": "^3.0.0",
|
|
32
|
+
"@domql/report": "^3.0.0",
|
|
33
|
+
"@domql/state": "^3.0.0",
|
|
34
|
+
"@domql/utils": "^3.0.0"
|
|
34
35
|
},
|
|
35
|
-
"gitHead": "
|
|
36
|
+
"gitHead": "bcbdc271a602b958de6a60ab387ea7715a935dc1",
|
|
36
37
|
"devDependencies": {
|
|
37
38
|
"@babel/core": "^7.12.0"
|
|
38
39
|
}
|
package/set.js
CHANGED
|
@@ -1,79 +1,167 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
import { deepContains,
|
|
4
|
-
|
|
5
|
-
import { OPTIONS } from './cache/options.js'
|
|
3
|
+
import { deepContains, execPromise, isFunction, OPTIONS } from '@domql/utils'
|
|
6
4
|
import { create } from './create.js'
|
|
7
|
-
import { registry } from './mixins/index.js'
|
|
8
|
-
import { removeContent } from './mixins/content.js'
|
|
9
5
|
import { triggerEventOn, triggerEventOnUpdate } from '@domql/event'
|
|
10
6
|
|
|
11
|
-
export const
|
|
12
|
-
if (!options.preventRemove) removeContent(element, options)
|
|
7
|
+
export const setContentKey = (element, opts = {}) => {
|
|
13
8
|
const { __ref: ref } = element
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
})
|
|
9
|
+
const contentElementKey = opts.contentElementKey
|
|
10
|
+
if (!ref.contentElementKey || contentElementKey !== ref.contentElementKey) {
|
|
11
|
+
ref.contentElementKey = contentElementKey || 'content'
|
|
12
|
+
}
|
|
13
|
+
return ref.contentElementKey
|
|
20
14
|
}
|
|
21
15
|
|
|
22
|
-
export const reset =
|
|
16
|
+
export const reset = async options => {
|
|
23
17
|
const element = this
|
|
24
|
-
create(element, element.parent, undefined, {
|
|
25
|
-
|
|
26
|
-
...
|
|
18
|
+
await create(element, element.parent, undefined, {
|
|
19
|
+
ignoreChildExtends: true,
|
|
20
|
+
...OPTIONS.defaultOptions,
|
|
27
21
|
...OPTIONS.create,
|
|
28
22
|
...options
|
|
29
23
|
})
|
|
30
24
|
}
|
|
31
25
|
|
|
26
|
+
export const resetContent = async (params, element, opts) => {
|
|
27
|
+
const contentElementKey = setContentKey(element, opts)
|
|
28
|
+
if (element[contentElementKey]?.node) removeContent(element, opts)
|
|
29
|
+
const contentElem = await create(
|
|
30
|
+
params,
|
|
31
|
+
element,
|
|
32
|
+
contentElementKey || 'content',
|
|
33
|
+
{
|
|
34
|
+
ignoreChildExtends: true,
|
|
35
|
+
...OPTIONS.defaultOptions,
|
|
36
|
+
...OPTIONS.create,
|
|
37
|
+
...opts
|
|
38
|
+
}
|
|
39
|
+
)
|
|
40
|
+
if (contentElementKey !== 'content') opts.contentElementKey = 'content' // reset to default
|
|
41
|
+
return contentElem
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export const updateContent = async function (params, opts) {
|
|
45
|
+
const element = this
|
|
46
|
+
const contentElementKey = setContentKey(element, opts)
|
|
47
|
+
if (!element[contentElementKey]) return
|
|
48
|
+
if (element[contentElementKey].update) {
|
|
49
|
+
await element[contentElementKey].update(params, opts)
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Appends anything as content
|
|
55
|
+
* an original one as a child
|
|
56
|
+
*/
|
|
57
|
+
export async function setContent (param, element, opts) {
|
|
58
|
+
const content = await execPromise(param, element)
|
|
59
|
+
|
|
60
|
+
if (content && element) {
|
|
61
|
+
set.call(element, content, opts)
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export const removeContent = function (el, opts = {}) {
|
|
66
|
+
const element = el || this
|
|
67
|
+
|
|
68
|
+
const contentElementKey = setContentKey(element, opts)
|
|
69
|
+
if (opts.contentElementKey !== 'content') {
|
|
70
|
+
opts.contentElementKey = 'content'
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const content = element[contentElementKey]
|
|
74
|
+
if (!content) return
|
|
75
|
+
|
|
76
|
+
// Handle fragment removal
|
|
77
|
+
if (content.tag === 'fragment' && content.__ref?.__children) {
|
|
78
|
+
// Remove all child nodes
|
|
79
|
+
content.__ref.__children.forEach(key => {
|
|
80
|
+
const child = content[key]
|
|
81
|
+
if (child.node && child.node.parentNode) {
|
|
82
|
+
child.node.parentNode.removeChild(child.node)
|
|
83
|
+
}
|
|
84
|
+
if (isFunction(child.remove)) {
|
|
85
|
+
child.remove()
|
|
86
|
+
}
|
|
87
|
+
})
|
|
88
|
+
} else {
|
|
89
|
+
// Handle regular element removal
|
|
90
|
+
if (content.node && content.node.parentNode) {
|
|
91
|
+
content.node.parentNode.removeChild(content.node)
|
|
92
|
+
}
|
|
93
|
+
if (isFunction(content.remove)) {
|
|
94
|
+
content.remove()
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
delete element[contentElementKey]
|
|
99
|
+
}
|
|
100
|
+
|
|
32
101
|
export const set = async function (params, options = {}, el) {
|
|
33
102
|
const element = el || this
|
|
34
103
|
const { __ref: ref } = element
|
|
35
104
|
|
|
36
|
-
const
|
|
105
|
+
const contentElementKey = setContentKey(element, options)
|
|
106
|
+
const content = element[contentElementKey]
|
|
37
107
|
const __contentRef = content && content.__ref
|
|
38
108
|
const lazyLoad = element.props && element.props.lazyLoad
|
|
39
109
|
|
|
40
|
-
const
|
|
41
|
-
if (options.preventContentUpdate === true && !
|
|
110
|
+
const hasChildren = element.children
|
|
111
|
+
if (options.preventContentUpdate === true && !hasChildren) return
|
|
112
|
+
|
|
113
|
+
const childHasChanged = !ref.__noChildrenDifference
|
|
114
|
+
const childrenIsDifferentFromCache =
|
|
115
|
+
childHasChanged &&
|
|
116
|
+
__contentRef &&
|
|
117
|
+
Object.keys(params).length === Object.keys(content).length &&
|
|
118
|
+
deepContains(params, content)
|
|
42
119
|
|
|
43
|
-
if (
|
|
120
|
+
if (content?.update && !childHasChanged && !childrenIsDifferentFromCache) {
|
|
44
121
|
if (!options.preventBeforeUpdateListener && !options.preventListeners) {
|
|
45
|
-
const beforeUpdateReturns = await triggerEventOnUpdate(
|
|
122
|
+
const beforeUpdateReturns = await triggerEventOnUpdate(
|
|
123
|
+
'beforeUpdate',
|
|
124
|
+
params,
|
|
125
|
+
element,
|
|
126
|
+
options
|
|
127
|
+
)
|
|
46
128
|
if (beforeUpdateReturns === false) return element
|
|
47
129
|
}
|
|
48
|
-
|
|
49
|
-
if (!options.preventUpdateListener
|
|
130
|
+
await content.update(params)
|
|
131
|
+
if (!options.preventUpdateListener && !options.preventListeners) {
|
|
132
|
+
await triggerEventOn('update', element, options)
|
|
133
|
+
}
|
|
50
134
|
return
|
|
51
135
|
}
|
|
52
136
|
|
|
53
|
-
if (params)
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
137
|
+
if (!params) return element
|
|
138
|
+
|
|
139
|
+
let { childExtends, props, tag } = params
|
|
140
|
+
if (!props) props = params.props = {}
|
|
141
|
+
|
|
142
|
+
if (tag === 'fragment') {
|
|
143
|
+
if (!childExtends && element.childExtends) {
|
|
144
|
+
params.childExtends = element.childExtends
|
|
145
|
+
props.ignoreChildExtends = true
|
|
59
146
|
}
|
|
147
|
+
|
|
60
148
|
if (!props?.childProps && element.props?.childProps) {
|
|
61
149
|
props.childProps = element.props.childProps
|
|
62
150
|
props.ignoreChildProps = true
|
|
63
151
|
}
|
|
64
|
-
|
|
65
|
-
if (lazyLoad) {
|
|
66
|
-
window.requestAnimationFrame(async () => {
|
|
67
|
-
await resetElement(params, element, options)
|
|
68
|
-
// handle lazy load
|
|
69
|
-
if (!options.preventUpdateListener) {
|
|
70
|
-
triggerEventOn('lazyLoad', element, options)
|
|
71
|
-
}
|
|
72
|
-
})
|
|
73
|
-
} else await resetElement(params, element, options)
|
|
74
152
|
}
|
|
75
153
|
|
|
76
|
-
|
|
154
|
+
if (lazyLoad) {
|
|
155
|
+
window.requestAnimationFrame(async () => {
|
|
156
|
+
await resetContent(params, element, options)
|
|
157
|
+
// handle lazy load
|
|
158
|
+
if (!options.preventUpdateListener) {
|
|
159
|
+
await triggerEventOn('lazyLoad', element, options)
|
|
160
|
+
}
|
|
161
|
+
})
|
|
162
|
+
} else {
|
|
163
|
+
await resetContent(params, element, options)
|
|
164
|
+
}
|
|
77
165
|
}
|
|
78
166
|
|
|
79
167
|
export default set
|