domql 2.0.6 → 2.0.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.
- package/README.md +208 -0
- package/package.json +53 -20
- package/packages/cookie/index.js +22 -0
- package/packages/emotion/index.js +35 -0
- package/packages/object/index.js +29 -0
- package/packages/object/package.json +20 -0
- package/packages/routeLink/index.js +23 -0
- package/packages/router/index.js +18 -0
- package/src/element/assign.js +22 -0
- package/src/element/cache.js +52 -0
- package/src/element/create.js +144 -0
- package/src/element/createNode.js +92 -0
- package/src/element/createProps.js +64 -0
- package/src/element/createState.js +51 -0
- package/src/element/define.js +13 -0
- package/src/element/id.js +10 -0
- package/src/element/index.js +34 -0
- package/src/element/iterate.js +80 -0
- package/src/element/methods.js +96 -0
- package/src/element/mixins/attr.js +18 -0
- package/src/element/mixins/classList.js +37 -0
- package/src/element/mixins/content.js +17 -0
- package/src/element/mixins/data.js +21 -0
- package/src/element/mixins/html.js +17 -0
- package/src/element/mixins/index.js +23 -0
- package/src/element/mixins/registry.js +55 -0
- package/src/element/mixins/state.js +16 -0
- package/src/element/mixins/style.js +14 -0
- package/src/element/mixins/text.js +19 -0
- package/src/element/nodes.js +139 -0
- package/src/element/parse.js +17 -0
- package/src/element/proto.js +66 -0
- package/src/element/root.js +10 -0
- package/src/element/set.js +46 -0
- package/src/element/tree.js +5 -0
- package/src/element/update.js +100 -0
- package/src/event/can.js +10 -0
- package/src/event/index.js +11 -0
- package/src/event/is.js +13 -0
- package/src/event/on.js +33 -0
- package/src/event/store.js +6 -0
- package/src/event/wrappers.js +14 -0
- package/src/index.js +16 -0
- package/src/utils/index.js +6 -0
- package/src/utils/node.js +10 -0
- package/src/utils/object.js +193 -0
- package/src/utils/protoUtils.js +119 -0
- package/src/utils/report.js +62 -0
- package/allExports.js +0 -17
- package/index.js +0 -15
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
import create from './create'
|
|
4
|
+
import cacheNode from './cache'
|
|
5
|
+
import * as on from '../event/on'
|
|
6
|
+
|
|
7
|
+
import { isFunction, isObject } from '../utils'
|
|
8
|
+
import {
|
|
9
|
+
throughInitialDefine,
|
|
10
|
+
throughInitialExec,
|
|
11
|
+
applyEvents
|
|
12
|
+
} from './iterate'
|
|
13
|
+
import { registry } from './mixins'
|
|
14
|
+
import { isMethod } from './methods'
|
|
15
|
+
// import { defineSetter } from './methods'
|
|
16
|
+
|
|
17
|
+
const ENV = process.env.NODE_ENV
|
|
18
|
+
|
|
19
|
+
// const defineSetter = (element, key) => Object.defineProperty(element, key, {
|
|
20
|
+
// get: function () {
|
|
21
|
+
// console.log('GET', key)
|
|
22
|
+
// return element.__data[key]
|
|
23
|
+
// },
|
|
24
|
+
// set: function (new_value) {
|
|
25
|
+
// console.log('SET', key, new_value)
|
|
26
|
+
// element.__data[key] = new_value
|
|
27
|
+
// element.__data['modified'] = (new Date()).getTime()
|
|
28
|
+
// }
|
|
29
|
+
// })
|
|
30
|
+
|
|
31
|
+
const createNode = (element) => {
|
|
32
|
+
// create and assign a node
|
|
33
|
+
let { node, tag } = element
|
|
34
|
+
|
|
35
|
+
let isNewNode
|
|
36
|
+
|
|
37
|
+
// console.groupCollapsed('CREATE:')
|
|
38
|
+
// console.log(element)
|
|
39
|
+
// console.groupEnd('CREATE:')
|
|
40
|
+
|
|
41
|
+
if (!node) {
|
|
42
|
+
isNewNode = true
|
|
43
|
+
|
|
44
|
+
if (tag === 'shadow') {
|
|
45
|
+
node = element.node = element.parent.node.attachShadow({ mode: 'open' })
|
|
46
|
+
} else node = element.node = cacheNode(element)
|
|
47
|
+
|
|
48
|
+
// run `on.attachNode`
|
|
49
|
+
if (element.on && isFunction(element.on.attachNode)) {
|
|
50
|
+
on.attachNode(element.on.attachNode, element, element.state)
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// node.dataset // .key = element.key
|
|
55
|
+
|
|
56
|
+
if (ENV === 'test' || ENV === 'development') {
|
|
57
|
+
node.ref = element
|
|
58
|
+
if (isFunction(node.setAttribute)) node.setAttribute('key', element.key)
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// iterate through all given params
|
|
62
|
+
if (element.tag !== 'string' || element.tag !== 'fragment') {
|
|
63
|
+
// iterate through define
|
|
64
|
+
if (isObject(element.define)) throughInitialDefine(element)
|
|
65
|
+
|
|
66
|
+
// iterate through exec
|
|
67
|
+
throughInitialExec(element)
|
|
68
|
+
|
|
69
|
+
// apply events
|
|
70
|
+
if (isNewNode && isObject(element.on)) applyEvents(element)
|
|
71
|
+
|
|
72
|
+
for (const param in element) {
|
|
73
|
+
const prop = element[param]
|
|
74
|
+
|
|
75
|
+
if (isMethod(param) || isObject(registry[param]) || prop === undefined) continue
|
|
76
|
+
|
|
77
|
+
const hasDefined = element.define && element.define[param]
|
|
78
|
+
const ourParam = registry[param]
|
|
79
|
+
|
|
80
|
+
if (ourParam) { // Check if param is in our method registry
|
|
81
|
+
if (isFunction(ourParam)) ourParam(prop, element, node)
|
|
82
|
+
} else if (element[param] && !hasDefined) {
|
|
83
|
+
create(prop, element, param) // Create element
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// node.dataset.key = key
|
|
89
|
+
return element
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export default createNode
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
import { deepClone, deepMerge, exec, isArray } from '../utils'
|
|
4
|
+
|
|
5
|
+
const initProps = (element, parent) => {
|
|
6
|
+
const propsStack = []
|
|
7
|
+
if (element.props) propsStack.push(element.props)
|
|
8
|
+
|
|
9
|
+
if (isArray(element.__proto)) {
|
|
10
|
+
element.__proto.map(proto => {
|
|
11
|
+
if (proto.props) propsStack.push(proto.props)
|
|
12
|
+
return proto.props
|
|
13
|
+
})
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
return propsStack
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const inheritProps = (element, parent) => {
|
|
20
|
+
element.props = (parent && parent.props) || { update, __element: element }
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export const syncProps = (props, element) => {
|
|
24
|
+
element.props = {}
|
|
25
|
+
const mergedProps = { update, __element: element }
|
|
26
|
+
props.forEach(v => {
|
|
27
|
+
if (v === 'update' || v === '__element') return
|
|
28
|
+
element.props = deepMerge(mergedProps, deepClone(exec(v, element)))
|
|
29
|
+
})
|
|
30
|
+
element.props = mergedProps
|
|
31
|
+
return element.props
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const createProps = function (element, parent, cached) {
|
|
35
|
+
const propsStack = cached || initProps(element, parent)
|
|
36
|
+
|
|
37
|
+
if (propsStack.length) {
|
|
38
|
+
element.__props = propsStack
|
|
39
|
+
syncProps(propsStack, element)
|
|
40
|
+
element.props.update = update
|
|
41
|
+
} else inheritProps(element, parent)
|
|
42
|
+
|
|
43
|
+
return element
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export const updateProps = (newProps, element, parent) => {
|
|
47
|
+
let propsStack = element.__props
|
|
48
|
+
|
|
49
|
+
if (newProps) propsStack = element.__props = [].concat(newProps, propsStack)
|
|
50
|
+
|
|
51
|
+
if (propsStack) syncProps(propsStack, element)
|
|
52
|
+
else inheritProps(element, parent)
|
|
53
|
+
|
|
54
|
+
// console.log(cachedProps)
|
|
55
|
+
return element
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function update (props) {
|
|
59
|
+
const element = this.__element
|
|
60
|
+
// element.update({ props })
|
|
61
|
+
element.update()
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export default createProps
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
import { on } from '../event'
|
|
4
|
+
import { deepClone, exec, isFunction, overwriteDeep } from '../utils'
|
|
5
|
+
|
|
6
|
+
export const parseState = function () {
|
|
7
|
+
const state = this
|
|
8
|
+
const parseState = {}
|
|
9
|
+
for (const param in state) {
|
|
10
|
+
if (param !== '__element' && param !== 'update' && param !== 'parse') {
|
|
11
|
+
parseState[param] = state[param]
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return parseState
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export const updateState = function (obj, options = {}) {
|
|
18
|
+
const state = this
|
|
19
|
+
const element = state.__element
|
|
20
|
+
|
|
21
|
+
// run `on.stateUpdated`
|
|
22
|
+
if (element.on && isFunction(element.on.initStateUpdated)) {
|
|
23
|
+
on.initStateUpdated(element.on.initStateUpdated, element, state)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
overwriteDeep(state, obj, ['update', 'parse', '__element'])
|
|
27
|
+
if (!options.preventUpdate) element.update()
|
|
28
|
+
|
|
29
|
+
// run `on.stateUpdated`
|
|
30
|
+
if (element.on && isFunction(element.on.stateUpdated)) {
|
|
31
|
+
on.stateUpdated(element.on.stateUpdated, element, state)
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export default function (element, parent) {
|
|
36
|
+
let { state } = element
|
|
37
|
+
if (!state) return (parent && parent.state) || {}
|
|
38
|
+
if (isFunction(state)) state = exec(state, element)
|
|
39
|
+
|
|
40
|
+
state = deepClone(state, ['update', 'parse', '__element'])
|
|
41
|
+
state.__element = element
|
|
42
|
+
state.parse = parseState
|
|
43
|
+
state.update = updateState
|
|
44
|
+
|
|
45
|
+
// run `on.stateCreated`
|
|
46
|
+
if (element.on && isFunction(element.on.stateCreated)) {
|
|
47
|
+
on.stateCreated(element.on.stateCreated, element, element.state)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return state
|
|
51
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
import { registry } from './mixins'
|
|
4
|
+
import { report } from '../utils'
|
|
5
|
+
|
|
6
|
+
export default (params, options = {}) => {
|
|
7
|
+
const { overwrite } = options
|
|
8
|
+
for (const param in params) {
|
|
9
|
+
if (registry[param] && !overwrite) {
|
|
10
|
+
report('OverwriteToBuiltin', param)
|
|
11
|
+
} else registry[param] = params[param]
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
import nodes from './nodes'
|
|
4
|
+
import root from './root'
|
|
5
|
+
import tree from './tree'
|
|
6
|
+
import cache from './cache'
|
|
7
|
+
import create from './create'
|
|
8
|
+
import createNode from './createNode'
|
|
9
|
+
import * as assign from './assign'
|
|
10
|
+
import define from './define'
|
|
11
|
+
import update from './update'
|
|
12
|
+
import parse from './parse'
|
|
13
|
+
import set from './set'
|
|
14
|
+
|
|
15
|
+
import { lookup, remove, get, log, keys } from './methods'
|
|
16
|
+
|
|
17
|
+
export {
|
|
18
|
+
nodes,
|
|
19
|
+
root,
|
|
20
|
+
tree,
|
|
21
|
+
cache,
|
|
22
|
+
create,
|
|
23
|
+
createNode,
|
|
24
|
+
assign,
|
|
25
|
+
define,
|
|
26
|
+
remove,
|
|
27
|
+
update,
|
|
28
|
+
parse,
|
|
29
|
+
lookup,
|
|
30
|
+
set,
|
|
31
|
+
get,
|
|
32
|
+
log,
|
|
33
|
+
keys
|
|
34
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
import { exec, isFunction, isNumber, isString, overwrite } from '../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
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
import { isObject, isObjectLike } from '../utils'
|
|
4
|
+
import { registry } from './mixins'
|
|
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(registry[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
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
import { exec, report } from '../../utils'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Recursively add attributes to a DOM node
|
|
7
|
+
*/
|
|
8
|
+
export default (params, element, node) => {
|
|
9
|
+
if (params) {
|
|
10
|
+
if (!(typeof params === 'object')) report('HTMLInvalidAttr', params)
|
|
11
|
+
for (const attr in params) {
|
|
12
|
+
// if (!node) node = element.node
|
|
13
|
+
const val = exec(params[attr], element)
|
|
14
|
+
if (val && node.setAttribute) node.setAttribute(attr, val)
|
|
15
|
+
else if (node.removeAttribute) node.removeAttribute(attr)
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
import { exec, isObject, isString } from '../../utils'
|
|
4
|
+
|
|
5
|
+
export const assignClass = (element) => {
|
|
6
|
+
const { key } = element
|
|
7
|
+
if (element.class === true) element.class = key
|
|
8
|
+
else if (!element.class && typeof key === 'string' && key.charAt(0) === '_' && key.charAt(1) !== '_') {
|
|
9
|
+
element.class = key.slice(1)
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
// stringifies class object
|
|
14
|
+
export const classify = (obj, element) => {
|
|
15
|
+
let className = ''
|
|
16
|
+
for (const item in obj) {
|
|
17
|
+
const param = obj[item]
|
|
18
|
+
if (typeof param === 'boolean' && param) className += ` ${item}`
|
|
19
|
+
else if (typeof param === 'string') className += ` ${param}`
|
|
20
|
+
else if (typeof param === 'function') {
|
|
21
|
+
className += ` ${exec(param, element)}`
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return className
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export default (params, element, node) => {
|
|
28
|
+
if (!params) return
|
|
29
|
+
const { key } = element
|
|
30
|
+
if (params === true) params = element.class = { key }
|
|
31
|
+
if (isString(params)) params = element.class = { default: params }
|
|
32
|
+
if (isObject(params)) params = classify(params, element)
|
|
33
|
+
// TODO: fails on string
|
|
34
|
+
const className = params.replace(/\s+/g, ' ').trim()
|
|
35
|
+
node.classList = className
|
|
36
|
+
return className
|
|
37
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
import set from '../set'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Appends anything as content
|
|
7
|
+
* an original one as a child
|
|
8
|
+
*/
|
|
9
|
+
export default (param, element, node) => {
|
|
10
|
+
if (param && element) {
|
|
11
|
+
if (param.__hash === element.content.__hash && element.content.update) {
|
|
12
|
+
element.content.update(param)
|
|
13
|
+
} else {
|
|
14
|
+
set.call(element, param)
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
import { exec, isObject } from '../../utils'
|
|
4
|
+
import Report from '../../utils/report'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Apply data parameters on the DOM nodes
|
|
8
|
+
* this should only work if `showOnNode: true` is passed
|
|
9
|
+
*/
|
|
10
|
+
export default (params, element, node) => {
|
|
11
|
+
if (params && params.showOnNode) {
|
|
12
|
+
if (!isObject(params)) Report('HTMLInvalidData', params)
|
|
13
|
+
|
|
14
|
+
// Apply data params on node
|
|
15
|
+
for (const dataset in params) {
|
|
16
|
+
if (dataset !== 'showOnNode') {
|
|
17
|
+
node.dataset[dataset] = exec(params[dataset], element)
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
import { exec } from '../../utils'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Appends raw HTML as content
|
|
7
|
+
* an original one as a child
|
|
8
|
+
*/
|
|
9
|
+
export default (param, element, node) => {
|
|
10
|
+
const prop = exec(param, element)
|
|
11
|
+
if (prop) {
|
|
12
|
+
// const parser = new window.DOMParser()
|
|
13
|
+
// param = parser.parseFromString(param, 'text/html')
|
|
14
|
+
if (node.nodeName === 'SVG') node.textContent = prop
|
|
15
|
+
else node.innerHTML = prop
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
import attr from './attr'
|
|
4
|
+
import classList from './classList'
|
|
5
|
+
import content from './content'
|
|
6
|
+
import data from './data'
|
|
7
|
+
import html from './html'
|
|
8
|
+
import style from './style'
|
|
9
|
+
import text from './text'
|
|
10
|
+
import state from './state'
|
|
11
|
+
import registry from './registry'
|
|
12
|
+
|
|
13
|
+
export {
|
|
14
|
+
attr,
|
|
15
|
+
classList,
|
|
16
|
+
content,
|
|
17
|
+
data,
|
|
18
|
+
style,
|
|
19
|
+
text,
|
|
20
|
+
html,
|
|
21
|
+
state,
|
|
22
|
+
registry
|
|
23
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
attr,
|
|
5
|
+
style,
|
|
6
|
+
text,
|
|
7
|
+
html,
|
|
8
|
+
content,
|
|
9
|
+
data,
|
|
10
|
+
classList,
|
|
11
|
+
state
|
|
12
|
+
} from '.'
|
|
13
|
+
|
|
14
|
+
export default {
|
|
15
|
+
attr,
|
|
16
|
+
style,
|
|
17
|
+
text,
|
|
18
|
+
html,
|
|
19
|
+
content,
|
|
20
|
+
data,
|
|
21
|
+
class: classList,
|
|
22
|
+
state,
|
|
23
|
+
|
|
24
|
+
proto: {},
|
|
25
|
+
props: {},
|
|
26
|
+
path: {},
|
|
27
|
+
childProto: {},
|
|
28
|
+
if: {},
|
|
29
|
+
define: {},
|
|
30
|
+
transform: {},
|
|
31
|
+
__hash: {},
|
|
32
|
+
__cached: {},
|
|
33
|
+
__defined: {},
|
|
34
|
+
__exec: {},
|
|
35
|
+
__changes: {},
|
|
36
|
+
__trash: {},
|
|
37
|
+
__root: {},
|
|
38
|
+
__props: {},
|
|
39
|
+
__proto: {},
|
|
40
|
+
__ifFragment: {},
|
|
41
|
+
__ifFalsy: {},
|
|
42
|
+
key: {},
|
|
43
|
+
tag: {},
|
|
44
|
+
parent: {},
|
|
45
|
+
node: {},
|
|
46
|
+
set: {},
|
|
47
|
+
update: {},
|
|
48
|
+
remove: {},
|
|
49
|
+
lookup: {},
|
|
50
|
+
keys: {},
|
|
51
|
+
log: {},
|
|
52
|
+
parse: {},
|
|
53
|
+
parseDeep: {},
|
|
54
|
+
on: {}
|
|
55
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
import { exec, isObject } from '../../utils'
|
|
4
|
+
|
|
5
|
+
export default (params, element, node) => {
|
|
6
|
+
const state = exec(params, element)
|
|
7
|
+
|
|
8
|
+
if (isObject(state)) {
|
|
9
|
+
for (const param in state) {
|
|
10
|
+
if (param === 'update' || param === '__element' || param === 'parse') continue
|
|
11
|
+
element.state[param] = exec(state[param], element)
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
return element
|
|
16
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
import { isObject, map } from '../../utils'
|
|
4
|
+
import { report } from '../../utils/report'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Recursively add styles to a DOM node
|
|
8
|
+
*/
|
|
9
|
+
export default (params, element, node) => {
|
|
10
|
+
if (params) {
|
|
11
|
+
if (isObject(params)) map(node.style, params, element)
|
|
12
|
+
else report('HTMLInvalidStyles', params)
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
import { create } from '..'
|
|
4
|
+
import { exec } from '../../utils'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Creates a text node and appends into
|
|
8
|
+
* an original one as a child
|
|
9
|
+
*/
|
|
10
|
+
export default (param, element, node) => {
|
|
11
|
+
const prop = exec(param, element)
|
|
12
|
+
if (element.tag === 'string') node.nodeValue = prop
|
|
13
|
+
else if (param) {
|
|
14
|
+
if (element.__text) {
|
|
15
|
+
element.__text.text = prop
|
|
16
|
+
if (element.__text.node) element.__text.node.nodeValue = prop
|
|
17
|
+
} else create({ tag: 'string', text: prop }, element, '__text')
|
|
18
|
+
}
|
|
19
|
+
}
|