@domql/element 3.2.3 → 3.2.7

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 (105) hide show
  1. package/children.js +40 -12
  2. package/create.js +40 -26
  3. package/define.js +1 -1
  4. package/dist/cjs/children.js +39 -11
  5. package/dist/cjs/create.js +41 -11
  6. package/dist/cjs/define.js +1 -1
  7. package/dist/cjs/event/animationFrame.js +96 -0
  8. package/dist/cjs/event/can.js +28 -0
  9. package/dist/cjs/event/index.js +20 -0
  10. package/dist/cjs/event/on.js +84 -0
  11. package/dist/cjs/event/store.js +27 -0
  12. package/dist/cjs/extend.js +6 -6
  13. package/dist/cjs/index.js +9 -6
  14. package/dist/cjs/iterate.js +13 -13
  15. package/dist/cjs/methods/set.js +5 -0
  16. package/dist/cjs/methods/v2.js +1 -1
  17. package/dist/cjs/mixins/attr.js +3 -2
  18. package/dist/cjs/mixins/classList.js +11 -1
  19. package/dist/cjs/mixins/content.js +1 -2
  20. package/dist/cjs/mixins/html.js +1 -2
  21. package/dist/cjs/mixins/state.js +2 -2
  22. package/dist/cjs/mixins/style.js +11 -2
  23. package/dist/cjs/mixins/text.js +5 -1
  24. package/dist/cjs/node.js +8 -5
  25. package/dist/cjs/render/append.js +72 -0
  26. package/dist/cjs/render/cache.js +80 -0
  27. package/dist/cjs/render/create.js +25 -0
  28. package/dist/cjs/render/index.js +20 -0
  29. package/dist/cjs/set.js +12 -14
  30. package/dist/cjs/update.js +80 -40
  31. package/dist/cjs/utils/applyParam.js +3 -3
  32. package/dist/cjs/utils/extendUtils.js +5 -5
  33. package/dist/cjs/utils/index.js +2 -0
  34. package/dist/cjs/utils/propEvents.js +21 -4
  35. package/dist/esm/children.js +39 -11
  36. package/dist/esm/create.js +42 -11
  37. package/dist/esm/define.js +1 -1
  38. package/dist/esm/event/animationFrame.js +76 -0
  39. package/dist/esm/event/can.js +8 -0
  40. package/dist/esm/event/index.js +3 -0
  41. package/dist/esm/event/on.js +64 -0
  42. package/dist/esm/event/store.js +7 -0
  43. package/dist/esm/extend.js +7 -7
  44. package/dist/esm/index.js +8 -6
  45. package/dist/esm/iterate.js +13 -13
  46. package/dist/esm/methods/set.js +10 -0
  47. package/dist/esm/methods/v2.js +1 -1
  48. package/dist/esm/mixins/attr.js +4 -3
  49. package/dist/esm/mixins/classList.js +11 -1
  50. package/dist/esm/mixins/content.js +1 -2
  51. package/dist/esm/mixins/html.js +1 -2
  52. package/dist/esm/mixins/state.js +2 -2
  53. package/dist/esm/mixins/style.js +12 -3
  54. package/dist/esm/mixins/text.js +6 -2
  55. package/dist/esm/node.js +8 -5
  56. package/dist/esm/render/append.js +52 -0
  57. package/dist/esm/render/cache.js +60 -0
  58. package/dist/esm/render/create.js +5 -0
  59. package/dist/esm/render/index.js +3 -0
  60. package/dist/esm/set.js +12 -14
  61. package/dist/esm/update.js +80 -42
  62. package/dist/esm/utils/applyParam.js +3 -3
  63. package/dist/esm/utils/extendUtils.js +5 -5
  64. package/dist/esm/utils/index.js +1 -0
  65. package/dist/esm/utils/propEvents.js +21 -4
  66. package/dist/iife/index.js +4718 -0
  67. package/extend.js +7 -10
  68. package/index.js +9 -6
  69. package/iterate.js +20 -13
  70. package/node.js +10 -8
  71. package/package.json +42 -18
  72. package/set.js +6 -5
  73. package/update.js +90 -52
  74. package/__tests__/checkIfOnUpdate.test.js +0 -103
  75. package/__tests__/children.test.js +0 -209
  76. package/__tests__/define.test.js +0 -75
  77. package/__tests__/inheritStateUpdates.test.js +0 -79
  78. package/__tests__/renderElement.test.js +0 -131
  79. package/__tests__/resetElement.test.js +0 -44
  80. package/__tests__/set.test.js +0 -312
  81. package/__tests__/throughExecProps.test.js +0 -86
  82. package/__tests__/throughInitialDefine.test.js +0 -104
  83. package/__tests__/throughInitialExec.test.js +0 -92
  84. package/__tests__/throughUpdatedDefine.test.js +0 -92
  85. package/__tests__/throughUpdatedExec.test.js +0 -111
  86. package/__tests__/tree.test.js +0 -15
  87. package/__tests__/update.test.js +0 -256
  88. package/dist/cjs/package.json +0 -4
  89. package/methods/set.js +0 -63
  90. package/methods/v2.js +0 -83
  91. package/mixins/attr.js +0 -32
  92. package/mixins/classList.js +0 -54
  93. package/mixins/content.js +0 -65
  94. package/mixins/data.js +0 -26
  95. package/mixins/html.js +0 -21
  96. package/mixins/index.js +0 -23
  97. package/mixins/registry.js +0 -46
  98. package/mixins/scope.js +0 -23
  99. package/mixins/state.js +0 -19
  100. package/mixins/style.js +0 -16
  101. package/mixins/text.js +0 -26
  102. package/utils/applyParam.js +0 -34
  103. package/utils/extendUtils.js +0 -149
  104. package/utils/index.js +0 -3
  105. package/utils/propEvents.js +0 -19
