Skip to content

Commit

Permalink
Fix regression on x-ignore when removed (#4458)
Browse files Browse the repository at this point in the history
* Add failing test

* Fix x-ignore regression
  • Loading branch information
SimoTod authored Dec 2, 2024
1 parent 2c2bdb6 commit b6394e6
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 7 deletions.
10 changes: 5 additions & 5 deletions packages/alpinejs/src/lifecycle.js
Original file line number Diff line number Diff line change
Expand Up @@ -93,17 +93,17 @@ export function initTree(el, walker = walk, intercept = () => {}) {
// If the element has a marker, it's already been initialized...
if (el._x_marker) return

// Add a marker to the element so we can tell if it's been initialized...
// This is important so that we can prevent double-initialization of
// elements that are moved around on the page.
el._x_marker = markerDispenser++

intercept(el, skip)

initInterceptors.forEach(i => i(el, skip))

directives(el, el.attributes).forEach(handle => handle())

// Add a marker to the element so we can tell if it's been initialized...
// This is important so that we can prevent double-initialization of
// elements that are moved around on the page.
if (!el._x_ignore) el._x_marker = markerDispenser++

el._x_ignore && skip()
})
})
Expand Down
24 changes: 22 additions & 2 deletions tests/cypress/integration/directives/x-ignore.spec.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { haveText, html, notHaveClasses, notHaveText, test } from '../../utils'
import { haveClasses, haveText, html, notHaveClasses, notHaveText, test } from '../../utils'

test('x-ignore',
html`
Expand All @@ -8,7 +8,9 @@ test('x-ignore',
</div>
</div>
`,
({ get }) => get('span').should(notHaveText('bar'))
({ get }) => {
get('span').should(notHaveText('bar'))
}
)

test('x-ignore.self',
Expand All @@ -24,3 +26,21 @@ test('x-ignore.self',
get('h1').should(notHaveClasses(['bar']))
}
)

test('can lazyload a component',
html`
<div x-data="{ lazyLoad() {$el.querySelector('#lazy').removeAttribute('x-ignore'); Alpine.nextTick(() => Alpine.initTree($el.querySelector('#lazy')))} }">
<button @click="lazyLoad">Load</button>
<div x-data="{ foo: 'bar' }" id="lazy" x-ignore :class="foo">
<span x-text="foo"></span>
</div>
</div>
`,
({ get }) => {
get('span').should(notHaveText('bar'))
get('div#lazy').should(notHaveClasses(['bar']))
get('button').click()
get('span').should(haveText('bar'))
get('div#lazy').should(haveClasses(['bar']))
}
)

0 comments on commit b6394e6

Please sign in to comment.