/
view.js
38 lines (32 loc) · 1.09 KB
/
view.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
const flyd = require('flyd')
const h = require('snabbdom/h')
// Common snabbdom patch function (convention over configuration)
const patch = require('snabbdom').init([
require('snabbdom/modules/class'),
require('snabbdom/modules/attributes'),
require('snabbdom/modules/props'),
require('snabbdom/modules/eventlisteners'),
require('snabbdom/modules/style'),
])
export default function view(selector, patchfn = patch) {
let lastContainer, renderer$
function wraperPatch(o, n) {
let newContainer = patchfn(o, n)
lastContainer = newContainer
return newContainer
}
return {
attach: (vnode$) => {
window.addEventListener('DOMContentLoaded', function() {
let container = document.querySelector(selector)
renderer$ = flyd.scan(wraperPatch, container, vnode$.map(vnode => h('div' + selector, { key: selector }, [vnode])))
})
},
reattach: (vnode$) => {
renderer$ = flyd.scan(wraperPatch, lastContainer, vnode$.map(vnode => h('div' + selector, { key: selector }, [vnode])))
},
dispose: () => {
renderer$.end(true)
},
}
}