PageSourceSearch

https://thecabindepot.ca/cdn/shop/t/174/assets/compare.js?v=91823159108657548991766504730

js thecabindepot.ca collected 2026-09-30 15:20:51 UTC 12,083 bytes, 2 lines download raw bytes

1class CompareUtils{static cookieName="hypertheme:compare-products";static getSelectedProducts(){return FoxTheme.utils.getStorage(this.cookieName)||[]}static setSelectedProducts(products){products.length>0?FoxTheme.utils.setStorage(this.cookieName,products):localStorage.removeItem(this.cookieName)}static getProductsCount(){return this.getSelectedProducts().length}static isProductInList(productId){return this.getSelectedProducts().find(product=>product.id===productId)}static addToList(productId,productUrl){let products=FoxTheme.utils.getStorage(this.cookieName)||[];return products.length<FoxTheme.compare.maxProductsInCompare?(products.some(product=>product.id===productId)||products.push({id:productId,url:productUrl}),this.setSelectedProducts(products),this.updateCompareCheckboxes(products),FoxTheme.pubsub.publish("compare:add",{products,productId,productUrl}),!0):(alert(FoxTheme.compare.alertMessage),!1)}static removeFromList(productId){let products=this.getSelectedProducts();products&&(products=products.filter(product=>product.id!==productId)),this.setSelectedProducts(products),this.updateCompareCheckboxes(products),FoxTheme.pubsub.publish("compare:remove",{products,productId})}static clearList(){const products=this.getSelectedProducts();products&&products.forEach(product=>{this.removeFromList(product.id)})}static updateCompareCheckboxes(products=null){products=products||this.getSelectedProducts(),document.querySelectorAll(".js-compare-checkbox").forEach(checkbox=>{checkbox.checked=products.filter(product=>product.id===checkbox.dataset.productId).length})}static getTemplateUrl(productUrl,queryObj={}){let url=productUrl;const separator=productUrl.includes("?")?"&":"?",params=new URLSearchParams;for(const key in queryObj)Object.prototype.hasOwnProperty.call(queryObj,key)&&params.append(key,queryObj[key]);return Array.from(params).length>0&&(url+=`${separator}${params.toString()}`),url}static getCompareBarItemTemplate(productUrl){return this.getTemplateUrl(productUrl,{sections:"product-compare-bar-item"})}}class CompareSwitch extends HTMLElement{constructor(){super(),this.cookieName="hypertheme:compare-is-active",this.classes={isActive:"is-product-comparing"},this.checkboxEl=this.querySelector("input"),this.onChangeHandler=this.onChange.bind(this)}connectedCallback(){this.init(),this.checkboxEl.addEventListener("change",this.onChangeHandler)}disconnectedCallback(){this.checkboxEl.removeEventListener("change",this.onChangeHandler)}init(){if(FoxTheme.config.hasLocalStorage){const isActive=window.localStorage.getItem(this.cookieName)==="true";isActive&&(this.checkboxEl.checked=isActive,this.handleChange(isActive))}}onChange(evt){evt.preventDefault(),this.handleChange(this.checkboxEl.checked)}handleChange(isActive){requestAnimationFrame(()=>{isActive?document.body.classList.add(this.classes.isActive):document.body.classList.remove(this.classes.isActive)}),FoxTheme.pubsub.publish("compare:toggle",{isActive}),FoxTheme.config.hasLocalStorage&&window.localStorage.setItem(this.cookieName,isActive)}}customElements.define("compare-switch",CompareSwitch);class CompareCheckbox extends HTMLElement{constructor(){super(),this.checkboxEl=this.querySelector("input"),this.onChangeHandler=this.onChange.bind(this)}connectedCallback(){this.init(),this.checkboxEl.addEventListener("change",this.onChangeHandler)}disconnectedCallback(){this.checkboxEl.removeEventListener("change",this.onChangeHandler)}init(){const{productId}=this.checkboxEl.dataset;this.checkboxEl.checked=CompareUtils.isProductInList(productId)}onChange(evt){evt.preventDefault();const{productId,productUrl}=this.checkboxEl.dataset;this.checkboxEl.checked?CompareUtils.addToList(productId,productUrl)||(this.checkboxEl.checked=!1):CompareUtils.removeFromList(productId)}}customElements.define("compare-checkbox",CompareCheckbox);class CompareRemove extends HTMLButtonElement{constructor(){super(),this.onClickHandler=this.onClick.bind(this),this.addEventListener("click",this.onClick.bind(this))}onClick(event){event.preventDefault();const{productId}=this.dataset,{target}=event;CompareUtils.removeFromList(productId);const compareModal=target.closest(".compare-drawer");if(compareModal&&compareModal.updateProductsCount(),CompareUtils.getProductsCount()<2)compareModal&&compareModal.hide();else{const compareTable=target.closest(".compare-table");if(compareTable){const colIndex=target.closest("td").cellIndex;compareTable.querySelectorAll("tr").forEach(row=>{const cellToRemove=row.cells[colIndex];cellToRemove&&cellToRemove.remove()})}}}disconnectedCallback(){this.removeEventListener("click",this.onClickHandler)}}customElements.define("compare-remove",CompareRemove,{extends:"button"});class CompareBar extends HTMLElement{constructor(){super(),this.selectors={openBtn:".compare-bar__open",clearBtns:[".compare-bar__clear"],toggleList:".compare-bar__toggle-list",list:".compare-bar__list",counter:".compare-bar__counter"}
1,this.classes={listVisible:"is-show-list"},this.abortController=new AbortController,this.elements=FoxTheme.utils.queryDomNodes(this.selectors,this),this.atLeastItemToShow=Math.min(5,FoxTheme.compare.maxProductsInCompare),this.elements.clearBtns.forEach(clearBtn=>{clearBtn.addEventListener("click",this.handleClear.bind(this),{signal:this.abortController.signal})}),this.elements.toggleList.addEventListener("click",this.handleToggleList.bind(this),{signal:this.abortController.signal}),this.itemAddUnsubscriber=FoxTheme.pubsub.subscribe("compare:add",this.onItemAdded.bind(this)),this.itemRemoveUnsubscriber=FoxTheme.pubsub.subscribe("compare:remove",this.onItemRemoved.bind(this))}itemAddUnsubscriber=void 0;itemRemoveUnsubscriber=void 0;connectedCallback(){this.renderBar();const mql=window.matchMedia(FoxTheme.config.mediaQueryMobile);mql.onchange=this.setHeight.bind(this),this.setHeight()}disconnectedCallback(){this.abortController.abort(),this.itemAddUnsubscriber&&this.itemAddUnsubscriber(),this.itemRemoveUnsubscriber&&this.itemRemoveUnsubscriber()}onItemAdded(event){const{products,productId,productUrl}=event;this.appendBarItem(products,productId,productUrl),this.toggleCompareButton(products.length),this.updateCounters(products.length)}onItemRemoved(event){const{products,productId}=event,itemToDelete=this.elements.list.querySelector(`.compare-bar__item[data-product-id="${productId}"]`);itemToDelete&&itemToDelete.remove(),this.toggleCompareButton(products.length),this.updateCounters(products.length),this.removePlaceholdes(),this.addPlaceholders(products.length)}async renderBar(){const products=CompareUtils.getSelectedProducts();let output="";(await this.getBarItems(products)).forEach(htmlStr=>{output+=htmlStr}),this.removePlaceholdes(),this.elements.list.innerHTML=output,this.addPlaceholders(products.length),this.toggleCompareButton(products.length),this.updateCounters(products.length)}async getBarItems(products){const tmps=[];await Promise.all(products.map(async product=>{const fetchUrl=CompareUtils.getCompareBarItemTemplate(product.url);await fetch(CompareUtils.getCompareBarItemTemplate(product.url)).then(response=>response.json()).then(response=>{const itemHtml=new DOMParser().parseFromString(response["product-compare-bar-item"],"text/html").querySelector(".shopify-section");tmps[product.id]=itemHtml.innerHTML})}));const returns=[];return products.forEach(product=>returns.push(tmps[product.id])),returns}async appendBarItem(products,productId,productUrl){this.removePlaceholdes(),this.elements.list.insertAdjacentHTML("beforeend",`<li class="compare-bar__item" data-product-id="${productId}"></li>`),this.addPlaceholders(products.length),await fetch(CompareUtils.getCompareBarItemTemplate(productUrl)).then(response=>response.json()).then(response=>{const itemHtml=new DOMParser().parseFromString(response["product-compare-bar-item"],"text/html").querySelector(".shopify-section"),itemEl=this.elements.list.querySelector('[data-product-id="'+productId+'"]');itemEl&&(itemEl.outerHTML=itemHtml.innerHTML)})}handleToggleList(event){event.preventDefault(),this.classList.contains(this.classes.listVisible)?this.classList.remove(this.classes.listVisible):this.classList.add(this.classes.listVisible),this.setHeight()}handleClear(){CompareUtils.clearList()}toggleCompareButton(count){this.elements.openBtn.disabled=!(count>1)}updateCounters(count){this.elements.counter.innerText=count}removePlaceholdes(){Array.from(this.elements.list.querySelectorAll("li")).forEach(li=>{li.classList.contains("compare-bar__item-placeholder")&&li.remove()})}addPlaceholders(count){const placeholderCount=this.atLeastItemToShow-count;for(let i=0;i<placeholderCount;i++){const placeholderItem=document.createElement("li");placeholderItem.classList.add("compare-bar__item","compare-bar__item-placeholder"),this.elements.list.appendChild(placeholderItem)}}setHeight(){requestAnimationFrame(()=>{const offsetHeight=Math.round(this.offsetHeight);document.documentElement.style.setProperty("--compare-bar-height",`${offsetHeight}px`)})}}customElements.define("compare-bar",CompareBar);class CompareDrawer extends DrawerComponent{constructor(){super(),this.selectors={table:".compare-table"}
1,this.classesToRemoveOnLoad="drawer--loading"}get requiresBodyAppended(){return!1}get selector(){return".product-comparison-table"}get sourceSelector(){return"#MainProduct-compare__rows"}get placeholderSelector(){return"#MainProduct-compare__placeholder"}getSectionId(){let sectionId=FoxTheme.ProductCompareSectionId||!1;if(!sectionId){const sectionEl=document.querySelector(".section-group-overlay-product-compare");sectionEl&&(sectionId=FoxTheme.utils.getSectionId(sectionEl)),FoxTheme.ProductCompareSectionId=sectionId}return sectionId}prepareToShow(){super.prepareToShow(),this.renderCompareTable()}async renderCompareTable(){const drawerContent=this.querySelector(this.selector),sectionId=this.getSectionId(),products=CompareUtils.getSelectedProducts();this.updateProductsCount(),this.elements=FoxTheme.utils.queryDomNodes(this.selectors,this);const tableRows=this.elements.table.querySelectorAll("tbody tr");let compareRows=await this.getCompareTableRows(products);if(Shopify.designMode){let maxPlaceholderItems=3;compareRows.length==2&&(maxPlaceholderItems=2);let numberPlaceholderItems=compareRows.length>0?maxPlaceholderItems-compareRows.length:maxPlaceholderItems;if(numberPlaceholderItems>0){const placeholderRows=this.getCompareTablePlaceholderRows(numberPlaceholderItems);compareRows=compareRows.concat(placeholderRows),this.updateProductsCount(maxPlaceholderItems)}}compareRows.forEach(compareRow=>{tableRows.forEach(row=>{const compareKey=row.dataset.compareKey,compareCol=compareRow.querySelector(`td[data-compare-key="${compareKey}"]`);row.appendChild(compareCol)})}),setTimeout(()=>{this.classList.remove(this.classesToRemoveOnLoad)},300)}updateProductsCount(count){this.style.setProperty("--number-items",count||CompareUtils.getProductsCount())}async getCompareTableRows(products){const tmps=[],sectionId=this.getSectionId();await Promise.all(products.map(async product=>{const fetchUrl=CompareUtils.getTemplateUrl(product.url,{section_id:sectionId});await fetch(fetchUrl).then(response=>response.text()).then(responseText=>{const rowTemplate=new DOMParser().parseFromString(responseText,"text/html").querySelector(this.sourceSelector);tmps[product.id]=rowTemplate.content.cloneNode(!0)})}));const returns=[];return products.forEach(product=>returns.push(tmps[product.id])),returns}getCompareTablePlaceholderRows(count){const rowTemplate=this.querySelector(this.placeholderSelector),returns=[];for(let i=0;i<count;i++)returns.push(rowTemplate.content.cloneNode(!0));return returns}disconnectedCallback(){super.disconnectedCallback(),this.handleAfterHide()}handleAfterHide(){super.handleAfterHide(),this.querySelectorAll(".compare-table > tbody > tr").forEach(row=>{row.querySelectorAll("td:not(.td-label)").forEach(cell=>{cell.remove()})}),this.classList.add(this.classesToRemoveOnLoad)}}customElements.define("compare-drawer",CompareDrawer);
2//# sourceMappingURL=/cdn/shop/t/174/assets/compare.js.map?v=91823159108657548991766504730

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.