const menu = document.querySelector("#menu") export default class Page { static pages = {} static currentPage = null static pathnameCallback() { const path = window.location.pathname.replace(/\/$/, "") const page = Page.pages[path] if (!page) throw new Error(`Path '${path}' does not exist`) if (Page.currentPage) Page.currentPage.setVisible(false) page.setVisible(true) Page.currentPage = page } static softRedirect(path) { window.history.pushState({}, "", path) Page.pathnameCallback() } constructor(pageContainer, endpoints, f_initialize) { for (const endpoint of endpoints) Page.pages[endpoint] = this this.pageContainer = pageContainer this.endpoints = endpoints this.initialize = f_initialize this.visible = false this.initialized = false } setVisible(visible) { this.pageContainer.classList.toggle("hidden!", !visible) this.visible = visible if (this.visible) { /* initialize page */ if (!this.initialized && this.initialize) this.initialized = this.initialize(this.pageContainer) /* set selected attribute on the link */ for (const a of menu.querySelectorAll("a")) { if (this.endpoints.includes(a.getAttribute("href"))) a.dataset.selected = "1" else delete a.dataset.selected } } } }