PageSourceSearch

https://isto.pt/cdn/shop/t/11/assets/isto_asset_facets.js?v=15786174126572768851783004597

js isto.pt collected 2026-09-26 01:54:45 UTC 16,766 bytes, 2 lines download raw bytes

1class FacetFiltersForm extends HTMLElement{constructor(){super(),this.onActiveFilterClick=this.onActiveFilterClick.bind(this),this.debouncedOnSubmit=debounce(event=>{this.onSubmitHandler(event)},800),this.querySelector("form").addEventListener("input",this.debouncedOnSubmit.bind(this));const facetWrapper=this.querySelector("#FacetsWrapperDesktop");facetWrapper&&facetWrapper.addEventListener("keyup",onKeyUpEscape),document.readyState=="complete"?FacetFiltersForm.updateProgressBar():window.addEventListener("DOMContentLoaded",()=>FacetFiltersForm.updateProgressBar())}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(),countContainer=document.getElementById("ProductCount"),countContainerDesktop=document.getElementById("ProductCountDesktop");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"),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),typeof initializeScrollAnimationTrigger=="function"&&initializeScrollAnimationTrigger(html.innerHTML),FacetFiltersForm.updateProgressBar()})}static renderSectionFromCache(filterDataUrl,event){const html=FacetFiltersForm.filterData.find(filterDataUrl).html;FacetFiltersForm.renderFilters(html,event),FacetFiltersForm.renderProductGridContainer(html),FacetFiltersForm.renderProductCount(html),typeof initializeScrollAnimationTrigger=="function"&&initializeScrollAnimationTrigger(html.innerHTML),FacetFiltersForm.updateProgressBar()}static renderProductGridContainer(html){document.getElementById("ProductGridContainer").innerHTML=new DOMParser().parseFromString(html,"text/html").getElementById("ProductGridContainer").innerHTML,window.ISTOVariantSort?.sortAll(document.getElementById("ProductGridContainer")),document.getElementById("ProductGridContainer").querySelectorAll(".scroll-trigger").forEach(element=>{element.classList.add("scroll-trigger--cancel")}),typeof variantImages=="function"&&variantImages()}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")),document.querySelectorAll(".facets-container .loading__spinner, facet-filters-form .loading__spinner").forEach(spinner=>spinner.classList.add("hidden"))}static createProgressBar(){const progressBarContainer=document.getElementById("progress-bar-container");
1if(!progressBarContainer)return console.error("Progress bar container not found"),null;const progressBarOuter=document.createElement("div");progressBarOuter.id="progress-bar";const progressBarInner=document.createElement("div");return progressBarInner.id="progress-bar-inner",progressBarOuter.appendChild(progressBarInner),progressBarContainer.innerHTML="",progressBarContainer.appendChild(progressBarOuter),{outer:progressBarOuter,inner:progressBarInner}}static getTotalCount(){const totalCountElement=document.getElementById("ProductCount");if(!totalCountElement)return console.error("Total count element not found"),null;const totalCountMatch=totalCountElement.textContent.match(/\d+/);return parseInt(totalCountMatch?totalCountMatch[0]:0)}static updateProgressBar(){if(!FacetFiltersForm.createProgressBar())return;const totalCount=FacetFiltersForm.getTotalCount();if(!totalCount&&totalCount===null)return;const loadedProducts=document.querySelectorAll("#product-grid li.grid__item").length,progressElement=document.getElementById("progress"),totalElement=document.getElementById("total");progressElement&&(progressElement.innerHTML=`${loadedProducts}`),totalElement&&(totalElement.innerHTML=`${totalCount}`);const progressPercentage=Math.min(loadedProducts/totalCount*100,100),progressBarInner=document.getElementById("progress-bar-inner");progressBarInner&&(progressBarInner.style.width=`${progressPercentage}%`)}static renderFilters(html,event){const parsedHTML=new DOMParser().parseFromString(html,"text/html"),facetDetailsElementsFromFetch=parsedHTML.querySelectorAll("#FacetFiltersForm .js-filter, #FacetFiltersFormMobile .js-filter, #FacetFiltersPillsForm .js-filter"),facetDetailsElementsFromDom=document.querySelectorAll("#FacetFiltersForm .js-filter, #FacetFiltersFormMobile .js-filter, #FacetFiltersPillsForm .js-filter");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)=>{if(document.getElementById(elementToRender.id))document.getElementById(elementToRender.id).innerHTML=elementToRender.innerHTML;else{if(index>0){const{className:previousElementClassName,id:previousElementId}=facetsToRender[index-1];if(elementToRender.className===previousElementClassName){document.getElementById(previousElementId).after(elementToRender);return}}elementToRender.parentElement&&document.querySelector(`#${elementToRender.parentElement.id} .js-filter`).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()}}}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=>{html.querySelector(selector)&&(document.querySelector(selector).innerHTML=html.querySelector(selector).innerHTML)}),document.getElementById("FacetFiltersFormMobile").closest("menu-drawer").bindEvents()}static renderCounts(source,target){const targetSummary=target.querySelector(".facets__summary"),sourceSummary=source.querySelector(".facets__summary");
1sourceSummary&&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");if(event.srcElement.className=="mobile-facets__checkbox"){const searchParams=this.createSearchParams(event.target.closest("form"));this.onSubmitForm(searchParams,event)}else{const forms=[],isMobile=event.target.closest("form").id==="FacetFiltersFormMobile";sortFilterForms.forEach(form=>{isMobile?form.id==="FacetFiltersFormMobile"&&forms.push(this.createSearchParams(form)):(form.id==="FacetSortForm"||form.id==="FacetFiltersForm"||form.id==="FacetSortDrawerForm")&&forms.push(this.createSearchParams(form))}),this.onSubmitForm(forms.join("&"),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(),document.addEventListener("DOMContentLoaded",()=>{FacetFiltersForm.updateProgressBar();const productGrid=document.getElementById("productGrid");productGrid&&new MutationObserver(()=>{FacetFiltersForm.updateProgressBar()}).observe(productGrid,{childList:!0,subtree:!0})});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()}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)}}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);class Ajaxinate{constructor(config){this.settings=Object.assign({pagination:".AjaxinatePagination",method:"click",container:".AjaxinateLoop",offset:0,loadingText:"Loading...",callback:null},config||{}),this.addScrollListeners=this.addScrollListeners.bind(this),this.addClickListener=this.addClickListener.bind(this),this.checkIfPaginationInView=this.checkIfPaginationInView.bind(this),this.stopMultipleClicks=this.stopMultipleClicks.bind(this),this.destroy=this.destroy.bind(this),this.containerElement=document.querySelector(this.settings.container),this.paginationElement=document.querySelector(this.settings.pagination),this.containerElement&&this.paginationElement&&this.initialize()}initialize(){({click:this.addClickListener,scroll:this.addScrollListeners})[this.settings.method]()}addScrollListeners(){this.paginationElement&&(window.addEventListener("scroll",this.checkIfPaginationInView),window.addEventListener("resize",this.checkIfPaginationInView),window.addEventListener("orientationchange",this.checkIfPaginationInView),this.checkIfPaginationInView())}addClickListener(){this.paginationElement&&(this.nextPageLinkElement=this.paginationElement.querySelector("a"),this.nextPageLinkElement&&this.nextPageLinkElement.addEventListener("click",this.stopMultipleClicks))}stopMultipleClicks(event){event.preventDefault(),!this.nextPageLinkElement.classList.contains("loading")&&(this.nextPageLinkElement.classList.add("loading"),this.nextPageLinkElement.textContent=this.settings.loadingText,this.loadMore())}checkIfPaginationInView(){this.paginationElement.getBoundingClientRect().top-window.innerHeight<=this.settings.offset&&(this.loadMore(),this.removeScrollListener())}loadMore(){if(!this.paginationElement)return;const nextPageLink=this.paginationElement.querySelector("a");if(!nextPageLink)return;const nextPageUrl=nextPageLink.href;this.request=new XMLHttpRequest,this.request.onreadystatechange=()=>{if(this.request.readyState===4&&this.request.status===200){const responseDOM=new DOMParser().parseFromString(this.request.responseText,"text/html"),newContainer=responseDOM.querySelector(this.settings.container),newPagination=responseDOM.querySelector(this.settings.pagination);newContainer&&(window.ISTOVariantSort?.sortAll(newContainer),this.containerElement.insertAdjacentHTML("beforeend",newContainer.innerHTML)),newPagination?this.paginationElement.innerHTML=newPagination.innerHTML:(this.paginationElement.innerHTML="",this.removeScrollListener()),this.settings.callback&&typeof this.settings.callback=="function"&&this.settings.callback(responseDOM),FacetFiltersForm.updateProgressBar(),this.initialize()}},this.request.open("GET",nextPageUrl),this.request.send()}
1removeClickListener(){if(this.paginationElement){const nextPageLink=this.paginationElement.querySelector("a");nextPageLink&&nextPageLink.removeEventListener("click",this.stopMultipleClicks)}}removeScrollListener(){window.removeEventListener("scroll",this.checkIfPaginationInView),window.removeEventListener("resize",this.checkIfPaginationInView),window.removeEventListener("orientationchange",this.checkIfPaginationInView)}destroy(){return{click:this.removeClickListener,scroll:this.removeScrollListener}[this.settings.method](),this}}let endlessScroll=null;document.addEventListener("DOMContentLoaded",()=>{initAjaxinate(),document.addEventListener("facetsUpdated",function(){initAjaxinate()})});function initAjaxinate(){endlessScroll&&endlessScroll.destroy(),endlessScroll=new Ajaxinate({container:"#product-grid",pagination:"#collection-grid-pagination",method:"click",callback:function(){FacetFiltersForm.updateProgressBar()}})}
2//# sourceMappingURL=/cdn/shop/t/11/assets/isto_asset_facets.js.map?v=15786174126572768851783004597

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.