2024-12-02 18:21:07 +00:00
|
|
|
import * as Turbo from 'https://cdn.jsdelivr.net/npm/@hotwired/turbo@8.0.10/+esm';
|
2023-06-07 21:23:57 +00:00
|
|
|
|
2023-06-08 16:23:31 +00:00
|
|
|
(() => {
|
2023-06-07 21:23:57 +00:00
|
|
|
if (!window.scrollPositions) {
|
|
|
|
window.scrollPositions = {};
|
|
|
|
}
|
|
|
|
|
2023-06-08 16:23:31 +00:00
|
|
|
function preserveScroll() {
|
2024-12-02 18:21:07 +00:00
|
|
|
document.querySelectorAll('[data-preserve-scroll]').forEach(element => {
|
2023-06-07 21:23:57 +00:00
|
|
|
scrollPositions[element.id] = element.scrollTop;
|
2023-06-08 16:23:31 +00:00
|
|
|
});
|
2023-06-07 21:23:57 +00:00
|
|
|
}
|
|
|
|
|
2023-06-08 16:23:31 +00:00
|
|
|
function restoreScroll(event) {
|
2024-12-02 18:21:07 +00:00
|
|
|
document.querySelectorAll('[data-preserve-scroll]').forEach(element => {
|
2023-06-07 21:23:57 +00:00
|
|
|
element.scrollTop = scrollPositions[element.id];
|
2023-06-08 16:23:31 +00:00
|
|
|
});
|
2023-06-08 04:15:07 +00:00
|
|
|
|
|
|
|
if (event.detail && event.detail.newBody) {
|
2023-06-08 16:23:31 +00:00
|
|
|
event.detail.newBody.querySelectorAll('[data-preserve-scroll').forEach(element => {
|
2023-06-08 04:15:07 +00:00
|
|
|
element.scrollTop = scrollPositions[element.id];
|
2023-06-08 16:23:31 +00:00
|
|
|
});
|
2023-06-08 04:15:07 +00:00
|
|
|
}
|
2023-06-07 21:23:57 +00:00
|
|
|
}
|
|
|
|
|
2023-06-08 16:23:31 +00:00
|
|
|
window.addEventListener('turbo:before-cache', preserveScroll);
|
|
|
|
window.addEventListener('turbo:before-render', restoreScroll);
|
|
|
|
window.addEventListener('turbo:render', restoreScroll);
|
|
|
|
})();
|