vendor/assets/vis/graph/graphMixins/HierarchicalLayoutMixin.js in vis-rails-0.0.6 vs vendor/assets/vis/graph/graphMixins/HierarchicalLayoutMixin.js in vis-rails-1.0.0

- old
+ new

@@ -1,8 +1,20 @@ var HierarchicalLayoutMixin = { + + _resetLevels : function() { + for (var nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + var node = this.nodes[nodeId]; + if (node.preassignedLevel == false) { + node.level = -1; + } + } + } + }, + /** * This is the main function to layout the nodes in a hierarchical way. * It checks if the node details are supplied correctly * * @private @@ -10,10 +22,13 @@ _setupHierarchicalLayout : function() { if (this.constants.hierarchicalLayout.enabled == true) { if (this.constants.hierarchicalLayout.direction == "RL" || this.constants.hierarchicalLayout.direction == "DU") { this.constants.hierarchicalLayout.levelSeparation *= -1; } + else { + this.constants.hierarchicalLayout.levelSeparation = Math.abs(this.constants.hierarchicalLayout.levelSeparation); + } // get the size of the largest hubs and check if the user has defined a level for a node. var hubsize = 0; var node, nodeId; var definedLevel = false; var undefinedLevel = false; @@ -33,11 +48,11 @@ } } // if the user defined some levels but not all, alert and run without hierarchical layout if (undefinedLevel == true && definedLevel == true) { - alert("To use the hierarchical layout, nodes require either no predefined levels or levels have to be defined for all nodes.") + alert("To use the hierarchical layout, nodes require either no predefined levels or levels have to be defined for all nodes."); this.zoomExtent(true,this.constants.clustering.enabled); if (!this.constants.clustering.enabled) { this.start(); } } @@ -94,11 +109,11 @@ this._placeBranchNodes(node.edges,node.id,distribution,node.level); } } // stabilize the system after positioning. This function calls zoomExtent. - this._doStabilize(); + this._stabilize(); }, /** * This function get the distribution of levels based on hubsize @@ -106,11 +121,11 @@ * @returns {Object} * @private */ _getDistribution : function() { var distribution = {}; - var nodeId, node; + var nodeId, node, level; // we fix Y because the hierarchy is vertical, we fix X so we do not give a node an x position for a second time. // the fix of X is removed after the x value has been set. for (nodeId in this.nodes) { if (this.nodes.hasOwnProperty(nodeId)) { @@ -131,19 +146,19 @@ } } // determine the largest amount of nodes of all levels var maxCount = 0; - for (var level in distribution) { + for (level in distribution) { if (distribution.hasOwnProperty(level)) { if (maxCount < distribution[level].amount) { maxCount = distribution[level].amount; } } } // set the initial position and spacing of each nodes accordingly - for (var level in distribution) { + for (level in distribution) { if (distribution.hasOwnProperty(level)) { distribution[level].nodeSpacing = (maxCount + 1) * this.constants.hierarchicalLayout.nodeSpacing; distribution[level].nodeSpacing /= (distribution[level].amount + 1); distribution[level].minPos = distribution[level].nodeSpacing - (0.5 * (distribution[level].amount + 1) * distribution[level].nodeSpacing); } \ No newline at end of file