PageSourceSearch

https://qlf.de/cdn/shop/t/44/assets/qlf-category-menu.js?v=52758217452851949991787202966

js qlf.de collected 2026-10-09 23:56:51 UTC 3,473 bytes, 2 lines download raw bytes

1if(!customElements.get("qlf-category-menu-controller")){class QlfCategoryMenuController extends HTMLElement{}customElements.define("qlf-category-menu-controller",QlfCategoryMenuController)}(()=>{const menu=document.getElementById("qlf-category-menu");if(!menu||menu.dataset.initialized)return;menu.dataset.initialized="true";const dialog=menu.querySelector('[role="dialog"]'),triggers=document.querySelectorAll(".qlf-category-menu-trigger"),desktopTriggers=document.querySelectorAll(".qlf-category-menu-trigger.menu-link"),focusableSelector='a[href], button:not([disabled]), [tabindex]:not([tabindex="-1"])',supportsHover=window.matchMedia("(hover: hover) and (pointer: fine)"),CLOSE_DURATION=280,HOVER_OPEN_DELAY=60,HOVER_CLOSE_DELAY=200;let returnFocus=null,openTimer=null,closeTimer=null,hideTimer=null;const clearTimers=()=>{window.clearTimeout(openTimer),window.clearTimeout(closeTimer),window.clearTimeout(hideTimer)},setExpanded=state=>triggers.forEach(item=>item.setAttribute("aria-expanded",state)),header=menu.closest("theme-header")||document.querySelector("theme-header, #header, header"),anchorToHeader=()=>{if(!header)return;const bottom=Math.max(header.getBoundingClientRect().bottom,0);menu.style.setProperty("--qlf-header-bottom",`${Math.round(bottom)}px`)},open=(trigger,asModal=!0)=>{clearTimers(),trigger&&(returnFocus=trigger),menu.classList.remove("is-closing"),menu.hidden&&(anchorToHeader(),menu.hidden=!1,menu.offsetWidth),menu.classList.add("is-open"),setExpanded("true"),asModal&&(document.body.classList.add("overflow-hidden"),dialog.focus())},close=(restoreFocus=!0)=>{clearTimers(),!menu.hidden&&(menu.classList.contains("is-open")&&menu.classList.add("is-closing"),menu.classList.remove("is-open"),document.body.classList.remove("overflow-hidden"),setExpanded("false"),hideTimer=window.setTimeout(()=>{menu.hidden=!0,menu.classList.remove("is-closing")},CLOSE_DURATION),restoreFocus&&returnFocus?.focus())};triggers.forEach(trigger=>{trigger.addEventListener("click",()=>menu.classList.contains("is-open")?close():open(trigger))});const scheduleOpen=trigger=>{supportsHover.matches&&(clearTimers(),openTimer=window.setTimeout(()=>open(trigger,!1),HOVER_OPEN_DELAY))},scheduleClose=()=>{supportsHover.matches&&(window.clearTimeout(openTimer),window.clearTimeout(closeTimer),closeTimer=window.setTimeout(()=>close(!1),HOVER_CLOSE_DELAY))};desktopTriggers.forEach(trigger=>{trigger.addEventListener("mouseenter",()=>scheduleOpen(trigger)),trigger.addEventListener("mouseleave",scheduleClose)}),dialog.addEventListener("mouseenter",()=>{supportsHover.matches&&clearTimers()}),dialog.addEventListener("mouseleave",scheduleClose),menu.querySelectorAll("[data-category-menu-close]").forEach(button=>button.addEventListener("click",close));const reanchor=()=>{menu.hidden||anchorToHeader()};window.addEventListener("scroll",reanchor,{passive:!0}),window.addEventListener("resize",reanchor,{passive:!0}),document.addEventListener("keydown",event=>{if(menu.hidden||(event.key==="Escape"&&close(),event.key!=="Tab"))return;const focusable=[...menu.querySelectorAll(focusableSelector)];if(!focusable.length)return;const first=focusable[0],last=focusable[focusable.length-1];event.shiftKey&&document.activeElement===first&&(event.preventDefault(),last.focus()),!event.shiftKey&&document.activeElement===last&&(event.preventDefault(),first.focus())})})();
2//# sourceMappingURL=/cdn/shop/t/44/assets/qlf-category-menu.js.map?v=52758217452851949991787202966

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.