jQuery( function( $ ) {
var cities = wc_city_dropdown.cities;
wrapper_selectors = '.woocommerce-billing-fields,' +
'.woocommerce-shipping-fields,' +
'.woocommerce-address-fields';
$( document.body ).on( 'change refresh', 'select.country_to_state, input.country_to_state', function() {
var $wrapper = $( this ).closest( wrapper_selectors );
if ( ! $wrapper.length ) {
$wrapper = $( this ).closest('.form-row').parent();
}
var country = $( this ).val(),
$citybox = $wrapper.find( '#billing_city, #shipping_city' ),
$parent = $citybox.closest( '.form-row' ),
input_name = $citybox.attr( 'name' ),
input_id = $citybox.attr('id'),
input_classes = $citybox.attr('data-input-classes'),
value = $citybox.val(),
placeholder = $citybox.attr( 'placeholder' ) || $citybox.attr( 'data-placeholder' ) || '',
$newcity;
if ( cities[ country ] ) {
if ( $.isEmptyObject( cities[ country ] ) ) {
$newcity = $( '' )
.prop( 'id', input_id )
.prop( 'name', input_name )
.prop( 'placeholder', placeholder )
.attr( 'data-input-classes', input_classes )
.addClass( 'hidden ' + input_classes );
$parent.hide().find( '.select2-container' ).remove();
$citybox.replaceWith( $newcity );
$( document.body ).trigger( 'country_to_city_changed', [ country, $wrapper ] );
} else {
var city = cities[country],
$defaultOption = $('').text('Select a City');
if (!placeholder) {
placeholder = 'Select a City';
}
$parent.show();
if ($citybox.is('input')) {
$newcity = $('')
.prop('id', input_id)
.prop('name', input_name)
.data('placeholder', placeholder)
.attr('data-input-classes', input_classes)
.addClass('state_select ' + input_classes);
$citybox.replaceWith($newcity);
$citybox = $wrapper.find('#billing_city, #shipping_city');
}
$citybox.empty().append($defaultOption);
$.each(city, function (index) {
var $option = $('')
.prop('value', index)
.text(city[index]);
$citybox.append($option);
});
$citybox.val(value).trigger('change');
$( document.body ).trigger( 'country_to_city_changed', [country, $wrapper ] );
}
} else {
if ( $citybox.is( 'select, input[type="hidden"]' ) ) {
$newcity = $( '' )
.prop( 'id', input_id )
.prop( 'name', input_name )
.prop('placeholder', placeholder)
.attr('data-input-classes', input_classes )
.addClass( 'input-text ' + input_classes );
$parent.show().find( '.select2-container' ).remove();
$citybox.replaceWith( $newcity );
$( document.body ).trigger( 'country_to_city_changed', [country, $wrapper ] );
}
}
$( document.body ).trigger( 'country_to_city_changing', [country, $wrapper ] );
});
})