jails-js 4.2.2 → 5.0.0-beta.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/.github/FUNDING.yml +2 -0
- package/dist/jails.js +2 -1
- package/dist/jails.js.map +1 -0
- package/package.json +4 -3
- package/src/Component.ts +124 -0
- package/src/Element.ts +117 -0
- package/src/Scanner.ts +26 -0
- package/src/index.ts +60 -0
- package/src/{repeat.js → soda-config.js} +10 -17
- package/src/utils/index.js +22 -58
- package/tsconfig.json +6 -0
- package/webpack.config.js +35 -0
- package/.babelrc +0 -16
- package/.eslintignore +0 -2
- package/.eslintrc +0 -20
- package/.eslintrc.js +0 -28
- package/src/animation.js +0 -94
- package/src/component.js +0 -143
- package/src/element.js +0 -57
- package/src/index.js +0 -51
- package/src/view.js +0 -126
- package/webpack.config.babel.js +0 -16
package/src/element.js
DELETED
@@ -1,57 +0,0 @@
|
|
1
|
-
import Component from './component'
|
2
|
-
import { trigger } from './utils/events'
|
3
|
-
import { nextFrame } from './utils'
|
4
|
-
|
5
|
-
export const create = ({ element, view, modules }) => {
|
6
|
-
|
7
|
-
element.__instances__ = {}
|
8
|
-
element.__model__ = {}
|
9
|
-
|
10
|
-
const names = element.dataset.component.split(/\s/)
|
11
|
-
|
12
|
-
if(!element.dataset.reactorId){
|
13
|
-
view.setNewElement(element)
|
14
|
-
}
|
15
|
-
|
16
|
-
names.forEach( name => {
|
17
|
-
|
18
|
-
if( name in modules && (!element.__instances__[name]) ){
|
19
|
-
|
20
|
-
const component = modules[name]
|
21
|
-
|
22
|
-
nextFrame(_ => {
|
23
|
-
if( element.__instances__ ) {
|
24
|
-
const base = Component({ name, element, view, component })
|
25
|
-
|
26
|
-
element.__instances__[name] = { base, methods: {} }
|
27
|
-
|
28
|
-
element.__update__ = (state) => {
|
29
|
-
for ( let name in element.__instances__ )
|
30
|
-
element.__instances__[name].base.update(state)
|
31
|
-
}
|
32
|
-
|
33
|
-
component.module.default(base)
|
34
|
-
base.__initialize(base)
|
35
|
-
delete base.__initialize
|
36
|
-
}
|
37
|
-
})
|
38
|
-
}
|
39
|
-
})
|
40
|
-
|
41
|
-
}
|
42
|
-
|
43
|
-
export const ismounted = (element) => {
|
44
|
-
return Boolean( element.__instances__ )
|
45
|
-
}
|
46
|
-
|
47
|
-
export const destroy = ({ element }) => {
|
48
|
-
|
49
|
-
trigger(element, ':destroy')
|
50
|
-
|
51
|
-
for (let ev in element.__events)
|
52
|
-
element.removeEventListener(ev, element.__events[ev].listener)
|
53
|
-
|
54
|
-
delete element.__events
|
55
|
-
delete element.__instances__
|
56
|
-
delete element.__model__
|
57
|
-
}
|
package/src/index.js
DELETED
@@ -1,51 +0,0 @@
|
|
1
|
-
import View from './view'
|
2
|
-
import { ismounted, create, destroy } from './element'
|
3
|
-
|
4
|
-
const modules = {}
|
5
|
-
|
6
|
-
export default {
|
7
|
-
|
8
|
-
register( name, module, dependencies ){
|
9
|
-
modules[ name ] = { name, module, dependencies }
|
10
|
-
},
|
11
|
-
|
12
|
-
start(){
|
13
|
-
const view = getView()
|
14
|
-
view.mode = 'production'
|
15
|
-
view.observe()
|
16
|
-
},
|
17
|
-
|
18
|
-
devStart(){
|
19
|
-
console.time('jails')
|
20
|
-
const view = getView()
|
21
|
-
view.mode = 'development'
|
22
|
-
view.observe()
|
23
|
-
console.timeEnd('jails')
|
24
|
-
}
|
25
|
-
}
|
26
|
-
|
27
|
-
const getView = () => {
|
28
|
-
|
29
|
-
const view = View({
|
30
|
-
|
31
|
-
onAdd(elements) {
|
32
|
-
elements
|
33
|
-
.filter(el => !ismounted(el))
|
34
|
-
.forEach(element => create({ element, view, modules }))
|
35
|
-
},
|
36
|
-
|
37
|
-
onRemove(removedNodes) {
|
38
|
-
removedNodes.forEach(removedNode => {
|
39
|
-
if (removedNode.nodeType === 1) {
|
40
|
-
const children = Array.from(removedNode.querySelectorAll('[data-component]'))
|
41
|
-
children
|
42
|
-
.concat(removedNode.dataset.component ? removedNode : [])
|
43
|
-
.filter(element => !document.body.contains(element))
|
44
|
-
.forEach(element => destroy({ element }))
|
45
|
-
}
|
46
|
-
})
|
47
|
-
}
|
48
|
-
})
|
49
|
-
|
50
|
-
return view
|
51
|
-
}
|
package/src/view.js
DELETED
@@ -1,126 +0,0 @@
|
|
1
|
-
import morphdom from 'morphdom'
|
2
|
-
import sodajs from 'sodajs'
|
3
|
-
|
4
|
-
import * as animation from './animation'
|
5
|
-
import { dup, createTemplates, setIds } from './utils'
|
6
|
-
import repeatDirective from './repeat'
|
7
|
-
|
8
|
-
const STATIC = 'static'
|
9
|
-
const COMPONENT = '[data-component]'
|
10
|
-
|
11
|
-
export default function View( callback ) {
|
12
|
-
|
13
|
-
const root = document.body
|
14
|
-
const { templates, html } = createTemplates(root.innerHTML, 'html')
|
15
|
-
const models = {}
|
16
|
-
const SST = {}
|
17
|
-
|
18
|
-
sodajs.prefix('v-')
|
19
|
-
repeatDirective({ sodajs, models })
|
20
|
-
|
21
|
-
return {
|
22
|
-
|
23
|
-
mode : 'production',
|
24
|
-
templates,
|
25
|
-
models,
|
26
|
-
SST,
|
27
|
-
|
28
|
-
update( element, data ){
|
29
|
-
if (element) {
|
30
|
-
const id = element.dataset.reactorId
|
31
|
-
const template = templates[id]
|
32
|
-
const newstate = Object.assign({}, element.__model__, dup(data))
|
33
|
-
const newhtml = sodajs(template, newstate)
|
34
|
-
morphdom( element, newhtml, lifecycle(element, data, SST))
|
35
|
-
if( element.__model__ ){
|
36
|
-
Object.assign( element.__model__, newstate )
|
37
|
-
}
|
38
|
-
}
|
39
|
-
},
|
40
|
-
|
41
|
-
observe() {
|
42
|
-
const observer = observe( callback )
|
43
|
-
root.innerHTML = sodajs(html, {})
|
44
|
-
return observer
|
45
|
-
},
|
46
|
-
|
47
|
-
setNewElement(element){
|
48
|
-
setIds(templates, element)
|
49
|
-
}
|
50
|
-
}
|
51
|
-
}
|
52
|
-
|
53
|
-
const observe = ( callback ) => {
|
54
|
-
const observer = new MutationObserver(mutations => mutations.forEach(onMutation(callback)))
|
55
|
-
observer.observe(document.body, { childList: true, subtree: true })
|
56
|
-
return observer;
|
57
|
-
}
|
58
|
-
|
59
|
-
const onMutation = (callback) => (mutation) => {
|
60
|
-
if (mutation.type === 'childList') {
|
61
|
-
if (mutation.addedNodes.length) {
|
62
|
-
callback.onAdd(scan())
|
63
|
-
} else if (mutation.removedNodes.length) {
|
64
|
-
callback.onRemove(mutation.removedNodes)
|
65
|
-
}
|
66
|
-
}
|
67
|
-
}
|
68
|
-
|
69
|
-
const scan = () => {
|
70
|
-
return Array
|
71
|
-
.from( document.querySelectorAll(COMPONENT) )
|
72
|
-
.reverse()
|
73
|
-
}
|
74
|
-
|
75
|
-
const lifecycle = (elm, data, SST) => ({
|
76
|
-
|
77
|
-
getNodeKey(node) {
|
78
|
-
if (node.nodeType === 1) {
|
79
|
-
return node.dataset.key || node.dataset.reactorId
|
80
|
-
}
|
81
|
-
return false
|
82
|
-
},
|
83
|
-
|
84
|
-
onBeforeElUpdated(node) {
|
85
|
-
return update( elm, data, SST, node )
|
86
|
-
},
|
87
|
-
|
88
|
-
onBeforeElChildrenUpdated(node, tonode) {
|
89
|
-
return update( elm, data, SST, node )
|
90
|
-
},
|
91
|
-
|
92
|
-
onNodeAdded(node) {
|
93
|
-
animation.animateNodes(node, animation.onAdd)
|
94
|
-
},
|
95
|
-
|
96
|
-
onBeforeNodeAdded(node) {
|
97
|
-
animation.animateNodes(node, animation.onBeforeAdd)
|
98
|
-
},
|
99
|
-
|
100
|
-
onBeforeNodeDiscarded(node) {
|
101
|
-
return !animation.animateNodes(node, animation.onRemove)
|
102
|
-
}
|
103
|
-
})
|
104
|
-
|
105
|
-
const update = (elm, data, SST, node) => {
|
106
|
-
|
107
|
-
if (node.nodeType === 1) {
|
108
|
-
// If element has static property, don't update
|
109
|
-
if ( STATIC in node.dataset )
|
110
|
-
return false
|
111
|
-
|
112
|
-
// If element is child and a component, don't update
|
113
|
-
if (node !== elm && node.dataset.component && node.__update__) {
|
114
|
-
|
115
|
-
const newdata = Object.assign(SST, data)
|
116
|
-
node.__update__(newdata)
|
117
|
-
|
118
|
-
Array.from(node.querySelectorAll(COMPONENT)).forEach(el => {
|
119
|
-
if (el.dataset.component && el.__update__)
|
120
|
-
el.__update__(newdata)
|
121
|
-
})
|
122
|
-
|
123
|
-
return false
|
124
|
-
}
|
125
|
-
}
|
126
|
-
}
|
package/webpack.config.babel.js
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
const path = require('path')
|
2
|
-
|
3
|
-
module.exports = {
|
4
|
-
|
5
|
-
entry: {
|
6
|
-
'jails': './src/index.js'
|
7
|
-
},
|
8
|
-
|
9
|
-
output: {
|
10
|
-
path : path.resolve(__dirname, './dist'),
|
11
|
-
filename : '[name].js',
|
12
|
-
libraryTarget : 'umd',
|
13
|
-
library : 'jails',
|
14
|
-
umdNamedDefine: true
|
15
|
-
}
|
16
|
-
}
|