57 lines
1.7 KiB
TypeScript

// In case a linked article lead to a new tree
// const activeLink = document.querySelector("#menu a.active");
// if (activeLink) {
// let parent = activeLink.parentElement;
// const mainMenu = document.getElementById("#menu");
// while (parent && parent !== mainMenu) {
// if (parent.matches(".submenu-item") && !parent.classList.contains("expanded")) {
// parent.classList.add("expanded");
// }
// parent = parent.parentElement;
// }
// }
export default function setupExpanders() {
const expanders = document.querySelectorAll("#menu .submenu-item .collapse-button");
for (const expander of expanders) {
const li = expander.closest("li");
if (!li) {
continue;
}
expander.addEventListener("click", e => {
e.preventDefault();
e.stopPropagation();
const ul = li.querySelector("ul");
if (!ul) {
return;
}
const isExpanded = li.classList.contains("expanded");
if (isExpanded) {
// Collapsing
ul.style.height = `${ul.scrollHeight}px`;
// Force reflow
ul.offsetHeight;
li.classList.remove("expanded");
ul.style.height = "0";
} else {
// Expanding
ul.style.height = "0";
// Force reflow
ul.offsetHeight;
li.classList.add("expanded");
ul.style.height = `${ul.scrollHeight}px`;
}
setTimeout(() => {
ul.style.height = "";
}, 200);
});
}
}