PageSourceSearch

https://ponos.co/cdn/shop/t/45/assets/pdp-main.js?v=2128040061135051211790047087

js ponos.co collected 2026-10-09 22:56:57 UTC 15,254 bytes, 2 lines download raw bytes

1(()=>{if(customElements.get("caldera-product"))return;class CalderaProduct extends HTMLElement{connectedCallback(){this.controller?.abort(),this.controller=new AbortController;const signal=this.controller.signal;try{this.productData=JSON.parse(this.querySelector("[data-product-json]")?.textContent||"{}")}catch{this.productData={}}this.form=this.querySelector("[data-product-form]"),this.addButton=this.querySelector("[data-add]"),this.addMarkup=this.addButton?.innerHTML||"Add to Cart",this.track=this.querySelector("[data-gallery-track]"),this.slides=[...this.querySelectorAll("[data-gallery-slide]")],this.galleryIndex=0,this.querySelectorAll("button[data-plan-id]").forEach(button=>{button.type="button"}),this.addEventListener("click",event=>this.onClick(event),{signal}),this.addEventListener("change",event=>this.onChange(event),{signal}),this.addEventListener("input",event=>{event.target.matches('input[name="quantity"]')&&this.updateQuantity()},{signal}),this.form?.addEventListener("submit",event=>this.submit(event),{signal}),this.track?.addEventListener("scroll",()=>{cancelAnimationFrame(this.scrollFrame),this.scrollFrame=requestAnimationFrame(()=>this.syncGallery())},{signal,passive:!0}),document.addEventListener("shopify:block:select",event=>{const blockId=event.detail?.blockId,index=this.slides.findIndex(slide=>slide.dataset.blockId===blockId||slide.contains(event.target));index>=0&&this.showSlide(index,!1)},{signal}),this.stickyObserver?.disconnect(),this.footerObserver?.disconnect(),this.stickyPassed=!1,this.footerVisible=!1;const buyBlock=this.addButton?.closest(".buy-buttons-block")||this.addButton;if(buyBlock&&this.querySelector("[data-sticky-bar]")&&"IntersectionObserver"in window){this.stickyObserver=new IntersectionObserver(([entry])=>{this.stickyPassed=!entry.isIntersecting&&(entry.boundingClientRect.bottom<0||entry.boundingClientRect.top<0),this.updateSticky()}),this.stickyObserver.observe(buyBlock);const footer=document.querySelector("footer")||document.querySelector('[class*="footer-group"]');footer&&(this.footerObserver=new IntersectionObserver(([entry])=>{this.footerVisible=entry.isIntersecting,this.updateSticky()},{rootMargin:"200px 0px 0px 0px"}),this.footerObserver.observe(footer))}if(!this.querySelector("[data-role]:checked")){const preferred=this.querySelector('[data-role="subscribe"]')||this.querySelector('[data-role="onetime"]');preferred&&(preferred.checked=!0)}this.selectVariant(),this.updateQuantity(),this.markSlide(0)}disconnectedCallback(){this.controller?.abort(),this.stickyObserver?.disconnect(),this.footerObserver?.disconnect(),cancelAnimationFrame(this.scrollFrame),this.querySelector("[data-gallery-zoom]")?.close()}get isCatalog(){return this.dataset.mode==="catalog"}get recurringPlans(){return(this.variant?.allocations||[]).filter(plan=>plan.recurring===!0)}get subscribed(){return!!this.querySelector('[data-role="subscribe"]:checked')}money(cents){const amount=Number(cents||0)/100;return new Intl.NumberFormat(document.documentElement.lang||"en",{style:"currency",currency:this.dataset.currency||"USD",minimumFractionDigits:Number.isInteger(amount)?0:2,maximumFractionDigits:2}).format(amount)}text(selector,value){this.querySelectorAll(selector).forEach(node=>{node.textContent=value})}status(message,error=!1){const status=this.querySelector("[data-product-status]");status&&(status.textContent=message,status.dataset.error=String(error),status.hidden=!message)}selectVariant(){const variants=this.productData.variants||[],selectedId=this.querySelector("[data-variant-select]")?.value||this.form?.querySelector('[name="id"]')?.value;if(this.variant=variants.find(variant=>String(variant.id)===String(selectedId))||variants.find(variant=>variant.available)||variants[0],this.isCatalog){const idInput=this.form?.querySelector('[name="id"]');if(idInput){const nextId=this.variant?.id?String(this.variant.id):"",changed=String(idInput.value)!==nextId;idInput.value=nextId,idInput.disabled=!this.variant,changed&&idInput.dispatchEvent(new Event("change",{bubbles:!0}))}const select=this.querySelector("[data-variant-select]");select&&this.variant&&(select.value=String(this.variant.id));const plans=this.recurringPlans,holder=this.querySelector("[data-plan-options]"),oldSelected=this.selectedPlanId;if(holder){const buttonClass=holder.querySelector("button")?.className||"caldera-plan-option";holder.replaceChildren(...plans.map(plan=>{const button=document.createElement("button");return button.type="button",button.className=buttonClass.replace(/\b(?:is-selected|is-active|ig-fq-first)\b/g,"").trim(),button.dataset.planId=String(plan.id),button.dataset.price=String(plan.price),button.textContent=plan.name,button}))}this.selectedPlanId=plans.find(plan=>String(plan.id)===oldSelected)?oldSelected:String(plans[0]?.id||"");const subscription=this.querySelector("[data-subscription-card]");subscription&&(subscription.hidden=!plans.length);const subscribeRadio=this.querySelector('[data-role="subscribe"]');if(subscribeRadio&&(subscribeRadio.disabled=!plans.length),!plans.length){subscribeRadio&&(subscribeRadio.checked=!1);const once=this.querySelector('[data-role="onetime"]');
1once&&(once.checked=!0)}this.querySelectorAll("[data-add], [data-sticky-add]").forEach(button=>{button.disabled=!this.variant?.available}),this.addButton&&!this.variant?.available?(this.addButton.textContent="Sold out",this.showingSoldOut=!0):this.addButton&&this.showingSoldOut&&(this.addButton.innerHTML=this.addMarkup,this.showingSoldOut=!1);const image=this.variant?.featured_image,imageUrl=typeof image=="string"?image:image?.src,index=imageUrl?this.slides.findIndex(slide=>[...slide.querySelectorAll("img")].some(img=>img.src.split("?")[0]===new URL(imageUrl,location.href).href.split("?")[0])):-1;index>=0&&this.showSlide(index,!1)}else{const field=this.form?.querySelector('[name="id"]');field&&(field.disabled=!0),this.selectedPlanId||=this.querySelector('[data-plan-id][aria-pressed="true"]')?.dataset.planId||this.querySelector("[data-plan-id]")?.dataset.planId||""}if(this.isCatalog){this.text("[data-sticky-variant]",this.variant?.title==="Default Title"?"":this.variant?.title||"");const stickyImage=this.querySelector("[data-sticky-image]");stickyImage&&this.variant?.featured_image&&(stickyImage.removeAttribute("srcset"),stickyImage.src=this.variant.featured_image)}this.updatePurchase(),this.updateSticky()}updatePurchase(){const allocation=this.recurringPlans.find(plan=>String(plan.id)===this.selectedPlanId),oncePrice=this.isCatalog?this.variant?.price||0:this.productData.referencePrice||0,subscribePrice=this.isCatalog?allocation?.price??oncePrice:Number(this.productData.referenceSubscriptionPrice??oncePrice);if(this.text("[data-price-one]",this.money(oncePrice)),this.text("[data-price-sub]",this.money(subscribePrice)),this.text("[data-price-current]",this.money(this.subscribed?subscribePrice:oncePrice)),this.text("[data-save-amount]",this.money(Math.max(0,oncePrice-subscribePrice))),this.querySelectorAll("[data-sticky-compare]").forEach(compare=>{compare.hidden=!this.subscribed||subscribePrice>=oncePrice}),this.isCatalog){const percent=oncePrice>0?Math.round((oncePrice-subscribePrice)/oncePrice*100):0;this.text("[data-subscribe-title]",percent>0?`Subscribe & Save ${percent}%`:"Subscribe")}const field=this.form?.querySelector('[name="selling_plan"]');if(field){const valid=this.isCatalog&&this.subscribed&&!!allocation;field.disabled=!valid,field.value=valid?String(allocation.id):""}this.querySelectorAll("[data-plan-id]").forEach(button=>{const selected=button.dataset.planId===this.selectedPlanId;button.classList.toggle("is-selected",selected),button.classList.toggle("is-active",selected),button.setAttribute("aria-pressed",String(selected))}),this.querySelectorAll('[data-role="subscribe"], [data-role="onetime"]').forEach(radio=>{(radio.closest("[data-purchase-option], [data-subscription-card], .caldera-subscription__card")||radio.closest("label"))?.classList.toggle("is-selected",radio.checked)})}updateSticky(){const visible=!!this.stickyPassed&&!this.footerVisible&&(!this.isCatalog||!!this.variant?.available);this.querySelectorAll("[data-sticky-bar]").forEach(wrapper=>{wrapper.setAttribute("aria-hidden",String(!visible)),wrapper.inert=!visible;const bar=wrapper.querySelector(".sticky-add-to-cart__bar");bar&&(bar.dataset.stuck=String(visible))})}updateQuantity(){const input=this.querySelector('input[name="quantity"]')||this.form?.elements.namedItem("quantity");if(!input)return;const minimum=Number(input.min||1),quantity=Math.max(minimum,Number(input.value||minimum));this.text("[data-sticky-quantity-number]",String(quantity)),this.querySelectorAll("[data-sticky-quantity]").forEach(display=>{display.hidden=quantity<=1}),this.querySelectorAll('button[name="minus"]').forEach(button=>{button.disabled=Number(input.value)<=minimum}),this.querySelectorAll('button[name="plus"]').forEach(button=>{button.disabled=!!input.max&&Number(input.value)>=Number(input.max)})}onChange(event){event.target.matches('input[name="quantity"]')&&this.updateQuantity(),event.target.matches("[data-variant-select]")&&(this.status(""),this.selectVariant()),event.target.matches('[data-role="subscribe"], [data-role="onetime"]')&&this.updatePurchase()}onClick(event){const button=event.target.closest("button");if(button?.hasAttribute("data-plan-id")){event.preventDefault(),this.selectedPlanId=button.dataset.planId;const radio=this.querySelector('[data-role="subscribe"]');radio&&!radio.disabled&&(radio.checked=!0),this.updatePurchase()}if(button?.matches('[name="minus"], [name="plus"]')){event.preventDefault();const input=this.querySelector('input[name="quantity"]')||this.form?.elements.namedItem("quantity");input&&(button.name==="plus"?input.stepUp():input.stepDown(),input.dispatchEvent(new Event("change",{bubbles:!0})))}!this.isCatalog&&button?.hasAttribute("data-add")&&this.submit(event),button?.hasAttribute("data-sticky-add")&&(event.preventDefault(),this.isCatalog?this.addButton&&!this.addButton.disabled&&this.form?.requestSubmit(this.addButton):this.submit(event)),button?.hasAttribute("data-thumb")&&(event.preventDefault(),this.showSlide(Number(button.dataset.thumb||button.value||[...this.querySelectorAll("[data-thumb]")].indexOf(button)))),button?.hasAttribute("data-gallery-prev")&&(event.preventDefault(),this.showSlide(this.galleryIndex-1)),button?.hasAttribute("data-gallery-next")&&(event.preventDefault(),this.showSlide(this.galleryIndex+1));const dialog=this.querySelector("[data-gallery-zoom]");if(button?.hasAttribute("data-zoom-close")||event.target===dialog){event.preventDefault(),dialog?.close();return}const mediaImage=event.target.closest("[data-pdp-gallery] [data-gallery-slide] img");if(mediaImage&&dialog&&!event.target.closest("a,button,video")){const zoomImage=dialog.querySelector("img");zoomImage&&(zoomImage.src=mediaImage.dataset.zoomSrc||mediaImage.currentSrc||mediaImage.src,zoomImage.alt=mediaImage.alt),dialog.open||dialog.showModal()}}showSlide(index,smooth=!0){if(!this.track||!this.slides.length)return;const next=Math.max(0,Math.min(this.slides.length-1,index)),left=this.slides[next].getBoundingClientRect().left-this.track.getBoundingClientRect().left+this.track.scrollLeft;this.track.scrollTo({left,behavior:smooth&&!matchMedia("(prefers-reduced-motion: reduce)").matches?"smooth":"instant"}),this.markSlide(next)}syncGallery(){if(!this.track||!this.slides.length)return;const left=this.track.getBoundingClientRect().left;let nearest=0;
1this.slides.forEach((slide,index)=>{Math.abs(slide.getBoundingClientRect().left-left)<Math.abs(this.slides[nearest].getBoundingClientRect().left-left)&&(nearest=index)}),this.markSlide(nearest)}markSlide(index){this.galleryIndex=index,this.slides.forEach((slide,slideIndex)=>{slide.classList.toggle("is-selected",index===slideIndex),slide.setAttribute("aria-current",String(index===slideIndex)),slide.setAttribute("aria-hidden",String(index!==slideIndex)),index!==slideIndex&&slide.querySelectorAll("video").forEach(video=>video.pause())});const activeVideo=this.slides[index]?.querySelector("video");activeVideo?.paused&&activeVideo.play().catch(()=>{}),this.querySelectorAll("[data-thumb]").forEach((button,thumbIndex)=>{const selected=Number(button.dataset.thumb||button.value||thumbIndex)===index;button.classList.toggle("is-selected",selected),button.setAttribute("aria-current",String(selected)),button.setAttribute("aria-pressed",String(selected))});const previous=this.querySelector("[data-gallery-prev]"),next=this.querySelector("[data-gallery-next]");previous&&(previous.disabled=index===0),next&&(next.disabled=index===this.slides.length-1)}async submit(event){if(event.preventDefault(),!this.isCatalog){const cadence=this.querySelector('[data-plan-id][aria-pressed="true"]')?.dataset.cadence||"",image=this.querySelector("[data-gallery-slide] img"),once=Number(this.productData.referencePrice||0);this.dispatchEvent(new CustomEvent("caldera:reference-add",{bubbles:!0,detail:{item:{id:"the-good",title:this.querySelector("h1")?.textContent.trim()||"The Good",image:image?.currentSrc||image?.src||"",url:"/?view=ponos-the-good",unitPrice:this.subscribed?Number(this.productData.referenceSubscriptionPrice??once):once,compareAtPrice:this.subscribed?once:0,oncePrice:once,subscriptionPrice:Number(this.productData.referenceSubscriptionPrice??once),quantity:Math.max(1,Number(this.querySelector('[name="quantity"]')?.value||1)),variant:"",purchase:this.subscribed?"subscription":"onetime",delivery:this.subscribed&&
1cadence?`Delivery every ${cadence.toLowerCase()}`:"",cadences:[...this.querySelectorAll("[data-plan-id]")].map(button=>parseInt(button.dataset.cadence,10)).filter(Number.isFinite)},open:!0}})),this.status("");return}if(!(this.pending||!this.variant?.available||!this.form)){this.updatePurchase(),this.pending=!0,this.status(""),this.querySelectorAll("[data-add], [data-sticky-add]").forEach(button=>{button.disabled=!0,button.setAttribute("aria-busy","true")});try{const body=new FormData(this.form);body.set("id",String(this.variant.id));const allocation=this.recurringPlans.find(plan=>String(plan.id)===this.selectedPlanId);this.subscribed&&allocation?body.set("selling_plan",String(allocation.id)):body.delete("selling_plan");const route=window.Shopify?.routes?.root||"/",response=await fetch(`${route}cart/add.js`,{method:"POST",body,credentials:"same-origin",headers:{Accept:"application/json"},signal:this.controller.signal}),item=await response.json();if(!response.ok)throw new Error(item.description||item.message||"Unable to add this item. Please try again.");this.status("Added to your cart."),this.dispatchEvent(new CustomEvent("caldera:cart-updated",{bubbles:!0,detail:{item}})),this.dispatchEvent(new CustomEvent("caldera:cart-open",{bubbles:!0,detail:{item,mode:"shopify"}}))}catch(error){error.name!=="AbortError"&&this.status(error.message||"Unable to add this item. Please try again.",!0)}finally{this.pending=!1,this.querySelectorAll("[data-add], [data-sticky-add]").forEach(button=>{button.disabled=!this.variant?.available,button.removeAttribute("aria-busy")})}}}}customElements.define("caldera-product",CalderaProduct)})();
2//# sourceMappingURL=/cdn/shop/t/45/assets/pdp-main.js.map?v=2128040061135051211790047087

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.