[Pkg-javascript-commits] [leaflet-markercluster] 379/479: Refactor to contain a FeatureGroup rather than sort of being one. Fixes all the _noHas hacks. Now we require leaflet 0.5 however.

Jonas Smedegaard dr at jones.dk
Thu Oct 16 16:00:59 UTC 2014


This is an automated email from the git hooks/post-receive script.

js pushed a commit to branch master
in repository leaflet-markercluster.

commit d47a3140ca370361264e66397911cd2d982c4b67
Author: danzel <danzel at localhost.geek.nz>
Date:   Fri Jun 21 16:14:47 2013 +1200

    Refactor to contain a FeatureGroup rather than sort of being one. Fixes all the _noHas hacks. Now we require leaflet 0.5 however.
---
 src/MarkerCluster.Spiderfier.js | 18 +++++------
 src/MarkerCluster.js            | 14 +++------
 src/MarkerClusterGroup.js       | 69 ++++++++++++++++++++---------------------
 3 files changed, 47 insertions(+), 54 deletions(-)

diff --git a/src/MarkerCluster.Spiderfier.js b/src/MarkerCluster.Spiderfier.js
index f27a884..500404e 100644
--- a/src/MarkerCluster.Spiderfier.js
+++ b/src/MarkerCluster.Spiderfier.js
@@ -88,6 +88,7 @@ L.MarkerCluster.include({
 	_noanimationUnspiderfy: function () {
 		var group = this._group,
 			map = group._map,
+			fg = group._featureGroup,
 			childMarkers = this.getAllChildMarkers(),
 			m, i;
 
@@ -95,7 +96,7 @@ L.MarkerCluster.include({
 		for (i = childMarkers.length - 1; i >= 0; i--) {
 			m = childMarkers[i];
 
-			L.FeatureGroup.prototype.removeLayer.call(group, m);
+			fg.removeLayer(m);
 
 			if (m._preSpiderfyLatlng) {
 				m.setLatLng(m._preSpiderfyLatlng);
@@ -116,6 +117,7 @@ L.MarkerCluster.include(!L.DomUtil.TRANSITION ? {
 	_animationSpiderfy: function (childMarkers, positions) {
 		var group = this._group,
 			map = group._map,
+			fg = group._featureGroup,
 			i, m, leg, newPos;
 
 		for (i = childMarkers.length - 1; i >= 0; i--) {
@@ -126,9 +128,7 @@ L.MarkerCluster.include(!L.DomUtil.TRANSITION ? {
 			m.setLatLng(newPos);
 			m.setZIndexOffset(1000000); //Make these appear on top of EVERYTHING
 
-			m._noHas = true;
-			L.FeatureGroup.prototype.addLayer.call(group, m);
-			delete m._noHas;
+			fg.addLayer(m);
 
 
 			leg = new L.Polyline([this._latlng, newPos], { weight: 1.5, color: '#222' });
@@ -152,6 +152,7 @@ L.MarkerCluster.include(!L.DomUtil.TRANSITION ? {
 		var me = this,
 			group = this._group,
 			map = group._map,
+			fg = group._featureGroup,
 			thisLayerPos = map.latLngToLayerPoint(this._latlng),
 			i, m, leg, newPos;
 
@@ -162,9 +163,7 @@ 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;
+			fg.addLayer(m);
 
 			m._setPos(thisLayerPos);
 		}
@@ -249,6 +248,7 @@ L.MarkerCluster.include(!L.DomUtil.TRANSITION ? {
 	_animationUnspiderfy: function (zoomDetails) {
 		var group = this._group,
 			map = group._map,
+			fg = group._featureGroup,
 			thisLayerPos = zoomDetails ? map._latLngToNewLayerPoint(this._latlng, zoomDetails.zoom, zoomDetails.center) : map.latLngToLayerPoint(this._latlng),
 			childMarkers = this.getAllChildMarkers(),
 			svg = L.Path.SVG && this.SVG_ANIMATION,
@@ -314,7 +314,7 @@ L.MarkerCluster.include(!L.DomUtil.TRANSITION ? {
 				m.setZIndexOffset(0);
 
 				if (stillThereChildCount > 1) {
-					L.FeatureGroup.prototype.removeLayer.call(group, m);
+					fg.removeLayer(m);
 				}
 
 				map.removeLayer(m._spiderLeg);
@@ -397,7 +397,7 @@ L.MarkerClusterGroup.include({
 	//If the given layer is currently being spiderfied then we unspiderfy it so it isn't on the map anymore etc
 	_unspiderfyLayer: function (layer) {
 		if (layer._spiderLeg) {
-			L.FeatureGroup.prototype.removeLayer.call(this, layer);
+			this._featureGroup.removeLayer(layer);
 
 			layer.setOpacity(1);
 			//Position will be fixed up immediately in _animationUnspiderfy
diff --git a/src/MarkerCluster.js b/src/MarkerCluster.js
index 45c4a8f..6288963 100644
--- a/src/MarkerCluster.js
+++ b/src/MarkerCluster.js
@@ -132,9 +132,7 @@ 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;
+		this._group._featureGroup.addLayer(this);
 	},
 
 	_recursivelyAnimateChildrenIn: function (bounds, center, maxZoom) {
@@ -215,9 +213,7 @@ L.MarkerCluster = L.Marker.extend({
 						}
 					}
 
-					nm._noHas = true;
-					L.FeatureGroup.prototype.addLayer.call(c._group, nm);
-					delete nm._noHas;
+					c._group._featureGroup.addLayer(nm);
 				}
 			},
 			function (c) {
@@ -264,7 +260,7 @@ L.MarkerCluster = L.Marker.extend({
 				for (i = c._markers.length - 1; i >= 0; i--) {
 					m = c._markers[i];
 					if (!exceptBounds || !exceptBounds.contains(m._latlng)) {
-						L.FeatureGroup.prototype.removeLayer.call(c._group, m);
+						c._group._featureGroup.removeLayer(m);
 						if (m.setOpacity) {
 							m.setOpacity(1);
 						}
@@ -276,9 +272,7 @@ L.MarkerCluster = L.Marker.extend({
 				for (i = c._childClusters.length - 1; i >= 0; i--) {
 					m = c._childClusters[i];
 					if (!exceptBounds || !exceptBounds.contains(m._latlng)) {
-						if (!L.FeatureGroup.prototype.hasLayer || L.FeatureGroup.prototype.hasLayer.call(c._group, m)) {
-							L.FeatureGroup.prototype.removeLayer.call(c._group, m);
-						}
+						c._group._featureGroup.removeLayer(m);
 						if (m.setOpacity) {
 							m.setOpacity(1);
 						}
diff --git a/src/MarkerClusterGroup.js b/src/MarkerClusterGroup.js
index 1818861..47429d0 100644
--- a/src/MarkerClusterGroup.js
+++ b/src/MarkerClusterGroup.js
@@ -37,7 +37,8 @@ L.MarkerClusterGroup = L.FeatureGroup.extend({
 			this.options.iconCreateFunction = this._defaultIconCreateFunction;
 		}
 
-		L.FeatureGroup.prototype.initialize.call(this, []);
+		this._featureGroup = L.featureGroup();
+		this._featureGroup.on(L.FeatureGroup.EVENTS, this._propagateEvent, this);
 
 		this._inZoomAnimation = 0;
 		this._needsClustering = [];
@@ -113,8 +114,8 @@ L.MarkerClusterGroup = L.FeatureGroup.extend({
 		//Remove the marker from clusters
 		this._removeLayer(layer, true);
 
-		if (layer._icon || layer._container) {
-			L.FeatureGroup.prototype.removeLayer.call(this, layer);
+		if (this._featureGroup.hasLayer(layer)) {
+			this._featureGroup.removeLayer(layer);
 			if (layer.setOpacity) {
 				layer.setOpacity(1);
 			}
@@ -125,7 +126,8 @@ L.MarkerClusterGroup = L.FeatureGroup.extend({
 
 	//Takes an array of markers and adds them in bulk
 	addLayers: function (layersArray) {
-		var i, l, m;
+		var i, l, m,
+			fg = this._featureGroup;
 		if (!this._map) {
 			this._needsClustering = this._needsClustering.concat(layersArray);
 			return this;
@@ -145,7 +147,7 @@ L.MarkerClusterGroup = L.FeatureGroup.extend({
 				if (m.__parent.getChildCount() === 2) {
 					var markers = m.__parent.getAllChildMarkers(),
 						otherMarker = markers[0] === m ? markers[1] : markers[0];
-					L.FeatureGroup.prototype.removeLayer.call(this, otherMarker);
+					fg.removeLayer(otherMarker);
 				}
 			}
 		}
@@ -183,9 +185,11 @@ L.MarkerClusterGroup = L.FeatureGroup.extend({
 
 			this._removeLayer(m, true, true);
 
-			if (m._icon) {
-				L.FeatureGroup.prototype.removeLayer.call(this, m);
-				m.setOpacity(1);
+			if (this._featureGroup.hasLayer(m)) {
+				this._featureGroup.removeLayer(m);
+				if (m.setOpacity) {
+					m.setOpacity(1);
+				}
 			}
 		}
 
@@ -218,9 +222,7 @@ L.MarkerClusterGroup = L.FeatureGroup.extend({
 		}
 
 		//Remove all the visible layers
-		for (var i in this._layers) {
-			L.FeatureGroup.prototype.removeLayer.call(this, this._layers[i]);
-		}
+		this._featureGroup.clearLayers();
 
 		this.eachLayer(function (marker) {
 			delete marker.__parent;
@@ -263,7 +265,7 @@ L.MarkerClusterGroup = L.FeatureGroup.extend({
 
 	//Returns true if the given layer is in this MarkerClusterGroup
 	hasLayer: function (layer) {
-		if (!layer || layer._noHas) {
+		if (!layer) {
 			return false;
 		}
 
@@ -328,6 +330,8 @@ L.MarkerClusterGroup = L.FeatureGroup.extend({
 		this._map = map;
 		var i, l, layer;
 
+		this._featureGroup.onAdd(map);
+
 		if (!this._gridClusters) {
 			this._generateInitialClusters();
 		}
@@ -383,9 +387,7 @@ L.MarkerClusterGroup = L.FeatureGroup.extend({
 		}
 
 		//Clean up all the layers we added to the map
-		for (var i in this._layers) {
-			L.FeatureGroup.prototype.removeLayer.call(this, this._layers[i]);
-		}
+		this._featureGroup.onRemove(map);
 
 		this._map = null;
 	},
@@ -413,6 +415,7 @@ L.MarkerClusterGroup = L.FeatureGroup.extend({
 	_removeLayer: function (marker, removeFromDistanceGrid, dontUpdateMap) {
 		var gridClusters = this._gridClusters,
 			gridUnclustered = this._gridUnclustered,
+			fg = this._featureGroup,
 			map = this._map;
 
 		//Remove the marker from distance clusters it might be in
@@ -453,11 +456,9 @@ L.MarkerClusterGroup = L.FeatureGroup.extend({
 
 				if (cluster._icon) {
 					//Cluster is currently on the map, need to put the marker on the map instead
-					L.FeatureGroup.prototype.removeLayer.call(this, cluster);
+					fg.removeLayer(cluster);
 					if (!dontUpdateMap) {
-						otherMarker._noHas = true;
-						L.FeatureGroup.prototype.addLayer.call(this, otherMarker);
-						delete otherMarker._noHas;
+						fg.addLayer(otherMarker);
 					}
 				}
 			} else {
@@ -473,12 +474,12 @@ L.MarkerClusterGroup = L.FeatureGroup.extend({
 		delete marker.__parent;
 	},
 
-	//Overrides FeatureGroup._propagateEvent
 	_propagateEvent: function (e) {
-		if (e.target instanceof L.MarkerCluster) {
+		if (e.layer instanceof L.MarkerCluster) {
 			e.type = 'cluster' + e.type;
 		}
-		L.FeatureGroup.prototype._propagateEvent.call(this, e);
+
+		this.fire(e.type, e);
 	},
 
 	//Default functionality
@@ -725,15 +726,13 @@ L.MarkerClusterGroup = L.FeatureGroup.extend({
 	//Shared animation code
 	_animationAddLayerNonAnimated: function (layer, newCluster) {
 		if (newCluster === layer) {
-			layer._noHas = true;
-			L.FeatureGroup.prototype.addLayer.call(this, layer);
-			delete layer._noHas;
+			this._featureGroup.addLayer(layer);
 		} else if (newCluster._childCount === 2) {
 			newCluster._addToMap();
 
 			var markers = newCluster.getAllChildMarkers();
-			L.FeatureGroup.prototype.removeLayer.call(this, markers[0]);
-			L.FeatureGroup.prototype.removeLayer.call(this, markers[1]);
+			this._featureGroup.removeLayer(markers[0]);
+			this._featureGroup.removeLayer(markers[1]);
 		} else {
 			newCluster._updateIcon();
 		}
@@ -774,6 +773,7 @@ L.MarkerClusterGroup.include(!L.DomUtil.TRANSITION ? {
 	_animationZoomIn: function (previousZoomLevel, newZoomLevel) {
 		var me = this,
 		    bounds = this._getExpandedVisibleBounds(),
+			fg = this._featureGroup,
 		    i;
 
 		//Add all children of current clusters to map and remove those clusters from map
@@ -783,7 +783,7 @@ L.MarkerClusterGroup.include(!L.DomUtil.TRANSITION ? {
 				m;
 
 			if (c._isSingleParent() && previousZoomLevel + 1 === newZoomLevel) { //Immediately add the new child and remove us
-				L.FeatureGroup.prototype.removeLayer.call(me, c);
+				fg.removeLayer(c);
 				c._recursivelyAddChildrenToMap(null, newZoomLevel, bounds);
 			} else {
 				//Fade out old cluster
@@ -796,7 +796,7 @@ L.MarkerClusterGroup.include(!L.DomUtil.TRANSITION ? {
 			for (i = markers.length - 1; i >= 0; i--) {
 				m = markers[i];
 				if (!bounds.contains(m._latlng)) {
-					L.FeatureGroup.prototype.removeLayer.call(me, m);
+					fg.removeLayer(m);
 				}
 			}
 
@@ -826,7 +826,7 @@ L.MarkerClusterGroup.include(!L.DomUtil.TRANSITION ? {
 		setTimeout(function () {
 			//update the positions of the just added clusters/markers
 			me._topClusterLevel._recursively(bounds, previousZoomLevel, 0, function (c) {
-				L.FeatureGroup.prototype.removeLayer.call(me, c);
+				fg.removeLayer(c);
 				c.setOpacity(1);
 			});
 
@@ -873,11 +873,10 @@ L.MarkerClusterGroup.include(!L.DomUtil.TRANSITION ? {
 		}, 200);
 	},
 	_animationAddLayer: function (layer, newCluster) {
-		var me = this;
+		var me = this,
+			fg = this._featureGroup;
 
-		layer._noHas = true;
-		L.FeatureGroup.prototype.addLayer.call(this, layer);
-		delete layer._noHas;
+		fg.addLayer(layer);
 		if (newCluster !== layer) {
 			if (newCluster._childCount > 2) { //Was already a cluster
 
@@ -889,7 +888,7 @@ L.MarkerClusterGroup.include(!L.DomUtil.TRANSITION ? {
 				layer.setOpacity(0);
 
 				setTimeout(function () {
-					L.FeatureGroup.prototype.removeLayer.call(me, layer);
+					fg.removeLayer(layer);
 					layer.setOpacity(1);
 
 					me._animationEnd();

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/leaflet-markercluster.git



More information about the Pkg-javascript-commits mailing list