Usage
sanitizeGooglePlaceData(place, uniqueID)
Parameters
place
(Required) (object) The Google Maps place data
Default: None
uniqueID
(Optional) (string) Use this to name the address info
Default: "unnamed"
Examples
Using the Google Maps autocomplete and sanitizing place data
customMapsAutocomplete = new google.maps.places.Autocomplete( jQuery('input#mailing-address')[0], {types: ['geocode']} //Restrict the search to geographical location types ); google.maps.event.addListener(customMapsAutocomplete, 'place_changed', function(){ //When the user selects an address from the dropdown place = customMapsAutocomplete.getPlace(); //Get the place details simplePlace = sanitizeGooglePlaceData(place, 'mailing'); });
Source File
Located in /assets/js/modules/location.js on line 96.
No Hooks
This function does not have any filters or actions available. Request one?nebula.sanitizeGooglePlaceData = function(place = false, uniqueID = 'unnamed'){ if ( !place ){ nebula.help('Place data is required for sanitization.', '/functions/sanitizegoogleplacedata/'); return false; } if ( typeof nebula.user.address === 'undefined' ){ nebula.user.address = {}; } if ( !Array.isArray(nebula.user.address) ){ nebula.user.address = []; } nebula.user.address[uniqueID] = { street: { number: null, name: null }, city: null, county: null, state: { name: null, abbr: null }, country: { name: null, abbr: null }, zip: { code: null, suffix: null } }; for ( let component of place.address_components ){ //Lots of different address types. This function uses only the common ones: https://developers.google.com/maps/documentation/geocoding/#Types switch ( component.types[0] ){ case 'street_number': nebula.user.address[uniqueID].street.number = component.short_name; //123 break; case 'route': nebula.user.address[uniqueID].street.name = component.long_name; //Street Name Rd. break; case 'locality': nebula.user.address[uniqueID].city = component.long_name; //Liverpool break; case 'administrative_area_level_2': nebula.user.address[uniqueID].county = component.long_name; //Onondaga County break; case 'administrative_area_level_1': nebula.user.address[uniqueID].state.name = component.long_name; //New York nebula.user.address[uniqueID].state.abbr = component.short_name; //NY break; case 'country': nebula.user.address[uniqueID].country.name = component.long_name; //United States nebula.user.address[uniqueID].country.abbr = component.short_name; //US break; case 'postal_code': nebula.user.address[uniqueID].zip.code = component.short_name; //13088 break; case 'postal_code_suffix': nebula.user.address[uniqueID].zip.suffix = component.short_name; //4725 break; default: //console.log('Address component ' + component.types[0] + ' not used.'); } } if ( nebula.user.address[uniqueID].street.number && nebula.user.address[uniqueID].street.name ){ nebula.user.address[uniqueID].street.full = nebula.user.address[uniqueID].street.number + ' ' + nebula.user.address[uniqueID].street.name; } if ( nebula.user.address[uniqueID].zip.code && nebula.user.address[uniqueID].zip.suffix ){ nebula.user.address[uniqueID].zip.full = nebula.user.address[uniqueID].zip.code + '-' + nebula.user.address[uniqueID].zip.suffix; } return nebula.user.address[uniqueID]; };
Override
To override or disable this JavaScript function, simply redeclare it with the exact same function name. Remember: Some functionality is conditionally loaded via dynamic imports, so if your function is not overriding properly, try listening for a DOM event (described below).
For non-module import functions:
nebula.sanitizeGooglePlaceData = function(place, uniqueID){ //Write your own code here, leave it blank, or return false. }
For dynamically imported module function overrides:
jQuery(window).on('load', function(){ nebula.sanitizeGooglePlaceData = function(place, uniqueID){ //Write your own code here, leave it blank, or return false. } });
Custom Nebula DOM events do also exist, so you could also try the following if the Window Load listener does not work:
jQuery(document).on('nebula_module_loaded', function(module){ //Note that the module variable is also available to know which module specifically was imported if ( typeof nebula.sanitizeGooglePlaceData === 'function' ){ nebula.sanitizeGooglePlaceData = function(place, uniqueID){ //Write your own code here, leave it blank, or return false. } } });