jQuery(function($){
if(typeof wc_add_to_cart_params==='undefined'){
return false;
}
var AddToCartHandler=function(){
this.requests=[];
this.addRequest=this.addRequest.bind(this);
this.run=this.run.bind(this);
this.$liveRegion=this.createLiveRegion();
$(document.body)
.on('click', '.add_to_cart_button:not(.wc-interactive)', { addToCartHandler: this }, this.onAddToCart)
.on('keydown', '.add_to_cart_button:not(.wc-interactive)', { addToCartHandler: this },
(e)=> { if(e.key===' '){ e.preventDefault(); e.target.click(); }}
)
.on('click', '.remove_from_cart_button', { addToCartHandler: this }, this.onRemoveFromCart)
.on('keydown', '.remove_from_cart_button', this.onKeydownRemoveFromCart)
.on('added_to_cart', { addToCartHandler: this }, this.onAddedToCart)
.on('removed_from_cart', { addToCartHandler: this }, this.onRemovedFromCart)
.on('ajax_request_not_sent.adding_to_cart', this.updateButton);
};
AddToCartHandler.prototype.addRequest=function(request){
this.requests.push(request);
if(1===this.requests.length){
this.run();
}};
AddToCartHandler.prototype.run=function(){
var requestManager=this,
originalCallback=requestManager.requests[0].complete;
requestManager.requests[0].complete=function(){
if(typeof originalCallback==='function'){
originalCallback();
}
requestManager.requests.shift();
if(requestManager.requests.length > 0){
requestManager.run();
}};
$.ajax(this.requests[0]);
};
AddToCartHandler.prototype.onAddToCart=function(e){
var $thisbutton=$(this);
if($thisbutton.is('.ajax_add_to_cart') ){
if(! $thisbutton.attr('data-product_id') ){
return true;
}
e.data.addToCartHandler.$liveRegion
.text('')
.removeAttr('aria-relevant');
e.preventDefault();
$thisbutton.removeClass('added');
$thisbutton.addClass('loading');
if(false===$(document.body).triggerHandler('should_send_ajax_request.adding_to_cart', [ $thisbutton ]) ){
$(document.body).trigger('ajax_request_not_sent.adding_to_cart', [ false, false, $thisbutton ]);
return true;
}
var data={};
$.each($thisbutton.data(), function(key, value){
data[ key ]=value;
});
$.each($thisbutton[0].dataset, function(key, value){
data[ key ]=value;
});
$(document.body).trigger('adding_to_cart', [ $thisbutton, data ]);
e.data.addToCartHandler.addRequest({
type: 'POST',
url: wc_add_to_cart_params.wc_ajax_url.toString().replace('%%endpoint%%', 'add_to_cart'),
data: data,
success: function(response){
if(! response){
return;
}
if(response.error&&response.product_url){
window.location=response.product_url;
return;
}
if(wc_add_to_cart_params.cart_redirect_after_add==='yes'){
window.location=wc_add_to_cart_params.cart_url;
return;
}
$(document.body).trigger('added_to_cart', [ response.fragments, response.cart_hash, $thisbutton ]);
},
dataType: 'json'
});
}};
AddToCartHandler.prototype.onRemoveFromCart=function(e){
var $thisbutton=$(this),
$row=$thisbutton.closest('.woocommerce-mini-cart-item');
e.data.addToCartHandler.$liveRegion
.text('')
.removeAttr('aria-relevant');
e.preventDefault();
$row.block({
message: null,
overlayCSS: {
opacity: 0.6
}});
e.data.addToCartHandler.addRequest({
type: 'POST',
url: wc_add_to_cart_params.wc_ajax_url.toString().replace('%%endpoint%%', 'remove_from_cart'),
data: {
cart_item_key:$thisbutton.data('cart_item_key')
},
success: function(response){
if(! response||! response.fragments){
window.location=$thisbutton.attr('href');
return;
}
$(document.body).trigger('removed_from_cart', [ response.fragments, response.cart_hash, $thisbutton ]);
},
error: function(){
window.location=$thisbutton.attr('href');
return;
},
dataType: 'json'
});
};
AddToCartHandler.prototype.onKeydownRemoveFromCart=function(event){
if(event.key===' '){
event.preventDefault();
$(this).trigger('click');
}};
AddToCartHandler.prototype.updateButton=function(e, fragments, cart_hash, $button){
$button=typeof $button==='undefined' ? false:$button;
if($button){
$button.removeClass('loading');
if(fragments){
$button.addClass('added');
}
if(fragments&&! wc_add_to_cart_params.is_cart&&$button.parent().find('.added_to_cart').length===0){
var anchor=document.createElement('a');
anchor.href=wc_add_to_cart_params.cart_url;
anchor.className='added_to_cart wc-forward';
anchor.title=wc_add_to_cart_params.i18n_view_cart;
anchor.textContent=wc_add_to_cart_params.i18n_view_cart;
$button.after(anchor);
}
$(document.body).trigger('wc_cart_button_updated', [ $button ]);
}};
AddToCartHandler.prototype.updateFragments=function(e, fragments){
if(fragments){
$.each(fragments, function(key){
$(key)
.addClass('updating')
.fadeTo('400', '0.6')
.block({
message: null,
overlayCSS: {
opacity: 0.6
}});
});
$.each(fragments, function(key, value){
$(key).replaceWith(value);
$(key).stop(true).css('opacity', '1').unblock();
});
$(document.body).trigger('wc_fragments_loaded');
}};
AddToCartHandler.prototype.alertCartUpdated=function(e, fragments, cart_hash, $button){
$button=typeof $button==='undefined' ? false:$button;
if($button){
var message=$button.data('success_message');
if(!message){
return;
}
e.data.addToCartHandler.$liveRegion
.delay(1000)
.text(message)
.attr('aria-relevant', 'all');
}};
AddToCartHandler.prototype.createLiveRegion=function(){
var existingLiveRegion=$('.widget_shopping_cart_live_region');
if(existingLiveRegion.length){
return existingLiveRegion;
}
return $('<div class="widget_shopping_cart_live_region screen-reader-text" role="status"></div>').appendTo('body');
};
AddToCartHandler.prototype.onAddedToCart=function(e, fragments, cart_hash, $button){
e.data.addToCartHandler.updateButton(e, fragments, cart_hash, $button);
e.data.addToCartHandler.updateFragments(e, fragments);
e.data.addToCartHandler.alertCartUpdated(e, fragments, cart_hash, $button);
};
AddToCartHandler.prototype.onRemovedFromCart=function(e, fragments, cart_hash, $button){
e.data.addToCartHandler.updateFragments(e, fragments);
e.data.addToCartHandler.alertCartUpdated(e, fragments, cart_hash, $button);
};
new AddToCartHandler();
});
;
(function (global, factory){
typeof exports==='object'&&typeof module!=='undefined' ? module.exports=factory() :
typeof define==='function'&&define.amd ? define(factory) :
(global=typeof globalThis!=='undefined' ? globalThis:global||self, (function (){
var current=global.Cookies;
var exports=global.Cookies=factory();
exports.noConflict=function (){ global.Cookies=current; return exports; };})());
})(this, (function (){ 'use strict';
function assign (target){
for (var i=1; i < arguments.length; i++){
var source=arguments[i];
for (var key in source){
target[key]=source[key];
}}
return target
}
var defaultConverter={
read: function (value){
if(value[0]==='"'){
value=value.slice(1, -1);
}
return value.replace(/(%[\dA-F]{2})+/gi, decodeURIComponent)
},
write: function (value){
return encodeURIComponent(value).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,
decodeURIComponent
)
}};
function init (converter, defaultAttributes){
function set (name, value, attributes){
if(typeof document==='undefined'){
return
}
attributes=assign({}, defaultAttributes, attributes);
if(typeof attributes.expires==='number'){
attributes.expires=new Date(Date.now() + attributes.expires * 864e5);
}
if(attributes.expires){
attributes.expires=attributes.expires.toUTCString();
}
name=encodeURIComponent(name)
.replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent)
.replace(/[()]/g, escape);
var stringifiedAttributes='';
for (var attributeName in attributes){
if(!attributes[attributeName]){
continue
}
stringifiedAttributes +='; ' + attributeName;
if(attributes[attributeName]===true){
continue
}
stringifiedAttributes +='=' + attributes[attributeName].split(';')[0];
}
return (document.cookie =
name + '=' + converter.write(value, name) + stringifiedAttributes)
}
function get (name){
if(typeof document==='undefined'||(arguments.length&&!name)){
return
}
var cookies=document.cookie ? document.cookie.split('; '):[];
var jar={};
for (var i=0; i < cookies.length; i++){
var parts=cookies[i].split('=');
var value=parts.slice(1).join('=');
try {
var found=decodeURIComponent(parts[0]);
jar[found]=converter.read(value, found);
if(name===found){
break
}} catch (e){}}
return name ? jar[name]:jar
}
return Object.create({
set,
get,
remove: function (name, attributes){
set(
name,
'',
assign({}, attributes, {
expires: -1
})
);
},
withAttributes: function (attributes){
return init(this.converter, assign({}, this.attributes, attributes))
},
withConverter: function (converter){
return init(assign({}, this.converter, converter), this.attributes)
}},
{
attributes: { value: Object.freeze(defaultAttributes) },
converter: { value: Object.freeze(converter) }}
)
}
var api=init(defaultConverter, { path: '/' });
return api;
}));