{"version":3,"file":"../address-i18n-300.min.js","sources":["address-i18n-300.js"],"sourcesContent":["/**\n * Address Internationalization Script\n * \n * Replaces the original WooCommerce `address-i18n.js`.\n */\n\n/*global wc_address_i18n_params */\njQuery( function( $ ) {\n\n\t// wc_address_i18n_params is required to continue, ensure the object exists\n\tif ( typeof wc_address_i18n_params === 'undefined' ) {\n\t\treturn false;\n\t}\n\n\t// CHANGE: Add settings\n\tvar _settings = {\n\t\tformRowSelector: '.form-row',\n\t\tformRowExpansibleSelector: '.form-row.fc-expansible-form-section',\n\t\texpansibleToggleSelector: '.fc-expansible-form-section__toggle',\n\t\texpansibleContentSelector: '.fc-expansible-form-section__content',\n\t\tinputSelector: 'input, select, textarea',\n\t\tcountryFieldsSelector: '#billing_country, #shipping_country, #country',\n\t\taddressFieldGroupSelector: '.woocommerce-billing-fields, .woocommerce-shipping-fields, .woocommerce-address-fields',\n\t};\n\t// CHANGE: END - Add settings\n\n\tvar locale_json = wc_address_i18n_params.locale.replace( /"/g, '\"' ), locale = JSON.parse( locale_json );\n\n\tfunction field_is_required( field, is_required ) {\n\t\tif ( is_required ) {\n\t\t\tfield.find( 'label .optional' ).remove();\n\t\t\tfield.addClass( 'validate-required' );\n\n\t\t\tif ( field.find( 'label .required' ).length === 0 ) {\n\t\t\t\tfield.find( 'label' ).append(\n\t\t\t\t\t' *'\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\tfield.find( 'label .required' ).remove();\n\t\t\tfield.removeClass( 'validate-required woocommerce-invalid woocommerce-invalid-required-field' );\n\n\t\t\tif ( field.find( 'label .optional' ).length === 0 ) {\n\t\t\t\tfield.find( 'label' ).append( ' (' + wc_address_i18n_params.i18n_optional_text + ')' );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Handle locale\n\t// CHANGE: Extract function to process country to state changing as it needs to be used when event `updated_checkout` is triggered\n\tvar process_country_to_state_changing = function( event, country, wrapper ) {\n\t\tvar thisform = wrapper, thislocale;\n\n\t\t// CHANGE: Get current focused element and its value\n\t\tvar currentFocusedElement = document.activeElement;\n\n\t\tif ( typeof locale[ country ] !== 'undefined' ) {\n\t\t\tthislocale = locale[ country ];\n\t\t} else {\n\t\t\tthislocale = locale['default'];\n\t\t}\n\n\t\t// CHANGE: Add selector for address fields without prefix\n\t\tvar $postcodefield = thisform.find( '#postcode_field, #billing_postcode_field, #shipping_postcode_field' ),\n\t\t\t$cityfield = thisform.find( '#city_field, #billing_city_field, #shipping_city_field' ),\n\t\t\t$statefield = thisform.find( '#state_field, #billing_state_field, #shipping_state_field' );\n\n\t\tif ( ! $postcodefield.attr( 'data-o_class' ) ) {\n\t\t\t$postcodefield.attr( 'data-o_class', $postcodefield.attr( 'class' ) );\n\t\t\t$cityfield.attr( 'data-o_class', $cityfield.attr( 'class' ) );\n\t\t\t$statefield.attr( 'data-o_class', $statefield.attr( 'class' ) );\n\t\t}\n\n\t\tvar locale_fields = JSON.parse( wc_address_i18n_params.locale_fields );\n\n\t\t$.each( locale_fields, function( key, value ) {\n\n\t\t\tvar field = thisform.find( value ),\n\t\t\t\tfieldLocale = $.extend( true, {}, locale['default'][ key ], thislocale[ key ] );\n\n\t\t\t// Labels.\n\t\t\tif ( typeof fieldLocale.label !== 'undefined' ) {\n\t\t\t\tfield.find( 'label' ).html( fieldLocale.label );\n\t\t\t}\n\n\t\t\t// Placeholders.\n\t\t\tif ( typeof fieldLocale.placeholder !== 'undefined' ) {\n\t\t\t\tfield.find( ':input' ).attr( 'placeholder', fieldLocale.placeholder );\n\t\t\t\tfield.find( ':input' ).attr( 'data-placeholder', fieldLocale.placeholder );\n\t\t\t\tfield.find( '.select2-selection__placeholder' ).text( fieldLocale.placeholder );\n\t\t\t}\n\n\t\t\t// Use the i18n label as a placeholder if there is no label element and no i18n placeholder.\n\t\t\tif (\n\t\t\t\ttypeof fieldLocale.placeholder === 'undefined' &&\n\t\t\t\ttypeof fieldLocale.label !== 'undefined' &&\n\t\t\t\t! field.find( 'label' ).length\n\t\t\t) {\n\t\t\t\tfield.find( ':input' ).attr( 'placeholder', fieldLocale.label );\n\t\t\t\tfield.find( ':input' ).attr( 'data-placeholder', fieldLocale.label );\n\t\t\t\tfield.find( '.select2-selection__placeholder' ).text( fieldLocale.label );\n\t\t\t}\n\n\t\t\t// Required.\n\t\t\tif ( typeof fieldLocale.required !== 'undefined' ) {\n\t\t\t\tfield_is_required( field, fieldLocale.required );\n\t\t\t} else {\n\t\t\t\tfield_is_required( field, false );\n\t\t\t}\n\n\t\t\t// Priority.\n\t\t\tif ( typeof fieldLocale.priority !== 'undefined' ) {\n\t\t\t\tfield.data( 'priority', fieldLocale.priority );\n\t\t\t}\n\n\t\t\t// Hidden fields.\n\t\t\tif ( 'state' !== key ) {\n\t\t\t\tif ( typeof fieldLocale.hidden !== 'undefined' && true === fieldLocale.hidden ) {\n\t\t\t\t\tfield.hide().find( ':input' ).val( '' );\n\t\t\t\t} else {\n\t\t\t\t\tfield.show();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// CHANGE: Handle collapsible fields state\n\t\t\tvar formRow, fieldCollapsibleToggle, fieldCollapsibleContent;\n\t\t\tif ( window.CollapsibleBlock && field.length > 0 ) {\n\t\t\t\tformRow = field[0].closest( _settings.formRowExpansibleSelector );\n\t\t\t\tif ( formRow ) {\n\t\t\t\t\tfieldCollapsibleToggle = formRow.querySelector( _settings.expansibleToggleSelector );\n\t\t\t\t\tfieldCollapsibleContent = formRow.querySelector( _settings.expansibleContentSelector );\n\t\t\t\t\tif ( fieldCollapsibleToggle && fieldCollapsibleContent ) {\n\t\t\t\t\t\tvar expandContent = false;\n\n\t\t\t\t\t\t// Required fields\n\t\t\t\t\t\tif ( typeof fieldLocale.required !== 'undefined' && true === fieldLocale.required ) {\n\t\t\t\t\t\t\texpandContent = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Optional fields\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tvar input = field[0].querySelector( _settings.inputSelector );\n\t\t\t\t\t\t\tif ( input && '' !== input.value ) {\n\t\t\t\t\t\t\t\texpandContent = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Optional fields that are also hidden\n\t\t\t\t\t\tif ( 'state' !== key && true === fieldLocale.hidden && ( typeof fieldLocale.required === 'undefined' || false === fieldLocale.required ) ) {\n\t\t\t\t\t\t\t// Should expand field contents to avoid showing the \"+ Add\" link button when the field is hidden\n\t\t\t\t\t\t\texpandContent = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Expand content\n\t\t\t\t\t\tif ( expandContent ) {\n\t\t\t\t\t\t\tCollapsibleBlock.collapse( fieldCollapsibleToggle, false ); // Collapse without transitions\n\t\t\t\t\t\t\tCollapsibleBlock.expand( fieldCollapsibleContent, false, false ); // Expand without transitions and without setting focus\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Collapse content\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tCollapsibleBlock.collapse( fieldCollapsibleContent, false ); // Collapse without transitions\n\t\t\t\t\t\t\tCollapsibleBlock.expand( fieldCollapsibleToggle, false, false ); // Expand without transitions and without setting focus\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// CHANGE: END - Handle collapsible fields state\n\n\t\t\t// Class changes.\n\t\t\tif ( Array.isArray( fieldLocale.class ) ) {\n\t\t\t\tfield.removeClass( 'form-row-first form-row-last form-row-wide' );\n\t\t\t\tfield.addClass( fieldLocale.class.join( ' ' ) );\n\t\t\t}\n\t\t});\n\n\t\tvar fieldsets = $(\n\t\t\t'.woocommerce-billing-fields__field-wrapper,' +\n\t\t\t'.woocommerce-shipping-fields__field-wrapper,' +\n\t\t\t'.woocommerce-address-fields__field-wrapper,' +\n\t\t\t'.woocommerce-additional-fields__field-wrapper .woocommerce-account-fields'\n\t\t);\n\n\t\tfieldsets.each( function( index, fieldset ) {\n\t\t\t// CHANGE: Change form row selector to exclude nested `.form-row` elements (used for expansible form fields)\n\t\t\tvar rows = $( fieldset ).find( '.form-row:not( .form-row .form-row )' );\n\t\t\tvar wrapper = rows.first().parent();\n\n\t\t\t// Before sorting, ensure all fields have a priority for bW compatibility.\n\t\t\tvar last_priority = 0;\n\n\t\t\trows.each( function() {\n\t\t\t\tif ( ! $( this ).data( 'priority' ) ) {\n\t\t\t\t\t\t$( this ).data( 'priority', last_priority + 1 );\n\t\t\t\t}\n\t\t\t\tlast_priority = $( this ).data( 'priority' );\n\t\t\t} );\n\n\t\t\t// Sort the fields.\n\t\t\trows.sort( function( a, b ) {\n\t\t\t\tvar asort = parseInt( $( a ).data( 'priority' ), 10 ),\n\t\t\t\t\tbsort = parseInt( $( b ).data( 'priority' ), 10 );\n\n\t\t\t\tif ( asort > bsort ) {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\t\t\tif ( asort < bsort ) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t});\n\n\t\t\t// CHANGE: Detach rows and re-attach them in the correct order, without moving the row of the field currently focused.\n\t\t\t// This prevents the field from losing focus and keeps the virtual keyboard on mobile devices open.\n\n\t\t\t// Get focused row\n\t\t\tvar focusedRow, referenceNode;\n\t\t\tvar before = true;\n\t\t\tvar rowsBefore = [], rowsAfter = [];\n\t\t\tvar _rows = rows.toArray();\n\t\t\tfor ( var i = 0; i < _rows.length; i++) {\n\t\t\t\tvar row = _rows[ i ];\n\t\t\t\tif ( row.contains( currentFocusedElement ) ) {\n\t\t\t\t\tfocusedRow = row;\n\t\t\t\t\treferenceNode = focusedRow;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Iterate over rows\n\t\t\tfor ( var i = 0; i < _rows.length; i++) {\n\t\t\t\tvar row = _rows[ i ];\n\n\t\t\t\t// Maybe skip row with the field currently focused\n\t\t\t\tif ( row === focusedRow ) {\n\t\t\t\t\tbefore = false;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Set reference node to last child\n\t\t\t\tif ( ! focusedRow ) {\n\t\t\t\t\treferenceNode = row.parentNode.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Maybe add row to the before list\n\t\t\t\tif ( before ) {\n\t\t\t\t\trowsBefore.push( row );\n\t\t\t\t}\n\t\t\t\t// Maybe add row to the after list\n\t\t\t\telse {\n\t\t\t\t\trowsAfter.push( row );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Re-attach rows before the field currently focused\n\t\t\tfor ( var j = 0; j < rowsBefore.length; j++ ) {\n\t\t\t\tvar row = rowsBefore[ j ];\n\t\t\t\trow.parentNode.insertBefore( row, referenceNode );\n\t\t\t}\n\n\t\t\t// Re-attach rows after the field currently focused\n\t\t\trowsAfter = rowsAfter.reverse();\n\t\t\tfor ( var j = 0; j < rowsAfter.length; j++ ) {\n\t\t\t\tvar row = rowsAfter[ j ];\n\t\t\t\trow.parentNode.insertBefore( row, referenceNode.nextSibling );\n\t\t\t}\n\n\t\t\t// CHANGE: END - Detach rows and re-attach them in the correct order, without moving the row of the field currently focused.\n\t\t} );\n\n\t\t// CHANGE: Re-set focus to the element previously with focus\n\t\tFCUtils.maybeRefocusElement( currentFocusedElement );\n\t};\n\n\t// CHANGE: END - Extract function to process country to state changing as it needs to be used when event `updated_checkout` is triggered\n\t// CHANGE: Add function to handle country to state changing when event `updated_checkout` is triggered\n\tvar process_country_to_state_changing_updated_checkout = function() {\t\t\n\t\t// Get all country fields on the page\n\t\tvar country_fields = document.querySelectorAll( _settings.countryFieldsSelector );\n\n\t\t// Iterate all country fields and process country changing event for each one\n\t\tif ( country_fields.length > 0 ) {\n\t\t\tfor ( var i = 0; i < country_fields.length; i++ ) {\n\t\t\t\tvar field = country_fields[i];\n\t\t\t\tvar wrapper = field.closest( _settings.addressFieldGroupSelector );\n\t\t\t\tprocess_country_to_state_changing( null, field.value, $( wrapper ) );\n\t\t\t}\n\t\t}\n\t}\n\n\t// CHANGE: END - Add function to handle country to state changing when event `updated_checkout` is triggered\n\t$( document.body )\n\t\t// CHANGE: Use extracted function to process country to state changing\n\t\t.on( 'country_to_state_changing', process_country_to_state_changing )\n\t\t// CHANGE: Use extracted function to process country to state changing when event `updated_checkout` is triggered\n\t\t.on( 'updated_checkout', process_country_to_state_changing_updated_checkout )\n\t\t.trigger( 'wc_address_i18n_ready' );\n});\n"],"names":["jQuery","$","wc_address_i18n_params","_settings","locale_json","locale","replace","JSON","parse","field_is_required","field","is_required","find","remove","addClass","length","append","i18n_required_text","removeClass","i18n_optional_text","process_country_to_state_changing","event","country","wrapper","thisform","currentFocusedElement","document","activeElement","thislocale","$postcodefield","$cityfield","$statefield","locale_fields","attr","each","key","value","expandContent","input","fieldCollapsibleToggle","formRow","fieldLocale","extend","label","html","placeholder","text","required","priority","data","hidden","hide","val","show","window","CollapsibleBlock","closest","querySelector","fieldCollapsibleContent","collapse","expand","Array","isArray","class","join","index","fieldset","focusedRow","referenceNode","rows","last_priority","first","parent","before","this","sort","a","b","asort","parseInt","bsort","rowsBefore","rowsAfter","_rows","toArray","i","row","contains","parentNode","lastChild","push","j","insertBefore","reverse","nextSibling","FCUtils","maybeRefocusElement","body","on","country_fields","querySelectorAll","trigger"],"mappings":"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"}