PageSourceSearch

https://www.bonescoffee.com/cdn/shop/t/332/assets/section-product-…?v=37445724414175210391787600662

js bonescoffee.com collected 2026-09-25 19:36:45 UTC 5,268 bytes, 1 lines download raw bytes

1!function(t){"function"==typeof define&&define.amd?define(t):t()}((function(){"use strict";const t=()=>window.crypto.getRandomValues(new Uint32Array(1))[0];class e extends HTMLElement{constructor(){super(),this.classes={selected:"is-selected",disabled:"is-disabled",unavailable:"is-unavailable",productIds:"js-bundle-product-ids"},this.selectors={atc:".js-add-to-cart",item:".js-bundle-item",itemVariantDetails:".js-bundle-item-variant-details",itemsLeft:".js-bundle-count-left:first-of-type",itemsLeftM:".s-bundle-content__status-m .js-bundle-count-left",qty:'input[name="bundleItemQty"]',productIds:`.${this.classes.productIds}`,modalClose:'[data-behavior="close-modal"]',status:".js-bundle-status",statusM:".js-bundle-status-m",productJSON:".js-product-json",variantId:'[name="id"]',variantQty:'[name="quantity"]'},this.data={count:parseInt(this.dataset.bundleCount),product:JSON.parse(this.querySelector(this.selectors.productJSON).textContent)},this.state={itemsAdded:0,selectedItems:[],bundleComplete:!1,productFormReady:!1,variant:void 0,id:t()},this.content={atc:this.querySelector(this.selectors.atc)}}t(){return[...this.querySelectorAll(this.selectors.qty)].reduce(((t,e)=>t+parseInt(e.value)),0)}i(t,e){const s=document.createElement("input");return s.type="hidden",s.name=t,s.value=e,s}h(){const t=this.querySelector(this.selectors.variantQty);this.querySelector(this.selectors.variantId).disabled=!0,t.disabled=!0}o(){const t=[];return this.state.selectedItems.forEach((e=>{const s=t.find((t=>t.item==e));s?s.qty++:t.push({item:e,qty:1})})),t}u(t,e){const s=JSON.parse(t.querySelector(this.selectors.itemVariantDetails).textContent);let i;for(const t in s)if(s[t].toString()==e.toString()){i=t;break}return i}l(t,e,s,i,a){const n=(t,s)=>{const i=0==e?`properties[_bundle_${t}]`:`items[${e}][properties][_bundle_${t}]`;return this.i(i,s)};[this.i(0==e?"id":`items[${e}][id]`,i),this.i(0==e?"quantity":`items[${e}][quantity]`,t.qty*a),n("item","true"),n("item_id",this.state.id),n("item_price",this.state.variant.price),n("item_handle",this.data.product.handle),n("item_variant",this.state.variant.id),n("overall_qty",a)].forEach((t=>s.appendChild(t)))}async m(){const t=this.data.count-this.state.itemsAdded,e=this.querySelector(this.selectors.itemsLeft),s=this.querySelector(this.selectors.itemsLeftM),i=this.querySelector(this.selectors.status),a=this.querySelector(this.selectors.statusM);console.log("Read S: "+e.parentElement.textContent),console.log("Read R: "+s.parentElement.textContent),e&&(e.textContent=t),i.textContent="",i.textContent=e.parentElement.textContent,s&&(s.textContent=t),a.textContent="",a.textContent=s.parentElement.textContent}p(t,e){const s=[...t.querySelectorAll("input, button")];e?t.classList.add(this.classes.disabled):t.classList.remove(this.classes.disabled),s.forEach((t=>t.disabled=e))}_(){const t=this.state.bundleComplete;this.state.selectedItems.forEach((e=>{const s=e.querySelector(this.selectors.qty);s.max=t?s.value:this.data.count}))}I(){const t=this.state.bundleComplete,e=[...this.querySelectorAll(this.selectors.item)];for(const s of e)this.state.selectedItems.includes(s)||this.p(s,t)}v(t,e){const s=parseInt(e.value),i=0==s;if(this.state.selectedItems=this.state.selectedItems.filter((e=>e!=t)),i)t.classList.remove(this.classes.selected);else{t.classList.add(this.classes.selected);for(let e=0;e<s;e++)this.state.selectedItems.push(t)}}j(){const t=this.content.atc;this.state.bundleComplete?(t.classList.remove(this.classes.unavailable),t.disabled=!1):(t.classList.add(this.classes.unavailable),t.disabled=!0)}C(){if(!this.state.bundleComplete)return;const t=this.querySelector(this.selectors.variantId),e=parseInt(t.value),s=this.querySelector(this.selectors.variantQty).value;this.state.variant=this.data.product.variants.find((t=>t.id==e));const i=this.state.variant.options,a=this.querySelector(this.selectors.productIds);a&&a.remove();const n=document.createElement("div");n.classList.add(this.classes.productIds);const o=this.o(),r=document.createDocumentFragment();for(const[t,e]of o.entries()){const a=this.u(e.item,i);if(!a)throw new Error("Could not find variant ID");this.l(e,t,r,a,s)}n.appendChild(r),this.querySelector("form").appendChild(n),this.state.productFormReady=!0}S(){this.state.itemsAdded=this.t(),this.state.bundleComplete=this.state.itemsAdded>=this.data.count,this.m()}q(t){const e=t.target.closest(this.selectors.item);if(!e)return;const s=e.querySelector(this.selectors.qty);this.v(e,s)}
1$(){this.j(),this.I(),this._()}k(t){this.S(),this.q(t),this.$()}A(){this.state.selectedItems=[],this.state.itemsAdded=0,this.state.bundleComplete=!1,this.state.productFormReady=!1,this.state.id=t(),[...this.querySelectorAll(this.selectors.item)].forEach((t=>{const e=t.querySelector(this.selectors.qty);e.value=0,this.v(t,e)})),this.$(),this.m()}B(t){const e=t.target.closest(this.selectors.atc);e&&!this.state.productFormReady&&(t.preventDefault(),this.h(),this.C(),window.EventBus.emit("ajax-cart:form:submit",e.closest("form")),window.requestAnimationFrame((()=>this.A())))}connectedCallback(){this.addEventListener("change",this.k.bind(this)),this.addEventListener("click",this.B.bind(this))}}var s,i;s="product-bundle",i=e,void 0===customElements.get(s)&&customElements.define(s,i)}));

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.