const DEBOUNCE_TIMEOUT_MS = 100; const CLASSNAME_SEARCHBOX_ACTIVE = "searchboxActive"; // Navigate to the start page if the logo in the header is clicked document.querySelector("header .logo").addEventListener("click", () => new VV().navigate("/")); // Navigate to the start page if the logo in the header is clicked document.querySelector("header .logo").addEventListener("click", () => new VV().navigate("/")); // Scroll page to top on navigation VV.shell.addEventListener(VV.EVENT.FINISH, () => window.scrollTo({ top: 0 })); // Open search box document.querySelector(".searchbox-open").addEventListener("click", () => { document.querySelector("header").classList.add(CLASSNAME_SEARCHBOX_ACTIVE); // Select searchbox inner input element document.querySelector("searchbox input").focus(); }); // Close searchbox document.querySelector(".searchbox-close").addEventListener("click", () => { // Disable search button interaction while animation is running // This is required to prevent conflicts with the :hover "peak" transformation const searchButtonElement = document.querySelector("header button.search"); const transformDuration = parseInt(window.getComputedStyle(searchButtonElement).getPropertyValue("--transform-duration")); searchButtonElement.style.setProperty("pointer-events", "none"); document.querySelector("header").classList.remove(CLASSNAME_SEARCHBOX_ACTIVE); // Wait for the transform animation to finish setTimeout(() => searchButtonElement.style.removeProperty("pointer-events"), transformDuration); }); // Close searchbox on top shell navigations VV.shell.addEventListener(VV.EVENT.START, () => document.querySelector("header").classList.remove(CLASSNAME_SEARCHBOX_ACTIVE)); // Handle search logic document.querySelector("header input[type='search']").addEventListener("input", (event) => { // Debounce user input clearTimeout(event.target._throttle); event.target._throttle = setTimeout(() => { // Navigate search-results element on user input new VV(document.querySelector("search-results")).navigate(`/search?q=${event.target.value}`); }, DEBOUNCE_TIMEOUT_MS); });