PageSourceSearch

https://draperjames.com/cdn/shop/t/755/assets/facets.js?v=147689208998134353101788144889

js draperjames.com collected 2026-09-24 17:17:34 UTC 9,569 bytes, 2 lines download raw bytes

1class FacetsToggle{constructor(){this.container=document.getElementById("Facet-Drawer");let button=document.getElementById("Facets-Toggle");button&&button.addEventListener("click",e=>{e.preventDefault(),this.previouslyFocusedElement=document.activeElement,document.getElementsByTagName("body")[0].classList.toggle("open-cc"),this.container.classList.toggle("active"),this.container.classList.contains("active")&&setTimeout(()=>{this.container.focus(),this.setupFocusTrap(this.container)},100)}),setTimeout(function(){window.dispatchEvent(new Event("resize.resize-select"))},10)}setupFocusTrap(container){const focusableElements=container.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])');if(focusableElements.length===0)return;const firstFocusableElement=focusableElements[0],lastFocusableElement=focusableElements[focusableElements.length-1],handleKeyDown=e=>{e.key==="Tab"?e.shiftKey?document.activeElement===firstFocusableElement&&(e.preventDefault(),lastFocusableElement.focus()):document.activeElement===lastFocusableElement&&(e.preventDefault(),firstFocusableElement.focus()):e.key==="Escape"&&this.closeDrawer()};container._focusTrapHandler=handleKeyDown,container.addEventListener("keydown",handleKeyDown)}closeDrawer(){document.getElementsByTagName("body")[0].classList.remove("open-cc"),this.container.classList.remove("active"),this.previouslyFocusedElement&&this.previouslyFocusedElement.focus&&this.previouslyFocusedElement.focus(),this.container._focusTrapHandler&&(this.container.removeEventListener("keydown",this.container._focusTrapHandler),delete this.container._focusTrapHandler)}}class FacetFiltersForm extends HTMLElement{constructor(){super(),this.onActiveFilterClick=this.onActiveFilterClick.bind(this),this.debouncedOnSubmit=debounce(event=>{this.onSubmitHandler(event)},500),this.querySelector("form").addEventListener("input",this.debouncedOnSubmit.bind(this))}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){FacetFiltersForm.searchParamsPrev=searchParams;const sections=FacetFiltersForm.getSections(),container=document.getElementsByClassName("thb-filter-count");document.getElementById("ProductGridContainer").querySelector(".collection").classList.add("loading");for(var item of container)item.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=>response.text()).then(responseText=>{const html=responseText;FacetFiltersForm.filterData=[...FacetFiltersForm.filterData,{html,url}],FacetFiltersForm.renderFilters(html,event),FacetFiltersForm.renderProductGridContainer(html),FacetFiltersForm.renderProductCount(html),window.facetsToggleInstance=new FacetsToggle})}static renderSectionFromCache(filterDataUrl,event){const html=FacetFiltersForm.filterData.find(filterDataUrl).html;FacetFiltersForm.renderFilters(html,event),FacetFiltersForm.renderProductGridContainer(html),FacetFiltersForm.renderProductCount(html),new FacetsToggle}static renderProductGridContainer(html){document.getElementById("ProductGridContainer").innerHTML=new DOMParser().parseFromString(html,"text/html").getElementById("ProductGridContainer").innerHTML;let top=document.getElementById("ProductGridContainer").getBoundingClientRect().top+document.documentElement.scrollTop-parseInt(getComputedStyle(document.documentElement).getPropertyValue("--header-height"),10)-30;
1window.scrollTo({top,left:0,behavior:"smooth"})}static renderProductCount(html){const countHtml=new DOMParser().parseFromString(html,"text/html").getElementById("ProductCount"),container=document.getElementsByClassName("thb-filter-count");if(countHtml)for(var item of container)item.innerHTML=countHtml.innerHTML,item.classList.remove("loading")}static renderFilters(html,event){const parsedHTML=new DOMParser().parseFromString(html,"text/html"),facetDetailsElements=parsedHTML.querySelectorAll("#FacetFiltersForm collapsible-row, #FacetFiltersFormMobile collapsible-row"),matchesIndex=element=>{const jsFilter=event?event.target.closest("collapsible-row"):void 0;return jsFilter?element.dataset.index===jsFilter.dataset.index:!1},facetsToRender=Array.from(facetDetailsElements).filter(element=>!matchesIndex(element)),countsToRender=Array.from(facetDetailsElements).find(matchesIndex);facetsToRender.forEach(element=>{document.querySelector(`collapsible-row[data-index="${element.dataset.index}"]`).innerHTML=element.innerHTML}),FacetFiltersForm.renderActiveFacets(parsedHTML),FacetFiltersForm.renderAdditionalElements(parsedHTML),new FacetsToggle,countsToRender&&FacetFiltersForm.renderCounts(countsToRender,event.target.closest("collapsible-row"))}static renderActiveFacets(html){[".active-facets"].forEach(selector=>{const activeFacetsElement=html.querySelector(selector);activeFacetsElement&&(document.querySelector(selector).innerHTML=activeFacetsElement.innerHTML)}),FacetFiltersForm.toggleActiveFacets(!1)}static renderAdditionalElements(html){[".mobile-filter-count"].forEach(selector=>{html.querySelector(selector)&&(document.querySelector(selector).innerHTML=html.querySelector(selector).innerHTML)})}static renderCounts(source,target){const targetElement=target.querySelector(".facets__selected");source.querySelector(".facets__selected")&&targetElement&&(target.querySelector(".facets__selected").outerHTML=source.querySelector(".facets__selected").outerHTML)}static updateURLHash(searchParams){history.pushState({searchParams},"",`${window.location.pathname}${searchParams&&"?".concat(searchParams)}`)}static getSections(){return[{section:document.getElementById("product-grid").dataset.id}]}onSubmitHandler(event){event.preventDefault();const formData=new FormData(event.target.closest("form")),searchParams=new URLSearchParams(formData);searchParams.get("filter.v.price.gte")==="0.00"&&searchParams.delete("filter.v.price.gte"),document.querySelector(".price_slider")&&searchParams.get("filter.v.price.lte")===parseFloat(document.querySelector(".price_slider").dataset.max).toFixed(2)&&searchParams.delete("filter.v.price.lte"),FacetFiltersForm.renderPage(searchParams.toString(),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)}}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 FacetRemove extends HTMLElement{constructor(){super(),this.querySelectorAll("a").forEach(item=>{item.addEventListener("click",event=>{event.preventDefault(),(this.closest("facet-filters-form")||document.querySelector("facet-filters-form")).onActiveFilterClick(event)})})}}customElements.define("facet-remove",FacetRemove);class PriceSlider extends HTMLElement{constructor(){super()}connectedCallback(){let slider=this.querySelector(".price_slider"),amounts=this.querySelector(".price_slider_amount"),args={start:[parseFloat(slider.dataset.minValue||0),parseFloat(slider.dataset.maxValue||slider.dataset.max)],connect:!0,step:10,direction:document.dir,range:{min:0,max:parseFloat(slider.dataset.max)}},event=new CustomEvent("input"),form=this.closest("facet-filters-form")||document.querySelector("facet-filters-form");slider.classList.contains("noUi-target")&&slider.noUiSlider.destroy(),noUiSlider.create(slider,args),slider.noUiSlider.on("update",function(values){amounts.querySelector(".field__input_min").value=values[0],amounts.querySelector(".field__input_max").value=values[1]}),slider.noUiSlider.on("change",function(values){form.querySelector("form").dispatchEvent(event)})}}customElements.define("price-slider",PriceSlider),window.addEventListener("load",()=>{window.facetsToggleInstance=new FacetsToggle}),(function(){const drawer=document.getElementById("Facet-Drawer");if(!drawer)return;let lockedScrollY=0;const lockScroll=()=>{document.body.classList.contains("filters-scroll-locked")||(lockedScrollY=window.scrollY||window.pageYOffset||0,document.body.style.top=`-${lockedScrollY}px`,document.body.classList.add("filters-scroll-locked"))},unlockScroll=()=>{document.body.classList.contains("filters-scroll-locked")&&(document.body.classList.remove("filters-scroll-locked"),document.body.style.top="",window.scrollTo(0,lockedScrollY))},sync=()=>{drawer.classList.contains("active")&&window.innerWidth<1068?lockScroll():unlockScroll()};new MutationObserver(sync).observe(drawer,{attributes:!0,attributeFilter:["class"]}),window.addEventListener("resize",sync)})();
2//# sourceMappingURL=/cdn/shop/t/755/assets/facets.js.map?v=147689208998134353101788144889

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.