PageSourceSearch

https://vimergy.com/cdn/shop/t/627/assets/pdp-product-variant.js?v=3605520785951391831790204857

js vimergy.com collected 2026-09-25 20:34:10 UTC 11,954 bytes, 1 lines download raw bytes

1let productSwitched=!1;class PDPTypeVariant extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"}),this.buttons=this.querySelectorAll("button"),this.activeClasses=["tw-border-vimergetic","tw-text-white","tw-bg-vimergetic"],this.inActiveClasses=["tw-bg-white","tw-text-vimergetic","tw-border-vimergetic"],this.productQuickViewDrawer=document.querySelector("#product-quick-view-drawer")?.shadowRoot.querySelector(".side-drawer"),this.shadowRoot.innerHTML='\n      <style>\n        .filter-overlay {\n          position:fixed;\n          top:0;\n          left:0;\n          width:100%;\n          height:100%;\n          background-color:black;\n          opacity:0.5;\n          z-index:11111;\n        }\n      </style>\n      <div style="display:none" class="filter-overlay"></div>\n      <div class="options">\n        <slot></slot>\n      </div>\n    ',this.overlay=this.shadowRoot.querySelector(".filter-overlay")}connectedCallback(){this.productForm=this.querySelector("#vim-pdp-product-forms"),this.buttons.length>1&&this.buttons?.forEach(t=>{t.addEventListener("click",({currentTarget:e})=>{this.getProductData(t.dataset.productUrl,e),this.updateProductType(t.dataset),productSwitched=!0})}),this.buttons.length&&!productSwitched&&this.updateProductType(this.buttons[0].dataset)}updateProductType({productType:t}){this.productForm&&(this.productForm.innerHTML=`: <strong class="tw-font-semi-bold" id="">${t}</strong>`)}updateUrl(t){document.querySelector("#vim-buy-box-only").hasAttribute("data-is-non-pdp-product")||t&&history.replaceState(null,"",t)}getProductData(t,e){const i=e.dataset.productName;this.buttons?.forEach(t=>{t===e?(t?.classList?.remove(...this.inActiveClasses),t.classList.add(...this.activeClasses),t.setAttribute("aria-current","true")):(t.classList.add(...this.inActiveClasses),t.classList.remove(...this.activeClasses),t.removeAttribute("aria-current"))});const s=document.querySelectorAll(".vim_redesign_section_rendering");let a="";s.forEach(t=>{a+=`sections[]=${t.id.split("shopify-section-")[1]}&`}),this.productQuickViewDrawer?this.productQuickViewDrawer.scrollTop=0:this.updateUrl(t),this.overlay.style.display="block",fetch(`${t}?${a}`).then(t=>t.json()).then(t=>{const e=new DOMParser;s.forEach(i=>{const s=i.id.split("shopify-section-")[1],a=e.parseFromString(t[s],"text/html");a.getElementsByTagName("vim-pdp-product-type")[0]&&a?.getElementsByTagName("vim-pdp-product-type")[0]?.replaceWith(this),i.innerHTML=a.getElementById(i.id).innerHTML}),this.overlay.style.display="none";const a=new CustomEvent("pdp-js-initializer",{detail:{title:i}});document.dispatchEvent(a),window.vga4&&window.vga4.reinit()})}}class ProductSizesHandler extends HTMLElement{constructor(){super(),this.buttons=this.querySelectorAll("button");const t=document.querySelector("#vim-pdp-buy-box");this.productPrice=t.querySelector("#product-price"),this.variantId=t.querySelector("[data-selected-variant]"),this.submitButton=document.querySelector("#vim-buy-box-only").querySelector('[type="submit"]'),this.addToCartContainer=t.querySelector(".vim-pdp__add-to-cart"),this.notifyWrappers=t.querySelectorAll("#notify-wrapper"),this.activeClassesWithImp=["!tw-border-vimergetic","!tw-text-white","!tw-bg-vimergetic"],this.eligibilityInfoElement=document.querySelector("#eligibility-info"),this.quantitySelector=document.querySelector("vim-pdp-quantity"),this.mixAndSaveTooltip=document.querySelector(".mix-n-save-info"),this.mixAndSaveBuyBoxHighlight=document.querySelector(".mix-n-save-buy-box-highlight"),this.compareAtPriceBuyBoxHighlight=document.querySelector(".compare-at-pricing-highlight"),this.compareAtPriceBuyBoxSavings=document.querySelector("#strike-through-savings"),this.sizeBuyBoxHighlight=document.querySelector(".size-highlights")}connectedCallback(){if(0===this.buttons.length)return;if(Array.from(this.buttons).sort((t,e)=>{const i=parseFloat(t.dataset.pricePerServing)||0;return(parseFloat(e.dataset.pricePerServing)||0)-i}).forEach((t,e)=>{t.style.order=e}),this.classList.add("tw-flex","tw-flex-col"),1===this.buttons?.length)this.handleEligibilityInfo(this.buttons[0]?.dataset),this.checkAvailability(this.buttons[0]?.dataset),this.updateAtcGaData(this.buttons[0]?.dataset);else if(this.buttons?.length>1){this.buttons?.forEach(t=>{t.addEventListener("click",t=>{this.updateSizeSelection(t)})});for(let t=0;t<this.buttons.length;t++)if("sold-out"!==this.buttons[t].dataset.isAvailable){this.checkAvailability(this.buttons[t]?.dataset),this.handleVariantImgVisibility(this.buttons[t].dataset?.variantIdentifier),this.handleEligibilityInfo(this.buttons[t]?.dataset),this.updateAtcGaData(this.buttons[t]?.dataset);break}}const t=new URLSearchParams(window.location.search).get("variant");if(t)for(let e=0;e<this.buttons.length;e++)if(this.buttons[e].dataset.variantId==t){this.checkAvailability(this.buttons[e]?.dataset),this.handleVariantImgVisibility(this.buttons[e].dataset?.variantIdentifier),this.handleEligibilityInfo(this.buttons[e]?.dataset);break}}updateSizeSelection=t=>{t.stopPropagation();const e=this.activeClassesWithImp,{buttons:i,productPrice:s,variantId:a}=this,r=t.currentTarget.dataset;if(i.forEach(t=>{t.classList.remove(...e),t.removeAttribute("aria-current")}),t.currentTarget.classList.add(...e),t.currentTarget.setAttribute("aria-current","true"),this.updatePriceDisplay(r),a.value=r.variantId,this.checkAvailability(r),this.handleEligibilityInfo(r),this.handleVariantImgVisibility(r.variantIdentifier),new URLSearchParams(window.location.search).get("variant")){const t=new URL(window.location.href);t.searchParams.set("variant",r.variantId),history.replaceState(null,null,t.href)}this.updateAtcGaData(r);const n=new CustomEvent("pdp-variant-change");document.dispatchEvent(n)};updatePriceDisplay(t){const e=document.querySelector("#product-price"),i=document.querySelector("#product-compare-price"),s=document.querySelector("#rc_compare_at_price_onetime");if(!e)return;const a=t.variantPrice,r=t.variantCompareAtPrice,n=parseFloat((r??"").replace(/[^0-9.
1-]+/g,"")),o=parseFloat(a.replace(/[^0-9.-]+/g,""));if(n&&""!==n&&"0"!==n){if(e.textContent=a,e.className=e.className.replace("tw-text-black","tw-text-amber"),i)i.textContent=r,i.style.display="inline";else{const t=document.createElement("p");t.id="product-compare-price",t.className="tw-m-0 tw-text-16-24 tw-line-through tw-font-nan-holo tw-font-light tw-tracking-normal tw-text-black lg:tw-text-[1.8rem] lg:tw-mt-1 tw-leading-9",t.textContent=r,e.parentNode.appendChild(t)}if(s&&(s.textContent=r,s.className=s.className.replace("tw-text-black","tw-text-amber")),n>0&&this.compareAtPriceBuyBoxSavings){const t=parseInt(100*(1-o/n));this.compareAtPriceBuyBoxSavings.textContent=t}}else e.textContent=a,e.className=e.className.replace("tw-text-amber","tw-text-black"),s&&(s.textContent=""),i&&(i.style.display="none")}checkAvailability(t){const{submitButton:e,addToCartContainer:i,notifyWrappers:s}=this;let a=s[0];s?.length>1&&(a=Array.from(s).find(({dataset:e})=>e.parentId===t.parentId)),"sold-out"===t.isAvailable?(e.disabled=!0,i.classList.add("tw-hidden"),a?.classList.remove("tw-hidden"),this.quantitySelector?.classList?.add("tw-pointer-events-none","tw-opacity-60")):"available"===t.isAvailable&&e?.disabled&&(e.disabled=!1,i.classList.remove("tw-hidden"),a?.classList.add("tw-hidden"),this.quantitySelector?.classList?.remove("tw-pointer-events-none","tw-opacity-60"))}handleEligibilityInfo({unqualifiedInfo:t,unqualifiedText:e,variantTitle:i,productName:s,variantCompareAtPrice:a,mixAndSaveEnabled:r}){let n="";if("true"===t){n=`: <strong class="tw-font-semi-bold" id="">${i.toUpperCase()} ${e||"(not eligible for Mix+Save)"}</strong>`,this.mixAndSaveTooltip?.classList.add("tw-hidden"),this.mixAndSaveBuyBoxHighlight?.classList.add("tw-hidden"),this.compareAtPriceBuyBoxHighlight?.classList.add("tw-hidden"),this.sizeBuyBoxHighlight?.classList.add("tw-hidden");const t=parseFloat(a.replace(/[^0-9.-]+/g,""));a&&""!==a&&0!==t&&(n=`: <strong class="tw-font-semi-bold" id="">${i.toUpperCase()}</strong>`,"Gift Card"!==s&&(this.mixAndSaveTooltip?.classList.add("tw-hidden"),this.mixAndSaveBuyBoxHighlight?.classList.add("tw-hidden"),this.compareAtPriceBuyBoxHighlight?.classList.remove("tw-hidden"),this.sizeBuyBoxHighlight?.classList.add("tw-hidden"))),this.sizeBuyBoxHighlight?.dataset.sizeHighlight&&this.sizeBuyBoxHighlight.dataset.sizeHighlight.split(",").map(t=>t.trim().toUpperCase()).includes(i.toUpperCase())&&(n=`: <strong class="tw-font-semi-bold" id="">${i.toUpperCase()} ${e||"(not eligible for Mix+Save)"}</strong>`,"Gift Card"!==s&&(this.mixAndSaveTooltip?.classList.add("tw-hidden"),this.mixAndSaveBuyBoxHighlight?.classList.add("tw-hidden"),this.compareAtPriceBuyBoxHighlight?.classList.add("tw-hidden"),this.sizeBuyBoxHighlight?.classList.remove("tw-hidden")))}else n=`: <strong class="tw-font-semi-bold" id="">${i.toUpperCase()}</strong>`,"Gift Card"!==s&&"true"===r&&(this.mixAndSaveTooltip?.classList.remove("tw-hidden"),this.mixAndSaveBuyBoxHighlight?.classList.remove("tw-hidden"),this.compareAtPriceBuyBoxHighlight?.classList.add("tw-hidden"),this.sizeBuyBoxHighlight?.classList.add("tw-hidden"));this.eligibilityInfoElement.innerHTML=n}handleVariantImgVisibility(t){const e=document.querySelectorAll(".vim-img-card"),i=document.querySelectorAll(".vim-img-card-thumb"),s=t?.toUpperCase()?.split("|PDP_IMG_GALLERY")[1],a={};e.forEach(t=>{const{slideVariant:e}=t?.dataset;a[e]?a[e]+=1:a[e]=1});let r=1,n=a[s]||e?.length;n+=a._product_video?a._product_video:0;for(let t of e){const{slideVariant:e}=t.dataset;if(e?.includes(s)||"_product_video"===e){t.classList.add("!tw-block"),t.classList.remove("!tw-hidden");const e=t.querySelector("#gallery-pagination");e?.classList.contains("updated")||(e.textContent=`${r}/${n}`,e.classList.add("updated"),r++)}else t.classList.add("!tw-hidden"),t.classList.remove("!tw-block");window.pdp_gallery_slides?.update(),window.pdp_gallery_slides?.translateTo(0,100,!1,!1)}for(let t of i){const{slideVariant:e}=t.dataset;e?.includes(s)||"_product_video"===e?(t.classList.add("!tw-block"),t.classList.remove("!tw-hidden")):(t.classList.add("!tw-hidden"),t.classList.remove("!tw-block"))}this.handleSupplementDrawerImages(s)}handleSupplementDrawerImages(t){const e=new MutationObserver(e=>
1{e.forEach(e=>{if("childList"===e.type||"attributes"===e.type){const e=document.querySelectorAll("[data-supplement-fact-img]");e?.forEach(e=>{e.dataset.variantIdentifier===t?e.classList.remove("tw-hidden"):e.classList.add("tw-hidden")})}}),i()});e.observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["data-variant-identifier"]});const i=()=>{e.disconnect()}}updateAtcGaData(t){let e=JSON.parse(this.submitButton.getAttribute("data-vga-items").replace(/'/g,'"')),i=JSON.parse(this.submitButton.getAttribute("data-vga-ecommerce").replace(/'/g,'"'));e[0].item_variant=t.variantTitle,e[0].price=.01*t.variantAmount,i.value=.01*t.variantAmount,this.submitButton.setAttribute("data-vga-items",JSON.stringify(e)),this.submitButton.setAttribute("data-vga-ecommerce",JSON.stringify(i))}}class PdpQuantity extends HTMLElement{constructor(){super(),this.increaseBtn=this.querySelector("#increment-quantity"),this.decreaseBtn=this.querySelector("#decrement-quantity"),this.pdpQuantity=this.querySelector("#vim-pdp-quantity")}connectedCallback(){this.decreaseBtn?.addEventListener("click",t=>{t.stopPropagation(),this.updateQuantity(!1)}),this.increaseBtn?.addEventListener("click",t=>{t.stopPropagation(),this.updateQuantity(!0)})}updateQuantity=t=>{const{pdpQuantity:e}=this;t?e.value=Number(e.value)+1:!t&&e.value>1&&(e.value=Number(e.value)-1)}}customElements.get("vim-pdp-product-type")||customElements.define("vim-pdp-product-type",PDPTypeVariant),customElements.get("vim-pdp-product-sizes")||customElements.define("vim-pdp-product-sizes",ProductSizesHandler),customElements.get("vim-pdp-quantity")||customElements.define("vim-pdp-quantity",PdpQuantity);

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.