|
|
@@ -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( /"/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( /"/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 ); |
|
|
} ); |
|
|
}); |
|
|
}); |