1var autocomplete = { 2 pro6pp_cache: {}, 3 autoCompleteTimer: 0, 4 pro6pp_auth_key: "1FulN4sT6ztTIntC", 5 6 inputPostalCode: 'PostalCode', 7 inputHouseNumber: 'HouseNumber', 8 inputCountryCode: 'CountryCode', 9 inputStreet: 'Street', 10 inputCity: 'City', 11 inputCoordinates: 'coords', 12 13 activePrefix: '', 14 15 initialize: function (formElement) { 16 17 let matchedElements = formElement.querySelectorAll( 18 "[name*='." + autocomplete.inputPostalCode + "'], [name='" + autocomplete.inputPostalCode + "'], " + 19 "[name*='." + autocomplete.inputHouseNumber + "'], [name='" + autocomplete.inputHouseNumber + "']" 20 ); 21 22 matchedElements.forEach(function (element) { 23 let prefix = ''; 24 let name = element.getAttribute('name'); 25 let dotIndex = name.indexOf('.'); 26 if (dotIndex !== -1) { 27 prefix = name.substring(0, dotIndex) + '.'; 28 } 29 30 element.onkeyup = function () { 31 autocomplete.autocomplete(formElement, prefix); 32 }; 33 }); 34 35 }, 36 37 pro6pp_cached_get: function (obj, url, callback) { 38 if (autocomplete.pro6pp_cache.hasOwnProperty(url)) { 39 callback(obj, autocomplete.pro6pp_cache[url]); 40 } else { 41 pubbleUtility.getJson(url + "&callback=?", {}, function (data) { 42 autocomplete.pro6pp_cache[url] = data; 43 callback(obj, data); 44 }); 45 } 46 }, 47 48 autocomplete: function (formElement, prefix) { 49 50 clearTimeout(autocomplete.autoCompleteTimer); 51 autocomplete.autoCompleteTimer = setTimeout(function () { 52 53 autocomplete.activePrefix = prefix; 54 55 var countryField = formElement.querySelector("[name='" + prefix + autocomplete.inputCountryCode + "']") 56 || formElement.querySelector("[name='" + autocomplete.inputCountryCode + "']"); 57 58 // pro6pp kent alleen Nederlandse postcodes, dus elders slaan we de opzoeking over. De 59 // vergelijking was hoofdlettergevoelig, en een landkeuze in een sjabloon post net zo vaak 60 // 'nl' als 'NL'. Dan haakte deze functie meteen af en bleven straat en woonplaats leeg op 61 // een adres waar wel iemand moet bezorgen (ZD 191361). 62 var country = (countryField && countryField.value || '').trim().toUpperCase(); 63 64 if (country && country !== 'NL') { 65 return; 66 } 67 68 var postcode; 69 var streetnumber; 70 71 if (formElement.querySelector("[name='" + prefix + autocomplete.inputPostalCode + "']")) { 72 postcode = formElement.querySelector("[name='" + prefix + autocomplete.inputPostalCode + "']").value; 73 } 74 75 if (formElement.querySelector("[name='" + prefix + autocomplete.inputHouseNumber + "']")) { 76 streetnumber = formElement.querySelector("[name='" + prefix + autocomplete.inputHouseNumber + "']").value; 77 } 78 79 // Trigger on '5408xb' and on '5408 xb' 80 var nl_sixpp_regex = /[0-9]{4,4}\s?[a-zA-Z]{2,2}/; 81 if (nl_sixpp_regex.test(postcode)) { 82 var url = "//api.pro6pp.nl/v1/autocomplete?auth_key=" 83 + autocomplete.pro6pp_auth_key + "&nl_sixpp=" + postcode 84 + "&streetnumber=" + streetnumber; 85 86 if (window.location.protocol == 'https:') { 87 url = "//api.pro6pp.nl/v1/autocomplete?auth_key=" 88 + autocomplete.pro6pp_auth_key + "&nl_sixpp=" + postcode 89 + "&streetnumber=" + streetnumber; 90 } 91 url = encodeURI(url); 92 autocomplete.pro6pp_cached_get(formElement, url, autocomplete.fillin); 93 } else { 94 if (formElement.querySelector("[name='" + prefix + autocomplete.inputStreet + "']")) { 95 formElement.querySelector("[name='" + prefix + autocomplete.inputStreet + "']").value = ''; 96 } 97 98 if (formElement.querySelector("[name='" + prefix + autocomplete.inputCity + "']")) { 99 formElement.querySelector("[name='" + prefix + autocomplete.inputCity + "']").value = ''; 100 } 101 102 } 103 }, 200); 104 }, 105 106 107 fillin: function (formElement, json) { 108 if (json.status == undefined) { 109 json = JSON.parse(json.substring(2)); 110 } 111 112 if (json.status == 'ok') { 113 if (json.results.length == 1) { 114 115 if (formElement.querySelector("[name='" + autocomplete.activePrefix + autocomplete.inputStreet + "']")) { 116 formElement.querySelector("[name='" + autocomplete.activePrefix + autocomplete.inputStreet + "']").value = json.results[0].street; 117 } 118 119 if (formElement.querySelector("[name='" + autocomplete.activePrefix + autocomplete.inputCity + "']")) { 120 formElement.querySelector("[name='" + autocomplete.activePrefix + autocomplete.inputCity + "']").value = json.results[0].city; 121 } 122 123 if (formElement.querySelector("[name='" + autocomplete.activePrefix + autocomplete.inputCo
123ordinates + "']")) { 124 formElement.querySelector("[name='" + autocomplete.activePrefix + autocomplete.inputCoordinates + "']").value = json.results[0].lat + "," + json.results[0].lng; 125 } 126 127 } 128 } 129 } 130};
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.