package/mixins/data.js DELETED
@@ -1,26 +0,0 @@
1
- 'use strict'
2
-
3
- import { isObject, deepMerge, exec } from '@domql/utils'
4
- import { report } from '@domql/report'
5
-
6
- /**
7
- * Apply data parameters on the DOM nodes
8
- * this should only work if `showOnNode: true` is passed
9
- */
10
- export function data (params, element, node) {
11
- if (params) {
12
- if (element.props.data) deepMerge(params, element.props.data)
13
- if (params.showOnNode) {
14
- if (!isObject(params)) report('HTMLInvalidData', params)
15
-
16
- // Apply data params on node
17
- for (const dataset in params) {
18
- if (dataset !== 'showOnNode') {
19
- node.dataset[dataset] = exec(params[dataset], element)
20
- }
21
- }
22
- }
23
- }
24
- }
25
-
26
- export default data
package/mixins/html.js DELETED
@@ -1,21 +0,0 @@
1
- 'use strict'
2
-
3
- import { exec } from '@domql/utils'
4
-
5
- /**
6
- * Appends raw HTML as content
7
- * an original one as a child
8
- */
9
- export function html (param, element, node) {
10
- const prop = exec(element?.props?.html || param, element)
11
- const { __ref } = element
12
- if (prop !== __ref.__html) {
13
- // const parser = new window.DOMParser()
14
- // param = parser.parseFromString(param, 'text/html')
15
- if (node.nodeName === 'SVG') node.textContent = prop
16
- else node.innerHTML = prop
17
- __ref.__html = prop
18
- }
19
- }
20
-
21
- export default html
package/mixins/index.js DELETED
@@ -1,23 +0,0 @@
1
- 'use strict'
2
-
3
- import { attr } from './attr.js'
4
- import { applyClasslist } from './classList.js'
5
- import { data } from './data.js'
6
- import { html } from './html.js'
7
- import { style } from './style.js'
8
- import { text } from './text.js'
9
- import { state } from './state.js'
10
- import { scope } from './scope.js'
11
-
12
- export {
13
- applyClasslist as classList,
14
- attr,
15
- data,
16
- style,
17
- text,
18
- html,
19
- state,
20
- scope
21
- }
22
-
23
- export * from './registry.js'
@@ -1,46 +0,0 @@
1
- 'use strict'
2
-
3
- import { attr } from './attr.js'
4
- import { classList } from './classList.js'
5
- import data from './data.js'
6
- import html from './html.js'
7
- import scope from './scope.js'
8
- import state from './state.js'
9
- import style from './style.js'
10
- import text from './text.js'
11
-
12
- export const REGISTRY = {
13
- attr,
14
- style,
15
- text,
16
- html,
17
- data,
18
- classlist: classList,
19
- state,
20
- scope,
21
- deps: (param, el) => param || el.parent.deps,
22
-
23
- extends: {},
24
- children: {},
25
- content: {},
26
- childExtends: {},
27
- childExtendsRecursive: {},
28
- props: {},
29
- if: {},
30
- define: {},
31
- __name: {},
32
- __ref: {},
33
- __hash: {},
34
- __text: {},
35
- key: {},
36
- tag: {},
37
- query: {},
38
- parent: {},
39
- node: {},
40
- variables: {},
41
- on: {},
42
- component: {},
43
- context: {}
44
- }
45
-
46
- export default REGISTRY
package/mixins/scope.js DELETED
@@ -1,23 +0,0 @@
1
- 'use strict'
2
-
3
- import { isFunction, isObject } from '@domql/utils'
4
-
5
- /**
6
- * Apply data parameters on the DOM nodes
7
- * this should only work if `showOnNode: true` is passed
8
- */
9
- export function scope (params, element, node) {
10
- if (!isObject(params)) return
11
-
12
- // Apply data params on node
13
- for (const scopeItem in params) {
14
- const value = params[scopeItem]
15
- if (isFunction(value)) {
16
- element.scope[scopeItem] = value.bind(element)
17
- } else {
18
- element.scope[scopeItem] = value
19
- }
20
- }
21
- }
22
-
23
- export default scope
package/mixins/state.js DELETED
@@ -1,19 +0,0 @@
1
- 'use strict'
2
-
3
- import { exec, isObject, STATE_METHODS } from '@domql/utils'
4
-
5
- export function state (params, element, node) {
6
- const state = exec(params, element)
7
-
8
- if (isObject(state)) {
9
- for (const param in state) {
10
- if (STATE_METHODS.includes(param)) continue
11
- if (!Object.hasOwnProperty.call(state, param)) continue
12
- // element.state[param] = exec(state[param], element)
13
- }
14
- }
15
-
16
- return element
17
- }
18
-
19
- export default state
package/mixins/style.js DELETED
@@ -1,16 +0,0 @@
1
- 'use strict'
2
-
3
- import { isObject, map } from '@domql/utils'
4
- import { report } from '@domql/report'
5
-
6
- /**
7
- * Recursively add styles to a DOM node
8
- */
9
- export function style (params, element, node) {
10
- if (params) {
11
- if (isObject(params)) map(node.style, params, element)
12
- else report('HTMLInvalidStyles', params)
13
- }
14
- }
15
-
16
- export default style
package/mixins/text.js DELETED
@@ -1,26 +0,0 @@
1
- 'use strict'
2
-
3
- import { create } from '../create.js'
4
- import { exec, isString } from '@domql/utils'
5
-
6
- /**
7
- * Creates a text node and appends into
8
- * an original one as a child
9
- */
10
- export function text (param, element, node) {
11
- let prop = exec(element.props.text || param, element)
12
- if (isString(prop) && prop.includes('{{')) {
13
- prop = element.call('replaceLiteralsWithObjectFields', prop, element.state)
14
- }
15
- if (element.tag === 'string') {
16
- node.nodeValue = prop
17
- } else if (param !== undefined || param !== null) {
18
- if (element.__text) {
19
- if (element.__text.text === prop) return
20
- element.__text.text = prop
21
- if (element.__text.node) element.__text.node.nodeValue = prop
22
- } else create({ tag: 'string', text: prop }, element, '__text')
23
- }
24
- }
25
-
26
- export default text
@@ -1,34 +0,0 @@
1
- 'use strict'
2
-
3
- import { exec, isFunction } from '@domql/utils'
4
- import { REGISTRY } from '../mixins/index.js'
5
-
6
- export const applyParam = (param, element, options) => {
7
- const { node, context, __ref: ref } = element
8
- const prop = exec(element[param], element)
9
-
10
- const { onlyUpdate } = options
11
-
12
- const DOMQLProperty = REGISTRY[param]
13
- const DOMQLPropertyFromContext =
14
- context && context.registry && context.registry[param]
15
- const isGlobalTransformer = DOMQLPropertyFromContext || DOMQLProperty
16
-
17
- const hasDefine = element.define && element.define[param]
18
- const hasContextDefine = context && context.define && context.define[param]
19
-
20
- if (!ref.__if) return
21
-
22
- const hasOnlyUpdate = onlyUpdate
23
- ? onlyUpdate === param || element.lookup(onlyUpdate)
24
- : true
25
-
26
- if (isGlobalTransformer && !hasContextDefine && hasOnlyUpdate) {
27
- if (isFunction(isGlobalTransformer)) {
28
- isGlobalTransformer(prop, element, node, options)
29
- }
30
- return
31
- }
32
-
33
- return { hasDefine, hasContextDefine }
34
- }
@@ -1,149 +0,0 @@
1
- 'use strict'
2
-
3
- import {
4
- isArray,
5
- isFunction,
6
- isObject,
7
- isString,
8
- deepClone,
9
- isNotProduction
10
- } from '@domql/utils'
11
-
12
- export const generateHash = () => Math.random().toString(36).substring(2)
13
-
14
- // hashing
15
- export const extendStackRegistry = {}
16
- export const extendCachedRegistry = {}
17
-
18
- export const getHashedExtend = extend => {
19
- return extendStackRegistry[extend.__hash]
20
- }
21
-
22
- export const setHashedExtend = (extend, stack) => {
23
- const hash = generateHash()
24
- if (!isString(extend)) {
25
- extend.__hash = hash
26
- }
27
- extendStackRegistry[hash] = stack
28
- return stack
29
- }
30
-
31
- export const getExtendStackRegistry = (extend, stack) => {
32
- if (extend.__hash) {
33
- return stack.concat(getHashedExtend(extend))
34
- }
35
- return setHashedExtend(extend, stack) // stack .concat(hashedExtend)
36
- }
37
-
38
- // stacking
39
- export const extractArrayExtend = (extend, stack, context) => {
40
- extend.forEach(each => flattenExtend(each, stack, context))
41
- return stack
42
- }
43
-
44
- export const deepExtend = (extend, stack, context) => {
45
- const extendOflattenExtend = extend.extend
46
- if (extendOflattenExtend) {
47
- flattenExtend(extendOflattenExtend, stack, context)
48
- }
49
- return stack
50
- }
51
-
52
- export const flattenExtend = (extend, stack, context) => {
53
- if (!extend) return stack
54
- if (isArray(extend)) return extractArrayExtend(extend, stack, context)
55
- if (isString(extend)) extend = fallbackStringExtend(extend, context)
56
- stack.push(extend)
57
- if (extend.extend) deepExtend(extend, stack, context)
58
- return stack
59
- }
60
-
61
- export const deepMergeExtend = (element, extend) => {
62
- for (const e in extend) {
63
- if (['parent', 'node', '__element'].indexOf(e) > -1) continue
64
- const elementProp = element[e]
65
- const extendProp = extend[e]
66
- if (elementProp === undefined) {
67
- element[e] = extendProp
68
- } else if (isObject(elementProp) && isObject(extendProp)) {
69
- deepMergeExtend(elementProp, extendProp)
70
- } else if (isArray(elementProp) && isArray(extendProp)) {
71
- element[e] = elementProp.concat(extendProp)
72
- } else if (isArray(elementProp) && isObject(extendProp)) {
73
- const obj = deepMergeExtend({}, elementProp)
74
- element[e] = deepMergeExtend(obj, extendProp)
75
- } else if (elementProp === undefined && isFunction(extendProp)) {
76
- element[e] = extendProp
77
- }
78
- }
79
- return element
80
- }
81
-
82
- export const cloneAndMergeArrayExtend = stack => {
83
- return stack.reduce((a, c) => {
84
- return deepMergeExtend(a, deepClone(c))
85
- }, {})
86
- }
87
-
88
- export const fallbackStringExtend = (
89
- extend,
90
- context,
91
- options = {},
92
- variant
93
- ) => {
94
- const COMPONENTS = (context && context.components) || options.components
95
- const PAGES = (context && context.pages) || options.pages
96
- if (isString(extend)) {
97
- const componentExists =
98
- COMPONENTS &&
99
- (COMPONENTS[extend + '.' + variant] ||
100
- COMPONENTS[extend] ||
101
- COMPONENTS['smbls.' + extend])
102
- const pageExists = PAGES && extend.startsWith('/') && PAGES[extend]
103
- if (componentExists) return componentExists
104
- else if (pageExists) return pageExists
105
- else {
106
- if (options.verbose && isNotProduction()) {
107
- console.warn('Extend is string but component was not found:', extend)
108
- }
109
- return {}
110
- }
111
- }
112
- return extend
113
- }
114
-
115
- // joint stacks
116
- export const jointStacks = (extendStack, childExtendStack) => {
117
- return []
118
- .concat(extendStack.slice(0, 1))
119
- .concat(childExtendStack.slice(0, 1))
120
- .concat(extendStack.slice(1))
121
- .concat(childExtendStack.slice(1))
122
- }
123
-
124
- // init
125
- export const getExtendStack = (extend, context) => {
126
- if (!extend) return []
127
- if (extend.__hash) return getHashedExtend(extend) || []
128
- const stack = flattenExtend(extend, [], context)
129
- return getExtendStackRegistry(extend, stack)
130
- }
131
-
132
- export const getExtendMerged = extend => {
133
- const stack = getExtendStack(extend)
134
- return cloneAndMergeArrayExtend(stack)
135
- }
136
-
137
- // export const replaceStringsWithComponents = (stack, context, options) => {
138
- // const COMPONENTS = (context && context.components) || options.components
139
- // return stack.map(v => {
140
- // if (isString(v)) {
141
- // const component = COMPONENTS[v]
142
- // return component
143
- // }
144
- // if (isString(v.extend)) {
145
- // v.extend = getExtendMerged(COMPONENTS[v.extend])
146
- // }
147
- // return v
148
- // })
149
- // }
package/utils/index.js DELETED
@@ -1,3 +0,0 @@
1
- 'use strict'
2
-
3
- export const METHODS_EXL = [] // this is needed because of unit tests
@@ -1,19 +0,0 @@
1
- 'use strict'
2
-
3
- import { isFunction, lowercaseFirstLetter } from '@domql/utils'
4
-
5
- export const propagateEventsFromProps = (element) => {
6
- const { props, on } = element
7
- const eventKeysFromProps = Object.keys(props).filter(key => key.startsWith('on'))
8
- eventKeysFromProps.forEach(v => {
9
- const eventName = lowercaseFirstLetter(v.split('on')[1])
10
- const origEvent = on[eventName]
11
- const funcFromProps = props[v]
12
- if (isFunction(origEvent)) {
13
- on[eventName] = (...args) => {
14
- const originalEventRetunrs = origEvent(...args)
15
- if (originalEventRetunrs !== false) return funcFromProps(...args)
16
- }
17
- } else on[eventName] = funcFromProps
18
- })
19
- }