feat(ui): add type filter toggles
This commit is contained in:
86
node_modules/dagre/lib/parent-dummy-chains.js
generated
vendored
Normal file
86
node_modules/dagre/lib/parent-dummy-chains.js
generated
vendored
Normal file
@@ -0,0 +1,86 @@
|
||||
var _ = require("./lodash");
|
||||
|
||||
module.exports = parentDummyChains;
|
||||
|
||||
function parentDummyChains(g) {
|
||||
var postorderNums = postorder(g);
|
||||
|
||||
_.forEach(g.graph().dummyChains, function(v) {
|
||||
var node = g.node(v);
|
||||
var edgeObj = node.edgeObj;
|
||||
var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w);
|
||||
var path = pathData.path;
|
||||
var lca = pathData.lca;
|
||||
var pathIdx = 0;
|
||||
var pathV = path[pathIdx];
|
||||
var ascending = true;
|
||||
|
||||
while (v !== edgeObj.w) {
|
||||
node = g.node(v);
|
||||
|
||||
if (ascending) {
|
||||
while ((pathV = path[pathIdx]) !== lca &&
|
||||
g.node(pathV).maxRank < node.rank) {
|
||||
pathIdx++;
|
||||
}
|
||||
|
||||
if (pathV === lca) {
|
||||
ascending = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (!ascending) {
|
||||
while (pathIdx < path.length - 1 &&
|
||||
g.node(pathV = path[pathIdx + 1]).minRank <= node.rank) {
|
||||
pathIdx++;
|
||||
}
|
||||
pathV = path[pathIdx];
|
||||
}
|
||||
|
||||
g.setParent(v, pathV);
|
||||
v = g.successors(v)[0];
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Find a path from v to w through the lowest common ancestor (LCA). Return the
|
||||
// full path and the LCA.
|
||||
function findPath(g, postorderNums, v, w) {
|
||||
var vPath = [];
|
||||
var wPath = [];
|
||||
var low = Math.min(postorderNums[v].low, postorderNums[w].low);
|
||||
var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim);
|
||||
var parent;
|
||||
var lca;
|
||||
|
||||
// Traverse up from v to find the LCA
|
||||
parent = v;
|
||||
do {
|
||||
parent = g.parent(parent);
|
||||
vPath.push(parent);
|
||||
} while (parent &&
|
||||
(postorderNums[parent].low > low || lim > postorderNums[parent].lim));
|
||||
lca = parent;
|
||||
|
||||
// Traverse from w to LCA
|
||||
parent = w;
|
||||
while ((parent = g.parent(parent)) !== lca) {
|
||||
wPath.push(parent);
|
||||
}
|
||||
|
||||
return { path: vPath.concat(wPath.reverse()), lca: lca };
|
||||
}
|
||||
|
||||
function postorder(g) {
|
||||
var result = {};
|
||||
var lim = 0;
|
||||
|
||||
function dfs(v) {
|
||||
var low = lim;
|
||||
_.forEach(g.children(v), dfs);
|
||||
result[v] = { low: low, lim: lim++ };
|
||||
}
|
||||
_.forEach(g.children(), dfs);
|
||||
|
||||
return result;
|
||||
}
|
||||
Reference in New Issue
Block a user