diff --git a/src/htmx.js b/src/htmx.js index 3df11c84..367ba4df 100644 --- a/src/htmx.js +++ b/src/htmx.js @@ -1161,7 +1161,6 @@ var htmx = (() => { } } - // TODO - did we punt on other folks inserting scripts? __processScripts(container) { let scripts = container.matches?.('script') ? [container] : container.querySelectorAll('script'); for (let oldScript of scripts) { @@ -2006,7 +2005,10 @@ var htmx = (() => { try { if (document.startViewTransition) { - await document.startViewTransition(task).finished; + let finished = document.startViewTransition(task).finished; + this.__trigger(document, "htmx:before:viewTransition", {task, finished}) + await finished; + this.__trigger(document, "htmx:after:viewTransition", {task}) } else { task(); } diff --git a/test/tests/unit/swap.js b/test/tests/unit/swap.js index 4cae0d7d..10dcd9b8 100644 --- a/test/tests/unit/swap.js +++ b/test/tests/unit/swap.js @@ -259,4 +259,24 @@ describe('swap() unit tests', function() { triggered.should.be.true; }) + it('triggers view transition events with transition:true', async function () { + if (!document.startViewTransition) { + this.skip(); + return; + } + + let beforeTriggered = false; + let afterTriggered = false; + htmx.on('htmx:before:viewTransition', () => { + beforeTriggered = true; + }); + htmx.on('htmx:after:viewTransition', () => { + afterTriggered = true; + }); + + await htmx.swap({"target":"#test-playground", "text":"
Content
", "transition":true}) + beforeTriggered.should.be.true; + afterTriggered.should.be.true; + }) + })