trigger event when ready (wc_address_i18n_ready)

This commit is contained in:
Mike Jolley 2019-01-14 14:44:14 +00:00
parent 9799301b0a
commit 3922d186e0
1 changed files with 100 additions and 85 deletions

View File

@ -14,7 +14,11 @@ jQuery( function( $ ) {
field.addClass( 'validate-required' ); field.addClass( 'validate-required' );
if ( field.find( 'label .required' ).length === 0 ) { if ( field.find( 'label .required' ).length === 0 ) {
field.find( 'label' ).append( '&nbsp;<abbr class="required" title="' + wc_address_i18n_params.i18n_required_text + '">*</abbr>' ); field.find( 'label' ).append(
'&nbsp;<abbr class="required" title="' +
wc_address_i18n_params.i18n_required_text +
'">*</abbr>'
);
} }
} else { } else {
field.find( 'label .required' ).remove(); field.find( 'label .required' ).remove();
@ -27,102 +31,113 @@ jQuery( function( $ ) {
} }
// Handle locale // Handle locale
$( document.body ).bind( 'country_to_state_changing', function( event, country, wrapper ) { $( document.body )
var thisform = wrapper, thislocale; .bind( 'country_to_state_changing', function( event, country, wrapper ) {
var thisform = wrapper, thislocale;
if ( typeof locale[ country ] !== 'undefined' ) { if ( typeof locale[ country ] !== 'undefined' ) {
thislocale = locale[ country ]; thislocale = locale[ country ];
} else {
thislocale = locale['default'];
}
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' ) );
}
var locale_fields = $.parseJSON( wc_address_i18n_params.locale_fields );
$.each( locale_fields, function( key, value ) {
var field = thisform.find( value ),
fieldLocale = $.extend( true, {}, locale['default'][ key ], thislocale[ key ] );
// Labels.
if ( typeof fieldLocale.label !== 'undefined' ) {
field.find( 'label' ).html( fieldLocale.label );
}
// Placeholders.
if ( typeof fieldLocale.placeholder !== 'undefined' ) {
field.find( 'input' ).attr( 'placeholder', fieldLocale.placeholder );
field.find( '.select2-selection__placeholder' ).text( fieldLocale.placeholder );
}
// Use the i18n label as a placeholder if there is no label element and no i18n placeholder.
if ( typeof fieldLocale.placeholder === 'undefined' && typeof fieldLocale.label !== 'undefined' && ! field.find( 'label' ).length ) {
field.find( 'input' ).attr( 'placeholder', fieldLocale.label );
field.find( '.select2-selection__placeholder' ).text( fieldLocale.label );
}
// Required.
if ( typeof fieldLocale.required !== 'undefined' ) {
field_is_required( field, fieldLocale.required );
} else { } else {
field_is_required( field, false ); thislocale = locale['default'];
} }
// Priority. var $postcodefield = thisform.find( '#billing_postcode_field, #shipping_postcode_field' ),
if ( typeof fieldLocale.priority !== 'undefined' ) { $cityfield = thisform.find( '#billing_city_field, #shipping_city_field' ),
field.data( 'priority', fieldLocale.priority ); $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' ) );
} }
// Hidden fields. var locale_fields = $.parseJSON( wc_address_i18n_params.locale_fields );
if ( 'state' !== key ) {
if ( typeof fieldLocale.hidden !== 'undefined' && true === fieldLocale.hidden ) { $.each( locale_fields, function( key, value ) {
field.hide().find( 'input' ).val( '' );
var field = thisform.find( value ),
fieldLocale = $.extend( true, {}, locale['default'][ key ], thislocale[ key ] );
// Labels.
if ( typeof fieldLocale.label !== 'undefined' ) {
field.find( 'label' ).html( fieldLocale.label );
}
// Placeholders.
if ( typeof fieldLocale.placeholder !== 'undefined' ) {
field.find( 'input' ).attr( 'placeholder', fieldLocale.placeholder );
field.find( '.select2-selection__placeholder' ).text( fieldLocale.placeholder );
}
// Use the i18n label as a placeholder if there is no label element and no i18n placeholder.
if (
typeof fieldLocale.placeholder === 'undefined' &&
typeof fieldLocale.label !== 'undefined' &&
! field.find( 'label' ).length
) {
field.find( 'input' ).attr( 'placeholder', fieldLocale.label );
field.find( '.select2-selection__placeholder' ).text( fieldLocale.label );
}
// Required.
if ( typeof fieldLocale.required !== 'undefined' ) {
field_is_required( field, fieldLocale.required );
} else { } else {
field.show(); field_is_required( field, false );
} }
}
});
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'); // Priority.
if ( typeof fieldLocale.priority !== 'undefined' ) {
fieldsets.each( function( index, fieldset ) { field.data( 'priority', fieldLocale.priority );
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;
rows.each( function() {
if ( ! $( this ).data( 'priority' ) ) {
$( this ).data( 'priority', last_priority + 1 );
} }
last_priority = $( this ).data( 'priority' );
} );
// Sort the fields. // Hidden fields.
rows.sort( function( a, b ) { if ( 'state' !== key ) {
var asort = $( a ).data( 'priority' ), if ( typeof fieldLocale.hidden !== 'undefined' && true === fieldLocale.hidden ) {
bsort = $( b ).data( 'priority' ); field.hide().find( 'input' ).val( '' );
} else {
if ( asort > bsort ) { field.show();
return 1; }
} }
if ( asort < bsort ) {
return -1;
}
return 0;
}); });
rows.detach().appendTo( wrapper ); 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();
// 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' );
} );
// 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;
});
rows.detach().appendTo( wrapper );
});
})
.trigger( 'wc_address_i18n_ready' );
}); });