1export 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)}}export 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}}export class Renderer{constructor(element){this.dataFetcher=new DataFetcher,this.element=element,this.currentLowestPage=Number(this.element.els.articles.element.dataset.currentPage)||1,this.currentHighestPage=this.currentLowestPage}async render(url,direction="NEXT"){const html=await this.dataFetcher.fetch(url,this.element.section.section);this.element.log("render",{url,html});const newHTMLDom=new DOMParser().parseFromString(html,"text/html");this.renderArticles(newHTMLDom,direction),this.renderArticleCount(newHTMLDom),this.renderLoadMoreState(newHTMLDom),this.renderLoadPreviousState(newHTMLDom),this.currentPage<this.currentLowestPage&&(this.currentLowestPage=this.currentPage),this.currentPage>this.currentHighestPage&&(this.currentHighestPage=this.currentPage)}renderArticles(document,direction="NEXT"){const newArticles=document.querySelectorAll(this.element?.els?.article?.selector);if(!newArticles)return;this.element.log("renderArticles",{newArticles,direction});const articlesContainer=this.element.els.articles.element,fragment=new DocumentFragment;newArticles.forEach(article=>fragment.append(article)),direction==="NEXT"?articlesContainer.append(fragment):direction==="PREVIOUS"&&articlesContainer.prepend(fragment)}renderArticleCount(document){const count=document.querySelector(this.element?.els["pagination-count"]?.selector)?.innerHTML;this.element.log("renderArticleCount",{count}),count&&this.element.els["pagination-count"].elements.forEach(el=>{el.innerHTML=count})}renderLoadMoreState(document){const loadMore=document.querySelector(this.element?.els["load-more"]?.selector);if(this.element.log("renderLoadMoreState",{loadMore}),!!loadMore&&this.shouldRerenderLoadMore){const[path,searchString]=loadMore.getAttribute("href").split("?"),searchParams=new URLSearchParams(searchString);searchParams.set("page",String(this.currentHighestPage));const isDisabled=loadMore.hasAttribute("disabled");this.element.els["load-more"].element.setAttribute("href",`${path}?${searchParams.toString()}`),this.element.els["load-more"].element.toggleAttribute("disabled",isDisabled),isDisabled?this.element.els["load-more"].element.innerText=window.theme.strings.pagination.showingAllArticles:this.element.els["load-more"].element.innerText=window.theme.strings.pagination.loadMore}}renderLoadPreviousState(document){if(!this.shouldShowLoadPrevious){this.element.els["load-previous-container"].element.innerHTML="";return}const loadPrevious=document.querySelector(this.element?.els["load-previous"]?.selector);if(this.element.log("renderLoadPreviousState",{loadPrevious}),!!loadPrevious){if(this.loadPreviousIsCurrentlyHidden){this.element.els["load-previous-container"].element.innerHTML=document.querySelector(this.element?.els["load-previous-container"]?.selector).innerHTML;return}if(this.shouldRerenderLoadPrevious){const[path,searchString]=loadPrevious.getAttribute("href").split("?"),searchParams=new URLSearchParams(searchString);searchParams.set("page",String(this.currentLowestPage));const isDisabled=loadPrevious.hasAttribute("disabled"),url=searchParams.toString()?`${path}?${searchParams.toString()}`:path;this.element.els["load-previous"].element.setAttribute("href",url),this.element.els["load-previous"].element.toggleAttribute("disabled",isDisabled)}}}get shouldShowLoadPrevious(){return window.BAO.Utils?.getElement(`${this.element.els.article?.selector}[data-page="1"]`)?!1:this.currentPage>1}get loadPreviousIsCurrentlyHidden(){return!this.element.els["load-previous-container"].element.innerHTML}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 lastPage(){return Number(this.element.els.articles.element.dataset.lastPage)}}class BlogArticles extends window.BAO.CustomElement(){static get requiredElements(){return["article","articles","load-more-container","load-previous-container"]}constructor(){super(),this.renderer=new Renderer(this),this.section={id:"template-blog",section:this.dataset.id,selector:".shopify-section"},this.searchParams={previous:new URLSearchParams(window.location.search),current:ne
1w URLSearchParams(window.location.search),initial:new URLSearchParams(window.location.search)}}setupListeners(){super.setupListeners(),this.listeners.add(this.els["load-more-container"].element,"click",this.onLoadMoreClick.bind(this)),this.listeners.add(this.els["load-previous-container"].element,"click",this.onLoadPreviousClick.bind(this)),"back-to-top"in this.els&&this.listeners.add(this.els["back-to-top"].element,"click",this.onBackToTopClick.bind(this))}onLoadMoreClick(event){const loadMoreButton=event.target.closest(this.els["load-more"].selector);if(!loadMoreButton||(event.preventDefault(),loadMoreButton?.hasAttribute("disabled")))return;const anchor=event.target.closest("a");if(this.log("onLoadMoreClick",{anchor}),!anchor||anchor.getAttribute("href")===""||anchor.hasAttribute("disabled"))return;const href=anchor.getAttribute("href");this.log("onLoadMoreClick",{href});const wantedPage=new URLSearchParams(href.split("?")[1]).get("page")??"1",currentSearchParams=new URLSearchParams(this.searchParams.current.toString());currentSearchParams.set("page",wantedPage),this.renderPage({searchParams:currentSearchParams.toString(),direction:"NEXT"})}onLoadPreviousClick(event){if(event.target.closest(this.els["load-previous"].selector)==null)return;event.preventDefault();const anchor=event.target.closest("a");if(this.log("onLoadPreviousClick",{anchor}),!anchor||anchor.getAttribute("href")===""||anchor.hasAttribute("disabled"))return;const href=anchor.getAttribute("href");this.log("onLoadPreviousClick",{href});const wantedPage=new URLSearchParams(href.split("?")[1]).get("page")??"1",currentSearchParams=new URLSearchParams(this.searchParams.current.toString());currentSearchParams.set("page",wantedPage),this.renderPage({searchParams:currentSearchParams.toString(),direction:"PREVIOUS"})}async renderPage({searchParams,e,updateURLHash=!0,direction="NEXT"}={}){this.log("renderPage",{searchParams,e,updateURLHash}),this.searchParams.previous=this.searchParams.current,this.searchParams.current=new URLSearchParams(searchParams),this.loading=!0;const url=`${window.location.pathname}?section_id=${this.section.section}&${this.searchParams.current.toString()}`;this.log("renderPage",{section:this.section,url}),await this.renderer.render(url,direction),this.loading=!1,updateURLHash&&this.updateURLHash(this.searchParams.current)}updateURLHash(searchParams){searchParams.get("page")==="1"&&searchParams.delete("page"),history.pushState({searchParams:searchParams.toString()},"",`${window.location.pathname}${searchParams.toString()&&"?".concat(searchParams.toString())}`)}onBackToTopClick(event){event.preventDefault(),window.scrollTo({top:0,behavior:"smooth"})}get loading(){return this._loading}set loading(val){this._loading=val,this.setAttribute("aria-busy",val.toString())}get articleCount(){return Number(this.dataset.totalArticleCount)||0}get countString(){return this.dataset.countString||"{{ current }} of {{ total }} articles shown"}}customElements.get("blog-articles")||customElements.define("blog-articles",BlogArticles); 2//# sourceMappingURL=/cdn/shop/t/141/assets/blog-articles.js.map?v=38747280157814132921770035390
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.