add turbo

This commit is contained in:
Konnor Rogers
2023-06-07 17:23:57 -04:00
parent b7726cd514
commit ece23c727e
3 changed files with 70 additions and 2 deletions

View File

@@ -45,7 +45,7 @@
// Close when clicking outside of the sidebar
document.addEventListener('mousedown', event => {
if (isSidebarOpen() & !event.target.closest('#sidebar, #menu-toggle')) {
if (isSidebarOpen() & !event.target?.closest('#sidebar, #menu-toggle')) {
event.stopImmediatePropagation();
toggleSidebar();
}

View File

@@ -0,0 +1,62 @@
import * as Turbo from 'https://cdn.jsdelivr.net/npm/@hotwired/turbo@7.3.0/+esm'
;(() => {
if (!window.scrollPositions) {
window.scrollPositions = {};
}
function preserveScroll () {
document.querySelectorAll("[data-preserve-scroll").forEach((element) => {
scrollPositions[element.id] = element.scrollTop;
})
}
function restoreScroll () {
document.querySelectorAll("[data-preserve-scroll").forEach((element) => {
element.scrollTop = scrollPositions[element.id];
})
}
window.addEventListener("turbo:before-cache", preserveScroll)
window.addEventListener("turbo:before-render", restoreScroll)
window.addEventListener("turbo:render", restoreScroll)
// Do this to prevent jankiness on the sidebar.
// make sure it has data-turbo-permanent
function normalizePathname(pathname) {
// Remove /index.html
if (pathname.endsWith('/index.html')) {
pathname = pathname.replace(/\/index\.html/, '');
}
// Remove trailing slashes
return pathname.replace(/\/$/, '');
}
/**
* Adds a class name to links that are currently active.
*/
function markActiveLinks(_event) {
const options = {
className: 'active-link', // the class to add to active links
pathname: document.location.pathname, // the current pathname to compare
within: 'body', // element containing the target links
};
const within = document.querySelector(options.within);
if (!within) {
return doc;
}
within.querySelectorAll('a').forEach(link => {
if (normalizePathname(options.pathname) === normalizePathname(link.pathname)) {
link.classList.add(options.className);
}
});
return doc;
};
window.addEventListener("turbo:load", markActiveLinks)
})()