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