[Pkg-javascript-commits] [leaflet-markercluster] 63/479: _recursivelyAddLayer works, possible still some small bugs.

Jonas Smedegaard dr at jones.dk
Thu Oct 16 16:00:10 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 bd4780cc1efb5f67ccf687cb141e85d0dbaf0ac5
Author: danzel <danzel at localhost.geek.nz>
Date:   Fri Jul 20 15:22:17 2012 +1200

    _recursivelyAddLayer works, possible still some small bugs.
---
 src/MarkerCluster.js      | 51 +++++++++++++++++++-------------------
 src/MarkerClusterGroup.js | 63 ++++++++++++++++++++++++++++-------------------
 2 files changed, 64 insertions(+), 50 deletions(-)

diff --git a/src/MarkerCluster.js b/src/MarkerCluster.js
index c2e5f10..5515329 100644
--- a/src/MarkerCluster.js
+++ b/src/MarkerCluster.js
@@ -77,43 +77,45 @@ L.MarkerCluster = L.Marker.extend({
 	},
 
 	//layer: The layer to try add
+	//returns:
+	//  true: was able to put this marker in, but don't know its current visible parents position
+	//  false: wasn't able to put this marker in
+	//  a Marker/MarkerCluster: the visible parent of the marker (or the marker itself if it should be visible)
 	_recursivelyAddLayer: function (layer, zoom) {
-		var childReturn = null,
-			added = false;
+		var result = false;
 
 		if (!this._haveGeneratedChildClusters && this._canAcceptPosition(layer.getLatLng(), zoom)) {
 			//Don't need to cluster it in as we haven't clustered
 			this._addChild(layer);
-			added = true;
+			result = true;
 		} else {
 			for (var i = this._childClusters.length - 1; i >= 0; i--) {
 				var c = this._childClusters[i];
 				//Recurse into children where their bounds fits the layer or they can just take it
 				if (c._bounds.contains(layer.getLatLng()) || c._canAcceptPosition(layer.getLatLng(), zoom + 1)) {
-					childReturn = c._recursivelyAddLayer(layer, zoom + 1);
-					if (childReturn !== false) {
-						added = true;
+					result = c._recursivelyAddLayer(layer, zoom + 1);
+					if (result) {
 						break;
 					}
 				}
 			}
 
-			//Couldn't add it to a child, but it should be part of us
-			if (!added && this._canAcceptPosition(layer.getLatLng(), zoom)) {
+			//Couldn't add it to a child, but it should be part of us (this._zoom -> we are the root node)
+			if (!result && (this._canAcceptPosition(layer.getLatLng(), zoom) || this._zoom)) {
 
 				//Add to ourself instead
-				var newCluster = this._group._clusterOne(this._markers, layer, zoom);
-				if (newCluster && newCluster._markers[0]._icon) {
-					//Remove children and add cluster
-					newCluster._recursivelyRemoveChildrenFromMap(newCluster._bounds, 0);
-					newCluster._addToMap();
-				}
-				this._addChild(newCluster || layer);
+				result = this._group._clusterOne(this._markers, layer, zoom);
 
-				added = true;
+				if (result) {
+					result._baseInit();
+					this._addChild(result);
+				} else {
+					this._addChild(layer);
+					result = true;
+				}
 			}
 
-			if (added) {
+			if (result) {
 				this._childCount++;
 				if (this._icon) {
 					this.setIcon(this._group.options.iconCreateFunction(this._childCount));
@@ -121,16 +123,15 @@ L.MarkerCluster = L.Marker.extend({
 			}
 		}
 
-		if (!added) {
-			if (this._zoom) { //Means we are the root node, we get it anyway
-				this._addChild(layer);
+		if (result === true) {
+			if (this._icon) {
+				result = this;
+			} else if ((this._markers.length > 0 && this._markers[0]._icon) || (this._childClusters.length > 1 && this._childClusters[0]._icon)) {
+				result = layer;
 			}
-			console.log('not added');
-			return false;
-		} else {
-			console.log('added ' + (this._icon ? this._latlng : childReturn));
-			return this._icon ? this._latlng : childReturn;
 		}
+
+		return result;
 	},
 
 	_canAcceptPosition: function (latlng, zoom) {
diff --git a/src/MarkerClusterGroup.js b/src/MarkerClusterGroup.js
index 8260595..ca4cf43 100644
--- a/src/MarkerClusterGroup.js
+++ b/src/MarkerClusterGroup.js
@@ -130,33 +130,41 @@ L.MarkerClusterGroup = L.FeatureGroup.extend({
 		}
 
 		var me = this,
-			position;
+			newCluster;
 
 		//If we have already clustered we'll need to add this one to a cluster
-		L.FeatureGroup.prototype.addLayer.call(this, layer); //TODO: If not animated maybe don't add it yet
 
-		position = this._topClusterLevel._recursivelyAddLayer(layer, this._topClusterLevel._zoom);
+		newCluster = this._topClusterLevel._recursivelyAddLayer(layer, this._topClusterLevel._zoom);
 
-		if (position) {
-			//TODO Tidy up
-			//this._animateSingleMarkerIn(layer, position);
-			setTimeout(function () {
-				me._animationStart.call(me);
+		//TODO: This is the animated version
+		L.FeatureGroup.prototype.addLayer.call(this, layer);
+		if (newCluster != layer) {
+			if (newCluster._childCount > 2) { //Was already a cluster
 
-				var backupLatlng = layer.getLatLng();
+				setTimeout(function () {
+
+					me._animationStart.call(me);
+
+					var backupLatlng = layer.getLatLng();
+					layer.setLatLng(newCluster._latlng);
+					layer.setOpacity(0);
 
-				layer.setLatLng(position);
+					setTimeout(function () {
+						L.FeatureGroup.prototype.removeLayer.call(me, layer);
+						layer.setLatLng(backupLatlng);
 
+						//HACKS
+						map._mapPane.className = map._mapPane.className.replace(' leaflet-cluster-anim', ''); me._inZoomAnimation--;
+					}, 250);
+				}, 0);
+
+			} else { //Just became a cluster
 				setTimeout(function () {
-					L.FeatureGroup.prototype.removeLayer.call(me, layer);
-					layer.setLatLng(backupLatlng);
-
-					//HACKS
-					map._mapPane.className = map._mapPane.className.replace(' leaflet-cluster-anim', ''); me._inZoomAnimation--;
-				}, 250);
-			}, 0);
-		} else {
-			//Do nothing, marker should be shown on map at own position at this level
+					me._animationStart();
+					me._animationZoomOutSingle(newCluster, 0, 1);
+				}, 0);
+				//newCluster._recursivelyAnimateChildrenInAndAddSelfToMap(newCluster._bounds, 0, 1);
+			}
 		}
 
 		return this;
@@ -379,16 +387,21 @@ L.MarkerClusterGroup.include(!L.DomUtil.TRANSITION ? {
 			me._inZoomAnimation--;
 		}, 250);
 	},
+
 	_animationZoomOut: function (previousZoomLevel, newZoomLevel) {
-		var map = this._map,
-		    bounds = this._getExpandedVisibleBounds(),
-		    depthToStartAt = 1 + newZoomLevel - this._topClusterLevel._zoom,
+		var depthToStartAt = 1 + newZoomLevel - this._topClusterLevel._zoom,
 		    depthToAnimateIn = previousZoomLevel - newZoomLevel;
 
+		this._animationZoomOutSingle(this._topClusterLevel, depthToStartAt, depthToAnimateIn);
+	},
+	_animationZoomOutSingle: function (marker, depthToStartAt, depthToAnimateIn) {
+		var map = this._map,
+		    bounds = this._getExpandedVisibleBounds();
+
 		console.log('animationZoomOut ' + depthToStartAt + ' ' + depthToAnimateIn);
 
 		//Animate all of the markers in the clusters to move to their cluster center point
-		this._topClusterLevel._recursivelyAnimateChildrenInAndAddSelfToMap(bounds, depthToStartAt, depthToAnimateIn);
+		marker._recursivelyAnimateChildrenInAndAddSelfToMap(bounds, depthToStartAt, depthToAnimateIn);
 
 		this._inZoomAnimation++;
 
@@ -396,7 +409,7 @@ L.MarkerClusterGroup.include(!L.DomUtil.TRANSITION ? {
 
 		//Immediately fire an event to update the opacity (If we immediately set it they won't animate)
 		setTimeout(function () {
-			me._topClusterLevel._recursivelyBecomeVisible(bounds, depthToStartAt);
+			marker._recursivelyBecomeVisible(bounds, depthToStartAt);
 		}, 0);
 
 		//TODO: Maybe use the transition timing stuff to make this more reliable
@@ -404,7 +417,7 @@ L.MarkerClusterGroup.include(!L.DomUtil.TRANSITION ? {
 		setTimeout(function () {
 
 			map._mapPane.className = map._mapPane.className.replace(' leaflet-cluster-anim', '');
-			me._topClusterLevel._recursively(bounds, depthToStartAt, 0, null, function (c) {
+			marker._recursively(bounds, depthToStartAt, 0, null, function (c) {
 				c._recursivelyRemoveChildrenFromMap(bounds, depthToAnimateIn - 1);
 			});
 			me._inZoomAnimation--;

-- 
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