PageSourceSearch

https://conniewillis.com/cdn/shop/t/4/assets/facets.js?v=37562102411761171621765069213

js conniewillis.com collected 2026-10-06 13:41:10 UTC 10,334 bytes, 2 lines download raw bytes

1class FacetFiltersForm extends HTMLElement{constructor(){super(),this.onActiveFilterClick=this.onActiveFilterClick.bind(this),this.debouncedOnSubmit=webvista.debounce(event=>{this.onSubmitHandler(event)},500),this.querySelector("form").addEventListener("change",this.debouncedOnSubmit.bind(this)),this.addEventListener("keyup",webvista.onKeyUpEscape)}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 renderPage(searchParams,event,updateURLHash=!0){FacetFiltersForm.searchParamsPrev=searchParams;const sections=FacetFiltersForm.getSections(),contentContainer=document.getElementById("Product-Grid-Container").querySelector(".content-list");contentContainer&&contentContainer.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)}),updateURLHash&&FacetFiltersForm.updateURLHash(searchParams)}static renderSectionFromFetch(url,event){fetch(url).then(response=>{if(!response.ok)throw new Error(`Network response was not ok: ${response.statusText}`);return response.text()}).then(responseText=>{const html=responseText;FacetFiltersForm.filterData=[...FacetFiltersForm.filterData,{html,url}],FacetFiltersForm.renderFacets(html,event),FacetFiltersForm.renderProductGridContainer(html),FacetFiltersForm.renderProductCount(html)}).catch(error=>{webvista.popToast(window.accessibilityStrings.unknownError,"error")})}static renderSectionFromCache(filterDataUrl,event){const html=FacetFiltersForm.filterData.find(filterDataUrl).html;FacetFiltersForm.renderFacets(html,event),FacetFiltersForm.renderProductGridContainer(html),FacetFiltersForm.renderProductCount(html)}static renderProductGridContainer(html){const targetProductContainer=document.getElementById("Product-Grid-Container");if(!targetProductContainer)return!1;const sourceProductContainer=new DOMParser().parseFromString(html,"text/html").getElementById("Product-Grid-Container");if(!sourceProductContainer)return!1;targetProductContainer.innerHTML=sourceProductContainer.innerHTML,typeof initializeScrollAnimationTrigger=="function"&&initializeScrollAnimationTrigger(targetProductContainer),webvista.initLazyImages(),webvista.initTooltips()}static renderProductCount(html){const countIds=["ProductCountVertical","Product-Count-Horizontal-And-Drawer"],htmlDocument=new DOMParser().parseFromString(html,"text/html");countIds.forEach(id=>{const source=htmlDocument.getElementById(id),target=document.getElementById(id);source&&target&&(target.outerHTML=source.outerHTML)})}static renderFacets(html,event){const parsedHTML=new DOMParser().parseFromString(html,"text/html");["#Facet-Horizontal-Wrapper","#Facet-Vertical-Wrapper","#Facet-Drawer-Opener-Wrapper","#Facet-Drawer-Wrapper"].forEach(selector=>{const target=document.querySelector(selector),source=parsedHTML.querySelector(selector);if(!(!target||!source))if(event&&target.contains(event.target)){const matchesIndex=element=>{const facetItem=event?event.target.closest(".facet-item"):void 0;return facetItem?element.dataset.index===facetItem.dataset.index:!1},facetActiveSource=source.querySelector(".facets-active"),facetActiveTarget=target.querySelector(".facets-active");facetActiveSource&&facetActiveTarget&&(facetActiveTarget.innerHTML=facetActiveSource.innerHTML);const facets=Array.from(source.querySelectorAll(".facet-item"));facets.filter(facet=>!matchesIndex(facet)).forEach(facet=>{if(!facet.hasAttribute("data-index"))return;const targetFacet2=target.querySelector(`.facet-item[data-index="${facet.getAttribute("data-index")}"]`);targetFacet2&&(targetFacet2.outerHTML=facet.outerHTML)});const currentFacet=facets.find(facet=>matchesIndex(facet));if(!currentFacet)return;const targetFacet=target.querySelector(`.facet-item[data-index="${currentFacet.getAttribute("data-index")}"]`);if(targetFacet){const targetSelected=targetFacet.querySelector(".facets-selected"),currentSelected=currentFacet.querySelector(".facets-selected");targetSelected&&currentSelected&&targetSelected.replaceWith(currentSelected)}}else source&&(target.innerHTML=source.innerHTML)})}static updateURLHash(searchParams){history.pushState({searchParams},"",`${window.location.pathname}${searchParams&&"?".concat(searchParams)}`)}static getSections(){return[{section:document.getElementById("Paginate-Content").dataset.section}]}createSearchParams(form){const formData=new FormData(form);return new URLSearchParams(formData).toString()}onSubmitForm(searchParams,event){FacetFiltersForm.renderPage(searchParams,event)}onSubmitHandler(event){event.preventDefault();const form=this.querySelector("form");this.onSubmitForm(this.createSearchParams(form),event)}onActiveFilterClick(event){event.preventDefault();const url=event.currentTarget.href.indexOf("?")===-1?"":event.currentTarget.href.slice(event.currentTarget.href.indexOf("?")+1);FacetFiltersForm.renderPage(url,null)}}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.rangeMin=this.querySelector("input.range-min"),this.rangeMax=this.querySelector("input.range-max"),this.inputMin=this.querySelector("input.input-min"),this.inputMax=this.querySelector("input.input-max"),!(!this.rangeMin||!this.rangeMax)&&(this.debounceMs=1e3,this.emitTimer=null,this.boundOnRangeMinChange=this.onRangeMinChange.bind(this),this.boundOnRangeMaxChange=this.onRangeMaxChange.bind(this),this.boundOnInputMinChange=this.onInputMinChange.bind(this),this.boundOnInputMa
1xChange=this.onInputMaxChange.bind(this),this.boundStopEmit=this.stopEmit.bind(this),this.initBlockNativeChange(),this.rangeMin.addEventListener("input",this.boundOnRangeMinChange),this.rangeMax.addEventListener("input",this.boundOnRangeMaxChange),this.inputMin&&(this.inputMin.addEventListener("input",this.boundStopEmit),this.inputMin.addEventListener("change",this.boundOnInputMinChange)),this.inputMax&&(this.inputMax.addEventListener("input",this.boundStopEmit),this.inputMax.addEventListener("change",this.boundOnInputMaxChange)),this.setProgressMin(),this.setProgressMax())}disconnectedCallback(){this.rangeMin&&this.boundOnRangeMinChange&&this.rangeMin.removeEventListener("input",this.boundOnRangeMinChange),this.rangeMax&&this.boundOnRangeMaxChange&&this.rangeMax.removeEventListener("input",this.boundOnRangeMaxChange),this.inputMin&&this.boundOnInputMinChange&&this.inputMin.removeEventListener("change",this.boundOnInputMinChange),this.inputMax&&this.boundOnInputMaxChange&&this.inputMax.removeEventListener("change",this.boundOnInputMaxChange),this.boundStopEmit&&(this.inputMin&&this.inputMin.removeEventListener("input",this.boundStopEmit),this.inputMax&&this.inputMax.removeEventListener("input",this.boundStopEmit)),this.stopEmit(),this.removeBlockNativeChange()}initBlockNativeChange(){this.boundBlockNativeChange=e=>e.stopPropagation(),[this.rangeMin,this.rangeMax,this.inputMin,this.inputMax].filter(Boolean).forEach(el=>el.addEventListener("change",this.boundBlockNativeChange))}removeBlockNativeChange(){[this.rangeMin,this.rangeMax,this.inputMin,this.inputMax].filter(Boolean).forEach(el=>el.removeEventListener("change",this.boundBlockNativeChange))}scheduleEmit(){this.stopEmit(),this.emitTimer=setTimeout(()=>{this.dispatchEvent(new Event("change",{bubbles:!0}))},this.debounceMs)}onRangeMinChange(event){const minVal=webvista.toNumber(this.rangeMin.value),maxVal=webvista.toNumber(this.rangeMax.value,minVal);minVal>=maxVal&&(this.rangeMin.value=String(maxVal)),this.inputMin&&(this.inputMin.value=this.rangeMin.value),this.setProgressMin(),this.scheduleEmit()}onRangeMaxChange(event){const maxVal=webvista.toNumber(this.rangeMax.value),minVal=webvista.toNumber(this.rangeMin.value,maxVal);maxVal<=minVal&&(this.rangeMax.value=String(minVal)),this.inputMax&&(this.inputMax.value=this.rangeMax.value),this.setProgressMax(),this.scheduleEmit()}stopEmit(){this.emitTimer&&(clearTimeout(this.emitTimer),this.emitTimer=null)}onInputMinChange(event){let value=webvista.toNumber(event.currentTarget.value);const min=webvista.toNumber(this.rangeMin.min),max=webvista.toNumber(this.rangeMax.value);value=webvista.clampNumber(value,min,max),this.rangeMin.value=String(value),event.currentTarget.value=String(value),this.setProgressMin(),this.scheduleEmit()}onInputMaxChange(event){let value=webvista.toNumber(event.currentTarget.value);const min=webvista.toNumber(this.rangeMin.value),max=webvista.toNumber(this.rangeMax.max);value=webvista.clampNumber(value,min,max),this.rangeMax.value=String(value),event.currentTarget.value=String(value),this.setProgressMax(),this.scheduleEmit()}setProgressMin(){const min=webvista.toNumber(this.rangeMin.min),span=webvista.toNumber(this.rangeMin.max,min)-min,cur=webvista.toNumber(this.rangeMin.value,min);this.style.setProperty("--start",`${(cur-min)*100/span}%`)}setProgressMax(){const min=webvista.toNumber(this.rangeMin.min),max=webvista.toNumber(this.rangeMin.max,min),span=max-min,cur=webvista.toNumber(this.rangeMax.value,max);this.style.setProperty("--end",`${(cur-min)*100/span}%`)}}customElements.define("price-range",PriceRange);class FacetRemove extends HTMLElement{constructor(){super();const facetLink=this.querySelector("a");facetLink.setAttribute("role","button"),facetLink.addEventListener("click",this.closeFilter.bind(this)),facetLink.addEventListener("keyup",event=>{event.preventDefault(),event.code&&event.code.toUpperCase()==="SPACE"&&this.closeFilter(event)})}closeFilter(event){event.preventDefault(),(this.closest("facet-filters-form")||document.querySelector("facet-filters-form")).onActiveFilterClick(event)}}customElements.define("facet-remove",FacetRemove);
2//# sourceMappingURL=/cdn/shop/t/4/assets/facets.js.map?v=37562102411761171621765069213

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.