(function(document, $){
var $cache={};
function generate_cache(){
$cache.document=$(document);
$cache.first_payment_date=$('.first-payment-date');
$cache.subscription_details=$(
'.woocommerce-subscriptions-product-details'
);
$cache.is_variable_subscription =
0 < $('.product-type-variable-subscription').length;
}
function attach_events(){
if($cache.is_variable_subscription){
$cache.document.on('found_variation', update_variation_elements);
$cache.document.on('reset_data', clear_variation_elements);
}}
function update_variation_elements(event, variation_data){
var details=variation_data.subscription_details_html||'';
var has_details=''!==details;
$cache.first_payment_date.html(variation_data.first_payment_html);
$cache.subscription_details.html(details).toggle(has_details);
tighten_variation_price_spacing(has_details);
}
function clear_variation_elements(){
$cache.first_payment_date.html('');
$cache.subscription_details.empty().hide();
tighten_variation_price_spacing(false);
}
function tighten_variation_price_spacing(tighten){
$cache.subscription_details
.closest('.single_variation_wrap')
.toggleClass('wcsatt-variation-has-details', tighten);
}
function init(){
generate_cache();
attach_events();
}
$(init);
})(document, jQuery);
var canClick=false;
function activateStickThis(){
for(var el in sticky_anything_engage.elements){
var conf=sticky_anything_engage.elements[el];
jQuery(conf.element).stickThis({
target: conf.element,
top:conf.topspace,
position:conf.position,
detach:conf.detach,
minscreenwidth:conf.minscreenwidth,
maxscreenwidth:conf.maxscreenwidth,
screen_small: conf.screen_small,
screen_medium: conf.screen_medium,
screen_large: conf.screen_large,
screen_extralarge: conf.screen_extralarge,
zindex:conf.zindex,
legacymode:sticky_anything_engage.legacymode,
dynamicmode:sticky_anything_engage.dynamicmode,
fade_in: conf.fade_in,
slide_down: conf.slide_down,
bottom_trigger: conf.bottom_trigger,
opacity: conf.opacity,
scroll_range_min: conf.scroll_range_min,
scroll_range_max: conf.scroll_range_max,
debugmode:sticky_anything_engage.debugmode=="1",
pushup:conf.pushup,
adminbar:conf.adminbar,
bg_color:conf.bg_color,
custom_css: conf.custom_css
});
}}
function activateStickThisVisualPicker($){
jQuery.fn.extend({
getPath: function (){
var path,
node=this,
realNode,
name,
parent,
index,
sameTagSiblings,
allSiblings,
className,
classSelector,
nestingLevel=true;
while (node.length&&nestingLevel){
realNode=node[0];
name=realNode.localName;
if(!name) break;
name=name.toLowerCase();
parent=node.parent();
sameTagSiblings=parent.children(name);
if(realNode.id){
name +="#" + node[0].id;
nestingLevel=false;
}else if(realNode.className.length){
className=realNode.className.trim().split(' ');
classSelector='';
className.forEach(function (item){
classSelector +='.' + item;
});
name +=classSelector;
}else if(sameTagSiblings.length > 1){
allSiblings=parent.children();
index=allSiblings.index(realNode) + 1;
if(index > 1){
name +=':nth-child(' + index + ')';
}}
path=name + (path ? '>' + path:'');
node=parent;
}
return path;
}});
function handlerMouseEnter(ev){
var target=$(ev.target);
var pathToSelect=target.getPath();
$(pathToSelect).addClass("smoa-visual-picker-selected");
$(pathToSelect).mouseout(handlerMouseLeave);
$(pathToSelect).click(handlerClick);
window.top.postMessage({
messageType: 'smoa-iframe',
pathToSelect: pathToSelect
}, '*');
}
function handlerMouseLeave(ev){
$(ev.target).removeClass("smoa-visual-picker-selected");
}
function handlerClick(ev){
if(!canClick){
ev.preventDefault();
window.top.postMessage({
messageType: 'smoa-close-iframe'
}, '*');
}}
$("body").mouseover(handlerMouseEnter);
}
(function($){
$(document).ready(function($){
activateStickThis();
if(sticky_anything_engage.smoa_visual_picker){
activateStickThisVisualPicker($);
var urlParams=new URLSearchParams(window.location.search);
if(urlParams.has('smoa-can-click')){
canClick=urlParams.get('smoa-can-click');
}
$('a').on('click', function(){
var href=new URL($(this).attr('href'));
href.searchParams.set('smoa-disable-admin-bar', true);
href.searchParams.set('smoa-can-click', canClick);
$(this).attr('href', href.toString());
});
window.onmessage=function(e){
if(e.data.messageType=='smoa-tick'){
canClick=e.data.canClick;
}};}});
}(jQuery));
function on_keydown_remove_from_cart(e){" "===e.key&&(e.preventDefault(),e.currentTarget.click())}function focus_populate_live_region(){var e=["woocommerce-message","woocommerce-error","wc-block-components-notice-banner"].map(function(e){return"."+e+'[role="alert"]'}).join(", "),o=document.querySelectorAll(e);if(0!==o.length){var t=o[0];t.setAttribute("tabindex","-1");var n=setTimeout(function(){t.focus(),clearTimeout(n)},500)}}function refresh_sorted_by_live_region(){var e=document.querySelector(".woocommerce-result-count"),o=document.querySelector('[data-wp-interactive="woocommerce/product-filters"]');if(e&&window.location.search&&!o){var t=e.innerHTML;e.setAttribute("role","alert"),e.setAttribute("aria-hidden","true");var n=setTimeout(function(){e.setAttribute("aria-hidden","false"),e.innerHTML="",e.innerHTML=t,clearTimeout(n)},2e3)}}function on_document_ready(){focus_populate_live_region(),refresh_sorted_by_live_region()}jQuery(function(e){e(".woocommerce-ordering").on("change","select.orderby",function(){e(this).closest("form").trigger("submit")}),e("input.qty:not(.product-quantity input.qty)").each(function(){var o=parseFloat(e(this).attr("min"));o>=0&&parseFloat(e(this).val())<o&&e(this).val(o)});var o="store_notice"+(e(".woocommerce-store-notice").data("noticeId")||"");if("hidden"===Cookies.get(o))e(".woocommerce-store-notice").hide();else{function t(o){["Enter"," "].includes(o.key)&&(o.preventDefault(),e(".woocommerce-store-notice__dismiss-link").click())}e(".woocommerce-store-notice").show(),e(".woocommerce-store-notice__dismiss-link").on("click",function n(r){Cookies.set(o,"hidden",{path:"/"}),e(".woocommerce-store-notice").hide(),r.preventDefault(),e(".woocommerce-store-notice__dismiss-link").off("click",n).off("keydown",t)}).on("keydown",t)}e(".woocommerce-input-wrapper span.description").length&&e(document.body).on("click",function(){e(".woocommerce-input-wrapper span.description:visible").prop("aria-hidden",!0).slideUp(250)}),e(".woocommerce-input-wrapper").on("click",function(e){e.stopPropagation()}),e(".woocommerce-input-wrapper :input").on("keydown",function(o){var t=e(this).parent().find("span.description");if(27===o.which&&t.length&&t.is(":visible"))return t.prop("aria-hidden",!0).slideUp(250),o.preventDefault(),!1}).on("click focus",function(){var o=e(this).parent(),t=o.find("span.description");o.addClass("currentTarget"),e(".woocommerce-input-wrapper:not(.currentTarget) span.description:visible").prop("aria-hidden",!0).slideUp(250),t.length&&t.is(":hidden")&&t.prop("aria-hidden",!1).slideDown(250),o.removeClass("currentTarget")}),e.scroll_to_notices=function(o){o.length&&e("html, body").animate({scrollTop:o.offset().top-100},1e3)},e('.woocommerce form .woocommerce-Input[type="password"]').wrap('<span class="password-input"></span>'),e(".woocommerce form input").filter(":password").parent("span").addClass("password-input"),e(".password-input").each(function(){const o=e(this).find("input").attr("id");e(this).append('<button type="button" class="show-password-input" aria-label="'+woocommerce_params.i18n_password_show+'" aria-describedBy="'+o+'"></button>')}),e(".show-password-input").on("click",function(o){o.preventDefault(),e(this).hasClass("display-password")?(e(this).removeClass("display-password"),e(this).attr("aria-label",woocommerce_params.i18n_password_show)):(e(this).addClass("display-password"),e(this).attr("aria-label",woocommerce_params.i18n_password_hide)),e(this).hasClass("display-password")?e(this).siblings(['input[type="password"]']).prop("type","text"):e(this).siblings('input[type="text"]').prop("type","password"),e(this).siblings("input").focus()}),e("a.coming-soon-footer-banner-dismiss").on("click",function(o){var t=e(o.target);e.ajax({type:"post",url:t.data("rest-url"),data:{woocommerce_meta:{coming_soon_banner_dismissed:"yes"}},beforeSend:function(e){e.setRequestHeader("X-WP-Nonce",t.data("rest-nonce"))},complete:function(){e("#coming-soon-footer-banner").hide()}})}),"undefined"==typeof wc_add_to_cart_params&&e(document.body).on("keydown",".remove_from_cart_button",on_keydown_remove_from_cart),e(document.body).on("item_removed_from_classic_cart updated_wc_div",focus_populate_live_region)}),document.addEventListener("DOMContentLoaded",on_document_ready);
if(window.NodeList&&! NodeList.prototype.forEach){
NodeList.prototype.forEach=Array.prototype.forEach;
}
document.addEventListener('DOMContentLoaded', function(){
var notices=document.querySelectorAll('.ab-block-notice.ab-dismissable[data-id]'
);
notices.forEach(function(element){
var uid=element.getAttribute('data-id');
var dismissible=element.querySelector('.ab-notice-dismiss');
if(! localStorage.getItem('notice-' + uid) ){
element.style.display='block';
}
if(dismissible){
dismissible.addEventListener('click', function(event){
event.preventDefault();
localStorage.setItem('notice-' + uid, '1');
element.style.display='';
});
}});
});
(function (){
'use strict';
var COOKIE_NAME='wc_facebook_signals_state';
var STATE_ACTIVE='active';
var STATE_HELD='held';
function setCookie(name, value, days){
var d=new Date();
d.setTime(d.getTime() + days * 86400000);
document.cookie =
name +
'=' +
encodeURIComponent(value) +
';expires=' +
d.toUTCString() +
';path=/;SameSite=Lax';
}
function getCookie(name){
var match=document.cookie.match(new RegExp('(?:^|;\\s*)' + name + '=([^;]*)')
);
return match ? decodeURIComponent(match[ 1 ]):null;
}
function updateState(state){
setCookie(COOKIE_NAME, state, 365);
var params=wc_facebook_signals_params;
return new Promise(function(resolve, reject){
var xhr=new XMLHttpRequest();
xhr.open('POST', params.ajax_url, true);
xhr.setRequestHeader('Content-Type',
'application/x-www-form-urlencoded; charset=UTF-8'
);
xhr.onload=function (){
if(xhr.status >=200&&xhr.status < 300){
try {
var data=JSON.parse(xhr.responseText);
resolve(data);
} catch(e){
reject(e);
}}else{
reject(new Error('AJAX failed: ' + xhr.status) );
}};
xhr.onerror=function (){
reject(new Error('Network error') );
};
xhr.send('action=' +
encodeURIComponent(params.action) +
'&security=' +
encodeURIComponent(params.nonce) +
'&state=' +
encodeURIComponent(state)
);
});
}
function hold(){
return updateState(STATE_HELD);
}
function release(){
return updateState(STATE_ACTIVE).then(function(data){
if(window.FacebookSignals &&
window.FacebookSignals._held
){
return window.FacebookSignals.release().then(function (){
return data;
},
function (){
return data;
}
);
}
return data;
});
}
function getState(){
var val=getCookie(COOKIE_NAME);
if(val===null){
return null;
}
return val===STATE_ACTIVE ? STATE_ACTIVE:STATE_HELD;
}
window.fbwcsignal=window.fbwcsignal||{};
window.fbwcsignal.hold=hold;
window.fbwcsignal.release=release;
window.fbwcsignal.getState=getState;
})();
var mailchimp,mailchimp_cart,mailchimp_billing_email,mailchimp_username_email,mailchimp_registration_email,mailchimp_submitted_email=false,mailchimpReady=function(a){/in/.test(document.readyState)?setTimeout(()=>{mailchimpReady(a)},9):a()};function mailchimpGetCurrentUserByHash(a){try{if(!mailchimp_public_data.allowed_to_set_cookies)return;var b=mailchimp_public_data.ajax_url+"?action=mailchimp_get_user_by_hash&hash="+a,c=new XMLHttpRequest;c.open("POST",b,!0),c.onload=function(){if(c.status>=200&&c.status<400){var a=JSON.parse(c.responseText);if(!a)return;mailchimp_cart.valueEmail(a.email)&&mailchimp_cart.setEmail(a.email)}};c.onerror=function(){console.log("mailchimp.get_email_by_hash.request.error",c.responseText)};c.setRequestHeader("Content-Type","application/json");c.setRequestHeader("Accept","application/json");c.send()}catch(a){console.log("mailchimp.get_email_by_hash.error",a)}}function mailchimpHandleBillingEmail(selector){try{if(!mailchimp_public_data.allowed_to_set_cookies)return;if(mailchimp_public_data.disable_carts)return;var subscribed=document.querySelector("#mailchimp_woocommerce_newsletter");if(!subscribed)subscribed=document.querySelector("#subscribe-to-newsletter");if(!selector)selector="#billing_email";var a=document.querySelector(selector);var b=void 0!==a?a.value:"";if(!mailchimp_cart.valueEmail(b)||mailchimp_submitted_email===b){return false}mailchimp_cart.setEmail(b);var c=mailchimp_public_data.ajax_url+"?action=mailchimp_set_user_by_email";var d=new XMLHttpRequest;d.open("POST",c,!0);d.onload=function(){var successful=d.status>=200&&d.status<400;var msg=successful?"mailchimp.handle_billing_email.request.success":"mailchimp.handle_billing_email.request.error";if(successful){mailchimp_submitted_email=b}console.log(msg,d.responseText)};d.onerror=function(){console.log("mailchimp.handle_billing_email.request.error",d.responseText)};d.setRequestHeader("Content-Type","application/x-www-form-urlencoded");d.setRequestHeader("Accept","application/json");d.send("email="+b+"&mc_language="+mailchimp_public_data.language+"&subscribed="+(subscribed&&subscribed.checked?"1":"0"));return true}catch(a){console.log("mailchimp.handle_billing_email.error",a);mailchimp_submitted_email=!1}}!function(){"use strict";function mailchimpCart(){this.email_types="input[type=email]";this.regex_email=/^([A-Za-z0-9_+\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;this.current_email=null;this.previous_email=null;this.expireUser=function(){this.current_email=null;if(!mailchimp_public_data.allowed_to_set_cookies)return;mailchimp.storage.expire("mailchimp.cart.current_email")};this.expireSaved=function(){if(!mailchimp_public_data.allowed_to_set_cookies)return;mailchimp.storage.expire("mailchimp.cart.items")};this.setEmail=function(a){if(!mailchimp_public_data.allowed_to_set_cookies)return;if(!this.valueEmail(a))return false;this.setPreviousEmail(this.getEmail());mailchimp.storage.set("mailchimp.cart.current_email",this.current_email=a)};this.getEmail=function(){if(!mailchimp_public_data.allowed_to_set_cookies)return;if(this.current_email)return this.current_email;var a=mailchimp.storage.get("mailchimp.cart.current_email",!1);if(!a||!this.valueEmail(a))return false;return this.current_email=a};this.setPreviousEmail=function(a){if(!mailchimp_public_data.allowed_to_set_cookies)return;if(!this.valueEmail(a))return false;mailchimp.storage.set("mailchimp.cart.previous_email",this.previous_email=a)};this.valueEmail=function(a){return this.regex_email.test(a)};return this}var g={extend:function(a,b){for(var c in b||{})b.hasOwnProperty(c)&&(a[c]=b[c]);return a},getQueryStringVars:function(){var a=window.location.search||"",b=[],c={};if(a=a.substr(1),a.length){b=a.split("&");for(var d in b){var e=b[d];if("string"==typeof e){var f=e.split("="),g=f[0],h=f[1];g.length&&("undefined"==typeof c[g]&&(c[g]=[]),c[g].push(h))}}}return c},unEscape:function(a){return decodeURIComponent(a)},escape:function(a){return encodeURIComponent(a)},createDate:function(a,b){a||(a=0);var c=new Date,d=b?c.getDate()-a:c.getDate()+a;return c.setDate(d),c},arrayUnique:function(a){for(var b=a.concat(),c=0;c<b.length;++c)for(var d=c+1;d<b.length;++d)b[c]===b[d]&&b.splice(d,1);return b},objectCombineUnique:function(a){for(var b=a[0],c=1;c<a.length;c++){var d=a[c];for(var e in d)b[e]=d[e]}return b}},h=function(a,b){var c=function(a,b,d){return 1===arguments.length?c.get(a):c.set(a,b,d)};return c.get=function(b,d){return a.cookie!==c._cacheString&&c._populateCache(),void 0==c._cache[b]?d:c._cache[b]},c.defaults={path:"/",secure:true,samesite:"strict"},c.set=function(d,e,f){switch(f={path:f&&f.path||c.defaults.path,domain:f&&f.domain||c.defaults.domain,expires:f&&f.expires||c.defaults.expires,secure:f&&f.secure!==b?f.secure:c.defaults.secure,samesite:f&&f.samesite||c.defaults.samesite},e===b&&(f.expires=-1),typeof f.expires){case"number":f.expires=new Date((new Date).getTime()+1e3*f.expires);break;case"string":f.expires=new Date(f.expires)}return d=encodeURIComponent(d)+"="+(e+"").replace(/[^!#-+\--:<-\[\]-~]/g,encodeURIComponent),d+=f.path?";path="+f.path:"",d+=f.domain?";domain="+f.domain:"",d+=f.expires?";expires="+f.expires.toGMTString():"",d+=f.secure?";secure":"",d+=f.samesite?";samesite="+f.samesite:"",a.cookie=d,c},c.expire=function(a,d){return c.set(a,b,d)},c._populateCache=function(){c._cache={};try{c._cacheString=a.cookie;for(var d=c._cacheString.split("; "),e=0;e<d.length;e++){var f=d[e].indexOf("="),g=decodeURIComponent(d[e].substr(0,f)),f=decodeURIComponent(d[e].substr(f+1));c._cache[g]===b&&(c._cache[g]=f)}}catch(a){console.log(a)}},c.enabled=function(){var a="1"===c.set("cookies.js","1").get("cookies.js");return c.expire("cookies.js"),a}(),c}(document);mailchimp={storage:h,utils:g};mailchimp_cart=new mailchimpCart}();mailchimpReady(function(){if(!mailchimp_public_data.allowed_to_set_cookies)return;if(mailchimp_public_data.disable_carts)return;if(void 0===a){var a={site_url:document.location.origin,defaulted:!0,ajax_url:document.location.origin+"/wp-admin?admin-ajax.php"}}try{var b=mailchimp.utils.getQueryStringVars();void 0!==b.mc_cart_id&&mailchimpGetCurrentUserByHash(b.mc_cart_id);var subscribed=document.querySelector("#mailchimp_woocommerce_newsletter");var blockSubscribed=document.querySelector("#subscribe-to-newsletter");if(subscribed){subscribed.onchange=function(){mailchimp_submitted_email=null;mailchimpHandleBillingEmail("#billing_email")}}else if(blockSubscribed){blockSubscribed.onchange=function(){mailchimp_submitted_email=null;mailchimpHandleBillingEmail('#contact-fields input[type="email"]')}}mailchimp_username_email=document.querySelector("#username");mailchimp_billing_email=document.querySelector("#billing_email");mailchimp_registration_email=document.querySelector("#reg_email");var mailchimp_username_email_block=document.querySelector('#contact-fields input[type="email"]');if(mailchimp_billing_email){mailchimp_billing_email.onblur=function(){mailchimpHandleBillingEmail("#billing_email")};mailchimp_billing_email.onfocus=function(){mailchimpHandleBillingEmail("#billing_email")}}if(mailchimp_username_email){mailchimp_username_email.onblur=function(){mailchimpHandleBillingEmail("#username")};mailchimp_username_email.onfocus=function(){mailchimpHandleBillingEmail("#username")}}if(mailchimp_registration_email){mailchimp_registration_email.onblur=function(){mailchimpHandleBillingEmail("#reg_email")};mailchimp_registration_email.onfocus=function(){mailchimpHandleBillingEmail("#reg_email")}}if(mailchimp_username_email_block){mailchimp_username_email_block.onblur=function(){mailchimpHandleBillingEmail('#contact-fields input[type="email"]')};mailchimp_username_email_block.onfocus=function(){mailchimpHandleBillingEmail('#contact-fields input[type="email"]')};var typingTimer;mailchimp_username_email_block.addEventListener("keyup",function(){typingTimer&&clearTimeout(typingTimer);typingTimer=setTimeout(function(){if(mailchimp_cart.valueEmail(mailchimp_username_email_block.value)){mailchimpHandleBillingEmail('#contact-fields input[type="email"]')}},2e3)});mailchimp_username_email_block.addEventListener("keydown",function(){typingTimer&&clearTimeout(typingTimer)})}}catch(e){console.log("mailchimp ready error",e)}});
(function ($){
'use strict';
const PIXEL_SDK_WAIT_CONFIG={
initialDelayMs: 100,
maxDelayMs: 5000,
maxAttempts: 20
};
const MailchimpPixelTracking={
_atcTimer: null,
_rfcTimer: null,
_atcFetching: false,
_rfcFetching: false,
init: function (){
const self=this;
this.waitForPixelSDK(PIXEL_SDK_WAIT_CONFIG)
.then(function (){
self.sendPageEvents();
self.attachCartEventListeners();
self.interceptStoreApiRequests();
console.log('Mailchimp Pixel SDK loaded.');
})
.catch(function (e){
console.log('Mailchimp Pixel SDK not loaded within timeout. Tracking disabled.', e);
});
},
waitForPixelSDK: function (options){
const config=options||{};
const initialDelayMs=config.initialDelayMs!==undefined ? config.initialDelayMs:PIXEL_SDK_WAIT_CONFIG.initialDelayMs;
const maxDelayMs=config.maxDelayMs!==undefined ? config.maxDelayMs:PIXEL_SDK_WAIT_CONFIG.maxDelayMs;
const maxAttempts=config.maxAttempts!==undefined ? config.maxAttempts:PIXEL_SDK_WAIT_CONFIG.maxAttempts;
function isSDKReady(){
return typeof window.$mcSite!=='undefined' &&
window.$mcSite.pixel &&
typeof window.$mcSite.pixel.api!=='undefined' &&
typeof window.$mcSite.pixel.api.track==='function' &&
window.$mcSite.pixel.installed===true;
}
return new Promise(function (resolve, reject){
let attempt=0;
function scheduleCheck(){
if(isSDKReady()){
console.warn('Pixel SDK - remediation for pixel ready issue')
setTimeout(function (){
resolve();
}, 1000);
return;
}
if(attempt >=maxAttempts){
reject(new Error('Pixel SDK not available'));
return;
}
const delay=Math.min(initialDelayMs * Math.pow(2, attempt),
maxDelayMs
);
attempt +=1;
setTimeout(scheduleCheck, delay);
}
scheduleCheck();
});
},
isPixelSDKReady: function (){
return typeof window.$mcSite!=='undefined' &&
window.$mcSite.pixel &&
typeof window.$mcSite.pixel.api!=='undefined' &&
typeof window.$mcSite.pixel.api.track==='function';
},
getCartId: function (){
return window.mcPixel&&window.mcPixel.cartId ? window.mcPixel.cartId:'';
},
getRestBase: function (){
return (window.mcPixelConfig&&window.mcPixelConfig.restBase)||'/wp-json/mailchimp-for-woocommerce/v1/';
},
sendPageEvents: function (){
if(!window.mcPixel||!window.mcPixel.data){
return;
}
const data=window.mcPixel.data;
const events=data.events||[];
events.forEach((eventType)=> {
switch (eventType){
case 'PRODUCT_ADDED_TO_CART':
if(data.added_to_cart){
var atcItems=Array.isArray(data.added_to_cart) ? data.added_to_cart:[data.added_to_cart];
for (var ai=0; ai < atcItems.length; ai++){
this.sendProductAddedToCart(atcItems[ai]);
}}
break;
case 'PRODUCT_REMOVED_FROM_CART':
if(data.removed_from_cart){
var rfcItems=Array.isArray(data.removed_from_cart) ? data.removed_from_cart:[data.removed_from_cart];
for (var ri=0; ri < rfcItems.length; ri++){
this.sendProductRemovedFromCart(rfcItems[ri]);
}}
break;
case 'IDENTITY':
if(data.identity&&data.identity.email){
this.sendIdentityEvent(data.identity.email);
}
break;
case 'PRODUCT_VIEWED':
if(data.product){
const viewedId=String(data.product.productId||data.product.id);
const atcArr=Array.isArray(data.added_to_cart) ? data.added_to_cart:(data.added_to_cart ? [data.added_to_cart]:[]);
const rfcArr=Array.isArray(data.removed_from_cart) ? data.removed_from_cart:(data.removed_from_cart ? [data.removed_from_cart]:[]);
const atcMatch=atcArr.some(function (p){ return String(p.productId||p.id)===viewedId; });
const rfcMatch=rfcArr.some(function (p){ return String(p.productId||p.id)===viewedId; });
if((events.includes('PRODUCT_ADDED_TO_CART')&&atcMatch) ||
(events.includes('PRODUCT_REMOVED_FROM_CART')&&rfcMatch)
){
break;
}
this.sendProductViewed(data.product);
}
break;
case 'CART_VIEWED':
if(data.cart){
this.sendCartViewed(data.cart);
}
break;
case 'CHECKOUT_STARTED':
if(data.checkout){
this.sendCheckoutStarted(data.checkout);
window.mcPixel._handled.checkout=true;
}
break;
case 'PURCHASED':
if(data.order){
this.sendPurchased(data.order);
}
break;
case 'PRODUCT_CATEGORY_VIEWED':
if(data.category){
this.sendCategoryViewed(data.category);
window.mcPixel._handled.category=true;
}
break;
case 'SEARCH_SUBMITTED':
if(data.search){
this.sendSearchSubmitted(data.search);
window.mcPixel._handled.search=true;
}
break;
}});
},
sendProductViewed: function (product){
if(!this.isPixelSDKReady()) return;
window.$mcSite.pixel.api.track('PRODUCT_VIEWED', {
product: product
}).catch((error)=> {
console.error('Mailchimp Pixel: Error tracking PRODUCT_VIEWED', error);
});
},
sendProductAddedToCart: function (product){
if(!this.isPixelSDKReady()) return;
const cartId=this.getCartId();
const eventData={
cartId: cartId,
product: {
item: {
id: product.id,
productId: product.productId,
title: product.title,
price: product.price,
currency: product.currency,
sku: product.sku||''
},
quantity: product.quantity||1,
price: product.price * (product.quantity||1),
currency: product.currency
}};
window.$mcSite.pixel.api.track('PRODUCT_ADDED_TO_CART', eventData).catch((error)=> {
console.error('Mailchimp Pixel: Error tracking PRODUCT_ADDED_TO_CART', error);
});
},
sendProductRemovedFromCart: function (product){
if(!this.isPixelSDKReady()) return;
const cartId=this.getCartId();
const eventData={
cartId: cartId,
product: {
item: {
id: product.id,
productId: product.productId,
title: product.title,
price: product.price,
currency: product.currency,
sku: product.sku||''
},
quantity: product.quantity||1,
price: product.price * (product.quantity||1),
currency: product.currency
}};
window.$mcSite.pixel.api.track('PRODUCT_REMOVED_FROM_CART', eventData).catch((error)=> {
console.error('Mailchimp Pixel: Error tracking PRODUCT_REMOVED_FROM_CART', error);
});
},
sendCartViewed: function (cart){
if(!this.isPixelSDKReady()) return;
window.$mcSite.pixel.api.track('CART_VIEWED', {
cart: cart
}).catch((error)=> {
console.error('Mailchimp Pixel: Error tracking CART_VIEWED', error);
});
},
sendCheckoutStarted: function (checkout){
if(!this.isPixelSDKReady()) return;
window.$mcSite.pixel.api.track('CHECKOUT_STARTED', {
checkout: checkout
}).catch((error)=> {
console.error('Mailchimp Pixel: Error tracking CHECKOUT_STARTED', error);
});
},
sendIdentityEvent: function(email){
if(!this.isPixelSDKReady()) return;
window.$mcSite.pixel.api.identify({
type: 'EMAIL',
value: email
});
},
sendPurchased: function (order){
if(!this.isPixelSDKReady()) return;
window.$mcSite.pixel.api.track('PURCHASED', {
order: order
}).catch((error)=> {
console.error('Mailchimp Pixel: Error tracking PURCHASED', error);
});
},
sendCategoryViewed: function (category){
if(!this.isPixelSDKReady()) return;
window.$mcSite.pixel.api.track('PRODUCT_CATEGORY_VIEWED', category).catch((error)=> {
console.error('Mailchimp Pixel: Error tracking PRODUCT_CATEGORY_VIEWED', error);
});
},
sendSearchSubmitted: function (search){
if(!this.isPixelSDKReady()) return;
window.$mcSite.pixel.api.track('SEARCH_SUBMITTED', search).catch((error)=> {
console.error('Mailchimp Pixel: Error tracking SEARCH_SUBMITTED', error);
});
},
findProductById: function (productId){
if(!window.mcPixel||!window.mcPixel.data||!window.mcPixel.data.products){
return null;
}
const products=window.mcPixel.data.products;
const id=String(productId);
for (let i=0; i < products.length; i++){
if(String(products[i].id)===id){
return products[i];
}}
return null;
},
fetchAndTrackAddToCart: function (){
var self=this;
if(!this.isPixelSDKReady()) return;
clearTimeout(this._atcTimer);
this._atcTimer=setTimeout(function (){
self._drainAddToCartQueue();
}, 600);
},
_drainAddToCartQueue: async function (){
if(this._atcFetching) return;
this._atcFetching=true;
try {
var res=await fetch(this.getRestBase() + 'pixel/atc', {
method: 'GET',
credentials: 'same-origin',
headers: { 'Accept': 'application/json' },
});
if(!res.ok) return;
var data=await res.json();
if(!data) return;
var items=Array.isArray(data) ? data:[data];
for (var i=0; i < items.length; i++){
this.sendProductAddedToCart(items[i]);
}} catch (e){
} finally {
this._atcFetching=false;
}},
fetchAndTrackRemoveFromCart: function (){
var self=this;
if(!this.isPixelSDKReady()) return;
clearTimeout(this._rfcTimer);
this._rfcTimer=setTimeout(function (){
self._drainRemoveFromCartQueue();
}, 600);
},
_drainRemoveFromCartQueue: async function (){
if(this._rfcFetching) return;
this._rfcFetching=true;
try {
var res=await fetch(this.getRestBase() + 'pixel/rfc', {
method: 'GET',
credentials: 'same-origin',
headers: { 'Accept': 'application/json' },
});
if(!res.ok) return;
var data=await res.json();
if(!data) return;
var items=Array.isArray(data) ? data:[data];
for (var i=0; i < items.length; i++){
this.sendProductRemovedFromCart(items[i]);
}} catch (e){
} finally {
this._rfcFetching=false;
}},
attachCartEventListeners: function (){
const self=this;
$(document.body).on('added_to_cart', function (){
self.fetchAndTrackAddToCart();
});
$(document.body).on('removed_from_cart', function (){
self.fetchAndTrackRemoveFromCart();
});
document.body.addEventListener('wc-blocks_added_to_cart', function (){
self.fetchAndTrackAddToCart();
});
document.body.addEventListener('wc-blocks_removed_from_cart', function (){
self.fetchAndTrackRemoveFromCart();
});
},
interceptStoreApiRequests: function (){
const self=this;
const originalFetch=window.fetch;
window.fetch=function (input, init){
var promise=originalFetch.apply(this, arguments);
promise.then(function (response){
try {
if(!response.ok) return;
var method=(init&&init.method) ? init.method.toUpperCase() :
(input instanceof Request ? input.method.toUpperCase():'GET');
if(method!=='POST') return;
var url=typeof input==='string' ? input :
(input instanceof Request ? input.url:String(input));
if(/wc\/store\/v1\/cart\/add-item/.test(url)||/wc\/store\/v1\/cart\/update-item/.test(url)){
self.fetchAndTrackAddToCart();
}else if(/wc\/store\/v1\/cart\/remove-item/.test(url)){
self.fetchAndTrackRemoveFromCart();
}} catch (e){
}}).catch(function (){
});
return promise;
};},
};
$(document).ready(function (){
MailchimpPixelTracking.init();
});
})(jQuery);