From 89ef0451dd8c7775fe48e20d71dc7836e8e49a96 Mon Sep 17 00:00:00 2001 From: Jonathan Moore Date: Sat, 25 May 2019 22:59:33 +0100 Subject: [PATCH] addresses #408 WooCommerce 3.6.x: cart fragment script updates for 3.6 merged in updates from 3.6.3 WooCommerce cart-fragments.js --- public/js/Cart.js | 27 +++++++++++++++++++++++++-- public/js/Cart.min.js | 2 +- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/public/js/Cart.js b/public/js/Cart.js index a13364a..9a7983c 100644 --- a/public/js/Cart.js +++ b/public/js/Cart.js @@ -8,7 +8,7 @@ * Modified WooCommerce cart-fragments.js script to break HTML5 fragment caching. * Useful when switching languages. Adds support new Cart page ajax. * - * Updated in line with WooCommerce 3.5.3 cart-fragments.js, + * Updated in line with WooCommerce 3.6.3 cart-fragments.js, * only difference is the additional Polylang lines... and these commments **/ @@ -63,6 +63,10 @@ jQuery( function( $ ) { var $fragment_refresh = { url: wc_cart_fragments_params.wc_ajax_url.toString().replace( '%%endpoint%%', 'get_refreshed_fragments' ), type: 'POST', + data: { + time: new Date().getTime() + }, + timeout: wc_cart_fragments_params.request_timeout, success: function( data ) { if ( data && data.fragments ) { @@ -81,6 +85,9 @@ jQuery( function( $ ) { $( document.body ).trigger( 'wc_fragments_refreshed' ); } + }, + error: function() { + $( document.body ).trigger( 'wc_fragments_ajax_error' ); } }; @@ -117,7 +124,9 @@ jQuery( function( $ ) { // Refresh when storage changes in another tab $( window ).on( 'storage onstorage', function ( e ) { - if ( cart_hash_key === e.originalEvent.key && localStorage.getItem( cart_hash_key ) !== sessionStorage.getItem( cart_hash_key ) ) { + if ( + cart_hash_key === e.originalEvent.key && localStorage.getItem( cart_hash_key ) !== sessionStorage.getItem( cart_hash_key ) + ) { refresh_cart_fragment(); } }); @@ -203,4 +212,18 @@ jQuery( function( $ ) { $( document.body ).on( 'adding_to_cart', function() { $( '.hide_cart_widget_if_empty' ).closest( '.widget_shopping_cart' ).show(); }); + + // Customiser support. + var hasSelectiveRefresh = ( + 'undefined' !== typeof wp && + wp.customize && + wp.customize.selectiveRefresh && + wp.customize.widgetsPreview && + wp.customize.widgetsPreview.WidgetPartial + ); + if ( hasSelectiveRefresh ) { + wp.customize.selectiveRefresh.bind( 'partial-content-rendered', function() { + refresh_cart_fragment(); + } ); + } }); diff --git a/public/js/Cart.min.js b/public/js/Cart.min.js index e5a1ccf..ddcb32f 100644 --- a/public/js/Cart.min.js +++ b/public/js/Cart.min.js @@ -1 +1 @@ -jQuery(function(a){if("undefined"==typeof wc_cart_fragments_params)return!1;var t=!0,n=wc_cart_fragments_params.cart_hash_key;try{t="sessionStorage"in window&&null!==window.sessionStorage,window.sessionStorage.setItem("wc","test"),window.sessionStorage.removeItem("wc"),window.localStorage.setItem("wc","test"),window.localStorage.removeItem("wc")}catch(e){t=!1}function r(){t&&sessionStorage.setItem("wc_cart_created",(new Date).getTime())}function s(e){t&&(localStorage.setItem(n,e),sessionStorage.setItem(n,e))}var e,o={url:wc_cart_fragments_params.wc_ajax_url.toString().replace("%%endpoint%%","get_refreshed_fragments"),type:"POST",success:function(e){e&&e.fragments&&(a.each(e.fragments,function(e,t){a(e).replaceWith(t)}),t&&(sessionStorage.setItem(wc_cart_fragments_params.fragment_name,JSON.stringify(e.fragments)),s(e.cart_hash),e.cart_hash&&r()),a(document.body).trigger("wc_fragments_refreshed"))}};function i(){a.ajax(o)}if(t){var c=null;a(document.body).on("wc_fragment_refresh updated_wc_div",function(){i()}),a(document.body).on("added_to_cart removed_from_cart",function(e,t,a){var o=sessionStorage.getItem(n);null!=o&&""!==o||r(),sessionStorage.setItem(wc_cart_fragments_params.fragment_name,JSON.stringify(t)),s(a)}),a(document.body).on("wc_fragments_refreshed",function(){clearTimeout(c),c=setTimeout(i,864e5)}),a(window).on("storage onstorage",function(e){n===e.originalEvent.key&&localStorage.getItem(n)!==sessionStorage.getItem(n)&&i()}),a(window).on("pageshow",function(e){e.originalEvent.persisted&&(a(".widget_shopping_cart_content").empty(),a(document.body).trigger("wc_fragment_refresh"))});try{var g=a.parseJSON(sessionStorage.getItem(wc_cart_fragments_params.fragment_name)),_=sessionStorage.getItem(n),m=Cookies.get("woocommerce_cart_hash"),d=sessionStorage.getItem("wc_cart_created");if(null!=_&&""!==_||(_=""),null!=m&&""!==m||(m=""),_&&(null==d||""===d))throw"No cart_created";if(d){var w=1*d+864e5,f=(new Date).getTime();if(w