in core/src/main/resources/org/apache/karaf/webconsole/core/behavior/dracula/dracula_algorithms.js [566:599]
function topological_sort_helper(g) {
//Find node with no incoming edges
var node;
for(i in g.nodes) {
if(g.nodes[i].deleted)
continue; //Bad style, meh
var incoming = false;
for(j in g.nodes[i].edges) {
if(g.nodes[i].edges[j].target == g.nodes[i]
&& g.nodes[i].edges[j].source.deleted == false) {
incoming = true;
break;
}
}
if(!incoming) {
node = g.nodes[i];
break;
}
}
// Either unsortable or done. Either way, GTFO
if(node == undefined)
return [];
//"Delete" node from g
node.deleted = true;
var tail = topological_sort_helper(g);
tail.unshift(node);
return tail;
}