@domql/element 2.5.198 → 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.
Files changed (150) 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 -255
  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 +74 -215
  34. package/dist/cjs/define.js +1 -2
  35. package/dist/cjs/index.js +3 -3
  36. package/dist/cjs/iterate.js +37 -30
  37. package/dist/cjs/methods/set.js +26 -25
  38. package/dist/cjs/methods/v2.js +7 -17
  39. package/dist/cjs/mixins/attr.js +7 -10
  40. package/dist/cjs/mixins/classList.js +8 -16
  41. package/dist/cjs/mixins/data.js +2 -4
  42. package/dist/cjs/mixins/html.js +2 -4
  43. package/dist/cjs/mixins/index.js +0 -4
  44. package/dist/cjs/mixins/registry.js +7 -67
  45. package/dist/cjs/mixins/scope.js +2 -3
  46. package/dist/cjs/mixins/state.js +4 -7
  47. package/dist/cjs/mixins/style.js +2 -4
  48. package/dist/cjs/mixins/text.js +5 -8
  49. package/dist/cjs/node.js +34 -30
  50. package/dist/cjs/set.js +112 -47
  51. package/dist/cjs/update.js +123 -92
  52. package/dist/cjs/utils/applyParam.js +3 -4
  53. package/dist/cjs/utils/index.js +8 -4
  54. package/dist/cjs/utils/onlyResolveExtends.js +14 -30
  55. package/dist/esm/__tests__/checkIfOnUpdate.test.js +73 -0
  56. package/dist/esm/__tests__/children.test.js +177 -0
  57. package/dist/esm/__tests__/define.test.js +53 -0
  58. package/dist/esm/__tests__/inheritStateUpdates.test.js +62 -0
  59. package/dist/esm/__tests__/renderElement.test.js +116 -0
  60. package/dist/esm/__tests__/resetElement.test.js +35 -0
  61. package/dist/esm/__tests__/set.test.js +256 -0
  62. package/dist/esm/__tests__/throughExecProps.test.js +62 -0
  63. package/dist/esm/__tests__/throughInitialDefine.test.js +79 -0
  64. package/dist/esm/__tests__/throughInitialExec.test.js +73 -0
  65. package/dist/esm/__tests__/throughUpdatedDefine.test.js +69 -0
  66. package/dist/esm/__tests__/throughUpdatedExec.test.js +84 -0
  67. package/dist/esm/__tests__/tree.test.js +11 -0
  68. package/dist/esm/__tests__/update.test.js +219 -0
  69. package/dist/esm/children.js +81 -0
  70. package/dist/esm/create.js +79 -226
  71. package/dist/esm/define.js +1 -2
  72. package/dist/esm/iterate.js +41 -33
  73. package/dist/esm/methods/set.js +5 -4
  74. package/dist/esm/methods/v2.js +7 -17
  75. package/dist/esm/mixins/attr.js +8 -11
  76. package/dist/esm/mixins/classList.js +8 -16
  77. package/dist/esm/mixins/data.js +3 -5
  78. package/dist/esm/mixins/html.js +2 -4
  79. package/dist/esm/mixins/index.js +0 -4
  80. package/dist/esm/mixins/registry.js +7 -67
  81. package/dist/esm/mixins/scope.js +2 -3
  82. package/dist/esm/mixins/state.js +5 -8
  83. package/dist/esm/mixins/style.js +2 -4
  84. package/dist/esm/mixins/text.js +6 -12
  85. package/dist/esm/node.js +25 -31
  86. package/dist/esm/set.js +112 -47
  87. package/dist/esm/update.js +127 -97
  88. package/dist/esm/utils/applyParam.js +3 -4
  89. package/dist/esm/utils/index.js +4 -3
  90. package/dist/esm/utils/onlyResolveExtends.js +22 -31
  91. package/iterate.js +44 -26
  92. package/methods/set.js +5 -4
  93. package/methods/v2.js +5 -4
  94. package/mixins/attr.js +13 -7
  95. package/mixins/classList.js +7 -2
  96. package/mixins/data.js +1 -1
  97. package/mixins/index.js +1 -6
  98. package/mixins/registry.js +6 -53
  99. package/mixins/scope.js +1 -1
  100. package/mixins/state.js +4 -5
  101. package/mixins/text.js +4 -7
  102. package/node.js +31 -28
  103. package/package.json +7 -6
  104. package/set.js +129 -41
  105. package/update.js +169 -89
  106. package/utils/applyParam.js +7 -4
  107. package/utils/index.js +1 -3
  108. package/utils/onlyResolveExtends.js +27 -16
  109. package/cache/index.js +0 -3
  110. package/cache/options.js +0 -4
  111. package/dist/cjs/cache/index.js +0 -24
  112. package/dist/cjs/cache/options.js +0 -26
  113. package/dist/cjs/extend.js +0 -85
  114. package/dist/cjs/methods/index.js +0 -353
  115. package/dist/cjs/mixins/content.js +0 -74
  116. package/dist/cjs/props/create.js +0 -98
  117. package/dist/cjs/props/ignore.js +0 -24
  118. package/dist/cjs/props/index.js +0 -21
  119. package/dist/cjs/props/inherit.js +0 -53
  120. package/dist/cjs/props/update.js +0 -37
  121. package/dist/cjs/utils/component.js +0 -77
  122. package/dist/cjs/utils/extendUtils.js +0 -142
  123. package/dist/cjs/utils/object.js +0 -179
  124. package/dist/cjs/utils/propEvents.js +0 -41
  125. package/dist/esm/cache/index.js +0 -4
  126. package/dist/esm/cache/options.js +0 -6
  127. package/dist/esm/extend.js +0 -71
  128. package/dist/esm/methods/index.js +0 -333
  129. package/dist/esm/mixins/content.js +0 -54
  130. package/dist/esm/props/create.js +0 -78
  131. package/dist/esm/props/ignore.js +0 -4
  132. package/dist/esm/props/index.js +0 -4
  133. package/dist/esm/props/inherit.js +0 -33
  134. package/dist/esm/props/update.js +0 -17
  135. package/dist/esm/utils/component.js +0 -65
  136. package/dist/esm/utils/extendUtils.js +0 -122
  137. package/dist/esm/utils/object.js +0 -159
  138. package/dist/esm/utils/propEvents.js +0 -21
  139. package/extend.js +0 -90
  140. package/methods/index.js +0 -317
  141. package/mixins/content.js +0 -55
  142. package/props/create.js +0 -87
  143. package/props/ignore.js +0 -3
  144. package/props/index.js +0 -6
  145. package/props/inherit.js +0 -35
  146. package/props/update.js +0 -17
  147. package/utils/component.js +0 -68
  148. package/utils/extendUtils.js +0 -134
  149. package/utils/object.js +0 -172
  150. package/utils/propEvents.js +0 -19
