46 lines
1.6 KiB
JavaScript
46 lines
1.6 KiB
JavaScript
function pre(vnode, newVnode) {
|
|
const attachData = vnode.data.attachData;
|
|
// Copy created placeholder and real element from old vnode
|
|
newVnode.data.attachData.placeholder = attachData.placeholder;
|
|
newVnode.data.attachData.real = attachData.real;
|
|
// Mount real element in vnode so the patch process operates on it
|
|
vnode.elm = vnode.data.attachData.real;
|
|
}
|
|
function post(_, vnode) {
|
|
// Mount dummy placeholder in vnode so potential reorders use it
|
|
vnode.elm = vnode.data.attachData.placeholder;
|
|
}
|
|
function destroy(vnode) {
|
|
// Remove placeholder
|
|
if (vnode.elm !== undefined) {
|
|
vnode.elm.parentNode.removeChild(vnode.elm);
|
|
}
|
|
// Remove real element from where it was inserted
|
|
vnode.elm = vnode.data.attachData.real;
|
|
}
|
|
function create(_, vnode) {
|
|
const real = vnode.elm;
|
|
const attachData = vnode.data.attachData;
|
|
const placeholder = document.createElement("span");
|
|
// Replace actual element with dummy placeholder
|
|
// Snabbdom will then insert placeholder instead
|
|
vnode.elm = placeholder;
|
|
attachData.target.appendChild(real);
|
|
attachData.real = real;
|
|
attachData.placeholder = placeholder;
|
|
}
|
|
export function attachTo(target, vnode) {
|
|
if (vnode.data === undefined)
|
|
vnode.data = {};
|
|
if (vnode.data.hook === undefined)
|
|
vnode.data.hook = {};
|
|
const data = vnode.data;
|
|
const hook = vnode.data.hook;
|
|
data.attachData = { target: target, placeholder: undefined, real: undefined };
|
|
hook.create = create;
|
|
hook.prepatch = pre;
|
|
hook.postpatch = post;
|
|
hook.destroy = destroy;
|
|
return vnode;
|
|
}
|
|
//# sourceMappingURL=attachto.js.map
|