From 3196c6ac667a040d0c5541644f2a389325b5c356 Mon Sep 17 00:00:00 2001 From: Caleb Porzio Date: Sun, 21 Jan 2024 15:32:38 -0500 Subject: [PATCH] tweak implementation --- packages/alpinejs/src/lifecycle.js | 20 +++++++------------- packages/alpinejs/src/mutation.js | 11 ++++++----- 2 files changed, 13 insertions(+), 18 deletions(-) diff --git a/packages/alpinejs/src/lifecycle.js b/packages/alpinejs/src/lifecycle.js index 7511f8275..81c1226d7 100644 --- a/packages/alpinejs/src/lifecycle.js +++ b/packages/alpinejs/src/lifecycle.js @@ -82,18 +82,13 @@ export function interceptInit(callback) { initInterceptors.push(callback) } export function initTree(el, walker = walk, intercept = () => {}) { deferHandlingDirectives(() => { walker(el, (el, skip) => { - if (!el._x_isInit) { - intercept(el, skip) - - initInterceptors.forEach(i => i(el, skip)) - directives(el, el.attributes).forEach(handle => handle()) - } - - if (el._x_ignore) { - skip() - } else { - el._x_isInit = true - } + intercept(el, skip) + + initInterceptors.forEach(i => i(el, skip)) + + directives(el, el.attributes).forEach(handle => handle()) + + el._x_ignore && skip() }) }) } @@ -102,6 +97,5 @@ export function destroyTree(root) { walk(root, el => { cleanupAttributes(el) cleanupElement(el) - delete el._x_isInit }) } diff --git a/packages/alpinejs/src/mutation.js b/packages/alpinejs/src/mutation.js index 29e396784..673977542 100644 --- a/packages/alpinejs/src/mutation.js +++ b/packages/alpinejs/src/mutation.js @@ -119,8 +119,8 @@ function onMutate(mutations) { return } - let addedNodes = [] - let removedNodes = [] + let addedNodes = new Set + let removedNodes = new Set let addedAttributes = new Map let removedAttributes = new Map @@ -128,8 +128,8 @@ function onMutate(mutations) { if (mutations[i].target._x_ignoreMutationObserver) continue if (mutations[i].type === 'childList') { - mutations[i].addedNodes.forEach(node => node.nodeType === 1 && addedNodes.push(node)) - mutations[i].removedNodes.forEach(node => node.nodeType === 1 && removedNodes.push(node)) + mutations[i].addedNodes.forEach(node => node.nodeType === 1 && addedNodes.add(node)) + mutations[i].removedNodes.forEach(node => node.nodeType === 1 && removedNodes.add(node)) } if (mutations[i].type === 'attributes') { @@ -171,10 +171,11 @@ function onMutate(mutations) { onAttributeAddeds.forEach(i => i(el, attrs)) }) + console.log(removedNodes, addedNodes) for (let node of removedNodes) { // If an element gets moved on a page, it's registered // as both an "add" and "remove", so we want to skip those. - if (addedNodes.includes(node)) continue + if (addedNodes.has(node)) continue onElRemoveds.forEach(i => i(node))