@domql/element 2.0.7 → 2.2.3

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 ADDED
@@ -0,0 +1,21 @@
1
+ # DOMQL Element
2
+ Takes object and creates DOMQL element.
3
+
4
+ [![npm version](https://badge.fury.io/js/%40domql%2Felement.svg)](https://badge.fury.io/js/%40domql%2Felement)
5
+
6
+ ### Example:
7
+ ```javascript
8
+ import DOM from 'domql'
9
+
10
+ const Poster = {
11
+ extends: [Link, Img],
12
+ props: {
13
+ boxSize: [100, 200],
14
+ borderRadius: 12,
15
+ padding: 16,
16
+ background: '#fff'
17
+ }
18
+ }
19
+
20
+ DOM.create(Poster, document.body)
21
+ ```
package/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  'use strict'
2
2
 
3
- export * from './iterate'
4
- export * from './methods'
5
- export * from './update'
6
- export * from './create'
7
- export * from './set'
3
+ export * from '@domql/methods'
4
+ export * from '@domql/iterate'
5
+ export * from '@domql/update'
6
+ export * from '@domql/create'
7
+ export * from '@domql/set'
package/package.json CHANGED
@@ -1,19 +1,15 @@
1
1
  {
2
2
  "name": "@domql/element",
3
- "version": "2.0.7",
3
+ "version": "2.2.3",
4
4
  "main": "index.js",
5
5
  "license": "MIT",
6
6
  "dependencies": {
7
- "@domql/event": "latest",
8
- "@domql/extends": "latest",
9
- "@domql/key": "latest",
10
- "@domql/mixins": "latest",
11
- "@domql/props": "latest",
12
- "@domql/registry": "latest",
13
- "@domql/state": "latest",
14
- "@domql/tree": "latest",
15
- "@domql/utils": "latest"
7
+ "@domql/create": "latest",
8
+ "@domql/iterate": "latest",
9
+ "@domql/methods": "latest",
10
+ "@domql/set": "latest",
11
+ "@domql/update": "latest"
16
12
  },
17
- "gitHead": "6d9ef59d4aa1f481159f8fdbe38112479e86e21a",
13
+ "gitHead": "140b4437092d6a5efaf99cc32f04fedd55faac0c",
18
14
  "source": "index.js"
19
15
  }
package/create.js DELETED
@@ -1,167 +0,0 @@
1
- 'use strict'
2
-
3
- import { DEFAULT_METHODS, TAGS } from '@domql/registry'
4
-
5
- import { root } from '@domql/tree'
6
- import { createKey } from '@domql/key'
7
- import { isNumber, isString, isObject, isNode, isFunction, isArray, exec } from '@domql/utils'
8
- import { createState } from '@domql/state'
9
- import { createProps } from '@domql/props'
10
- import { extendElement } from '@domql/extends'
11
-
12
- const OPTIONS = {}
13
-
14
- const init = (element, key, options, parent) => {
15
- const ref = {}
16
- if (isString(element) || isNumber(element)) {
17
- return {
18
- key,
19
- ref,
20
- text: element
21
- }
22
- } else if (isArray(element)) return Object.assign({}, element)
23
- else if (isObject(element)) {
24
- if (!element.ref) element.ref = ref
25
- if (element.on && element.on.init) element.on.init(element, element.state)
26
- return element
27
- } else if (isFunction(element)) return exec(parent, parent.ref.state)
28
- else if (!element) return { ref }
29
- return element
30
- }
31
-
32
- const assignKey = (element, key) => {
33
- if (element.key) return element
34
- element.key = key || createKey.next().value
35
- return element
36
- }
37
-
38
- const applyParent = (element, key) => {
39
- const { ref } = element
40
- const { parent } = ref
41
- if (isNode(parent)) {
42
- ref.parent = root.ref.parent = { node: parent }
43
- }
44
- if (!parent) ref.parent = root
45
- return element
46
- }
47
-
48
- const applyState = (element, key) => {
49
- const { ref } = element
50
- ref.state = createState(element, element.ref.parent)
51
- return element
52
- }
53
-
54
- const applyExtends = (element, key) => {
55
- extendElement(element, element.ref.parent)
56
- return element
57
- }
58
-
59
- const applyTag = (element, key) => {
60
- if (element.tag) {
61
- element.ref.tag = element.tag
62
- return element
63
- }
64
- const keyIsTag = TAGS.body.indexOf(key) > -1
65
- element.tag = element.ref.tag = keyIsTag ? key : 'div'
66
- return element
67
- }
68
-
69
- const applyProps = (element, key) => {
70
- const { ref } = element
71
- ref.props = createProps(element, element.ref.parent)
72
- return element
73
- }
74
-
75
- const onEachAvailable = (element, key, options) => {
76
- const { ref } = element
77
- const value = element[key]
78
- let { children, childrenKeys } = ref
79
- if (!children) children = ref.children = []
80
- if (!childrenKeys) childrenKeys = ref.childrenKeys = []
81
-
82
- // add to ref.children
83
- const useOption = options[onEachAvailable]
84
- if (useOption) useOption(element, key)
85
-
86
- // move value to ref.children
87
- children.push(value)
88
- childrenKeys.push(key)
89
- }
90
-
91
- const onEach = (element, key, options) => {
92
- for (const key in element) {
93
- const propMethod = DEFAULT_METHODS[key]
94
- if (propMethod && isFunction(propMethod)) propMethod(element, element.ref.state)
95
- const hasDefine = element.define && element.define[key]
96
- if (hasDefine && isFunction(hasDefine)) element.ref[key] = hasDefine(element, element.ref.state)
97
- if (!propMethod && !hasDefine) onEachAvailable(element, key, options)
98
- }
99
- return element
100
- }
101
-
102
- const applyTransform = (element, key, options) => {
103
- const { ref, transform } = element
104
- if (!transform) return element
105
- if (!ref.transform) ref.transform = {}
106
- const keys = Object.keys(transform || {})
107
- keys.map(key => {
108
- const transformer = transform[key]
109
- ref.transform[key] = transformer(element, key)
110
- return key
111
- })
112
- return element
113
- }
114
-
115
- const addChildren = (element, key, options) => {
116
- const { ref } = element
117
- const { children } = ref
118
-
119
- if (children && children.length) {
120
- ref.children = children.map(child => {
121
- return create(child, element, key, options)
122
- })
123
- }
124
-
125
- return element
126
- }
127
-
128
- const applyGlobalTransform = (element, key, options) => {
129
- const { ref } = element
130
- const { transform } = options
131
- if (!transform) return element
132
- if (!ref.transform) ref.transform = {}
133
- const keys = Object.keys(transform || {})
134
- keys.map(key => {
135
- const transformer = transform[key]
136
- ref.transform[key] = transformer(element, key)
137
- return key
138
- })
139
- return element
140
- }
141
-
142
- /**
143
- * Creating a DOMQL element
144
- */
145
- export const create = (element, parent, key, options = OPTIONS) => [
146
- init,
147
- assignKey,
148
- applyParent,
149
- applyState,
150
- applyExtends,
151
- applyTag,
152
- applyProps,
153
- onEach,
154
- applyTransform,
155
- addChildren,
156
- applyGlobalTransform
157
- ].reduce((prev, current) => current(prev, key, options, parent), element)
158
-
159
- // create({
160
- // test: {
161
- // test2: {}
162
- // }
163
- // }, null, null, {
164
- // transform: {
165
- // react: transformReact
166
- // }
167
- // })
package/iterate.js DELETED
@@ -1,80 +0,0 @@
1
- 'use strict'
2
-
3
- import { exec, isFunction, isNumber, isString, overwrite } from '@domql/utils'
4
- import { isMethod } from './methods'
5
-
6
- export const applyEvents = element => {
7
- const { node, on } = element
8
- for (const param in on) {
9
- if (
10
- param === 'init' ||
11
- param === 'render' ||
12
- param === 'update'
13
- ) continue
14
-
15
- const appliedFunction = element.on[param]
16
- if (isFunction(appliedFunction)) {
17
- node.addEventListener(param, event =>
18
- appliedFunction(event, element, element.state),
19
- true)
20
- }
21
- }
22
- }
23
-
24
- export const throughInitialExec = element => {
25
- for (const param in element) {
26
- const prop = element[param]
27
- if (isFunction(prop) && !isMethod(param)) {
28
- element.__exec[param] = prop
29
- element[param] = prop(element, element.state)
30
- }
31
- }
32
- }
33
-
34
- export const throughUpdatedExec = (element, options) => {
35
- const { __exec } = element
36
- const changes = {}
37
-
38
- for (const param in __exec) {
39
- const prop = element[param]
40
- const newExec = __exec[param](element, element.state)
41
-
42
- // if element is string
43
- if (prop && prop.node && (isString(newExec) || isNumber(newExec))) {
44
- overwrite(prop, { text: newExec }, options)
45
- } else if (newExec !== prop) {
46
- element.__cached[param] = changes[param] = prop
47
- element[param] = newExec
48
- }
49
- }
50
-
51
- return changes
52
- }
53
-
54
- export const throughInitialDefine = element => {
55
- const { define } = element
56
- for (const param in define) {
57
- let prop = element[param]
58
-
59
- if (isFunction(prop) && !isMethod(param)) {
60
- element.__exec[param] = prop
61
- element[param] = prop = exec(prop, element)
62
- }
63
-
64
- element.__cached[param] = prop
65
- element[param] = define[param](prop, element, element.state)
66
- }
67
- return element
68
- }
69
-
70
- export const throughUpdatedDefine = element => {
71
- const { define, __exec } = element
72
- const changes = {}
73
- for (const param in define) {
74
- const execParam = __exec[param]
75
- if (execParam) element.__cached[param] = execParam(element, element.state)
76
- const cached = exec(element.__cached[param], element)
77
- element[param] = define[param](cached, element, element.state)
78
- }
79
- return changes
80
- }
package/methods.js DELETED
@@ -1,96 +0,0 @@
1
- 'use strict'
2
-
3
- import { isObject, isObjectLike } from '@domql/utils'
4
- import { DEFAULT_METHODS } from '@domql/registry'
5
-
6
- // TODO: update these files
7
- export const lookup = function (key) {
8
- const element = this
9
- let { parent } = element
10
-
11
- while (parent.key !== key) {
12
- parent = parent.parent
13
- if (!parent) return
14
- }
15
-
16
- return parent
17
- }
18
-
19
- export const remove = function (params) {
20
- const element = this
21
- element.node.remove()
22
- delete element.parent[element.key]
23
- }
24
-
25
- export const get = function (param) {
26
- const element = this
27
- return element[param]
28
- }
29
-
30
- // export const set = function () {
31
- // }
32
-
33
- // export const update = function () {
34
- // }
35
-
36
- export const defineSetter = (element, key, get, set) =>
37
- Object.defineProperty(element, key, { get, set })
38
-
39
- export const keys = function () {
40
- const element = this
41
- const keys = []
42
- for (const param in element) {
43
- if (!isObject(DEFAULT_METHODS[param])) {
44
- keys.push(param)
45
- }
46
- }
47
- return keys
48
- }
49
-
50
- export const parse = function () {
51
- const element = this
52
- const obj = {}
53
- const keys = element.keys()
54
- keys.forEach(v => (obj[v] = element[v]))
55
- return obj
56
- }
57
-
58
- export const parseDeep = function (param) {
59
- const element = this
60
- const orig = param || element
61
- const obj = {}
62
- const keys = orig.keys && orig.keys()
63
- if (!keys) return
64
- keys.forEach(v => {
65
- const prop = orig[v]
66
- if (isObjectLike(prop)) parseDeep(prop)
67
- else obj[v] = prop
68
- })
69
- return obj
70
- }
71
-
72
- export const log = function (...args) {
73
- const element = this
74
- console.group(element.key)
75
- if (args.length) {
76
- args.forEach(v => console.log(`%c${v}:\n`, 'font-weight: bold', element[v]))
77
- } else {
78
- console.log(element.path)
79
- const keys = element.keys()
80
- keys.forEach(v => console.log(`%c${v}:\n`, 'font-weight: bold', element[v]))
81
- }
82
- console.groupEnd(element.key)
83
- return element
84
- }
85
-
86
- export const isMethod = function (param) {
87
- return param === 'set' ||
88
- param === 'update' ||
89
- param === 'remove' ||
90
- param === 'lookup' ||
91
- param === 'keys' ||
92
- param === 'parse' ||
93
- param === 'parseDeep' ||
94
- param === 'if' ||
95
- param === 'log'
96
- }
package/set.js DELETED
@@ -1,44 +0,0 @@
1
- 'use strict'
2
-
3
- import { create } from './create'
4
-
5
- const removeContentElement = (params, element) => {
6
- if (params && element.content) {
7
- if (element.content.node) {
8
- if (element.content.tag === 'fragment') element.node.innerHTML = ''
9
- else element.node.removeChild(element.content.node)
10
- }
11
-
12
- if (element.__cached && element.__cached.content) {
13
- if (element.__cached.content.tag === 'fragment') element.__cached.content.parent.node.innerHTML = ''
14
- else element.__cached.content.remove()
15
- }
16
-
17
- delete element.content
18
- }
19
- }
20
-
21
- export const set = function (params, enter, leave) {
22
- const element = this
23
-
24
- removeContentElement(params, element)
25
-
26
- if (params) {
27
- const { childProto } = params
28
- if (!childProto && element.childProto) params.childProto = element.childProto
29
- create(params, element, 'content', {
30
- ignoreChildProto: true
31
- })
32
- }
33
-
34
- return element
35
- }
36
-
37
- // if (element.content && (isFunction(element.content) || element.content.node)) {
38
- // // leave(element, () => {
39
- // // console.log('remove', element.content)
40
- // // element.content.remove()
41
- // // element.content.update(params)
42
- // // element.node.removeChild(element.content.node)
43
- // // delete element.content
44
- // }
package/update.js DELETED
@@ -1,85 +0,0 @@
1
- 'use strict'
2
-
3
- import { overwrite, isFunction, isObject, isString, isNumber, merge } from '@domql/utils'
4
- import { defaultMethods } from '@domql/mixins'
5
- import { updateProps } from '@domql/props'
6
- // import { createNode } from '@domql/node'
7
- import { on } from '@domql/event'
8
-
9
- import { isMethod } from './methods'
10
- import { throughUpdatedDefine, throughUpdatedExec } from './iterate'
11
- // import { appendNode } from './assign'
12
-
13
- const UPDATE_DEFAULT_OPTIONS = {
14
- stackChanges: false,
15
- cleanExec: true,
16
- preventRecursive: false
17
- }
18
-
19
- export const update = function (params = {}, options = UPDATE_DEFAULT_OPTIONS) {
20
- const element = this
21
- const { define, parent, node } = element
22
-
23
- // console.groupCollapsed('Update:', element.path)
24
- // console.groupEnd('Update:')
25
- // if params is string
26
- if (isString(params) || isNumber(params)) {
27
- params = { text: params }
28
- }
29
-
30
- if (element.on && isFunction(element.on.initUpdate)) {
31
- on.initUpdate(element.on.initUpdate, element, element.state)
32
- }
33
-
34
- updateProps(params.props, element, parent)
35
-
36
- // console.groupCollapsed('UPDATE:')
37
- // console.groupEnd('UPDATE:')
38
-
39
- const overwriteChanges = overwrite(element, params, UPDATE_DEFAULT_OPTIONS)
40
- const execChanges = throughUpdatedExec(element, UPDATE_DEFAULT_OPTIONS)
41
- const definedChanges = throughUpdatedDefine(element)
42
-
43
- if (UPDATE_DEFAULT_OPTIONS.stackChanges && element.__stackChanges) {
44
- const stackChanges = merge(definedChanges, merge(execChanges, overwriteChanges))
45
- element.__stackChanges.push(stackChanges)
46
- }
47
-
48
- if (isFunction(element.if)) {
49
- // TODO: move as fragment
50
- const ifPassed = element.if(element, element.state)
51
- if (element.__ifFalsy && ifPassed) {
52
- // createNode(element)
53
- // appendNode(element.node, element.__ifFragment)
54
- delete element.__ifFalsy
55
- } else if (element.node && !ifPassed) {
56
- element.node.remove()
57
- element.__ifFalsy = true
58
- }
59
- }
60
-
61
- // console.groupEnd('Update:')
62
-
63
- if (!node || options.preventRecursive) return
64
-
65
- for (const param in element) {
66
- const prop = element[param]
67
-
68
- if (isMethod(param) || isObject(defaultMethods[param]) || prop === undefined) continue
69
-
70
- const hasDefined = define && define[param]
71
- const ourParam = defaultMethods[param]
72
-
73
- if (ourParam) {
74
- if (isFunction(ourParam)) ourParam(prop, element, node)
75
- } else if (prop && isObject(prop) && !hasDefined) {
76
- update.call(prop, params[prop], UPDATE_DEFAULT_OPTIONS)
77
- }
78
- }
79
-
80
- if (element.on && isFunction(element.on.update)) {
81
- on.update(element.on.update, element, element.state)
82
- }
83
-
84
- return element
85
- }