(function ($) { 'use strict'; jQuery(document).ready(function () { if (typeof gtm4wp_datalayer_name !== "undefined" && typeof gtm4wp_first_container_id !== "undefined") { // track variable products on sticky bar & variation pop-up $(document).on('viwcaio_found_variation', function (event, product_variation) { if ("undefined" === typeof product_variation || !product_variation || !product_variation.variation_id) { // some ither plugins trigger this event without variation data return false; } if ((document.readyState === "interactive") && gtm4wp_changedetail_fired_during_pageload) { // some custom attribute rendering plugins fire this event multiple times during page load return false; } let product_form = event.target; let current_product_detail_data = { name: product_form.getAttribute('data-product_name'), id: product_variation.variation_id, price: product_variation.display_price, category: product_form.querySelector('[name=gtm4wp_category]') && product_form.querySelector('[name=gtm4wp_category]').value, stocklevel: product_form.querySelector('[name=gtm4wp_stocklevel]') && product_form.querySelector('[name=gtm4wp_stocklevel]').value, brand: product_form.querySelector('[name=gtm4wp_brand]') && product_form.querySelector('[name=gtm4wp_brand]').value, variant: '' }; if (gtm4wp_use_sku_instead && product_variation.sku && ('' !== product_variation.sku)) { current_product_detail_data.id = product_variation.sku; } let product_variation_attribute_values = []; for (let attrib_key in product_variation.attributes) { product_variation_attribute_values.push(product_variation.attributes[attrib_key]); } current_product_detail_data.variant = product_variation_attribute_values.join(','); if (typeof gtm4wp_last_selected_product_variation === "undefined") { window.gtm4wp_last_selected_product_variation = current_product_detail_data; } gtm4wp_last_selected_product_variation = current_product_detail_data; // fire ga3 version window[gtm4wp_datalayer_name].push({ 'event': 'viwcaio.gtm4wp.changeDetailViewEEC', 'ecommerce': { 'currencyCode': gtm4wp_currency, 'detail': { 'products': [current_product_detail_data] } }, 'ecomm_prodid': gtm4wp_id_prefix + current_product_detail_data.id, 'ecomm_pagetype': 'product', 'ecomm_totalvalue': current_product_detail_data.price, }); // fire ga4 version window[gtm4wp_datalayer_name].push({ 'event': 'view_item', 'ecommerce': { 'currency': gtm4wp_currency, 'value': current_product_detail_data.price, 'items': [gtm4wp_map_eec_to_ga4(current_product_detail_data)] } }); if (document.readyState === "interactive") { window.gtm4wp_changedetail_fired_during_pageload = true; } }); //add_to_cart $(document.body).on('click', '.vi-wcaio-product-bt-atc:not(.vi-wcaio-button-swatches-disable):not(.vi-wcaio-product-bt-atc-disabled):not(.vi-wcaio-product-bt-not-atc):not(.vi-wcaio-product-bt-atc-loading)', function (e) { let product_form = $(this).closest('.vi-wcaio-sb-cart-form, .vi-wcaio-va-cart-form, .vi-wcaio-sidebar-cart-footer-pd'); if (!product_form.length) { return true; } if (product_form.find('[name=variation_id]').length) { if (gtm4wp_last_selected_product_variation) { gtm4wp_last_selected_product_variation.quantity = product_form.find('[name=quantity]').val() || 1; // fire ga3 version window[gtm4wp_datalayer_name].push({ 'event': 'viwcaio.gtm4wp.addProductToCartEEC', 'ecommerce': { 'currencyCode': gtm4wp_currency, 'add': { 'products': [gtm4wp_last_selected_product_variation] } } }); // fire ga4 version window[gtm4wp_datalayer_name].push({ 'event': 'add_to_cart', 'ecommerce': { 'currency': gtm4wp_currency, 'value': gtm4wp_last_selected_product_variation.price * gtm4wp_last_selected_product_variation.quantity, 'items': [gtm4wp_map_eec_to_ga4(gtm4wp_last_selected_product_variation)] } }); } } else { let product_data = !product_form.hasClass('vi-wcaio-sidebar-cart-footer-pd') ? { 'id': gtm4wp_use_sku_instead ? product_form.data('product_sku') : product_form.data('product_id'), 'name': product_form.data('product_name') || product_form.find('[name=gtm4wp_name]').val(), 'price': parseFloat(product_form.data('product_price') || product_form.find('[name=gtm4wp_price]').val()), 'quantity': product_form.find('[name=quantity]').val() || 1, 'category': product_form.find('[name=gtm4wp_category]').val(), 'stocklevel': product_form.find('[name=gtm4wp_stocklevel]').val(), 'brand': product_form.find('[name=gtm4wp_brand]').val(), } : { 'id': gtm4wp_use_sku_instead ? $(this).data('product_sku') : $(this).data('product_id'), 'name': $(this).data('product_name'), 'price': parseFloat($(this).data('product_price')), 'quantity': $(this).find('[name=quantity]').val() || 1, }; // fire ga3 version window[gtm4wp_datalayer_name].push({ 'event': 'viwcaio.gtm4wp.addProductToCartEEC', 'ecommerce': { 'currencyCode': gtm4wp_currency, 'add': { 'products': [product_data] } } }); // fire ga4 version window[gtm4wp_datalayer_name].push({ 'event': 'add_to_cart', 'ecommerce': { 'currency': gtm4wp_currency, 'value': product_data.price * product_data.quantity, 'items': [gtm4wp_map_eec_to_ga4(product_data)] } }); } }); //remove cart item $(document).on('viwcaio_before_remove_from_cart', function (e, button) { let product = $(button).closest('.vi-wcaio-sidebar-cart-pd-wrap'); let qty = product.find('.vi_wcaio_qty').val(); if (!qty) { return false; } let product_data = { 'name': product.data('gtm4wp_product_name'), 'id': product.data('gtm4wp_product_id'), 'price': product.data('gtm4wp_product_price'), 'category': product.data('gtm4wp_product_cat'), 'variant': product.data('gtm4wp_product_variant'), 'stocklevel': product.data('gtm4wp_product_stocklevel'), 'brand': product.data('gtm4wp_product_brand'), 'quantity': qty }; // fire ga3 version window[gtm4wp_datalayer_name].push({ 'event': 'viwcaio.gtm4wp.removeFromCartEEC', 'ecommerce': { 'currencyCode': gtm4wp_currency, 'remove': { 'products': [product_data] } } }); // fire ga4 version window[gtm4wp_datalayer_name].push({ 'event': 'remove_from_cart', 'ecommerce': { 'currency': gtm4wp_currency, 'value': product_data.price * product_data.quantity, 'items': [gtm4wp_map_eec_to_ga4(product_data)] } }); }); //change cart item qty $(document).on('viwcaio_before_update_cart', function (e) { $('.vi-wcaio-sidebar-cart-pd-wrap .vi_wcaio_qty_update').each(function (k, v) { let old_val = parseFloat($(this).prop('defaultValue')), val = parseFloat($(this).val()); if (isNaN(val)) { val = old_val; } if (val === old_val) { return true; } let product = $(this).closest('.vi-wcaio-sidebar-cart-pd-wrap'); let product_data = { 'name': product.data('gtm4wp_product_name'), 'id': product.data('gtm4wp_product_id'), 'price': parseFloat(product.data('gtm4wp_product_price') || 0).toFixed(2), 'category': product.data('gtm4wp_product_cat'), 'variant': product.data('gtm4wp_product_variant'), 'stocklevel': product.data('gtm4wp_product_stocklevel'), 'brand': product.data('gtm4wp_product_brand'), 'quantity': val }; if (old_val < val) { product_data['quantity'] = val - old_val; // fire ga3 version window[gtm4wp_datalayer_name].push({ 'event': 'viwcaio.gtm4wp.addProductToCartEEC', 'ecommerce': { 'currencyCode': gtm4wp_currency, 'add': { 'products': [product_data] } } }); // fire ga4 version window[gtm4wp_datalayer_name].push({ 'event': 'add_to_cart', 'ecommerce': { 'currency': gtm4wp_currency, 'value': product_data.price * product_data.quantity, 'items': [gtm4wp_map_eec_to_ga4(product_data)] } }); } else { product_data['quantity'] = old_val - val; // fire ga3 version window[gtm4wp_datalayer_name].push({ 'event': 'viwcaio.gtm4wp.removeFromCartEEC', 'ecommerce': { 'currencyCode': gtm4wp_currency, 'remove': { 'products': [product_data] } } }); // fire ga4 version window[gtm4wp_datalayer_name].push({ 'event': 'remove_from_cart', 'ecommerce': { 'currency': gtm4wp_currency, 'value': product_data.price * product_data.quantity, 'items': [gtm4wp_map_eec_to_ga4(product_data)] } }); } }); }); } if (typeof viwcaio_effect_atc !== "undefined" && viwcaio_effect_atc.effect) { let count = 1; setTimeout(function () { $(document.body).trigger('viwcaio_effect_atc'); }, 200); $(document.body).on('viwcaio_effect_atc', function () { if (!$('form.cart:not(.viwcaio_effect_atc-init),.variations_form:not(.viwcaio_effect_atc-init),.vi-wcaio-sb-cart-form:not(.viwcaio_effect_atc-init)').length) { setTimeout(function () { if (count < 6) { count++; $(document.body).trigger('viwcaio_effect_atc'); return false; } count = 1; }, 500); return false; } $(this).find('.single_add_to_cart_button, .vi-wcaio-product-bt-atc').addClass('viwcaio-effect-' + viwcaio_effect_atc.effect); }); $(document).on('ajaxComplete', function () { setTimeout(function () { $(document.body).trigger('viwcaio_effect_atc'); }, 100); return false; }); } }); })(jQuery);