commit 163634d14cd275a9e03ae630e40d3ace09c1adf8
parent e2042845f2ddd63a4007b7e67b3e0944bd3cd206
Author: Sergej Orlov <wladimirych@gmail.com>
Date:   Sat, 18 Feb 2017 16:50:11 +0300
unified stopping mouse events for all controls
Diffstat:
10 files changed, 56 insertions(+), 33 deletions(-)
diff --git a/src/App.js b/src/App.js
@@ -22,6 +22,7 @@ import enableLayersConfig from 'lib/leaflet.control.layers.configure';
 import hashState from 'lib/leaflet.hashState/hashState';
 import raiseControlsOnFocus from 'lib/leaflet.controls.raise-on-focus';
 import getLayers from 'layers';
+import 'lib/leaflet.control.layers.events';
 
 
 
diff --git a/src/lib/leaflet.control.caption/index.js b/src/lib/leaflet.control.caption/index.js
@@ -1,5 +1,6 @@
 import L from 'leaflet';
 import './style.css';
+import 'lib/leaflet.control.commons';
 
 L.Control.Caption = L.Control.extend({
     options: {
@@ -14,10 +15,8 @@ L.Control.Caption = L.Control.extend({
 
     onAdd: function (map) {
         this._container = L.DomUtil.create('div', this.options.className);
+        this._stopContainerEvents();
         this._container.innerHTML = this._contents;
-        if (L.DomEvent) {
-            L.DomEvent.disableClickPropagation(this._container);
-        }
         return this._container;
     }
 
diff --git a/src/lib/leaflet.control.commons/index.js b/src/lib/leaflet.control.commons/index.js
@@ -0,0 +1,14 @@
+import L from 'leaflet';
+
+L.Control.include({
+    _stopContainerEvents: function() {
+        const container = this._container;
+        L.DomEvent.disableClickPropagation(container);
+        if (!L.Browser.touch) {
+            L.DomEvent.disableScrollPropagation(container);
+        } else {
+            L.DomEvent.on(container, 'mousemove', L.DomEvent.stop);
+        }
+
+    }
+});
diff --git a/src/lib/leaflet.control.coordinates/index.js b/src/lib/leaflet.control.coordinates/index.js
@@ -2,6 +2,7 @@ import L from 'leaflet'
 import './coordinates.css';
 import copyToClipboard from 'lib/clipboardCopy';
 import Contextmenu from 'lib/contextmenu';
+import 'lib/leaflet.control.commons';
 
 function pad(s, n) {
     var j = s.indexOf('.');
@@ -23,15 +24,11 @@ L.Control.Coordinates = L.Control.extend({
         onAdd: function(map) {
             this._map = map;
             var container = this._container = L.DomUtil.create('div', 'leaflet-control leaflet-control-button leaflet-control-coordinates');
-            L.DomEvent.disableClickPropagation(container);
-            if (!L.Browser.touch) {
-                L.DomEvent.disableScrollPropagation(container);
-            }
+            this._stopContainerEvents();
             this._field_lat = L.DomUtil.create('div', 'leaflet-control-coordinates-text', container);
             this._field_lon = L.DomUtil.create('div', 'leaflet-control-coordinates-text', container);
             L.DomEvent
                 .on(container, {
-                        'dblclick': L.DomEvent.stop,
                         'click': this.onClick
                     }, this);
             map.on('mousemove', this.onMouseMove, this);
diff --git a/src/lib/leaflet.control.elevation-profile/index.js b/src/lib/leaflet.control.elevation-profile/index.js
@@ -2,6 +2,7 @@ import L from 'leaflet';
 import './elevation-profile.css';
 import {fetch} from 'lib/xhr-promise';
 import config from 'config';
+import 'lib/leaflet.control.commons';
 
 function createSvg(tagName, attributes, parent) {
     var element = document.createElementNS('http://www.w3.org/2000/svg', tagName);
@@ -218,13 +219,7 @@ L.Control.ElevationProfile = L.Class.extend({
         addTo: function(map) {
             this._map = map;
             var container = this._container = L.DomUtil.create('div', 'elevation-profile-container');
-            if (!L.Browser.touch) {
-                L.DomEvent
-                    .disableClickPropagation(container)
-                    .disableScrollPropagation(container);
-            } else {
-                L.DomEvent.on(container, 'click', L.DomEvent.stopPropagation);
-            }
+            L.Control.prototype._stopContainerEvents.call(this);
             this._map._controlContainer.appendChild(container);
             this.setupContainerLayout();
             this.updateGraph();
diff --git a/src/lib/leaflet.control.layers.events/index.js b/src/lib/leaflet.control.layers.events/index.js
@@ -0,0 +1,25 @@
+import L from 'leaflet';
+import 'lib/leaflet.control.commons';
+
+const originalLayerOnAdd = L.Control.Layers.prototype.onAdd;
+
+L.Control.Layers.include({
+    onAdd: function(map) {
+        const container = originalLayerOnAdd.call(this, map);
+        this._stopContainerEvents();
+        return container;
+
+    }
+});
+
+const originalZoomOnAdd = L.Control.Zoom.prototype.onAdd;
+
+L.Control.Zoom.include({
+    onAdd: function(map) {
+        const container = originalZoomOnAdd.call(this, map);
+        this._container = container;
+        this._stopContainerEvents();
+        return container;
+
+    }
+});
diff --git a/src/lib/leaflet.control.panoramas/index.js b/src/lib/leaflet.control.panoramas/index.js
@@ -3,6 +3,7 @@ import './style.css';
 import 'lib/controls-styles/controls-styles.css';
 import getGoogle from 'lib/googleMapsApi';
 import 'lib/leaflet.hashState/leaflet.hashState';
+import 'lib/leaflet.control.commons';
 
 L.Control.Panoramas = L.Control.extend({
         includes: L.Mixin.Events,
@@ -25,12 +26,9 @@ L.Control.Panoramas = L.Control.extend({
 
         onAdd: function(map) {
             this._map = map;
-            const container = L.DomUtil.create('a', 'leaflet-control leaflet-control-button leaflet-contol-panoramas');
+            const container = this._container = L.DomUtil.create('a', 'leaflet-control leaflet-control-button leaflet-contol-panoramas');
+            this._stopContainerEvents();
             container.title = 'Show panoramas';
-            L.DomEvent.disableClickPropagation(container);
-            if (!L.Browser.touch) {
-                L.DomEvent.disableScrollPropagation(container);
-            }
             L.DomEvent.on(container, 'click', this.onButtonClick, this);
 
             map.createPane('rasterOverlay').style.zIndex = 300;
diff --git a/src/lib/leaflet.control.printPages/control.js b/src/lib/leaflet.control.printPages/control.js
@@ -12,6 +12,7 @@ import {makePdf} from './pdf';
 import {saveAs} from 'browser-filesaver';
 import {blobFromString} from 'lib/binary-strings';
 import 'lib/leaflet.hashState/leaflet.hashState';
+import 'lib/leaflet.control.commons';
 
 ko.extenders.checkNumberRange = function(target, range) {
     return ko.pureComputed({
@@ -87,10 +88,7 @@ L.Control.PrintPages = L.Control.extend({
             this._map = map;
             const container = this._container =
                 L.DomUtil.create('div', 'leaflet-control control-form control-print-pages');
-            L.DomEvent.disableClickPropagation(container);
-            if (!L.Browser.touch) {
-                L.DomEvent.disableScrollPropagation(container);
-            }
+            this._stopContainerEvents();
 
             map.on('move', this.updateFormZooms, this);
             container.innerHTML = formHtml;
diff --git a/src/lib/leaflet.control.track-list/control-ruler.js b/src/lib/leaflet.control.track-list/control-ruler.js
@@ -3,6 +3,7 @@ import './track-list';
 import './ruler.css';
 import 'lib/controls-styles/controls-styles.css';
 import './track-list';
+import 'lib/leaflet.control.commons';
 
 L.Control.TrackList.Ruler = L.Control.extend({
     options: {
@@ -16,11 +17,8 @@ L.Control.TrackList.Ruler = L.Control.extend({
 
     onAdd: function(map) {
         this._map = map;
-        const container = L.DomUtil.create('div', 'leaflet-control leaflet-control-button leaflet-control-ruler');
-        L.DomEvent.disableClickPropagation(container);
-        if (!L.Browser.touch) {
-            L.DomEvent.disableScrollPropagation(container);
-        }
+        const container = this._container = L.DomUtil.create('div', 'leaflet-control leaflet-control-button leaflet-control-ruler');
+        this._stopContainerEvents();
         L.DomEvent.on(container, 'click', this.onClick, this);
         return container;
     },
diff --git a/src/lib/leaflet.control.track-list/track-list.js b/src/lib/leaflet.control.track-list/track-list.js
@@ -17,6 +17,7 @@ import 'lib/leaflet.lineutil.simplifyLatLngs';
 import iconFromBackgroundImage from 'lib/iconFromBackgroundImage';
 import 'lib/controls-styles/controls-styles.css';
 import 'lib/leaflet.control.elevation-profile';
+import 'lib/leaflet.control.commons';
 
 var MeasuredEditableLine = L.MeasuredLine.extend({});
 MeasuredEditableLine.include(L.Polyline.EditMixin);
@@ -42,10 +43,7 @@ L.Control.TrackList = L.Control.extend({
             this.map = map;
             this.tracks.removeAll();
             var container = this._container = L.DomUtil.create('div', 'leaflet-control leaflet-control-tracklist');
-            L.DomEvent.disableClickPropagation(container);
-            if (!L.Browser.touch) {
-                L.DomEvent.disableScrollPropagation(container);
-            }
+            this._stopContainerEvents();
 
             container.innerHTML = `
                 <div class="leaflet-control-button-toggle" data-bind="click: setExpanded"></div>