1var autocomplete; 2function initAutocomplete(){ 3 autocomplete = new google.maps.places.Autocomplete( 4 document.getElementById('direccion_maps'), 5 { 6 types: ['address'], 7 fields: ['place_id', 'name', 'address_components'] 8 }); 9 10 autocomplete.addListener('place_changed', onPlaceChanged); 11} 12 13function onPlaceChanged(){ 14 const place = autocomplete.getPlace(); 15 let aInfoAdress = new Object(); 16 let postcode = ""; 17 18 if(!place.place_id){ 19 if(document.getElementById('place_details')){ 20 document.getElementById('place_details').value = ''; 21 } 22 }else{ 23 // Get each component of the address from the place details, 24 // and then fill-in the corresponding field on the form. 25 // place.address_components are google.maps.GeocoderAddressComponent objects 26 // which are documented at http://goo.gle/3l5i5Mr 27 for (const component of place.address_components) { 28 // @ts-ignore remove once typings fixed 29 const componentType = component.types[0]; 30 31 switch (componentType) { 32 case "route": { 33 aInfoAdress.direccion = component.short_name; 34 break; 35 } 36 37 case "street_number": { 38 aInfoAdress.numero_calle = `${component.long_name}`; 39 break; 40 } 41 42 case "postal_code": { 43 postcode = `${component.long_name}${postcode}`; 44 aInfoAdress.codigo_postal = postcode; 45 break; 46 } 47 48 case "postal_code_suffix": { 49 postcode = `${postcode}-${component.long_name}`; 50 aInfoAdress.codigo_postal = postcode; 51 break; 52 } 53 case "locality": 54 aInfoAdress.ciudad = component.long_name; 55 break; 56 57 case "administrative_area_level_1": { 58 aInfoAdress.provincia = component.long_name; 59 break; 60 } 61 case "country": 62 aInfoAdress.pais_code = component.short_name; 63 aInfoAdress.pais = component.long_name; 64 break; 65 } 66 } 67 68 if(document.getElementById('place_details')){ 69 var input_details = document.getElementById('place_details'); 70 input_details.value = base64EncodeUnicode(JSON.stringify(aInfoAdress)); 71 }else{ 72 let elementoPadre = document.getElementById('direccion_maps').parentElement; 73 const place_details = document.createElement("input"); 74 place_details.setAttribute("type", "hidden"); 75 place_details.setAttribute("id", "place_details"); 76 place_details.setAttribute("name", "place_details"); 77 place_details.setAttribute("value", base64EncodeUnicode(JSON.stringify(aInfoAdress))); 78 elementoPadre.appendChild(place_details); 79 } 80 } 81} 82 83function base64EncodeUnicode(str) { 84 // Primero, codifica la cadena a UTF-8 85 const utf8Bytes = encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, 86 (_, p1) => String.fromCharCode('0x' + p1) 87 ); 88 89 // Luego, aplica btoa a la cadena UTF-8 90 return btoa(utf8Bytes); 91}
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.