https://www.dulcie.world/cdn/shop/t/63/assets/collection-filters.js?v=168462867154154287191763461577
1const PAGINATION_TYPES={STATIC:"STATIC",LOAD_MORE:"LOAD_MORE"};class Cache{constructor(){this.cache=new Map}exists(key){return this.cache.has(key)}set(key,value){this.cache.set(key,value)}get(key){return this.cache.get(key)}delete(key){this.cache.delete(key)}}class DataFetcher{constructor(){this.cache=new Cache}async fetch(url,section){return this.cache.exists(url)?this.cache.get(url):await this.#fetchData(url,section)}async#fetchData(url,section){const html=await window.BAO.sectionRenderer.fetchSingle(section,url);return this.cache.set(url,html),html}}class BasePaginationRenderer{constructor(element){this.element=element}render(document2,event){this.renderProductGrid(document2,event)}renderProductGrid(document2,event){this.element.throwError(`${this.constructor.name}.render not implemented`)}}class StaticPaginationRenderer extends BasePaginationRenderer{renderProductGrid(document2){const productGrid=this.element.els["product-grid"].element;productGrid&&(this.element.log(`${this.constructor.name}.renderProductGrid`,{productGrid,document:document2}),productGrid.innerHTML=window.BAO.Utils.getElement(this.element.els["product-grid"].selector,{context:document2}).innerHTML)}}class LoadMorePaginationRenderer extends BasePaginationRenderer{renderProductGrid(html,e){if(!this.element.els["product-grid"].element)return;const direction=this.getPaginationDirection(e),newItems=document.createDocumentFragment(),newElements=window.BAO.Utils.getElements(`[${this.element._elIdentifier}="item"]`,{context:html});newElements.forEach(el=>newItems.appendChild(el)),direction==null?(this.element.els["item-container"].element.innerHTML="",this.element.els["item-container"].element.append(newItems)):direction==="PREVIOUS"?this.element.els["item-container"].element.prepend(newItems):direction==="NEXT"&&this.element.els["item-container"].element.append(newItems),this.renderLoadPrevious(html),this.renderLoadMore(html),document.querySelectorAll(`[${this.element._elIdentifier}="item"] img[srcset]`).forEach(image=>{image.outerHTML=image.outerHTML}),document.querySelector(`[${this.element._elIdentifier}="productpanel"]`).setAttribute("aria-hidden",(newElements.length===0).toString()),document.querySelector(`[${this.element._elIdentifier}="emptypanel"]`).setAttribute("aria-hidden",(newElements.length>0).toString())}getPaginationDirection(e){if(typeof e>"u")return null;const paginationElement=e.target.closest(`${this.element.els["load-previous"].selector}, ${this.element.els["load-more"].selector}`);return paginationElement?paginationElement===this.element.els["load-previous"]?.element?"PREVIOUS":"NEXT":null}renderLoadPrevious(html){if(!this.shouldShowLoadPrevious&&this.element.els["load-previous"])return this.element.els["load-previous"].element.innerHTML="";this.shouldRerenderLoadPrevious&&this.element.els["load-previous"]&&(this.element.els["load-previous"].element.innerHTML=window.BAO.Utils.getElement(this.element.els["load-previous"].selector,{context:html}).innerHTML)}renderLoadMore(html){this.shouldRerenderLoadMore&&this.element.els["load-more"]&&(this.element.els["load-more"].element.innerHTML=window.BAO.Utils.getElement(this.element.els["load-more"].selector,{context:html}).innerHTML)}get shouldShowLoadPrevious(){return window.BAO.Utils.getElement(`${this.element.els.item?.selector}[data-page="1"]`)?!1:this.currentPage>1}get shouldRerenderLoadPrevious(){return this.currentPage<=this.currentLowestPage}get shouldRerenderLoadMore(){return this.currentPage>=this.currentHighestPage}get currentPage(){const page=this.element.searchParams.current.get("page");return Number(page)||1}get currentLowestPage(){if(!this.element.els.item?.selector)return 0;const productGridItems=window.BAO.Utils.getElements(`${this.element.els.item.selector}`);return Number(productGridItems[0].dataset.page)||1}get currentHighestPage(){if(!this.element.els.item?.selector)return 0;const productGridItems=window.BAO.Utils.getElements(`${this.element.els.item.selector}`);return Number(productGridItems[productGridItems.length-1].dataset.page)||1}}class Renderer{constructor(element){this.element=element,this.paginationRenderer=this.getPaginationRenderer()}async render(html,event){const newHTMLDom=new DOMParser().parseFromString(html,"text/html");this.renderFacets(newHTMLDom,event),this.renderActiveFacets(newHTMLDom),this.paginationRenderer.render(newHTMLDom,event),this.renderProductCount(newHTMLDom),this.renderSortLabel(newHTMLDom),this.renderAdditional(newHTMLDom),this.renderFacetSummary(newHTMLDom),this.renderFacetsTrigger(newHTMLDom),this.element.loading=!1}renderFacets(document2,event){const getFacetSelector=facet=>{const selectorParts={class:`.${Array.from(facet.classList).join(".")}`,additional:`${this.element.els.facet.selector}[data-index="${facet.dataset.index}"]`};return Object.values(selectorParts).join("")},currentFacetElements=this.element.els.facet.elements,facetThatSubmitted=event?.submitter?.closest(this.element.els.facet.selector),facetsToRenderSimply=event?currentFacetElements.filter(facet=>facet!==facetThatSubmitted):currentFacetElements;this.element.log("renderFacets",{currentFacetElements,facetThatSubmitted,facetsToRenderSimply}
1),facetsToRenderSimply.forEach(facet=>{const selector=getFacetSelector(facet),el=window.BAO.Utils.getElement(selector,{context:document2});el||this.element.throwError(`Could not find element with selector ${selector}`),facet.innerHTML=el.innerHTML})}renderActiveFacets(document2){const activeFacets=this.element.els["active-facets"].elements;activeFacets.length<=0||activeFacets.forEach(activeFacet=>{const selectorParts={class:`.${Array.from(activeFacet.classList).join(".")}`,id:`#${activeFacet.id}`,additional:`${this.element.els["active-facets"].selector}`};if(activeFacets.length>1&&!activeFacet.id)throw new Error("Multiple active facets found, so all require an ID");const selector=Object.values(selectorParts).join(""),activeFacetElement=document2.querySelector(selector);if(this.element.log("renderActiveFacets",{parsedHTML:document2,activeFacetElement,selector}),!activeFacetElement)return;const currentEl=window.BAO.Utils.getElement(selector);if(!currentEl)return;const hasActiveItems=!!window.BAO.Utils.getElement("facet-remove",{context:activeFacetElement});activeFacet.dataset.empty=(!hasActiveItems).toString(),currentEl.innerHTML=activeFacetElement.innerHTML})}renderProductCount(document2){const existingProductCounts=window.BAO.Utils.getElements(this.element.els["product-count"]?.selector),newProductCount=window.BAO.Utils.getElement(this.element.els["product-count"]?.selector,{context:document2});newProductCount&&existingProductCounts.forEach(element=>element.innerHTML=newProductCount.innerHTML)}renderSortLabel(document2){const existingSortLabels=window.BAO.Utils.getElements(this.element.els["sort-label"]?.selector),existingSortLabel=window.BAO.Utils.getElement(this.element.els["sort-label"]?.selector,{context:document2});
1existingSortLabel&&existingSortLabels.forEach(element=>element.innerHTML=existingSortLabel.innerHTML)}renderAdditional(document2){const existingFiltersButtonText=window.BAO.Utils.getElement("[data-mobile-filters-button-text]");if(!existingFiltersButtonText)return;const newFiltersButtonText=window.BAO.Utils.getElement("[data-mobile-filters-button-text]",{context:document2});newFiltersButtonText&&(existingFiltersButtonText.innerHTML=newFiltersButtonText.innerHTML)}renderFacetSummary(document2){const facetSummaries=this.element.els["facet-summary"].elements;facetSummaries.length<=0||facetSummaries.forEach(facetSummary=>{const selectorParts={id:`#${facetSummary.id}`,additional:`${this.element.els["facet-summary"].selector}`};if(facetSummaries.length>1&&!facetSummary.id)throw new Error("Multiple active facets found, so all require an ID");const selector=Object.values(selectorParts).join(""),facetSummaryElement=document2.querySelector(selector);if(!facetSummaryElement)return;const currentEl=window.BAO.Utils.getElement(selector);currentEl&&(currentEl.outerHTML=facetSummaryElement.outerHTML)})}renderFacetsTrigger(document2){const facetCounts=this.element.els["facet-count"].elements;facetCounts.length<=0||facetCounts.forEach(facetCount=>{const selectorParts={id:`#${facetCount.id}`,additional:`${this.element.els["facet-count"].selector}`};if(facetCounts.length>1&&!facetCount.id)throw new Error("Multiple active facets found, so all require an ID");const selector=Object.values(selectorParts).join(""),facetCountElement=document2.querySelector(selector);if(!facetCountElement)return;const currentEl=window.BAO.Utils.getElement(selector);currentEl&&(currentEl.innerHTML=facetCountElement.innerHTML)})}getPaginationRenderer(){switch(this.paginationType){case PAGINATION_TYPES.STATIC:return new StaticPaginationRenderer(this.element);case PAGINATION_TYPES.LOAD_MORE:return new LoadMorePaginationRenderer(this.element);default:return new StaticPaginationRenderer(this.element)}}get paginationType(){return this.element.dataset.paginationType?this.element.dataset.paginationType:PAGINATION_TYPES.STATIC}}export class CollectionFilters extends window.BAO.CustomElement(){static get styles(){return":host { display: block; }"}static get requiredElements(){return["facets","facet","facet-summary","product-grid"]}fetcher=new DataFetcher;renderer=new Renderer(this);constructor(){super(),this.sections=[{id:this.dataset.sectionId,section:this.dataset.sectionType,selector:".shopify-section"}],this.searchParams={previous:new URLSearchParams(window.location.search),current:new URLSearchParams(window.location.search),initial:new URLSearchParams(window.location.search)}}setupListeners(){super.setupListeners(),this.onLinkClick=this.onLinkClick.bind(this),this.debouncedOnSubmit=window.BAO.Utils.debounce(e=>this.onSubmit(e),500),this.listeners.add(this,"input",this.debouncedOnSubmit.bind(this)),this.listeners.add(this,"submit",this.onFormSubmit.bind(this)),this.listeners.add(window,"popstate",this.onHistoryChange.bind(this)),this.listeners.add(this,"click",this.onPaginationClick.bind(this))}onLinkClick(event){event.preventDefault();const searchParams=new URLSearchParams(event.target.search);this.renderPage({searchParams:searchParams.toString()})}onSubmit(event){event.preventDefault(),event.target.closest("form").dispatchEvent(new Event("submit",{bubbles:!0,cancelable:!0}))}onFormSubmit(event){if(event.preventDefault(),window.BAO.Utils.getElement("[data-product-add-to-cart]",{context:event.target}))return;const formData=new FormData(event.target),searchParams=new URLSearchParams(formData).toString();this.renderPage({searchParams,event}),!window.BAO.MediaBreakpoints.isSm&&this.els["product-grid"].element.scrollIntoView({behavior:"smooth"})}onHistoryChange(event){const searchParams=event.state.searchParams;searchParams&&searchParams.toString()!==this.searchParams.previous.toString()&&this.renderPage({searchParams,updateURLHash:!1})}async onPaginationClick(event){if(!event.target.closest(this.els?.pagination?.selector))return;const anchor=event.target.closest("a");if(this.log("onPaginationClick",{anchor}),!anchor||anchor.getAttribute("href")===""||anchor.disabled)return;event.preventDefault();const page=new URLSearchParams(anchor.search).get("page")??"1",currentSearchParams=new URLSearchParams(this.searchParams.current.toString());currentSearchParams.set("page",page),await this.renderPage({searchParams:currentSearchParams.toString(),event})}async renderPage({searchParams,event,updateURLHash=!0}={}){this.log("renderPage",{searchParams,event,updateURLHash}),this.searchParams.previous=this.searchParams.current,this.searchParams.current=ne
1w URLSearchParams(searchParams),this.loading=!0,updateURLHash&&this.updateURLHash(this.searchParams.current);for(const section of this.sections){const url=`${window.location.pathname}?section_id=${section.section}&${this.searchParams.current.toString()}`;this.log("renderPageSections",{section,url});const html=await this.fetcher.fetch(url,section.id);await this.renderer.render(html,event)}}updateURLHash(searchParams){history.pushState({searchParams:searchParams.toString()},"",`${window.location.pathname}${searchParams&&"?".concat(searchParams.toString())}`)}get loading(){return this.getAttribute("aria-busy")==="true"}set loading(val){this.setAttribute("aria-busy",val.toString())}}customElements.get("collection-filters")||customElements.define("collection-filters",CollectionFilters); 2//# sourceMappingURL=/cdn/shop/t/63/assets/collection-filters.js.map?v=168462867154154287191763461577
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.