(function($){
$(document).on('click', '.modal-url', function (e){
if($('#mobileMenu').hasClass('show')){
$('#mobileMenu').modal('hide');
}
var url=$(this).attr('href').split('?')[0];
var query=$(this).attr('href').split('?')[1];
var key='';
var value='';
if(query){
key=query.split('=')[0];
value=query.split('=')[1];
}
e.preventDefault();
var data={
url: url,
key: key,
value: value,
action: 'page_to_modal',
};
$.ajax({
url: woocommerce_params.ajax_url,
data: data,
type: 'post',
beforeSend: function (response){
$('#modal-panel-body').addClass('loading');
},
success: function (response){
$('#modal-panel-body').removeClass('loading');
const obj=JSON.parse(response);
$('#modal-pagina #modal-panel-pagina-titel').html(obj.title);
$('#modal-pagina #modal-panel-tabContent').html(obj.content);
if(obj.title=='Mijn account'){
$('#modal-pagina input[name^="_wp_http_referer"]').remove();
}
if($(obj.content).find('#g-recaptcha-response-ajax').length==1){
grecaptcha.ready(function(){
grecaptcha.execute('6LclnIEUAAAAAMOoMskcNKEfT0PvUaubnb1GXO4-', {action:'validate_captcha'})
.then(function(token){
document.getElementById('g-recaptcha-response-ajax').value=token;
});
});
}
$('#modal-pagina .modal-direct-page-url').attr('href', url);
$('#modal-pagina .modal-page-url').attr('style','display:flex');
},
});
return false;
});
$(document).on('click', '.modal-uitvoering', function (e){
if($('#mobileMenu').hasClass('show')){
$('#mobileMenu').modal('hide');
}
var productid=$(this).attr('data-product-id');
e.preventDefault();
var data={
productid: productid,
action: 'rfm_uitvoering_ajax',
};
$.ajax({
url: woocommerce_params.ajax_url,
data: data,
type: 'post',
beforeSend: function (response){
$('#modal-panel-body').addClass('loading');
},
success: function (response){
$('#modal-panel-body').removeClass('loading');
const obj=JSON.parse(response);
$('#modal-pagina #modal-panel-pagina-titel').html(obj.title);
$('#modal-pagina #modal-panel-tabContent').html(obj.content);
$('#modal-pagina .modal-page-url').attr('style','display:none !important');
},
});
return false;
});
$(document).on('click', '.description-nav-link', function (e){
var productid=$(this).attr('data-product-id');
e.preventDefault();
var data={
productid: productid,
action: 'rfm_product_text_ajax',
};
$('.description-nav-link').each(function (i,k){
$(k).removeClass('active');
});
$(this).addClass('active');
$.ajax({
url: woocommerce_params.ajax_url,
data: data,
type: 'post',
beforeSend: function (response){
$('#description-tab').addClass('loader');
},
success: function (response){
$('#description-tab').removeClass('loader');
const obj=JSON.parse(response);
$('#description-tab').html(obj.content);
},
});
return false;
});
$(document).on('click', '.attribute-nav-link', function (e){
var productid=$(this).attr('data-product-id');
e.preventDefault();
var data={
productid: productid,
action: 'rfm_attributes_ajax',
};
$('.attribute-nav-link').each(function (i,k){
$(k).removeClass('active');
});
$(this).addClass('active');
$.ajax({
url: woocommerce_params.ajax_url,
data: data,
type: 'post',
beforeSend: function (response){
$('#attribute-tab').addClass('loader');
},
success: function (response){
$('#attribute-tab').removeClass('loader');
const obj=JSON.parse(response);
$('#attribute-tab').html(obj.content);
},
});
return false;
});
$(document).on('click', '.modal-accessoires', function (e){
if($('#mobileMenu').hasClass('show')){
$('#mobileMenu').modal('hide');
}
var productid=$(this).attr('data-product-id');
var accessoireIds=$(this).attr('data-accessoire-ids');
e.preventDefault();
var data={
productid: productid,
accessoireIds: accessoireIds,
action: 'rfm_accessoires_ajax',
};
$.ajax({
url: woocommerce_params.ajax_url,
data: data,
type: 'post',
beforeSend: function (response){
$('#modal-panel-body').addClass('loading');
},
success: function (response){
$('#modal-panel-body').removeClass('loading');
const obj=JSON.parse(response);
$('#modal-pagina #modal-panel-pagina-titel').html(obj.title);
$('#modal-pagina #modal-panel-tabContent').html(obj.content);
$('#modal-pagina .modal-page-url').attr('style','display:none !important');
},
});
return false;
});
$(document).on('click', '#modal-pagina .removeable-products .modal-remove-product-selection', function (e){
e.preventDefault();
var $this=$(this);
var array=[];
var c=0;
$('#modal-pagina .removeable-products .selected-accessoire').each(function (i,k){
if($(k).hasClass('active')){
array[c]=$(k).attr('data-accessoire-product-id');
c++;
}});
var oldCookieValue=Cookies.get($this.attr('data-remove-func'));
var CookieArray=oldCookieValue.split(',');
var delArray=[];
var nc=0;
$(CookieArray).each(function (o,p){
if(jQuery.inArray(p, array)!=-1){
delArray[nc]=p;
nc++;
}});
var diff=$(CookieArray).not(delArray).get();
if($this.attr('data-remove-func')=='product_comparison_ids'){
$('.vergelijking-count').html(diff.length);
}
if($.isArray(diff)){
diff=diff.join(',');
}
Cookies.set($this.attr('data-remove-func'), diff);
$('#modal-pagina').modal('hide');
});
})(jQuery);
function WrittenTime(value){
var time=parseInt(value.getHours() + "" + ("0" + value.getMinutes()).substr(-2) + "" + ("0" + value.getSeconds()).substr(-2));
return time;
};
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);
(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);