jQuery(document).ready(function($){ var focus_qty; //Open cart pop up function open_popup(){ $('.xoo-cp-opac').show(); $('.xoo-cp-modal').addClass('xoo-cp-active'); } //On add to cart $(document.body).on('added_to_cart',function(){ open_popup(); }); //CLose Popup function close_popup(e){ $.each(e.target.classList,function(key,value){ if(value == 'xoo-cp-close' || value == 'xoo-cp-modal'){ $('.xoo-cp-opac').hide(); $('.xoo-cp-modal').removeClass('xoo-cp-active'); $('.xoo-cp-atcn , .xoo-cp-content').html(''); } }) } $(document).on('click','.xoo-cp-close , .xoo-cp-modal',close_popup); //Block popup function block_popup(){ $('.xoo-cp-outer').show(); } //Unblock popup function unblock_popup(){ $('.xoo-cp-outer').hide(); } //Reset cart button/form function reset_cart(atc_btn){ $('.xoo-cp-added',atc_btn).remove(); var qty_elem = atc_btn.parents('form.cart').find('.qty'); if(qty_elem.length > 0) qty_elem.val(qty_elem.attr('min') || 1); $('.added_to_cart').remove(); } //Notice Function function show_notice(notice_type,notice){ $('.xoo-cp-notice').html(notice).attr('class','xoo-cp-notice').addClass('xoo-cp-nt-'+notice_type); $('.xoo-cp-notice-box').fadeIn('fast'); clearTimeout(fadenotice); var fadenotice = setTimeout(function(){ $('.xoo-cp-notice-box').fadeOut('slow'); },3000); }; //Add to cart function function add_to_cart(atc_btn,form_data){ // Trigger event. $( document.body ).trigger( 'adding_to_cart', [ atc_btn, form_data ] ); $.ajax({ url: xoo_cp_localize.wc_ajax_url.toString().replace( '%%endpoint%%', 'xoo_cp_add_to_cart' ), type: 'POST', data: $.param(form_data), success: function(response){ $('.xoo-cp-adding',atc_btn).remove(); if(response.fragments){ // Trigger event so themes can refresh other areas. $( document.body ).trigger( 'added_to_cart', [ response.fragments, response.cart_hash, atc_btn ] ); atc_btn.append(''); } else if(response.error){ show_notice('error',response.error) } else{ console.log(response); } //Reset to default if(xoo_cp_localize.reset_cart) reset_cart(atc_btn); } }) } //Add to cart on single page $(document).on('submit','form.cart',function(e){ var form = $(this); var atc_btn = form.find( 'button[type="submit"]'); var form_data = form.serializeArray(); // if button as name add-to-cart get it and add to form if( atc_btn.attr('name') && atc_btn.attr('name') == 'add-to-cart' && atc_btn.attr('value') ){ form_data.push({ name: 'add-to-cart', value: atc_btn.attr('value') }); } var is_valid = false; $.each( form_data, function( index, data ){ if( data.name === "add-to-cart" ){ is_valid = true; return false; } } ) if( is_valid ){ e.preventDefault(); } else{ return; } $('.xoo-cp-added',atc_btn).remove(); atc_btn.append(''); form_data.push({name: 'action', value: 'xoo_cp_add_to_cart'}); add_to_cart(atc_btn,form_data);//Ajax add to cart }) //Ajax function to update cart (In a popup) function xoo_cp_update_ajax(cart_key,new_qty,pid){ return $.ajax({ url: xoo_cp_localize.adminurl, type: 'POST', data: {action: 'xoo_cp_change_ajax', cart_key: cart_key, new_qty: new_qty, pid: pid } }) } //Update cart function update_cart(cart_key,new_qty){ block_popup(); $.ajax({ url: xoo_cp_localize.wc_ajax_url.toString().replace( '%%endpoint%%', 'xoo_cp_update_cart' ), type: 'POST', data: { cart_key: cart_key, new_qty: new_qty }, success: function(response){ if(response.fragments){ var fragments = response.fragments, cart_hash = response.cart_hash; //Set fragments $.each( response.fragments, function( key, value ) { $( key ).replaceWith( value ); $( key ).stop( true ).css( 'opacity', '1' ).unblock(); }); if(wc_cart_fragments_params){ var cart_hash_key = wc_cart_fragments_params.ajax_url.toString() + '-wc_cart_hash'; //Set cart hash sessionStorage.setItem( wc_cart_fragments_params.fragment_name, JSON.stringify( fragments ) ); localStorage.setItem( cart_hash_key, cart_hash ); sessionStorage.setItem( cart_hash_key, cart_hash ); } $(document.body).trigger('wc_fragments_loaded'); } else{ //Print error //show_notice('error',response.error); console.log(response); } unblock_popup(); } }) } //Save Quantity on focus $(document).on('focusin','.xoo-cp-qty',function(){ focus_qty = $(this).val(); }) //Qty input on change $(document).on('change','.xoo-cp-qty',function(e){ var _this = $(this); var new_qty = parseFloat($(this).val()); var step = parseFloat($(this).attr('step')); var min_value = parseFloat($(this).attr('min')); var max_value = parseFloat($(this).attr('max')); var invalid = false; if(new_qty === 0){ _this.parents('.xoo-cp-pdetails').find('.xoo-cp-remove-pd').trigger('click'); return; } //Check If valid number else if(isNaN(new_qty) || new_qty < 0){ invalid = true; } //Check maximum quantity else if(new_qty > max_value && max_value > 0){ alert('Maximum Quantity: '+max_value); invalid = true; } //Check Minimum Quantity else if(new_qty < min_value){ invalid = true; } //Check Step else if((new_qty % step) !== 0){ alert('Quantity can only be purchased in multiple of '+step); invalid = true; } //Update if everything is fine. else{ var cart_key = $(this).parents('tr').data('xoo_cp_key'); update_cart(cart_key,new_qty); } if(invalid === true){ $(this).val(focus_qty); } }) //Plus minus buttons $(document).on('click', '.xcp-chng' ,function(){ var _this = $(this); var qty_element = _this.siblings('.xoo-cp-qty'); qty_element.trigger('focusin'); var input_qty = parseFloat(qty_element.val()); var step = parseFloat(qty_element.attr('step')); var min_value = parseFloat(qty_element.attr('min')); var max_value = parseFloat(qty_element.attr('max')); if(_this.hasClass('xcp-plus')){ var new_qty = input_qty + step; if(new_qty > max_value && max_value > 0){ alert('Maximum Quantity: '+max_value); return; } } else if(_this.hasClass('xcp-minus')){ var new_qty = input_qty - step; if(new_qty === 0){ _this.parents('.xoo-cp-pdetails').find('.xoo-cp-remove .xcp-icon').trigger('click'); return; } else if(new_qty < min_value){ return; } else if(input_qty < 0){ alert('Invalid'); return; } } var cart_key = $(this).parents('tr').data('xoo_cp_key'); update_cart(cart_key,new_qty); }) //Remove item from cart $(document).on('click','.xoo-cp-remove-pd',function(e){ e.preventDefault(); var cart_key = $(this).parents('tr').data('xoo_cp_key'); update_cart(cart_key,0); }) })