PageSourceSearch

https://frontierpets.com.au/cdn/shop/t/127/assets/custom-recharge-widget.js?v=109812660370690098441790305719

js frontierpets.com.au collected 2026-10-04 05:29:21 UTC 10,859 bytes, 7 lines download raw bytes

1document.addEventListener("DOMContentLoaded",async function(){const SELECTORS={addToCartButtons:".shopify-section--main-product .product-info__block-item .buy-buttons .button",productId:".shopify-section--main-product .product-info__block-list input[name='product-id']",variantId:".shopify-section--main-product .product-info__block-list input[name='id']",sellingPlanInput:".shopify-section--main-product .product-info__block-item input[name='selling_plan']",formAddToCart:".shopify-section--main-product .product-info__block-item form[action*='/cart/add']",disabledButtons:".shopify-section--main-product .product-info__block-item .button[disabled]",purchaseCards:".purchase-options .purchase-card",purchasePrice:".purchase-options .purchase-card--active .purchase-card__price .rc-price:last-child",frequencyRadio:".purchase-options .frequency-options input[type='radio']",subscriptionDetails:".purchase-options .purchase-card .subscription-details",tooltipButton:".purchase-options .purchase-card .subscription-details__button",tooltip:".purchase-options .purchase-card .subscription-tooltip",frequencyError:".purchase-options .purchase-card .fp-frequency-error"},addToCartBtn=document.querySelectorAll(SELECTORS.addToCartButtons),productName=document.querySelector(".product-title").innerText.trim(),productSku=document.querySelector(".product-title").getAttribute("custom-product-sku");function disableATCButton(){addToCartBtn.forEach(btn=>btn.setAttribute("disabled","disabled"))}function enableATCButton(){addToCartBtn.forEach(btn=>btn.removeAttribute("disabled"))}function hideFrequencyError(){document.querySelectorAll(SELECTORS.frequencyError).forEach(el=>el.style.display="none")}function resetFrequencySelection(){document.querySelectorAll(SELECTORS.frequencyRadio).forEach(radio=>radio.checked=!1)}function showLoader(){document.querySelector(".plan-loader")?.style.setProperty("display","block")}function hideLoader(){document.querySelector(".plan-loader")?.style.setProperty("display","none")}function createSellingPlanHiddenField(){let input=document.querySelector(SELECTORS.sellingPlanInput);
1if(!input){input=document.createElement("input"),input.type="hidden",input.name="selling_plan";const form=document.querySelector(SELECTORS.formAddToCart);form&&form.appendChild(input)}return input}function handleFrequencyChange(){const sellingPlanInput=createSellingPlanHiddenField(),selectedFrequency=document.querySelector(`${SELECTORS.frequencyRadio}:checked`);if(selectedFrequency){sellingPlanInput.value=selectedFrequency.value,enableATCButton(),hideFrequencyError();const price=selectedFrequency.dataset.price,priceEl=document.querySelector(SELECTORS.purchasePrice);priceEl&&price&&(priceEl.textContent="$"+price);let frequencyLabel=selectedFrequency.closest("label").querySelector(".rc-plans-button__interval").innerText.trim();window.dataLayer=window.dataLayer||[],dataLayer.push({event:"subscription_plan_selected",plan_length:frequencyLabel,product_name:productName,product_sku:productSku})}}function resetPurchaseOptions(){const onetimeRadio=document.querySelector("input[name='subscription_type'][value='onetime']"),sellingPlanInput=createSellingPlanHiddenField();sellingPlanInput.value="",resetFrequencySelection(),hideFrequencyError(),onetimeRadio&&onetimeRadio.checked?enableATCButton():disableATCButton()}function showStickyATCButton(){if(!window.matchMedia("(max-width: 999px)").matches)return;const stickyButton=document.querySelector(".shopify-section--main-product .product-info__block-item .buy-buttons");window.addEventListener("scroll",function(){window.scrollY>200?stickyButton.classList.add("is-visible"):stickyButton.classList.remove("is-visible")},{passive:!0})}function initPurchaseEvents(){const purchaseOptions=document.querySelectorAll(SELECTORS.purchaseCards);purchaseOptions.forEach(card=>{const input=card.querySelector("input[name='subscription_type']");input&&input.addEventListener("change",()=>{purchaseOptions.forEach(opt=>opt.classList.remove("purchase-card--active")),card.classList.add("purchase-card--active"),resetPurchaseOptions()})}),document.addEventListener("change",function(e){e.target.matches(SELECTORS.frequencyRadio)&&handleFrequencyChange()}),document.querySelectorAll(SELECTORS.subscriptionDetails).forEach(wrapper=>{const button=wrapper.querySelector(SELECTORS.tooltipButton),tooltip=wrapper.querySelector(SELECTORS.tooltip);!button||!tooltip||button.addEventListener("click",function(e){e.preventDefault();const isOpen=tooltip.style.display==="block";document.querySelectorAll(SELECTORS.tooltip).forEach(t=>t.style.display="none"),tooltip.style.display=isOpen?"none":"block"})}),document.addEventListener("click",function(e){e.target.closest(SELECTORS.subscriptionDetails)||document.querySelectorAll(SELECTORS.tooltip).forEach(t=>t.style.display="none")}),document.addEventListener("pointerdown",function(e){if(e.target.closest(SELECTORS.disabledButtons)){const errorEl=document.querySelector(".purchase-card--active").querySelector(SELECTORS.frequencyError);errorEl&&(errorEl.style.display="block",errorEl.scrollIntoView({behavior:"smooth",block:"center"}))}}),document.querySelectorAll(SELECTORS.addToCartButtons).forEach(function(btn){btn.addEventListener("click",function(){const selectedFrequency=document.querySelector(`${SELECTORS.frequencyRadio}:checked`);if(window.dataLayer=window.dataLayer||[],selectedFrequency){let frequencyLabel=selectedFrequency.closest("label").querySelector(".rc-plans-button__interval").innerText.trim();dataLayer.push({event:"subscription_add_to_cart",plan_length:frequencyLabel,product_name:productName,product_sku:productSku})}else dataLayer.push({event:"one_time_add_to_cart",product_name:productName,product_sku:productSku})})})}function populatePlans(card,plans,basePrice){const type=plans[0]?.type,container=card.querySelector(".purchase-options .frequency-options");container.innerHTML="";const titleEl=card.querySelector(".purchase-card__title"),badgeEl=card.querySelector(".purchase-card__badge");let discountPlan=null;plans.forEach(plan=>{let frequency="",inputName="",planId=plan.external_plan_id;const discount=parseInt(plan.discount_amount)||0;if((!discountPlan||discount>parseInt(discountPlan.discount_amount))&&(discountPlan=plan),type==="subscription"){let unit=plan.interval_unit;const num=parseInt(plan.order_interval_frequency);num>1&&(unit+="s"),frequency=num+" "+unit,inputName="rc_plan"}else frequency=plan.external_plan_name,inputName="delivery_frequency_prepaid";const label=document.createElement("label");label.classList.add("frequency-option"),label.innerHTML=`
2                <input type="radio" name="${inputName}" value="${planId}" data-price="${plan.discounted_price}">
3                <div class="rc-plans-button">
4                    <span class="rc-plans-button__interval">${frequency}</span>
5                </div>
6            `,container.appendChild(label)});const hasDiscount=discountPlan&&parseInt(discountPlan.discount_amount)>0;if(badgeEl&&hasDiscount){const discount=parseInt(discountPlan.discount_amount);badgeEl.innerHTML="Save "+discount+"%",badgeEl.style.display="block",titleEl&&(type==="subscription"?titleEl.innerHTML="Subscribe & Save "+discount+"%":type==="prepaid_v2"&&(titleEl.innerHTML="Prepaid Subscription Save "+discount+"%"))}const priceEl=card.querySelector(".purchase-card__price");discountPlan.discounted_price?priceEl.innerHTML='<s class="rc-price strike-through text-muted">$'+basePrice+'</s><span class="rc-price">$'+discountPlan.discounted_price+"</span>":priceEl.innerHTML='<span class="rc-price">$'+basePrice+"</span>"}function renderPlans(productData){const container=document.querySelector(".purchase-options .frequency-options");if(!productData&&!productData.variants){container.textContent="Invalid Recharge product object.";return}const selectedVariantId=document.querySelector(SELECTORS.variantId)?.value;let selectedVariant=null;if(selectedVariantId)selectedVariant=productData.variants.find(v=>String(v.external_variant_id)===String(selectedVariantId));else{container.textContent="Variant ID field not found in DOM";return}if(!Array.isArray(selectedVariant.prices)||selectedVariant.prices.length===0)container.textContent="Price object missing in variant",console.error("Price object missing in variant",selectedVariant);else{const priceObject=selectedVariant.prices[0],basePrice=priceObject.unit_price,mergedPlans=priceObject.plans.map(variantPlan=>{const fullPlan=productData.plans.find(productPlan=>productPlan.id===variantPlan.id);return fullPlan?{...fullPlan,discounted_price:variantPlan.discounted_price,discount_amount:fullPlan.discount_amount}:(console.error("Plan mapping failed",variantPlan.id),null)}).filter(Boolean);if(mergedPlans.length===0){console.error("No merged plans found after mapping");const allPurchaseOptions=document.querySelector(".purchase-options");allPurchaseOptions&&(allPurchaseOptions.style.display="none")}else{const subscriptionCard=document.querySelector("input[name='subscription_type'][value='subscription']")?.closest(".purchase-card"),subscriptionPlans=mergedPlans.filter(plan=>plan.type==="subscription").sort((a,b)=>a.order_interval_frequency-b.order_interval_frequency);subscriptionCard&&(subscriptionPlans.length===0?subscriptionCard.style.display="none":(subscriptionCard.style.display="block",populatePlans(subscriptionCard,subscriptionPlans,basePrice)));const prepaidCard=document.querySelector("input[name='subscription_type'][value='prepaid']")?.closest(".purchase-card"),prepaidPlans=mergedPlans.filter(plan=>plan.type==="prepaid_v2").sort((a,b)=>a.charge_interval_frequency-b.charge_interval_frequency);prepaidCard&&(prepaidPlans.length===0?prepaidCard.style.display="none":(prepaidCard.style.display="block",populatePlans(prepaidCard,prepaidPlans,basePrice)));const onetimeCard=document.querySelector("input[name='subscription_type'][value='onetime']")?.closest(".purchase-card"),onetimePlans=mergedPlans.filter(plan=>plan.type==="onetime");if(onetimeCard)if(onetimePlans.length===0)onetimeCard.style.display="none";else{const priceEl=onetimeCard.querySelector(".purchase-card__price");priceEl&&(priceEl.innerHTML='<span class="rc-price">$'+basePrice+"</span>")}}}}try{showLoader(),recharge.cdn.resetCDNCache();let rechargeProduct=null;const externalProductId=document.querySelector(SELECTORS.productId)?.value;rechargeProduct=await recharge.cdn.getCDNProduct(externalProductId,{version:"2022-06"}),renderPlans(rechargeProduct),hideLoader(),document.addEventListener("variant:change",function(event){event.detail.variant&&(renderPlans(rechargeProduct),resetPurchaseOptions())})}catch(error){hideLoader(),console.error("Recharge get product error:",error)}initPurchaseEvents(),resetPurchaseOptions(),showStickyATCButton()});
7//# sourceMappingURL=/cdn/shop/t/127/assets/custom-recharge-widget.js.map?v=109812660370690098441790305719

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.