PageSourceSearch

https://www.lussostone.com/cdn/shop/t/318/assets/facets.js?v=105270136243176831551790844738

js lussostone.com collected 2026-10-02 07:41:27 UTC 14,275 bytes, 2 lines download raw bytes

1class FacetFiltersForm extends HTMLElement{constructor(){super(),this.onActiveFilterClick=this.onActiveFilterClick.bind(this),this.onSubmitHandler=this.onSubmitHandler.bind(this);const facetForm=this.querySelector("form");this.bindSortChangeEvents(facetForm),this.bindApplyButton(facetForm);const facetWrapper=this.querySelector("#FacetsWrapperDesktop");facetWrapper&&facetWrapper.addEventListener("keyup",onKeyUpEscape)}bindSortChangeEvents(facetForm){facetForm.querySelectorAll('select[name="sort_by"]').forEach(sortInput=>{sortInput.addEventListener("change",event=>{const params=new URLSearchParams(window.location.search);params.set("sort_by",event.target.value),params.delete("page"),this.onSubmitForm(params.toString(),event)})})}bindApplyButton(facetForm){const applyButton=facetForm.querySelector('.mobile-facets__footer button[type="button"]');applyButton&&applyButton.addEventListener("click",this.onSubmitHandler)}static setListeners(){const onHistoryChange=event=>{let searchParams;if(event.state&&event.state.searchParams!==void 0)searchParams=event.state.searchParams;else{const initial=new URLSearchParams(FacetFiltersForm.searchParamsInitial);initial.delete("page"),searchParams=initial.toString()}if(searchParams===FacetFiltersForm.searchParamsPrev)return;const nostoSearchGrid=window.__nostoSearchGrid;if(nostoSearchGrid&&nostoSearchGrid.ready){nostoSearchGrid.applyFilters(searchParams),FacetFiltersForm.searchParamsPrev=searchParams;return}const nostoCollectionGrid=window.__nostoCollectionGrid;if(nostoCollectionGrid&&nostoCollectionGrid.ready){nostoCollectionGrid.applyFilters(searchParams),FacetFiltersForm.searchParamsPrev=searchParams;return}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(),countContainerDesktop=document.getElementById("ProductCountDesktop"),gridContainer=document.getElementById("ProductGridContainer"),collectionEl=gridContainer?gridContainer.querySelector(".collection"):null;collectionEl&&collectionEl.classList.add("loading"),countContainerDesktop&&countContainerDesktop.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.renderAppliedFiltersCount(html),FacetFiltersForm.renderAppliedFilterCount(html)})}static renderSectionFromCache(filterDataUrl,event){const html=FacetFiltersForm.filterData.find(filterDataUrl).html;FacetFiltersForm.renderFilters(html,event),FacetFiltersForm.renderProductGridContainer(html),FacetFiltersForm.renderAppliedFiltersCount(html),FacetFiltersForm.renderAppliedFilterCount(html)}static renderProductGridContainer(html){const nostoGrid=window.__nostoCollectionGrid;if(nostoGrid&&nostoGrid.ready){const newFallback=new DOMParser().parseFromString(html,"text/html").getElementById("ShopifyCollectionFallback"),currentFallback=document.getElementById("ShopifyCollectionFallback");newFallback&&currentFallback&&(currentFallback.innerHTML=newFallback.innerHTML);return}document.getElementById("ProductGridContainer").innerHTML=new DOMParser().parseFromString(html,"text/html").getElementById("ProductGridContainer").innerHTML}static renderAppliedFiltersCount(html){const filtersCount=document.querySelector(".mobile-facets__clear-wrapper .filters__count");if(!filtersCount)return;const parsedHTML=new DOMParser().parseFromString(html,"text/html"),checkedCount=parsedHTML.querySelectorAll(".mobile-facets__checkbox[checked]").length,priceMin=parsedHTML.querySelector('input[name="filter.v.price.gte"]'),priceMax=parsedHTML.querySelector('input[name="filter.v.price.lte"]'),priceCount=priceMin?.value!==""&&priceMin?.value!=null||priceMax?.value!==""&&priceMax?.value!=null?1:0,count=checkedCount+priceCount;filtersCount.innerHTML=` (${count})`}static renderAppliedFilterCount(html){new DOMParser().parseFromString(html,"text/html").querySelectorAll(".mobile-facets__details:not(.facet-sort, .facet-price)").forEach(element=>{const index=element.dataset.index,count=element.querySelectorAll(".mobile-facets__checkbox[checked]").length,target=document.querySelector(`.mobile-facets__details[data-index="${index}"] .filter_active_values_count`);target&&(target.innerHTML=count>0?`(${count})`:"")})}static renderProductCount(html){const count=new DOMParser().parseFromString(html,"text/html").getElementById("ProductCount").innerHTML,container=document.getElementById("ProductCount"),containerDesktop=document.getElementById("ProductCountDesktop");container.innerHTML=count,container.classList.remove("loading"),containerDesktop&&(containerDesktop.innerHTML=count,containerDesktop.classList.remove("loading"))}static renderFilters(html,event){const parsedHTML=new DOMParser().parseFromString(html,"text/html"),facetDetailsElements=parsedHTML.querySelectorAll("#FacetFiltersForm .js-filter, #FacetFiltersFormMobile .js-filter"),matchesIndex=element=>
1{const jsFilter=event?event.target.closest(".js-filter"):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),responseKeys=new Set(Array.from(facetDetailsElements).map(el=>el.dataset.filterKey).filter(Boolean));document.querySelectorAll(".js-filter[data-filter-key]").forEach(domFilter=>{const key=domFilter.dataset.filterKey;key&&!responseKeys.has(key)?(domFilter.hidden=!0,domFilter.querySelectorAll("input, select").forEach(el=>{el.disabled=!0})):key&&responseKeys.has(key)&&(domFilter.hidden=!1,domFilter.querySelectorAll("input, select").forEach(el=>{el.disabled=!1}))}),facetsToRender.forEach(element=>{const filterKey=element.dataset.filterKey;filterKey&&document.querySelectorAll(`.js-filter[data-filter-key="${filterKey}"]`).forEach(target=>{const sourceList=element.querySelector(".js-facets-list"),targetList=target.querySelector(".js-facets-list");sourceList&&targetList&&(targetList.innerHTML=sourceList.innerHTML);const sourceSummary=element.querySelector(".facets__summary, summary"),targetSummary=target.querySelector(".facets__summary, summary");
1sourceSummary&&targetSummary&&(targetSummary.innerHTML=sourceSummary.innerHTML);const sourceHeader=element.querySelector(".facets__header, .facets__header-vertical"),targetHeader=target.querySelector(".facets__header, .facets__header-vertical");sourceHeader&&targetHeader&&(targetHeader.innerHTML=sourceHeader.innerHTML);const sourceTitle=element.querySelector(".filter_active_values_count"),targetTitle=target.querySelector(".filter_active_values_count");sourceTitle&&targetTitle&&(targetTitle.innerHTML=sourceTitle.innerHTML)})});const priceMinSource=parsedHTML.querySelector('input[name="filter.v.price.gte"]'),priceMaxSource=parsedHTML.querySelector('input[name="filter.v.price.lte"]');if(document.querySelectorAll('input[name="filter.v.price.gte"]').forEach(el=>{el.value=priceMinSource?priceMinSource.value:""}),document.querySelectorAll('input[name="filter.v.price.lte"]').forEach(el=>{el.value=priceMaxSource?priceMaxSource.value:""}),FacetFiltersForm.renderActiveFacets(parsedHTML),FacetFiltersForm.renderAdditionalElements(parsedHTML),countsToRender){const countsTarget=event&&event.target?event.target.closest(".js-filter"):null;countsTarget&&FacetFiltersForm.renderCounts(countsToRender,countsTarget)}}static renderActiveFacets(html){[".active-facets-mobile",".active-facets-desktop"].forEach(selector=>{const activeFacetsElement=html.querySelector(selector);activeFacetsElement&&(document.querySelector(selector).innerHTML=activeFacetsElement.innerHTML)}),FacetFiltersForm.toggleActiveFacets(!1)}static renderAdditionalElements(html){[".mobile-facets__open",".mobile-facets__count",".sorting"].forEach(selector=>{const source=html.querySelector(selector),target=document.querySelector(selector);!source||!target||(target.innerHTML=source.innerHTML)});const mobileForm=document.getElementById("FacetFiltersFormMobile"),menuDrawer=mobileForm&&mobileForm.closest("menu-drawer");menuDrawer&&typeof menuDrawer.bindEvents=="function"&&menuDrawer.bindEvents()}static renderCounts(source,target){const targetElement=target.querySelector(".facets__selected"),sourceElement=source.querySelector(".facets__selected"),targetElementAccessibility=target.querySelector(".facets__summary"),sourceElementAccessibility=source.querySelector(".facets__summary");sourceElement&&targetElement&&(target.querySelector(".facets__selected").outerHTML=source.querySelector(".facets__selected").outerHTML),targetElementAccessibility&&sourceElementAccessibility&&(target.querySelector(".facets__summary").outerHTML=source.querySelector(".facets__summary").outerHTML);const sourceCount=source.querySelector(".filter_active_values_count"),targetCount=target.querySelector(".filter_active_values_count");sourceCount&&targetCount&&(targetCount.innerHTML=sourceCount.innerHTML)}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){const nostoSearchGrid=window.__nostoSearchGrid;if(nostoSearchGrid&&nostoSearchGrid.ready){nostoSearchGrid.applyFilters(searchParams);return}const nostoCollectionGrid=window.__nostoCollectionGrid;if(nostoCollectionGrid&&nostoCollectionGrid.ready){nostoCollectionGrid.applyFilters(searchParams);return}FacetFiltersForm.renderPage(searchParams,event)}onSubmitHandler(event){event.preventDefault();const isPriceEvent=!!event.target.closest("price-range, .facet-price");if(event.target.className=="mobile-facets__checkbox"){let searchParams=this.createSearchParams(event.target.closest("form"));const p=new URLSearchParams(searchParams),gteVal=document.querySelector('input[name="filter.v.price.gte"]')?.value||"",lteVal=document.querySelector('input[name="filter.v.price.lte"]')?.value||"";gteVal?p.set("filter.v.price.gte",gteVal):p.delete("filter.v.price.gte"),lteVal?p.set("filter.v.price.lte",lteVal):p.delete("filter.v.price.lte"),searchParams=p.toString(),this.onSubmitForm(searchParams,event)}else{const eventForm=event.target.closest("form"),isMobile=eventForm.id==="FacetFiltersFormMobile",forms=[];if(isMobile)forms.push(this.createSearchParams(eventForm));else{const desktopFilterForm=document.getElementById("FacetFiltersForm");desktopFilterForm&&(document.querySelectorAll(".no-js-list").forEach(el=>el.remove()),forms.push(this.createSearchParams(desktopFilterForm))),eventForm.id!=="FacetFiltersForm"&&forms.push(this.createSearchParams(eventForm))}const merged=new URLSearchParams(forms.join("&")),gteVal=document.querySelector('input[name="filter.v.price.gte"]')?.value||"",lteVal=document.querySelector('input[name="filter.v.price.lte"]')?.value||"";gteVal?merged.set("filter.v.price.gte",gteVal):merged.delete("filter.v.price.gte"),lteVal?merged.set("filter.v.price.lte",lteVal):merged.delete("filter.v.price.lte"),this.onSubmitForm(merged.toString(),event)}}onActiveFilterClick(event){event.preventDefault(),FacetFiltersForm.toggleActiveFacets();const url=event.currentTarget.href.indexOf("?")==-1?"":event.currentTarget.href.slice(event.currentTarget.href.indexOf("?")+1),nostoSearchGrid=window.__nostoSearchGrid;if(nostoSearchGrid&&nostoSearchGrid.ready){nostoSearchGrid.applyFilters(url);return}const nostoCollectionGrid=window.__nostoCollectionGrid;if(nostoCollectionGrid&&nostoCollectionGrid.ready){nostoCollectionGrid.applyFilters(url);return}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 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();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);
2//# sourceMappingURL=/cdn/shop/t/318/assets/facets.js.map?v=105270136243176831551790844738

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.