1;(function ($) { 2 'use strict'; 3 4 /** 5 * @TODO Code a function that calculate available combination instead of use WC hooks 6 */ 7 $.fn.tawcvs_variation_swatches_form = function () { 8 return this.each(function () { 9 var $form = $(this); 10 11 if (typeof $form.find(".tawcvs-available-product-variation").data("product_variations") !== "undefined") { 12 $form.data("product_variations", $form.find(".tawcvs-available-product-variation").data("product_variations")) 13 .trigger('reload_product_variations') 14 .trigger('update_variation_values'); 15 } 16 17 $form 18 .addClass('swatches-support') 19 .on("found_variation", function (event, variation) { 20 $form.change_variation_image_on_shop_page(variation); 21 }) 22 .on("reset_image", function (event) { 23 $form.change_variation_image_on_shop_page(false); 24 }) 25 .on('click', '.swatch', function (e) { 26 e.preventDefault(); 27 e.stopImmediatePropagation(); 28 var $el = $(this); 29 let $select = false, value = false; 30 31 if (!$("body").hasClass("single-product") && 32 $("body").find(".wc-product-table-wrapper").length) { 33 //For product table page 34 let attribute_name = $el.closest('.tawcvs-swatches').data("attribute_name"); 35 $select = $el.closest('.variations').find('select[data-attribute_name="' + attribute_name + '"]'); 36 value = $el.attr('data-value'); 37 } else { 38 //For normal variable product page 39 $select = $el.closest('.value').find('select'); 40 value = $el.attr('data-value'); 41 } 42 43 if ($el.hasClass('disabled')) { 44 return; 45 } 46 47 //Woo product bundle plugin uses "select" class instead of "value" class 48 if (!$select.length) { 49 if ($form.closest(".woosb-product").length) { 50 $select = $el.closest('.select').find('select'); 51 } 52 } 53 54 //Disabling other swatches, then resetting the select value to empty 55 $el.parents('.tawcvs-swatches').find(".swatch.selected").each(function () { 56 $(this).not($el).removeClass("selected"); 57 $select.val(''); 58 }) 59 60 // For old WC 61 $select.trigger('focusin'); 62 63 // Check if this combination is available 64 if (!$select.find('option[value="' + value + '"]').length) { 65 $el.siblings('.swatch').removeClass('selected'); 66 $select.val('').change(); 67 $form.trigger('tawcvs_no_matching_variations', [$el]); 68 return; 69 } 70 71 if ($el.hasClass('selected')) { 72 $select.val(''); 73 $el.removeClass('selected'); 74 75 if ($el.attr('type') == 'radio') { 76 setTimeout(function() { 77 $el.prop('checked', false); 78 }, 100); 79 } 80 } else { 81 $el.addClass('selected').siblings('.selected').removeClass('selected'); 82 $select.val(value); 83 84 if ($el.attr('type') == 'radio') { 85 setTimeout(function() { 86 $el.prop('checked', true); 87 }, 100); 88 } 89 } 90 91 $select.change(); 92 }) 93 .on('click', '.reset_variations', function () { 94 $form.find('.swatch.selected').removeClass('selected'); 95 $form.find('.swatch.disabled').removeClass('disabled'); 96 97 if ($form.find('input[type="radio"]').length > 1) { 98 $form.find('input[type="radio"]').prop('checked', false); 99 } 100 }) 101 .on('woocommerce_update_variation_values', function () { 102 setTimeout(function () { 103 $form.find('.variation-selector').each(function () { 104 var $variationSelector = $(this), 105 $options = $variationSelector.find('select').find('option'), 106 $selected = $options.filter(':selected'), 107 values = []; 108 109 $options.each(function (index, option) { 110 if (option.value !== '') { 111 values.push(option.value); 112 } 113 }); 114 115 $variationSelector.closest('.value').find('.swatch').each(function () { 116 var $swatch = $(this), 117 value = $swatch.attr('data-value'); 118 119 $swatch.closest('.swatch-item-wrapper').show(); 120 121 if (values.indexOf(value) > -1) { 122 $swatch.removeClass('disabled'); 123 } else { 124 $swatch.addClass('disabled'); 125 126 if ($swatch.closest('.tawcvs-swatches').hasClass('oss-hide')) { 127 $swatch.closest('.swatch-item-wrapper').hide(); 128 } 129 130 if ($selected.length && value === $selected.val()) { 131 $swatch.removeClass('selected'); 132 } 133 } 134 }); 135 }); 136 }, 100); 137 }) 138 .on('tawcvs_no_matching_variations', function () { 139 window.alert(wc_add_to_cart_variation_params.i18n_no_matching_variations_text); 140 }); 141 }); 142 }; 143 144 $.fn.change_variation_image_on_shop_page = function (variation) { 145 var $product = $(this).closest('.product'), 146 $product_img = $product.find('.woocommerce-LoopProduct-link img'); 147 148 if ($product_img.length !== 1) { 149 return false;
150 } 151 152 if (variation && variation.image && variation.image.src && variation.image.src.length > 1) { 153 $product_img.wc_set_variation_attr('src', variation.image.src); 154 $product_img.wc_set_variation_attr('height', variation.image.src_h); 155 $product_img.wc_set_variation_attr('width', variation.image.src_w); 156 $product_img.wc_set_variation_attr('srcset', variation.image.srcset); 157 $product_img.wc_set_variation_attr('sizes', variation.image.sizes); 158 $product_img.wc_set_variation_attr('title', variation.image.title); 159 $product_img.wc_set_variation_attr('data-caption', variation.image.caption); 160 $product_img.wc_set_variation_attr('alt', variation.image.alt); 161 $product_img.wc_set_variation_attr('data-src', variation.image.full_src); 162 $product_img.wc_set_variation_attr('data-large_image', variation.image.full_src); 163 $product_img.wc_set_variation_attr('data-large_image_width', variation.image.full_src_w); 164 $product_img.wc_set_variation_attr('data-large_image_height', variation.image.full_src_h); 165 } else { 166 $product_img.wc_reset_variation_attr('src'); 167 $product_img.wc_reset_variation_attr('width'); 168 $product_img.wc_reset_variation_attr('height'); 169 $product_img.wc_reset_variation_attr('srcset'); 170 $product_img.wc_reset_variation_attr('sizes'); 171 $product_img.wc_reset_variation_attr('title'); 172 $product_img.wc_reset_variation_attr('data-caption'); 173 $product_img.wc_reset_variation_attr('alt'); 174 $product_img.wc_reset_variation_attr('data-src'); 175 $product_img.wc_reset_variation_attr('data-large_image'); 176 $product_img.wc_reset_variation_attr('data-large_image_width'); 177 $product_img.wc_reset_variation_attr('data-large_image_height'); 178 } 179 } 180 181 //Tracking the reset_variations button on change visibility -> change the corresponding display state 182 function toggle_hidden_variation_btn() { 183 const resetVariationNodes = document.getElementsByClassName('reset_variations'); 184 if (resetVariationNodes.length) { 185 Array.prototype.forEach.call(resetVariationNodes, function (resetVariationEle) { 186 let observer = new MutationObserver(function () { 187 if (resetVariationEle.style.visibility !== 'hidden') { 188 resetVariationEle.style.display = 'block'; 189 } else { 190 resetVariationEle.style.display = 'none'; 191 } 192 }); 193 observer.observe(resetVariationEle, {attributes: true, childList: true}); 194 }) 195 } 196 } 197 198 $(function () { 199 $('.variations_form').tawcvs_variation_swatches_form().trigger('woocommerce_update_variation_values'); 200 $(document.body).trigger('tawcvs_initialized'); 201 toggle_hidden_variation_btn(); 202 }); 203 204 $(document).ajaxComplete(function () { 205 var $variations_form = $('.variations_form:not(.swatches-support)'); 206 if ($variations_form.length > 0) { 207 $variations_form.each(function () { 208 $(this).wc_variation_form(); 209 }); 210 $variations_form.tawcvs_variation_swatches_form(); 211 } 212 }); 213})(jQuery);
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.