woocommerce/assets/js/frontend/woocommerce.js

189 lines
5.7 KiB
JavaScript
Raw Normal View History

jQuery(document).ready(function($) {
/** Cart Handling */
$supports_html5_storage = ( 'localStorage' in window && window['localStorage'] !== null );
$fragment_refresh = {
url: woocommerce_params.ajax_url,
type: 'POST',
data: { action: 'woocommerce_get_refreshed_fragments' },
success: function( data ) {
2013-01-28 12:02:21 +00:00
if ( data && data.fragments ) {
$.each( data.fragments, function( key, value ) {
$(key).replaceWith(value);
});
if ( $supports_html5_storage ) {
localStorage.setItem( "wc_fragments", JSON.stringify( data.fragments ) );
localStorage.setItem( "wc_cart_hash", data.cart_hash );
}
}
}
};
if ( $supports_html5_storage ) {
$('body').bind( 'added_to_cart', function( event, fragments, cart_hash ) {
localStorage.setItem( "wc_fragments", JSON.stringify( fragments ) );
localStorage.setItem( "wc_cart_hash", cart_hash );
});
2013-01-28 12:02:21 +00:00
try {
var wc_fragments = $.parseJSON( localStorage.getItem( "wc_fragments" ) );
var cart_hash = localStorage.getItem( "wc_cart_hash" );
2013-01-28 12:02:21 +00:00
if ( wc_fragments && wc_fragments['div.widget_shopping_cart_content'] && cart_hash == $.cookie( "woocommerce_cart_hash" ) ) {
2013-01-28 12:02:21 +00:00
$.each( wc_fragments, function( key, value ) {
$(key).replaceWith(value);
});
} else {
throw "No fragment";
}
2013-01-28 12:02:21 +00:00
} catch(err) {
$.ajax( $fragment_refresh );
}
} else {
$.ajax( $fragment_refresh );
}
// Orderby
$('select.orderby').change(function(){
$(this).closest('form').submit();
});
2012-12-06 15:44:22 +00:00
// Quantity buttons
$("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" />');
2012-12-06 15:44:22 +00:00
// Target quantity inputs on product pages
$("input.qty:not(.product-quantity input.qty)").each(function(){
2012-12-06 15:44:22 +00:00
var min = parseFloat( $(this).attr('min') );
2012-12-06 15:44:22 +00:00
if ( min && min > 0 && parseFloat( $(this).val() ) < min ) {
$(this).val( min );
}
2012-12-06 15:44:22 +00:00
});
2012-12-06 15:44:22 +00:00
2012-12-28 13:02:12 +00:00
$(document).on( 'click', '.plus, .minus', function() {
2012-12-06 15:44:22 +00:00
// Get values
var $qty = $(this).closest('.quantity').find(".qty");
var currentVal = parseFloat( $qty.val() );
var max = parseFloat( $qty.attr('max') );
var min = parseFloat( $qty.attr('min') );
var step = $qty.attr('step');
2012-12-06 15:44:22 +00:00
// Format values
if ( ! currentVal || currentVal == "" || currentVal == "NaN" ) currentVal = 0;
if ( max == "" || max == "NaN" ) max = '';
if ( min == "" || min == "NaN" ) min = 0;
2012-12-06 15:19:48 +00:00
if ( step == 'any' || step == "" || step == undefined || parseFloat( step ) == "NaN" ) step = 1;
2012-12-06 15:44:22 +00:00
// Change the value
if ( $(this).is('.plus') ) {
2012-12-06 15:44:22 +00:00
if ( max && ( max == currentVal || currentVal > max ) ) {
2012-12-06 15:44:22 +00:00
$qty.val( max );
} else {
2012-12-06 15:44:22 +00:00
$qty.val( currentVal + parseFloat( step ) );
}
2012-12-06 15:44:22 +00:00
} else {
2012-12-06 15:44:22 +00:00
if ( min && ( min==currentVal || currentVal < min ) ) {
2012-12-06 15:44:22 +00:00
$qty.val( min );
} else if ( currentVal > 0 ) {
$qty.val( currentVal - parseFloat( step ) );
}
2012-12-06 15:44:22 +00:00
}
2012-12-06 15:44:22 +00:00
// Trigger change event
$qty.trigger('change');
});
/* State/Country select boxes */
var states_json = woocommerce_params.countries.replace(/&quot;/g, '"');
2012-12-06 15:44:22 +00:00
var states = $.parseJSON( states_json );
$('select.country_to_state').change(function(){
2012-12-06 15:44:22 +00:00
var country = $(this).val();
2012-12-06 15:44:22 +00:00
var $statebox = $(this).closest('div').find('#billing_state, #shipping_state, #calc_shipping_state');
var $parent = $statebox.parent();
var input_name = $statebox.attr('name');
var input_id = $statebox.attr('id');
var value = $statebox.val();
var placeholder = $statebox.attr('placeholder');
2012-12-06 15:44:22 +00:00
if (states[country]) {
if (states[country].length == 0) {
2012-12-06 15:44:22 +00:00
// 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 + '" />');
2012-12-06 15:44:22 +00:00
$('body').trigger('country_to_state_changed', [country, $(this).closest('div')]);
//});
2012-12-06 15:44:22 +00:00
} else {
2012-12-06 15:44:22 +00:00
//$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');
}
2012-12-10 13:11:05 +00:00
$statebox.html( '<option value="">' + woocommerce_params.i18n_select_state_text + '</option>' + options);
2012-12-06 15:44:22 +00:00
$statebox.val(value);
2012-12-06 15:44:22 +00:00
$('body').trigger('country_to_state_changed', [country, $(this).closest('div')]);
//});
2012-12-06 15:44:22 +00:00
}
} else {
if ($statebox.is('select')) {
2012-12-06 15:44:22 +00:00
//$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 + '" />');
2012-12-06 15:44:22 +00:00
$('body').trigger('country_to_state_changed', [country, $(this).closest('div')]);
//});
2012-12-06 15:44:22 +00:00
} else if ($statebox.is('.hidden')) {
2012-12-06 15:44:22 +00:00
$parent.show().find('.chzn-container').remove();
$statebox.replaceWith('<input type="text" class="input-text" name="' + input_name + '" id="' + input_id + '" placeholder="' + placeholder + '" />');
2012-12-06 15:44:22 +00:00
$('body').trigger('country_to_state_changed', [country, $(this).closest('div')]);
//$parent.delay(200).fadeIn(500);
2012-12-06 15:44:22 +00:00
}
}
2012-12-06 15:44:22 +00:00
$('body')
//.delay(200)
.trigger('country_to_state_changing', [country, $(this).closest('div')]);
2012-12-06 15:44:22 +00:00
});
});