Display update quantity notice on classic cart
This commit is contained in:
parent
be290984b9
commit
ca73ac42b6
|
@ -1,6 +1,5 @@
|
||||||
/* global wc_cart_params */
|
/* global wc_cart_params */
|
||||||
jQuery( function( $ ) {
|
jQuery( function ( $ ) {
|
||||||
|
|
||||||
// wc_cart_params is required to continue, ensure the object exists
|
// wc_cart_params is required to continue, ensure the object exists
|
||||||
if ( typeof wc_cart_params === 'undefined' ) {
|
if ( typeof wc_cart_params === 'undefined' ) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -14,11 +13,10 @@ jQuery( function( $ ) {
|
||||||
* @param {String} endpoint The AJAX Endpoint
|
* @param {String} endpoint The AJAX Endpoint
|
||||||
* @return {String} The URL to use for the request
|
* @return {String} The URL to use for the request
|
||||||
*/
|
*/
|
||||||
var get_url = function( endpoint ) {
|
var get_url = function ( endpoint ) {
|
||||||
return wc_cart_params.wc_ajax_url.toString().replace(
|
return wc_cart_params.wc_ajax_url
|
||||||
'%%endpoint%%',
|
.toString()
|
||||||
endpoint
|
.replace( '%%endpoint%%', endpoint );
|
||||||
);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -27,8 +25,10 @@ jQuery( function( $ ) {
|
||||||
* @param {JQuery Object} $node
|
* @param {JQuery Object} $node
|
||||||
* @return {bool} True if the DOM Element is UI Blocked, false if not.
|
* @return {bool} True if the DOM Element is UI Blocked, false if not.
|
||||||
*/
|
*/
|
||||||
var is_blocked = function( $node ) {
|
var is_blocked = function ( $node ) {
|
||||||
return $node.is( '.processing' ) || $node.parents( '.processing' ).length;
|
return (
|
||||||
|
$node.is( '.processing' ) || $node.parents( '.processing' ).length
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -36,14 +36,14 @@ jQuery( function( $ ) {
|
||||||
*
|
*
|
||||||
* @param {JQuery Object} $node
|
* @param {JQuery Object} $node
|
||||||
*/
|
*/
|
||||||
var block = function( $node ) {
|
var block = function ( $node ) {
|
||||||
if ( ! is_blocked( $node ) ) {
|
if ( ! is_blocked( $node ) ) {
|
||||||
$node.addClass( 'processing' ).block( {
|
$node.addClass( 'processing' ).block( {
|
||||||
message: null,
|
message: null,
|
||||||
overlayCSS: {
|
overlayCSS: {
|
||||||
background: '#fff',
|
background: '#fff',
|
||||||
opacity: 0.6
|
opacity: 0.6,
|
||||||
}
|
},
|
||||||
} );
|
} );
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -53,7 +53,7 @@ jQuery( function( $ ) {
|
||||||
*
|
*
|
||||||
* @param {JQuery Object} $node
|
* @param {JQuery Object} $node
|
||||||
*/
|
*/
|
||||||
var unblock = function( $node ) {
|
var unblock = function ( $node ) {
|
||||||
$node.removeClass( 'processing' ).unblock();
|
$node.removeClass( 'processing' ).unblock();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -62,11 +62,11 @@ jQuery( function( $ ) {
|
||||||
*
|
*
|
||||||
* @param {JQuery Object} $notices
|
* @param {JQuery Object} $notices
|
||||||
*/
|
*/
|
||||||
var remove_duplicate_notices = function( $notices ) {
|
var remove_duplicate_notices = function ( $notices ) {
|
||||||
var seen = new Set();
|
var seen = new Set();
|
||||||
var deduplicated_notices = [];
|
var deduplicated_notices = [];
|
||||||
|
|
||||||
$notices.each( function() {
|
$notices.each( function () {
|
||||||
const text = $( this ).text();
|
const text = $( this ).text();
|
||||||
|
|
||||||
if ( ! seen.has( text ) ) {
|
if ( ! seen.has( text ) ) {
|
||||||
|
@ -84,11 +84,16 @@ jQuery( function( $ ) {
|
||||||
* @param {String} html_str The HTML string with which to replace the div.
|
* @param {String} html_str The HTML string with which to replace the div.
|
||||||
* @param {bool} preserve_notices Should notices be kept? False by default.
|
* @param {bool} preserve_notices Should notices be kept? False by default.
|
||||||
*/
|
*/
|
||||||
var update_wc_div = function( html_str, preserve_notices ) {
|
var update_wc_div = function ( html_str, preserve_notices ) {
|
||||||
var $html = $.parseHTML( html_str );
|
var $html = $.parseHTML( html_str );
|
||||||
var $new_form = $( '.woocommerce-cart-form', $html );
|
var $new_form = $( '.woocommerce-cart-form', $html );
|
||||||
var $new_totals = $( '.cart_totals', $html );
|
var $new_totals = $( '.cart_totals', $html );
|
||||||
var $notices = remove_duplicate_notices( $( '.woocommerce-error, .woocommerce-message, .woocommerce-info', $html ) );
|
var $notices = remove_duplicate_notices(
|
||||||
|
$(
|
||||||
|
'.woocommerce-error, .woocommerce-message, .woocommerce-info, .is-error, .is-notice, .is-success',
|
||||||
|
$html
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
// No form, cannot do this.
|
// No form, cannot do this.
|
||||||
if ( $( '.woocommerce-cart-form' ).length === 0 ) {
|
if ( $( '.woocommerce-cart-form' ).length === 0 ) {
|
||||||
|
@ -98,7 +103,9 @@ jQuery( function( $ ) {
|
||||||
|
|
||||||
// Remove errors
|
// Remove errors
|
||||||
if ( ! preserve_notices ) {
|
if ( ! preserve_notices ) {
|
||||||
$( '.woocommerce-error, .woocommerce-message, .woocommerce-info' ).remove();
|
$(
|
||||||
|
'.woocommerce-error, .woocommerce-message, .woocommerce-info'
|
||||||
|
).remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( $new_form.length === 0 ) {
|
if ( $new_form.length === 0 ) {
|
||||||
|
@ -109,8 +116,12 @@ jQuery( function( $ ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// No items to display now! Replace all cart content.
|
// No items to display now! Replace all cart content.
|
||||||
var $cart_html = $( '.wc-empty-cart-message', $html ).closest( '.woocommerce' );
|
var $cart_html = $( '.wc-empty-cart-message', $html ).closest(
|
||||||
$( '.woocommerce-cart-form__contents' ).closest( '.woocommerce' ).replaceWith( $cart_html );
|
'.woocommerce'
|
||||||
|
);
|
||||||
|
$( '.woocommerce-cart-form__contents' )
|
||||||
|
.closest( '.woocommerce' )
|
||||||
|
.replaceWith( $cart_html );
|
||||||
|
|
||||||
// Display errors
|
// Display errors
|
||||||
if ( $notices.length > 0 ) {
|
if ( $notices.length > 0 ) {
|
||||||
|
@ -126,7 +137,9 @@ jQuery( function( $ ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
$( '.woocommerce-cart-form' ).replaceWith( $new_form );
|
$( '.woocommerce-cart-form' ).replaceWith( $new_form );
|
||||||
$( '.woocommerce-cart-form' ).find( ':input[name="update_cart"]' ).prop( 'disabled', true );
|
$( '.woocommerce-cart-form' )
|
||||||
|
.find( ':input[name="update_cart"]' )
|
||||||
|
.prop( 'disabled', true );
|
||||||
|
|
||||||
if ( $notices.length > 0 ) {
|
if ( $notices.length > 0 ) {
|
||||||
show_notice( $notices );
|
show_notice( $notices );
|
||||||
|
@ -143,7 +156,7 @@ jQuery( function( $ ) {
|
||||||
*
|
*
|
||||||
* @param {String} html_str The HTML string with which to replace the div.
|
* @param {String} html_str The HTML string with which to replace the div.
|
||||||
*/
|
*/
|
||||||
var update_cart_totals_div = function( html_str ) {
|
var update_cart_totals_div = function ( html_str ) {
|
||||||
$( '.cart_totals' ).replaceWith( html_str );
|
$( '.cart_totals' ).replaceWith( html_str );
|
||||||
$( document.body ).trigger( 'updated_cart_totals' );
|
$( document.body ).trigger( 'updated_cart_totals' );
|
||||||
};
|
};
|
||||||
|
@ -153,29 +166,30 @@ jQuery( function( $ ) {
|
||||||
*
|
*
|
||||||
* @param {Object} The Notice HTML Element in string or object form.
|
* @param {Object} The Notice HTML Element in string or object form.
|
||||||
*/
|
*/
|
||||||
var show_notice = function( html_element, $target ) {
|
var show_notice = function ( html_element, $target ) {
|
||||||
if ( ! $target ) {
|
if ( ! $target ) {
|
||||||
$target = $( '.woocommerce-notices-wrapper:first' ) ||
|
$target =
|
||||||
|
$( '.woocommerce-notices-wrapper:first' ) ||
|
||||||
$( '.wc-empty-cart-message' ).closest( '.woocommerce' ) ||
|
$( '.wc-empty-cart-message' ).closest( '.woocommerce' ) ||
|
||||||
$( '.woocommerce-cart-form' );
|
$( '.woocommerce-cart-form' );
|
||||||
}
|
}
|
||||||
$target.prepend( html_element );
|
$target.prepend( html_element );
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Object to handle AJAX calls for cart shipping changes.
|
* Object to handle AJAX calls for cart shipping changes.
|
||||||
*/
|
*/
|
||||||
var cart_shipping = {
|
var cart_shipping = {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize event handlers and UI state.
|
* Initialize event handlers and UI state.
|
||||||
*/
|
*/
|
||||||
init: function( cart ) {
|
init: function ( cart ) {
|
||||||
this.cart = cart;
|
this.cart = cart;
|
||||||
this.toggle_shipping = this.toggle_shipping.bind( this );
|
this.toggle_shipping = this.toggle_shipping.bind( this );
|
||||||
this.shipping_method_selected = this.shipping_method_selected.bind( this );
|
this.shipping_method_selected =
|
||||||
this.shipping_calculator_submit = this.shipping_calculator_submit.bind( this );
|
this.shipping_method_selected.bind( this );
|
||||||
|
this.shipping_calculator_submit =
|
||||||
|
this.shipping_calculator_submit.bind( this );
|
||||||
|
|
||||||
$( document ).on(
|
$( document ).on(
|
||||||
'click',
|
'click',
|
||||||
|
@ -199,9 +213,11 @@ jQuery( function( $ ) {
|
||||||
/**
|
/**
|
||||||
* Toggle Shipping Calculator panel
|
* Toggle Shipping Calculator panel
|
||||||
*/
|
*/
|
||||||
toggle_shipping: function() {
|
toggle_shipping: function () {
|
||||||
$( '.shipping-calculator-form' ).slideToggle( 'slow' );
|
$( '.shipping-calculator-form' ).slideToggle( 'slow' );
|
||||||
$( 'select.country_to_state, input.country_to_state' ).trigger( 'change' );
|
$( 'select.country_to_state, input.country_to_state' ).trigger(
|
||||||
|
'change'
|
||||||
|
);
|
||||||
$( document.body ).trigger( 'country_to_state_changed' ); // Trigger select2 to load.
|
$( document.body ).trigger( 'country_to_state_changed' ); // Trigger select2 to load.
|
||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
|
@ -209,11 +225,13 @@ jQuery( function( $ ) {
|
||||||
/**
|
/**
|
||||||
* Handles when a shipping method is selected.
|
* Handles when a shipping method is selected.
|
||||||
*/
|
*/
|
||||||
shipping_method_selected: function() {
|
shipping_method_selected: function () {
|
||||||
var shipping_methods = {};
|
var shipping_methods = {};
|
||||||
|
|
||||||
// eslint-disable-next-line max-len
|
// eslint-disable-next-line max-len
|
||||||
$( 'select.shipping_method, :input[name^=shipping_method][type=radio]:checked, :input[name^=shipping_method][type=hidden]' ).each( function() {
|
$(
|
||||||
|
'select.shipping_method, :input[name^=shipping_method][type=radio]:checked, :input[name^=shipping_method][type=hidden]'
|
||||||
|
).each( function () {
|
||||||
shipping_methods[ $( this ).data( 'index' ) ] = $( this ).val();
|
shipping_methods[ $( this ).data( 'index' ) ] = $( this ).val();
|
||||||
} );
|
} );
|
||||||
|
|
||||||
|
@ -221,21 +239,21 @@ jQuery( function( $ ) {
|
||||||
|
|
||||||
var data = {
|
var data = {
|
||||||
security: wc_cart_params.update_shipping_method_nonce,
|
security: wc_cart_params.update_shipping_method_nonce,
|
||||||
shipping_method: shipping_methods
|
shipping_method: shipping_methods,
|
||||||
};
|
};
|
||||||
|
|
||||||
$.ajax( {
|
$.ajax( {
|
||||||
type: 'post',
|
type: 'post',
|
||||||
url: get_url( 'update_shipping_method' ),
|
url: get_url( 'update_shipping_method' ),
|
||||||
data: data,
|
data: data,
|
||||||
dataType: 'html',
|
dataType: 'html',
|
||||||
success: function( response ) {
|
success: function ( response ) {
|
||||||
update_cart_totals_div( response );
|
update_cart_totals_div( response );
|
||||||
},
|
},
|
||||||
complete: function() {
|
complete: function () {
|
||||||
unblock( $( 'div.cart_totals' ) );
|
unblock( $( 'div.cart_totals' ) );
|
||||||
$( document.body ).trigger( 'updated_shipping_method' );
|
$( document.body ).trigger( 'updated_shipping_method' );
|
||||||
}
|
},
|
||||||
} );
|
} );
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -244,7 +262,7 @@ jQuery( function( $ ) {
|
||||||
*
|
*
|
||||||
* @param {Object} evt The JQuery event.
|
* @param {Object} evt The JQuery event.
|
||||||
*/
|
*/
|
||||||
shipping_calculator_submit: function( evt ) {
|
shipping_calculator_submit: function ( evt ) {
|
||||||
evt.preventDefault();
|
evt.preventDefault();
|
||||||
|
|
||||||
var $form = $( evt.currentTarget );
|
var $form = $( evt.currentTarget );
|
||||||
|
@ -253,26 +271,27 @@ jQuery( function( $ ) {
|
||||||
block( $form );
|
block( $form );
|
||||||
|
|
||||||
// Provide the submit button value because wc-form-handler expects it.
|
// Provide the submit button value because wc-form-handler expects it.
|
||||||
$( '<input />' ).attr( 'type', 'hidden' )
|
$( '<input />' )
|
||||||
.attr( 'name', 'calc_shipping' )
|
.attr( 'type', 'hidden' )
|
||||||
.attr( 'value', 'x' )
|
.attr( 'name', 'calc_shipping' )
|
||||||
.appendTo( $form );
|
.attr( 'value', 'x' )
|
||||||
|
.appendTo( $form );
|
||||||
|
|
||||||
// Make call to actual form post URL.
|
// Make call to actual form post URL.
|
||||||
$.ajax( {
|
$.ajax( {
|
||||||
type: $form.attr( 'method' ),
|
type: $form.attr( 'method' ),
|
||||||
url: $form.attr( 'action' ),
|
url: $form.attr( 'action' ),
|
||||||
data: $form.serialize(),
|
data: $form.serialize(),
|
||||||
dataType: 'html',
|
dataType: 'html',
|
||||||
success: function( response ) {
|
success: function ( response ) {
|
||||||
update_wc_div( response );
|
update_wc_div( response );
|
||||||
},
|
},
|
||||||
complete: function() {
|
complete: function () {
|
||||||
unblock( $form );
|
unblock( $form );
|
||||||
unblock( $( 'div.cart_totals' ) );
|
unblock( $( 'div.cart_totals' ) );
|
||||||
}
|
},
|
||||||
} );
|
} );
|
||||||
}
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -282,64 +301,78 @@ jQuery( function( $ ) {
|
||||||
/**
|
/**
|
||||||
* Initialize cart UI events.
|
* Initialize cart UI events.
|
||||||
*/
|
*/
|
||||||
init: function() {
|
init: function () {
|
||||||
this.update_cart_totals = this.update_cart_totals.bind( this );
|
this.update_cart_totals = this.update_cart_totals.bind( this );
|
||||||
this.input_keypress = this.input_keypress.bind( this );
|
this.input_keypress = this.input_keypress.bind( this );
|
||||||
this.cart_submit = this.cart_submit.bind( this );
|
this.cart_submit = this.cart_submit.bind( this );
|
||||||
this.submit_click = this.submit_click.bind( this );
|
this.submit_click = this.submit_click.bind( this );
|
||||||
this.apply_coupon = this.apply_coupon.bind( this );
|
this.apply_coupon = this.apply_coupon.bind( this );
|
||||||
this.remove_coupon_clicked = this.remove_coupon_clicked.bind( this );
|
this.remove_coupon_clicked =
|
||||||
this.quantity_update = this.quantity_update.bind( this );
|
this.remove_coupon_clicked.bind( this );
|
||||||
this.item_remove_clicked = this.item_remove_clicked.bind( this );
|
this.quantity_update = this.quantity_update.bind( this );
|
||||||
this.item_restore_clicked = this.item_restore_clicked.bind( this );
|
this.item_remove_clicked = this.item_remove_clicked.bind( this );
|
||||||
this.update_cart = this.update_cart.bind( this );
|
this.item_restore_clicked = this.item_restore_clicked.bind( this );
|
||||||
|
this.update_cart = this.update_cart.bind( this );
|
||||||
|
|
||||||
$( document ).on(
|
$( document ).on( 'wc_update_cart added_to_cart', function () {
|
||||||
'wc_update_cart added_to_cart',
|
cart.update_cart.apply( cart, [].slice.call( arguments, 1 ) );
|
||||||
function() { cart.update_cart.apply( cart, [].slice.call( arguments, 1 ) ); } );
|
} );
|
||||||
$( document ).on(
|
$( document ).on(
|
||||||
'click',
|
'click',
|
||||||
'.woocommerce-cart-form :input[type=submit]',
|
'.woocommerce-cart-form :input[type=submit]',
|
||||||
this.submit_click );
|
this.submit_click
|
||||||
|
);
|
||||||
$( document ).on(
|
$( document ).on(
|
||||||
'keypress',
|
'keypress',
|
||||||
'.woocommerce-cart-form :input[type=number]',
|
'.woocommerce-cart-form :input[type=number]',
|
||||||
this.input_keypress );
|
this.input_keypress
|
||||||
|
);
|
||||||
$( document ).on(
|
$( document ).on(
|
||||||
'submit',
|
'submit',
|
||||||
'.woocommerce-cart-form',
|
'.woocommerce-cart-form',
|
||||||
this.cart_submit );
|
this.cart_submit
|
||||||
|
);
|
||||||
$( document ).on(
|
$( document ).on(
|
||||||
'click',
|
'click',
|
||||||
'a.woocommerce-remove-coupon',
|
'a.woocommerce-remove-coupon',
|
||||||
this.remove_coupon_clicked );
|
this.remove_coupon_clicked
|
||||||
|
);
|
||||||
$( document ).on(
|
$( document ).on(
|
||||||
'click',
|
'click',
|
||||||
'.woocommerce-cart-form .product-remove > a',
|
'.woocommerce-cart-form .product-remove > a',
|
||||||
this.item_remove_clicked );
|
this.item_remove_clicked
|
||||||
|
);
|
||||||
$( document ).on(
|
$( document ).on(
|
||||||
'click',
|
'click',
|
||||||
'.woocommerce-cart .restore-item',
|
'.woocommerce-cart .restore-item',
|
||||||
this.item_restore_clicked );
|
this.item_restore_clicked
|
||||||
|
);
|
||||||
$( document ).on(
|
$( document ).on(
|
||||||
'change input',
|
'change input',
|
||||||
'.woocommerce-cart-form .cart_item :input',
|
'.woocommerce-cart-form .cart_item :input',
|
||||||
this.input_changed );
|
this.input_changed
|
||||||
|
);
|
||||||
|
|
||||||
$( '.woocommerce-cart-form :input[name="update_cart"]' ).prop( 'disabled', true );
|
$( '.woocommerce-cart-form :input[name="update_cart"]' ).prop(
|
||||||
|
'disabled',
|
||||||
|
true
|
||||||
|
);
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* After an input is changed, enable the update cart button.
|
* After an input is changed, enable the update cart button.
|
||||||
*/
|
*/
|
||||||
input_changed: function() {
|
input_changed: function () {
|
||||||
$( '.woocommerce-cart-form :input[name="update_cart"]' ).prop( 'disabled', false );
|
$( '.woocommerce-cart-form :input[name="update_cart"]' ).prop(
|
||||||
|
'disabled',
|
||||||
|
false
|
||||||
|
);
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update entire cart via ajax.
|
* Update entire cart via ajax.
|
||||||
*/
|
*/
|
||||||
update_cart: function( preserve_notices ) {
|
update_cart: function ( preserve_notices ) {
|
||||||
var $form = $( '.woocommerce-cart-form' );
|
var $form = $( '.woocommerce-cart-form' );
|
||||||
|
|
||||||
block( $form );
|
block( $form );
|
||||||
|
@ -347,36 +380,36 @@ jQuery( function( $ ) {
|
||||||
|
|
||||||
// Make call to actual form post URL.
|
// Make call to actual form post URL.
|
||||||
$.ajax( {
|
$.ajax( {
|
||||||
type: $form.attr( 'method' ),
|
type: $form.attr( 'method' ),
|
||||||
url: $form.attr( 'action' ),
|
url: $form.attr( 'action' ),
|
||||||
data: $form.serialize(),
|
data: $form.serialize(),
|
||||||
dataType: 'html',
|
dataType: 'html',
|
||||||
success: function( response ) {
|
success: function ( response ) {
|
||||||
update_wc_div( response, preserve_notices );
|
update_wc_div( response, preserve_notices );
|
||||||
},
|
},
|
||||||
complete: function() {
|
complete: function () {
|
||||||
unblock( $form );
|
unblock( $form );
|
||||||
unblock( $( 'div.cart_totals' ) );
|
unblock( $( 'div.cart_totals' ) );
|
||||||
$.scroll_to_notices( $( '[role="alert"]' ) );
|
$.scroll_to_notices( $( '[role="alert"]' ) );
|
||||||
}
|
},
|
||||||
} );
|
} );
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update the cart after something has changed.
|
* Update the cart after something has changed.
|
||||||
*/
|
*/
|
||||||
update_cart_totals: function() {
|
update_cart_totals: function () {
|
||||||
block( $( 'div.cart_totals' ) );
|
block( $( 'div.cart_totals' ) );
|
||||||
|
|
||||||
$.ajax( {
|
$.ajax( {
|
||||||
url: get_url( 'get_cart_totals' ),
|
url: get_url( 'get_cart_totals' ),
|
||||||
dataType: 'html',
|
dataType: 'html',
|
||||||
success: function( response ) {
|
success: function ( response ) {
|
||||||
update_cart_totals_div( response );
|
update_cart_totals_div( response );
|
||||||
},
|
},
|
||||||
complete: function() {
|
complete: function () {
|
||||||
unblock( $( 'div.cart_totals' ) );
|
unblock( $( 'div.cart_totals' ) );
|
||||||
}
|
},
|
||||||
} );
|
} );
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -390,19 +423,18 @@ jQuery( function( $ ) {
|
||||||
* For us, that is the Apply Coupon button. This is required
|
* For us, that is the Apply Coupon button. This is required
|
||||||
* to catch the event before that happens.
|
* to catch the event before that happens.
|
||||||
*/
|
*/
|
||||||
input_keypress: function( evt ) {
|
input_keypress: function ( evt ) {
|
||||||
|
|
||||||
// Catch the enter key and don't let it submit the form.
|
// Catch the enter key and don't let it submit the form.
|
||||||
if ( 13 === evt.keyCode ) {
|
if ( 13 === evt.keyCode ) {
|
||||||
var $form = $( evt.currentTarget ).parents( 'form' );
|
var $form = $( evt.currentTarget ).parents( 'form' );
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// If there are no validation errors, handle the submit.
|
// If there are no validation errors, handle the submit.
|
||||||
if ( $form[0].checkValidity() ) {
|
if ( $form[ 0 ].checkValidity() ) {
|
||||||
evt.preventDefault();
|
evt.preventDefault();
|
||||||
this.cart_submit( evt );
|
this.cart_submit( evt );
|
||||||
}
|
}
|
||||||
} catch( err ) {
|
} catch ( err ) {
|
||||||
evt.preventDefault();
|
evt.preventDefault();
|
||||||
this.cart_submit( evt );
|
this.cart_submit( evt );
|
||||||
}
|
}
|
||||||
|
@ -414,10 +446,10 @@ jQuery( function( $ ) {
|
||||||
*
|
*
|
||||||
* @param {Object} evt The JQuery event
|
* @param {Object} evt The JQuery event
|
||||||
*/
|
*/
|
||||||
cart_submit: function( evt ) {
|
cart_submit: function ( evt ) {
|
||||||
var $submit = $( document.activeElement ),
|
var $submit = $( document.activeElement ),
|
||||||
$clicked = $( ':input[type=submit][clicked=true]' ),
|
$clicked = $( ':input[type=submit][clicked=true]' ),
|
||||||
$form = $( evt.currentTarget );
|
$form = $( evt.currentTarget );
|
||||||
|
|
||||||
// For submit events, currentTarget is form.
|
// For submit events, currentTarget is form.
|
||||||
// For keypress events, currentTarget is input.
|
// For keypress events, currentTarget is input.
|
||||||
|
@ -425,7 +457,9 @@ jQuery( function( $ ) {
|
||||||
$form = $( evt.currentTarget ).parents( 'form' );
|
$form = $( evt.currentTarget ).parents( 'form' );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( 0 === $form.find( '.woocommerce-cart-form__contents' ).length ) {
|
if (
|
||||||
|
0 === $form.find( '.woocommerce-cart-form__contents' ).length
|
||||||
|
) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -433,11 +467,16 @@ jQuery( function( $ ) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( $clicked.is( ':input[name="update_cart"]' ) || $submit.is( 'input.qty' ) ) {
|
if (
|
||||||
|
$clicked.is( ':input[name="update_cart"]' ) ||
|
||||||
|
$submit.is( 'input.qty' )
|
||||||
|
) {
|
||||||
evt.preventDefault();
|
evt.preventDefault();
|
||||||
this.quantity_update( $form );
|
this.quantity_update( $form );
|
||||||
|
} else if (
|
||||||
} else if ( $clicked.is( ':input[name="apply_coupon"]' ) || $submit.is( '#coupon_code' ) ) {
|
$clicked.is( ':input[name="apply_coupon"]' ) ||
|
||||||
|
$submit.is( '#coupon_code' )
|
||||||
|
) {
|
||||||
evt.preventDefault();
|
evt.preventDefault();
|
||||||
this.apply_coupon( $form );
|
this.apply_coupon( $form );
|
||||||
}
|
}
|
||||||
|
@ -448,8 +487,11 @@ jQuery( function( $ ) {
|
||||||
*
|
*
|
||||||
* @param {Object} evt The JQuery event
|
* @param {Object} evt The JQuery event
|
||||||
*/
|
*/
|
||||||
submit_click: function( evt ) {
|
submit_click: function ( evt ) {
|
||||||
$( ':input[type=submit]', $( evt.target ).parents( 'form' ) ).removeAttr( 'clicked' );
|
$(
|
||||||
|
':input[type=submit]',
|
||||||
|
$( evt.target ).parents( 'form' )
|
||||||
|
).removeAttr( 'clicked' );
|
||||||
$( evt.target ).attr( 'clicked', 'true' );
|
$( evt.target ).attr( 'clicked', 'true' );
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -458,7 +500,7 @@ jQuery( function( $ ) {
|
||||||
*
|
*
|
||||||
* @param {JQuery Object} $form The cart form.
|
* @param {JQuery Object} $form The cart form.
|
||||||
*/
|
*/
|
||||||
apply_coupon: function( $form ) {
|
apply_coupon: function ( $form ) {
|
||||||
block( $form );
|
block( $form );
|
||||||
|
|
||||||
var cart = this;
|
var cart = this;
|
||||||
|
@ -467,24 +509,28 @@ jQuery( function( $ ) {
|
||||||
|
|
||||||
var data = {
|
var data = {
|
||||||
security: wc_cart_params.apply_coupon_nonce,
|
security: wc_cart_params.apply_coupon_nonce,
|
||||||
coupon_code: coupon_code
|
coupon_code: coupon_code,
|
||||||
};
|
};
|
||||||
|
|
||||||
$.ajax( {
|
$.ajax( {
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
url: get_url( 'apply_coupon' ),
|
url: get_url( 'apply_coupon' ),
|
||||||
data: data,
|
data: data,
|
||||||
dataType: 'html',
|
dataType: 'html',
|
||||||
success: function( response ) {
|
success: function ( response ) {
|
||||||
$( '.woocommerce-error, .woocommerce-message, .woocommerce-info' ).remove();
|
$(
|
||||||
|
'.woocommerce-error, .woocommerce-message, .woocommerce-info'
|
||||||
|
).remove();
|
||||||
show_notice( response );
|
show_notice( response );
|
||||||
$( document.body ).trigger( 'applied_coupon', [ coupon_code ] );
|
$( document.body ).trigger( 'applied_coupon', [
|
||||||
|
coupon_code,
|
||||||
|
] );
|
||||||
},
|
},
|
||||||
complete: function() {
|
complete: function () {
|
||||||
unblock( $form );
|
unblock( $form );
|
||||||
$text_field.val( '' );
|
$text_field.val( '' );
|
||||||
cart.update_cart( true );
|
cart.update_cart( true );
|
||||||
}
|
},
|
||||||
} );
|
} );
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -493,34 +539,36 @@ jQuery( function( $ ) {
|
||||||
*
|
*
|
||||||
* @param {Object} evt The JQuery event
|
* @param {Object} evt The JQuery event
|
||||||
*/
|
*/
|
||||||
remove_coupon_clicked: function( evt ) {
|
remove_coupon_clicked: function ( evt ) {
|
||||||
evt.preventDefault();
|
evt.preventDefault();
|
||||||
|
|
||||||
var cart = this;
|
var cart = this;
|
||||||
var $wrapper = $( evt.currentTarget ).closest( '.cart_totals' );
|
var $wrapper = $( evt.currentTarget ).closest( '.cart_totals' );
|
||||||
var coupon = $( evt.currentTarget ).attr( 'data-coupon' );
|
var coupon = $( evt.currentTarget ).attr( 'data-coupon' );
|
||||||
|
|
||||||
block( $wrapper );
|
block( $wrapper );
|
||||||
|
|
||||||
var data = {
|
var data = {
|
||||||
security: wc_cart_params.remove_coupon_nonce,
|
security: wc_cart_params.remove_coupon_nonce,
|
||||||
coupon: coupon
|
coupon: coupon,
|
||||||
};
|
};
|
||||||
|
|
||||||
$.ajax( {
|
$.ajax( {
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
url: get_url( 'remove_coupon' ),
|
url: get_url( 'remove_coupon' ),
|
||||||
data: data,
|
data: data,
|
||||||
dataType: 'html',
|
dataType: 'html',
|
||||||
success: function( response ) {
|
success: function ( response ) {
|
||||||
$( '.woocommerce-error, .woocommerce-message, .woocommerce-info' ).remove();
|
$(
|
||||||
|
'.woocommerce-error, .woocommerce-message, .woocommerce-info'
|
||||||
|
).remove();
|
||||||
show_notice( response );
|
show_notice( response );
|
||||||
$( document.body ).trigger( 'removed_coupon', [ coupon ] );
|
$( document.body ).trigger( 'removed_coupon', [ coupon ] );
|
||||||
unblock( $wrapper );
|
unblock( $wrapper );
|
||||||
},
|
},
|
||||||
complete: function() {
|
complete: function () {
|
||||||
cart.update_cart( true );
|
cart.update_cart( true );
|
||||||
}
|
},
|
||||||
} );
|
} );
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -529,30 +577,31 @@ jQuery( function( $ ) {
|
||||||
*
|
*
|
||||||
* @param {JQuery Object} $form The cart form.
|
* @param {JQuery Object} $form The cart form.
|
||||||
*/
|
*/
|
||||||
quantity_update: function( $form ) {
|
quantity_update: function ( $form ) {
|
||||||
block( $form );
|
block( $form );
|
||||||
block( $( 'div.cart_totals' ) );
|
block( $( 'div.cart_totals' ) );
|
||||||
|
|
||||||
// Provide the submit button value because wc-form-handler expects it.
|
// Provide the submit button value because wc-form-handler expects it.
|
||||||
$( '<input />' ).attr( 'type', 'hidden' )
|
$( '<input />' )
|
||||||
.attr( 'name', 'update_cart' )
|
.attr( 'type', 'hidden' )
|
||||||
.attr( 'value', 'Update Cart' )
|
.attr( 'name', 'update_cart' )
|
||||||
.appendTo( $form );
|
.attr( 'value', 'Update Cart' )
|
||||||
|
.appendTo( $form );
|
||||||
|
|
||||||
// Make call to actual form post URL.
|
// Make call to actual form post URL.
|
||||||
$.ajax( {
|
$.ajax( {
|
||||||
type: $form.attr( 'method' ),
|
type: $form.attr( 'method' ),
|
||||||
url: $form.attr( 'action' ),
|
url: $form.attr( 'action' ),
|
||||||
data: $form.serialize(),
|
data: $form.serialize(),
|
||||||
dataType: 'html',
|
dataType: 'html',
|
||||||
success: function( response ) {
|
success: function ( response ) {
|
||||||
update_wc_div( response );
|
update_wc_div( response );
|
||||||
},
|
},
|
||||||
complete: function() {
|
complete: function () {
|
||||||
unblock( $form );
|
unblock( $form );
|
||||||
unblock( $( 'div.cart_totals' ) );
|
unblock( $( 'div.cart_totals' ) );
|
||||||
$.scroll_to_notices( $( '[role="alert"]' ) );
|
$.scroll_to_notices( $( '[role="alert"]' ) );
|
||||||
}
|
},
|
||||||
} );
|
} );
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -561,7 +610,7 @@ jQuery( function( $ ) {
|
||||||
*
|
*
|
||||||
* @param {Object} evt The JQuery event
|
* @param {Object} evt The JQuery event
|
||||||
*/
|
*/
|
||||||
item_remove_clicked: function( evt ) {
|
item_remove_clicked: function ( evt ) {
|
||||||
evt.preventDefault();
|
evt.preventDefault();
|
||||||
|
|
||||||
var $a = $( evt.currentTarget );
|
var $a = $( evt.currentTarget );
|
||||||
|
@ -571,17 +620,17 @@ jQuery( function( $ ) {
|
||||||
block( $( 'div.cart_totals' ) );
|
block( $( 'div.cart_totals' ) );
|
||||||
|
|
||||||
$.ajax( {
|
$.ajax( {
|
||||||
type: 'GET',
|
type: 'GET',
|
||||||
url: $a.attr( 'href' ),
|
url: $a.attr( 'href' ),
|
||||||
dataType: 'html',
|
dataType: 'html',
|
||||||
success: function( response ) {
|
success: function ( response ) {
|
||||||
update_wc_div( response );
|
update_wc_div( response );
|
||||||
},
|
},
|
||||||
complete: function() {
|
complete: function () {
|
||||||
unblock( $form );
|
unblock( $form );
|
||||||
unblock( $( 'div.cart_totals' ) );
|
unblock( $( 'div.cart_totals' ) );
|
||||||
$.scroll_to_notices( $( '[role="alert"]' ) );
|
$.scroll_to_notices( $( '[role="alert"]' ) );
|
||||||
}
|
},
|
||||||
} );
|
} );
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -590,7 +639,7 @@ jQuery( function( $ ) {
|
||||||
*
|
*
|
||||||
* @param {Object} evt The JQuery event
|
* @param {Object} evt The JQuery event
|
||||||
*/
|
*/
|
||||||
item_restore_clicked: function( evt ) {
|
item_restore_clicked: function ( evt ) {
|
||||||
evt.preventDefault();
|
evt.preventDefault();
|
||||||
|
|
||||||
var $a = $( evt.currentTarget );
|
var $a = $( evt.currentTarget );
|
||||||
|
@ -600,18 +649,18 @@ jQuery( function( $ ) {
|
||||||
block( $( 'div.cart_totals' ) );
|
block( $( 'div.cart_totals' ) );
|
||||||
|
|
||||||
$.ajax( {
|
$.ajax( {
|
||||||
type: 'GET',
|
type: 'GET',
|
||||||
url: $a.attr( 'href' ),
|
url: $a.attr( 'href' ),
|
||||||
dataType: 'html',
|
dataType: 'html',
|
||||||
success: function( response ) {
|
success: function ( response ) {
|
||||||
update_wc_div( response );
|
update_wc_div( response );
|
||||||
},
|
},
|
||||||
complete: function() {
|
complete: function () {
|
||||||
unblock( $form );
|
unblock( $form );
|
||||||
unblock( $( 'div.cart_totals' ) );
|
unblock( $( 'div.cart_totals' ) );
|
||||||
}
|
},
|
||||||
} );
|
} );
|
||||||
}
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
cart_shipping.init( cart );
|
cart_shipping.init( cart );
|
||||||
|
|
Loading…
Reference in New Issue