34 lines
1.1 KiB
TypeScript
34 lines
1.1 KiB
TypeScript
/* eslint-disable @typescript-eslint/consistent-type-assertions */
|
|
export * from "./controllers.js";
|
|
|
|
(function enableScrollPreservation() {
|
|
/* https://github.com/hotwired/turbo/issues/37#issuecomment-1422200868 */
|
|
let scrollTop = 0;
|
|
|
|
let shouldPreserveScroll = false;
|
|
|
|
document.addEventListener("turbo:click", function (event) {
|
|
if ((event.target as HTMLDivElement).hasAttribute("data-turbo-preserve-scroll")) {
|
|
shouldPreserveScroll = true;
|
|
} else {
|
|
shouldPreserveScroll = false;
|
|
}
|
|
});
|
|
|
|
document.addEventListener("turbo:before-visit", function () {
|
|
if (shouldPreserveScroll) {
|
|
scrollTop = document.documentElement.scrollTop;
|
|
}
|
|
});
|
|
|
|
addEventListener("turbo:visit", () => {
|
|
/* eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any */
|
|
if (shouldPreserveScroll) {
|
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any
|
|
(window as any).Turbo.navigator.currentVisit.scrolled = true;
|
|
document.documentElement.scrollTop = scrollTop;
|
|
}
|
|
shouldPreserveScroll = false;
|
|
});
|
|
})();
|