diff options
Diffstat (limited to 'assets/js/main/nav/alpine-turbo-bridge.js')
-rw-r--r-- | assets/js/main/nav/alpine-turbo-bridge.js | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/assets/js/main/nav/alpine-turbo-bridge.js b/assets/js/main/nav/alpine-turbo-bridge.js new file mode 100644 index 0000000..047e8f5 --- /dev/null +++ b/assets/js/main/nav/alpine-turbo-bridge.js @@ -0,0 +1,28 @@ +export function bridgeTurboAndAlpine(Alpine) { + document.addEventListener('turbo:render', () => { + if (document.documentElement.hasAttribute('data-turbo-preview')) { + return; + } + + // Restart Alpine. + Alpine.start(); + }); + + // Cleanup Alpine state on navigation. + document.addEventListener('turbo:before-cache', () => { + Alpine.stopObservingMutations(); + + document.body.querySelectorAll('[x-data]').forEach((el) => { + if (el.hasAttribute('data-turbo-permanent')) { + el._x_ignore = true; + } else { + Alpine.destroyTree(el); + + // Turbo leaks DOM elements via their data-turbo-permanent handling. + // That needs to be fixed upstream, but until then. + let clone = el.cloneNode(true); + el.replaceWith(clone); + } + }); + }); +} |