implement m.domFor() and use it internally to move and remove nodes. Fix #2780
This commit is contained in:
parent
27fb1ea617
commit
3fd82e6359
8 changed files with 345 additions and 267 deletions
24
render/dom-for.js
Normal file
24
render/dom-for.js
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
"use strict"
|
||||
|
||||
var delayedRemoval = module.exports.delayedRemoval = new WeakMap
|
||||
|
||||
module.exports.domFor = function *domFor(vnode, {generation} = {generation: undefined}) {
|
||||
let {dom, domSize} = vnode
|
||||
if (dom != null) {
|
||||
if (domSize == null) {
|
||||
if (delayedRemoval.get(dom) === generation) {
|
||||
yield dom
|
||||
}
|
||||
} else {
|
||||
let i = 0, next
|
||||
while (i < domSize) {
|
||||
next = dom.nextSibling
|
||||
if (delayedRemoval.get(dom) === generation) {
|
||||
yield dom
|
||||
i++
|
||||
}
|
||||
dom = next
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue