From 47c147d9a9a5d250ef80d5a2d564fced3c5a773d Mon Sep 17 00:00:00 2001 From: danzel Date: Mon, 22 Apr 2013 09:31:10 +1200 Subject: [PATCH] Cludge around our hasLayer implementation to make us work with the latest Leaflet master. Fixes #159 Our hasLayer returns true when we contains a marker. FeatureGroup/LayerGroup (which we inherit from) now check hasLayer when addLayer is called. At this stage our hasLayer will return true, stopping the marker from ending up on the map. --- src/MarkerCluster.Spiderfier.js | 2 ++ src/MarkerCluster.js | 8 +++++++- src/MarkerClusterGroup.js | 4 ++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/MarkerCluster.Spiderfier.js b/src/MarkerCluster.Spiderfier.js index 268bdd4a2..300ed8745 100644 --- a/src/MarkerCluster.Spiderfier.js +++ b/src/MarkerCluster.Spiderfier.js @@ -152,7 +152,9 @@ L.MarkerCluster.include(!L.DomUtil.TRANSITION ? { m.setZIndexOffset(1000000); //Make these appear on top of EVERYTHING m.setOpacity(0); + m._noHas = true; L.FeatureGroup.prototype.addLayer.call(group, m); + delete m._noHas; m._setPos(thisLayerPos); } diff --git a/src/MarkerCluster.js b/src/MarkerCluster.js index 7c493d42d..bd2a7f30a 100644 --- a/src/MarkerCluster.js +++ b/src/MarkerCluster.js @@ -132,7 +132,9 @@ L.MarkerCluster = L.Marker.extend({ this._backupLatlng = this._latlng; this.setLatLng(startPos); } + this._noHas = true; L.FeatureGroup.prototype.addLayer.call(this._group, this); + delete this._noHas; }, _recursivelyAnimateChildrenIn: function (bounds, center, maxZoom) { @@ -211,7 +213,9 @@ L.MarkerCluster = L.Marker.extend({ nm.setOpacity(0); } + nm._noHas = true; L.FeatureGroup.prototype.addLayer.call(c._group, nm); + delete nm._noHas; } }, function (c) { @@ -268,7 +272,9 @@ L.MarkerCluster = L.Marker.extend({ for (i = c._childClusters.length - 1; i >= 0; i--) { m = c._childClusters[i]; if (!exceptBounds || !exceptBounds.contains(m._latlng)) { - L.FeatureGroup.prototype.removeLayer.call(c._group, m); + if (L.FeatureGroup.prototype.hasLayer.call(c._group, m)) { + L.FeatureGroup.prototype.removeLayer.call(c._group, m); + } m.setOpacity(1); } } diff --git a/src/MarkerClusterGroup.js b/src/MarkerClusterGroup.js index a694dd640..72a799a98 100644 --- a/src/MarkerClusterGroup.js +++ b/src/MarkerClusterGroup.js @@ -266,6 +266,10 @@ L.MarkerClusterGroup = L.FeatureGroup.extend({ //Returns true if the given layer is in this MarkerClusterGroup hasLayer: function (layer) { + if (layer._noHas) { + return false; + } + if (this._needsClustering.length > 0) { var anArray = this._needsClustering; for (var i = anArray.length - 1; i >= 0; i--) {