PageSourceSearch

https://hultafors.com/cdn/shop/t/1/assets/m-custom-pagination.js?v=166997079608894648391737024456

js hultafors.com collected 2026-09-24 22:13:39 UTC 5,060 bytes, 2 lines download raw bytes

1if(!customElements.get("custom-pagination")){class CustomPagination extends HTMLElement{constructor(){super(),this.init(),document.addEventListener("on:bfcache:load-restore",this.reload.bind(this))}disconnectedCallback(){this.destroy()}init(){this.infiniteScroll=this.dataset.infiniteScroll==="true",this.pagination=this.querySelector(".js-pagination"),this.loadMoreButton=this.querySelector(".js-pagination-load-more"),this.results=this.querySelectorAll(".js-pagination-result"),this.controller=null,this.firstLink=null,this.resultClickHandler=this.resultClickHandler||this.handleResultClick.bind(this),this.addEventListener("click",this.resultClickHandler),this.loadMoreClickHandler=this.loadMoreClickHandler||this.handleLoadMoreClick.bind(this),this.pagination&&this.pagination.dataset.isMoreResults&&this.results&&(this.loadMoreButton&&this.loadMoreButton.addEventListener("click",this.loadMoreClickHandler),this.infiniteScroll&&(this.paginationObserver=new IntersectionObserver(entries=>{entries.forEach(entry=>{entry.isIntersecting?(this.loadMore(),this.intersectingTimer=setInterval(this.loadMore.bind(this),1e3)):this.intersectingTimer&&clearInterval(this.intersectingTimer)})},{rootMargin:`${window.innerHeight*1.5}px 0px`}),this.paginationObserver.observe(this.pagination)))}destroy(){this.intersectingTimer&&clearInterval(this.intersectingTimer),this.paginationObserver&&this.paginationObserver.disconnect(),this.loadMoreButton&&this.loadMoreButton.removeEventListener("click",this.loadMoreClickHandler),this.removeEventListener("click",this.resultClickHandler),this.loadMoreClickHandler=null}reload(){this.destroy(),this.init()}handleLoadMoreClick(evt){evt.preventDefault(),this.loadMore()}handleResultClick(evt){evt.target.closest("a")&&evt.target.closest(".js-pagination-result")&&this.controller&&this.controller.abort()}async loadMore(){if(!this.isFetching&&this.dataset.pauseInfiniteScroll==="false"){this.isFetching=!0,this.controller=new AbortController;try{if(!this.loadMoreButton)throw new Error("No 'Load more' button found.");this.loadMoreButton.classList.add("is-loading"),this.loadMoreButton.setAttribute("aria-disabled","true"),this.pagination.dataset.paginationStyle==="traditional"&&this.pagination.classList.add("is-loading");const response=await fetch(this.loadMoreButton.href,{signal:this.controller.signal});if(!response.ok)throw new Error(response.status);if(this.dataset.pauseInfiniteScroll==="true")throw new Error("Infinite scroll was interrupted.");const tmpl=document.createElement("template");tmpl.innerHTML=await response.text();let newResultsHtml="";const lastResult=this.results[this.results.length-1];tmpl.content.querySelectorAll(".js-pagination-result").forEach((result,index)=>{const link=result.querySelector("button.btn:not([disabled])")||result.querySelector("a.btn"),productId=result.querySelector("a[data-product-id]").getAttribute("data-product-id");link&&(link.setAttribute("pagination-index",index+productId),index===0&&(this.firstLink=link)),newResultsHtml+=result.outerHTML}),lastResult.insertAdjacentHTML("afterend",newResultsHtml);const isChecked=document.getElementById("compare-switch").checked,compareCheckboxes=document.querySelectorAll(".js-compare-checkbox");isChecked?compareCheckboxes.forEach(checkbox=>{checkbox.setAttribute("tabindex","0")}):compareCheckboxes.forEach(checkbox=>{checkbox.setAttribute("tabindex","-1")}),window.initLazyImages(),this.results=this.querySelectorAll(".js-pagination-result");const newPagination=tmpl.content.querySelector(".js-pagination");newPagination.dataset.isMoreResults?(this.pagination.innerHTML=newPagination.innerHTML,this.loadMoreButton&&(this.loadMoreButton.removeEventListener("click",this.loadMoreClickHandler),this.loadMoreButton=this.querySelector(".js-pagination-load-more"),this.loadMoreButton.addEventListener("click",this.loadMoreClickHandler))):(this.pagination.remove(),this.intersectingTimer&&clearInterval(this.intersectingTimer),this.paginationObserver&&this.paginationObserver.disconnect(),document.querySelectorAll(".js-when-paginated-only").forEach(elem=>elem.remove()))}catch(error){console.log("Unable to fetch next page of results",error),this.intersectingTimer&&clearInterval(this.intersectingTimer)}finally{if(this.controller=null,this.firstLink){const firstProductId=this.firstLink.getAttribute("pagination-index");let elementToFocus=null;document.querySelectorAll(".js-pagination-result").forEach(result=>{const linkToFocus=result.querySelector(`[pagination-index="${firstProductId}"]`);if(linkToFocus){elementToFocus=linkToFocus;return}}),elementToFocus&&elementToFocus.focus()}this.loadMoreButton&&(this.loadMoreButton.classList.remove("is-loading"),this.loadMoreButton.removeAttribute("aria-disabled")),this.isFetching=!1,this.pagination.dataset.paginationStyle==="traditional"&&this.pagination.classList.remove("is-loading"),window.$th_refreshWishlistItems()}}}}customElements.define("custom-pagination",CustomPagination)}
2//# sourceMappingURL=/cdn/shop/t/1/assets/m-custom-pagination.js.map?v=166997079608894648391737024456

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.