Split out fragment code into wc-cart-fragments Closes #2528

This commit is contained in:
Mike Jolley 2013-02-26 12:15:12 +00:00
parent fa6fc063ed
commit d403f4d9bc
5 changed files with 80 additions and 86 deletions

View File

@ -0,0 +1,55 @@
jQuery(document).ready(function($) {
/** Cart Handling */
$supports_html5_storage = ( 'sessionStorage' in window && window['sessionStorage'] !== null );
$fragment_refresh = {
url: woocommerce_params.ajax_url,
type: 'POST',
data: { action: 'woocommerce_get_refreshed_fragments' },
success: function( data ) {
if ( data && data.fragments ) {
$.each( data.fragments, function( key, value ) {
$(key).replaceWith(value);
});
if ( $supports_html5_storage ) {
sessionStorage.setItem( "wc_fragments", JSON.stringify( data.fragments ) );
sessionStorage.setItem( "wc_cart_hash", data.cart_hash );
}
}
}
};
if ( $supports_html5_storage ) {
$('body').bind( 'added_to_cart', function( event, fragments, cart_hash ) {
sessionStorage.setItem( "wc_fragments", JSON.stringify( fragments ) );
sessionStorage.setItem( "wc_cart_hash", cart_hash );
});
try {
var wc_fragments = $.parseJSON( sessionStorage.getItem( "wc_fragments" ) );
var cart_hash = sessionStorage.getItem( "wc_cart_hash" );
if ( wc_fragments && wc_fragments['div.widget_shopping_cart_content'] && cart_hash == $.cookie( "woocommerce_cart_hash" ) ) {
$.each( wc_fragments, function( key, value ) {
$(key).replaceWith(value);
});
} else {
throw "No fragment";
}
} catch(err) {
$.ajax( $fragment_refresh );
}
} else {
$.ajax( $fragment_refresh );
}
});

View File

@ -0,0 +1 @@
jQuery(document).ready(function(e){$supports_html5_storage="sessionStorage"in window&&window.sessionStorage!==null;$fragment_refresh={url:woocommerce_params.ajax_url,type:"POST",data:{action:"woocommerce_get_refreshed_fragments"},success:function(t){if(t&&t.fragments){e.each(t.fragments,function(t,n){e(t).replaceWith(n)});if($supports_html5_storage){sessionStorage.setItem("wc_fragments",JSON.stringify(t.fragments));sessionStorage.setItem("wc_cart_hash",t.cart_hash)}}}};if($supports_html5_storage){e("body").bind("added_to_cart",function(e,t,n){sessionStorage.setItem("wc_fragments",JSON.stringify(t));sessionStorage.setItem("wc_cart_hash",n)});try{var t=e.parseJSON(sessionStorage.getItem("wc_fragments")),n=sessionStorage.getItem("wc_cart_hash");if(!t||!t["div.widget_shopping_cart_content"]||n!=e.cookie("woocommerce_cart_hash"))throw"No fragment";e.each(t,function(t,n){e(t).replaceWith(n)})}catch(r){e.ajax($fragment_refresh)}}else e.ajax($fragment_refresh)});

View File

