|  |  | @ -5,7 +5,7 @@ | 
			
		
	
		
			
				
					|  |  |  | * A dynamic, browser-based visualization library. | 
			
		
	
		
			
				
					|  |  |  | * | 
			
		
	
		
			
				
					|  |  |  | * @version 0.4.0-SNAPSHOT | 
			
		
	
		
			
				
					|  |  |  | * @date    2014-01-21 | 
			
		
	
		
			
				
					|  |  |  | * @date    2014-01-22 | 
			
		
	
		
			
				
					|  |  |  | * | 
			
		
	
		
			
				
					|  |  |  | * @license | 
			
		
	
		
			
				
					|  |  |  | * Copyright (C) 2011-2014 Almende B.V, http://almende.com | 
			
		
	
	
		
			
				
					|  |  | @ -10893,7 +10893,7 @@ var SectorMixin = { | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  | /** | 
			
		
	
		
			
				
					|  |  |  | * This runs a function in all active sectors. This is used in _redraw() and the _calculateForces(). | 
			
		
	
		
			
				
					|  |  |  | * This runs a function in all active sectors. This is used in _redraw() and the _initializeForceCalculation(). | 
			
		
	
		
			
				
					|  |  |  | * | 
			
		
	
		
			
				
					|  |  |  | * @param {String} runFunction  |   This is the NAME of a function we want to call in all active sectors | 
			
		
	
		
			
				
					|  |  |  | *                              |   we dont pass the function itself because then the "this" is the window object | 
			
		
	
	
		
			
				
					|  |  | @ -12143,7 +12143,7 @@ function Graph (container, data, options) { | 
			
		
	
		
			
				
					|  |  |  | this._loadClusterSystem(); | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  | // call the sector constructor | 
			
		
	
		
			
				
					|  |  |  | this._loadSectorSystem(); // would be fantastic if multiple in heritance just worked! | 
			
		
	
		
			
				
					|  |  |  | this._loadSectorSystem(); | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  | var graph = this; | 
			
		
	
		
			
				
					|  |  |  | this.freezeSimulation = false;// freeze the simulation | 
			
		
	
	
		
			
				
					|  |  | @ -13705,7 +13705,7 @@ Graph.prototype._doStabilize = function() { | 
			
		
	
		
			
				
					|  |  |  | var vmin = this.constants.minVelocity; | 
			
		
	
		
			
				
					|  |  |  | var stable = false; | 
			
		
	
		
			
				
					|  |  |  | while (!stable && count < this.constants.maxIterations) { | 
			
		
	
		
			
				
					|  |  |  | this._calculateForces(); | 
			
		
	
		
			
				
					|  |  |  | this._initializeForceCalculation(); | 
			
		
	
		
			
				
					|  |  |  | this._discreteStepNodes(); | 
			
		
	
		
			
				
					|  |  |  | stable = !this._isMoving(vmin); | 
			
		
	
		
			
				
					|  |  |  | count++; | 
			
		
	
	
		
			
				
					|  |  | @ -13716,6 +13716,30 @@ Graph.prototype._doStabilize = function() { | 
			
		
	
		
			
				
					|  |  |  | // console.log('Stabilized in ' + (end-start) + ' ms, ' + count + ' iterations' ); // TODO: cleanup | 
			
		
	
		
			
				
					|  |  |  | }; | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  | /** | 
			
		
	
		
			
				
					|  |  |  | * Before calculating the forces, we check if we need to cluster to keep up performance and we check | 
			
		
	
		
			
				
					|  |  |  | * if there is more than one node. If it is just one node, we dont calculate anything. | 
			
		
	
		
			
				
					|  |  |  | * | 
			
		
	
		
			
				
					|  |  |  | * @private | 
			
		
	
		
			
				
					|  |  |  | */ | 
			
		
	
		
			
				
					|  |  |  | Graph.prototype._initializeForceCalculation = function() { | 
			
		
	
		
			
				
					|  |  |  | // stop calculation if there is only one node | 
			
		
	
		
			
				
					|  |  |  | if (this.nodeIndices.length == 1) { | 
			
		
	
		
			
				
					|  |  |  | this.nodes[this.nodeIndices[0]]._setForce(0,0); | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | else { | 
			
		
	
		
			
				
					|  |  |  | // if there are too many nodes on screen, we cluster without repositioning | 
			
		
	
		
			
				
					|  |  |  | if (this.nodeIndices.length > this.constants.clustering.absoluteMaxNumberOfNodes && this.constants.clustering.enabled == true) { | 
			
		
	
		
			
				
					|  |  |  | this.clusterToFit(this.constants.clustering.reduceToMaxNumberOfNodes, false); | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  | // we now start the force calculation | 
			
		
	
		
			
				
					|  |  |  | this._calculateForces(); | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | }; | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  | /** | 
			
		
	
		
			
				
					|  |  |  | * Calculate the external forces acting on the nodes | 
			
		
	
		
			
				
					|  |  |  | * Forces are caused by: edges, repulsing forces between nodes, gravity | 
			
		
	
	
		
			
				
					|  |  | @ -13729,7 +13753,7 @@ Graph.prototype._calculateForces = function() { | 
			
		
	
		
			
				
					|  |  |  | // if there are too many nodes on screen, we cluster without repositioning | 
			
		
	
		
			
				
					|  |  |  | else if (this.nodeIndices.length > this.constants.clustering.absoluteMaxNumberOfNodes && this.constants.clustering.enabled == true) { | 
			
		
	
		
			
				
					|  |  |  | this.clusterToFit(this.constants.clustering.reduceToMaxNumberOfNodes, false); | 
			
		
	
		
			
				
					|  |  |  | this._calculateForces(); | 
			
		
	
		
			
				
					|  |  |  | this._initializeForceCalculation(); | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | else { | 
			
		
	
		
			
				
					|  |  |  | this.canvasTopLeft = {"x": (0-this.translation.x)/this.scale, | 
			
		
	
	
		
			
				
					|  |  | @ -13971,7 +13995,7 @@ Graph.prototype._discreteStepNodes = function() { | 
			
		
	
		
			
				
					|  |  |  | Graph.prototype.start = function() { | 
			
		
	
		
			
				
					|  |  |  | if (!this.freezeSimulation) { | 
			
		
	
		
			
				
					|  |  |  | if (this.moving) { | 
			
		
	
		
			
				
					|  |  |  | this._doInAllActiveSectors("_calculateForces"); | 
			
		
	
		
			
				
					|  |  |  | this._doInAllActiveSectors("_initializeForceCalculation"); | 
			
		
	
		
			
				
					|  |  |  | this._doInAllActiveSectors("_discreteStepNodes"); | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
	
		
			
				
					|  |  | @ -14003,7 +14027,7 @@ Graph.prototype.start = function() { | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  | Graph.prototype.singleStep = function() { | 
			
		
	
		
			
				
					|  |  |  | if (this.moving) { | 
			
		
	
		
			
				
					|  |  |  | this._calculateForces(); | 
			
		
	
		
			
				
					|  |  |  | this._initializeForceCalculation(); | 
			
		
	
		
			
				
					|  |  |  | this._discreteStepNodes(); | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  | var vmin = this.constants.minVelocity; | 
			
		
	
	
		
			
				
					|  |  |  |