PageSourceSearch

https://www.atomic.com/cdn/shop/t/38/assets/facets.js?v=18399410726093343911789485315

js atomic.com collected 2026-09-24 19:02:06 UTC 21,296 bytes, 2 lines download raw bytes

1class FacetFiltersForm extends HTMLElement{constructor(){super(),this.onActiveFilterClick=this.onActiveFilterClick.bind(this),this.onSubmitTimeout=null,this.debouncedOnSubmit=event=>{clearTimeout(this.onSubmitTimeout),this.onSubmitTimeout=setTimeout(()=>this.onSubmitHandler(event),500)};const facetForm=this.querySelector("form");facetForm.addEventListener("input",this.debouncedOnSubmit.bind(this)),facetForm.addEventListener("change",this.syncLabelActiveState.bind(this));const facetWrapper=this.querySelector("#FacetsWrapperDesktop");facetWrapper&&facetWrapper.addEventListener("keyup",onKeyUpEscape),viewMode()}syncLabelActiveState(event){const input=event.target;if(!input||input.type!=="checkbox"||!input.name)return;const changedLabel=input.closest("label");changedLabel&&(changedLabel.classList.toggle("is-active",input.checked),changedLabel.classList.toggle("active",input.checked))}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,FacetFiltersForm.requestToken=(FacetFiltersForm.requestToken||0)+1;const requestToken=FacetFiltersForm.requestToken,sections=FacetFiltersForm.getSections(),countContainer=document.getElementById("ProductCount"),countContainerDesktop=document.getElementById("ProductCountDesktop"),countContainerMobile=document.getElementById("ProductCountMobile");document.querySelectorAll(".facets-container .loading__spinner, facet-filters-form .loading__spinner").forEach(spinner=>spinner.classList.remove("hidden")),document.getElementById("ProductGridContainer").querySelector(".collection").classList.add("loading"),countContainer&&countContainer.classList.add("loading"),countContainerDesktop&&countContainerDesktop.classList.add("loading"),countContainerMobile&&countContainerMobile.classList.add("loading");const isInlineContext=event&&event.target&&(event.target.closest("#FacetFiltersInlineForm")||event.target.closest("#inline-active-facets")||event.target.closest("#inline-sort-bar"));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,isInlineContext,requestToken):FacetFiltersForm.renderSectionFromFetch(url,event,isInlineContext,requestToken)}),updateURLHash&&FacetFiltersForm.updateURLHash(searchParams)}static renderSectionFromFetch(url,event,isInlineContext,requestToken){fetch(url).then(response=>response.text()).then(responseText=>{if(requestToken!==void 0&&requestToken!==FacetFiltersForm.requestToken)return;const html=responseText;FacetFiltersForm.filterData=[...FacetFiltersForm.filterData,{html,url}],FacetFiltersForm.renderFilters(html,event),FacetFiltersForm.renderProductGridContainer(html,isInlineContext),FacetFiltersForm.renderProductCount(html),typeof initializeScrollAnimationTrigger=="function"&&initializeScrollAnimationTrigger(html.innerHTML)})}static renderSectionFromCache(filterDataUrl,event,isInlineContext,requestToken){if(requestToken!==void 0&&requestToken!==FacetFiltersForm.requestToken)return;const html=FacetFiltersForm.filterData.find(filterDataUrl).html;FacetFiltersForm.renderFilters(html,event),FacetFiltersForm.renderProductGridContainer(html,isInlineContext),FacetFiltersForm.renderProductCount(html),typeof initializeScrollAnimationTrigger=="function"&&initializeScrollAnimationTrigger(html.innerHTML)}static renderProductGridContainer(html,isInlineContext){const parsedGrid=new DOMParser().parseFromString(html,"text/html");document.getElementById("ProductGridContainer").innerHTML=parsedGrid.getElementById("ProductGridContainer").innerHTML;
1const newSortBar=parsedGrid.getElementById("inline-sort-bar"),curSortBar=document.getElementById("inline-sort-bar");if(newSortBar&&curSortBar&&(curSortBar.innerHTML=newSortBar.innerHTML,window._sortBarInstance&&window._sortBarInstance.bindToggle()),!isInlineContext){let container=document.getElementById("ProductGridContainer"),headerHeight=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--header-height"),10),posTop=container.offsetTop-headerHeight-50;window.scrollTo({top:posTop,behavior:"smooth"})}viewMode(),typeof reinitShortcutBoxPositioner=="function"&&reinitShortcutBoxPositioner(),document.dispatchEvent(new CustomEvent("product-grid:updated"))}static renderProductCount(html){const parsedHtml=new DOMParser().parseFromString(html,"text/html"),productCountElement=parsedHtml.getElementById("ProductCount"),productCountDesktopElement=parsedHtml.getElementById("ProductCountDesktop"),productCountMobileElement=parsedHtml.getElementById("ProductCountMobile"),productCountBannerElement=parsedHtml.getElementById("ProductCountBanner"),productCountActiveElement=parsedHtml.getElementById("ProductCountActive"),countNewActive=productCountActiveElement?productC
1ountActiveElement.innerHTML:"0",updateContainer=(containerId,count)=>{const container=document.getElementById(containerId);container&&(container.innerHTML=count,container.classList.remove("loading"))};productCountElement&&updateContainer("ProductCount",productCountElement.innerHTML),productCountDesktopElement&&updateContainer("ProductCountDesktop",productCountDesktopElement.innerHTML),productCountMobileElement&&updateContainer("ProductCountMobile",productCountMobileElement.innerHTML),productCountBannerElement?updateContainer("ProductCountBanner",productCountBannerElement.innerHTML):productCountElement&&updateContainer("ProductCountBanner",productCountElement.innerHTML);const countActive=document.getElementById("ProductCountActive");countActive&&(countActive.innerHTML=countNewActive),document.querySelectorAll(".facets-container .loading__spinner, facet-filters-form .loading__spinner").forEach(spinner=>spinner.classList.add("hidden"))}static renderFilters(html,event){const parsedHTML=new DOMParser().parseFromString(html,"text/html"),facetDetailsElementsFromFetch=parsedHTML.querySelectorAll("#FacetFiltersForm .js-filter, #FacetFiltersFormMobile .js-filter, #FacetFiltersPillsForm .js-filter, #FacetFiltersInlineForm .js-filter"),facetDetailsElementsFromDom=document.querySelectorAll("#FacetFiltersForm .js-filter, #FacetFiltersFormMobile .js-filter, #FacetFiltersPillsForm .js-filter, #FacetFiltersInlineForm .js-filter");if(facetDetailsElementsFromFetch.length===0)return;Array.from(facetDetailsElementsFromDom).forEach(currentElement=>{Array.from(facetDetailsElementsFromFetch).some(({id})=>currentElement.id===id)||currentElement.remove()});const matchesId=element=>{const jsFilter=event?event.target.closest(".js-filter"):void 0;return jsFilter?element.id===jsFilter.id:!1},facetsToRender=Array.from(facetDetailsElementsFromFetch).filter(element=>!matchesId(element)),countsToRender=Array.from(facetDetailsElementsFromFetch).find(matchesId);if(facetsToRender.forEach((elementToRender,index)=>{const currentElement=document.getElementById(elementToRender.id);if(currentElement){const histogramEl=currentElement.querySelector(".inline-histogram"),histogramContent=histogramEl?.querySelector("svg")?histogramEl.innerHTML:null;if(document.getElementById(elementToRender.id).innerHTML=elementToRender.innerHTML,histogramContent){const newHistogram=document.getElementById(elementToRender.id)?.querySelector(".inline-histogram");newHistogram&&(newHistogram.innerHTML=histogramContent)}}else{if(index>0){const{className:previousElementClassName,id:previousElementId}=facetsToRender[index-1],previousInDom=previousElementId?document.getElementById(previousElementId):null;if(previousInDom&&elementToRender.className===previousElementClassName){previousInDom.after(elementToRender);return}}const parentId=elementToRender.parentElement&&elementToRender.parentElement.id,anchor=parentId?document.querySelector(`#${parentId} .js-filter`):null;anchor&&anchor.before(elementToRender)}}),FacetFiltersForm.renderActiveFacets(parsedHTML),FacetFiltersForm.renderAdditionalElements(parsedHTML),countsToRender){const closestJSFilterID=event.target.closest(".js-filter").id;if(closestJSFilterID){FacetFiltersForm.renderCounts(countsToRender,event.target.closest(".js-filter")),FacetFiltersForm.renderMobileCounts(countsToRender,document.getElementById(closestJSFilterID));const newFacetDetailsElement=document.getElementById(closestJSFilterID),newElementSelector=newFacetDetailsElement.classList.contains("mobile-facets__details")?".mobile-facets__close-button":".facets__summary",newElementToActivate=newFacetDetailsElement.querySelector(newElementSelector),isTextInput=event.target.getAttribute("type")==="text";newElementToActivate&&!isTextInput&&newElementToActivate.focus()}}reinitializeCustomElements(),viewMode()}static renderActiveFacets(html){[".active-facets-mobile",".active-facets-desktop"].forEach(selector=>{const activeFacetsElement=html.querySelector(selector);if(!activeFacetsElement)return;const target=document.querySelector(selector);target&&(target.innerHTML=activeFacetsElement.innerHTML)});const inlineSource=html.getElementById("inline-active-facets"),inl
1ineTarget=document.getElementById("inline-active-facets");inlineSource&&inlineTarget&&(inlineTarget.innerHTML=inlineSource.innerHTML),FacetFiltersForm.toggleActiveFacets(!1)}static renderAdditionalElements(html){[".mobile-facets__open",".mobile-facets__count",".sorting"].forEach(selector=>{html.querySelector(selector)&&(document.querySelector(selector).innerHTML=html.querySelector(selector).innerHTML)})}static renderCounts(source,target){const targetSummary=target.querySelector(".facets__summary"),sourceSummary=source.querySelector(".facets__summary");sourceSummary&&targetSummary&&(targetSummary.outerHTML=sourceSummary.outerHTML);const targetHeaderElement=target.querySelector(".facets__header"),sourceHeaderElement=source.querySelector(".facets__header");sourceHeaderElement&&targetHeaderElement&&(targetHeaderElement.outerHTML=sourceHeaderElement.outerHTML);const targetWrapElement=target.querySelector(".facets-wrap"),sourceWrapElement=source.querySelector(".facets-wrap");sourceWrapElement&&targetWrapElement&&(target.querySelector("show-more-button .label-show-more.hidden")&&sourceWrapElement.querySelectorAll(".facets__item.hidden").forEach(hiddenItem=>hiddenItem.classList.replace("hidden","show-more-item")),targetWrapElement.outerHTML=sourceWrapElement.outerHTML)}static renderMobileCounts(source,target){const targetFacetsList=target.querySelector(".mobile-facets__list"),sourceFacetsList=source.querySelector(".mobile-facets__list");sourceFacetsList&&targetFacetsList&&(targetFacetsList.outerHTML=sourceFacetsList.outerHTML)}static updateURLHash(searchParams){history.pushState({searchParams},"",`${window.location.pathname}${searchParams&&"?".concat(searchParams)}`)}static getSections(){return[{section:document.getElementById("product-grid").dataset.id}]}createSearchParams(form){const formData=new FormData(form);return new URLSearchParams(formData).toString()}onSubmitForm(searchParams,event){FacetFiltersForm.renderPage(searchParams,event)}onSubmitHandler(event){event.preventDefault();const sortFilterForms=document.querySelectorAll("facet-filters-form form"),searchParams=this.createFilteredSearchParams(event.target.closest("form"));if(event.srcElement.className==="mobile-facets__checkbox")this.onSubmitForm(searchParams.toString(),event);else{const forms=[],sourceFormId=event.target.closest("form").id,isMobile=sourceFormId==="FacetFiltersFormMobile",isInline=sourceFormId==="FacetFiltersInlineForm";sortFilterForms.forEach(form=>{isMobile?form.id==="FacetFiltersFormMobile"&&forms.push(this.createFilteredSearchParams(form).toString()):isInline?(form.id==="FacetSortForm"||form.id==="FacetSortDrawerForm"||form.id==="FacetFiltersInlineForm")&&forms.push(this.createFilteredSearchParams(form).toString()):(form.id==="FacetSortForm"||form.id==="FacetFiltersForm"||form.id==="FacetSortDrawerForm")&&forms.push(this.createFilteredSearchParams(form).toString())}),this.onSubmitForm(forms.join("&"),event)}}createFilteredSearchParams(form){const formData=new FormData(form),searchParams=new URLSearchParams(formData);searchParams.has("filter.v.price.gte")&&searchParams.get("filter.v.price.gte")==="0"&&searchParams.delete("filter.v.price.gte");const priceSlider=document.querySelector(".price-slider-range");if(priceSlider){const maxPrice=parseFloat(priceSlider.dataset.max);searchParams.has("filter.v.price.lte")&&searchParams.get("filter.v.price.lte")===maxPrice.toString()&&searchParams.delete("filter.v.price.lte")}return searchParams}onActiveFilterClick(event){event.preventDefault(),document.querySelectorAll("facet-filters-form").forEach(form=>clearTimeout(form.onSubmitTimeout)),FacetFiltersForm.toggleActiveFacets();const url=event.currentTarget.href.indexOf("?")==-1?"":event.currentTarget.href.slice(event.currentTarget.href.indexOf("?")+1);FacetFiltersForm.renderPage(url,event)}}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)),element.addEventListener("keydown",this.onKeyDown.bind(this))}),this.setMinAndMaxValues(),this.priceSlider()}connectedCallback(){this.priceSlider()}onRangeChange(event){this.adjustToValidValues(event.currentTarget),this.setMinAndMaxValues()}onKeyDown(event){if(event.metaKey)return;const pattern=/[0-9]|\.|,|'| |Tab|Backspace|Enter|ArrowUp|ArrowDown|ArrowLeft|ArrowRight|Delete|Escape/;event.key.match(pattern)||event.preventDefault()}setMinAndMaxValues(){const inputs=this.querySelectorAll("input"),minInput=inputs[0],maxInput=inputs[1];maxInput.value&&minInput.setAttribute("data-max",maxInput.value),minInput.value&&maxInput.setAttribute("data-min",minInput.value),minInput.value===""&&maxInput.setAttribute("data-min",0),maxInput.value===""&&minInput.setAttribute("data-max",maxInput.getAttribute("data-max"))}adjustToValidValues(input){const value=Number(input.value),min=Number(input.getAttribute("data-min")),max=Number(input.getAttribute("data-max"));value<min&&(input.value=min),value>max&&(input.value=max)}priceSlider(){const sliderRange=this.querySelector(".price-slider-range");if(!sliderRange)return;const[minInput,maxInput]=this.querySelectorAll("input"),form=this.closest("facet-filters-form")||document.querySelector("facet-filters-form"),event=new CustomEvent("input"),minValue=parseFloat(minInput.value.replace(",",""))||0,maxValue=parseFloat(maxInput.value.replace(",",""))||parseFloat(sliderRange.dataset.max);sliderRange.noUiSlider&&sliderRange.noUiSlider.destroy();const direction=document.documentElement.dir==="rtl"?"rtl":"ltr",currencySymbol=this.querySelector(".field-currency")?.textContent.trim()||"",tooltipFormat={to:value=>currencySymbol+Math.round(value),from:value=>Number(String(value).replace(currencySymbol,""))};noUiSlider.create(sliderRange,{start:[minValue,maxValue],direction,connect:!0,step:10,tooltips:[tooltipFormat,tooltipFormat],handleAttributes:[{"aria-label":"lower"},{"aria-label":"upper"}],range:{min:0,max:parseFloat(sliderRange.dataset.max)}}),sliderRange.noUiSlider.on("update",values=>{minInput.value=Math.round(parseFloat(values[0])),maxInput.value=Math.round(parseFloat(values[1]))});let debounceTimer;sliderRange.noUiSlider.on("set",values=>{clearTimeout(debounceTimer),debounceTimer=setTimeout(()=>{minInput.value=Math.round(parseFloat(values[0])),maxInput.value=Math.round(parseFloat(values[1])),form.querySelector("form")?.dispatchEvent(event)},100)})}}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.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);function reinitializeCustomElements(){const container=document.querySelector(".section-collection-
1products-grid");container&&container.querySelectorAll("collapsible-details").forEach(element=>{const isOpen=element.querySelector("details")?.open,newElement=element.cloneNode(!0);element.replaceWith(newElement),requestAnimationFrame(()=>{typeof newElement.connectedCallback=="function"&&newElement.connectedCallback();const newDetails=newElement.querySelector("details");isOpen&&(newDetails.open=!0)})})}function viewMode(){class ViewModeController{constructor(gridId,desktopBtnSelector,mobileBtnSelector){this.gridId=gridId,this.desktopBtnSelector=desktopBtnSelector,this.mobileBtnSelector=mobileBtnSelector,this.grid=document.getElementById(gridId),this.desktopButtons=document.querySelectorAll(desktopBtnSelector),this.mobileButtons=document.querySelectorAll(mobileBtnSelector),this.isCustomizer=window.Shopify?.designMode,this.tempStorage={desktop:null,mobile:null},this.config={desktop:{key:"productDesktopViewCols",regex:/^lg:grid-cols-\d+$/,prefix:"lg:",default:"4"},mobile:{key:"productMobileViewCols",regex:/^grid-cols-\d+(?!.*lg:)$/,prefix:"",default:"2"}},this.currentMode=null,this.currentCols=null,this.init()}getDefaultCols(mode){if(!this.grid)return this.config[mode].default;const dataAttr=this.grid.getAttribute(`data-${mode}-cols`);if(dataAttr)return dataAttr;const colClass=Array.from(this.grid.classList).find(cls=>this.config[mode].regex.test(cls));return colClass?colClass.match(/\d+/)[0]:this.config[mode].default}init(){if(!this.grid||this.desktopButtons.length===0&&this.mobileButtons.length===0)return;this.isCustomizer&&(localStorage.removeItem(this.config.desktop.key),localStorage.removeItem(this.config.mobile.key),["load","select"].forEach(event=>{document.addEventListener(`shopify:section:${event}`,()=>this.handleCustomizerUpdate())})),this.applyViewMode(!0),this.registerEvents();let resizeTimeout;window.addEventListener("resize",()=>{clearTimeout(resizeTimeout),resizeTimeout=setTimeout(()=>{this.getCurrentMode()!==this.currentMode&&this.applyViewMode()},150)})}handleCustomizerUpdate(){this.grid=document.getElementById(this.gridId),this.desktopButtons=document.querySelectorAll(this.desktopBtnSelector),this.mobileButtons=document.querySelectorAll(this.mobileBtnSelector),this.grid&&(this.tempStorage={desktop:null,mobile:null},this.currentMode=null,this.currentCols=null,this.applyViewMode(!0),this.registerEvents())}getCurrentMode(){return window.matchMedia("(min-width: 64rem)").matches?"desktop":"mobile"}getSavedCols(mode){const{key}=this.config[mode];return this.isCustomizer?this.tempStorage[mode]||this.getDefaultCols(mode):localStorage.getItem(key)||this.getDefaultCols(mode)}applyViewMode(forceUpdate=!1){if(!this.grid)return;const mode=this.getCurrentMode(),cols=this.getSavedCols(mode),buttons=mode==="desktop"?this.desktopButtons:this.mobileButtons;if(buttons.length&&(forceUpdate||mode!==this.currentMode||cols!==this.currentCols)){const{regex,prefix}=this.config[mode];Array.from(this.grid.classList).filter(cls=>regex.test(cls)).forEach(cls=>this.grid.classList.remove(cls)),this.grid.classList.add(`${prefix}grid-cols-${cols}`),buttons.forEach(btn=>{btn.classList.toggle("active",btn.getAttribute("data-view-mode")===cols)}),this.currentMode=mode,this.currentCols=cols,this.restartGridAnimations()}}registerEvents(){const setupButtons=(buttons,mode)=>{buttons.forEach(btn=>{const newBtn=btn.cloneNode(!0);btn.parentNode?.replaceChild(newBtn,btn),newBtn.addEventListener("click",()=>{const value=newBtn.getAttribute("data-view-mode");this.isCustomizer?this.tempStorage[mode]=value:localStorage.setItem(this.config[mode].key,value),this.applyViewMode(!0)})})};this.desktopButtons.length&&(setupButtons(this.desktopButtons,"desktop"),this.desktopButtons=document.querySelectorAll(this.desktopBtnSelector)),this.mobileButtons.length&&(setupButtons(this.mobileButtons,"mobile"),this.mobileButtons=document.querySelectorAll(this.mobileBtnSelector))}restartGridAnimations(){this.grid.querySelectorAll(".scroll-trigger, .animate--slide-in").forEach(el=>{el.classList.add("scroll-trigger--offscreen"),el.classList.remove("scroll-trigger--cancel"),el.hasAttribute("data-cascade")&&el.style.removeProperty("--animation-order")}),typeof initializeScrollAnimationTrigger=="function"&&initializeScrollAnimationTrigger(this.grid)}}new ViewModeController("product-grid",".view-mode__button",".view-mode__button-mobile")}
2//# sourceMappingURL=/cdn/shop/t/38/assets/facets.js.map?v=18399410726093343911789485315

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.