59 changes: 14 additions & 45 deletions assets/js/flexslider/jquery.flexslider.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* jQuery FlexSlider v2.6.1
* jQuery FlexSlider v2.6.3
* Copyright 2012 WooThemes
* Contributing Author: Tyler Smith
*/
Expand All @@ -13,11 +13,6 @@
var slider = $(el);

// making variables public

//if rtl value was not passed and html is in rtl..enable it by default.
if(typeof options.rtl=='undefined' && $('html').attr('dir')=='rtl'){
options.rtl=true;
}
slider.vars = $.extend({}, $.flexslider.defaults, options);

var namespace = slider.vars.namespace,
Expand Down Expand Up @@ -54,7 +49,7 @@
slider.syncExists = $(slider.vars.sync).length > 0;
// SLIDE:
if (slider.vars.animation === "slide") { slider.vars.animation = "swing"; }
slider.prop = (vertical) ? "top" : ( slider.vars.rtl ? "marginRight" : "marginLeft" );
slider.prop = (vertical) ? "top" : "marginLeft";
slider.args = {};
// SLIDESHOW:
slider.manualPause = false;
Expand Down Expand Up @@ -106,14 +101,8 @@
$(document).bind('keyup', function(event) {
var keycode = event.keyCode;
if (!slider.animating && (keycode === 39 || keycode === 37)) {
var target = (slider.vars.rtl?
((keycode === 37) ? slider.getTarget('next') :
(keycode === 39) ? slider.getTarget('prev') : false)
:
((keycode === 39) ? slider.getTarget('next') :
(keycode === 37) ? slider.getTarget('prev') : false)
)
;
var target = (keycode === 39) ? slider.getTarget('next') :
(keycode === 37) ? slider.getTarget('prev') : false;
slider.flexAnimate(target, slider.vars.pauseOnAction);
}
});
Expand Down Expand Up @@ -176,15 +165,8 @@
e.preventDefault();
var $slide = $(this),
target = $slide.index();
var posFromX;
if(slider.vars.rtl){
posFromX = -1*($slide.offset().right - $(slider).scrollLeft()); // Find position of slide relative to right of slider container
}
else
{
posFromX = $slide.offset().left - $(slider).scrollLeft(); // Find position of slide relative to left of slider container
}
if( posFromX <= 0 && $slide.hasClass( namespace + 'active-slide' ) ) {
var posFromLeft = $slide.offset().left - $(slider).scrollLeft(); // Find position of slide relative to left of slider container
if( posFromLeft <= 0 && $slide.hasClass( namespace + 'active-slide' ) ) {
slider.flexAnimate(slider.getTarget("prev"), true);
} else if (!$(slider.vars.asNavFor).data('flexslider').animating && !$slide.hasClass(namespace + "active-slide")) {
slider.direction = (slider.currentItem < target) ? "next" : "prev";
Expand Down Expand Up @@ -446,6 +428,7 @@
(reverse) ? (slider.last - slider.currentSlide + slider.cloneOffset) * cwidth : (slider.currentSlide + slider.cloneOffset) * cwidth;
startX = (vertical) ? localY : localX;
startY = (vertical) ? localX : localY;

el.addEventListener('touchmove', onTouchMove, false);
el.addEventListener('touchend', onTouchEnd, false);
}
Expand All @@ -457,8 +440,9 @@
localX = e.touches[0].pageX;
localY = e.touches[0].pageY;

dx = (vertical) ? startX - localY : (slider.vars.rtl?-1:1)*(startX - localX);
dx = (vertical) ? startX - localY : startX - localX;
scrolling = (vertical) ? (Math.abs(dx) < Math.abs(localX - startY)) : (Math.abs(dx) < Math.abs(localY - startY));

var fxms = 500;

if ( ! scrolling || Number( new Date() ) - startT > fxms ) {
Expand Down Expand Up @@ -535,7 +519,7 @@

//Accumulate translations.
accDx = accDx + ((vertical) ? transY : transX);
dx = (slider.vars.rtl?-1:1)*accDx;
dx = accDx;
scrolling = (vertical) ? (Math.abs(accDx) < Math.abs(-transX)) : (Math.abs(accDx) < Math.abs(-transY));

if(e.detail === e.MSGESTURE_FLAG_INERTIA){
Expand Down Expand Up @@ -792,12 +776,8 @@
}
} else { // FADE:
if (!touch) {
//slider.slides.eq(slider.currentSlide).fadeOut(slider.vars.animationSpeed, slider.vars.easing);
//slider.slides.eq(target).fadeIn(slider.vars.animationSpeed, slider.vars.easing, slider.wrapup);

slider.slides.eq(slider.currentSlide).css({"zIndex": 1}).animate({"opacity": 0}, slider.vars.animationSpeed, slider.vars.easing);
slider.slides.eq(target).css({"zIndex": 2}).animate({"opacity": 1}, slider.vars.animationSpeed, slider.vars.easing, slider.wrapup);

} else {
slider.slides.eq(slider.currentSlide).css({ "opacity": 0, "zIndex": 1 });
slider.slides.eq(target).css({ "opacity": 1, "zIndex": 2 });
Expand Down Expand Up @@ -898,7 +878,7 @@
}());

if (slider.transitions) {
target = (vertical) ? "translate3d(0," + target + ",0)" : "translate3d(" + ((slider.vars.rtl?-1:1)*parseInt(target)+'px') + ",0,0)";
target = (vertical) ? "translate3d(0," + target + ",0)" : "translate3d(" + target + ",0,0)";
dur = (dur !== undefined) ? (dur/1000) + "s" : "0s";
slider.container.css("-" + slider.pfx + "-transition-duration", dur);
slider.container.css("transition-duration", dur);
Expand Down Expand Up @@ -953,23 +933,13 @@
slider.setProps(sliderOffset * slider.computedW, "init");
setTimeout(function(){
slider.doMath();
if(slider.vars.rtl){
slider.newSlides.css({"width": slider.computedW, "marginLeft" : slider.computedM, "float": "right", "display": "block"});
}
else{
slider.newSlides.css({"width": slider.computedW, "marginRight" : slider.computedM, "float": "left", "display": "block"});
}
slider.newSlides.css({"width": slider.computedW, "marginRight" : slider.computedM, "float": "left", "display": "block"});
// SMOOTH HEIGHT:
if (slider.vars.smoothHeight) { methods.smoothHeight(); }
}, (type === "init") ? 100 : 0);
}
} else { // FADE:
if(slider.vars.rtl){
slider.slides.css({"width": "100%", "float": 'right', "marginLeft": "-100%", "position": "relative"});
}
else{
slider.slides.css({"width": "100%", "float": 'left', "marginRight": "-100%", "position": "relative"});
}
slider.slides.css({"width": "100%", "float": "left", "marginRight": "-100%", "position": "relative"});
if (type === "init") {
if (!touch) {
//slider.slides.eq(slider.currentSlide).fadeIn(slider.vars.animationSpeed, slider.vars.easing);
Expand Down Expand Up @@ -1184,8 +1154,7 @@
end: function(){}, //Callback: function(slider) - Fires when the slider reaches the last slide (asynchronous)
added: function(){}, //{NEW} Callback: function(slider) - Fires after a slide is added
removed: function(){}, //{NEW} Callback: function(slider) - Fires after a slide is removed
init: function() {}, //{NEW} Callback: function(slider) - Fires after the slider is initially setup
rtl: false //{NEW} Boolean: Whether or not to enable RTL mode
init: function() {} //{NEW} Callback: function(slider) - Fires after the slider is initially setup
};

//FlexSlider: Plugin Function
Expand Down
2 changes: 1 addition & 1 deletion assets/js/flexslider/jquery.flexslider.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion assets/js/frontend/add-payment-method.min.js
17 changes: 9 additions & 8 deletions assets/js/frontend/add-to-cart-variation.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
/*global wc_add_to_cart_variation_params, wc_cart_fragments_params */
/*global wc_add_to_cart_variation_params */
;(function ( $, window, document, undefined ) {
/**
* VariationForm class which handles variation forms and attributes.
*/
var VariationForm = function( $form ) {
this.$form = $form;
this.$attributeFields = $form.find( '.variations select' );
this.$singleVariation = $form.find( '.single_variation' ),
this.$singleVariation = $form.find( '.single_variation' );
this.$singleVariationWrap = $form.find( '.single_variation_wrap' );
this.$resetVariations = $form.find( '.reset_variations' );
this.$product = $form.closest( '.product' );
Expand Down Expand Up @@ -37,9 +37,11 @@
$form.on( 'check_variations.wc-variation-form', { variationForm: this }, this.onFindVariation );
$form.on( 'update_variation_values.wc-variation-form', { variationForm: this }, this.onUpdateAttributes );

// Check variations once init.
$form.trigger( 'check_variations' );
$form.trigger( 'wc_variation_form' );
// Init after gallery.
setTimeout( function() {
$form.trigger( 'check_variations' );
$form.trigger( 'wc_variation_form' );
}, 100 );
};

/**
Expand Down Expand Up @@ -135,7 +137,7 @@
currentAttributes.product_id = parseInt( form.$form.data( 'product_id' ), 10 );
currentAttributes.custom_data = form.$form.data( 'custom_data' );
form.xhr = $.ajax( {
url: wc_cart_fragments_params.wc_ajax_url.toString().replace( '%%endpoint%%', 'get_variation' ),
url: wc_add_to_cart_variation_params.wc_ajax_url.toString().replace( '%%endpoint%%', 'get_variation' ),
type: 'POST',
data: currentAttributes,
success: function( variation ) {
Expand Down Expand Up @@ -553,8 +555,7 @@

if ( variation && variation.image && variation.image.src && variation.image.src.length > 1 ) {
if ( $( '.flex-control-nav li img[src="' + variation.image.thumb_src + '"]' ).length > 0 ) {
$gallery_img = $( '.flex-control-nav li img[src="' + variation.image.thumb_src + '"]' );
$gallery_img.trigger( 'click' );
$( '.flex-control-nav li img[src="' + variation.image.thumb_src + '"]' ).trigger( 'click' );
$form.attr( 'current-image', variation.image_id );
return;
} else {
Expand Down
2 changes: 1 addition & 1 deletion assets/js/frontend/add-to-cart-variation.min.js

Large diffs are not rendered by default.

31 changes: 30 additions & 1 deletion assets/js/frontend/add-to-cart.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,10 @@ jQuery( function( $ ) {
var AddToCartHandler = function() {
$( document )
.on( 'click', '.add_to_cart_button', this.onAddToCart )
.on( 'click', '.remove_from_cart_button', this.onRemoveFromCart )
.on( 'added_to_cart', this.updateButton )
.on( 'added_to_cart', this.updateCartPage )
.on( 'added_to_cart', this.updateFragments );
.on( 'added_to_cart removed_from_cart', this.updateFragments );
};

/**
Expand Down Expand Up @@ -64,6 +65,34 @@ jQuery( function( $ ) {
}
};

/**
* Update fragments after remove from cart event in mini-cart.
*/
AddToCartHandler.prototype.onRemoveFromCart = function( e ) {
var $thisbutton = $( this ),
$row = $thisbutton.closest( '.woocommerce-mini-cart-item' );

e.preventDefault();

$row.block({
message: null,
overlayCSS: {
opacity: 0.6
}
});

$.post( wc_add_to_cart_params.wc_ajax_url.toString().replace( '%%endpoint%%', 'remove_from_cart' ), { cart_item_key : $thisbutton.data( 'cart_item_key' ) }, function( response ) {
if ( ! response || ! response.fragments ) {
window.location = $thisbutton.attr( 'href' );
return;
}
$( document.body ).trigger( 'removed_from_cart', [ response.fragments, response.cart_hash ] );
}).fail( function() {
window.location = $thisbutton.attr( 'href' );
return;
});
};

/**
* Update cart page elements after add to cart events.
*/
Expand Down
2 changes: 1 addition & 1 deletion assets/js/frontend/add-to-cart.min.js
231 changes: 123 additions & 108 deletions assets/js/frontend/address-i18n.js
Original file line number Diff line number Diff line change
@@ -1,149 +1,164 @@
/*global wc_address_i18n_params */
jQuery( function( $ ) {

// wc_address_i18n_params is required to continue, ensure the object exists
if ( typeof wc_address_i18n_params === 'undefined' ) {
return false;
}

var locale_json = wc_address_i18n_params.locale.replace( /&quot;/g, '"' ),
locale = $.parseJSON( locale_json );

function field_is_required( field, is_required ) {
if ( is_required ) {
field.find( 'label' ).append( ' <abbr class="required" title="' + wc_address_i18n_params.i18n_required_text + '">*</abbr>' );
field.addClass( 'validate-required' );
} else {
field.find( 'label abbr' ).remove();
field.removeClass( 'validate-required' );
// wc_address_i18n_params is required to continue, ensure the object exists
if ( typeof wc_address_i18n_params === 'undefined' ) {
return false;
}
}

$( document.body )
var locale_json = wc_address_i18n_params.locale.replace( /&quot;/g, '"' ),
locale = $.parseJSON( locale_json );

// Handle locale
.bind( 'country_to_state_changing', function( event, country, wrapper ) {

var thisform = wrapper, thislocale;

if ( typeof locale[ country ] !== 'undefined' ) {
thislocale = locale[ country ];
function field_is_required( field, is_required ) {
if ( is_required ) {
field.find( 'label' ).append( ' <abbr class="required" title="' + wc_address_i18n_params.i18n_required_text + '">*</abbr>' );
field.addClass( 'validate-required' );
} else {
thislocale = locale['default'];
field.find( 'label abbr' ).remove();
field.removeClass( 'validate-required' );
}
}

var $postcodefield = thisform.find( '#billing_postcode_field, #shipping_postcode_field' ),
$cityfield = thisform.find( '#billing_city_field, #shipping_city_field' ),
$statefield = thisform.find( '#billing_state_field, #shipping_state_field' );

if ( ! $postcodefield.attr( 'data-o_class' ) ) {
$postcodefield.attr( 'data-o_class', $postcodefield.attr( 'class' ) );
$cityfield.attr( 'data-o_class', $cityfield.attr( 'class' ) );
$statefield.attr( 'data-o_class', $statefield.attr( 'class' ) );
}
$( document.body )

var locale_fields = $.parseJSON( wc_address_i18n_params.locale_fields );
// Handle locale
.bind( 'country_to_state_changing', function( event, country, wrapper ) {

$.each( locale_fields, function( key, value ) {
var thisform = wrapper, thislocale;

var field = thisform.find( value );
if ( typeof locale[ country ] !== 'undefined' ) {
thislocale = locale[ country ];
} else {
thislocale = locale['default'];
}

if ( thislocale[ key ] ) {
var $postcodefield = thisform.find( '#billing_postcode_field, #shipping_postcode_field' ),
$cityfield = thisform.find( '#billing_city_field, #shipping_city_field' ),
$statefield = thisform.find( '#billing_state_field, #shipping_state_field' );

if ( thislocale[ key ].label ) {
field.find( 'label' ).html( thislocale[ key ].label );
}
if ( ! $postcodefield.attr( 'data-o_class' ) ) {
$postcodefield.attr( 'data-o_class', $postcodefield.attr( 'class' ) );
$cityfield.attr( 'data-o_class', $cityfield.attr( 'class' ) );
$statefield.attr( 'data-o_class', $statefield.attr( 'class' ) );
}

if ( thislocale[ key ].placeholder ) {
field.find( 'input' ).attr( 'placeholder', thislocale[ key ].placeholder );
}
var locale_fields = $.parseJSON( wc_address_i18n_params.locale_fields );

field_is_required( field, false );
$.each( locale_fields, function( key, value ) {

if ( typeof thislocale[ key ].required === 'undefined' && locale['default'][ key ].required === true ) {
field_is_required( field, true );
} else if ( thislocale[ key ].required === true ) {
field_is_required( field, true );
}
var field = thisform.find( value );

if ( key !== 'state' ) {
if ( thislocale[ key ].hidden === true ) {
field.hide().find( 'input' ).val( '' );
} else {
field.show();
// Set to defaults.
if ( locale['default'][ key ] ) {
if ( 'state' !== key ) {
if ( typeof locale['default'][ key ].hidden === 'undefined' || locale['default'][ key ].hidden === false ) {
field.show();
} else if ( locale['default'][ key ].hidden === true ) {
field.hide().find( 'input' ).val( '' );
}
}
}

if ( thislocale[ key ].priority ) {
field.data( 'priority', thislocale[ key ].priority );
} else if ( locale['default'][ key ].priority ) {
field.data( 'priority', locale['default'][ key ].priority );
}
if ( 'postcode' === key || 'city' === key || 'state' === key ) {
if ( locale['default'][ key ].label ) {
field.find( 'label' ).html( locale['default'][ key ].label );
}

if ( locale['default'][ key ].placeholder ) {
field.find( 'input' ).attr( 'placeholder', locale['default'][ key ].placeholder );

} else if ( locale['default'][ key ] ) {
// Use the label as a placeholder if there is no label element and no placeholder.
} else if ( locale['default'][ key ].label && ! field.find( 'label' ).length ) {
field.find( 'input' ).attr( 'placeholder', locale['default'][ key ].label );
field.find( '.select2-selection__placeholder' ).text( locale['default'][ key ].label );
}

if ( 'state' !== key ) {
if ( typeof locale['default'][ key ].hidden === 'undefined' || locale['default'][ key ].hidden === false ) {
field.show();
} else if ( locale['default'][ key ].hidden === true ) {
field.hide().find( 'input' ).val( '' );
}
}

if ( 'postcode' === key || 'city' === key || 'state' === key ) {
if ( locale['default'][ key ].label ) {
field.find( 'label' ).html( locale['default'][ key ].label );
if ( locale['default'][ key ].required === true ) {
if ( field.find( 'label abbr' ).length === 0 ) {
field_is_required( field, true );
}
}

if ( locale['default'][ key ].placeholder ) {
field.find( 'input' ).attr( 'placeholder', locale['default'][ key ].placeholder );
if ( locale['default'][ key ].priority ) {
field.data( 'priority', locale['default'][ key ].priority );
}
}

if ( locale['default'][ key ].required === true ) {
if ( field.find( 'label abbr' ).length === 0 ) {
// Set to locale.
if ( thislocale[ key ] ) {

if ( thislocale[ key ].label ) {
field.find( 'label' ).html( thislocale[ key ].label );
}

if ( thislocale[ key ].placeholder ) {
field.find( 'input' ).attr( 'placeholder', thislocale[ key ].placeholder );
field.find( '.select2-selection__placeholder' ).text( thislocale[ key ].placeholder );

// Use the i18n label as a placeholder if there is no label element and no i18n placeholder.
} else if ( thislocale[ key ].label && ! field.find( 'label' ).length ) {
field.find( 'input' ).attr( 'placeholder', thislocale[ key ].label );
field.find( '.select2-selection__placeholder' ).text( thislocale[ key ].label );
}

field_is_required( field, false );

if ( typeof thislocale[ key ].required === 'undefined' && locale['default'][ key ].required === true ) {
field_is_required( field, true );
} else if ( thislocale[ key ].required === true ) {
field_is_required( field, true );
}
}

if ( locale['default'][ key ].priority ) {
field.data( 'priority', locale['default'][ key ].priority );
if ( key !== 'state' ) {
if ( thislocale[ key ].hidden === true ) {
field.hide().find( 'input' ).val( '' );
} else {
field.show();
}
}

if ( thislocale[ key ].priority ) {
field.data( 'priority', thislocale[ key ].priority );
} else if ( locale['default'][ key ].priority ) {
field.data( 'priority', locale['default'][ key ].priority );
}

}
}

});
});

var fieldsets = $('.woocommerce-billing-fields__field-wrapper, .woocommerce-shipping-fields__field-wrapper, .woocommerce-address-fields__field-wrapper, .woocommerce-additional-fields__field-wrapper .woocommerce-account-fields');
var fieldsets = $('.woocommerce-billing-fields__field-wrapper, .woocommerce-shipping-fields__field-wrapper, .woocommerce-address-fields__field-wrapper, .woocommerce-additional-fields__field-wrapper .woocommerce-account-fields');

fieldsets.each( function( index, fieldset ) {
var rows = $( fieldset ).find( '.form-row' );
var wrapper = rows.first().parent();
fieldsets.each( function( index, fieldset ) {
var rows = $( fieldset ).find( '.form-row' );
var wrapper = rows.first().parent();

// Before sorting, ensure all fields have a priority for bW compatibility.
var last_priority = 0;
// Before sorting, ensure all fields have a priority for bW compatibility.
var last_priority = 0;

rows.each( function() {
if ( ! $( this ).data( 'priority' ) ) {
$( this ).data( 'priority', last_priority + 1 );
}
last_priority = $( this ).data( 'priority' );
} );
rows.each( function() {
if ( ! $( this ).data( 'priority' ) ) {
$( this ).data( 'priority', last_priority + 1 );
}
last_priority = $( this ).data( 'priority' );
} );

// Sort the fields.
rows.sort( function( a, b ) {
var asort = $( a ).data( 'priority' ),
bsort = $( b ).data( 'priority' );
// Sort the fields.
rows.sort( function( a, b ) {
var asort = $( a ).data( 'priority' ),
bsort = $( b ).data( 'priority' );

if ( asort > bsort ) {
return 1;
}
if ( asort < bsort ) {
return -1;
}
return 0;
});
if ( asort > bsort ) {
return 1;
}
if ( asort < bsort ) {
return -1;
}
return 0;
});

rows.detach().appendTo( wrapper );
} );
});
});
rows.detach().appendTo( wrapper );
} );
});
});
2 changes: 1 addition & 1 deletion assets/js/frontend/address-i18n.min.js
2 changes: 1 addition & 1 deletion assets/js/frontend/cart-fragments.min.js
40 changes: 38 additions & 2 deletions assets/js/frontend/cart.js
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,7 @@ jQuery( function( $ ) {
*/
toggle_shipping: function() {
$( '.shipping-calculator-form' ).slideToggle( 'slow' );
$( document.body ).trigger( 'country_to_state_changed' ); // Trigger select2 to load.
return false;
},

Expand Down Expand Up @@ -266,11 +267,12 @@ jQuery( function( $ ) {
this.remove_coupon_clicked = this.remove_coupon_clicked.bind( this );
this.quantity_update = this.quantity_update.bind( this );
this.item_remove_clicked = this.item_remove_clicked.bind( this );
this.item_restore_clicked = this.item_restore_clicked.bind( this );
this.update_cart = this.update_cart.bind( this );

$( document ).on(
'wc_update_cart',
this.update_cart );
function() { cart.update_cart.apply( cart, [].slice.call( arguments, 1 ) ); } );
$( document ).on(
'click',
'.woocommerce-cart-form input[type=submit]',
Expand All @@ -291,6 +293,10 @@ jQuery( function( $ ) {
'click',
'.woocommerce-cart-form .product-remove > a',
this.item_remove_clicked );
$( document ).on(
'click',
'.woocommerce-cart .restore-item',
this.item_restore_clicked );
$( document ).on(
'change input',
'.woocommerce-cart-form .cart_item :input',
Expand Down Expand Up @@ -532,7 +538,37 @@ jQuery( function( $ ) {
type: 'GET',
url: $a.attr( 'href' ),
dataType: 'html',
success: update_wc_div,
success: function( response ) {
update_wc_div( response );
},
complete: function() {
unblock( $form );
unblock( $( 'div.cart_totals' ) );
}
} );
},

/**
* Handle when a restore item link is clicked.
*
* @param {Object} evt The JQuery event
*/
item_restore_clicked: function( evt ) {
evt.preventDefault();

var $a = $( evt.currentTarget );
var $form = $( 'form.woocommerce-cart-form' );

block( $form );
block( $( 'div.cart_totals' ) );

$.ajax( {
type: 'GET',
url: $a.attr( 'href' ),
dataType: 'html',
success: function( response ) {
update_wc_div( response );
},
complete: function() {
unblock( $form );
unblock( $( 'div.cart_totals' ) );
Expand Down
2 changes: 1 addition & 1 deletion assets/js/frontend/cart.min.js
51 changes: 32 additions & 19 deletions assets/js/frontend/checkout.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ jQuery( function( $ ) {
this.$checkout_form.on( 'change', 'select.shipping_method, input[name^="shipping_method"], #ship-to-different-address input, .update_totals_on_change select, .update_totals_on_change input[type="radio"], .update_totals_on_change input[type="checkbox"]', this.trigger_update_checkout );
this.$checkout_form.on( 'change', '.address-field select', this.input_changed );
this.$checkout_form.on( 'change', '.address-field input.input-text, .update_totals_on_change input.input-text', this.maybe_input_changed );
this.$checkout_form.on( 'change keydown', '.address-field input.input-text, .update_totals_on_change input.input-text', this.queue_update_checkout );
this.$checkout_form.on( 'keydown', '.address-field input.input-text, .update_totals_on_change input.input-text', this.queue_update_checkout );

// Address fields
this.$checkout_form.on( 'change', '#ship-to-different-address input', this.ship_to_different_address );
Expand Down Expand Up @@ -247,7 +247,17 @@ jQuery( function( $ ) {
s_postcode = postcode,
s_city = city,
s_address = address,
s_address_2 = address_2;
s_address_2 = address_2,
$required_inputs = $( wc_checkout_form.$checkout_form ).find( '.address-field.validate-required:visible' ),
has_full_address = true;

if ( $required_inputs.length ) {
$required_inputs.each( function() {
if ( $( this ).find( ':input' ).val() === '' ) {
has_full_address = false;
}
});
}

if ( $( '#ship-to-different-address' ).find( 'input' ).is( ':checked' ) ) {
s_country = $( '#shipping_country' ).val();
Expand All @@ -259,21 +269,22 @@ jQuery( function( $ ) {
}

var data = {
security: wc_checkout_params.update_order_review_nonce,
payment_method: wc_checkout_form.get_payment_method(),
country: country,
state: state,
postcode: postcode,
city: city,
address: address,
address_2: address_2,
s_country: s_country,
s_state: s_state,
s_postcode: s_postcode,
s_city: s_city,
s_address: s_address,
s_address_2: s_address_2,
post_data: $( 'form.checkout' ).serialize()
security : wc_checkout_params.update_order_review_nonce,
payment_method : wc_checkout_form.get_payment_method(),
country : country,
state : state,
postcode : postcode,
city : city,
address : address,
address_2 : address_2,
s_country : s_country,
s_state : s_state,
s_postcode : s_postcode,
s_city : s_city,
s_address : s_address,
s_address_2 : s_address_2,
has_full_address: has_full_address,
post_data : $( 'form.checkout' ).serialize()
};

if ( false !== args.update_shipping_method ) {
Expand Down Expand Up @@ -616,8 +627,10 @@ jQuery( function( $ ) {
},

toggle_terms: function() {
$( '.woocommerce-terms-and-conditions' ).slideToggle();
return false;
if ( $( '.woocommerce-terms-and-conditions' ).length ) {
$( '.woocommerce-terms-and-conditions' ).slideToggle();
return false;
}
}
};

Expand Down
2 changes: 1 addition & 1 deletion assets/js/frontend/checkout.min.js

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions assets/js/frontend/country-select.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,15 +52,15 @@ jQuery( function( $ ) {
}

// Select2 Enhancement if it exists
if ( $().select2 ) {
if ( $().selectWoo ) {
var wc_country_select_select2 = function() {
$( 'select.country_select:visible, select.state_select:visible' ).each( function() {
var select2_args = $.extend({
placeholderOption: 'first',
width: '100%'
}, getEnhancedSelectFormatString() );

$( this ).select2( select2_args );
$( this ).selectWoo( select2_args );
// Maintain focus after select https://github.com/select2/select2/issues/4384
$( this ).on( 'select2:select', function() {
$( this ).focus();
Expand Down
2 changes: 1 addition & 1 deletion assets/js/frontend/country-select.min.js
2 changes: 1 addition & 1 deletion assets/js/frontend/credit-card-form.min.js
2 changes: 1 addition & 1 deletion assets/js/frontend/geolocation.min.js
2 changes: 1 addition & 1 deletion assets/js/frontend/lost-password.min.js
2 changes: 1 addition & 1 deletion assets/js/frontend/password-strength-meter.min.js
81 changes: 44 additions & 37 deletions assets/js/frontend/price-slider.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,23 +6,6 @@ jQuery( function( $ ) {
return false;
}

// Get markup ready for slider
$( 'input#min_price, input#max_price' ).hide();
$( '.price_slider, .price_label' ).show();

// Price slider uses jquery ui
var min_price = $( '.price_slider_amount #min_price' ).data( 'min' ),
max_price = $( '.price_slider_amount #max_price' ).data( 'max' ),
current_min_price = parseInt( min_price, 10 ),
current_max_price = parseInt( max_price, 10 );

if ( woocommerce_price_slider_params.min_price ) {
current_min_price = parseInt( woocommerce_price_slider_params.min_price, 10 );
}
if ( woocommerce_price_slider_params.max_price ) {
current_max_price = parseInt( woocommerce_price_slider_params.max_price, 10 );
}

$( document.body ).bind( 'price_slider_create price_slider_slide', function( event, min, max ) {

$( '.price_slider_amount span.from' ).html( accounting.formatMoney( min, {
Expand All @@ -44,30 +27,54 @@ jQuery( function( $ ) {
$( document.body ).trigger( 'price_slider_updated', [ min, max ] );
});

$( '.price_slider' ).slider({
range: true,
animate: true,
min: min_price,
max: max_price,
values: [ current_min_price, current_max_price ],
create: function() {
function init_price_filter() {
$( 'input#min_price, input#max_price' ).hide();
$( '.price_slider, .price_label' ).show();

$( '.price_slider_amount #min_price' ).val( current_min_price );
$( '.price_slider_amount #max_price' ).val( current_max_price );
var min_price = $( '.price_slider_amount #min_price' ).data( 'min' ),
max_price = $( '.price_slider_amount #max_price' ).data( 'max' ),
current_min_price = $( '.price_slider_amount #min_price' ).val(),
current_max_price = $( '.price_slider_amount #max_price' ).val();

$( document.body ).trigger( 'price_slider_create', [ current_min_price, current_max_price ] );
},
slide: function( event, ui ) {
$( '.price_slider:not(.ui-slider)' ).slider({
range: true,
animate: true,
min: min_price,
max: max_price,
values: [ current_min_price, current_max_price ],
create: function() {

$( 'input#min_price' ).val( ui.values[0] );
$( 'input#max_price' ).val( ui.values[1] );
$( '.price_slider_amount #min_price' ).val( current_min_price );
$( '.price_slider_amount #max_price' ).val( current_max_price );

$( document.body ).trigger( 'price_slider_slide', [ ui.values[0], ui.values[1] ] );
},
change: function( event, ui ) {
$( document.body ).trigger( 'price_slider_create', [ current_min_price, current_max_price ] );
},
slide: function( event, ui ) {

$( document.body ).trigger( 'price_slider_change', [ ui.values[0], ui.values[1] ] );
}
});
$( 'input#min_price' ).val( ui.values[0] );
$( 'input#max_price' ).val( ui.values[1] );

$( document.body ).trigger( 'price_slider_slide', [ ui.values[0], ui.values[1] ] );
},
change: function( event, ui ) {

$( document.body ).trigger( 'price_slider_change', [ ui.values[0], ui.values[1] ] );
}
});
}

init_price_filter();

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() {
init_price_filter();
} );
}
});
2 changes: 1 addition & 1 deletion assets/js/frontend/price-slider.min.js
42 changes: 35 additions & 7 deletions assets/js/frontend/single-product.js
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ jQuery( function( $ ) {
// Bind functions to this.
this.initFlexslider = this.initFlexslider.bind( this );
this.initZoom = this.initZoom.bind( this );
this.initZoomForTarget = this.initZoomForTarget.bind( this );
this.initPhotoswipe = this.initPhotoswipe.bind( this );
this.onResetSlidePosition = this.onResetSlidePosition.bind( this );
this.getGalleryItems = this.getGalleryItems.bind( this );
Expand All @@ -129,7 +130,8 @@ jQuery( function( $ ) {
* Initialize flexSlider.
*/
ProductGallery.prototype.initFlexslider = function() {
var $target = this.$target;
var $target = this.$target,
gallery = this;

$target.flexslider( {
selector: '.woocommerce-product-gallery__wrapper > .woocommerce-product-gallery__image',
Expand All @@ -140,8 +142,32 @@ jQuery( function( $ ) {
slideshow: wc_single_product_params.flexslider.slideshow,
animationSpeed: wc_single_product_params.flexslider.animationSpeed,
animationLoop: wc_single_product_params.flexslider.animationLoop, // Breaks photoswipe pagination if true.
allowOneSlide: wc_single_product_params.flexslider.allowOneSlide,
start: function() {
$target.css( 'opacity', 1 );
},
after: function( slider ) {
gallery.initZoomForTarget( gallery.$images.eq( slider.currentSlide ) );
}
} );

// Trigger resize after main image loads to ensure correct gallery size.
$( '.woocommerce-product-gallery__wrapper .woocommerce-product-gallery__image:eq(0) .wp-post-image' ).one( 'load', function() {
var $image = $( this );

if ( $image ) {
setTimeout( function() {
var setHeight = $image.closest( '.woocommerce-product-gallery__image' ).height();
var $viewport = $image.closest( '.flex-viewport' );

if ( setHeight && $viewport ) {
$viewport.height( setHeight );
}
}, 100 );
}
} ).each( function() {
if ( this.complete ) {
$( this ).load();
}
} );
};
Expand All @@ -150,13 +176,15 @@ jQuery( function( $ ) {
* Init zoom.
*/
ProductGallery.prototype.initZoom = function() {
var zoomTarget = this.$images,
galleryWidth = this.$target.width(),
zoomEnabled = false;
this.initZoomForTarget( this.$images.first() );
};

if ( ! this.flexslider_enabled ) {
zoomTarget = zoomTarget.first();
}
/**
* Init zoom.
*/
ProductGallery.prototype.initZoomForTarget = function( zoomTarget ) {
var galleryWidth = this.$target.width(),
zoomEnabled = false;

$( zoomTarget ).each( function( index, target ) {
var image = $( target ).find( 'img' );
Expand Down
2 changes: 1 addition & 1 deletion assets/js/frontend/single-product.min.js
2 changes: 1 addition & 1 deletion assets/js/frontend/tokenization-form.min.js
2 changes: 1 addition & 1 deletion assets/js/frontend/woocommerce.min.js
Loading