PageSourceSearch

https://vbarbershop.com/cdn/shop/t/124/assets/free-shipping-bar.js?v=32964482922337977481785190602

js vbarbershop.com collected 2026-09-25 18:17:32 UTC 3,154 bytes, 2 lines download raw bytes

1customElements.get("free-shipping-bar")||customElements.define("free-shipping-bar",class extends HTMLElement{constructor(){super(),this.unreachedMessage=this.querySelector(".free-shipping-bar__unreached-message"),this.reachedMessage=this.querySelector(".free-shipping-bar__reached-message"),this.unreachedMessage&&(this.unreachedMessageText=this.unreachedMessage.innerHTML),this.percentNumber=this.querySelector(".free-shipping-bar__progress-number"),this.dataset.showExcludeMessage&&(this.countExcludeProducts=parseInt(this.dataset.countExcludeProducts),this.excludeMessage=this.querySelector(".free-shipping-bar__exclude-message"),this.excludeMessageText=this.excludeMessage.innerHTML,this.toggleExcludeMessage()),this.dataset.threshold&&(this.threshold=parseInt(this.dataset.threshold),this.calculateBar(parseInt(this.dataset.total)),this.onCartChangeHandler=this.onCartChange.bind(this),document.addEventListener("afterCartChanged",this.onCartChangeHandler),document.addEventListener("afterUpdateQuantity",this.onCartChangeHandler))}disconnectedCallback(){document.removeEventListener("afterCartChanged",this.onCartChangeHandler),document.removeEventListener("afterUpdateQuantity",this.onCartChangeHandler)}calculateBar(currentTotal){const total=currentTotal/parseFloat(Shopify.currency.rate);if(total>=this.threshold)this.style.setProperty("--percent","100%"),this.classList.add("completed"),this.hideUnreachedMessage(),this.showReachedMessage(),this.percentNumber.textContent="100%";else{const remain=this.threshold-total,percent=total*100/this.threshold;this.style.setProperty("--percent",`${percent}%`),this.hideReachedMessage(),this.showUnreachedMessage(remain),this.percentNumber.textContent=`${Math.floor(percent)}%`}}toggleExcludeMessage(){this.dataset.showExcludeMessage&&(this.countExcludeProducts?(this.excludeMessage.innerHTML=this.excludeMessageText.replace("[product_count]",this.countExcludeProducts),this.excludeMessage.classList.remove("hidden")):this.excludeMessage.classList.add("hidden"))}onCartChange(){fetch(`${routes.cart_url}`,{...fetchConfig("json","GET")}).then(response=>response.json()).then(response=>{let totalPrice=response.total_price;freeShippingBarExcludeProducts.length>0&&response.items.length>0&&(this.countExcludeProducts=0,response.items.forEach(item=>{freeShippingBarExcludeProducts.includes(item.product_id)&&(totalPrice-=item.final_line_price,this.countExcludeProducts++)})),this.calculateBar(totalPrice),this.toggleExcludeMessage()})}showUnreachedMessage(remainAmount){if(!this.unreachedMessageText&&this.unreachedMessage)return;const remainPrice=Shopify.showPrice(remainAmount);this.unreachedMessage.classList.remove("hidden"),this.unreachedMessage.innerHTML=this.unreachedMessageText.replace("[remain]",`${remainPrice}`)}hideUnreachedMessage(){this.unreachedMessage&&this.unreachedMessage.classList.add("hidden")}showReachedMessage(remainAmount){this.reachedMessage&&this.reachedMessage.classList.remove("hidden")}hideReachedMessage(){this.reachedMessage&&this.reachedMessage.classList.add("hidden")}});
2//# sourceMappingURL=/cdn/shop/t/124/assets/free-shipping-bar.js.map?v=32964482922337977481785190602

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.