1"use strict";(self.webpackChunkWPRecipeMakerPublicSplit=self.webpackChunkWPRecipeMakerPublicSplit||[]).push([[582],{3035:(t,e,r)=>{r.d(e,{A:()=>a});const a={notifyAddedToCart(t={}){const e=!(!t||!t.fragments)&&t.fragments,r=e&&0<Object.keys(e).length,a=t&&t.cart_hash?t.cart_hash:"";document.dispatchEvent(new CustomEvent("wprm_products_added_to_cart",{detail:{fragments:!!r&&e,cart_hash:a,response:t}})),window.jQuery&&(r?window.jQuery(document.body).trigger("added_to_cart",[e,a,!1]):window.jQuery(document.body).trigger("wc_fragment_refresh"))}}},9520:(t,e,r)=>{r.r(e),r.d(e,{default:()=>d});var a=r(942),n=r(3035);const o={init(){this.addModalHandlers(),this.addModalEventListeners()},addModalHandlers(){document.addEventListener("click",(t=>{const e=t.target.closest(".wprm-recipe-add-products-to-cart");if(e&&e.dataset.modalUid){t.preventDefault();const r=e.dataset.modalUid,a=e.dataset.recipeId;window.WPRecipeMaker&&window.WPRecipeMaker.modal&&window.WPRecipeMaker.modal.open(r,{recipe:a})}}))},addModalEventListeners(){document.addEventListener("wprm-modal-open",(t=>{"products"===t.detail.type&&this.initializeModal(t.detail.modal)})),document.addEventListener("wprm-modal-close",(t=>{"products"===t.detail.type&&this.cleanupModal(t.detail.modal)}))},initializeModal(t){t._wprmpEventListeners=[],this.updateButtonText(),this.addProductEventListeners(t),this.checkServingSizeChanges(t),this.addAddToCartListener(t),this.resetGoToCartButton(t),this.addCartSummaryToFooter(t),this.loadCartSummary(t)},cleanupModal(t){t._wprmpEventListeners&&(t._wprmpEventListeners.forEach((({element:t,event:e,handler:r})=>{t.removeEventListener(e,r)})),t._wprmpEventListeners=[])},addProductEventListeners(t){const e=t.querySelector(".wprm-popup-modal__content");if(!e)return;const r=t=>{t.target.classList.contains("wprmp-product-select")&&this.handleProductSelection(t.target)};e.addEventListener("change",r),t._wprmpEventListeners.push({element:e,event:"change",handler:r});const a=t=>{t.target.classList.contains("wprmp-quantity-input")&&this.handleQuantityChange(t.target)};e.addEventListener("input",a),t._wprmpEventListeners.push({element:e,event:"input",handler:a})},handleProductSelection(t){const e=t.closest(".wprmp-product-item");e&&(t.checked?e.classList.remove("wprmp-product-disabled"):e.classList.add("wprmp-product-disabled")),this.updateButtonText()},handleQuantityChange(t){parseInt(t.value)<1&&(t.value=1)},addAddToCartListener(t){const e=t.querySelector(".wprmp-add-products-to-cart-btn");if(!e)return;const r=()=>{this.handleAddToCart(t)};e.addEventListener("click",r),t._wprmpEventListeners.push({element:e,event:"click",handler:r})},handleAddToCart(t){const e=this.getSelectedProducts(t),r=this.getRecipeIdFromModal(t);if(0===e.length)return void alert((0,a.f)("Please select at least one product to add to cart."));const o=t.querySelector(".wprmp-add-products-to-cart-btn"),d=o.textContent;o.textContent=(0,a.f)("Adding to Cart..."),o.disabled=!0,this.addProductsToCart(e).then((e=>{this.trackSuccessfulAddToCart(t,r);const a=t._wprmpEventListeners.find((t=>t.element===o&&"click"===t.event));a&&(o.removeEventListener("click",a.handler),t._wprmpEventListeners=t._wprmpEventListeners.filter((t=>!(t.element===o&&"click"===t.event)))),this.configureButtonAsClose(t,o),this.enableGoToCartButton(t),this.loadCartSummary(t),n.A.notifyAddedToCart(e)})).catch((t=>{console.error("Add to cart error:",t),alert((0,a.f)("Failed to add products to cart. Please try again.")),o.textContent=d,o.disabled=!1}))},getSelectedProducts(t){const e=[];return t.querySelectorAll(".wprmp-product-item").forEach(((t,r)=>{const a=t.querySelector(".wprmp-product-select");if(a&&a.checked){const r=t.dataset.productId,a=t.dataset.variationId,n=t.querySelector(".wprmp-quantity-input"),o=n?parseInt(n.value):1;e.push({product_id:r,variation_id:a,quantity:o})}})),e},async addProductsToCart(t){let e={};for(const r of t)e=await this.addSingleProductToCart(r);return e},async addSingleProductToCart(t){const e=new FormData;e.append("action","wprmp_add_product_to_cart"),e.append("product_id",t.product_id),e.append("quantity",t.quantity),t.variation_id&&e.append("variation_id",t.variation_id),"undefined"!=typeof wprm_public&&wprm_public.api_nonce&&e.append("_wpnonce",wprm_public.api_nonce);const r=await fetch(wprm_public.ajax_url,{method:"POST",body:e,credentials:"same-origin"}),a=await r.json();if(!a.success)throw new Error(a.data.message||"Failed to add product to cart");return a.data||{}},trackSuccessfulAddToCart(t,e){t&&e&&window.WPRecipeMaker&&window.WPRecipeMaker.analytics&&window.WPRecipeMaker.analytics.registerAction(e,wprm_public.post_id,"add-products-to-cart")},checkServingSizeChanges(t){const e=this.getRecipeIdFromModal(t);e&&window.WPRecipeMaker&&window.WPRecipeMaker.manager&&window.WPRecipeMaker.manager.getRecipe(e).then((e=>{if(e&&e.data){const r=e.data.currentServingsParsed,a=e.data.originalServingsParsed;
1if(r&&a&&r!==a){const e=r/a;t.querySelectorAll('.wprmp-product-item[data-type="ingredient"]').forEach((t=>{const r=parseFloat(t.dataset.originalAmount);if(r&&1!==e){const a=Math.ceil(r*e),n=t.querySelector(".wprmp-quantity-input");n&&(n.value=a)}}))}}}))},getRecipeIdFromModal(t){let e=t.dataset.recipeId;if(!e)for(let r=t.parentNode;r&&r!=document;r=r.parentNode)if(r.matches(".wprm-recipe-container")){e=r.dataset.recipeId;break}return e},updateButtonText(){document.querySelectorAll('.wprm-popup-modal[data-type="products"]').forEach((t=>{const e=t.querySelector(".wprmp-add-products-to-cart-btn");if(!e)return;const r=t.querySelectorAll(".wprmp-product-select:checked").length;e.textContent=1===r?(0,a.f)("Add 1 Product to Cart"):(0,a.f)("Add %d Products to Cart").replace("%d",r),e.disabled=0===r}))},addCartSummaryToFooter(t){const e=t.querySelector(".wprm-popup-modal__footer");if(!e)return;if(e.querySelector(".wprmp-modal-cart-summary"))return;const r=document.createElement("div");r.className="wprmp-modal-cart-summary",r.innerHTML=`<div class="wprmp-product-tooltip-cart-summary"><span class="wprmp-cart-count">${(0,a.f)("Loading cart...")}</span></div>`,e.appendChild(r)},loadCartSummary(t){const e=t.querySelector(".wprmp-cart-count");return e?(e.textContent=(0,a.f)("Loading cart..."),this.getCartData().then((r=>(this.displayCartSummary(t,e,r),r))).catch((t=>(console.error("Failed to load cart data:",t),e.textContent=(0,a.f)("Unable to load cart"),null)))):Promise.resolve(null)},displayCartSummary(t,e,r){if(r&&r.item_count>0){const n=r.total?` - ${r.total}`:"",o=(0,a.f)("your cart"),d=r.cart_url||"#",c="#"!==d?(0,a.f)("%d in %s").replace("%d",r.item_count).replace("%s",`<a href="${d}" class="wprmp-cart-link">${o}</a>`):(0,a.f)("%d in %s").replace("%d",r.item_count).replace("%s",o);e.innerHTML=c+n,t&&(t.dataset.cartUrl=d)}else e.textContent=(0,a.f)("Cart is empty"),t&&(t.dataset.cartUrl="#")},getCartData:()=>new Promise(((t,e)=>{const r=new FormData;r.append("action","wprmp_get_cart_data"),"undefined"!=typeof wprm_public&&wprm_public.api_nonce&&r.append("_wpnonce",wprm_public.api_nonce),fetch(wprm_public.ajax_url,{method:"POST",body:r,credentials:"same-origin"}).then((t=>{if(!t.ok)throw new Error(`HTTP error! status: ${t.status}`);return t.text()})).then((r=>{try{const a=JSON.parse(r);a.success?t(a.data):e(new Error(a.data.message||"Failed to get cart data"))}catch(a){console.error("JSON parse error:",a),console.error("Response text:",r),e(new Error("Invalid JSON response"))}})).catch((e=>{console.error("Cart data fetch error:",e),t({item_count:0,total:"",cart_url:"#"})}))})),configureButtonAsClose(t,e){e.textContent=(0,a.f)("Close Modal"),e.classList.add("wprmp-success"),e.disabled=!1,e.onclick=()=>{window.WPRecipeMaker&&window.WPRecipeMaker.modal&&window.WPRecipeMaker.modal.close(t.id.replace("wprm-popup-modal-",""))}},resetGoToCartButton(t){const e=t.querySelector(".wprmp-go-to-cart-btn");e&&(e.disabled=!0,e.classList.remove("wprmp-success"),e.onclick=null,e.setAttribute("hidden","hidden"))},enableGoToCartButton(t){const e=t.querySelector(".wprmp-go-to-cart-btn");if(!e)return;const r=e.dataset.cartUrl;r&&"#"!==r&&(e.removeAttribute("hidden"),e.disabled=!1,e.classList.add("wprmp-success"),e.onclick=()=>{window.location.href=r})}};"loading"===document.readyState?document.addEventListener("DOMContentLoaded",(()=>o.init())):o.init();const d=o}}]);
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.