@ -1,58 +1,5 @@
jQuery(document).ready(function($) {
/** Cart Handling */
$supports_html5_storage = ( 'sessionStorage' in window && window['sessionStorage'] !== null );
$fragment_refresh = {
url: woocommerce_params.ajax_url,
type: 'POST',
data: { action: 'woocommerce_get_refreshed_fragments' },
success: function( data ) {
if ( data && data.fragments ) {
$.each( data.fragments, function( key, value ) {
$(key).replaceWith(value);
});
if ( $supports_html5_storage ) {
sessionStorage.setItem( "wc_fragments", JSON.stringify( data.fragments ) );
sessionStorage.setItem( "wc_cart_hash", data.cart_hash );
}
}
}
};
if ( $supports_html5_storage ) {
$('body').bind( 'added_to_cart', function( event, fragments, cart_hash ) {
sessionStorage.setItem( "wc_fragments", JSON.stringify( fragments ) );
sessionStorage.setItem( "wc_cart_hash", cart_hash );
});
try {
var wc_fragments = $.parseJSON( sessionStorage.getItem( "wc_fragments" ) );
var cart_hash = sessionStorage.getItem( "wc_cart_hash" );
if ( wc_fragments && wc_fragments['div.widget_shopping_cart_content'] && cart_hash == $.cookie( "woocommerce_cart_hash" ) ) {
$.each( wc_fragments, function( key, value ) {
$(key).replaceWith(value);
});
} else {
throw "No fragment";
}
} catch(err) {
$.ajax( $fragment_refresh );
}
} else {
$.ajax( $fragment_refresh );
}
// Orderby
$('select.orderby').change(function(){
$(this).closest('form').submit();
@ -129,45 +76,38 @@ jQuery(document).ready(function($) {
if (states[country]) {
if (states[country].length == 0) {
// Empty array means state field is not used
//$parent.fadeOut(200, function() {
$statebox.parent().hide().find('.chzn-container').remove();
$statebox.replaceWith('<input type="hidden" class="hidden" name="' + input_name + '" id="' + input_id + '" value="" placeholder="' + placeholder + '" />');
$statebox.parent().hide().find('.chzn-container').remove();
$statebox.replaceWith('<input type="hidden" class="hidden" name="' + input_name + '" id="' + input_id + '" value="" placeholder="' + placeholder + '" />');
$('body').trigger('country_to_state_changed', [country, $(this).closest('div')]);
//});
$('body').trigger('country_to_state_changed', [country, $(this).closest('div')]);
} else {
//$parent.fadeOut(200, function() {
var options = '';
var state = states[country];
for(var index in state) {
options = options + '<option value="' + index + '">' + state[index] + '</option>';
}
$statebox.parent().show();
if ($statebox.is('input')) {
// Change for select
$statebox.replaceWith('<select name="' + input_name + '" id="' + input_id + '" class="state_select" placeholder="' + placeholder + '"></select>');
$statebox = $(this).closest('div').find('#billing_state, #shipping_state, #calc_shipping_state');
}
$statebox.html( '<option value="">' + woocommerce_params.i18n_select_state_text + '</option>' + options);
var options = '';
var state = states[country];
for(var index in state) {
options = options + '<option value="' + index + '">' + state[index] + '</option>';
}
$statebox.parent().show();
if ($statebox.is('input')) {
// Change for select
$statebox.replaceWith('<select name="' + input_name + '" id="' + input_id + '" class="state_select" placeholder="' + placeholder + '"></select>');
$statebox = $(this).closest('div').find('#billing_state, #shipping_state, #calc_shipping_state');
}
$statebox.html( '<option value="">' + woocommerce_params.i18n_select_state_text + '</option>' + options);
$statebox.val(value);
$statebox.val(value);
$('body').trigger('country_to_state_changed', [country, $(this).closest('div')]);
//});
$('body').trigger('country_to_state_changed', [country, $(this).closest('div')]);
}
} else {
if ($statebox.is('select')) {
//$parent.fadeOut(200, function() {
$parent.show().find('.chzn-container').remove();
$statebox.replaceWith('<input type="text" class="input-text" name="' + input_name + '" id="' + input_id + '" placeholder="' + placeholder + '" />');
$parent.show().find('.chzn-container').remove();
$statebox.replaceWith('<input type="text" class="input-text" name="' + input_name + '" id="' + input_id + '" placeholder="' + placeholder + '" />');
$('body').trigger('country_to_state_changed', [country, $(this).closest('div')]);
//});
$('body').trigger('country_to_state_changed', [country, $(this).closest('div')]);
} else if ($statebox.is('.hidden')) {
@ -175,14 +115,11 @@ jQuery(document).ready(function($) {
$statebox.replaceWith('<input type="text" class="input-text" name="' + input_name + '" id="' + input_id + '" placeholder="' + placeholder + '" />');
$('body').trigger('country_to_state_changed', [country, $(this).closest('div')]);
//$parent.delay(200).fadeIn(500);
}
}
$('body')
//.delay(200)
.trigger('country_to_state_changing', [country, $(this).closest('div')]);
$('body').trigger('country_to_state_changing', [country, $(this).closest('div')]);
});

View File

@ -1 +1 @@
jQuery(document).ready(function(e){$supports_html5_storage="sessionStorage"in window&&window.sessionStorage!==null;$fragment_refresh={url:woocommerce_params.ajax_url,type:"POST",data:{action:"woocommerce_get_refreshed_fragments"},success:function(t){if(t&&t.fragments){e.each(t.fragments,function(t,n){e(t).replaceWith(n)});if($supports_html5_storage){sessionStorage.setItem("wc_fragments",JSON.stringify(t.fragments));sessionStorage.setItem("wc_cart_hash",t.cart_hash)}}}};if($supports_html5_storage){e("body").bind("added_to_cart",function(e,t,n){sessionStorage.setItem("wc_fragments",JSON.stringify(t));sessionStorage.setItem("wc_cart_hash",n)});try{var t=e.parseJSON(sessionStorage.getItem("wc_fragments")),n=sessionStorage.getItem("wc_cart_hash");if(!t||!t["div.widget_shopping_cart_content"]||n!=e.cookie("woocommerce_cart_hash"))throw"No fragment";e.each(t,function(t,n){e(t).replaceWith(n)})}catch(r){e.ajax($fragment_refresh)}}else e.ajax($fragment_refresh);e("select.orderby").change(function(){e(this).closest("form").submit()});e("div.quantity:not(.buttons_added), td.quantity:not(.buttons_added)").addClass("buttons_added").append('<input type="button" value="+" class="plus" />').prepend('<input type="button" value="-" class="minus" />');e("input.qty:not(.product-quantity input.qty)").each(function(){var t=parseFloat(e(this).attr("min"));t&&t>0&&parseFloat(e(this).val())<t&&e(this).val(t)});e(document).on("click",".plus, .minus",function(){var t=e(this).closest(".quantity").find(".qty"),n=parseFloat(t.val()),r=parseFloat(t.attr("max")),i=parseFloat(t.attr("min")),s=t.attr("step");if(!n||n==""||n=="NaN")n=0;if(r==""||r=="NaN")r="";if(i==""||i=="NaN")i=0;if(s=="any"||s==""||s==undefined||parseFloat(s)=="NaN")s=1;e(this).is(".plus")?r&&(r==n||n>r)?t.val(r):t.val(n+parseFloat(s)):i&&(i==n||n<i)?t.val(i):n>0&&t.val(n-parseFloat(s));t.trigger("change")});var i=woocommerce_params.countries.replace(/&quot;/g,'"'),s=e.parseJSON(i);e("select.country_to_state").change(function(){var t=e(this).val(),n=e(this).closest("div").find("#billing_state, #shipping_state, #calc_shipping_state"),r=n.parent(),i=n.attr("name"),o=n.attr("id"),u=n.val(),a=n.attr("placeholder");if(s[t])if(s[t].length==0){n.parent().hide().find(".chzn-container").remove();n.replaceWith('<input type="hidden" class="hidden" name="'+i+'" id="'+o+'" value="" placeholder="'+a+'" />');e("body").trigger("country_to_state_changed",[t,e(this).closest("div")])}else{var f="",l=s[t];for(var c in l)f=f+'<option value="'+c+'">'+l[c]+"</option>";n.parent().show();if(n.is("input")){n.replaceWith('<select name="'+i+'" id="'+o+'" class="state_select" placeholder="'+a+'"></select>');n=e(this).closest("div").find("#billing_state, #shipping_state, #calc_shipping_state")}n.html('<option value="">'+woocommerce_params.i18n_select_state_text+"</option>"+f);n.val(u);e("body").trigger("country_to_state_changed",[t,e(this).closest("div")])}else if(n.is("select")){r.show().find(".chzn-container").remove();n.replaceWith('<input type="text" class="input-text" name="'+i+'" id="'+o+'" placeholder="'+a+'" />');e("body").trigger("country_to_state_changed",[t,e(this).closest("div")])}else if(n.is(".hidden")){r.show().find(".chzn-container").remove();n.replaceWith('<input type="text" class="input-text" name="'+i+'" id="'+o+'" placeholder="'+a+'" />');e("body").trigger("country_to_state_changed",[t,e(this).closest("div")])}e("body").trigger("country_to_state_changing",[t,e(this).closest("div")])})});
jQuery(document).ready(function(e){e("select.orderby").change(function(){e(this).closest("form").submit()});e("div.quantity:not(.buttons_added), td.quantity:not(.buttons_added)").addClass("buttons_added").append('<input type="button" value="+" class="plus" />').prepend('<input type="button" value="-" class="minus" />');e("input.qty:not(.product-quantity input.qty)").each(function(){var t=parseFloat(e(this).attr("min"));t&&t>0&&parseFloat(e(this).val())<t&&e(this).val(t)});e(document).on("click",".plus, .minus",function(){var t=e(this).closest(".quantity").find(".qty"),n=parseFloat(t.val()),r=parseFloat(t.attr("max")),i=parseFloat(t.attr("min")),s=t.attr("step");if(!n||n==""||n=="NaN")n=0;if(r==""||r=="NaN")r="";if(i==""||i=="NaN")i=0;if(s=="any"||s==""||s==undefined||parseFloat(s)=="NaN")s=1;e(this).is(".plus")?r&&(r==n||n>r)?t.val(r):t.val(n+parseFloat(s)):i&&(i==n||n<i)?t.val(i):n>0&&t.val(n-parseFloat(s));t.trigger("change")});var t=woocommerce_params.countries.replace(/&quot;/g,'"'),n=e.parseJSON(t);e("select.country_to_state").change(function(){var t=e(this).val(),r=e(this).closest("div").find("#billing_state, #shipping_state, #calc_shipping_state"),i=r.parent(),s=r.attr("name"),o=r.attr("id"),u=r.val(),a=r.attr("placeholder");if(n[t])if(n[t].length==0){r.parent().hide().find(".chzn-container").remove();r.replaceWith('<input type="hidden" class="hidden" name="'+s+'" id="'+o+'" value="" placeholder="'+a+'" />');e("body").trigger("country_to_state_changed",[t,e(this).closest("div")])}else{var f="",l=n[t];for(var c in l)f=f+'<option value="'+c+'">'+l[c]+"</option>";r.parent().show();if(r.is("input")){r.replaceWith('<select name="'+s+'" id="'+o+'" class="state_select" placeholder="'+a+'"></select>');r=e(this).closest("div").find("#billing_state, #shipping_state, #calc_shipping_state")}r.html('<option value="">'+woocommerce_params.i18n_select_state_text+"</option>"+f);r.val(u);e("body").trigger("country_to_state_changed",[t,e(this).closest("div")])}else if(r.is("select")){i.show().find(".chzn-container").remove();r.replaceWith('<input type="text" class="input-text" name="'+s+'" id="'+o+'" placeholder="'+a+'" />');e("body").trigger("country_to_state_changed",[t,e(this).closest("div")])}else if(r.is(".hidden")){i.show().find(".chzn-container").remove();r.replaceWith('<input type="text" class="input-text" name="'+s+'" id="'+o+'" placeholder="'+a+'" />');e("body").trigger("country_to_state_changed",[t,e(this).closest("div")])}e("body").trigger("country_to_state_changing",[t,e(this).closest("div")])})});

View File

@ -1159,7 +1159,8 @@ class Woocommerce {
wp_enqueue_script( 'wc-single-product' );
// Global frontend scripts
wp_enqueue_script( 'woocommerce', $frontend_script_path . 'woocommerce' . $suffix . '.js', array( 'jquery', 'jquery-cookie', 'jquery-blockui' ), $this->version, true );
wp_enqueue_script( 'woocommerce', $frontend_script_path . 'woocommerce' . $suffix . '.js', array( 'jquery', 'jquery-blockui' ), $this->version, true );
wp_enqueue_script( 'wc-cart-fragments', $frontend_script_path . 'cart-fragments' . $suffix . '.js', array( 'jquery', 'jquery-cookie' ), $this->version, true );
wp_enqueue_script( 'jquery-placeholder' );
// Variables for JS scripts