@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.
Files changed (140) hide show
  1. package/README.md +1 -1
  2. package/__tests__/checkIfOnUpdate.test.js +103 -0
  3. package/__tests__/children.test.js +213 -0
  4. package/__tests__/define.test.js +75 -0
  5. package/__tests__/inheritStateUpdates.test.js +79 -0
  6. package/__tests__/renderElement.test.js +131 -0
  7. package/__tests__/resetElement.test.js +44 -0
  8. package/__tests__/set.test.js +316 -0
  9. package/__tests__/throughExecProps.test.js +86 -0
  10. package/__tests__/throughInitialDefine.test.js +104 -0
  11. package/__tests__/throughInitialExec.test.js +92 -0
  12. package/__tests__/throughUpdatedDefine.test.js +92 -0
  13. package/__tests__/throughUpdatedExec.test.js +110 -0
  14. package/__tests__/tree.test.js +15 -0
  15. package/__tests__/update.test.js +253 -0
  16. package/children.js +105 -0
  17. package/create.js +125 -252
  18. package/dist/cjs/__tests__/checkIfOnUpdate.test.js +73 -0
  19. package/dist/cjs/__tests__/children.test.js +177 -0
  20. package/dist/cjs/__tests__/define.test.js +75 -0
  21. package/dist/cjs/__tests__/inheritStateUpdates.test.js +62 -0
  22. package/dist/cjs/__tests__/renderElement.test.js +138 -0
  23. package/dist/cjs/__tests__/resetElement.test.js +35 -0
  24. package/dist/cjs/__tests__/set.test.js +256 -0
  25. package/dist/cjs/__tests__/throughExecProps.test.js +62 -0
  26. package/dist/cjs/__tests__/throughInitialDefine.test.js +79 -0
  27. package/dist/cjs/__tests__/throughInitialExec.test.js +73 -0
  28. package/dist/cjs/__tests__/throughUpdatedDefine.test.js +69 -0
  29. package/dist/cjs/__tests__/throughUpdatedExec.test.js +84 -0
  30. package/dist/cjs/__tests__/tree.test.js +11 -0
  31. package/dist/cjs/__tests__/update.test.js +219 -0
  32. package/dist/cjs/children.js +87 -0
  33. package/dist/cjs/create.js +79 -177
  34. package/dist/cjs/iterate.js +29 -13
  35. package/dist/cjs/methods/set.js +27 -25
  36. package/dist/cjs/methods/v2.js +1 -5
  37. package/dist/cjs/mixins/attr.js +7 -6
  38. package/dist/cjs/mixins/index.js +0 -4
  39. package/dist/cjs/mixins/registry.js +7 -67
  40. package/dist/cjs/mixins/scope.js +1 -1
  41. package/dist/cjs/mixins/state.js +3 -4
  42. package/dist/cjs/mixins/text.js +3 -3
  43. package/dist/cjs/node.js +32 -22
  44. package/dist/cjs/set.js +112 -40
  45. package/dist/cjs/update.js +119 -64
  46. package/dist/cjs/utils/applyParam.js +2 -2
  47. package/dist/cjs/utils/index.js +8 -4
  48. package/dist/cjs/utils/onlyResolveExtends.js +4 -7
  49. package/dist/esm/__tests__/checkIfOnUpdate.test.js +73 -0
  50. package/dist/esm/__tests__/children.test.js +177 -0
  51. package/dist/esm/__tests__/define.test.js +53 -0
  52. package/dist/esm/__tests__/inheritStateUpdates.test.js +62 -0
  53. package/dist/esm/__tests__/renderElement.test.js +116 -0
  54. package/dist/esm/__tests__/resetElement.test.js +35 -0
  55. package/dist/esm/__tests__/set.test.js +256 -0
  56. package/dist/esm/__tests__/throughExecProps.test.js +62 -0
  57. package/dist/esm/__tests__/throughInitialDefine.test.js +79 -0
  58. package/dist/esm/__tests__/throughInitialExec.test.js +73 -0
  59. package/dist/esm/__tests__/throughUpdatedDefine.test.js +69 -0
  60. package/dist/esm/__tests__/throughUpdatedExec.test.js +84 -0
  61. package/dist/esm/__tests__/tree.test.js +11 -0
  62. package/dist/esm/__tests__/update.test.js +219 -0
  63. package/dist/esm/children.js +81 -0
  64. package/dist/esm/create.js +85 -188
  65. package/dist/esm/iterate.js +33 -16
  66. package/dist/esm/methods/set.js +6 -4
  67. package/dist/esm/methods/v2.js +1 -5
  68. package/dist/esm/mixins/attr.js +8 -7
  69. package/dist/esm/mixins/data.js +1 -1
  70. package/dist/esm/mixins/index.js +0 -4
  71. package/dist/esm/mixins/registry.js +7 -67
  72. package/dist/esm/mixins/scope.js +1 -1
  73. package/dist/esm/mixins/state.js +4 -5
  74. package/dist/esm/mixins/text.js +4 -7
  75. package/dist/esm/node.js +23 -23
  76. package/dist/esm/set.js +112 -40
  77. package/dist/esm/update.js +122 -68
  78. package/dist/esm/utils/applyParam.js +2 -2
  79. package/dist/esm/utils/index.js +4 -3
  80. package/dist/esm/utils/onlyResolveExtends.js +12 -8
  81. package/iterate.js +44 -26
  82. package/methods/set.js +5 -4
  83. package/methods/v2.js +5 -4
  84. package/mixins/attr.js +13 -7
  85. package/mixins/classList.js +7 -2
  86. package/mixins/data.js +1 -1
  87. package/mixins/index.js +1 -6
  88. package/mixins/registry.js +6 -53
  89. package/mixins/scope.js +1 -1
  90. package/mixins/state.js +4 -5
  91. package/mixins/text.js +4 -7
  92. package/node.js +31 -28
  93. package/package.json +7 -6
  94. package/set.js +129 -41
  95. package/update.js +169 -89
  96. package/utils/applyParam.js +7 -4
  97. package/utils/index.js +1 -3
  98. package/utils/onlyResolveExtends.js +27 -16
  99. package/cache/index.js +0 -3
  100. package/cache/options.js +0 -4
  101. package/dist/cjs/cache/index.js +0 -24
  102. package/dist/cjs/cache/options.js +0 -26
  103. package/dist/cjs/extend.js +0 -81
  104. package/dist/cjs/methods/index.js +0 -320
  105. package/dist/cjs/mixins/content.js +0 -67
  106. package/dist/cjs/props/create.js +0 -92
  107. package/dist/cjs/props/ignore.js +0 -24
  108. package/dist/cjs/props/index.js +0 -21
  109. package/dist/cjs/props/inherit.js +0 -51
  110. package/dist/cjs/props/update.js +0 -34
  111. package/dist/cjs/utils/component.js +0 -74
  112. package/dist/cjs/utils/extendUtils.js +0 -133
  113. package/dist/cjs/utils/object.js +0 -171
  114. package/dist/cjs/utils/propEvents.js +0 -39
  115. package/dist/esm/cache/index.js +0 -4
  116. package/dist/esm/cache/options.js +0 -6
  117. package/dist/esm/extend.js +0 -67
  118. package/dist/esm/methods/index.js +0 -300
  119. package/dist/esm/mixins/content.js +0 -47
  120. package/dist/esm/props/create.js +0 -72
  121. package/dist/esm/props/ignore.js +0 -4
  122. package/dist/esm/props/index.js +0 -4
  123. package/dist/esm/props/inherit.js +0 -31
  124. package/dist/esm/props/update.js +0 -14
  125. package/dist/esm/utils/component.js +0 -62
  126. package/dist/esm/utils/extendUtils.js +0 -113
  127. package/dist/esm/utils/object.js +0 -151
  128. package/dist/esm/utils/propEvents.js +0 -19
  129. package/extend.js +0 -90
  130. package/methods/index.js +0 -317
  131. package/mixins/content.js +0 -55
  132. package/props/create.js +0 -87
  133. package/props/ignore.js +0 -3
  134. package/props/index.js +0 -6
  135. package/props/inherit.js +0 -35
  136. package/props/update.js +0 -17
  137. package/utils/component.js +0 -68
  138. package/utils/extendUtils.js +0 -134
  139. package/utils/object.js +0 -172
  140. package/utils/propEvents.js +0 -19
