1class FacetFiltersForm extends HTMLElement{constructor(){super(),this.onActiveFilterClick=this.onActiveFilterClick.bind(this);const inputWhitelist=[".facet",".collection-actions-wrapper"],inputBlacklist=[".collection-actions-compare-toggle"];this.debouncedOnSubmit=debounce(event=>{this.onSubmitHandler(event)},500),this.debouncedOnSubmitReduced=debounce(event=>{this.onSubmitHandler(event)},250,!0),this.addEventListener("input",event=>{if(!inputWhitelist.some(selector=>!!event.target.closest(selector))||inputBlacklist.some(selector=>!!event.target.closest(selector)))return!1;event.target.closest("price-range")?this.debouncedOnSubmit(event):this.debouncedOnSubmitReduced(event)})}static setListeners(){const onHistoryChange=event=>{const searchParams=event.state?event.state.searchParams:FacetFiltersForm.searchParamsInitial;searchParams!==FacetFiltersForm.searchParamsPrev&&FacetFiltersForm.renderPage(searchParams,null,!1)};window.addEventListener("popstate",onHistoryChange)}static toggleActiveFacets(disable=!0){document.querySelectorAll(".js-facet-remove").forEach(element=>{element.classList.toggle("disabled",disable)})}static renderPage(searchParams,event,updateURLHash=!0,appendResults){FacetFiltersForm.searchParamsPrev=searchParams;const sections=FacetFiltersForm.getSections(),countContainer=document.getElementById("ProductCount");if(document.getElementById("ProductGridContainer").querySelector(".collection").classList.add("loading"),countContainer&&countContainer.classList.add("loading"),sections.forEach(section=>{const url=`${window.location.pathname}?section_id=${section.section}&${searchParams}`,filterDataUrl=element=>element.url===url;FacetFiltersForm.filterData.some(filterDataUrl)?FacetFiltersForm.renderSectionFromCache(filterDataUrl,event):FacetFiltersForm.renderSectionFromFetch(url,event,appendResults)}),updateURLHash&&FacetFiltersForm.updateURLHash(searchParams),!searchParams.includes("page")){const filtersEvent=new CustomEvent("collection:product-filters",{detail:{filters:deserializeSearchParams(searchParams)}});document.dispatchEvent(filtersEvent)}}static renderSectionFromFetch(url,event,appendResults){fetch(url).then(response=>response.text()).then(responseText=>{const html=responseText;FacetFiltersForm.filterData=[...FacetFiltersForm.filterData,{html,url}],FacetFiltersForm.renderCollectionActions(html),FacetFiltersForm.renderFilters(html,event),FacetFiltersForm.renderProductGridContainer(html,appendResults),FacetFiltersForm.renderProductCount(html)})}static renderSectionFromCache(filterDataUrl,event){const html=FacetFiltersForm.filterData.find(filterDataUrl).html;FacetFiltersForm.renderCollectionActions(html),FacetFiltersForm.renderFilters(html,event),FacetFiltersForm.renderProductGridContainer(html),FacetFiltersForm.renderProductCount(html)}static renderProductGridContainer(html,appendResults){const container=document.getElementById("ProductGridContainer"),parsedDom=new DOMParser().parseFromString(html,"text/html");appendResults&&parsedDom.getElementById("product-grid").prepend(...document.getElementById("product-grid").childNodes),container.innerHTML=parsedDom.getElementById("ProductGridContainer").innerHTML}static renderProductCount(html){const count=new DOMParser().parseFromString(html,"text/html").getElementById("ProductCount")?.innerHTML,container=document.getElementById("ProductCount");container&&(container.innerHTML=count,container.classList.remove("loading"))}static renderCollectionActions(html){const container=document.getElementById("CollectionActions"),parsedDom=new DOMParser().parseFromString(html,"text/html");if(!container)return;const parsedContainerActions=parsedDom.getElementById("CollectionActions");container.classList.contains("is-stuck")&&parsedContainerActions.classList.add("is-stuck"),container.classList=parsedContainerActions.classList;const parsedCollectionActionsMain=parsedContainerActions.querySelector(".collection-actions-main"),collectionActionsMain=container.querySelector(".collection-actions-main");parsedCollectionActionsMain&&collectionActionsMain&&(collectionActionsMain.classList=parsedCollectionActionsMain.classList,collectionActionsMain.innerHTML=parsedCollectionActionsMain.innerHTML)}static renderFilters(html,event){const parsedHTML=new DOMParser().parseFromString(html,"text/html"),oldFacetElements=document.querySelectorAll("#FacetFiltersForm .js-filter"),newFacetElements=parsedHTML.querySelectorAll("#FacetFiltersForm .js-filter"),expandedFacets=[];document.querySelectorAll('#FacetFiltersForm .js-filter collapsible-expandable[expanded="true"]')?.forEach(node=>
1{const parent=node.closest(".js-filter");node.getAttribute("expanded")&&expandedFacets.push(parent.dataset.name)});const facetsContainer=document.querySelector("#FacetFiltersForm .page-layout-sidebar-inner-content"),focusedElement=document.activeElement;let focusedFilterId=null;if(facetsContainer?.contains(focusedElement)&&(focusedFilterId=focusedElement.id),facetsContainer){const previousHeight=facetsContainer?.getBoundingClientRect().height;facetsContainer.style.minHeight=`${previousHeight}px`}oldFacetElements.forEach(facet=>facet.remove()),newFacetElements.forEach(element=>{const isExpanded=expandedFacets.includes(element.dataset.name);element.querySelector(".facet-toggle").setAttribute("aria-expanded",isExpanded),element.querySelector("collapsible-expandable").setAttribute("expanded",isExpanded),facetsContainer.append(element)}),focusedFilterId&&document.getElementById(focusedFilterId)?.focus({preventScroll:!0}),facetsContainer&&requestAnimationFrame(()=>{facetsContainer.style.minHeight=""});const scrollTop=document.querySelector("facet-filters-form").dataset.scrollTop==="true",container=document.getElementById("CollectionActions");if(scrollTop&&container&&window.innerWidth>=990&&!event?.target.name.includes(".price.")){const offset=document.querySelector("sticky-header:not([disabled])")?.offsetHeight??0,rect=container.getBoundingClientRect(),scrollPosition=window.scrollY+rect.top-offset;rect.top<0&&window.scrollTo({top:scrollPosition,behavior:"smooth"})}FacetFiltersForm.renderActiveFacets(parsedHTML)}static renderActiveFacets(html){[".collection-actions-filters"].forEach(selector=>{const activeFacetsElement=html.querySelector(selector);activeFacetsElement&&(document.querySelector(selector).innerHTML=activeFacetsElement.innerHTML)}),FacetFiltersForm.toggleActiveFacets(!1)}static updateURLHash(searchParams,replace){replace?history.replaceState({searchParams},"",`${window.location.pathname}${searchParams&&"?".concat(searchParams)}`):history.pushState({searchParams},"",`${window.location.pathname}${searchParams&&"?".concat(searchParams)}`)}static getSections(){return[{section:document.querySelector("#product-grid, #product-rows").dataset.id}]}onSubmitHandler(event){event.preventDefault();const formData=new FormData(document.getElementById("FacetsFilterForm")),searchParams=new URLSearchParams(formData).toString();FacetFiltersForm.renderPage(searchParams,event)}onActiveFilterClick(event){event.preventDefault(),FacetFiltersForm.toggleActiveFacets();const url=event.currentTarget.href.indexOf("?")==-1?"":event.currentTarget.href.slice(event.currentTarget.href.indexOf("?")+1);FacetFiltersForm.renderPage(url)}onAjaxPagination(event){event.preventDefault();const next=event.currentTarget,url=next.href.indexOf("?")==-1?"":next.href.slice(next.href.indexOf("?")+1);FacetFiltersForm.renderPage(url,event,!0),document.getElementById("MainContent").scrollIntoView(!0);const params=new URLSearchParams(url),customEvent=new CustomEvent("pagination:page-change",{detail:{page:Number(params.get("page"))}});document.dispatchEvent(customEvent)}}FacetFiltersForm.filterData=[],FacetFiltersForm.searchParamsInitial=window.location.search.slice(1),FacetFiltersForm.searchParamsPrev=window.location.search.slice(1),customElements.define("facet-filters-form",FacetFiltersForm),FacetFiltersForm.setListeners();class PriceRange extends HTMLElement{constructor(){super(),this.querySelectorAll("input").forEach(element=>element.addEventListener("change",this.onRangeChange.bind(this))),this.setMinAndMaxValues()}onRangeChange(event){this.adjustToValidValues(event.currentTarget),this.setMinAndMaxValues()}setMinAndMaxValues(){const inputs=this.querySelectorAll("input"),minInput=inputs[0],maxInput=inputs[1];maxInput.value&&minInput.setAttribute("max",maxInput.value),minInput.value&&maxInput.setAttribute("min",minInput.value),minInput.value===""&&maxInput.setAttribute("min",0),maxInput.value===""&&minInput.setAttribute("max",maxInput.getAttribute("max"))}adjustToValidValues(input){const value=Number(input.value),min=Number(input.getAttribute("min")),max=Number(input.getAttribute("max"));value<min&&(input.value=min),value>max&&(input.value=max)}}customElements.define("price-range",PriceRange);class FacetRemove extends HTMLElement{constructor(){super(),this.querySelector("a").addEventListener("click",event=>{event.preventDefault(),(this.closest("facet-filters-form")||document.querySelector("facet-filters-form")).onActiveFilterClick(event)})}}customElements.define("facet-remove",FacetRemove);class AjaxPaginate extends HTMLElement{constructor(){super();const form=this.closest("facet-filters-form")||document.querySelector("facet-filters-form");this.querySelectorAll("a").forEach(button=>{button.addEventListener("click",event=>{event.preventDefault(),form.onAjaxPagination(event)})})}}customElements.define("ajax-paginate",AjaxPaginate);class StickyCollectionActions extends HTMLElement{constructor(){super(),this.sticky=this.children[0],this.createObserver()}createObserver(){new IntersectionObserver(([entry])=>{entry.target.classList.toggle("is-stuck",entry.boundingClientRect.top<0)},{threshold:1}).observe(this.sticky)}}customElements.define("sticky-collection-actions",StickyCollectionActions);const deserializeSearchParams=queryString=>{const params=new URLSearchParams(queryString),result={};
1for(const[key,value]of params.entries())result[key]?result[key]=`${result[key]},${value}`:value&&(result[key]=value);return result}; 2//# sourceMappingURL=/cdn/shop/t/6/assets/facets.js.map?v=46764104922964078011760522438
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.