UNPKG

d3-graphviz

Version:

Graphviz DOT rendering and animated transitions for D3

159 lines (151 loc) 4.21 kB
<!DOCTYPE html> <meta charset="utf-8"> <body> <script src="../node_modules/d3/dist/d3.js"></script> <script src="../node_modules/@hpcc-js/wasm/dist/graphviz.umd.js" type="javascript/worker"></script> <script src="../build/d3-graphviz.js"></script> <div id="graph" style="text-align: center;"></div> <script> var dotIndex = 0; var graphviz = d3.select("#graph").graphviz() .transition(function () { return d3.transition() .ease(d3.easeLinear) .delay(0) .duration(2000); }) .logEvents(true) .on("initEnd", render); function attributer(datum, index, nodes) { var selection = d3.select(this); if (datum.tag == "svg") { var width = "960"; var height = "500"; selection .attr("width", width) .attr("height", height); datum.attributes.width = width; datum.attributes.height = height; } else if (datum.tag == "ellipse" || (datum.tag == "polygon" && datum.attributes.stroke != "transparent")) { selection .attr("stroke", "green") .attr("fill", "yellow"); datum.attributes.stroke = "blue"; datum.attributes.fill = "red"; } else if (datum.tag == "polygon" && datum.attributes.stroke == "transparent") { datum.attributes.stroke = "black"; datum.attributes["stroke-width"] = "1"; } } function render() { var dotLines = dots[dotIndex]; var dot = dotLines.join(''); graphviz .dot(dot) .attributer(attributer) .render() .on('end', function () { render(); }); dotIndex = (dotIndex + 1) % dots.length; } var dots = [ [ 'digraph {', ' node [style="filled"]', ' a [fillcolor="#d62728"]', ' b [fillcolor="#1f77b4"]', ' a -> b', '}' ], [ 'digraph {', ' node [style="filled"]', ' a [fillcolor="#d62728"]', ' c [fillcolor="#2ca02c"]', ' b [fillcolor="#1f77b4"]', ' a -> b', ' a -> c', '}' ], [ 'digraph {', ' node [style="filled"]', ' a [fillcolor="#d62728"]', ' b [fillcolor="#1f77b4"]', ' c [fillcolor="#2ca02c"]', ' a -> b', ' a -> c', '}' ], [ 'digraph {', ' node [style="filled"]', ' a [fillcolor="#d62728", shape="box"]', ' b [fillcolor="#1f77b4", shape="parallelogram"]', ' c [fillcolor="#2ca02c", shape="pentagon"]', ' a -> b', ' a -> c', ' b -> c', '}' ], [ 'digraph {', ' node [style="filled"]', ' a [fillcolor="yellow", shape="star"]', ' b [fillcolor="yellow", shape="star"]', ' c [fillcolor="yellow", shape="star"]', ' a -> b', ' a -> c', ' b -> c', '}' ], [ 'digraph {', ' node [style="filled"]', ' a [fillcolor="#d62728", shape="triangle"]', ' b [fillcolor="#1f77b4", shape="diamond"]', ' c [fillcolor="#2ca02c", shape="trapezium"]', ' a -> b', ' a -> c', ' b -> c', '}' ], [ 'digraph {', ' node [style="filled"]', ' a [fillcolor="#d62728", shape="box"]', ' b [fillcolor="#1f77b4", shape="parallelogram"]', ' c [fillcolor="#2ca02c", shape="pentagon"]', ' a -> b', ' a -> c', ' b -> c', '}' ], [ 'digraph {', ' node [style="filled"]', ' a [fillcolor="#d62728"]', ' b [fillcolor="#1f77b4"]', ' c [fillcolor="#2ca02c"]', ' a -> b', ' a -> c', ' c -> b', '}' ], [ 'digraph {', ' node [style="filled"]', ' b [fillcolor="#1f77b4"]', ' c [fillcolor="#2ca02c"]', ' c -> b', '}' ], [ 'digraph {', ' node [style="filled"]', ' b [fillcolor="#1f77b4"]', '}' ], ]; </script>