implement m.domFor() and use it internally to move and remove nodes. Fix #2780

This commit is contained in:
Pierre-Yves 2022-06-09 13:50:27 +02:00 committed by Pierre-Yves Gérardy
parent 27fb1ea617
commit 3fd82e6359
8 changed files with 345 additions and 267 deletions

24
render/dom-for.js Normal file
View 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
}
}
}
}