| 1 |
"use strict"; |
| 2 |
|
| 3 |
(function ($) { |
| 4 |
const ajaxUrl = (endpoint) => { |
| 5 |
if (typeof wc_add_to_cart_params !== "undefined") { |
| 6 |
return wc_add_to_cart_params.wc_ajax_url.replace("%%endpoint%%", endpoint); |
| 7 |
} |
| 8 |
return ""; |
| 9 |
}; |
| 10 |
|
| 11 |
const fetchProductFragment = (productId, settings, nonce) => { |
| 12 |
const url = ajaxUrl("king_addons_qv"); |
| 13 |
if (!url) { |
| 14 |
return Promise.reject(new Error("Missing AJAX URL")); |
| 15 |
} |
| 16 |
return $.post(url, { product_id: productId, qv_settings: settings, nonce: nonce || "" }); |
| 17 |
}; |
| 18 |
|
| 19 |
const closeModal = (modal) => { |
| 20 |
modal.classList.remove("is-open"); |
| 21 |
const productContainer = modal.querySelector(".king-addons-quick-view__product"); |
| 22 |
if (productContainer) { |
| 23 |
productContainer.innerHTML = ""; |
| 24 |
} |
| 25 |
}; |
| 26 |
|
| 27 |
const initQuickView = ($scope) => { |
| 28 |
const root = $scope[0]?.querySelector(".king-addons-quick-view"); |
| 29 |
if (!root) { |
| 30 |
return; |
| 31 |
} |
| 32 |
|
| 33 |
const trigger = root.querySelector(".king-addons-quick-view__trigger"); |
| 34 |
const modal = root.querySelector(".king-addons-quick-view__modal"); |
| 35 |
const overlay = root.querySelector(".king-addons-quick-view__overlay"); |
| 36 |
const closeBtn = root.querySelector(".king-addons-quick-view__close"); |
| 37 |
const loader = root.querySelector(".king-addons-quick-view__loader"); |
| 38 |
const productContainer = root.querySelector(".king-addons-quick-view__product"); |
| 39 |
|
| 40 |
if (!trigger || !modal || !overlay || !closeBtn || !loader || !productContainer) { |
| 41 |
return; |
| 42 |
} |
| 43 |
|
| 44 |
const productId = parseInt(root.dataset.productId || "0", 10); |
| 45 |
const settings = root.dataset.qvSettings || ""; |
| 46 |
const nonce = root.dataset.nonce || ""; |
| 47 |
if (!productId) { |
| 48 |
return; |
| 49 |
} |
| 50 |
|
| 51 |
const openModal = () => { |
| 52 |
modal.classList.add("is-open"); |
| 53 |
loader.classList.add("is-active"); |
| 54 |
productContainer.innerHTML = ""; |
| 55 |
|
| 56 |
fetchProductFragment(productId, settings, nonce) |
| 57 |
.done((response) => { |
| 58 |
loader.classList.remove("is-active"); |
| 59 |
if (response && response.html) { |
| 60 |
productContainer.innerHTML = response.html; |
| 61 |
const $body = $(document.body); |
| 62 |
$body.trigger("wc_fragments_refreshed"); |
| 63 |
const $forms = $(productContainer).find("form.variations_form"); |
| 64 |
if ($forms.length) { |
| 65 |
$forms.each(function () { |
| 66 |
const $form = $(this); |
| 67 |
$form.wc_variation_form(); |
| 68 |
$form.find(".variations select").trigger("change"); |
| 69 |
}); |
| 70 |
} |
| 71 |
} else { |
| 72 |
productContainer.innerHTML = "<p>Product not found.</p>"; |
| 73 |
} |
| 74 |
}) |
| 75 |
.fail(() => { |
| 76 |
loader.classList.remove("is-active"); |
| 77 |
productContainer.innerHTML = "<p>Error loading product.</p>"; |
| 78 |
}); |
| 79 |
}; |
| 80 |
|
| 81 |
const handleClose = () => { |
| 82 |
closeModal(modal); |
| 83 |
}; |
| 84 |
|
| 85 |
trigger.addEventListener("click", (event) => { |
| 86 |
event.preventDefault(); |
| 87 |
openModal(); |
| 88 |
}); |
| 89 |
|
| 90 |
overlay.addEventListener("click", handleClose); |
| 91 |
closeBtn.addEventListener("click", handleClose); |
| 92 |
|
| 93 |
document.addEventListener("keydown", (event) => { |
| 94 |
if (event.key === "Escape" && modal.classList.contains("is-open")) { |
| 95 |
handleClose(); |
| 96 |
} |
| 97 |
}); |
| 98 |
}; |
| 99 |
|
| 100 |
$(window).on("elementor/frontend/init", () => { |
| 101 |
elementorFrontend.hooks.addAction( |
| 102 |
"frontend/element_ready/king-addons-quick-view-product.default", |
| 103 |
($scope) => { |
| 104 |
initQuickView($scope); |
| 105 |
} |
| 106 |
); |
| 107 |
}); |
| 108 |
})(jQuery); |
| 109 |
|
| 110 |
|
| 111 |
|
| 112 |
|
| 113 |
|
| 114 |
|
| 115 |
|
| 116 |
|