This repository has been archived on 2025-01-19. You can view files and clone it, but cannot push or open issues or pull requests.
drupalcampbristol/web/modules/contrib/webform/js/webform.element.location.geocomplete.js
2018-11-23 12:29:20 +00:00

68 lines
2.3 KiB
JavaScript

/**
* @file
* JavaScript behaviors for Geocomplete location integration.
*/
(function ($, Drupal) {
'use strict';
// @see https://ubilabs.github.io/geocomplete/
// @see https://developers.google.com/maps/documentation/javascript/reference?csw=1#MapOptions
Drupal.webform = Drupal.webform || {};
Drupal.webform.locationGeocomplete = Drupal.webform.locationGeocomplete || {};
Drupal.webform.locationGeocomplete.options = Drupal.webform.locationGeocomplete.options || {};
/**
* Initialize location geocomplete.
*
* @type {Drupal~behavior}
*/
Drupal.behaviors.webformLocationGeocomplete = {
attach: function (context) {
if (!$.fn.geocomplete) {
return;
}
$(context).find('.js-webform-type-webform-location-geocomplete').once('webform-location-geocomplete').each(function () {
var $element = $(this);
var $input = $element.find('.webform-location-geocomplete');
// Display a map.
var $map = null;
if ($input.attr('data-webform-location-geocomplete-map')) {
$map = $('<div class="webform-location-geocomplete-map"><div class="webform-location-geocomplete-map--container"></div></div>').insertAfter($input).find('.webform-location-geocomplete-map--container');
}
var options = $.extend({
details: $element,
detailsAttribute: 'data-webform-location-geocomplete-attribute',
types: ['geocode'],
map: $map,
geocodeAfterResult: false,
restoreValueAfterBlur: true,
mapOptions: {
disableDefaultUI: true,
zoomControl: true
}
}, Drupal.webform.locationGeocomplete.options);
var $geocomplete = $input.geocomplete(options);
// If there is default value look up location's attributes, else see if
// the default value should be set to the browser's current geolocation.
var value = $geocomplete.val();
if (value) {
$geocomplete.geocomplete('find', value);
}
else if (navigator.geolocation && $geocomplete.attr('data-webform-location-geocomplete-geolocation')) {
navigator.geolocation.getCurrentPosition(function (position) {
$geocomplete.geocomplete('find', position.coords.latitude + ', ' + position.coords.longitude);
});
}
});
}
};
})(jQuery, Drupal);