@@ -1,122 +0,0 @@
1
- import { isArray, isFunction, isObject, isString, deepClone } from "@domql/utils";
2
- const ENV = "development";
3
- const generateHash = () => Math.random().toString(36).substring(2);
4
- const extendStackRegistry = {};
5
- const extendCachedRegistry = {};
6
- const getHashedExtend = (extend) => {
7
- return extendStackRegistry[extend.__hash];
8
- };
9
- const setHashedExtend = (extend, stack) => {
10
- const hash = generateHash();
11
- if (!isString(extend)) {
12
- extend.__hash = hash;
13
- }
14
- extendStackRegistry[hash] = stack;
15
- return stack;
16
- };
17
- const getExtendStackRegistry = (extend, stack) => {
18
- if (extend.__hash) {
19
- return stack.concat(getHashedExtend(extend));
20
- }
21
- return setHashedExtend(extend, stack);
22
- };
23
- const extractArrayExtend = (extend, stack, context) => {
24
- extend.forEach((each) => flattenExtend(each, stack, context));
25
- return stack;
26
- };
27
- const deepExtend = (extend, stack, context) => {
28
- const extendOflattenExtend = extend.extend;
29
- if (extendOflattenExtend) {
30
- flattenExtend(extendOflattenExtend, stack, context);
31
- }
32
- return stack;
33
- };
34
- const flattenExtend = (extend, stack, context) => {
35
- if (!extend)
36
- return stack;
37
- if (isArray(extend))
38
- return extractArrayExtend(extend, stack, context);
39
- if (isString(extend))
40
- extend = fallbackStringExtend(extend, context);
41
- stack.push(extend);
42
- if (extend.extend)
43
- deepExtend(extend, stack, context);
44
- return stack;
45
- };
46
- const deepMergeExtend = (element, extend) => {
47
- for (const e in extend) {
48
- if (["parent", "node", "__element"].indexOf(e) > -1)
49
- continue;
50
- const elementProp = element[e];
51
- const extendProp = extend[e];
52
- if (elementProp === void 0) {
53
- element[e] = extendProp;
54
- } else if (isObject(elementProp) && isObject(extendProp)) {
55
- deepMergeExtend(elementProp, extendProp);
56
- } else if (isArray(elementProp) && isArray(extendProp)) {
57
- element[e] = elementProp.concat(extendProp);
58
- } else if (isArray(elementProp) && isObject(extendProp)) {
59
- const obj = deepMergeExtend({}, elementProp);
60
- element[e] = deepMergeExtend(obj, extendProp);
61
- } else if (elementProp === void 0 && isFunction(extendProp)) {
62
- element[e] = extendProp;
63
- }
64
- }
65
- return element;
66
- };
67
- const cloneAndMergeArrayExtend = (stack) => {
68
- return stack.reduce((a, c) => {
69
- return deepMergeExtend(a, deepClone(c));
70
- }, {});
71
- };
72
- const fallbackStringExtend = (extend, context, options = {}, variant) => {
73
- const COMPONENTS = context && context.components || options.components;
74
- const PAGES = context && context.pages || options.pages;
75
- if (isString(extend)) {
76
- const componentExists = COMPONENTS && (COMPONENTS[extend + "." + variant] || COMPONENTS[extend] || COMPONENTS["smbls." + extend]);
77
- const pageExists = PAGES && extend.startsWith("/") && PAGES[extend];
78
- if (componentExists)
79
- return componentExists;
80
- else if (pageExists)
81
- return pageExists;
82
- else {
83
- if (options.verbose && (ENV === "test" || ENV === "development")) {
84
- console.warn("Extend is string but component was not found:", extend);
85
- }
86
- return {};
87
- }
88
- }
89
- return extend;
90
- };
91
- const jointStacks = (extendStack, childExtendStack) => {
92
- return [].concat(extendStack.slice(0, 1)).concat(childExtendStack.slice(0, 1)).concat(extendStack.slice(1)).concat(childExtendStack.slice(1));
93
- };
94
- const getExtendStack = (extend, context) => {
95
- if (!extend)
96
- return [];
97
- if (extend.__hash)
98
- return getHashedExtend(extend) || [];
99
- const stack = flattenExtend(extend, [], context);
100
- return getExtendStackRegistry(extend, stack);
101
- };
102
- const getExtendMerged = (extend) => {
103
- const stack = getExtendStack(extend);
104
- return cloneAndMergeArrayExtend(stack);
105
- };
106
- export {
107
- cloneAndMergeArrayExtend,
108
- deepExtend,
109
- deepMergeExtend,
110
- extendCachedRegistry,
111
- extendStackRegistry,
112
- extractArrayExtend,
113
- fallbackStringExtend,
114
- flattenExtend,
115
- generateHash,
116
- getExtendMerged,
117
- getExtendStack,
118
- getExtendStackRegistry,
119
- getHashedExtend,
120
- jointStacks,
121
- setHashedExtend
122
- };
@@ -1,159 +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))
67
- continue;
68
- const elementProp = element[e];
69
- const extendProp = extend[e];
70
- if (elementProp === void 0) {
71
- element[e] = extendProp;
72
- } else if (isObjectLike(elementProp) && isObject(extendProp)) {
73
- deepMerge(elementProp, extendProp);
74
- }
75
- }
76
- return element;
77
- };
78
- const clone = (obj, exclude = METHODS_EXL) => {
79
- const o = {};
80
- for (const e in obj) {
81
- if (exclude.includes(e))
82
- continue;
83
- o[e] = obj[e];
84
- }
85
- return o;
86
- };
87
- const overwrite = (element, params, options) => {
88
- const changes = {};
89
- const { __ref } = element;
90
- const { __exec, __cached } = __ref;
91
- for (const e in params) {
92
- if (e === "props" || e === "state" || e === "__ref")
93
- continue;
94
- const elementProp = element[e];
95
- const paramsProp = params[e];
96
- if (paramsProp !== void 0) {
97
- __cached[e] = changes[e] = elementProp;
98
- element[e] = paramsProp;
99
- }
100
- if (options.cleanExec)
101
- delete __exec[e];
102
- }
103
- return changes;
104
- };
105
- const overwriteShallow = (obj, params, exclude = METHODS_EXL) => {
106
- for (const e in params) {
107
- if (exclude.includes(e))
108
- continue;
109
- obj[e] = params[e];
110
- }
111
- return obj;
112
- };
113
- const overwriteDeep = (obj, params, exclude = METHODS_EXL) => {
114
- for (const e in params) {
115
- if (exclude.includes(e))
116
- continue;
117
- const objProp = obj[e];
118
- const paramsProp = params[e];
119
- if (isObjectLike(objProp) && isObjectLike(paramsProp)) {
120
- overwriteDeep(objProp, paramsProp);
121
- } else if (paramsProp !== void 0) {
122
- obj[e] = paramsProp;
123
- }
124
- }
125
- return obj;
126
- };
127
- const mergeIfExisted = (a, b) => {
128
- if (isObjectLike(a) && isObjectLike(b))
129
- return deepMerge(a, b);
130
- return a || b;
131
- };
132
- const mergeArray = (arr, exclude = ["parent", "node", "__element", "state", "context", "__ref"]) => {
133
- return arr.reduce((a, c) => deepMerge(a, deepClone(c, { exclude })), {});
134
- };
135
- const mergeAndCloneIfArray = (obj) => {
136
- return isArray(obj) ? mergeArray(obj) : deepClone(obj);
137
- };
138
- const flattenRecursive = (param, prop, stack = []) => {
139
- const objectized = mergeAndCloneIfArray(param);
140
- stack.push(objectized);
141
- const extendOfExtend = objectized[prop];
142
- if (extendOfExtend)
143
- flattenRecursive(extendOfExtend, prop, stack);
144
- delete objectized[prop];
145
- return stack;
146
- };
147
- export {
148
- METHODS,
149
- METHODS_EXL,
150
- clone,
151
- deepMerge,
152
- flattenRecursive,
153
- mergeAndCloneIfArray,
154
- mergeArray,
155
- mergeIfExisted,
156
- overwrite,
157
- overwriteDeep,
158
- overwriteShallow
159
- };
@@ -1,21 +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)
13
- funcFromProps(...args);
14
- };
15
- } else
16
- on[eventName] = funcFromProps;
17
- });
18
- };
19
- export {
20
- propagateEventsFromProps
21
- };
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
- }