From 9ba24aba42b38fca1f922d0eb74932e769e9e3f1 Mon Sep 17 00:00:00 2001 From: jaxxed <jaxxed@48927.no-reply.drupal.org> Date: Sun, 5 May 2013 16:12:13 +0300 Subject: [PATCH] Issue #1980340 by jaxxed: Added lockpick.js binds for locpick change don't respond if there was no original locpick marker. --- js/locpick.js | 70 +++++++++++++++++++++++++-------------------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/js/locpick.js b/js/locpick.js index bdd80ae..48ca802 100644 --- a/js/locpick.js +++ b/js/locpick.js @@ -4,20 +4,46 @@ * Location chooser interface. */ -/*global $, Drupal, GEvent, GLatLng, GMarker */ +/*global $, Drupal, google.maps */ (function ($) { Drupal.gmap.addHandler('gmap', function (elem) { var obj = this; - var binding = obj.bind("locpickchange", function () { - if (obj.locpick_coord) { - google.maps.event.trigger(obj.map, "click", { 'latLng': obj.locpick_coord }); + var binding = obj.bind("locpickchange", function (position) { + if ( position && position.lat ) { // you passed a valid position + obj.locpick_coord = position; + obj.locpick_invalid = false; + } + obj.locpick_invalid = !(obj.locpick_coord && obj.locpick_coord.lat);// has a proper coord has been set since we last checked + if (obj.locpick_invalid) { + return; // invalid coord + } + + if (!obj.locpick_point) { + obj.locpick_point = new google.maps.Marker({ // should we use obj.bind('addmarker',-1,{position:obj.locpick_coord}); ? + position: obj.locpick_coord, + map: obj.map, + draggable: true + }); + + google.maps.event.addListener(obj.locpick_point, 'drag', function () { + obj.locpick_coord = new google.maps.LatLng(obj.locpick_point.getPosition().lat(), obj.locpick_point.getPosition().lng()); + obj.change('locpickchange', binding); + }); + google.maps.event.addListener(obj.locpick_point, 'dragend', function () { + obj.locpick_coord = new google.maps.LatLng(obj.locpick_point.getPosition().lat(), obj.locpick_point.getPosition().lng()); + obj.change('locpickchange', binding); + }); + obj.map.panTo(obj.locpick_coord); + obj.change('locpickchange', binding); + } + else { + obj.locpick_point.setPosition(obj.locpick_coord); } }); obj.bind("locpickremove", function () { - //obj.map.removeOverlay(obj.locpick_point); if (obj.locpick_point) obj.locpick_point.setMap(null); obj.locpick_point = null; obj.locpick_coord = null; @@ -31,33 +57,12 @@ Drupal.gmap.addHandler('gmap', function (elem) { google.maps.event.addListener(obj.map, "click", function (event) { google.maps.event.trigger(obj.map, "resize"); if (event) { - if (!obj.locpick_point) { - obj.locpick_point = new google.maps.Marker({ - position: event.latLng, - map: obj.map, - draggable: true - }); - } - else { - obj.locpick_point.setPosition(event.latLng); - } - google.maps.event.addListener(obj.locpick_point, 'drag', function () { - //obj.locpick_coord = obj.locpick_point.getLatLng(); - obj.locpick_coord = new google.maps.LatLng(obj.locpick_point.position.lat(), obj.locpick_point.position.lng()); - obj.change('locpickchange', binding); - }); - google.maps.event.addListener(obj.locpick_point, 'dragend', function () { - //obj.locpick_coord = obj.locpick_point.getLatLng(); - obj.locpick_coord = new google.maps.LatLng(obj.locpick_point.position.lat(), obj.locpick_point.position.lng()); - obj.change('locpickchange', binding); - }); obj.locpick_coord = event.latLng; - obj.map.panTo(event.latLng); - obj.change('locpickchange', binding); + obj.change('locpickchange'); } else { // Unsetting the location - obj.change('locpickremove', -1); + obj.change('locpickremove'); } }); } @@ -67,7 +72,7 @@ Drupal.gmap.addHandler('gmap', function (elem) { // Fake a click to set the initial point, if one was set. if (obj.vars.behavior.locpick) { if (!obj.locpick_invalid) { - obj.change('locpickchange', -1); + obj.change('locpickchange'); } } }); @@ -80,7 +85,6 @@ Drupal.gmap.addHandler('locpick_latitude', function (elem) { obj.bind("init", function () { if (elem.value !== '') { obj.vars.latitude = Number(elem.value); - //obj.locpick_coord = new GLatLng(obj.vars.latitude, obj.vars.longitude); obj.locpick_coord = new google.maps.LatLng(obj.vars.latitude, obj.vars.longitude); } else { @@ -101,12 +105,10 @@ Drupal.gmap.addHandler('locpick_latitude', function (elem) { $(elem).change(function () { if (elem.value !== '') { if (obj.locpick_coord) { - //obj.locpick_coord = new GLatLng(Number(elem.value), obj.locpick_coord.lng()); obj.locpick_coord = new google.maps.LatLng(Number(elem.value), obj.locpick_coord.lng()); obj.change('locpickchange', binding); } else { - //obj.locpick_coord = new GLatLng(Number(elem.value), 0.0); obj.locpick_coord = new google.maps.LatLng(Number(elem.value), 0.0); } } @@ -142,17 +144,15 @@ Drupal.gmap.addHandler('locpick_longitude', function (elem) { $(elem).change(function () { if (elem.value !== '') { if (obj.locpick_coord) { - //obj.locpick_coord = new GLatLng(obj.locpick_coord.lat(), Number(elem.value)); obj.locpick_coord = new google.maps.LatLng(obj.locpick_coord.lat(), Number(elem.value)); obj.change('locpickchange', binding); } else { - //obj.locpick_coord = new GLatLng(0.0, Number(elem.value)); obj.locpick_coord = new google.maps.LatLng(0.0, Number(elem.value)); } } else { - obj.change('locpickremove', -1); + obj.change('locpickremove'); } }); }); -- GitLab