PageSourceSearch

https://www.singer.com/cdn/shop/t/320/assets/header.js?v=160751590294976276181790782651

js singer.com collected 2026-10-01 10:24:32 UTC 8,316 bytes, 2 lines download raw bytes

1const toggleLocSelector=_=>{const container=document.querySelector(".loc_selector");container.classList.contains("hide")?container.classList.remove("hide"):container.classList.add("hide")},getHeaderHeight=header=>{let target=header;header.querySelectorAll(".header-v2-desktop, .header-v2-mobile").forEach(part=>{getComputedStyle(part).display!=="none"&&(target=part)});const height=target.getBoundingClientRect().height;document.body.style.setProperty("--header-height",`${height}px`),header.style.setProperty("--header-height",`${height}px`);const offset=header.classList.contains("header-hidden")?0:height;document.body.style.setProperty("--header-offset",`${offset}px`)},applyStickyFallback=(el,marker,shouldStick,offsetPx)=>{if(!el||!el.parentElement)return;const parent=el.parentElement,placeholder=parent.querySelector(`:scope > [data-sticky-placeholder="${marker}"]`),fallbackActive=el.classList.contains("boost-sticky-fallback-fixed"),release=()=>{el.classList.remove("boost-sticky-fallback-fixed"),placeholder&&placeholder.remove()};if(!shouldStick){release();return}const visualOffsetTop=window.visualViewport?window.visualViewport.offsetTop:0,visualOffsetLeft=window.visualViewport?window.visualViewport.offsetLeft:0,targetTop=offsetPx+visualOffsetTop,elStyle=getComputedStyle(el),marginTopPx=parseFloat(elStyle.marginTop)||0,marginLeftPx=parseFloat(elStyle.marginLeft)||0,updatePosition=()=>{const containerRect=parent.getBoundingClientRect();el.style.setProperty("--sticky-fallback-top",`${targetTop-marginTopPx}px`),el.style.setProperty("--sticky-fallback-left",`${containerRect.left+visualOffsetLeft-marginLeftPx}px`),el.style.setProperty("--sticky-fallback-width",`${containerRect.width}px`)};if(fallbackActive){placeholder&&(placeholder.style.height=`${el.offsetHeight}px`),updatePosition();return}const rect=el.getBoundingClientRect();if(Math.abs(rect.top-targetTop)<2)return;const spacer=placeholder||document.createElement("div");placeholder||(spacer.setAttribute("data-sticky-placeholder",marker),parent.insertBefore(spacer,el)),spacer.style.height=`${el.offsetHeight}px`,updatePosition(),el.classList.add("boost-sticky-fallback-fixed")},toggleDrawerMenu=_=>{const menu=document.querySelector(".mobile-menu-v2"),mobileHeader=menu.closest(".header-v2-mobile");mobileHeader&&mobileHeader.classList.add("menu-toggled"),menu.classList.contains("open")?(menu.classList.remove("open"),document.body.style.overflowY="",mobileHeader&&mobileHeader.classList.remove("menu-open")):(menu.classList.add("open"),document.body.style.overflowY="clip",mobileHeader&&mobileHeader.classList.add("menu-open"))};document.addEventListener("click",e=>{e.stopPropagation();const container=document.querySelector(".loc_selector"),trigger=document.querySelector(".loc_trigger");if(!container?.classList?.contains("hide")){const clickedInsideSwitcher=container.contains(e.target),clickedInsideTrigger=trigger.contains(e.target);!clickedInsideSwitcher&&!clickedInsideTrigger&&toggleLocSelector()}}),document.addEventListener("DOMContentLoaded",e=>{document.querySelectorAll(".header-v2-mobile .search-v2 input").forEach(trigger=>{trigger.addEventListener("click",function handler(){trigger.removeEventListener("click",handler);const observer=new MutationObserver(()=>{trigger.classList.contains("boost-sd__search-widget-init-input")&&(observer.disconnect(),setTimeout(()=>trigger.click(),10))});observer.observe(trigger,{attributes:!0})})}),document.querySelector(".loc_trigger")?.addEventListener("click",e2=>{document.querySelector(".loc_selector").contains(e2.target)||toggleLocSelector()}),getHeaderHeight(document.querySelector(".header-v2"));let ticking=!1;const THRESHOLD=1,headerV3=document.querySelector(".header-v3"),mobileNav=document.querySelector(".header-v2-mobile > nav");mobileNav?.style.setProperty("--nav-height",`${mobileNav.scrollHeight}px`);let lastScrollTop=0;const SCROLL_DELTA_THRESHOLD=5;let gestureActive=!1,scrollEndTimer,touchStartY=null;const TOUCH_MOVE_THRESHOLD=10;window.addEventListener("touchstart",e2=>{touchStartY=e2.touches[0]?.clientY??null},{passive:!0}),window.addEventListener("touchmove",e2=>{if(touchStartY===null)return;const currentY=e2.touches[0]?.clientY;currentY!==void 0&&Math.abs(currentY-touchStartY)>
1TOUCH_MOVE_THRESHOLD&&(gestureActive=!0)},{passive:!0}),window.addEventListener("touchend",()=>{touchStartY=null},{passive:!0}),window.addEventListener("touchcancel",()=>{touchStartY=null},{passive:!0}),window.addEventListener("wheel",()=>{gestureActive=!0},{passive:!0}),window.addEventListener("scroll",()=>{clearTimeout(scrollEndTimer),scrollEndTimer=setTimeout(()=>{gestureActive=!1},150),ticking||(requestAnimationFrame(()=>{const filterTree=document.querySelector(".boost_filters_con"),filterToolbar=document.querySelector(".boost_toolbar"),scrollTop=window.pageYOffset||document.documentElement.scrollTop,shouldStick=scrollTop>THRESHOLD;if(headerV3){if(window.matchMedia("(max-width: 1024px)").matches){if(!gestureActive)lastScrollTop=scrollTop;else if(scrollTop<=THRESHOLD)headerV3.classList.remove("header-hidden"),headerV3.classList.remove("nav-collapsed"),lastScrollTop=scrollTop;else if(Math.abs(scrollTop-lastScrollTop)>SCROLL_DELTA_THRESHOLD){const scrollingDown=scrollTop>lastScrollTop;headerV3.classList.toggle("header-hidden",scrollingDown),headerV3.classList.toggle("nav-collapsed",!scrollingDown),lastScrollTop=scrollTop}}else if(Math.abs(scrollTop-lastScrollTop)>SCROLL_DELTA_THRESHOLD){const scrollingDown=scrollTop>lastScrollTop;headerV3.classList.toggle("header-hidden",scrollingDown),lastScrollTop=scrollTop}}if(document.querySelectorAll(".header-v2-desktop, .header-v2-mobile").forEach(header=>{header.classList.toggle("on-scroll",shouldStick),setTimeout(_=>{filterTree&&filterToolbar&&headerV3&&(filterTree.classList.toggle("header-offset-active",shouldStick),filterToolbar.classList.toggle("header-offset-active",shouldStick))},0)}),document.documentElement.classList.toggle("active_sticky",shouldStick),filterTree&&filterToolbar&&headerV3){const isMobileViewport=window.matchMedia("(max-width: 1024px)").matches;setTimeout(_=>{const offsetPx=parseFloat(getComputedStyle(document.body).getPropertyValue("--header-offset"))||0;applyStickyFallback(filterTree,"boost-filters",isMobileViewport&&shouldStick,offsetPx),applyStickyFallback(filterToolbar,"boost-toolbar",isMobileViewport&&shouldStick,offsetPx)},0)}getHeaderHeight(document.querySelector(".header-v2")),ticking=!1}),ticking=!0)},!1);const desktopHeader=document.querySelector(".header-v2-desktop"),menuTrigger=document.querySelectorAll(".header-v2-desktop [data-menu-trigger]"),menu=document.querySelectorAll(".header-v2-desktop [data-menu]"),fullscreenBlock=document.querySelector(".fullscreen-overlay");let activeMenu=null,activeTrigger=null;const toggleMenuVisibility=(element,isVisible)=>{element.classList.toggle("hidden",!isVisible),element.classList.toggle("active",isVisible)},matchingMenus=new Map;menuTrigger.forEach(trigger=>{const triggerValue=trigger.getAttribute("data-menu-trigger"),matchedMenu=Array.from(menu).find(m=>m.getAttribute("data-menu")===triggerValue);matchingMenus.set(trigger,matchedMenu)});const setActive=(trigger,matchedMenu)=>{menuTrigger.forEach(otherTrigger=>{otherTrigger.classList.remove("active")}),trigger.classList.add("active"),activeMenu=matchedMenu,activeTrigger=trigger,fullscreenBlock.classList.remove("hidden")},clearActive=()=>{activeMenu&&toggleMenuVisibility(activeMenu,!1),activeTrigger&&activeTrigger.classList.remove("active"),activeMenu=null,activeTrigger=null,fullscreenBlock.classList.add("hidden")};desktopHeader.addEventListener("mouseover",e2=>{const trigger=e2.target.closest("[data-menu-trigger]");if(trigger){const matchedMenu=matchingMenus.get(trigger),container=document.querySelector(".loc_selector");container.classList.contains("hide")||container.classList.add("hide"),menu.forEach(m=>toggleMenuVisibility(m,m===matchedMenu)),setActive(trigger,matchedMenu)}else e2.target.matches(".header-v2-desktop .main-nav > nav a:not([data-menu-trigger]), .brand-bar, .loc_trigger")&&clearActive()}),desktopHeader.addEventListener("mouseleave",event=>{(!event.relatedTarget||!desktopHeader.contains(event.relatedTarget))&&clearActive()})});
2//# sourceMappingURL=/cdn/shop/t/320/assets/header.js.map?v=160751590294976276181790782651

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.