Files
webawesome/docs/assets/scripts/turbo.js
Konnor Rogers 236ecd0240 Fix remember scroll (#148)
* add data-turbo-track

* add data-turbo-track

* add debugging

* add debugging

* remove nopreview

* move top level

* move top level

* move top level

* remove data-turbo-track

* add comment to base.njk

* prettier
2024-06-25 15:57:43 -04:00

49 lines
1.3 KiB
JavaScript

if (!window.___turboScrollPositions___) {
window.___turboScrollPositions___ = {};
}
const positions = window.___turboScrollPositions___;
function saveScrollPosition() {
document.querySelectorAll('[data-remember-scroll]').forEach(element => {
if (element.id) {
positions[element.id] = {
top: element.scrollTop,
left: element.scrollLeft
};
} else {
console.warn(`Can't save scroll position for elements without an id.`, el);
}
});
}
function restoreScrollPosition(event) {
if (event.detail && event.detail.newBody) {
event.detail.newBody.querySelectorAll('[data-remember-scroll]').forEach(element => {
if (!positions[element.id]) {
return;
}
const { top, left } = positions[element.id];
element.scrollTop = top;
element.scrollLeft = left;
});
}
document.querySelectorAll('[data-remember-scroll]').forEach(element => {
if (!positions[element.id]) {
return;
}
const { top, left } = positions[element.id];
element.scrollTop = top;
element.scrollLeft = left;
});
}
window.addEventListener('turbo:before-cache', saveScrollPosition);
window.addEventListener('turbo:before-render', restoreScrollPosition);
window.addEventListener('turbo:render', restoreScrollPosition);