2015-03-05 17:55:41 +00:00
|
|
|
/*global wc_country_select_params */
|
2014-03-19 03:51:37 +00:00
|
|
|
jQuery( function( $ ) {
|
2013-06-11 12:31:41 +00:00
|
|
|
|
2013-12-04 19:15:24 +00:00
|
|
|
// wc_country_select_params is required to continue, ensure the object exists
|
2014-03-19 03:51:37 +00:00
|
|
|
if ( typeof wc_country_select_params === 'undefined' ) {
|
2013-12-04 19:15:24 +00:00
|
|
|
return false;
|
2014-03-19 03:51:37 +00:00
|
|
|
}
|
2013-12-04 19:15:24 +00:00
|
|
|
|
2015-01-19 19:31:22 +00:00
|
|
|
function getEnhancedSelectFormatString() {
|
2017-03-17 11:25:53 +00:00
|
|
|
return {
|
|
|
|
'language': {
|
|
|
|
errorLoading: function() {
|
2017-04-04 10:13:43 +00:00
|
|
|
// Workaround for https://github.com/select2/select2/issues/4355 instead of i18n_ajax_error.
|
|
|
|
return wc_country_select_params.i18n_searching;
|
2017-03-17 11:25:53 +00:00
|
|
|
},
|
|
|
|
inputTooLong: function( args ) {
|
|
|
|
var overChars = args.input.length - args.maximum;
|
2015-01-19 19:31:22 +00:00
|
|
|
|
2017-03-17 11:25:53 +00:00
|
|
|
if ( 1 === overChars ) {
|
|
|
|
return wc_country_select_params.i18n_input_too_long_1;
|
|
|
|
}
|
2015-01-19 19:31:22 +00:00
|
|
|
|
2017-03-17 11:25:53 +00:00
|
|
|
return wc_country_select_params.i18n_input_too_long_n.replace( '%qty%', overChars );
|
|
|
|
},
|
|
|
|
inputTooShort: function( args ) {
|
|
|
|
var remainingChars = args.minimum - args.input.length;
|
2015-01-19 19:31:22 +00:00
|
|
|
|
2017-03-17 11:25:53 +00:00
|
|
|
if ( 1 === remainingChars ) {
|
|
|
|
return wc_country_select_params.i18n_input_too_short_1;
|
|
|
|
}
|
2015-01-19 19:31:22 +00:00
|
|
|
|
2017-03-17 11:25:53 +00:00
|
|
|
return wc_country_select_params.i18n_input_too_short_n.replace( '%qty%', remainingChars );
|
|
|
|
},
|
|
|
|
loadingMore: function() {
|
|
|
|
return wc_country_select_params.i18n_load_more;
|
|
|
|
},
|
|
|
|
maximumSelected: function( args ) {
|
|
|
|
if ( args.maximum === 1 ) {
|
|
|
|
return wc_country_select_params.i18n_selection_too_long_1;
|
|
|
|
}
|
2015-01-19 19:31:22 +00:00
|
|
|
|
2017-03-17 11:25:53 +00:00
|
|
|
return wc_country_select_params.i18n_selection_too_long_n.replace( '%qty%', args.maximum );
|
|
|
|
},
|
|
|
|
noResults: function() {
|
|
|
|
return wc_country_select_params.i18n_no_matches;
|
|
|
|
},
|
|
|
|
searching: function() {
|
|
|
|
return wc_country_select_params.i18n_searching;
|
|
|
|
}
|
2015-01-19 19:31:22 +00:00
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2015-01-12 16:16:10 +00:00
|
|
|
// Select2 Enhancement if it exists
|
2017-06-26 19:44:33 +00:00
|
|
|
if ( $().selectWoo ) {
|
2015-01-12 16:16:10 +00:00
|
|
|
var wc_country_select_select2 = function() {
|
2015-01-19 19:31:22 +00:00
|
|
|
$( 'select.country_select:visible, select.state_select:visible' ).each( function() {
|
|
|
|
var select2_args = $.extend({
|
2019-01-15 15:50:55 +00:00
|
|
|
placeholder: $( this ).attr( 'data-placeholder' ) || $( this ).attr( 'placeholder' ) || '',
|
2015-03-05 17:55:41 +00:00
|
|
|
width: '100%'
|
2015-01-19 19:31:22 +00:00
|
|
|
}, getEnhancedSelectFormatString() );
|
|
|
|
|
2017-06-26 19:44:33 +00:00
|
|
|
$( this ).selectWoo( select2_args );
|
2017-02-23 10:51:41 +00:00
|
|
|
// Maintain focus after select https://github.com/select2/select2/issues/4384
|
|
|
|
$( this ).on( 'select2:select', function() {
|
|
|
|
$( this ).focus();
|
|
|
|
} );
|
2015-01-12 16:16:10 +00:00
|
|
|
});
|
|
|
|
};
|
2015-01-19 13:07:04 +00:00
|
|
|
|
2015-01-12 16:16:10 +00:00
|
|
|
wc_country_select_select2();
|
2015-01-19 13:07:04 +00:00
|
|
|
|
2015-04-13 15:37:22 +00:00
|
|
|
$( document.body ).bind( 'country_to_state_changed', function() {
|
2015-01-12 16:16:10 +00:00
|
|
|
wc_country_select_select2();
|
|
|
|
});
|
|
|
|
}
|
2015-01-12 15:43:13 +00:00
|
|
|
|
2013-06-11 12:31:41 +00:00
|
|
|
/* State/Country select boxes */
|
2014-03-19 03:51:37 +00:00
|
|
|
var states_json = wc_country_select_params.countries.replace( /"/g, '"' ),
|
2019-03-06 15:11:39 +00:00
|
|
|
states = $.parseJSON( states_json ),
|
|
|
|
wrapper_selectors = '.woocommerce-billing-fields,' +
|
|
|
|
'.woocommerce-shipping-fields,' +
|
|
|
|
'.woocommerce-address-fields,' +
|
|
|
|
'.woocommerce-shipping-calculator';
|
2013-06-11 12:31:41 +00:00
|
|
|
|
2019-03-06 15:11:39 +00:00
|
|
|
$( document.body ).on( 'change refresh', 'select.country_to_state, input.country_to_state', function() {
|
2016-02-08 14:47:42 +00:00
|
|
|
// Grab wrapping element to target only stateboxes in same 'group'
|
2019-03-06 15:11:39 +00:00
|
|
|
var $wrapper = $( this ).closest( wrapper_selectors );
|
2016-02-08 14:47:42 +00:00
|
|
|
|
2016-03-01 13:08:25 +00:00
|
|
|
if ( ! $wrapper.length ) {
|
2016-02-08 14:47:42 +00:00
|
|
|
$wrapper = $( this ).closest('.form-row').parent();
|
|
|
|
}
|
2013-06-11 12:31:41 +00:00
|
|
|
|
2015-06-01 09:50:16 +00:00
|
|
|
var country = $( this ).val(),
|
|
|
|
$statebox = $wrapper.find( '#billing_state, #shipping_state, #calc_shipping_state' ),
|
2018-04-25 10:46:38 +00:00
|
|
|
$parent = $statebox.closest( 'p.form-row' ),
|
2015-06-01 09:50:16 +00:00
|
|
|
input_name = $statebox.attr( 'name' ),
|
|
|
|
input_id = $statebox.attr( 'id' ),
|
|
|
|
value = $statebox.val(),
|
2016-01-06 12:20:06 +00:00
|
|
|
placeholder = $statebox.attr( 'placeholder' ) || $statebox.attr( 'data-placeholder' ) || '';
|
2013-06-11 12:31:41 +00:00
|
|
|
|
2014-03-19 03:51:37 +00:00
|
|
|
if ( states[ country ] ) {
|
2014-12-10 14:44:59 +00:00
|
|
|
if ( $.isEmptyObject( states[ country ] ) ) {
|
2013-06-11 12:31:41 +00:00
|
|
|
|
2019-03-06 15:11:39 +00:00
|
|
|
$parent.hide().find( '.select2-container' ).remove();
|
2019-01-14 14:44:54 +00:00
|
|
|
$statebox.replaceWith(
|
|
|
|
'<input type="hidden" class="hidden" name="' +
|
|
|
|
input_name +
|
|
|
|
'" id="' +
|
|
|
|
input_id +
|
|
|
|
'" value="" placeholder="' +
|
|
|
|
placeholder +
|
|
|
|
'" />'
|
|
|
|
);
|
2013-06-11 12:31:41 +00:00
|
|
|
|
2015-06-01 09:50:16 +00:00
|
|
|
$( document.body ).trigger( 'country_to_state_changed', [ country, $wrapper ] );
|
2013-06-11 12:31:41 +00:00
|
|
|
|
|
|
|
} else {
|
|
|
|
|
2014-03-19 03:51:37 +00:00
|
|
|
var options = '',
|
|
|
|
state = states[ country ];
|
|
|
|
|
|
|
|
for( var index in state ) {
|
|
|
|
if ( state.hasOwnProperty( index ) ) {
|
|
|
|
options = options + '<option value="' + index + '">' + state[ index ] + '</option>';
|
|
|
|
}
|
2013-06-11 12:31:41 +00:00
|
|
|
}
|
2014-03-19 03:51:37 +00:00
|
|
|
|
2019-02-18 11:49:46 +00:00
|
|
|
if ( ! placeholder ) {
|
|
|
|
placeholder = wc_country_select_params.i18n_select_state_text;
|
|
|
|
}
|
|
|
|
|
2019-03-06 15:11:39 +00:00
|
|
|
$parent.show();
|
2014-03-19 03:51:37 +00:00
|
|
|
|
|
|
|
if ( $statebox.is( 'input' ) ) {
|
2013-06-11 12:31:41 +00:00
|
|
|
// Change for select
|
2019-01-14 14:44:54 +00:00
|
|
|
$statebox.replaceWith(
|
|
|
|
'<select name="' +
|
|
|
|
input_name +
|
|
|
|
'" id="' +
|
|
|
|
input_id +
|
|
|
|
'" class="state_select" data-placeholder="' +
|
|
|
|
placeholder +
|
|
|
|
'"></select>'
|
|
|
|
);
|
2015-06-01 09:50:16 +00:00
|
|
|
$statebox = $wrapper.find( '#billing_state, #shipping_state, #calc_shipping_state' );
|
2013-06-11 12:31:41 +00:00
|
|
|
}
|
|
|
|
|
2014-03-19 03:51:37 +00:00
|
|
|
$statebox.html( '<option value="">' + wc_country_select_params.i18n_select_state_text + '</option>' + options );
|
2015-01-30 10:58:53 +00:00
|
|
|
$statebox.val( value ).change();
|
2013-06-11 12:31:41 +00:00
|
|
|
|
2015-06-01 09:50:16 +00:00
|
|
|
$( document.body ).trigger( 'country_to_state_changed', [country, $wrapper ] );
|
2013-06-11 12:31:41 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
|
2019-03-06 15:11:39 +00:00
|
|
|
if ( $statebox.is( 'select, input[type="hidden"]' ) ) {
|
2015-01-12 16:16:10 +00:00
|
|
|
$parent.show().find( '.select2-container' ).remove();
|
2019-01-14 14:44:54 +00:00
|
|
|
$statebox.replaceWith(
|
|
|
|
'<input type="text" class="input-text" name="' +
|
|
|
|
input_name +
|
|
|
|
'" id="' +
|
|
|
|
input_id +
|
|
|
|
'" placeholder="' +
|
|
|
|
placeholder +
|
|
|
|
'" />'
|
|
|
|
);
|
2015-06-01 09:50:16 +00:00
|
|
|
$( document.body ).trigger( 'country_to_state_changed', [country, $wrapper ] );
|
2013-06-11 12:31:41 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-06-01 09:50:16 +00:00
|
|
|
$( document.body ).trigger( 'country_to_state_changing', [country, $wrapper ] );
|
2013-06-11 12:31:41 +00:00
|
|
|
|
2014-12-09 09:07:28 +00:00
|
|
|
});
|
|
|
|
|
2019-01-14 14:44:54 +00:00
|
|
|
$( document.body ).on( 'wc_address_i18n_ready', function() {
|
|
|
|
// Init country selects with their default value once the page loads.
|
2019-03-06 15:11:39 +00:00
|
|
|
$( wrapper_selectors ).each( function() {
|
2019-01-14 14:44:54 +00:00
|
|
|
var $wrapper = $( this ),
|
|
|
|
$country_input = $wrapper.find( '#billing_country, #shipping_country, #calc_shipping_country' );
|
|
|
|
|
|
|
|
if ( 0 === $country_input.length ) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
var country = $country_input.val();
|
|
|
|
|
|
|
|
if ( 0 === country.length ) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2019-03-06 15:11:39 +00:00
|
|
|
$country_input.trigger( 'refresh' ); // Custom event to init the state field.
|
2019-01-14 14:44:54 +00:00
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2013-12-04 19:15:24 +00:00
|
|
|
});
|