Files
client/static/js/details-persist.js
2026-03-08 23:00:03 +01:00

39 lines
1.1 KiB
JavaScript

/**
* Persists the open/closed state of <details> elements inside [data-release]
* cards across page reloads using sessionStorage.
*
* Key format: `details:<page-path>:<release-slug>`
*/
(function () {
const prefix = "details:" + location.pathname + ":";
// Restore open state on load
document.querySelectorAll("[data-release][data-release-slug]").forEach((card) => {
const slug = card.dataset.releaseSlug;
const details = card.querySelector("details");
if (!details || !slug) return;
if (sessionStorage.getItem(prefix + slug) === "1") {
details.open = true;
}
});
// Listen for toggle events (works for both open and close)
document.addEventListener("toggle", (e) => {
const details = e.target;
if (details.tagName !== "DETAILS") return;
const card = details.closest("[data-release][data-release-slug]");
if (!card) return;
const slug = card.dataset.releaseSlug;
if (!slug) return;
if (details.open) {
sessionStorage.setItem(prefix + slug, "1");
} else {
sessionStorage.removeItem(prefix + slug);
}
}, true);
})();