@@ -1,151 +0,0 @@
1
- import { isArray, isObject, isObjectLike, joinArrays, deepClone } from "@domql/utils";
2
- import { IGNORE_PROPS_PARAMS } from "../props/index.js";
3
- const IGNORE_STATE_PARAMS = [
4
- "update",
5
- "parse",
6
- "clean",
7
- "create",
8
- "destroy",
9
- "add",
10
- "toggle",
11
- "remove",
12
- "apply",
13
- "set",
14
- "reset",
15
- "replace",
16
- "quietReplace",
17
- "quietUpdate",
18
- "applyReplace",
19
- "applyFunction",
20
- "rootUpdate",
21
- "parentUpdate",
22
- "parent",
23
- "__element",
24
- "__depends",
25
- "__ref",
26
- "__children",
27
- "root",
28
- "setByPath",
29
- "setPathCollection",
30
- "removeByPath",
31
- "removePathCollection",
32
- "getByPath"
33
- ];
34
- const METHODS = [
35
- "set",
36
- "reset",
37
- "update",
38
- "remove",
39
- "updateContent",
40
- "removeContent",
41
- "lookup",
42
- "lookdown",
43
- "lookdownAll",
44
- "getRef",
45
- "getPath",
46
- "setNodeStyles",
47
- "spotByPath",
48
- "keys",
49
- "parse",
50
- "setProps",
51
- "parseDeep",
52
- "variables",
53
- "if",
54
- "log",
55
- "nextElement",
56
- "previousElement"
57
- ];
58
- const METHODS_EXL = joinArrays(
59
- ["node", "state", "context", "extend", "__element"],
60
- METHODS,
61
- IGNORE_STATE_PARAMS,
62
- IGNORE_PROPS_PARAMS
63
- );
64
- const deepMerge = (element, extend, exclude = METHODS_EXL) => {
65
- for (const e in extend) {
66
- if (exclude.includes(e)) continue;
67
- const elementProp = element[e];
68
- const extendProp = extend[e];
69
- if (elementProp === void 0) {
70
- element[e] = extendProp;
71
- } else if (isObjectLike(elementProp) && isObject(extendProp)) {
72
- deepMerge(elementProp, extendProp);
73
- }
74
- }
75
- return element;
76
- };
77
- const clone = (obj, exclude = METHODS_EXL) => {
78
- const o = {};
79
- for (const e in obj) {
80
- if (exclude.includes(e)) continue;
81
- o[e] = obj[e];
82
- }
83
- return o;
84
- };
85
- const overwrite = (element, params, options) => {
86
- const changes = {};
87
- const { __ref } = element;
88
- const { __exec, __cached } = __ref;
89
- for (const e in params) {
90
- if (e === "props" || e === "state" || e === "__ref") continue;
91
- const elementProp = element[e];
92
- const paramsProp = params[e];
93
- if (paramsProp !== void 0) {
94
- __cached[e] = changes[e] = elementProp;
95
- element[e] = paramsProp;
96
- }
97
- if (options.cleanExec) delete __exec[e];
98
- }
99
- return changes;
100
- };
101
- const overwriteShallow = (obj, params, exclude = METHODS_EXL) => {
102
- for (const e in params) {
103
- if (exclude.includes(e)) continue;
104
- obj[e] = params[e];
105
- }
106
- return obj;
107
- };
108
- const overwriteDeep = (obj, params, exclude = METHODS_EXL) => {
109
- for (const e in params) {
110
- if (exclude.includes(e)) continue;
111
- const objProp = obj[e];
112
- const paramsProp = params[e];
113
- if (isObjectLike(objProp) && isObjectLike(paramsProp)) {
114
- overwriteDeep(objProp, paramsProp);
115
- } else if (paramsProp !== void 0) {
116
- obj[e] = paramsProp;
117
- }
118
- }
119
- return obj;
120
- };
121
- const mergeIfExisted = (a, b) => {
122
- if (isObjectLike(a) && isObjectLike(b)) return deepMerge(a, b);
123
- return a || b;
124
- };
125
- const mergeArray = (arr, exclude = ["parent", "node", "__element", "state", "context", "__ref"]) => {
126
- return arr.reduce((a, c) => deepMerge(a, deepClone(c, { exclude })), {});
127
- };
128
- const mergeAndCloneIfArray = (obj) => {
129
- return isArray(obj) ? mergeArray(obj) : deepClone(obj);
130
- };
131
- const flattenRecursive = (param, prop, stack = []) => {
132
- const objectized = mergeAndCloneIfArray(param);
133
- stack.push(objectized);
134
- const extendOfExtend = objectized[prop];
135
- if (extendOfExtend) flattenRecursive(extendOfExtend, prop, stack);
136
- delete objectized[prop];
137
- return stack;
138
- };
139
- export {
140
- METHODS,
141
- METHODS_EXL,
142
- clone,
143
- deepMerge,
144
- flattenRecursive,
145
- mergeAndCloneIfArray,
146
- mergeArray,
147
- mergeIfExisted,
148
- overwrite,
149
- overwriteDeep,
150
- overwriteShallow
151
- };
@@ -1,19 +0,0 @@
1
- import { isFunction, lowercaseFirstLetter } from "@domql/utils";
2
- const propagateEventsFromProps = (element) => {
3
- const { props, on } = element;
4
- const eventKeysFromProps = Object.keys(props).filter((key) => key.startsWith("on"));
5
- eventKeysFromProps.forEach((v) => {
6
- const eventName = lowercaseFirstLetter(v.split("on")[1]);
7
- const origEvent = on[eventName];
8
- const funcFromProps = props[v];
9
- if (isFunction(origEvent)) {
10
- on[eventName] = (...args) => {
11
- const originalEventRetunrs = origEvent(...args);
12
- if (originalEventRetunrs !== false) funcFromProps(...args);
13
- };
14
- } else on[eventName] = funcFromProps;
15
- });
16
- };
17
- export {
18
- propagateEventsFromProps
19
- };
package/extend.js DELETED
@@ -1,90 +0,0 @@
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
- const ENV = process.env.NODE_ENV
13
-
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
- if (ENV !== 'test' || ENV !== 'development') 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 && props.ignoreChildExtend)) {
39
- childExtendStack = getExtendStack(parent.childExtend, context)
40
-
41
- // if (!options.ignoreChildExtend && !(props && exec(props, element).ignoreChildExtend)) {
42
- // const ignoreChildExtendRecursive = props && exec(props, element).ignoreChildExtendRecursive
43
-
44
- const ignoreChildExtendRecursive = props && props.ignoreChildExtendRecursive
45
- if (parent.childExtendRecursive && !ignoreChildExtendRecursive) {
46
- const canExtendRecursive = element.key !== '__text'
47
- if (canExtendRecursive) {
48
- const childExtendRecursiveStack = getExtendStack(parent.childExtendRecursive, context)
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(context.defaultExtends, context)
72
- mainExtend = cloneAndMergeArrayExtend(defaultOptionsExtend)
73
- delete mainExtend.extend
74
- }
75
- stack = [].concat(stack, mainExtend)
76
- }
77
-
78
- if (__ref) __ref.__extend = stack
79
- let mergedExtend = cloneAndMergeArrayExtend(stack)
80
-
81
- const COMPONENTS = (context && context.components) || options.components
82
- const component = exec(element.component || mergedExtend.component, element)
83
- if (component && COMPONENTS && COMPONENTS[component]) {
84
- const componentExtend = cloneAndMergeArrayExtend(getExtendStack(COMPONENTS[component]))
85
- mergedExtend = deepMergeExtend(componentExtend, mergedExtend)
86
- }
87
-
88
- const merged = deepMergeExtend(element, mergedExtend)
89
- return merged
90
- }
package/methods/index.js DELETED
@@ -1,317 +0,0 @@
1
- 'use strict'
2
-
3
- import { triggerEventOn } from '@domql/event'
4
- import { isDefined, isObject, isFunction, isObjectLike, isProduction, removeValueFromArray, deepClone } from '@domql/utils'
5
- import { TREE } from '../tree.js'
6
- import { parseFilters, REGISTRY } from '../mixins/index.js'
7
- const ENV = process.env.NODE_ENV
8
-
9
- // TODO: update these files
10
- export function spotByPath (path) {
11
- const element = this
12
- const arr = [].concat(path)
13
- let active = TREE[arr[0]]
14
-
15
- if (!arr || !arr.length) return console.log(arr, 'on', element.key, 'is undefined')
16
-
17
- while (active.key === arr[0]) {
18
- arr.shift()
19
- if (!arr.length) break
20
- active = active[arr[0]]
21
- if (!active) return
22
- }
23
-
24
- return active
25
- }
26
-
27
- // TODO: update these files
28
- export function lookup (param) {
29
- const el = this
30
- let { parent } = el
31
-
32
- if (isFunction(param)) {
33
- if (parent.state && param(parent, parent.state, parent.context)) return parent
34
- else if (parent.parent) return parent.lookup(param)
35
- else return
36
- }
37
-
38
- if (el[param]) return el[param]
39
-
40
- while (parent.param !== param) {
41
- if (parent[param]) return parent[param]
42
- parent = parent.parent
43
- if (!parent) return
44
- }
45
-
46
- return parent
47
- }
48
-
49
- export function lookdown (param) {
50
- const el = this
51
- const { __ref: ref } = el
52
- const children = ref.__children
53
-
54
- for (let i = 0; i < children.length; i++) {
55
- const v = children[i]
56
- const childElem = el[v]
57
-
58
- if (v === param) return childElem
59
- else if (isFunction(param)) {
60
- const exec = param(childElem, childElem.state, childElem.context)
61
- if (childElem.state && exec) {
62
- return childElem
63
- }
64
- }
65
- const lookdown = childElem?.lookdown?.(param)
66
- if (lookdown) return lookdown
67
- }
68
- }
69
-
70
- export function lookdownAll (param, results = []) {
71
- const el = this
72
- const { __ref: ref } = el
73
- const children = ref.__children
74
-
75
- for (let i = 0; i < children.length; i++) {
76
- const v = children[i]
77
- const childElem = el[v]
78
-
79
- if (v === param) results.push(childElem)
80
- else if (isFunction(param)) {
81
- const exec = param(childElem, childElem.state, childElem.context)
82
- if (childElem.state && exec) results.push(childElem)
83
- }
84
- childElem?.lookdownAll?.(param, results)
85
- }
86
-
87
- return results.length ? results : undefined
88
- }
89
-
90
- export function setNodeStyles (params = {}) {
91
- const el = this
92
- if (!el.node?.style) return
93
-
94
- for (const param in params) {
95
- const value = params[param]
96
- const childElem = el[param]
97
- if (isObject(value) && childElem) setNodeStyles.call(childElem, value)
98
- else el.node.style[param] = value
99
- }
100
-
101
- return el
102
- }
103
-
104
- export function remove (opts) {
105
- const element = this
106
- const beforeRemoveReturns = triggerEventOn('beforeRemove', element, opts)
107
- if (beforeRemoveReturns === false) return element
108
- if (isFunction(element.node.remove)) element.node.remove()
109
- else if (!isProduction()) {
110
- console.warn('This item cant be removed')
111
- element.log()
112
- }
113
- delete element.parent[element.key]
114
- if (element.parent.__ref) element.parent.__ref.__children = removeValueFromArray(element.parent.__ref.__children, element.key)
115
- triggerEventOn('remove', element, opts)
116
- }
117
-
118
- export function get (param) {
119
- const element = this
120
- return element[param]
121
- }
122
-
123
- export function setProps (param, options) {
124
- const element = this
125
- if (!param || !element.props) return
126
- element.update({ props: param }, options)
127
- return element
128
- }
129
-
130
- export function getRef () {
131
- return this.__ref
132
- }
133
-
134
- export function getPath () {
135
- return this.getRef().path
136
- }
137
-
138
- // export function set () {
139
- // }
140
-
141
- // export function update () {
142
- // }
143
-
144
- export const defineSetter = (element, key, get, set) =>
145
- Object.defineProperty(element, key, { get, set })
146
-
147
- export function keys () {
148
- const element = this
149
- const keys = []
150
- for (const param in element) {
151
- if ((REGISTRY[param] && !parseFilters.elementKeys.includes(param)) || !Object.hasOwnProperty.call(element, param)) { continue }
152
- keys.push(param)
153
- }
154
- return keys
155
- }
156
-
157
- export function parse (excl = []) {
158
- const element = this
159
- const obj = {}
160
- const keyList = keys.call(element)
161
- keyList.forEach(v => {
162
- if (excl.includes(v)) return
163
- const val = element[v]
164
- if (v === 'state') {
165
- if (element.__ref && !element.__ref.__hasRootState) return
166
- const parsedVal = isFunction(val && val.parse) ? val.parse() : val
167
- obj[v] = isFunction(parsedVal) ? parsedVal : JSON.parse(JSON.stringify(parsedVal || {}))
168
- } else if (v === 'scope') {
169
- if (element.__ref && !element.__ref.__hasRootScope) return
170
- obj[v] = JSON.parse(JSON.stringify(val || {}))
171
- } else if (v === 'props') {
172
- const { __element, update, ...props } = element[v]
173
- obj[v] = props
174
- } else if (isDefined(val) && Object.hasOwnProperty.call(element, v)) obj[v] = val
175
- })
176
- return obj
177
- }
178
-
179
- export function parseDeep (excl = []) {
180
- const element = this
181
- const obj = parse.call(element, excl)
182
- for (const v in obj) {
183
- if (excl.includes(v)) return
184
- if (isObjectLike(obj[v])) { obj[v] = parseDeep.call(obj[v], excl) }
185
- }
186
- return obj
187
- }
188
-
189
- export function verbose (...args) {
190
- if (ENV !== 'test' && ENV !== 'development') return
191
-
192
- const element = this
193
- const { __ref: ref } = element
194
- console.groupCollapsed(element.key)
195
- if (args.length) {
196
- args.forEach(v => console.log(`%c${v}:\n`, 'font-weight: bold', element[v]))
197
- } else {
198
- console.log(ref.path)
199
- const keys = element.keys()
200
- keys.forEach(v => console.log(`%c${v}:`, 'font-weight: bold', element[v]))
201
- }
202
- console.log(element)
203
- console.groupEnd(element.key)
204
- return element
205
- }
206
-
207
- export function log (...params) {
208
- if (ENV === 'test' || ENV === 'development') {
209
- console.log(...params)
210
- }
211
- }
212
-
213
- export function warn (...params) {
214
- if (ENV === 'test' || ENV === 'development') {
215
- console.warn(...params)
216
- }
217
- }
218
-
219
- export function error (...params) {
220
- if (ENV === 'test' || ENV === 'development') {
221
- if (params[params.length - 1]?.debugger) debugger // eslint-disable-line
222
- if (params[params.length - 1]?.verbose) verbose.call(this)
223
- throw new Error(...params)
224
- }
225
- }
226
-
227
- export function nextElement () {
228
- const element = this
229
- const { key, parent } = element
230
- const { __children } = parent.__ref
231
-
232
- const currentIndex = __children.indexOf(key)
233
- const nextChild = __children[currentIndex + 1]
234
-
235
- return parent[nextChild]
236
- }
237
-
238
- export function previousElement (el) {
239
- const element = el || this
240
- const { key, parent } = element
241
- const { __children } = parent.__ref
242
-
243
- if (!__children) return
244
-
245
- const currentIndex = __children.indexOf(key)
246
- return parent[__children[currentIndex - 1]]
247
- }
248
-
249
- export function variables (obj = {}) {
250
- const element = this
251
- if (!element.data) element.data = {}
252
- if (!element.data.varCaches) element.data.varCaches = {}
253
- const varCaches = element.data.varCaches
254
- const changes = {}
255
- let changed
256
- for (const key in obj) {
257
- if (obj[key] !== varCaches[key]) {
258
- changed = true
259
- changes[key] = obj[key]
260
- }
261
- }
262
- return {
263
- changed: (cb) => {
264
- if (!changed) return
265
- const returns = cb(changes, deepClone(varCaches))
266
- for (const key in changes) {
267
- varCaches[key] = changes[key]
268
- }
269
- return returns
270
- },
271
- timeout: (cb, timeout) => {
272
- if (!changed) return
273
- const t = setTimeout(() => {
274
- cb(changes)
275
- clearTimeout(t)
276
- }, timeout)
277
- }
278
- }
279
- }
280
-
281
- export function call (fnKey, ...args) {
282
- const context = this.context
283
- return (context.utils[fnKey] || context.functions[fnKey] || context.methods[fnKey] || context.snippets[fnKey])?.call(this, ...args)
284
- }
285
-
286
- export const METHODS = [
287
- 'set',
288
- 'reset',
289
- 'update',
290
- 'remove',
291
- 'updateContent',
292
- 'removeContent',
293
- 'lookup',
294
- 'lookdown',
295
- 'lookdownAll',
296
- 'getRef',
297
- 'getPath',
298
- 'setNodeStyles',
299
- 'spotByPath',
300
- 'keys',
301
- 'parse',
302
- 'setProps',
303
- 'parseDeep',
304
- 'variables',
305
- 'if',
306
- 'log',
307
- 'verbose',
308
- 'warn',
309
- 'error',
310
- 'call',
311
- 'nextElement',
312
- 'previousElement'
313
- ]
314
-
315
- export function isMethod (param, element) {
316
- return METHODS.includes(param) || element?.context?.methods?.[param]
317
- }
package/mixins/content.js DELETED
@@ -1,55 +0,0 @@
1
- 'use strict'
2
-
3
- import { isFunction, setContentKey } from '@domql/utils'
4
- import { set } from '../set.js'
5
-
6
- export const updateContent = function (params, options) {
7
- const element = this
8
- const ref = element.__ref
9
-
10
- const contentKey = ref.contentElementKey
11
-
12
- if (!element[contentKey]) return
13
- if (element[contentKey].update) element[contentKey].update(params, options)
14
- }
15
-
16
- export const removeContent = function (el, opts = {}) {
17
- const element = el || this
18
- const { __ref: ref } = element
19
- const contentElementKey = setContentKey(element, opts)
20
- if (opts.contentElementKey !== 'content') opts.contentElementKey = 'content'
21
- if (element[contentElementKey]) {
22
- if (element[contentElementKey].node && element.node) {
23
- if (element[contentElementKey].tag === 'fragment') element.node.innerHTML = ''
24
- else {
25
- const contentNode = element[contentElementKey].node
26
- if (contentNode.parentNode === element.node) element.node.removeChild(element[contentElementKey].node)
27
- }
28
- }
29
-
30
- const { __cached } = ref
31
- if (__cached && __cached[contentElementKey]) {
32
- if (__cached[contentElementKey].tag === 'fragment') __cached[contentElementKey].parent.node.innerHTML = ''
33
- else if (__cached[contentElementKey] && isFunction(__cached[contentElementKey].remove)) __cached[contentElementKey].remove()
34
- }
35
-
36
- delete element[contentElementKey]
37
- }
38
- }
39
-
40
- /**
41
- * Appends anything as content
42
- * an original one as a child
43
- */
44
- export function setContent (param, element, node, opts) {
45
- const contentElementKey = setContentKey(element, opts)
46
- if (param && element) {
47
- if (element[contentElementKey].update) {
48
- element[contentElementKey].update({}, opts)
49
- } else {
50
- set.call(element, param, opts)
51
- }
52
- }
53
- }
54
-
55
- export default setContent