const Router = { init: () => { document.querySelectorAll("a.navlink").forEach((a) => { a.addEventListener("click", (event) => { event.preventDefault(); const url = event.target.getAttribute("href"); Router.go(url); }); }); // Event Handler for URL changes window.addEventListener("popstate", (event) => { Router.go(event.state.route, false); }); // Check inital URL Router.go(location.pathname); }, go: (route, addToHistory = true) => { console.log("Going to route" + route); if (addToHistory) { history.pushState({ route }, "", route); } let pageElement = null; switch (route) { case "/": pageElement = document.createElement("menu-page"); break; case "/order": pageElement = document.createElement("order-page"); break; default: if (route.startsWith("/product-")) { pageElement = document.createElement("details-page"); const paramId = route.substring(route.lastIndexOf("-") + 1); // Dataset is great for storing costum data because it doesnt get // parsed by the browser pageElement.dataset.productId = paramId; } } if (pageElement) { // document.querySelector("main").children[0].remove(); // For little Performance Improvement const cache = document.querySelector("main"); cache.innerHTML = ""; cache.appendChild(pageElement); window.screenX = 0; window.screenY = 0; } }, }; export default Router;