| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- // geo-location shim
- // Source: https://gist.github.com/366184
- // currentely only serves lat/long
- // depends on jQuery
- ;(function(geolocation, $){
- if (geolocation) return;
- var cache;
- geolocation = window.navigator.geolocation = {};
- geolocation.getCurrentPosition = function(callback){
- if (cache) callback(cache);
- $.getScript('//www.google.com/jsapi',function(){
- cache = {
- coords : {
- "latitude": google.loader.ClientLocation.latitude,
- "longitude": google.loader.ClientLocation.longitude
- }
- };
- callback(cache);
- });
- };
- geolocation.watchPosition = geolocation.getCurrentPosition;
- })(navigator.geolocation, jQuery);
- ;(function ($) {
- Drupal.behaviors.geofieldGeolocation = {
- attach: function (context, settings) {
- // callback for getCurrentPosition
- function updateLocation(position) {
- $fields.find('.auto-geocode .geofield-lat').val(position.coords.latitude);
- $fields.find('.auto-geocode .geofield-lon').val(position.coords.longitude);
- }
- // don't do anything if we're on field configuration
- if (!$(context).find("#edit-instance").length) {
- var $fields = $(context);
- // check that we have something to fill up
- // on muti values check only that the first one is empty
- if ($fields.find('.auto-geocode .geofield-lat').val() == '' && $fields.find('.auto-geocode .geofield-lon').val() == '') {
- // Check to see if we have geolocation support, either natively or through Google.
- if (navigator.geolocation) {
- navigator.geolocation.getCurrentPosition(updateLocation);
- }
- }
- }
- $(':input[name="geofield-html5-geocode-button"]').once('geofield_geolocation').click(function(e) {
- e.preventDefault();
- $fields = $(this).parents('.auto-geocode').parent();
- if (navigator.geolocation) {
- navigator.geolocation.getCurrentPosition(updateLocation);
- }
- })
- }
- };
- })(jQuery);
|