PageSourceSearch

https://www.desmakenvangriekenland.nl/wp-content/cache/min/1/wp-co…/js/postcode-eu-autofill.js?ver=1791275886

js desmakenvangriekenland.nl collected 2026-10-08 11:58:59 UTC 22,718 bytes, 52 lines download raw bytes

1(function(){'use strict';if(typeof PostcodeEuSettings==='undefined'){return}
2const $=jQuery,__=wp.i18n.__,settings=PostcodeEuSettings,initializedElements=new Set(),addressDetailsCache=new Map(),storedAddresses={},checkoutElements={},loadingClassName='postcode-eu-address-validation-loading';const initialize=function(){if(typeof PostcodeNlAddressFieldMapping!=='undefined'){$.extend(settings.addressFieldMapping,PostcodeNlAddressFieldMapping.mapping)}
3$('.postcode-eu-autofill-intl').closest('div').each(function(){if(initializedElements.has(this)){return}
4const container=$(this),addressType=this.querySelector('#billing_city')?'billing':'shipping';storedAddresses[addressType]??=new StoredAddress(addressType);if(!1===container.is(':visible')){return}
5initializedElements.add(this);const addressFields=getAddressFields(addressType);checkoutElements[addressType]={container,addressFields};if(settings.displayMode==='default'){addFormattedAddressOutput(container)}
6addAddressAutocompleteNl(container,addressType);addAddressAutocompleteIntl(container,addressType);if(settings.displayMode==='showAll'){return}
7if(settings.allowAutofillIntlBypass==='y'){addAutofillIntlBypass(container,addressType)}
8container.find('.country_to_state').on('change.postcode-eu.address-fields',function(){const selectedCountry=this.value;window.setTimeout(()=>toggleAddressFields(addressFields,!isSupportedCountry(selectedCountry),!0))}).trigger('change.postcode-eu.address-fields')})};$(initialize);$(document.body).on('updated_checkout',initialize);const isSupportedCountry=function(countryIso2){for(let i in settings.enabledCountries){if(settings.enabledCountries[i].iso2===countryIso2){return!0}}
9return!1};const getAddressFields=function(addressType){const fields={};for(const[key,addressPart]of Object.entries(settings.addressFieldMapping)){const field=document.forms.checkout[`${addressType}_${key}`];if(field&&addressPart!==null&&field.type!=='hidden'){fields[key]=$(field)}}
10return fields};const getAddressFieldValues=function(addressType){const fields=checkoutElements[addressType]?.addressFields??{};return Object.fromEntries(Object.entries(fields).map(([k,el])=>[k,el.val()]))};const resetAddressFields=function(addressFields){for(let i in addressFields){addressFields[i].val('').trigger('input')}};const toggleAddressFields=function(addressFields,state,force){if(!force){if(settings.displayMode==='default'){state=!1}else if(settings.displayMode==='showAll'){state=!0}}
11for(let i in addressFields){let field=addressFields[i];if(field.length>0&&field.prop('type')!=='hidden'){field.closest('.form-row').toggle(state)}}};const setAddressWithStorage=function(addressType,apiAddress,mailLines=null){const mappedValues={},values={street:apiAddress.street,streetAndHouseNumber:apiAddress.streetLine,houseNumber:apiAddress.buildingNumber??apiAddress.houseNumber,houseNumberAddition:apiAddress.buildingNumberAddition??apiAddress.houseNumberAddition,houseNumberAndAddition:apiAddress.building,postcode:apiAddress.postcode,city:apiAddress.locality??apiAddress.city,province:apiAddress.province,};for(const[key,field]of Object.entries(checkoutElements[addressType].addressFields)){mappedValues[key]=String(values[settings.addressFieldMapping[key]]??'');field[0].value=mappedValues[key];field[0].dispatchEvent(new Event('change',{bubbles:!0,cancelable:!0}))}
12storedAddresses[addressType].set(mappedValues,mailLines);if(addressType==='billing'&&hasUnusedShippingForm()){storedAddresses.shipping.set(mappedValues,mailLines)}
13$(document.body).trigger('update_checkout')};const setFieldValidity=function(field,errorMessage){errorMessage=errorMessage||'';console.assert($.type(errorMessage)==='string','Error message must be a string.');clearFieldValidity(field);if(errorMessage===''){field.closest('.form-row').addClass('woocommerce-validated')}else{field.closest('.form-row').addClass('woocommerce-invalid');field.after($('<span>',{class:'postcode-eu-address-validation-warning',text:errorMessage}))}};const clearFieldValidity=function(field){field.closest('.form-row').removeClass('woocommerce-validated woocommerce-invalid');field.siblings('.postcode-eu-address-validation-warning').remove()};const getMappedAddressValues=(addressType)=>{const values={};for(const[key,prop]of Object.entries(settings.addressFieldMapping)){if(prop&&key in checkoutElements[addressType].addressFields){values[prop]=checkoutElements[addressType].addressFields[key].val()}}
14if('street' in values){if('houseNumber' in values){values.houseNumberAndAddition=[values.houseNumber,values.houseNumberAddition??''].join(' ').trim()}
15if('houseNumberAndAddition' in values){values.streetAndHouseNumber=[values.street,values.houseNumberAndAddition].join(' ')}}
16if(values.postcode&&values.city&&values.streetAndHouseNumber){return values}
17return null};const validateAddress=(countryIso3,streetAndBuilding='',postcode='',locality='')=>{const url=settings.actions.validate.replace('${country}',encodeURIComponent(countryIso3)).replace('${streetAndBuilding}',encodeURIComponent(streetAndBuilding)).replace('${postcode}',encodeURIComponent(postcode)).replace('${locality}',encodeURIComponent(locality));return fetch(url,{headers:{'X-WC-Checkout-Type':'classic'}}).then((response)=>{if(response.ok){return response.json()}
18throw new Error(response.statusText,{cause:response})})};const getValidatedAddress=(...args)=>{return validateAddress(...args).then((response)=>{const top=response.matches[0];if(top?.status&&!top.status.isAmbiguous&&top.status.grade<'C'&&['Building','BuildingPartial'].includes(top.status.validationLevel)){return top}
19return null}).catch((error)=>{console.error(error);throw error})};const validatePoBox=function(addressType){return settings.allowPoBoxShipping==='y'||!(addressType==='shipping'||isBillingAsShipping())};const destruct=function(){for(const addressType in checkoutElements){checkoutElements[addressType].container.find('.country_to_state').off('change.postcode-eu');checkoutElements[addressType].container.find('.form-row.postcode-eu-autofill').remove();toggleAddressFields(checkoutElements[addressType].addressFields,!0,!0)}};const addAddressAutocompleteNl=function(container,addressType){if(typeof settings.enabledCountries.NL==='undefined'||settings.netherlandsMode!=='postcodeOnly'){return}
20const countryToState=container.find('.country_to_state'),nlFields=container.find('.postcode-eu-autofill-nl'),lookupDelay=750,postcodeRegex=/[1-9][0-9]{3}\s*[a-z]{2}/i,houseNumberRegex=/[1-9]\d{0,4}(?:\D.*)?$/i,postcodeField=container.find('.postcode-eu-autofill-nl-postcode input'),houseNumberField=container.find('.postcode-eu-autofill-nl-house-number input'),houseNumberSelect=container.find('.postcode-eu-autofill-nl-house-number-select select'),addressFields=checkoutElements[addressType].addressFields=getAddressFields(addressType),storedAddress=storedAddresses[addressType];let lookupTimeout,currentAddress=null,currentStatus=null;const toggleNlFields=function(state){nlFields.slice(0,2).toggle(state);nlFields.slice(-1).toggle(state&&houseNumberSelect.children().length>1)};const isNl=function(){return countryToState.val()==='NL'};const isPostcodeValid=()=>postcodeRegex.test(postcodeField.val());const isHouseNumberValid=()=>houseNumberRegex.test(houseNumberField.val());const setHouseNumberAddition=function(value){currentAddress.houseNumberAddition=value;currentAddress.streetLine=`${currentAddress.street} ${currentAddress.houseNumber} ${currentAddress.houseNumberAddition ?? ''}`.trim()};postcodeField.on('input',()=>{window.clearTimeout(lookupTimeout);clearFieldValidity(postcodeField);resetHouseNumberSelect();currentStatus=null;if(isPostcodeValid()&&isHouseNumberValid()){lookupTimeout=window.setTimeout(getAddress,lookupDelay)}});houseNumberField.on('input',()=>{window.clearTimeout(lookupTimeout);clearFieldValidity(houseNumberField);resetHouseNumberSelect();currentStatus=null;if(isHouseNumberValid()&&isPostcodeValid()){lookupTimeout=window.setTimeout(getAddress,lookupDelay)}});postcodeField.on('change focusout validate',(e)=>{e.stopPropagation();setFieldValidity(postcodeField,isPostcodeValid()?'':__('Please enter a valid postcode','postcode-eu-address-validation'))});houseNumberField.on('change focusout validate',(e)=>{e.stopPropagation();if(currentStatus===null||currentStatus==='valid'){setFieldValidity(houseNumberField,isHouseNumberValid()?'':__('Please enter a valid house number','postcode-eu-address-validation'))}});countryToState.on('change.postcode-eu',()=>{toggleNlFields(isNl());if(!isNl()){return}
21resetAddressFields(addressFields);storedAddress.clear();if(isPostcodeValid()&&isHouseNumberValid()){getAddress()}});postcodeField.on('address-result',function(_,data){if(data.status==='val
21id'){fillAddressFieldsNl(data.address)}});houseNumberSelect.on('change validate',function(){if(this.value==='0'){if(this.children.length>1){setHouseNumberAddition(null);postcodeField.trigger('address-result',{address:currentAddress,status:'houseNumberAdditionIncorrect'});toggleAddressFields(addressFields,!1);resetAddressFields(addressFields);setFieldValidity(houseNumberSelect,__('Please select a house number.','postcode-eu-address-validation'))}
22return}
23toggleAddressFields(addressFields,!0);setHouseNumberAddition(this.value);postcodeField.trigger('address-result',{address:currentAddress,status:'valid'});clearFieldValidity(houseNumberSelect)});container.on('reset-address',()=>{if(isNl()){postcodeField.val('');houseNumberField.val('');resetHouseNumberSelect();resetAddressFields(addressFields);storedAddress.clear();postcodeField.focus()}});const getAddress=function(){const postcode=postcodeRegex.exec(postcodeField.val())[0].replace(/\s/g,''),houseNumberAndAddition=houseNumberRegex.exec(houseNumberField.val())[0].trim(),url=settings.actions.dutchAddressLookup.replace('${postcode}',encodeURIComponent(postcode)).replace('${houseNumberAndAddition}',encodeURIComponent(houseNumberAndAddition));resetHouseNumberSelect();resetAddressFields(addressFields);currentAddress=currentStatus=null;postcodeField.addClass(loadingClassName);$.get({url:url,cache:!0,dataType:'json',headers:{'X-WC-Checkout-Type':'classic'},success:function(response){if(response.status==='notFound'){setFieldValidity(houseNumberField,__('Address not found.','postcode-eu-address-validation'));return}
24if(response.address.addressType==='PO box'&&!validatePoBox(addressType)){setFieldValidity(houseNumberField,__('Sorry, we cannot ship to a PO Box address.','postcode-eu-address-validation'));response.status='poBoxNotAllowed';return}
25if(response.status==='houseNumberAdditionIncorrect'){setHouseNumberOptions(response.address);houseNumberSelect.closest('.postcode-eu-autofill').show()}else{toggleAddressFields(addressFields,!0);setFieldValidity(postcodeField);setFieldValidity(houseNumberField)}
26currentAddress=response.address}}).fail(function(jqXhr){if(jqXhr.status===503){destruct();return}
27setFieldValidity(houseNumberField,__('An error has occurred. Please try again later or contact us.','postcode-eu-address-validation'))}).always(function(response,textStatus){currentStatus=response.status??textStatus;postcodeField.removeClass(loadingClassName);postcodeField.trigger('address-result',textStatus==='success'?response:{status:textStatus,address:null})})};const setHouseNumberOptions=function(address){houseNumberSelect.children().eq(0).siblings().remove();let options=document.createDocumentFragment();address.houseNumberAdditions.forEach((addition)=>options.appendChild(createOption(addition)));options.appendChild(createOption(address.unknownHouseNumberAddition,'('+__('unknown addition','postcode-eu-address-validation')+')'));houseNumberSelect.append(options);function createOption(addition,labelSuffix){const option=document.createElement('option');option.value=addition;option.textContent=(address.houseNumber+' '+addition+' '+(labelSuffix??'')).trim();return option}};const fillAddressFieldsNl=function(apiAddress){setAddressWithStorage(addressType,apiAddress,getMailLinesNl(apiAddress))};const resetHouseNumberSelect=function(){houseNumberSelect.closest('.postcode-eu-autofill').hide();houseNumberSelect.children().eq(0).siblings().remove()};const extractHouseNumber=(streetAndHouseNumber)=>{const matches=[...streetAndHouseNumber.matchAll(/[1-9]\d{0,4}\D*/g)];if(matches[0]?.index===0){matches.shift()}
28if(matches.length===1){return matches[0][0].trim()}
29return null};(()=>{toggleNlFields(isNl());if(!isNl()){return}
30const prefilledAddressValues=getMappedAddressValues(addressType);if(prefilledAddressValues===null){return}
31if(!storedAddress.isExpired()&&storedAddress.isEqual(getAddressFieldValues(addressType))){const{values,mailLines}=storedAddress.get();postcodeField.val(values.postcode);houseNumberField.val(values.houseNumberAndAddition);setFieldValidity(postcodeField);setFieldValidity(houseNumberField);container.find('.postcode-eu-autofill-intl').trigger('address-result',{mailLines});toggleAddressFields(addressFields,!0);return}
32const houseNumberAndAddition=prefilledAddressValues.houseNumberAndAddition??extractHouseNumber(prefilledAddressValues.streetAndHouseNumber);postcodeField.val(prefilledAddressValues.postcode);if(houseNumberAndAddition){houseNumberField.val(houseNumberAndAddition)}
33if(isPostcodeValid()&&isHouseNumberValid()){getAddress();return}
34if(houseNumberRegex.test(prefilledAddressValues.streetAndHouseNumber)){postcodeField.addClass(loadingClassName);const{postcode,city,streetAndHouseNumber}=prefilledAddressValues;getValidatedAddress('NLD',streetAndHouseNumber,postcode,city).then((result)=>{if(result===null){resetAddressFields(addressFields);setFieldValidity(houseNumberField,__('Please enter a valid address.','postcode-eu-address-validation'));currentStatus='notFound'}else if(result.isPoBox&&!validatePoBox(addressType)){resetAddressFields(addressFields);setFieldValidity(houseNumberField,__('Sorry, we cannot ship to a PO Box address.','postcode-eu-address-validation'));currentStatus='poBoxNotAllowed'}else{fillAddressFieldsNl(result.address);setFieldValidity(postcodeField);setFieldValidity(houseNumberField);container.find('.postcode-eu-autofill-intl').trigger('address-result',result);toggleAddressFields(addressFields,!0)}}).catch((error)=>{if(error.cause?.status===503){destruct()}}).finally(()=>postcodeField.removeClass(loadingClassName))}})()};const addAddressAutocompleteIntl=function(container,addressType){const countryToState=container.find('.country_to_state'),intlFormRow=container.find('.postcode-eu-autofill-intl'),intlField=intlFormRow.find('input'),storedAddress=storedAddresses[addressType];let autocompleteInstance=null,addressFields=checkoutElements[addressType].addressFields=getAddressFields(addressType),matches=[];const isSupportedCountryIntl=function(countryIso2){if(settings.netherlandsMode==='postcodeOnly'&&countryIso2==='NL'){return!1}
35return isSupportedCountry(countryIso2)};const fillAddressFieldsIntl=function(result){setAddressWithStorage(addressType,result.address,result.mailLines)};const reset=function(){intlField.val('');resetAddressFields(addressFields);storedAddress.clear();autocompleteInstance?.reset()};countryToState.on('change.postcode-eu',()=>window.setTimeout(()=>{const isSupported=isSupportedCountryIntl(countryToState.val());if(isSupported){reset();autocompleteInstance?.setCountry(settings.enabledCountries[countryToState.val()].iso3)}
36intlFormRow.toggle(isSupported)}));container.on('reset-address',()=>{if(isSupportedCountryIntl(countryToState.val())){reset();intlField.focus()}});const intlFieldObserver=new IntersectionObserver(function(entries){entries.forEach((entry)=>{if(!entry.isIntersecting||autocompleteInstance!==null){return}
37let deferred=$.Deferred();const selectAutocompleteAddress=function(item){const callback=(result)=>{if(result.isPoBox&&!validatePoBox(addressType)){resetAddressFields(addressFields);setFieldValidity(intlField,__('Sorry, we cannot ship to a PO Box address.','postcode-eu-address-validation'))}else{fillAddressFieldsIntl(result);toggleAddressFields(addressFields,!0);intlField.trigger('address-result',result);setFieldValidity(intlField)}
38deferred.resolve()};if(addressDetailsCache.has(item.context)){callback(addressDetailsCache.get(item.context));return}
39intlField.addClass(loadingClassName);autocompleteInstance.getDetails(item.context,(result)=>{callback(result);addressDetailsCache.set(item.context,result);intlField.removeClass(loadingClassName)})};const isSingleAddressMatch=()=>matches.length===1&&matches[0].precision==='Address';autocompleteInstance=new PostcodeNl.AutocompleteAddress(intlField[0],{autocompleteUrl:settings.actions.autocomplete,addressDetailsUrl:settings.actions.getDetails,context:(settings.enabledCountries[countryToState.val()]?.iso3??'nld').toLowerCase(),});autocompleteInstance.getSuggestions=function(context,term,response){const encodedTerm=new TextEncoder().encode(term),binaryTerm=Array.from(encodedTerm,(byte)=>String.fromCodePoint(byte)).join(''),url=this.options.autocompleteUrl.replace('${context}',encodeURIComponent(context)).replace('${term}',encodeURIComponent(btoa(binaryTerm)));return this.xhrGet(url,response)};autocompleteInstance.getDetails=function(addressId,response){const url=this.options.addressDetail
39sUrl.replace('${context}',encodeURIComponent(addressId));return this.xhrGet(url,response)};intlField[0].addEventListener('autocomplete-xhr-send',({detail:xhr})=>{xhr.setRequestHeader('X-WC-Checkout-Type','classic')});intlField[0].addEventListener('autocomplete-select',function(e){if(e.detail.precision==='Address'){selectAutocompleteAddress(e.detail)}});intlField[0].addEventListener('autocomplete-error',function(e){console.error('Autocomplete XHR error',e);intlField.removeClass(loadingClassName);if(e.detail.request.status===503){destruct();return}
40toggleAddressFields(addressFields,!0);setFieldValidity(intlField,__('An error has occurred while retrieving address data. Please contact us if the problem persists.','postcode-eu-address-validation'))});intlField[0].addEventListener('autocomplete-search',function(){resetAddressFields(addressFields)});intlField[0].addEventListener('autocomplete-response',function(e){matches=e.detail.matches;deferred=$.Deferred();deferred.fail(()=>setFieldValidity(intlField,__('Please enter an address and select it','postcode-eu-address-validation')))});intlField.on('blur',()=>{if(!1===isSingleAddressMatch()&&!1===autocompleteInstance.elements.menu.classList.contains('postcodenl-autocomplete-menu-open')){deferred.reject()}
41matches=[]});intlField.on('change focusout validate',(e)=>e.stopPropagation())})});intlFieldObserver.observe(intlFormRow[0]);intlFormRow.toggle(isSupportedCountryIntl(countryToState.val()));(()=>{if(!1===isSupportedCountryIntl(countryToState.val())){return}
42const prefilledAddressValues=getMappedAddressValues(addressType);if(prefilledAddressValues===null){return}
43const{postcode,city,streetAndHouseNumber}=prefilledAddressValues;intlField.val(`${postcode} ${city} ${streetAndHouseNumber}`.trim());if(!storedAddress.isExpired()&&storedAddress.isEqual(getAddressFieldValues(addressType))){setFieldValidity(intlField);const{mailLines}=storedAddress.get();intlFormRow.trigger('address-result',{mailLines});return}
44intlField.addClass(loadingClassName);const countryIso3=settings.enabledCountries[countryToState.val()].iso3;getValidatedAddress(countryIso3,streetAndHouseNumber,postcode,city).then((result)=>{if(result===null){resetAddressFields(addressFields);setFieldValidity(intlField,__('Please select a valid address','postcode-eu-address-validation'))}else if(result.isPoBox&&!validatePoBox(addressType)){resetAddressFields(addressFields);setFieldValidity(intlField,__('Sorry, we cannot ship to a PO Box address.','postcode-eu-address-validation'))}else{fillAddressFieldsIntl(result);setFieldValidity(intlField);intlField.trigger('address-result',result);toggleAddressFields(addressFields,!0)}}).catch((error)=>{if(error.cause?.status===503){destruct()}}).finally(()=>intlField.removeClass(loadingClassName))})()};const getMailLinesNl=function(address){return[address.streetLine,`${address.postcode}  ${address.city}`]};const addFormattedAddressOutput=function(container){const formRow=$('<div>',{class:'form-row form-row-wide postcode-eu-autofill form-row-postcode-eu-autofill-address'}),resetButton=$('<span>',{text:'✕',title:__('Remove address','postcode-eu-address-validation'),class:'postcode-eu-autofill-address-reset',click:()=>{container.trigger('reset-address');formRow.hide()},}),addressElement=$('<address>',{class:'postcode-eu-autofill-address'});formRow.append(resetButton,addressElement);container.find('.postcode-eu-autofill').last().after(formRow);container.find('.country_to_state').on('change',function(){formRow.hide()});container.find('.postcode-eu-autofill-intl').on('address-result',function(_,result){addressElement.html(result.mailLines.join('<br>'));formRow.show()});container.find('.postcode-eu-autofill-intl input').on('autocomplete-search',function(){formRow.hide()});container.find('.postcode-eu-autofill-nl').on('address-result',function(_,result){if(result.status!=='valid'){formRow.hide();return}
45addressElement.html(getMailLinesNl(result.address).join('<br>'));formRow.show()})};const addAutofillIntlBypass=function(container,addressType){const formRow=container.find('.form-row.postcode-eu-autofill-intl'),wrapper=$('<span>',{'class':'postcode-eu-autofill-intl-bypass'}),link=$('<a>',{text:settings.autofillIntlBypassLinkText});link.on('click',function(){toggleAddressFields(checkoutElements[addressType].addressFields,!0,!0);formRow.hide();return!1});wrapper.append(link);formRow.append(wrapper)};const hasUnusedShippingForm=function(){if(typeof window.checkout.ship_to_different_address==='undefined'){return!1}
46return!window.checkout.ship_to_different_address.checked};const isBillingAsShipping=function(){if(typeof window.checkout.ship_to_different_address==='undefined'){return!0}
47return!window.checkout.ship_to_different_address.checked};class StoredAddress{storageKey;constructor(addressType){this.storageKey='postcode-eu-validated-address-'+addressType}
48get(){return JSON.parse(window.localStorage.getItem(this.storageKey))??null}
49set(values,mailLines){window.localStorage.setItem(this.storageKey,JSON.stringify({timestamp:Date.now(),token:settings.localStorageToken,values:Object.fromEntries(Object.entries(values).filter(([,v])=>v!=='')),mailLines,}))}
50isEqual(values){const storedValues=this.get()?.values;return(storedValues??!1)&&Object.entries(storedValues).every(([k,v])=>values[k]===v)}
51isExpired(){const data=JSON.parse(window.localStorage.getItem(this.storageKey));return data?.timestamp+90*24*60*60*1000<Date.now()||data?.token!==settings.localStorageToken}
52clear(){window.localStorage.removeItem(this.storageKey)}}})()

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.