Recenter marker on map pan/zoom
authorJohn Firebaugh <john.firebaugh@gmail.com>
Mon, 5 Aug 2013 19:27:37 +0000 (12:27 -0700)
committerJohn Firebaugh <john.firebaugh@gmail.com>
Mon, 5 Aug 2013 19:27:37 +0000 (12:27 -0700)
app/assets/javascripts/leaflet.share.js
vendor/assets/leaflet/leaflet.js

index d58b62313b21eb62c918f5d8b1a4b1e92b637417..441acfd7463929ff65bfb9aa4e3753169f96f2af 100644 (file)
@@ -206,8 +206,9 @@ L.OSM.share = function (options) {
       .on('change', update)
       .addTo(map);
 
+    marker.on('dragend', movedMarker);
+    map.on('move', movedMap);
     map.on('moveend layeradd layerremove', update);
-    marker.on('dragend', update);
 
     options.sidebar.addPane($ui);
 
@@ -216,6 +217,7 @@ L.OSM.share = function (options) {
 
     function hidden() {
       map.removeLayer(marker);
+      map.options.scrollWheelZoom = map.options.doubleClickZoom = true;
       locationFilter.disable();
       update();
     }
@@ -235,8 +237,10 @@ L.OSM.share = function (options) {
       if ($(this).is(':checked')) {
         marker.setLatLng(map.getCenter());
         map.addLayer(marker);
+        map.options.scrollWheelZoom = map.options.doubleClickZoom = 'center';
       } else {
         map.removeLayer(marker);
+        map.options.scrollWheelZoom = map.options.doubleClickZoom = true;
       }
       update();
     }
@@ -251,11 +255,26 @@ L.OSM.share = function (options) {
       update();
     }
 
-    function update() {
+    function movedMap() {
+      marker.setLatLng(map.getCenter());
+      update();
+    }
+
+    function movedMarker() {
       if (map.hasLayer(marker)) {
+        map.off('move', movedMap);
+        map.on('moveend', updateOnce);
         map.panTo(marker.getLatLng());
       }
+    }
 
+    function updateOnce() {
+      map.off('moveend', updateOnce);
+      map.on('move', movedMap);
+      update();
+    }
+
+    function update() {
       var bounds = map.getBounds();
 
       $('#link_marker')
index 794496b35130fb5121ef764b3947b33187787ff5..17fbc626bb6ee31558e28885711b3801eaeb34dc 100644 (file)
@@ -6765,15 +6765,22 @@ L.Map.mergeOptions({
 
 L.Map.DoubleClickZoom = L.Handler.extend({
        addHooks: function () {
-               this._map.on('dblclick', this._onDoubleClick);
+               this._map.on('dblclick', this._onDoubleClick, this);
        },
 
        removeHooks: function () {
-               this._map.off('dblclick', this._onDoubleClick);
+               this._map.off('dblclick', this._onDoubleClick, this);
        },
 
        _onDoubleClick: function (e) {
-               this.setZoomAround(e.containerPoint, this._zoom + 1);
+               var map = this._map,
+                   zoom = map.getZoom() + 1;
+
+               if (map.options.doubleClickZoom === 'center') {
+                       map.setZoom(zoom);
+               } else {
+                       map.setZoomAround(e.containerPoint, zoom);
+               }
        }
 });
 
@@ -6833,7 +6840,11 @@ L.Map.ScrollWheelZoom = L.Handler.extend({
 
                if (!delta) { return; }
 
-               map.setZoomAround(this._lastMousePos, zoom + delta);
+               if (map.options.scrollWheelZoom === 'center') {
+                       map.setZoom(zoom + delta);
+               } else {
+                       map.setZoomAround(this._lastMousePos, zoom + delta);
+               }
        }
 });