summaryrefslogtreecommitdiff
path: root/static/d3-graphviz.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--static/d3-graphviz.js2198
-rw-r--r--static/d3-graphviz.js.map1
2 files changed, 2199 insertions, 0 deletions
diff --git a/static/d3-graphviz.js b/static/d3-graphviz.js
new file mode 100644
index 0000000..6f6082b
--- /dev/null
+++ b/static/d3-graphviz.js
@@ -0,0 +1,2198 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-selection'), require('d3-dispatch'), require('d3-transition'), require('d3-timer'), require('d3-interpolate'), require('d3-zoom'), require('@hpcc-js/wasm'), require('d3-format'), require('d3-path')) :
+ typeof define === 'function' && define.amd ? define(['exports', 'd3-selection', 'd3-dispatch', 'd3-transition', 'd3-timer', 'd3-interpolate', 'd3-zoom', '@hpcc-js/wasm', 'd3-format', 'd3-path'], factory) :
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global['d3-graphviz'] = {}, global.d3, global.d3, global.d3, global.d3, global.d3, global.d3, global['@hpcc-js/wasm'], global.d3, global.d3));
+}(this, (function (exports, d3, d3Dispatch, d3Transition, d3Timer, d3Interpolate, d3Zoom, wasm, d3Format, d3Path) { 'use strict';
+
+ function _interopNamespace(e) {
+ if (e && e.__esModule) return e;
+ var n = Object.create(null);
+ if (e) {
+ Object.keys(e).forEach(function (k) {
+ if (k !== 'default') {
+ var d = Object.getOwnPropertyDescriptor(e, k);
+ Object.defineProperty(n, k, d.get ? d : {
+ enumerable: true,
+ get: function () {
+ return e[k];
+ }
+ });
+ }
+ });
+ }
+ n['default'] = e;
+ return Object.freeze(n);
+ }
+
+ var d3__namespace = /*#__PURE__*/_interopNamespace(d3);
+
+ function extractElementData(element) {
+
+ var datum = {};
+ var tag = element.node().nodeName;
+ datum.tag = tag;
+ if (tag == '#text') {
+ datum.text = element.text();
+ } else if (tag == '#comment') {
+ datum.comment = element.text();
+ }
+ datum.attributes = {};
+ var attributes = element.node().attributes;
+ if (attributes) {
+ for (var i = 0; i < attributes.length; i++) {
+ var attribute = attributes[i];
+ var name = attribute.name;
+ var value = attribute.value;
+ datum.attributes[name] = value;
+ }
+ }
+ var transform = element.node().transform;
+ if (transform && transform.baseVal.numberOfItems != 0) {
+ var matrix = transform.baseVal.consolidate().matrix;
+ datum.translation = {x: matrix.e, y: matrix.f};
+ datum.scale = matrix.a;
+ }
+ if (tag == 'ellipse') {
+ datum.center = {
+ x: datum.attributes.cx,
+ y: datum.attributes.cy,
+ };
+ }
+ if (tag == 'polygon') {
+ var points = element.attr('points').split(' ');
+ var x = points.map(function(p) {return p.split(',')[0]});
+ var y = points.map(function(p) {return p.split(',')[1]});
+ var xmin = Math.min.apply(null, x);
+ var xmax = Math.max.apply(null, x);
+ var ymin = Math.min.apply(null, y);
+ var ymax = Math.max.apply(null, y);
+ var bbox = {
+ x: xmin,
+ y: ymin,
+ width: xmax - xmin,
+ height: ymax - ymin,
+ };
+ datum.bbox = bbox;
+ datum.center = {
+ x: (xmin + xmax) / 2,
+ y: (ymin + ymax) / 2,
+ };
+ }
+ if (tag == 'path') {
+ var d = element.attr('d');
+ var points = d.split(/[A-Z ]/);
+ points.shift();
+ var x = points.map(function(p) {return +p.split(',')[0]});
+ var y = points.map(function(p) {return +p.split(',')[1]});
+ var xmin = Math.min.apply(null, x);
+ var xmax = Math.max.apply(null, x);
+ var ymin = Math.min.apply(null, y);
+ var ymax = Math.max.apply(null, y);
+ var bbox = {
+ x: xmin,
+ y: ymin,
+ width: xmax - xmin,
+ height: ymax - ymin,
+ };
+ datum.bbox = bbox;
+ datum.center = {
+ x: (xmin + xmax) / 2,
+ y: (ymin + ymax) / 2,
+ };
+ datum.totalLength = element.node().getTotalLength();
+ }
+ if (tag == 'text') {
+ datum.center = {
+ x: element.attr('x'),
+ y: element.attr('y'),
+ };
+ }
+ if (tag == '#text') {
+ datum.text = element.text();
+ } else if (tag == '#comment') {
+ datum.comment = element.text();
+ }
+ return datum
+ }
+
+ function extractAllElementsData(element) {
+
+ var datum = extractElementData(element);
+ datum.children = [];
+ var children = d3__namespace.selectAll(element.node().childNodes);
+ children.each(function () {
+ var childData = extractAllElementsData(d3__namespace.select(this));
+ childData.parent = datum;
+ datum.children.push(childData);
+ });
+ return datum;
+ }
+
+ function createElement(data) {
+
+ if (data.tag == '#text') {
+ return document.createTextNode("");
+ } else if (data.tag == '#comment') {
+ return document.createComment(data.comment);
+ } else {
+ return document.createElementNS('http://www.w3.org/2000/svg', data.tag);
+ }
+ }
+
+ function createElementWithAttributes(data) {
+
+ var elementNode = createElement(data);
+ var element = d3__namespace.select(elementNode);
+ var attributes = data.attributes;
+ for (var attributeName of Object.keys(attributes)) {
+ var attributeValue = attributes[attributeName];
+ element.attr(attributeName, attributeValue);
+ }
+ return elementNode;
+ }
+
+ function replaceElement(element, data) {
+ var parent = d3__namespace.select(element.node().parentNode);
+ var newElementNode = createElementWithAttributes(data);
+ var newElement = parent.insert(function () {
+ return newElementNode;
+ }, function () {
+ return element.node();
+ });
+ element.remove();
+ return newElement;
+ }
+
+ function insertElementData(element, datum) {
+ element.datum(datum);
+ element.data([datum], function (d) {
+ return d.key;
+ });
+ }
+
+ function insertAllElementsData(element, datum) {
+ insertElementData(element, datum);
+ var children = d3__namespace.selectAll(element.node().childNodes);
+ children.each(function (d, i) {
+ insertAllElementsData(d3__namespace.select(this), datum.children[i]);
+ });
+ }
+
+ function insertChildren(element, index) {
+ var children = element.selectAll(function () {
+ return element.node().childNodes;
+ });
+
+ children = children
+ .data(function (d) {
+ return d.children;
+ }, function (d) {
+ return d.tag + '-' + index;
+ });
+ var childrenEnter = children
+ .enter()
+ .append(function(d) {
+ return createElement(d);
+ });
+
+ var childrenExit = children
+ .exit();
+ childrenExit = childrenExit
+ .remove();
+ children = childrenEnter
+ .merge(children);
+ var childTagIndexes = {};
+ children.each(function(childData) {
+ var childTag = childData.tag;
+ if (childTagIndexes[childTag] == null) {
+ childTagIndexes[childTag] = 0;
+ }
+ var childIndex = childTagIndexes[childTag]++;
+ attributeElement.call(this, childData, childIndex);
+ });
+ }
+
+ function attributeElement(data, index=0) {
+ var element = d3__namespace.select(this);
+ data.tag;
+ var attributes = data.attributes;
+ var currentAttributes = element.node().attributes;
+ if (currentAttributes) {
+ for (var i = 0; i < currentAttributes.length; i++) {
+ var currentAttribute = currentAttributes[i];
+ var name = currentAttribute.name;
+ if (name.split(':')[0] != 'xmlns' && currentAttribute.namespaceURI) {
+ var namespaceURIParts = currentAttribute.namespaceURI.split('/');
+ var namespace = namespaceURIParts[namespaceURIParts.length - 1];
+ name = namespace + ':' + name;
+ }
+ if (!(name in attributes)) {
+ attributes[name] = null;
+ }
+ }
+ }
+ for (var attributeName of Object.keys(attributes)) {
+ element
+ .attr(attributeName, attributes[attributeName]);
+ }
+ if (data.text) {
+ element
+ .text(data.text);
+ }
+ insertChildren(element, index);
+ }
+
+ function shallowCopyObject(obj) {
+ return Object.assign({}, obj);
+ }
+
+ function roundTo2Decimals(x) {
+ return Math.round(x * 100.0) / 100.0
+ }
+
+ function zoom(enable) {
+
+ this._options.zoom = enable;
+
+ if (this._options.zoom && !this._zoomBehavior) {
+ createZoomBehavior.call(this);
+ } else if (!this._options.zoom && this._zoomBehavior) {
+ this._zoomSelection.on(".zoom", null);
+ this._zoomBehavior = null;
+ }
+
+ return this;
+ }
+
+ function createZoomBehavior() {
+
+ function zoomed(event) {
+ var g = d3__namespace.select(svg.node().querySelector("g"));
+ g.attr('transform', event.transform);
+ }
+
+ var root = this._selection;
+ var svg = d3__namespace.select(root.node().querySelector("svg"));
+ if (svg.size() == 0) {
+ return this;
+ }
+ this._zoomSelection = svg;
+ var zoomBehavior = d3Zoom.zoom()
+ .scaleExtent(this._options.zoomScaleExtent)
+ .translateExtent(this._options.zoomTranslateExtent)
+ .interpolate(d3Interpolate.interpolate)
+ .on("zoom", zoomed);
+ this._zoomBehavior = zoomBehavior;
+ var g = d3__namespace.select(svg.node().querySelector("g"));
+ svg.call(zoomBehavior);
+ if (!this._active) {
+ translateZoomBehaviorTransform.call(this, g);
+ }
+ this._originalTransform = d3Zoom.zoomTransform(svg.node());
+
+ return this;
+ }
+ function getTranslatedZoomTransform(selection) {
+
+ // Get the current zoom transform for the top level svg and
+ // translate it uniformly with the given selection, using the
+ // difference between the translation specified in the selection's
+ // data and it's saved previous translation. The selection is
+ // normally the top level g element of the graph.
+ var oldTranslation = this._translation;
+ var oldScale = this._scale;
+ var newTranslation = selection.datum().translation;
+ var newScale = selection.datum().scale;
+ var t = d3Zoom.zoomTransform(this._zoomSelection.node());
+ if (oldTranslation) {
+ t = t.scale(1 / oldScale);
+ t = t.translate(-oldTranslation.x, -oldTranslation.y);
+ }
+ t = t.translate(newTranslation.x, newTranslation.y);
+ t = t.scale(newScale);
+ return t;
+ }
+
+ function translateZoomBehaviorTransform(selection) {
+
+ // Translate the current zoom transform for the top level svg
+ // uniformly with the given selection, using the difference
+ // between the translation specified in the selection's data and
+ // it's saved previous translation. The selection is normally the
+ // top level g element of the graph.
+ this._zoomBehavior.transform(this._zoomSelection, getTranslatedZoomTransform.call(this, selection));
+
+ // Save the selections's new translation and scale.
+ this._translation = selection.datum().translation;
+ this._scale = selection.datum().scale;
+
+ // Set the original zoom transform to the translation and scale specified in
+ // the selection's data.
+ this._originalTransform = d3Zoom.zoomIdentity.translate(selection.datum().translation.x, selection.datum().translation.y).scale(selection.datum().scale);
+ }
+
+ function resetZoom(transition) {
+
+ // Reset the zoom transform to the original zoom transform.
+ var selection = this._zoomSelection;
+ if (transition) {
+ selection = selection
+ .transition(transition);
+ }
+ selection
+ .call(this._zoomBehavior.transform, this._originalTransform);
+
+ return this;
+ }
+
+ function zoomScaleExtent(extent) {
+
+ this._options.zoomScaleExtent = extent;
+
+ return this;
+ }
+
+ function zoomTranslateExtent(extent) {
+
+ this._options.zoomTranslateExtent = extent;
+
+ return this;
+ }
+
+ function zoomBehavior() {
+ return this._zoomBehavior || null;
+ }
+
+ function zoomSelection() {
+ return this._zoomSelection || null;
+ }
+
+ function pathTween(points, d1) {
+ return function() {
+ const pointInterpolators = points.map(function(p) {
+ return d3Interpolate.interpolate([p[0][0], p[0][1]], [p[1][0], p[1][1]]);
+ });
+ return function(t) {
+ return t < 1 ? "M" + pointInterpolators.map(function(p) { return p(t); }).join("L") : d1;
+ };
+ };
+ }
+
+ function pathTweenPoints(node, d1, precision, precisionIsRelative) {
+ const path0 = node;
+ const path1 = path0.cloneNode();
+ const n0 = path0.getTotalLength();
+ const n1 = (path1.setAttribute("d", d1), path1).getTotalLength();
+
+ // Uniform sampling of distance based on specified precision.
+ const distances = [0];
+ let i = 0;
+ const dt = precisionIsRelative ? precision : precision / Math.max(n0, n1);
+ while ((i += dt) < 1) {
+ distances.push(i);
+ }
+ distances.push(1);
+
+ // Compute point-interpolators at each distance.
+ const points = distances.map(function(t) {
+ const p0 = path0.getPointAtLength(t * n0);
+ const p1 = path1.getPointAtLength(t * n1);
+ return ([[p0.x, p0.y], [p1.x, p1.y]]);
+ });
+ return points;
+ }
+
+ function data() {
+ return this._data || null;
+ }
+
+ function isEdgeElementParent(datum) {
+ return (datum.attributes.class == 'edge' || (
+ datum.tag == 'a' &&
+ datum.parent.tag == 'g' &&
+ datum.parent.parent.attributes.class == 'edge'
+ ));
+ }
+
+ function isEdgeElement(datum) {
+ return datum.parent && isEdgeElementParent(datum.parent);
+ }
+
+ function getEdgeGroup(datum) {
+ if (datum.parent.attributes.class == 'edge') {
+ return datum.parent;
+ } else { // datum.parent.tag == 'g' && datum.parent.parent.tag == 'g' && datum.parent.parent.parent.attributes.class == 'edge'
+ return datum.parent.parent.parent;
+ }
+ }
+
+ function getEdgeTitle(datum) {
+ return getEdgeGroup(datum).children.find(function (e) {
+ return e.tag == 'title';
+ });
+ }
+
+ function render(callback) {
+
+ if (this._busy) {
+ this._queue.push(this.render.bind(this, callback));
+ return this;
+ }
+ this._dispatch.call('renderStart', this);
+
+ if (this._transitionFactory) {
+ d3Timer.timeout(function () { // Decouple from time spent. See https://github.com/d3/d3-timer/issues/27
+ this._transition = d3Transition.transition(this._transitionFactory());
+ _render.call(this, callback);
+ }.bind(this), 0);
+ } else {
+ _render.call(this, callback);
+ }
+ return this;
+ }
+
+ function _render(callback) {
+
+ var transitionInstance = this._transition;
+ var fade = this._options.fade && transitionInstance != null;
+ var tweenPaths = this._options.tweenPaths;
+ var tweenShapes = this._options.tweenShapes;
+ var convertEqualSidedPolygons = this._options.convertEqualSidedPolygons;
+ var growEnteringEdges = this._options.growEnteringEdges && transitionInstance != null;
+ var attributer = this._attributer;
+ var graphvizInstance = this;
+
+ function insertChildren(element) {
+ var children = element.selectAll(function () {
+ return element.node().childNodes;
+ });
+
+ children = children
+ .data(function (d) {
+ return d.children;
+ }, function (d) {
+ return d.key;
+ });
+ var childrenEnter = children
+ .enter()
+ .append(function(d) {
+ var element = createElement(d);
+ if (d.tag == '#text' && fade) {
+ element.nodeValue = d.text;
+ }
+ return element;
+ });
+
+ if (fade || (growEnteringEdges && isEdgeElementParent(element.datum()))) {
+ var childElementsEnter = childrenEnter
+ .filter(function(d) {
+ return d.tag[0] == '#' ? null : this;
+ })
+ .each(function (d) {
+ var childEnter = d3__namespace.select(this);
+ for (var attributeName of Object.keys(d.attributes)) {
+ var attributeValue = d.attributes[attributeName];
+ childEnter
+ .attr(attributeName, attributeValue);
+ }
+ });
+ childElementsEnter
+ .filter(function(d) {
+ return d.tag == 'svg' || d.tag == 'g' ? null : this;
+ })
+ .style("opacity", 0.0);
+ }
+ var childrenExit = children
+ .exit();
+ if (attributer) {
+ childrenExit.each(attributer);
+ }
+ if (transitionInstance) {
+ childrenExit = childrenExit
+ .transition(transitionInstance);
+ if (fade) {
+ childrenExit
+ .filter(function(d) {
+ return d.tag[0] == '#' ? null : this;
+ })
+ .style("opacity", 0.0);
+ }
+ }
+ childrenExit = childrenExit
+ .remove();
+ children = childrenEnter
+ .merge(children);
+ children.each(attributeElement);
+ }
+
+ function attributeElement(data) {
+ var element = d3__namespace.select(this);
+ if (data.tag == "svg") {
+ var options = graphvizInstance._options;
+ if (options.width != null || options.height != null) {
+ var width = options.width;
+ var height = options.height;
+ if (width == null) {
+ width = data.attributes.width.replace('pt', '') * 4 / 3;
+ } else {
+ element
+ .attr("width", width);
+ data.attributes.width = width;
+ }
+ if (height == null) {
+ height = data.attributes.height.replace('pt', '') * 4 / 3;
+ } else {
+ element
+ .attr("height", height);
+ data.attributes.height = height;
+ }
+ if (!options.fit) {
+ element
+ .attr("viewBox", `0 0 ${width * 3 / 4 / options.scale} ${height * 3 / 4 / options.scale}`);
+ data.attributes.viewBox = `0 0 ${width * 3 / 4 / options.scale} ${height * 3 / 4 / options.scale}`;
+ }
+ }
+ if (options.scale != 1 && (options.fit || (options.width == null && options.height == null))) {
+ width = data.attributes.viewBox.split(' ')[2];
+ height = data.attributes.viewBox.split(' ')[3];
+ element
+ .attr("viewBox", `0 0 ${width / options.scale} ${height / options.scale}`);
+ data.attributes.viewBox = `0 0 ${width / options.scale} ${height / options.scale}`;
+ }
+ }
+ if (attributer) {
+ element.each(attributer);
+ }
+ var tag = data.tag;
+ var attributes = data.attributes;
+ var currentAttributes = element.node().attributes;
+ if (currentAttributes) {
+ for (var i = 0; i < currentAttributes.length; i++) {
+ var currentAttribute = currentAttributes[i];
+ var name = currentAttribute.name;
+ if (name.split(':')[0] != 'xmlns' && currentAttribute.namespaceURI) {
+ var namespaceURIParts = currentAttribute.namespaceURI.split('/');
+ var namespace = namespaceURIParts[namespaceURIParts.length - 1];
+ name = namespace + ':' + name;
+ }
+ if (!(name in attributes)) {
+ attributes[name] = null;
+ }
+ }
+ }
+ var convertShape = false;
+ var convertPrevShape = false;
+ if (tweenShapes && transitionInstance) {
+ if ((this.nodeName == 'polygon' || this.nodeName == 'ellipse') && data.alternativeOld) {
+ convertPrevShape = true;
+ }
+ if ((tag == 'polygon' || tag == 'ellipse') && data.alternativeNew) {
+ convertShape = true;
+ }
+ if (this.nodeName == 'polygon' && tag == 'polygon' && data.alternativeOld) {
+ var prevData = extractElementData(element);
+ var prevPoints = prevData.attributes.points;
+ if (!convertEqualSidedPolygons) {
+ var nPrevPoints = prevPoints.split(' ').length;
+ var points = data.attributes.points;
+ var nPoints = points.split(' ').length;
+ if (nPoints == nPrevPoints) {
+ convertShape = false;
+ convertPrevShape = false;
+ }
+ }
+ }
+ if (convertPrevShape) {
+ var prevPathData = data.alternativeOld;
+ var pathElement = replaceElement(element, prevPathData);
+ pathElement.data([data], function () {
+ return data.key;
+ });
+ element = pathElement;
+ }
+ if (convertShape) {
+ var newPathData = data.alternativeNew;
+ tag = 'path';
+ attributes = newPathData.attributes;
+ }
+ }
+ var elementTransition = element;
+ if (transitionInstance) {
+ elementTransition = elementTransition
+ .transition(transitionInstance);
+ if (fade) {
+ elementTransition
+ .filter(function(d) {
+ return d.tag[0] == '#' ? null : this;
+ })
+ .style("opacity", 1.0);
+ }
+ elementTransition
+ .filter(function(d) {
+ return d.tag[0] == '#' ? null : this;
+ })
+ .on("end", function(d) {
+ d3__namespace.select(this)
+ .attr('style', (d && d.attributes && d.attributes.style) || null);
+ });
+ }
+ var growThisPath = growEnteringEdges && tag == 'path' && data.offset;
+ if (growThisPath) {
+ var totalLength = data.totalLength;
+ element
+ .attr("stroke-dasharray", totalLength + " " + totalLength)
+ .attr("stroke-dashoffset", totalLength)
+ .attr('transform', 'translate(' + data.offset.x + ',' + data.offset.y + ')');
+ attributes["stroke-dashoffset"] = 0;
+ attributes['transform'] = 'translate(0,0)';
+ elementTransition
+ .attr("stroke-dashoffset", attributes["stroke-dashoffset"])
+ .attr('transform', attributes['transform'])
+ .on("start", function() {
+ d3__namespace.select(this)
+ .style('opacity', null);
+ })
+ .on("end", function() {
+ d3__namespace.select(this)
+ .attr('stroke-dashoffset', null)
+ .attr('stroke-dasharray', null)
+ .attr('transform', null);
+ });
+ }
+ var moveThisPolygon = growEnteringEdges && tag == 'polygon' && isEdgeElement(data) && data.offset && data.parent.children[3].tag == 'path';
+ if (moveThisPolygon) {
+ var edgePath = d3__namespace.select(element.node().parentNode.querySelector("path"));
+ var p0 = edgePath.node().getPointAtLength(0);
+ var p1 = edgePath.node().getPointAtLength(data.totalLength);
+ var p2 = edgePath.node().getPointAtLength(data.totalLength - 1);
+ var angle1 = Math.atan2(p1.y - p2.y, p1.x - p2.x) * 180 / Math.PI;
+ var x = p0.x - p1.x + data.offset.x;
+ var y = p0.y - p1.y + data.offset.y;
+ element
+ .attr('transform', 'translate(' + x + ',' + y + ')');
+ elementTransition
+ .attrTween("transform", function () {
+ return function (t) {
+ var p = edgePath.node().getPointAtLength(data.totalLength * t);
+ var p2 = edgePath.node().getPointAtLength(data.totalLength * t + 1);
+ var angle = Math.atan2(p2.y - p.y, p2.x - p.x) * 180 / Math.PI - angle1;
+ x = p.x - p1.x + data.offset.x * (1 - t);
+ y = p.y - p1.y + data.offset.y * (1 - t);
+ return 'translate(' + x + ',' + y + ') rotate(' + angle + ' ' + p1.x + ' ' + p1.y + ')';
+ }
+ })
+ .on("start", function() {
+ d3__namespace.select(this)
+ .style('opacity', null);
+ })
+ .on("end", function() {
+ d3__namespace.select(this).attr('transform', null);
+ });
+ }
+ var tweenThisPath = tweenPaths && transitionInstance && tag == 'path' && element.attr('d') != null;
+ for (var attributeName of Object.keys(attributes)) {
+ var attributeValue = attributes[attributeName];
+ if (tweenThisPath && attributeName == 'd') {
+ var points = (data.alternativeOld || data).points;
+ if (points) {
+ elementTransition
+ .attrTween("d", pathTween(points, attributeValue));
+ }
+ } else {
+ if (attributeName == 'transform' && data.translation) {
+ if (transitionInstance) {
+ var onEnd = elementTransition.on("end");
+ elementTransition
+ .on("start", function () {
+ if (graphvizInstance._zoomBehavior) {
+ // Update the transform to transition to, just before the transition starts
+ // in order to catch changes between the transition scheduling to its start.
+ elementTransition
+ .tween("attr.transform", function() {
+ var node = this;
+ return function(t) {
+ node.setAttribute("transform", d3Interpolate.interpolateTransformSvg(d3Zoom.zoomTransform(graphvizInstance._zoomSelection.node()).toString(), getTranslatedZoomTransform.call(graphvizInstance, element).toString())(t));
+ };
+ });
+ }
+ })
+ .on("end", function () {
+ onEnd.call(this);
+ // Update the zoom transform to the new translated transform
+ if (graphvizInstance._zoomBehavior) {
+ translateZoomBehaviorTransform.call(graphvizInstance, element);
+ }
+ });
+ } else {
+ if (graphvizInstance._zoomBehavior) {
+ // Update the transform attribute to set with the current pan translation
+ translateZoomBehaviorTransform.call(graphvizInstance, element);
+ attributeValue = getTranslatedZoomTransform.call(graphvizInstance, element).toString();
+ }
+ }
+ }
+ elementTransition
+ .attr(attributeName, attributeValue);
+ }
+ }
+ if (convertShape) {
+ elementTransition
+ .on("end", function (d, i, nodes) {
+ pathElement = d3__namespace.select(this);
+ var newElement = replaceElement(pathElement, d);
+ newElement.data([d], function () {
+ return d.key;
+ });
+ });
+ }
+ if (data.text) {
+ elementTransition
+ .text(data.text);
+ }
+ insertChildren(element);
+ }
+
+ var root = this._selection;
+
+ if (transitionInstance != null) {
+ // Ensure original SVG shape elements are restored after transition before rendering new graph
+ var jobs = this._jobs;
+ if (graphvizInstance._active) {
+ jobs.push(null);
+ return this;
+ } else {
+ root
+ .transition(transitionInstance)
+ .transition()
+ .duration(0)
+ .on("end" , function () {
+ graphvizInstance._active = false;
+ if (jobs.length != 0) {
+ jobs.shift();
+ graphvizInstance.render();
+ }
+ });
+ this._active = true;
+ }
+ }
+
+ if (transitionInstance != null) {
+ root
+ .transition(transitionInstance)
+ .on("start" , function () {
+ graphvizInstance._dispatch.call('transitionStart', graphvizInstance);
+ })
+ .on("end" , function () {
+ graphvizInstance._dispatch.call('transitionEnd', graphvizInstance);
+ })
+ .transition()
+ .duration(0)
+ .on("start" , function () {
+ graphvizInstance._dispatch.call('restoreEnd', graphvizInstance);
+ graphvizInstance._dispatch.call('end', graphvizInstance);
+ if (callback) {
+ callback.call(graphvizInstance);
+ }
+ });
+ }
+
+ var data = this._data;
+
+ var svg = root
+ .selectAll("svg")
+ .data([data], function (d) {return d.key});
+ svg = svg
+ .enter()
+ .append("svg")
+ .merge(svg);
+
+ attributeElement.call(svg.node(), data);
+
+
+ if (this._options.zoom && !this._zoomBehavior) {
+ createZoomBehavior.call(this);
+ }
+
+ graphvizInstance._dispatch.call('renderEnd', graphvizInstance);
+
+ if (transitionInstance == null) {
+ this._dispatch.call('end', this);
+ if (callback) {
+ callback.call(this);
+ }
+ }
+
+ return this;
+ }
+
+ function convertToPathData(originalData, guideData) {
+ if (originalData.tag == 'polygon') {
+ var newData = shallowCopyObject(originalData);
+ newData.tag = 'path';
+ var originalAttributes = originalData.attributes;
+ var newAttributes = shallowCopyObject(originalAttributes);
+ var newPointsString = originalAttributes.points;
+ if (guideData.tag == 'polygon') {
+ var bbox = originalData.bbox;
+ bbox.cx = bbox.x + bbox.width / 2;
+ bbox.cy = bbox.y + bbox.height / 2;
+ var pointsString = originalAttributes.points;
+ var pointStrings = pointsString.split(' ');
+ var normPoints = pointStrings.map(function(p) {var xy = p.split(','); return [xy[0] - bbox.cx, xy[1] - bbox.cy]});
+ var x0 = normPoints[normPoints.length - 1][0];
+ var y0 = normPoints[normPoints.length - 1][1];
+ for (var i = 0; i < normPoints.length; i++, x0 = x1, y0 = y1) {
+ var x1 = normPoints[i][0];
+ var y1 = normPoints[i][1];
+ var dx = x1 - x0;
+ var dy = y1 - y0;
+ if (dy == 0) {
+ continue;
+ } else {
+ var x2 = x0 - y0 * dx / dy;
+ }
+ if (0 <= x2 && x2 < Infinity && ((x0 <= x2 && x2 <= x1) || (x1 <= x2 && x2 <= x0))) {
+ break;
+ }
+ }
+ var newPointStrings = [[bbox.cx + x2, bbox.cy + 0].join(',')];
+ newPointStrings = newPointStrings.concat(pointStrings.slice(i));
+ newPointStrings = newPointStrings.concat(pointStrings.slice(0, i));
+ newPointsString = newPointStrings.join(' ');
+ }
+ newAttributes['d'] = 'M' + newPointsString + 'z';
+ delete newAttributes.points;
+ newData.attributes = newAttributes;
+ } else /* if (originalData.tag == 'ellipse') */ {
+ var newData = shallowCopyObject(originalData);
+ newData.tag = 'path';
+ var originalAttributes = originalData.attributes;
+ var newAttributes = shallowCopyObject(originalAttributes);
+ var cx = originalAttributes.cx;
+ var cy = originalAttributes.cy;
+ var rx = originalAttributes.rx;
+ var ry = originalAttributes.ry;
+ if (guideData.tag == 'polygon') {
+ var bbox = guideData.bbox;
+ bbox.cx = bbox.x + bbox.width / 2;
+ bbox.cy = bbox.y + bbox.height / 2;
+ var p = guideData.attributes.points.split(' ')[0].split(',');
+ var sx = p[0];
+ var sy = p[1];
+ var dx = sx - bbox.cx;
+ var dy = sy - bbox.cy;
+ var l = Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2));
+ var cosA = dx / l;
+ var sinA = -dy / l;
+ } else { // if (guideData.tag == 'path') {
+ // FIXME: add support for getting start position from path
+ var cosA = 1;
+ var sinA = 0;
+ }
+ var x1 = rx * cosA;
+ var y1 = -ry * sinA;
+ var x2 = rx * (-cosA);
+ var y2 = -ry * (-sinA);
+ var dx = x2 - x1;
+ var dy = y2 - y1;
+ newAttributes['d'] = 'M ' + cx + ' ' + cy + ' m ' + x1 + ',' + y1 + ' a ' + rx + ',' + ry + ' 0 1,0 ' + dx + ',' + dy + ' a ' + rx + ',' + ry + ' 0 1,0 ' + -dx + ',' + -dy + 'z';
+ delete newAttributes.cx;
+ delete newAttributes.cy;
+ delete newAttributes.rx;
+ delete newAttributes.ry;
+ newData.attributes = newAttributes;
+ }
+ return newData;
+ }
+
+ function translatePointsAttribute(pointsString, x, y) {
+ var pointStrings = pointsString.split(' ');
+ var points = pointStrings.map(function(p) {return p.split(',')});
+ var points = pointStrings.map(function(p) {return [roundTo2Decimals(+x + +p.split(',')[0]), roundTo2Decimals(+y + +p.split(',')[1])]});
+ var pointStrings = points.map(function(p) {return p.join(',')});
+ var pointsString = pointStrings.join(' ');
+ return pointsString;
+ }
+
+ function translateDAttribute(d, x, y) {
+ var pointStrings = d.split(/[A-Z ]/);
+ pointStrings.shift();
+ var commands = d.split(/[^[A-Z ]+/);
+ var points = pointStrings.map(function(p) {return p.split(',')});
+ var points = pointStrings.map(function(p) {return [roundTo2Decimals(+x + +p.split(',')[0]), roundTo2Decimals(+y + +p.split(',')[1])]});
+ var pointStrings = points.map(function(p) {return p.join(',')});
+ d = commands.reduce(function(arr, v, i) {
+ return arr.concat(v, pointStrings[i]);
+ }, []).join('');
+ return d;
+ }
+
+ function initViz() {
+
+ // force JIT compilation of Viz.js
+ try {
+ wasm.graphviz.layout("", "svg", "dot").then(() => {
+ wasm.graphvizSync().then((graphviz1) => {
+ this.layoutSync = graphviz1.layout.bind(graphviz1);
+ if (this._worker == null) {
+ this._dispatch.call("initEnd", this);
+ }
+ if (this._afterInit) {
+ this._afterInit();
+ }
+ });
+ });
+ } catch(error) {
+ }
+ if (this._worker != null) {
+ var vizURL = this._vizURL;
+ var graphvizInstance = this;
+ this._workerPort.onmessage = function(event) {
+ var callback = graphvizInstance._workerCallbacks.shift();
+ callback.call(graphvizInstance, event);
+ };
+ if (!vizURL.match(/^https?:\/\/|^\/\//i)) {
+ // Local URL. Prepend with local domain to be usable in web worker
+ vizURL = (new window.URL(vizURL, document.location.href)).href;
+ }
+ postMessage.call(this, {dot: "", engine: 'dot', vizURL: vizURL}, function(event) {
+ switch (event.data.type) {
+ case "init":
+ graphvizInstance._dispatch.call("initEnd", this);
+ break;
+ }
+ });
+ }
+ }
+
+ function postMessage(message, callback) {
+ this._workerCallbacks.push(callback);
+ this._workerPort.postMessage(message);
+ }
+
+ function layout(src, engine, vizOptions, callback) {
+ this._worker;
+ if (this._worker) {
+ postMessage.call(this, {
+ dot: src,
+ engine: engine,
+ options: vizOptions,
+ }, function (event) {
+ callback.call(this, event.data);
+ });
+ } else {
+ try {
+ var svgDoc = this.layoutSync(src, "svg", engine, vizOptions);
+ callback.call(this, {type: 'done', svg: svgDoc});
+ }
+ catch(error) {
+ callback.call(this, {type: 'error', error: error.message});
+ }
+ }
+ }
+
+ function dot(src, callback) {
+
+ var graphvizInstance = this;
+ this._worker;
+ var engine = this._options.engine;
+ var images = this._images;
+
+ this._dispatch.call("start", this);
+ this._busy = true;
+ this._dispatch.call("layoutStart", this);
+ var vizOptions = {
+ images: images,
+ };
+ if (!this._worker && this.layoutSync == null) {
+ this._afterInit = this.dot.bind(this, src, callback);
+ return this;
+ }
+ this.layout(src, engine, vizOptions, function (data) {
+ switch (data.type) {
+ case "error":
+ if (graphvizInstance._onerror) {
+ graphvizInstance._onerror(data.error);
+ } else {
+ throw data.error.message
+ }
+ break;
+ case "done":
+ var svgDoc = data.svg;
+ layoutDone.call(this, svgDoc, callback);
+ break;
+ }
+ });
+
+ return this;
+ }
+ function layoutDone(svgDoc, callback) {
+ var keyMode = this._options.keyMode;
+ var tweenPaths = this._options.tweenPaths;
+ var tweenShapes = this._options.tweenShapes;
+ if (typeof this._options.tweenPrecision == 'string' && this._options.tweenPrecision.includes('%')) {
+ var tweenPrecision = +this._options.tweenPrecision.split('%')[0] / 100;
+ var tweenPrecisionIsRelative = this._options.tweenPrecision.includes('%');
+ } else {
+ var tweenPrecision = this._options.tweenPrecision;
+ var tweenPrecisionIsRelative = false;
+ }
+ var growEnteringEdges = this._options.growEnteringEdges;
+ var dictionary = {};
+ var prevDictionary = this._dictionary || {};
+ var nodeDictionary = {};
+ var prevNodeDictionary = this._nodeDictionary || {};
+
+ function setKey(datum, index) {
+ var tag = datum.tag;
+ if (keyMode == 'index') {
+ datum.key = index;
+ } else if (tag[0] != '#') {
+ if (keyMode == 'id') {
+ datum.key = datum.attributes.id;
+ } else if (keyMode == 'title') {
+ var title = datum.children.find(function (childData) {
+ return childData.tag == 'title';
+ });
+ if (title) {
+ if (title.children.length > 0) {
+ datum.key = title.children[0].text;
+ } else {
+ datum.key = '';
+ }
+ }
+ }
+ }
+ if (datum.key == null) {
+ if (tweenShapes) {
+ if (tag == 'ellipse' || tag == 'polygon') {
+ tag = 'path';
+ }
+ }
+ datum.key = tag + '-' + index;
+ }
+ }
+
+ function setId(datum, parentData) {
+ var id = (parentData ? parentData.id + '.' : '') + datum.key;
+ datum.id = id;
+ }
+
+ function addToDictionary(datum) {
+ dictionary[datum.id] = datum;
+ }
+
+ function calculateAlternativeShapeData(datum, prevDatum) {
+ if (tweenShapes && datum.id in prevDictionary) {
+ if ((prevDatum.tag == 'polygon' || prevDatum.tag == 'ellipse' || prevDatum.tag == 'path') && (prevDatum.tag != datum.tag || datum.tag == 'polygon')) {
+ if (prevDatum.tag != 'path') {
+ datum.alternativeOld = convertToPathData(prevDatum, datum);
+ }
+ if (datum.tag != 'path') {
+ datum.alternativeNew = convertToPathData(datum, prevDatum);
+ }
+ }
+ }
+ }
+
+ function calculatePathTweenPoints(datum, prevDatum) {
+ if (tweenPaths && prevDatum && (prevDatum.tag == 'path' || (datum.alternativeOld && datum.alternativeOld.tag == 'path'))) {
+ var attribute_d = (datum.alternativeNew || datum).attributes.d;
+ if (datum.alternativeOld) {
+ var oldNode = createElementWithAttributes(datum.alternativeOld);
+ } else {
+ var oldNode = createElementWithAttributes(prevDatum);
+ }
+ (datum.alternativeOld || (datum.alternativeOld = {})).points = pathTweenPoints(oldNode, attribute_d, tweenPrecision, tweenPrecisionIsRelative);
+ }
+ }
+
+ function postProcessDataPass1Local(datum, index=0, parentData) {
+ setKey(datum, index);
+ setId(datum, parentData);
+ var id = datum.id;
+ var prevDatum = prevDictionary[id];
+ addToDictionary(datum);
+ calculateAlternativeShapeData(datum, prevDatum);
+ calculatePathTweenPoints(datum, prevDatum);
+ var childTagIndexes = {};
+ datum.children.forEach(function (childData) {
+ var childTag = childData.tag;
+ if (childTag == 'ellipse' || childTag == 'polygon') {
+ childTag = 'path';
+ }
+ if (childTagIndexes[childTag] == null) {
+ childTagIndexes[childTag] = 0;
+ }
+ var childIndex = childTagIndexes[childTag]++;
+ postProcessDataPass1Local(childData, childIndex, datum);
+ });
+ }
+
+ function addToNodeDictionary(datum) {
+ var tag = datum.tag;
+ if (growEnteringEdges && datum.parent) {
+ if (datum.parent.attributes.class == 'node') {
+ if (tag == 'title') {
+ if (datum.children.length > 0) {
+ var child = datum.children[0];
+ var nodeId = child.text;
+ } else {
+ var nodeId = '';
+ }
+ nodeDictionary[nodeId] = datum.parent;
+ }
+ }
+ }
+ }
+
+ function extractGrowingEdgesData(datum) {
+ var id = datum.id;
+ var tag = datum.tag;
+ var prevDatum = prevDictionary[id];
+ if (growEnteringEdges && !prevDatum && datum.parent) {
+ if (isEdgeElement(datum)) {
+ if (tag == 'path' || tag == 'polygon') {
+ if (tag == 'polygon') {
+ var path = datum.parent.children.find(function (e) {
+ return e.tag == 'path';
+ });
+ if (path) {
+ datum.totalLength = path.totalLength;
+ }
+ }
+ var title = getEdgeTitle(datum);
+ var child = title.children[0];
+ var nodeIds = child.text.split('->');
+ if (nodeIds.length != 2) {
+ nodeIds = child.text.split('--');
+ }
+ var startNodeId = nodeIds[0];
+ var startNode = nodeDictionary[startNodeId];
+ var prevStartNode = prevNodeDictionary[startNodeId];
+ if (prevStartNode) {
+ var i = startNode.children.findIndex(function (element, index) {
+ return element.tag == 'g';
+ });
+ if (i >= 0) {
+ var j = startNode.children[i].children.findIndex(function (element, index) {
+ return element.tag == 'a';
+ });
+ startNode = startNode.children[i].children[j];
+ }
+ var i = prevStartNode.children.findIndex(function (element, index) {
+ return element.tag == 'g';
+ });
+ if (i >= 0) {
+ var j = prevStartNode.children[i].children.findIndex(function (element, index) {
+ return element.tag == 'a';
+ });
+ prevStartNode = prevStartNode.children[i].children[j];
+ }
+ var startShapes = startNode.children;
+ for (var i = 0; i < startShapes.length; i++) {
+ if (startShapes[i].tag == 'polygon' || startShapes[i].tag == 'ellipse' || startShapes[i].tag == 'path' || startShapes[i].tag == 'text') {
+ var startShape = startShapes[i];
+ break;
+ }
+ }
+ var prevStartShapes = prevStartNode.children;
+ for (var i = 0; i < prevStartShapes.length; i++) {
+ if (prevStartShapes[i].tag == 'polygon' || prevStartShapes[i].tag == 'ellipse' || prevStartShapes[i].tag == 'path' || prevStartShapes[i].tag == 'text') {
+ var prevStartShape = prevStartShapes[i];
+ break;
+ }
+ }
+ if (prevStartShape && startShape) {
+ datum.offset = {
+ x: prevStartShape.center.x - startShape.center.x,
+ y: prevStartShape.center.y - startShape.center.y,
+ };
+ } else {
+ datum.offset = {x: 0, y: 0};
+ }
+ }
+ }
+ }
+ }
+ }
+
+ function postProcessDataPass2Global(datum) {
+ addToNodeDictionary(datum);
+ extractGrowingEdgesData(datum);
+ datum.children.forEach(function (childData) {
+ postProcessDataPass2Global(childData);
+ });
+ }
+
+ this._dispatch.call("layoutEnd", this);
+
+ var newDoc = d3__namespace.select(document.createDocumentFragment())
+ .append('div');
+
+ var parser = new window.DOMParser();
+ var doc = parser.parseFromString(svgDoc, "image/svg+xml");
+
+ newDoc
+ .append(function() {
+ return doc.documentElement;
+ });
+
+ var newSvg = newDoc
+ .select('svg');
+
+ var data = extractAllElementsData(newSvg);
+ this._dispatch.call('dataExtractEnd', this);
+ postProcessDataPass1Local(data);
+ this._dispatch.call('dataProcessPass1End', this);
+ postProcessDataPass2Global(data);
+ this._dispatch.call('dataProcessPass2End', this);
+ this._data = data;
+ this._dictionary = dictionary;
+ this._nodeDictionary = nodeDictionary;
+
+ this._extractData = function (element, childIndex, parentData) {
+ var data = extractAllElementsData(element);
+ postProcessDataPass1Local(data, childIndex, parentData);
+ postProcessDataPass2Global(data);
+ return data;
+ };
+ this._busy = false;
+ this._dispatch.call('dataProcessEnd', this);
+ if (callback) {
+ callback.call(this);
+ }
+ if (this._queue.length > 0) {
+ var job = this._queue.shift();
+ job.call(this);
+ }
+ }
+
+ function renderDot(src, callback) {
+
+ var graphvizInstance = this;
+
+ this
+ .dot(src, render);
+
+ function render() {
+ graphvizInstance
+ .render(callback);
+ }
+
+ return this;
+ }
+
+ function transition(name) {
+
+ if (name instanceof Function) {
+ this._transitionFactory = name;
+ } else {
+ this._transition = d3Transition.transition(name);
+ }
+
+ return this;
+ }
+ function active(name) {
+
+ var root = this._selection;
+ var svg = root.selectWithoutDataPropagation("svg");
+ if (svg.size() != 0) {
+ return d3Transition.active(svg.node(), name);
+ } else {
+ return null;
+ }
+ }
+
+ function options(options) {
+
+ if (typeof options == 'undefined') {
+ return Object.assign({}, this._options);
+ } else {
+ for (var option of Object.keys(options)) {
+ this._options[option] = options[option];
+ }
+ return this;
+ }
+ }
+
+ function width(width) {
+
+ this._options.width = width;
+
+ return this;
+ }
+
+ function height(height) {
+
+ this._options.height = height;
+
+ return this;
+ }
+
+ function scale(scale) {
+
+ this._options.scale = scale;
+
+ return this;
+ }
+
+ function fit(fit) {
+
+ this._options.fit = fit;
+
+ return this;
+ }
+
+ function attributer(callback) {
+
+ this._attributer = callback;
+
+ return this;
+ }
+
+ function engine(engine) {
+
+ this._options.engine = engine;
+
+ return this;
+ }
+
+ function images(path, width, height) {
+
+ this._images.push({path:path, width: width, height:height});
+
+ return this;
+ }
+
+ function keyMode(keyMode) {
+
+ if (!this._keyModes.has(keyMode)) {
+ throw Error('Illegal keyMode: ' + keyMode);
+ }
+ if (keyMode != this._options.keyMode && this._data != null) {
+ throw Error('Too late to change keyMode');
+ }
+ this._options.keyMode = keyMode;
+
+ return this;
+ }
+
+ function fade(enable) {
+
+ this._options.fade = enable;
+
+ return this;
+ }
+
+ function tweenPaths(enable) {
+
+ this._options.tweenPaths = enable;
+
+ return this;
+ }
+
+ function tweenShapes(enable) {
+
+ this._options.tweenShapes = enable;
+ if (enable) {
+ this._options.tweenPaths = true;
+ }
+
+ return this;
+ }
+
+ function convertEqualSidedPolygons(enable) {
+
+ this._options.convertEqualSidedPolygons = enable;
+
+ return this;
+ }
+
+ function tweenPrecision(precision) {
+
+ this._options.tweenPrecision = precision;
+
+ return this;
+ }
+
+ function growEnteringEdges(enable) {
+
+ this._options.growEnteringEdges = enable;
+
+ return this;
+ }
+
+ function on(typenames, callback) {
+
+ this._dispatch.on(typenames, callback);
+
+ return this;
+ }
+
+ function onerror(callback) {
+
+ this._onerror = callback;
+
+ return this;
+ }
+
+ function logEvents(enable) {
+
+ var t0 = Date.now();
+ var times = {};
+ var eventTypes = this._eventTypes;
+ var maxEventTypeLength = Math.max(...(eventTypes.map(eventType => eventType.length)));
+ for (let i = 0; i < eventTypes.length; i++) {
+ let eventType = eventTypes[i];
+ times[eventType] = [];
+ var graphvizInstance = this;
+ var expectedDelay;
+ var expectedDuration;
+ this
+ .on(eventType + '.log', enable ? function () {
+ var t = Date.now();
+ var seqNo = times[eventType].length;
+ times[eventType].push(t);
+ var string = '';
+ string += 'Event ';
+ string += d3Format.format(' >2')(i) + ' ';
+ string += eventType + ' '.repeat(maxEventTypeLength - eventType.length);
+ string += d3Format.format(' >5')(t - t0) + ' ';
+ if (eventType != 'initEnd') {
+ string += d3Format.format(' >5')(t - times['start'][seqNo]);
+ }
+ if (eventType == 'dataProcessEnd') {
+ string += ' prepare ' + d3Format.format(' >5')((t - times['layoutEnd'][seqNo]));
+ }
+ if (eventType == 'renderEnd' && graphvizInstance._transition) {
+ string += ' transition start margin ' + d3Format.format(' >5')(graphvizInstance._transition.delay() - (t - times['renderStart'][seqNo]));
+ expectedDelay = graphvizInstance._transition.delay();
+ expectedDuration = graphvizInstance._transition.duration();
+ }
+ if (eventType == 'transitionStart') {
+ var actualDelay = (t - times['renderStart'][seqNo]);
+ string += ' transition delay ' + d3Format.format(' >5')(t - times['renderStart'][seqNo]);
+ string += ' expected ' + d3Format.format(' >5')(expectedDelay);
+ string += ' diff ' + d3Format.format(' >5')(actualDelay - expectedDelay);
+ }
+ if (eventType == 'transitionEnd') {
+ var actualDuration = t - times['transitionStart'][seqNo];
+ string += ' transition duration ' + d3Format.format(' >5')(actualDuration);
+ string += ' expected ' + d3Format.format(' >5')(expectedDuration);
+ string += ' diff ' + d3Format.format(' >5')(actualDuration - expectedDuration);
+ }
+ console.log(string);
+ t0 = t;
+ } : null);
+ }
+ return this;
+ }
+
+ function destroy() {
+
+ delete this._selection.node().__graphviz__;
+ if (this._worker) {
+ this._workerPortClose();
+ }
+ return this;
+ }
+
+ function rotate(x, y, cosA, sinA) {
+ // (x + j * y) * (cosA + j * sinA) = x * cosA - y * sinA + j * (x * sinA + y * cosA)
+ y = -y;
+ sinA = -sinA;
+ [x, y] = [x * cosA - y * sinA, x * sinA + y * cosA];
+ y = -y;
+ return [x, y];
+ }
+
+ function drawEdge(x1, y1, x2, y2, attributes, options={}) {
+ attributes = Object.assign({}, attributes);
+ if (attributes.style && attributes.style.includes('invis')) {
+ var newEdge = d3__namespace.select(null);
+ } else {
+ var root = this._selection;
+ var svg = root.selectWithoutDataPropagation("svg");
+ var graph0 = svg.selectWithoutDataPropagation("g");
+ var newEdge0 = createEdge.call(this, attributes);
+ var edgeData = extractAllElementsData(newEdge0);
+ var newEdge = graph0.append('g')
+ .data([edgeData]);
+ attributeElement.call(newEdge.node(), edgeData);
+ _updateEdge.call(this, newEdge, x1, y1, x2, y2, attributes, options);
+ }
+ this._drawnEdge = {
+ g: newEdge,
+ x1: x1,
+ y1: y1,
+ x2: x2,
+ y2: y2,
+ attributes: attributes,
+ };
+
+ return this;
+ }
+
+ function updateDrawnEdge(x1, y1, x2, y2, attributes={}, options={}) {
+ if (!this._drawnEdge) {
+ throw Error('No edge has been drawn');
+ }
+ var edge = this._drawnEdge.g;
+ attributes = Object.assign(this._drawnEdge.attributes, attributes);
+ this._drawnEdge.x1 = x1;
+ this._drawnEdge.y1 = y1;
+ this._drawnEdge.x2 = x2;
+ this._drawnEdge.y2 = y2;
+ if (edge.empty() && !(attributes.style && attributes.style.includes('invis'))) {
+ var root = this._selection;
+ var svg = root.selectWithoutDataPropagation("svg");
+ var graph0 = svg.selectWithoutDataPropagation("g");
+ var edge = graph0.append('g');
+ this._drawnEdge.g = edge;
+ }
+ if (!edge.empty()) {
+ _updateEdge.call(this, edge, x1, y1, x2, y2, attributes, options);
+ }
+
+ return this;
+ }
+
+ function _updateEdge(edge, x1, y1, x2, y2, attributes, options) {
+
+ var newEdge = createEdge.call(this, attributes);
+ var edgeData = extractAllElementsData(newEdge);
+ edge.data([edgeData]);
+ attributeElement.call(edge.node(), edgeData);
+ _moveEdge(edge, x1, y1, x2, y2, attributes, options);
+ }
+
+ function _moveEdge(edge, x1, y1, x2, y2, attributes, options) {
+
+ var shortening = options.shortening || 0;
+ var arrowHeadLength = 10;
+ var arrowHeadWidth = 7;
+ var margin = 0.1;
+
+ var arrowHeadPoints = [
+ [0, -arrowHeadWidth / 2],
+ [arrowHeadLength, 0],
+ [0, arrowHeadWidth / 2],
+ [0, -arrowHeadWidth / 2],
+ ];
+
+ var dx = x2 - x1;
+ var dy = y2 - y1;
+ var length = Math.sqrt(dx * dx + dy * dy);
+ if (length == 0) {
+ var cosA = 1;
+ var sinA = 0;
+ } else {
+ var cosA = dx / length;
+ var sinA = dy / length;
+ }
+ x2 = x1 + (length - shortening - arrowHeadLength - margin) * cosA;
+ y2 = y1 + (length - shortening - arrowHeadLength - margin) * sinA;
+
+ if (attributes.URL || attributes.tooltip) {
+ var a = edge.selectWithoutDataPropagation("g").selectWithoutDataPropagation("a");
+ var line = a.selectWithoutDataPropagation("path");
+ var arrowHead = a.selectWithoutDataPropagation("polygon");
+ } else {
+ var line = edge.selectWithoutDataPropagation("path");
+ var arrowHead = edge.selectWithoutDataPropagation("polygon");
+ }
+
+ var path1 = d3Path.path();
+ path1.moveTo(x1, y1);
+ path1.lineTo(x2, y2);
+
+ line
+ .attr("d", path1);
+
+ x2 = x1 + (length - shortening - arrowHeadLength) * cosA;
+ y2 = y1 + (length - shortening - arrowHeadLength) * sinA;
+ for (var i = 0; i < arrowHeadPoints.length; i++) {
+ var point = arrowHeadPoints[i];
+ arrowHeadPoints[i] = rotate(point[0], point[1], cosA, sinA);
+ }
+ for (var i = 0; i < arrowHeadPoints.length; i++) {
+ var point = arrowHeadPoints[i];
+ arrowHeadPoints[i] = [x2 + point[0], y2 + point[1]];
+ }
+ var allPoints = [];
+ for (var i = 0; i < arrowHeadPoints.length; i++) {
+ var point = arrowHeadPoints[i];
+ allPoints.push(point.join(','));
+ }
+ var pointsAttr = allPoints.join(' ');
+
+ arrowHead
+ .attr("points", pointsAttr);
+
+ return this;
+ }
+
+ function moveDrawnEdgeEndPoint(x2, y2, options={}) {
+
+ if (!this._drawnEdge) {
+ throw Error('No edge has been drawn');
+ }
+ var edge = this._drawnEdge.g;
+ var x1 = this._drawnEdge.x1;
+ var y1 = this._drawnEdge.y1;
+ var attributes = this._drawnEdge.attributes;
+
+ this._drawnEdge.x2 = x2;
+ this._drawnEdge.y2 = y2;
+ _moveEdge(edge, x1, y1, x2, y2, attributes, options);
+
+ return this
+ }
+
+ function removeDrawnEdge() {
+
+ if (!this._drawnEdge) {
+ return this;
+ }
+
+ var edge = this._drawnEdge.g;
+
+ edge.remove();
+
+ this._drawnEdge = null;
+
+ return this
+ }
+
+ function insertDrawnEdge(name) {
+
+ if (!this._drawnEdge) {
+ throw Error('No edge has been drawn');
+ }
+
+ var edge = this._drawnEdge.g;
+ if (edge.empty()) {
+ return this;
+ }
+ this._drawnEdge.attributes;
+
+ var title = edge.selectWithoutDataPropagation("title");
+ title
+ .text(name);
+
+ var root = this._selection;
+ var svg = root.selectWithoutDataPropagation("svg");
+ var graph0 = svg.selectWithoutDataPropagation("g");
+ var graph0Datum = graph0.datum();
+ var edgeData = this._extractData(edge, graph0Datum.children.length, graph0.datum());
+ graph0Datum.children.push(edgeData);
+
+ insertAllElementsData(edge, edgeData);
+
+ this._drawnEdge = null;
+
+ return this
+
+ }
+
+ function drawnEdgeSelection() {
+
+ if (this._drawnEdge) {
+ return this._drawnEdge.g;
+ } else {
+ return d3__namespace.select(null);
+ }
+
+ }
+
+
+ function createEdge(attributes) {
+ var attributesString = '';
+ for (var name of Object.keys(attributes)) {
+ if (attributes[name] != null) {
+ attributesString += ' "' + name + '"="' + attributes[name] + '"';
+ }
+ }
+ var dotSrc = 'digraph {a -> b [' + attributesString + ']}';
+ var svgDoc = this.layoutSync(dotSrc, 'svg', 'dot');
+ var parser = new window.DOMParser();
+ var doc = parser.parseFromString(svgDoc, "image/svg+xml");
+ var newDoc = d3__namespace.select(document.createDocumentFragment())
+ .append(function() {
+ return doc.documentElement;
+ });
+ var edge = newDoc.select('.edge');
+
+ return edge;
+ }
+
+ function drawNode(x, y, nodeId, attributes={}, options={}) {
+ attributes = Object.assign({}, attributes);
+ if (attributes.style && attributes.style.includes('invis')) {
+ var newNode = d3__namespace.select(null);
+ } else {
+ var root = this._selection;
+ var svg = root.selectWithoutDataPropagation("svg");
+ var graph0 = svg.selectWithoutDataPropagation("g");
+ var newNode0 = createNode.call(this, nodeId, attributes);
+ var nodeData = extractAllElementsData(newNode0);
+ var newNode = graph0.append('g')
+ .data([nodeData]);
+ attributeElement.call(newNode.node(), nodeData);
+ _updateNode.call(this, newNode, x, y, nodeId, attributes, options);
+ }
+ this._drawnNode = {
+ g: newNode,
+ nodeId: nodeId,
+ x: x,
+ y: y,
+ attributes: attributes,
+ };
+
+ return this;
+ }
+
+ function updateDrawnNode(x, y, nodeId, attributes={}, options={}) {
+ if (!this._drawnNode) {
+ throw Error('No node has been drawn');
+ }
+
+ var node = this._drawnNode.g;
+ if (nodeId == null) {
+ nodeId = this._drawnNode.nodeId;
+ }
+ attributes = Object.assign(this._drawnNode.attributes, attributes);
+ this._drawnNode.nodeId = nodeId;
+ this._drawnNode.x = x;
+ this._drawnNode.y = y;
+ if (node.empty() && !(attributes.style && attributes.style.includes('invis'))) {
+ var root = this._selection;
+ var svg = root.selectWithoutDataPropagation("svg");
+ var graph0 = svg.selectWithoutDataPropagation("g");
+ var node = graph0.append('g');
+ this._drawnNode.g = node;
+ }
+ if (!node.empty()) {
+ _updateNode.call(this, node, x, y, nodeId, attributes, options);
+ }
+
+ return this;
+ }
+
+ function _updateNode(node, x, y, nodeId, attributes, options) {
+
+ var newNode = createNode.call(this, nodeId, attributes);
+ var nodeData = extractAllElementsData(newNode);
+ node.data([nodeData]);
+ attributeElement.call(node.node(), nodeData);
+ _moveNode(node, x, y, attributes);
+
+ return this;
+ }
+
+ function _moveNode(node, x, y, attributes, options) {
+ if (attributes.URL || attributes.tooltip) {
+ var subParent = node.selectWithoutDataPropagation("g").selectWithoutDataPropagation("a");
+ } else {
+ var subParent = node;
+ }
+ var svgElements = subParent.selectAll('ellipse,polygon,path,polyline');
+ var text = node.selectWithoutDataPropagation("text");
+
+ if (svgElements.size() != 0) {
+ var bbox = svgElements.node().getBBox();
+ bbox.cx = bbox.x + bbox.width / 2;
+ bbox.cy = bbox.y + bbox.height / 2;
+ } else if (text.size() != 0) {
+ bbox = {
+ x: +text.attr('x'),
+ y: +text.attr('y'),
+ width: 0,
+ height: 0,
+ cx: +text.attr('x'),
+ cy: +text.attr('y'),
+ };
+ }
+ svgElements.each(function(data, index) {
+ var svgElement = d3__namespace.select(this);
+ if (svgElement.attr("cx")) {
+ svgElement
+ .attr("cx", roundTo2Decimals(x))
+ .attr("cy", roundTo2Decimals(y));
+ } else if (svgElement.attr("points")) {
+ var pointsString = svgElement.attr('points').trim();
+ svgElement
+ .attr("points", translatePointsAttribute(pointsString, x - bbox.cx, y - bbox.cy));
+ } else {
+ var d = svgElement.attr('d');
+ svgElement
+ .attr("d", translateDAttribute(d, x - bbox.cx, y - bbox.cy));
+ }
+ });
+
+ if (text.size() != 0) {
+ text
+ .attr("x", roundTo2Decimals(+text.attr("x") + x - bbox.cx))
+ .attr("y", roundTo2Decimals(+text.attr("y") + y - bbox.cy));
+ }
+ return this;
+ }
+
+ function moveDrawnNode(x, y, options={}) {
+
+ if (!this._drawnNode) {
+ throw Error('No node has been drawn');
+ }
+ var node = this._drawnNode.g;
+ var attributes = this._drawnNode.attributes;
+
+ this._drawnNode.x = x;
+ this._drawnNode.y = y;
+
+ if (!node.empty()) {
+ _moveNode(node, x, y, attributes);
+ }
+
+ return this
+ }
+
+ function removeDrawnNode() {
+
+ if (!this._drawnNode) {
+ return this;
+ }
+
+ var node = this._drawnNode.g;
+
+ if (!node.empty()) {
+ node.remove();
+ }
+
+ this._drawnNode = null;
+
+ return this
+ }
+
+ function insertDrawnNode(nodeId) {
+
+ if (!this._drawnNode) {
+ throw Error('No node has been drawn');
+ }
+
+ if (nodeId == null) {
+ nodeId = this._drawnNode.nodeId;
+ }
+ var node = this._drawnNode.g;
+ if (node.empty()) {
+ return this;
+ }
+ var attributes = this._drawnNode.attributes;
+
+ var title = node.selectWithoutDataPropagation("title");
+ title
+ .text(nodeId);
+ if (attributes.URL || attributes.tooltip) {
+ var ga = node.selectWithoutDataPropagation("g");
+ var a = ga.selectWithoutDataPropagation("a");
+ a.selectWithoutDataPropagation('ellipse,polygon,path,polyline');
+ var text = a.selectWithoutDataPropagation('text');
+ } else {
+ node.selectWithoutDataPropagation('ellipse,polygon,path,polyline');
+ var text = node.selectWithoutDataPropagation('text');
+ }
+ text
+ .text(attributes.label || nodeId);
+
+ var root = this._selection;
+ var svg = root.selectWithoutDataPropagation("svg");
+ var graph0 = svg.selectWithoutDataPropagation("g");
+ var graph0Datum = graph0.datum();
+ var nodeData = this._extractData(node, graph0Datum.children.length, graph0.datum());
+ graph0Datum.children.push(nodeData);
+
+ insertAllElementsData(node, nodeData);
+
+ this._drawnNode = null;
+
+ return this
+
+ }
+
+ function drawnNodeSelection() {
+
+ if (this._drawnNode) {
+ return this._drawnNode.g;
+ } else {
+ return d3__namespace.select(null);
+ }
+
+ }
+
+ function createNode(nodeId, attributes) {
+ var attributesString = '';
+ for (var name of Object.keys(attributes)) {
+ if (attributes[name] != null) {
+ attributesString += ' "' + name + '"="' + attributes[name] + '"';
+ }
+ }
+ var dotSrc = 'graph {"' + nodeId + '" [' + attributesString + ']}';
+ var svgDoc = this.layoutSync(dotSrc, 'svg', 'dot');
+ var parser = new window.DOMParser();
+ var doc = parser.parseFromString(svgDoc, "image/svg+xml");
+ var newDoc = d3__namespace.select(document.createDocumentFragment())
+ .append(function() {
+ return doc.documentElement;
+ });
+ var node = newDoc.select('.node');
+
+ return node;
+ }
+
+ /* This file is excluded from coverage because the intrumented code
+ * translates "self" which gives a reference error.
+ */
+
+ /* istanbul ignore next */
+
+ function workerCodeBody(port) {
+
+ self.document = {}; // Workaround for "ReferenceError: document is not defined" in hpccWasm
+
+ port.addEventListener('message', function(event) {
+ let hpccWasm = self["@hpcc-js/wasm"];
+ if (hpccWasm == undefined && event.data.vizURL) {
+ importScripts(event.data.vizURL);
+ hpccWasm = self["@hpcc-js/wasm"];
+ hpccWasm.wasmFolder(event.data.vizURL.match(/.*\//)[0]);
+ // This is an alternative workaround where wasmFolder() is not needed
+ // document = {currentScript: {src: event.data.vizURL}};
+ }
+ hpccWasm.graphviz.layout(event.data.dot, "svg", event.data.engine, event.data.options).then((svg) => {
+ if (svg) {
+ port.postMessage({
+ type: "done",
+ svg: svg,
+ });
+ } else if (event.data.vizURL) {
+ port.postMessage({
+ type: "init",
+ });
+ } else {
+ port.postMessage({
+ type: "skip",
+ });
+ }
+ }).catch(error => {
+ port.postMessage({
+ type: "error",
+ error: error.message,
+ });
+ });
+ });
+ }
+
+ /* istanbul ignore next */
+
+ function workerCode() {
+
+ const port = self;
+ workerCodeBody(port);
+ }
+
+ /* istanbul ignore next */
+
+ function sharedWorkerCode() {
+ self.onconnect = function(e) {
+ const port = e.ports[0];
+ workerCodeBody(port);
+ port.start();
+ };
+ }
+
+ function Graphviz(selection, options) {
+ this._options = {
+ useWorker: true,
+ useSharedWorker: false,
+ engine: 'dot',
+ keyMode: 'title',
+ fade: true,
+ tweenPaths: true,
+ tweenShapes: true,
+ convertEqualSidedPolygons: true,
+ tweenPrecision: 1,
+ growEnteringEdges: true,
+ zoom: true,
+ zoomScaleExtent: [0.1, 10],
+ zoomTranslateExtent: [[-Infinity, -Infinity], [+Infinity, +Infinity]],
+ width: null,
+ height: null,
+ scale: 1,
+ fit: false,
+ };
+ if (options instanceof Object) {
+ for (var option of Object.keys(options)) {
+ this._options[option] = options[option];
+ }
+ } else if (typeof options == 'boolean') {
+ this._options.useWorker = options;
+ }
+ var useWorker = this._options.useWorker;
+ var useSharedWorker = this._options.useSharedWorker;
+ if (typeof Worker == 'undefined') {
+ useWorker = false;
+ }
+ if (typeof SharedWorker == 'undefined') {
+ useSharedWorker = false;
+ }
+ if (useWorker || useSharedWorker) {
+ var scripts = d3__namespace.selectAll('script');
+ var vizScript = scripts.filter(function() {
+ return d3__namespace.select(this).attr('type') == 'javascript/worker' || (d3__namespace.select(this).attr('src') && d3__namespace.select(this).attr('src').match(/.*\/@hpcc-js\/wasm/));
+ });
+ if (vizScript.size() == 0) {
+ console.warn('No script tag of type "javascript/worker" was found and "useWorker" is true. Not using web worker.');
+ useWorker = false;
+ useSharedWorker = false;
+ } else {
+ this._vizURL = vizScript.attr('src');
+ if (!this._vizURL) {
+ console.warn('No "src" attribute of was found on the "javascript/worker" script tag and "useWorker" is true. Not using web worker.');
+ useWorker = false;
+ useSharedWorker = false;
+ }
+ }
+ }
+ if (useSharedWorker) {
+ const url = 'data:application/javascript;base64,' + btoa(workerCodeBody.toString() + '(' + sharedWorkerCode.toString() + ')()');
+ this._worker = this._worker = new SharedWorker(url);
+ this._workerPort = this._worker.port;
+ this._workerPortClose = this._worker.port.close.bind(this._workerPort);
+ this._worker.port.start();
+ this._workerCallbacks = [];
+ }
+ else if (useWorker) {
+ var blob = new Blob([workerCodeBody.toString() + '(' + workerCode.toString() + ')()']);
+ var blobURL = window.URL.createObjectURL(blob);
+ this._worker = new Worker(blobURL);
+ this._workerPort = this._worker;
+ this._workerPortClose = this._worker.terminate.bind(this._worker);
+ this._workerCallbacks = [];
+ }
+ this._selection = selection;
+ this._active = false;
+ this._busy = false;
+ this._jobs = [];
+ this._queue = [];
+ this._keyModes = new Set([
+ 'title',
+ 'id',
+ 'tag-index',
+ 'index'
+ ]);
+ this._images = [];
+ this._translation = undefined;
+ this._scale = undefined;
+ this._eventTypes = [
+ 'initEnd',
+ 'start',
+ 'layoutStart',
+ 'layoutEnd',
+ 'dataExtractEnd',
+ 'dataProcessPass1End',
+ 'dataProcessPass2End',
+ 'dataProcessEnd',
+ 'renderStart',
+ 'renderEnd',
+ 'transitionStart',
+ 'transitionEnd',
+ 'restoreEnd',
+ 'end'
+ ];
+ this._dispatch = d3Dispatch.dispatch(...this._eventTypes);
+ initViz.call(this);
+ selection.node().__graphviz__ = this;
+ }
+
+ function graphviz(selector, options) {
+ var g = d3__namespace.select(selector).graphviz(options);
+ return g;
+ }
+
+ Graphviz.prototype = graphviz.prototype = {
+ constructor: Graphviz,
+ engine: engine,
+ addImage: images,
+ keyMode: keyMode,
+ fade: fade,
+ tweenPaths: tweenPaths,
+ tweenShapes: tweenShapes,
+ convertEqualSidedPolygons: convertEqualSidedPolygons,
+ tweenPrecision: tweenPrecision,
+ growEnteringEdges: growEnteringEdges,
+ zoom: zoom,
+ resetZoom: resetZoom,
+ zoomBehavior: zoomBehavior,
+ zoomSelection: zoomSelection,
+ zoomScaleExtent: zoomScaleExtent,
+ zoomTranslateExtent: zoomTranslateExtent,
+ render: render,
+ layout: layout,
+ dot: dot,
+ data: data,
+ renderDot: renderDot,
+ transition: transition,
+ active: active,
+ options: options,
+ width: width,
+ height: height,
+ scale: scale,
+ fit: fit,
+ attributer: attributer,
+ on: on,
+ onerror: onerror,
+ logEvents: logEvents,
+ destroy: destroy,
+ drawEdge: drawEdge,
+ updateDrawnEdge: updateDrawnEdge,
+ moveDrawnEdgeEndPoint,
+ insertDrawnEdge,
+ removeDrawnEdge, removeDrawnEdge,
+ drawnEdgeSelection, drawnEdgeSelection,
+ drawNode: drawNode,
+ updateDrawnNode: updateDrawnNode,
+ moveDrawnNode: moveDrawnNode,
+ insertDrawnNode,
+ removeDrawnNode, removeDrawnNode,
+ drawnNodeSelection, drawnNodeSelection,
+ };
+
+ function selection_graphviz(options) {
+
+ var g = this.node().__graphviz__;
+ if (g) {
+ g.options(options);
+ // Ensure a possible new initEnd event handler is attached before calling it
+ d3Timer.timeout(function () {
+ g._dispatch.call("initEnd", this);
+ }.bind(this), 0);
+ } else {
+ g = new Graphviz(this, options);
+ }
+ return g;
+ }
+
+ function selection_selectWithoutDataPropagation(name) {
+
+ return d3__namespace.select(this.size() > 0 ? this.node().querySelector(name) : null);
+ }
+
+ d3.selection.prototype.graphviz = selection_graphviz;
+ d3.selection.prototype.selectWithoutDataPropagation = selection_selectWithoutDataPropagation;
+
+ exports.graphviz = graphviz;
+
+ Object.defineProperty(exports, '__esModule', { value: true });
+
+})));
+//# sourceMappingURL=d3-graphviz.js.map
diff --git a/static/d3-graphviz.js.map b/static/d3-graphviz.js.map
new file mode 100644
index 0000000..0af5e75
--- /dev/null
+++ b/static/d3-graphviz.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"d3-graphviz.js","sources":["../src/element.js","../src/utils.js","../src/zoom.js","../src/tweening.js","../src/data.js","../src/render.js","../src/svg.js","../src/dot.js","../src/renderDot.js","../src/transition.js","../src/options.js","../src/width.js","../src/height.js","../src/scale.js","../src/fit.js","../src/attributer.js","../src/engine.js","../src/images.js","../src/keyMode.js","../src/fade.js","../src/tweenPaths.js","../src/tweenShapes.js","../src/convertEqualSidedPolygons.js","../src/tweenPrecision.js","../src/growEnteringEdges.js","../src/on.js","../src/onerror.js","../src/logEvents.js","../src/destroy.js","../src/geometry.js","../src/drawEdge.js","../src/drawNode.js","../src/workerCode.js","../src/graphviz.js","../src/selection/graphviz.js","../src/selection/selectWithoutDataPropagation.js","../src/selection/index.js"],"sourcesContent":["import * as d3 from \"d3-selection\";\n\nexport function extractElementData(element) {\n\n var datum = {};\n var tag = element.node().nodeName;\n datum.tag = tag;\n if (tag == '#text') {\n datum.text = element.text();\n } else if (tag == '#comment') {\n datum.comment = element.text();\n }\n datum.attributes = {};\n var attributes = element.node().attributes;\n if (attributes) {\n for (var i = 0; i < attributes.length; i++) {\n var attribute = attributes[i];\n var name = attribute.name;\n var value = attribute.value;\n datum.attributes[name] = value;\n }\n }\n var transform = element.node().transform;\n if (transform && transform.baseVal.numberOfItems != 0) {\n var matrix = transform.baseVal.consolidate().matrix;\n datum.translation = {x: matrix.e, y: matrix.f};\n datum.scale = matrix.a;\n }\n if (tag == 'ellipse') {\n datum.center = {\n x: datum.attributes.cx,\n y: datum.attributes.cy,\n };\n }\n if (tag == 'polygon') {\n var points = element.attr('points').split(' ');\n var x = points.map(function(p) {return p.split(',')[0]});\n var y = points.map(function(p) {return p.split(',')[1]});\n var xmin = Math.min.apply(null, x);\n var xmax = Math.max.apply(null, x);\n var ymin = Math.min.apply(null, y);\n var ymax = Math.max.apply(null, y);\n var bbox = {\n x: xmin,\n y: ymin,\n width: xmax - xmin,\n height: ymax - ymin,\n };\n datum.bbox = bbox;\n datum.center = {\n x: (xmin + xmax) / 2,\n y: (ymin + ymax) / 2,\n };\n }\n if (tag == 'path') {\n var d = element.attr('d');\n var points = d.split(/[A-Z ]/);\n points.shift();\n var x = points.map(function(p) {return +p.split(',')[0]});\n var y = points.map(function(p) {return +p.split(',')[1]});\n var xmin = Math.min.apply(null, x);\n var xmax = Math.max.apply(null, x);\n var ymin = Math.min.apply(null, y);\n var ymax = Math.max.apply(null, y);\n var bbox = {\n x: xmin,\n y: ymin,\n width: xmax - xmin,\n height: ymax - ymin,\n };\n datum.bbox = bbox;\n datum.center = {\n x: (xmin + xmax) / 2,\n y: (ymin + ymax) / 2,\n };\n datum.totalLength = element.node().getTotalLength();\n }\n if (tag == 'text') {\n datum.center = {\n x: element.attr('x'),\n y: element.attr('y'),\n };\n }\n if (tag == '#text') {\n datum.text = element.text();\n } else if (tag == '#comment') {\n datum.comment = element.text();\n }\n return datum\n}\n\nexport function extractAllElementsData(element) {\n\n var datum = extractElementData(element);\n datum.children = [];\n var children = d3.selectAll(element.node().childNodes);\n children.each(function () {\n var childData = extractAllElementsData(d3.select(this));\n childData.parent = datum;\n datum.children.push(childData);\n });\n return datum;\n}\n\nexport function createElement(data) {\n\n if (data.tag == '#text') {\n return document.createTextNode(\"\");\n } else if (data.tag == '#comment') {\n return document.createComment(data.comment);\n } else {\n return document.createElementNS('http://www.w3.org/2000/svg', data.tag);\n }\n}\n\nexport function createElementWithAttributes(data) {\n\n var elementNode = createElement(data);\n var element = d3.select(elementNode);\n var attributes = data.attributes;\n for (var attributeName of Object.keys(attributes)) {\n var attributeValue = attributes[attributeName];\n element.attr(attributeName, attributeValue);\n }\n return elementNode;\n}\n\nexport function replaceElement(element, data) {\n var parent = d3.select(element.node().parentNode);\n var newElementNode = createElementWithAttributes(data);\n var newElement = parent.insert(function () {\n return newElementNode;\n }, function () {\n return element.node();\n });\n element.remove();\n return newElement;\n}\n\nexport function insertElementData(element, datum) {\n element.datum(datum);\n element.data([datum], function (d) {\n return d.key;\n });\n}\n\nexport function insertAllElementsData(element, datum) {\n insertElementData(element, datum);\n var children = d3.selectAll(element.node().childNodes);\n children.each(function (d, i) {\n insertAllElementsData(d3.select(this), datum.children[i]);\n });\n}\n\nfunction insertChildren(element, index) {\n var children = element.selectAll(function () {\n return element.node().childNodes;\n });\n\n children = children\n .data(function (d) {\n return d.children;\n }, function (d) {\n return d.tag + '-' + index;\n });\n var childrenEnter = children\n .enter()\n .append(function(d) {\n return createElement(d);\n });\n\n var childrenExit = children\n .exit();\n childrenExit = childrenExit\n .remove()\n children = childrenEnter\n .merge(children);\n var childTagIndexes = {};\n children.each(function(childData) {\n var childTag = childData.tag;\n if (childTagIndexes[childTag] == null) {\n childTagIndexes[childTag] = 0;\n }\n var childIndex = childTagIndexes[childTag]++;\n attributeElement.call(this, childData, childIndex);\n });\n}\n\nexport function attributeElement(data, index=0) {\n var element = d3.select(this);\n var tag = data.tag;\n var attributes = data.attributes;\n var currentAttributes = element.node().attributes;\n if (currentAttributes) {\n for (var i = 0; i < currentAttributes.length; i++) {\n var currentAttribute = currentAttributes[i];\n var name = currentAttribute.name;\n if (name.split(':')[0] != 'xmlns' && currentAttribute.namespaceURI) {\n var namespaceURIParts = currentAttribute.namespaceURI.split('/');\n var namespace = namespaceURIParts[namespaceURIParts.length - 1];\n name = namespace + ':' + name;\n }\n if (!(name in attributes)) {\n attributes[name] = null;\n }\n }\n }\n for (var attributeName of Object.keys(attributes)) {\n element\n .attr(attributeName, attributes[attributeName]);\n }\n if (data.text) {\n element\n .text(data.text);\n }\n insertChildren(element, index);\n}\n","export function shallowCopyObject(obj) {\n return Object.assign({}, obj);\n}\n\nexport function roundTo2Decimals(x) {\n return Math.round(x * 100.0) / 100.0\n}\n","import * as d3 from \"d3-selection\";\nimport {zoom, zoomTransform, zoomIdentity} from \"d3-zoom\";\nimport {interpolate} from \"d3-interpolate\";\n\nexport default function(enable) {\n\n this._options.zoom = enable;\n\n if (this._options.zoom && !this._zoomBehavior) {\n createZoomBehavior.call(this);\n } else if (!this._options.zoom && this._zoomBehavior) {\n this._zoomSelection.on(\".zoom\", null);\n this._zoomBehavior = null;\n }\n\n return this;\n}\n\nexport function createZoomBehavior() {\n\n function zoomed(event) {\n var g = d3.select(svg.node().querySelector(\"g\"));\n g.attr('transform', event.transform);\n }\n\n var root = this._selection;\n var svg = d3.select(root.node().querySelector(\"svg\"));\n if (svg.size() == 0) {\n return this;\n }\n this._zoomSelection = svg;\n var zoomBehavior = zoom()\n .scaleExtent(this._options.zoomScaleExtent)\n .translateExtent(this._options.zoomTranslateExtent)\n .interpolate(interpolate)\n .on(\"zoom\", zoomed);\n this._zoomBehavior = zoomBehavior;\n var g = d3.select(svg.node().querySelector(\"g\"));\n svg.call(zoomBehavior);\n if (!this._active) {\n translateZoomBehaviorTransform.call(this, g);\n }\n this._originalTransform = zoomTransform(svg.node());\n\n return this;\n};\n\nexport function getTranslatedZoomTransform(selection) {\n\n // Get the current zoom transform for the top level svg and\n // translate it uniformly with the given selection, using the\n // difference between the translation specified in the selection's\n // data and it's saved previous translation. The selection is\n // normally the top level g element of the graph.\n var oldTranslation = this._translation;\n var oldScale = this._scale;\n var newTranslation = selection.datum().translation;\n var newScale = selection.datum().scale;\n var t = zoomTransform(this._zoomSelection.node());\n if (oldTranslation) {\n t = t.scale(1 / oldScale);\n t = t.translate(-oldTranslation.x, -oldTranslation.y);\n }\n t = t.translate(newTranslation.x, newTranslation.y);\n t = t.scale(newScale);\n return t;\n}\n\nexport function translateZoomBehaviorTransform(selection) {\n\n // Translate the current zoom transform for the top level svg\n // uniformly with the given selection, using the difference\n // between the translation specified in the selection's data and\n // it's saved previous translation. The selection is normally the\n // top level g element of the graph.\n this._zoomBehavior.transform(this._zoomSelection, getTranslatedZoomTransform.call(this, selection));\n\n // Save the selections's new translation and scale.\n this._translation = selection.datum().translation;\n this._scale = selection.datum().scale;\n\n // Set the original zoom transform to the translation and scale specified in\n // the selection's data.\n this._originalTransform = zoomIdentity.translate(selection.datum().translation.x, selection.datum().translation.y).scale(selection.datum().scale);\n}\n\nexport function resetZoom(transition) {\n\n // Reset the zoom transform to the original zoom transform.\n var selection = this._zoomSelection;\n if (transition) {\n selection = selection\n .transition(transition);\n }\n selection\n .call(this._zoomBehavior.transform, this._originalTransform);\n\n return this;\n}\n\nexport function zoomScaleExtent(extent) {\n\n this._options.zoomScaleExtent = extent;\n\n return this;\n}\n\nexport function zoomTranslateExtent(extent) {\n\n this._options.zoomTranslateExtent = extent;\n\n return this;\n}\n\nexport function zoomBehavior() {\n return this._zoomBehavior || null;\n}\n\nexport function zoomSelection() {\n return this._zoomSelection || null;\n}\n","import {interpolate} from \"d3-interpolate\";\n\nexport function pathTween(points, d1) {\n return function() {\n const pointInterpolators = points.map(function(p) {\n return interpolate([p[0][0], p[0][1]], [p[1][0], p[1][1]]);\n });\n return function(t) {\n return t < 1 ? \"M\" + pointInterpolators.map(function(p) { return p(t); }).join(\"L\") : d1;\n };\n };\n}\n\nexport function pathTweenPoints(node, d1, precision, precisionIsRelative) {\n const path0 = node;\n const path1 = path0.cloneNode();\n const n0 = path0.getTotalLength();\n const n1 = (path1.setAttribute(\"d\", d1), path1).getTotalLength();\n\n // Uniform sampling of distance based on specified precision.\n const distances = [0];\n let i = 0;\n const dt = precisionIsRelative ? precision : precision / Math.max(n0, n1);\n while ((i += dt) < 1) {\n distances.push(i);\n }\n distances.push(1);\n\n // Compute point-interpolators at each distance.\n const points = distances.map(function(t) {\n const p0 = path0.getPointAtLength(t * n0);\n const p1 = path1.getPointAtLength(t * n1);\n return ([[p0.x, p0.y], [p1.x, p1.y]]);\n });\n return points;\n}\n","export default function() {\n return this._data || null;\n}\n\nexport function isEdgeElementParent(datum) {\n return (datum.attributes.class == 'edge' || (\n datum.tag == 'a' &&\n datum.parent.tag == 'g' &&\n datum.parent.parent.attributes.class == 'edge'\n ));\n}\n\nexport function isEdgeElement(datum) {\n return datum.parent && isEdgeElementParent(datum.parent);\n}\n\nexport function getEdgeGroup(datum) {\n if (datum.parent.attributes.class == 'edge') {\n return datum.parent;\n } else { // datum.parent.tag == 'g' && datum.parent.parent.tag == 'g' && datum.parent.parent.parent.attributes.class == 'edge'\n return datum.parent.parent.parent;\n }\n}\n\nexport function getEdgeTitle(datum) {\n return getEdgeGroup(datum).children.find(function (e) {\n return e.tag == 'title';\n });\n}\n","import * as d3 from \"d3-selection\";\nimport {transition} from \"d3-transition\";\nimport {timeout} from \"d3-timer\";\nimport {interpolateTransformSvg} from \"d3-interpolate\";\nimport {zoomTransform} from \"d3-zoom\";\nimport {createElement, extractElementData, replaceElement} from \"./element\";\nimport {shallowCopyObject} from \"./utils\";\nimport {createZoomBehavior, getTranslatedZoomTransform, translateZoomBehaviorTransform} from \"./zoom\";\nimport {pathTween} from \"./tweening\";\nimport {isEdgeElement} from \"./data\";\nimport {isEdgeElementParent} from \"./data\";\n\nexport default function(callback) {\n\n if (this._busy) {\n this._queue.push(this.render.bind(this, callback));\n return this;\n }\n this._dispatch.call('renderStart', this);\n\n if (this._transitionFactory) {\n timeout(function () { // Decouple from time spent. See https://github.com/d3/d3-timer/issues/27\n this._transition = transition(this._transitionFactory());\n _render.call(this, callback);\n }.bind(this), 0);\n } else {\n _render.call(this, callback);\n }\n return this;\n}\n\nfunction _render(callback) {\n\n var transitionInstance = this._transition;\n var fade = this._options.fade && transitionInstance != null;\n var tweenPaths = this._options.tweenPaths;\n var tweenShapes = this._options.tweenShapes;\n var convertEqualSidedPolygons = this._options.convertEqualSidedPolygons;\n var growEnteringEdges = this._options.growEnteringEdges && transitionInstance != null;\n var attributer = this._attributer;\n var graphvizInstance = this;\n\n function insertChildren(element) {\n var children = element.selectAll(function () {\n return element.node().childNodes;\n });\n\n children = children\n .data(function (d) {\n return d.children;\n }, function (d) {\n return d.key;\n });\n var childrenEnter = children\n .enter()\n .append(function(d) {\n var element = createElement(d);\n if (d.tag == '#text' && fade) {\n element.nodeValue = d.text;\n }\n return element;\n });\n\n if (fade || (growEnteringEdges && isEdgeElementParent(element.datum()))) {\n var childElementsEnter = childrenEnter\n .filter(function(d) {\n return d.tag[0] == '#' ? null : this;\n })\n .each(function (d) {\n var childEnter = d3.select(this);\n for (var attributeName of Object.keys(d.attributes)) {\n var attributeValue = d.attributes[attributeName];\n childEnter\n .attr(attributeName, attributeValue);\n }\n });\n childElementsEnter\n .filter(function(d) {\n return d.tag == 'svg' || d.tag == 'g' ? null : this;\n })\n .style(\"opacity\", 0.0);\n }\n var childrenExit = children\n .exit();\n if (attributer) {\n childrenExit.each(attributer);\n }\n if (transitionInstance) {\n childrenExit = childrenExit\n .transition(transitionInstance);\n if (fade) {\n childrenExit\n .filter(function(d) {\n return d.tag[0] == '#' ? null : this;\n })\n .style(\"opacity\", 0.0);\n }\n }\n childrenExit = childrenExit\n .remove()\n children = childrenEnter\n .merge(children);\n children.each(attributeElement);\n }\n\n function attributeElement(data) {\n var element = d3.select(this);\n if (data.tag == \"svg\") {\n var options = graphvizInstance._options;\n if (options.width != null || options.height != null) {\n var width = options.width;\n var height = options.height;\n if (width == null) {\n width = data.attributes.width.replace('pt', '') * 4 / 3;\n } else {\n element\n .attr(\"width\", width);\n data.attributes.width = width;\n }\n if (height == null) {\n height = data.attributes.height.replace('pt', '') * 4 / 3;\n } else {\n element\n .attr(\"height\", height);\n data.attributes.height = height;\n }\n if (!options.fit) {\n element\n .attr(\"viewBox\", `0 0 ${width * 3 / 4 / options.scale} ${height * 3 / 4 / options.scale}`);\n data.attributes.viewBox = `0 0 ${width * 3 / 4 / options.scale} ${height * 3 / 4 / options.scale}`;\n }\n }\n if (options.scale != 1 && (options.fit || (options.width == null && options.height == null))) {\n width = data.attributes.viewBox.split(' ')[2];\n height = data.attributes.viewBox.split(' ')[3];\n element\n .attr(\"viewBox\", `0 0 ${width / options.scale} ${height / options.scale}`);\n data.attributes.viewBox = `0 0 ${width / options.scale} ${height / options.scale}`;\n }\n }\n if (attributer) {\n element.each(attributer);\n }\n var tag = data.tag;\n var attributes = data.attributes;\n var currentAttributes = element.node().attributes;\n if (currentAttributes) {\n for (var i = 0; i < currentAttributes.length; i++) {\n var currentAttribute = currentAttributes[i];\n var name = currentAttribute.name;\n if (name.split(':')[0] != 'xmlns' && currentAttribute.namespaceURI) {\n var namespaceURIParts = currentAttribute.namespaceURI.split('/');\n var namespace = namespaceURIParts[namespaceURIParts.length - 1];\n name = namespace + ':' + name;\n }\n if (!(name in attributes)) {\n attributes[name] = null;\n }\n }\n }\n var convertShape = false;\n var convertPrevShape = false;\n if (tweenShapes && transitionInstance) {\n if ((this.nodeName == 'polygon' || this.nodeName == 'ellipse') && data.alternativeOld) {\n convertPrevShape = true;\n }\n if ((tag == 'polygon' || tag == 'ellipse') && data.alternativeNew) {\n convertShape = true;\n }\n if (this.nodeName == 'polygon' && tag == 'polygon' && data.alternativeOld) {\n var prevData = extractElementData(element);\n var prevPoints = prevData.attributes.points;\n if (!convertEqualSidedPolygons) {\n var nPrevPoints = prevPoints.split(' ').length;\n var points = data.attributes.points;\n var nPoints = points.split(' ').length;\n if (nPoints == nPrevPoints) {\n convertShape = false;\n convertPrevShape = false;\n }\n }\n }\n if (convertPrevShape) {\n var prevPathData = data.alternativeOld;\n var pathElement = replaceElement(element, prevPathData);\n pathElement.data([data], function () {\n return data.key;\n });\n element = pathElement;\n }\n if (convertShape) {\n var newPathData = data.alternativeNew;\n tag = 'path';\n attributes = newPathData.attributes;\n }\n }\n var elementTransition = element;\n if (transitionInstance) {\n elementTransition = elementTransition\n .transition(transitionInstance);\n if (fade) {\n elementTransition\n .filter(function(d) {\n return d.tag[0] == '#' ? null : this;\n })\n .style(\"opacity\", 1.0);\n }\n elementTransition\n .filter(function(d) {\n return d.tag[0] == '#' ? null : this;\n })\n .on(\"end\", function(d) {\n d3.select(this)\n .attr('style', (d && d.attributes && d.attributes.style) || null);\n });\n }\n var growThisPath = growEnteringEdges && tag == 'path' && data.offset;\n if (growThisPath) {\n var totalLength = data.totalLength;\n element\n .attr(\"stroke-dasharray\", totalLength + \" \" + totalLength)\n .attr(\"stroke-dashoffset\", totalLength)\n .attr('transform', 'translate(' + data.offset.x + ',' + data.offset.y + ')');\n attributes[\"stroke-dashoffset\"] = 0;\n attributes['transform'] = 'translate(0,0)';\n elementTransition\n .attr(\"stroke-dashoffset\", attributes[\"stroke-dashoffset\"])\n .attr('transform', attributes['transform'])\n .on(\"start\", function() {\n d3.select(this)\n .style('opacity', null);\n })\n .on(\"end\", function() {\n d3.select(this)\n .attr('stroke-dashoffset', null)\n .attr('stroke-dasharray', null)\n .attr('transform', null);\n });\n }\n var moveThisPolygon = growEnteringEdges && tag == 'polygon' && isEdgeElement(data) && data.offset && data.parent.children[3].tag == 'path';\n if (moveThisPolygon) {\n var edgePath = d3.select(element.node().parentNode.querySelector(\"path\"));\n var p0 = edgePath.node().getPointAtLength(0);\n var p1 = edgePath.node().getPointAtLength(data.totalLength);\n var p2 = edgePath.node().getPointAtLength(data.totalLength - 1);\n var angle1 = Math.atan2(p1.y - p2.y, p1.x - p2.x) * 180 / Math.PI;\n var x = p0.x - p1.x + data.offset.x;\n var y = p0.y - p1.y + data.offset.y;\n element\n .attr('transform', 'translate(' + x + ',' + y + ')');\n elementTransition\n .attrTween(\"transform\", function () {\n return function (t) {\n var p = edgePath.node().getPointAtLength(data.totalLength * t);\n var p2 = edgePath.node().getPointAtLength(data.totalLength * t + 1);\n var angle = Math.atan2(p2.y - p.y, p2.x - p.x) * 180 / Math.PI - angle1;\n x = p.x - p1.x + data.offset.x * (1 - t);\n y = p.y - p1.y + data.offset.y * (1 - t);\n return 'translate(' + x + ',' + y + ') rotate(' + angle + ' ' + p1.x + ' ' + p1.y + ')';\n }\n })\n .on(\"start\", function() {\n d3.select(this)\n .style('opacity', null);\n })\n .on(\"end\", function() {\n d3.select(this).attr('transform', null);\n });\n }\n var tweenThisPath = tweenPaths && transitionInstance && tag == 'path' && element.attr('d') != null;\n for (var attributeName of Object.keys(attributes)) {\n var attributeValue = attributes[attributeName];\n if (tweenThisPath && attributeName == 'd') {\n var points = (data.alternativeOld || data).points;\n if (points) {\n elementTransition\n .attrTween(\"d\", pathTween(points, attributeValue));\n }\n } else {\n if (attributeName == 'transform' && data.translation) {\n if (transitionInstance) {\n var onEnd = elementTransition.on(\"end\");\n elementTransition\n .on(\"start\", function () {\n if (graphvizInstance._zoomBehavior) {\n // Update the transform to transition to, just before the transition starts\n // in order to catch changes between the transition scheduling to its start.\n elementTransition\n .tween(\"attr.transform\", function() {\n var node = this;\n return function(t) {\n node.setAttribute(\"transform\", interpolateTransformSvg(zoomTransform(graphvizInstance._zoomSelection.node()).toString(), getTranslatedZoomTransform.call(graphvizInstance, element).toString())(t));\n };\n });\n }\n })\n .on(\"end\", function () {\n onEnd.call(this);\n // Update the zoom transform to the new translated transform\n if (graphvizInstance._zoomBehavior) {\n translateZoomBehaviorTransform.call(graphvizInstance, element);\n }\n })\n } else {\n if (graphvizInstance._zoomBehavior) {\n // Update the transform attribute to set with the current pan translation\n translateZoomBehaviorTransform.call(graphvizInstance, element);\n attributeValue = getTranslatedZoomTransform.call(graphvizInstance, element).toString();\n }\n }\n }\n elementTransition\n .attr(attributeName, attributeValue);\n }\n }\n if (convertShape) {\n elementTransition\n .on(\"end\", function (d, i, nodes) {\n pathElement = d3.select(this);\n var newElement = replaceElement(pathElement, d);\n newElement.data([d], function () {\n return d.key;\n });\n })\n }\n if (data.text) {\n elementTransition\n .text(data.text);\n }\n insertChildren(element);\n }\n\n var root = this._selection;\n\n if (transitionInstance != null) {\n // Ensure original SVG shape elements are restored after transition before rendering new graph\n var jobs = this._jobs;\n if (graphvizInstance._active) {\n jobs.push(null);\n return this;\n } else {\n root\n .transition(transitionInstance)\n .transition()\n .duration(0)\n .on(\"end\" , function () {\n graphvizInstance._active = false;\n if (jobs.length != 0) {\n jobs.shift();\n graphvizInstance.render();\n }\n });\n this._active = true;\n }\n }\n\n if (transitionInstance != null) {\n root\n .transition(transitionInstance)\n .on(\"start\" , function () {\n graphvizInstance._dispatch.call('transitionStart', graphvizInstance);\n })\n .on(\"end\" , function () {\n graphvizInstance._dispatch.call('transitionEnd', graphvizInstance);\n })\n .transition()\n .duration(0)\n .on(\"start\" , function () {\n graphvizInstance._dispatch.call('restoreEnd', graphvizInstance);\n graphvizInstance._dispatch.call('end', graphvizInstance);\n if (callback) {\n callback.call(graphvizInstance);\n }\n });\n }\n\n var data = this._data;\n\n var svg = root\n .selectAll(\"svg\")\n .data([data], function (d) {return d.key});\n svg = svg\n .enter()\n .append(\"svg\")\n .merge(svg);\n\n attributeElement.call(svg.node(), data);\n\n\n if (this._options.zoom && !this._zoomBehavior) {\n createZoomBehavior.call(this);\n }\n\n graphvizInstance._dispatch.call('renderEnd', graphvizInstance);\n\n if (transitionInstance == null) {\n this._dispatch.call('end', this);\n if (callback) {\n callback.call(this);\n }\n }\n\n return this;\n};\n","import {shallowCopyObject} from \"./utils\";\nimport {roundTo2Decimals} from \"./utils\";\n\nexport function convertToPathData(originalData, guideData) {\n if (originalData.tag == 'polygon') {\n var newData = shallowCopyObject(originalData);\n newData.tag = 'path';\n var originalAttributes = originalData.attributes;\n var newAttributes = shallowCopyObject(originalAttributes);\n var newPointsString = originalAttributes.points;\n if (guideData.tag == 'polygon') {\n var bbox = originalData.bbox;\n bbox.cx = bbox.x + bbox.width / 2;\n bbox.cy = bbox.y + bbox.height / 2;\n var pointsString = originalAttributes.points;\n var pointStrings = pointsString.split(' ');\n var normPoints = pointStrings.map(function(p) {var xy = p.split(','); return [xy[0] - bbox.cx, xy[1] - bbox.cy]});\n var x0 = normPoints[normPoints.length - 1][0];\n var y0 = normPoints[normPoints.length - 1][1];\n for (var i = 0; i < normPoints.length; i++, x0 = x1, y0 = y1) {\n var x1 = normPoints[i][0];\n var y1 = normPoints[i][1];\n var dx = x1 - x0;\n var dy = y1 - y0;\n if (dy == 0) {\n continue;\n } else {\n var x2 = x0 - y0 * dx / dy;\n }\n if (0 <= x2 && x2 < Infinity && ((x0 <= x2 && x2 <= x1) || (x1 <= x2 && x2 <= x0))) {\n break;\n }\n }\n var newPointStrings = [[bbox.cx + x2, bbox.cy + 0].join(',')];\n newPointStrings = newPointStrings.concat(pointStrings.slice(i));\n newPointStrings = newPointStrings.concat(pointStrings.slice(0, i));\n newPointsString = newPointStrings.join(' ');\n }\n newAttributes['d'] = 'M' + newPointsString + 'z';\n delete newAttributes.points;\n newData.attributes = newAttributes;\n } else /* if (originalData.tag == 'ellipse') */ {\n var newData = shallowCopyObject(originalData);\n newData.tag = 'path';\n var originalAttributes = originalData.attributes;\n var newAttributes = shallowCopyObject(originalAttributes);\n var cx = originalAttributes.cx;\n var cy = originalAttributes.cy;\n var rx = originalAttributes.rx;\n var ry = originalAttributes.ry;\n if (guideData.tag == 'polygon') {\n var bbox = guideData.bbox;\n bbox.cx = bbox.x + bbox.width / 2;\n bbox.cy = bbox.y + bbox.height / 2;\n var p = guideData.attributes.points.split(' ')[0].split(',');\n var sx = p[0];\n var sy = p[1];\n var dx = sx - bbox.cx;\n var dy = sy - bbox.cy;\n var l = Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2));\n var cosA = dx / l;\n var sinA = -dy / l;\n } else { // if (guideData.tag == 'path') {\n // FIXME: add support for getting start position from path\n var cosA = 1;\n var sinA = 0;\n }\n var x1 = rx * cosA;\n var y1 = -ry * sinA;\n var x2 = rx * (-cosA);\n var y2 = -ry * (-sinA);\n var dx = x2 - x1;\n var dy = y2 - y1;\n newAttributes['d'] = 'M ' + cx + ' ' + cy + ' m ' + x1 + ',' + y1 + ' a ' + rx + ',' + ry + ' 0 1,0 ' + dx + ',' + dy + ' a ' + rx + ',' + ry + ' 0 1,0 ' + -dx + ',' + -dy + 'z';\n delete newAttributes.cx;\n delete newAttributes.cy;\n delete newAttributes.rx;\n delete newAttributes.ry;\n newData.attributes = newAttributes;\n }\n return newData;\n}\n\nexport function translatePointsAttribute(pointsString, x, y) {\n var pointStrings = pointsString.split(' ');\n var points = pointStrings.map(function(p) {return p.split(',')});\n var points = pointStrings.map(function(p) {return [roundTo2Decimals(+x + +p.split(',')[0]), roundTo2Decimals(+y + +p.split(',')[1])]});\n var pointStrings = points.map(function(p) {return p.join(',')});\n var pointsString = pointStrings.join(' ');\n return pointsString;\n}\n\nexport function translateDAttribute(d, x, y) {\n var pointStrings = d.split(/[A-Z ]/);\n pointStrings.shift();\n var commands = d.split(/[^[A-Z ]+/);\n var points = pointStrings.map(function(p) {return p.split(',')});\n var points = pointStrings.map(function(p) {return [roundTo2Decimals(+x + +p.split(',')[0]), roundTo2Decimals(+y + +p.split(',')[1])]});\n var pointStrings = points.map(function(p) {return p.join(',')});\n d = commands.reduce(function(arr, v, i) {\n return arr.concat(v, pointStrings[i]);\n }, []).join('');\n return d;\n}\n","import { graphviz } from \"@hpcc-js/wasm\";\nimport { graphvizSync } from \"@hpcc-js/wasm\";\nimport * as d3 from \"d3-selection\";\nimport {extractAllElementsData, extractElementData, createElementWithAttributes} from \"./element\";\nimport {convertToPathData} from \"./svg\";\nimport {pathTweenPoints} from \"./tweening\";\nimport {isEdgeElement} from \"./data\";\nimport {getEdgeTitle} from \"./data\";\n\n\nexport function initViz() {\n\n // force JIT compilation of Viz.js\n try {\n graphviz.layout(\"\", \"svg\", \"dot\").then(() => {\n graphvizSync().then((graphviz1) => {\n this.layoutSync = graphviz1.layout.bind(graphviz1);\n if (this._worker == null) {\n this._dispatch.call(\"initEnd\", this);\n }\n if (this._afterInit) {\n this._afterInit();\n }\n });\n });\n } catch(error) {\n }\n if (this._worker != null) {\n var vizURL = this._vizURL;\n var graphvizInstance = this;\n this._workerPort.onmessage = function(event) {\n var callback = graphvizInstance._workerCallbacks.shift();\n callback.call(graphvizInstance, event);\n }\n if (!vizURL.match(/^https?:\\/\\/|^\\/\\//i)) {\n // Local URL. Prepend with local domain to be usable in web worker\n vizURL = (new window.URL(vizURL, document.location.href)).href;\n }\n postMessage.call(this, {dot: \"\", engine: 'dot', vizURL: vizURL}, function(event) {\n switch (event.data.type) {\n case \"init\":\n graphvizInstance._dispatch.call(\"initEnd\", this);\n break;\n }\n });\n }\n}\n\nfunction postMessage(message, callback) {\n this._workerCallbacks.push(callback);\n this._workerPort.postMessage(message);\n}\n\nexport function layout(src, engine, vizOptions, callback) {\n var graphvizInstance = this;\n var worker = this._worker;\n if (this._worker) {\n postMessage.call(this, {\n dot: src,\n engine: engine,\n options: vizOptions,\n }, function (event) {\n callback.call(this, event.data);\n });\n } else {\n try {\n var svgDoc = this.layoutSync(src, \"svg\", engine, vizOptions);\n callback.call(this, {type: 'done', svg: svgDoc});\n }\n catch(error) {\n callback.call(this, {type: 'error', error: error.message});\n }\n }\n}\n\nexport default function(src, callback) {\n\n var graphvizInstance = this;\n var worker = this._worker;\n var engine = this._options.engine;\n var images = this._images;\n\n this._dispatch.call(\"start\", this);\n this._busy = true;\n this._dispatch.call(\"layoutStart\", this);\n var vizOptions = {\n images: images,\n };\n if (!this._worker && this.layoutSync == null) {\n this._afterInit = this.dot.bind(this, src, callback);\n return this;\n }\n this.layout(src, engine, vizOptions, function (data) {\n switch (data.type) {\n case \"error\":\n if (graphvizInstance._onerror) {\n graphvizInstance._onerror(data.error);\n } else {\n throw data.error.message\n }\n break;\n case \"done\":\n var svgDoc = data.svg;\n layoutDone.call(this, svgDoc, callback);\n break;\n }\n });\n\n return this;\n};\n\nfunction layoutDone(svgDoc, callback) {\n var keyMode = this._options.keyMode;\n var tweenPaths = this._options.tweenPaths;\n var tweenShapes = this._options.tweenShapes;\n if (typeof this._options.tweenPrecision == 'string' && this._options.tweenPrecision.includes('%')) {\n var tweenPrecision = +this._options.tweenPrecision.split('%')[0] / 100;\n var tweenPrecisionIsRelative = this._options.tweenPrecision.includes('%');\n } else {\n var tweenPrecision = this._options.tweenPrecision;\n var tweenPrecisionIsRelative = false;\n }\n var growEnteringEdges = this._options.growEnteringEdges;\n var dictionary = {};\n var prevDictionary = this._dictionary || {};\n var nodeDictionary = {};\n var prevNodeDictionary = this._nodeDictionary || {};\n\n function setKey(datum, index) {\n var tag = datum.tag;\n if (keyMode == 'index') {\n datum.key = index;\n } else if (tag[0] != '#') {\n if (keyMode == 'id') {\n datum.key = datum.attributes.id;\n } else if (keyMode == 'title') {\n var title = datum.children.find(function (childData) {\n return childData.tag == 'title';\n });\n if (title) {\n if (title.children.length > 0) {\n datum.key = title.children[0].text;\n } else {\n datum.key = '';\n }\n }\n }\n }\n if (datum.key == null) {\n if (tweenShapes) {\n if (tag == 'ellipse' || tag == 'polygon') {\n tag = 'path';\n }\n }\n datum.key = tag + '-' + index;\n }\n }\n\n function setId(datum, parentData) {\n var id = (parentData ? parentData.id + '.' : '') + datum.key;\n datum.id = id;\n }\n\n function addToDictionary(datum) {\n dictionary[datum.id] = datum;\n }\n\n function calculateAlternativeShapeData(datum, prevDatum) {\n if (tweenShapes && datum.id in prevDictionary) {\n if ((prevDatum.tag == 'polygon' || prevDatum.tag == 'ellipse' || prevDatum.tag == 'path') && (prevDatum.tag != datum.tag || datum.tag == 'polygon')) {\n if (prevDatum.tag != 'path') {\n datum.alternativeOld = convertToPathData(prevDatum, datum);\n }\n if (datum.tag != 'path') {\n datum.alternativeNew = convertToPathData(datum, prevDatum);\n }\n }\n }\n }\n\n function calculatePathTweenPoints(datum, prevDatum) {\n if (tweenPaths && prevDatum && (prevDatum.tag == 'path' || (datum.alternativeOld && datum.alternativeOld.tag == 'path'))) {\n var attribute_d = (datum.alternativeNew || datum).attributes.d;\n if (datum.alternativeOld) {\n var oldNode = createElementWithAttributes(datum.alternativeOld);\n } else {\n var oldNode = createElementWithAttributes(prevDatum);\n }\n (datum.alternativeOld || (datum.alternativeOld = {})).points = pathTweenPoints(oldNode, attribute_d, tweenPrecision, tweenPrecisionIsRelative);\n }\n }\n\n function postProcessDataPass1Local(datum, index=0, parentData) {\n setKey(datum, index);\n setId(datum, parentData);\n var id = datum.id;\n var prevDatum = prevDictionary[id];\n addToDictionary(datum);\n calculateAlternativeShapeData(datum, prevDatum);\n calculatePathTweenPoints(datum, prevDatum);\n var childTagIndexes = {};\n datum.children.forEach(function (childData) {\n var childTag = childData.tag;\n if (childTag == 'ellipse' || childTag == 'polygon') {\n childTag = 'path';\n }\n if (childTagIndexes[childTag] == null) {\n childTagIndexes[childTag] = 0;\n }\n var childIndex = childTagIndexes[childTag]++;\n postProcessDataPass1Local(childData, childIndex, datum);\n });\n }\n\n function addToNodeDictionary(datum) {\n var tag = datum.tag;\n if (growEnteringEdges && datum.parent) {\n if (datum.parent.attributes.class == 'node') {\n if (tag == 'title') {\n if (datum.children.length > 0) {\n var child = datum.children[0];\n var nodeId = child.text;\n } else {\n var nodeId = '';\n }\n nodeDictionary[nodeId] = datum.parent;\n }\n }\n }\n }\n\n function extractGrowingEdgesData(datum) {\n var id = datum.id;\n var tag = datum.tag;\n var prevDatum = prevDictionary[id];\n if (growEnteringEdges && !prevDatum && datum.parent) {\n if (isEdgeElement(datum)) {\n if (tag == 'path' || tag == 'polygon') {\n if (tag == 'polygon') {\n var path = datum.parent.children.find(function (e) {\n return e.tag == 'path';\n });\n if (path) {\n datum.totalLength = path.totalLength;\n }\n }\n var title = getEdgeTitle(datum);\n var child = title.children[0];\n var nodeIds = child.text.split('->');\n if (nodeIds.length != 2) {\n nodeIds = child.text.split('--');\n }\n var startNodeId = nodeIds[0];\n var startNode = nodeDictionary[startNodeId];\n var prevStartNode = prevNodeDictionary[startNodeId];\n if (prevStartNode) {\n var i = startNode.children.findIndex(function (element, index) {\n return element.tag == 'g';\n });\n if (i >= 0) {\n var j = startNode.children[i].children.findIndex(function (element, index) {\n return element.tag == 'a';\n });\n startNode = startNode.children[i].children[j];\n }\n var i = prevStartNode.children.findIndex(function (element, index) {\n return element.tag == 'g';\n });\n if (i >= 0) {\n var j = prevStartNode.children[i].children.findIndex(function (element, index) {\n return element.tag == 'a';\n });\n prevStartNode = prevStartNode.children[i].children[j];\n }\n var startShapes = startNode.children;\n for (var i = 0; i < startShapes.length; i++) {\n if (startShapes[i].tag == 'polygon' || startShapes[i].tag == 'ellipse' || startShapes[i].tag == 'path' || startShapes[i].tag == 'text') {\n var startShape = startShapes[i];\n break;\n }\n }\n var prevStartShapes = prevStartNode.children;\n for (var i = 0; i < prevStartShapes.length; i++) {\n if (prevStartShapes[i].tag == 'polygon' || prevStartShapes[i].tag == 'ellipse' || prevStartShapes[i].tag == 'path' || prevStartShapes[i].tag == 'text') {\n var prevStartShape = prevStartShapes[i];\n break;\n }\n }\n if (prevStartShape && startShape) {\n datum.offset = {\n x: prevStartShape.center.x - startShape.center.x,\n y: prevStartShape.center.y - startShape.center.y,\n }\n } else {\n datum.offset = {x: 0, y: 0};\n }\n }\n }\n }\n }\n }\n\n function postProcessDataPass2Global(datum) {\n addToNodeDictionary(datum);\n extractGrowingEdgesData(datum);\n datum.children.forEach(function (childData) {\n postProcessDataPass2Global(childData);\n });\n }\n\n this._dispatch.call(\"layoutEnd\", this);\n\n var newDoc = d3.select(document.createDocumentFragment())\n .append('div');\n\n var parser = new window.DOMParser();\n var doc = parser.parseFromString(svgDoc, \"image/svg+xml\");\n\n newDoc\n .append(function() {\n return doc.documentElement;\n });\n\n var newSvg = newDoc\n .select('svg');\n\n var data = extractAllElementsData(newSvg);\n this._dispatch.call('dataExtractEnd', this);\n postProcessDataPass1Local(data);\n this._dispatch.call('dataProcessPass1End', this);\n postProcessDataPass2Global(data);\n this._dispatch.call('dataProcessPass2End', this);\n this._data = data;\n this._dictionary = dictionary;\n this._nodeDictionary = nodeDictionary;\n\n this._extractData = function (element, childIndex, parentData) {\n var data = extractAllElementsData(element);\n postProcessDataPass1Local(data, childIndex, parentData);\n postProcessDataPass2Global(data);\n return data;\n }\n this._busy = false;\n this._dispatch.call('dataProcessEnd', this);\n if (callback) {\n callback.call(this);\n }\n if (this._queue.length > 0) {\n var job = this._queue.shift();\n job.call(this);\n }\n}\n","export default function(src, callback) {\n\n var graphvizInstance = this;\n\n this\n .dot(src, render);\n\n function render() {\n graphvizInstance\n .render(callback);\n }\n\n return this;\n};\n","import {transition} from \"d3-transition\";\nimport {active as d3_active} from \"d3-transition\";\n\nexport default function(name) {\n\n if (name instanceof Function) {\n this._transitionFactory = name;\n } else {\n this._transition = transition(name);\n }\n\n return this;\n};\n\nexport function active(name) {\n\n var root = this._selection;\n var svg = root.selectWithoutDataPropagation(\"svg\");\n if (svg.size() != 0) {\n return d3_active(svg.node(), name);\n } else {\n return null;\n }\n};\n","export default function(options) {\n\n if (typeof options == 'undefined') {\n return Object.assign({}, this._options);\n } else {\n for (var option of Object.keys(options)) {\n this._options[option] = options[option];\n }\n return this;\n }\n};\n","export default function(width) {\n\n this._options.width = width;\n\n return this;\n};\n","export default function(height) {\n\n this._options.height = height;\n\n return this;\n};\n","export default function(scale) {\n\n this._options.scale = scale;\n\n return this;\n};\n","export default function(fit) {\n\n this._options.fit = fit;\n\n return this;\n};\n","export default function(callback) {\n\n this._attributer = callback;\n\n return this;\n};\n","export default function(engine) {\n\n this._options.engine = engine;\n\n return this;\n};\n","export default function(path, width, height) {\n\n this._images.push({path:path, width: width, height:height})\n\n return this;\n};\n","export default function(keyMode) {\n\n if (!this._keyModes.has(keyMode)) {\n throw Error('Illegal keyMode: ' + keyMode);\n }\n if (keyMode != this._options.keyMode && this._data != null) {\n throw Error('Too late to change keyMode');\n }\n this._options.keyMode = keyMode;\n\n return this;\n};\n","export default function(enable) {\n\n this._options.fade = enable\n\n return this;\n};\n","export default function(enable) {\n\n this._options.tweenPaths = enable;\n\n return this;\n};\n","export default function(enable) {\n\n this._options.tweenShapes = enable;\n if (enable) {\n this._options.tweenPaths = true;\n }\n\n return this;\n};\n","export default function(enable) {\n\n this._options.convertEqualSidedPolygons = enable;\n\n return this;\n};\n","export default function(precision) {\n\n this._options.tweenPrecision = precision;\n\n return this;\n};\n","export default function(enable) {\n\n this._options.growEnteringEdges = enable;\n\n return this;\n};\n","export default function(typenames, callback) {\n\n this._dispatch.on(typenames, callback);\n\n return this;\n};\n","export default function(callback) {\n\n this._onerror = callback\n\n return this;\n};\n","import {format} from \"d3-format\";\n\nexport default function(enable) {\n\n var t0 = Date.now();\n var times = {};\n var eventTypes = this._eventTypes;\n var maxEventTypeLength = Math.max(...(eventTypes.map(eventType => eventType.length)));\n for (let i = 0; i < eventTypes.length; i++) {\n let eventType = eventTypes[i];\n times[eventType] = [];\n var graphvizInstance = this;\n var expectedDelay;\n var expectedDuration;\n this\n .on(eventType + '.log', enable ? function () {\n var t = Date.now();\n var seqNo = times[eventType].length;\n times[eventType].push(t);\n var string = '';\n string += 'Event ';\n string += format(' >2')(i) + ' ';\n string += eventType + ' '.repeat(maxEventTypeLength - eventType.length);\n string += format(' >5')(t - t0) + ' ';\n if (eventType != 'initEnd') {\n string += format(' >5')(t - times['start'][seqNo]);\n }\n if (eventType == 'dataProcessEnd') {\n string += ' prepare ' + format(' >5')((t - times['layoutEnd'][seqNo]));\n }\n if (eventType == 'renderEnd' && graphvizInstance._transition) {\n string += ' transition start margin ' + format(' >5')(graphvizInstance._transition.delay() - (t - times['renderStart'][seqNo]));\n expectedDelay = graphvizInstance._transition.delay();\n expectedDuration = graphvizInstance._transition.duration();\n }\n if (eventType == 'transitionStart') {\n var actualDelay = (t - times['renderStart'][seqNo])\n string += ' transition delay ' + format(' >5')(t - times['renderStart'][seqNo]);\n string += ' expected ' + format(' >5')(expectedDelay);\n string += ' diff ' + format(' >5')(actualDelay - expectedDelay);\n }\n if (eventType == 'transitionEnd') {\n var actualDuration = t - times['transitionStart'][seqNo]\n string += ' transition duration ' + format(' >5')(actualDuration);\n string += ' expected ' + format(' >5')(expectedDuration);\n string += ' diff ' + format(' >5')(actualDuration - expectedDuration);\n }\n console.log(string);\n t0 = t;\n } : null);\n }\n return this;\n}\n","export default function() {\n\n delete this._selection.node().__graphviz__;\n if (this._worker) {\n this._workerPortClose();\n }\n return this;\n};\n","export function rotate(x, y, cosA, sinA) {\n // (x + j * y) * (cosA + j * sinA) = x * cosA - y * sinA + j * (x * sinA + y * cosA)\n y = -y;\n sinA = -sinA;\n [x, y] = [x * cosA - y * sinA, x * sinA + y * cosA];\n y = -y;\n return [x, y];\n}\n","import * as d3 from \"d3-selection\";\nimport {path as d3_path} from \"d3-path\";\nimport {rotate} from \"./geometry\";\nimport {extractAllElementsData} from \"./element\";\nimport {attributeElement} from \"./element\";\nimport {insertAllElementsData} from \"./element\";\n\nexport function drawEdge(x1, y1, x2, y2, attributes, options={}) {\n attributes = Object.assign({}, attributes);\n if (attributes.style && attributes.style.includes('invis')) {\n var newEdge = d3.select(null);\n } else {\n var root = this._selection;\n var svg = root.selectWithoutDataPropagation(\"svg\");\n var graph0 = svg.selectWithoutDataPropagation(\"g\");\n var newEdge0 = createEdge.call(this, attributes);\n var edgeData = extractAllElementsData(newEdge0);\n var newEdge = graph0.append('g')\n .data([edgeData]);\n attributeElement.call(newEdge.node(), edgeData);\n _updateEdge.call(this, newEdge, x1, y1, x2, y2, attributes, options);\n }\n this._drawnEdge = {\n g: newEdge,\n x1: x1,\n y1: y1,\n x2: x2,\n y2: y2,\n attributes: attributes,\n };\n\n return this;\n}\n\nexport function updateDrawnEdge(x1, y1, x2, y2, attributes={}, options={}) {\n if (!this._drawnEdge) {\n throw Error('No edge has been drawn');\n }\n var edge = this._drawnEdge.g\n attributes = Object.assign(this._drawnEdge.attributes, attributes);\n this._drawnEdge.x1 = x1;\n this._drawnEdge.y1 = y1;\n this._drawnEdge.x2 = x2;\n this._drawnEdge.y2 = y2;\n if (edge.empty() && !(attributes.style && attributes.style.includes('invis'))) {\n var root = this._selection;\n var svg = root.selectWithoutDataPropagation(\"svg\");\n var graph0 = svg.selectWithoutDataPropagation(\"g\");\n var edge = graph0.append('g');\n this._drawnEdge.g = edge;\n }\n if (!edge.empty()) {\n _updateEdge.call(this, edge, x1, y1, x2, y2, attributes, options);\n }\n\n return this;\n}\n\nfunction _updateEdge(edge, x1, y1, x2, y2, attributes, options) {\n\n var newEdge = createEdge.call(this, attributes);\n var edgeData = extractAllElementsData(newEdge);\n edge.data([edgeData]);\n attributeElement.call(edge.node(), edgeData);\n _moveEdge(edge, x1, y1, x2, y2, attributes, options);\n}\n\nfunction _moveEdge(edge, x1, y1, x2, y2, attributes, options) {\n\n var shortening = options.shortening || 0;\n var arrowHeadLength = 10;\n var arrowHeadWidth = 7;\n var margin = 0.1;\n\n var arrowHeadPoints = [\n [0, -arrowHeadWidth / 2],\n [arrowHeadLength, 0],\n [0, arrowHeadWidth / 2],\n [0, -arrowHeadWidth / 2],\n ];\n\n var dx = x2 - x1;\n var dy = y2 - y1;\n var length = Math.sqrt(dx * dx + dy * dy);\n if (length == 0) {\n var cosA = 1;\n var sinA = 0;\n } else {\n var cosA = dx / length;\n var sinA = dy / length;\n }\n x2 = x1 + (length - shortening - arrowHeadLength - margin) * cosA;\n y2 = y1 + (length - shortening - arrowHeadLength - margin) * sinA;\n\n if (attributes.URL || attributes.tooltip) {\n var a = edge.selectWithoutDataPropagation(\"g\").selectWithoutDataPropagation(\"a\");\n var line = a.selectWithoutDataPropagation(\"path\");\n var arrowHead = a.selectWithoutDataPropagation(\"polygon\");\n } else {\n var line = edge.selectWithoutDataPropagation(\"path\");\n var arrowHead = edge.selectWithoutDataPropagation(\"polygon\");\n }\n\n var path1 = d3_path();\n path1.moveTo(x1, y1);\n path1.lineTo(x2, y2);\n\n line\n .attr(\"d\", path1);\n\n x2 = x1 + (length - shortening - arrowHeadLength) * cosA;\n y2 = y1 + (length - shortening - arrowHeadLength) * sinA;\n for (var i = 0; i < arrowHeadPoints.length; i++) {\n var point = arrowHeadPoints[i];\n arrowHeadPoints[i] = rotate(point[0], point[1], cosA, sinA);\n }\n for (var i = 0; i < arrowHeadPoints.length; i++) {\n var point = arrowHeadPoints[i];\n arrowHeadPoints[i] = [x2 + point[0], y2 + point[1]];\n }\n var allPoints = [];\n for (var i = 0; i < arrowHeadPoints.length; i++) {\n var point = arrowHeadPoints[i];\n allPoints.push(point.join(','));\n }\n var pointsAttr = allPoints.join(' ');\n\n arrowHead\n .attr(\"points\", pointsAttr);\n\n return this;\n}\n\nexport function moveDrawnEdgeEndPoint(x2, y2, options={}) {\n\n if (!this._drawnEdge) {\n throw Error('No edge has been drawn');\n }\n var edge = this._drawnEdge.g;\n var x1 = this._drawnEdge.x1;\n var y1 = this._drawnEdge.y1;\n var attributes = this._drawnEdge.attributes;\n\n this._drawnEdge.x2 = x2;\n this._drawnEdge.y2 = y2;\n _moveEdge(edge, x1, y1, x2, y2, attributes, options);\n\n return this\n}\n\nexport function removeDrawnEdge() {\n\n if (!this._drawnEdge) {\n return this;\n }\n\n var edge = this._drawnEdge.g;\n\n edge.remove();\n\n this._drawnEdge = null;\n\n return this\n}\n\nexport function insertDrawnEdge(name) {\n\n if (!this._drawnEdge) {\n throw Error('No edge has been drawn');\n }\n\n var edge = this._drawnEdge.g;\n if (edge.empty()) {\n return this;\n }\n var attributes = this._drawnEdge.attributes;\n\n var title = edge.selectWithoutDataPropagation(\"title\");\n title\n .text(name);\n\n var root = this._selection;\n var svg = root.selectWithoutDataPropagation(\"svg\");\n var graph0 = svg.selectWithoutDataPropagation(\"g\");\n var graph0Datum = graph0.datum();\n var edgeData = this._extractData(edge, graph0Datum.children.length, graph0.datum());\n graph0Datum.children.push(edgeData);\n\n insertAllElementsData(edge, edgeData);\n\n this._drawnEdge = null;\n\n return this\n\n}\n\nexport function drawnEdgeSelection() {\n\n if (this._drawnEdge) {\n return this._drawnEdge.g;\n } else {\n return d3.select(null);\n }\n\n}\n\n\nfunction createEdge(attributes) {\n var attributesString = ''\n for (var name of Object.keys(attributes)) {\n if (attributes[name] != null) {\n attributesString += ' \"' + name + '\"=\"' + attributes[name] + '\"';\n }\n }\n var dotSrc = 'digraph {a -> b [' + attributesString + ']}';\n var svgDoc = this.layoutSync(dotSrc, 'svg', 'dot');\n var parser = new window.DOMParser();\n var doc = parser.parseFromString(svgDoc, \"image/svg+xml\");\n var newDoc = d3.select(document.createDocumentFragment())\n .append(function() {\n return doc.documentElement;\n });\n var edge = newDoc.select('.edge');\n\n return edge;\n}\n","import * as d3 from \"d3-selection\";\nimport {rotate} from \"./geometry\";\nimport {extractAllElementsData} from \"./element\";\nimport {translatePointsAttribute} from \"./svg\";\nimport {translateDAttribute} from \"./svg\";\nimport {insertAllElementsData} from \"./element\";\nimport {attributeElement} from \"./element\";\nimport {roundTo2Decimals} from \"./utils\";\n\nexport function drawNode(x, y, nodeId, attributes={}, options={}) {\n attributes = Object.assign({}, attributes);\n if (attributes.style && attributes.style.includes('invis')) {\n var newNode = d3.select(null);\n } else {\n var root = this._selection;\n var svg = root.selectWithoutDataPropagation(\"svg\");\n var graph0 = svg.selectWithoutDataPropagation(\"g\");\n var newNode0 = createNode.call(this, nodeId, attributes);\n var nodeData = extractAllElementsData(newNode0);\n var newNode = graph0.append('g')\n .data([nodeData]);\n attributeElement.call(newNode.node(), nodeData);\n _updateNode.call(this, newNode, x, y, nodeId, attributes, options);\n }\n this._drawnNode = {\n g: newNode,\n nodeId: nodeId,\n x: x,\n y: y,\n attributes: attributes,\n };\n\n return this;\n}\n\nexport function updateDrawnNode(x, y, nodeId, attributes={}, options={}) {\n if (!this._drawnNode) {\n throw Error('No node has been drawn');\n }\n\n var node = this._drawnNode.g\n if (nodeId == null) {\n nodeId = this._drawnNode.nodeId;\n }\n attributes = Object.assign(this._drawnNode.attributes, attributes);\n this._drawnNode.nodeId = nodeId;\n this._drawnNode.x = x;\n this._drawnNode.y = y;\n if (node.empty() && !(attributes.style && attributes.style.includes('invis'))) {\n var root = this._selection;\n var svg = root.selectWithoutDataPropagation(\"svg\");\n var graph0 = svg.selectWithoutDataPropagation(\"g\");\n var node = graph0.append('g');\n this._drawnNode.g = node;\n }\n if (!node.empty()) {\n _updateNode.call(this, node, x, y, nodeId, attributes, options);\n }\n\n return this;\n}\n\nfunction _updateNode(node, x, y, nodeId, attributes, options) {\n\n var newNode = createNode.call(this, nodeId, attributes);\n var nodeData = extractAllElementsData(newNode);\n node.data([nodeData]);\n attributeElement.call(node.node(), nodeData);\n _moveNode(node, x, y, attributes, options);\n\n return this;\n}\n\nfunction _moveNode(node, x, y, attributes, options) {\n if (attributes.URL || attributes.tooltip) {\n var subParent = node.selectWithoutDataPropagation(\"g\").selectWithoutDataPropagation(\"a\");\n } else {\n var subParent = node;\n }\n var svgElements = subParent.selectAll('ellipse,polygon,path,polyline');\n var text = node.selectWithoutDataPropagation(\"text\");\n\n if (svgElements.size() != 0) {\n var bbox = svgElements.node().getBBox();\n bbox.cx = bbox.x + bbox.width / 2;\n bbox.cy = bbox.y + bbox.height / 2;\n } else if (text.size() != 0) {\n bbox = {\n x: +text.attr('x'),\n y: +text.attr('y'),\n width: 0,\n height: 0,\n cx: +text.attr('x'),\n cy: +text.attr('y'),\n }\n }\n svgElements.each(function(data, index) {\n var svgElement = d3.select(this);\n if (svgElement.attr(\"cx\")) {\n svgElement\n .attr(\"cx\", roundTo2Decimals(x))\n .attr(\"cy\", roundTo2Decimals(y));\n } else if (svgElement.attr(\"points\")) {\n var pointsString = svgElement.attr('points').trim();\n svgElement\n .attr(\"points\", translatePointsAttribute(pointsString, x - bbox.cx, y - bbox.cy));\n } else {\n var d = svgElement.attr('d');\n svgElement\n .attr(\"d\", translateDAttribute(d, x - bbox.cx, y - bbox.cy));\n }\n });\n\n if (text.size() != 0) {\n text\n .attr(\"x\", roundTo2Decimals(+text.attr(\"x\") + x - bbox.cx))\n .attr(\"y\", roundTo2Decimals(+text.attr(\"y\") + y - bbox.cy));\n }\n return this;\n}\n\nexport function moveDrawnNode(x, y, options={}) {\n\n if (!this._drawnNode) {\n throw Error('No node has been drawn');\n }\n var node = this._drawnNode.g;\n var attributes = this._drawnNode.attributes;\n\n this._drawnNode.x = x;\n this._drawnNode.y = y;\n\n if (!node.empty()) {\n _moveNode(node, x, y, attributes, options);\n }\n\n return this\n}\n\nexport function removeDrawnNode() {\n\n if (!this._drawnNode) {\n return this;\n }\n\n var node = this._drawnNode.g;\n\n if (!node.empty()) {\n node.remove();\n }\n\n this._drawnNode = null;\n\n return this\n}\n\nexport function insertDrawnNode(nodeId) {\n\n if (!this._drawnNode) {\n throw Error('No node has been drawn');\n }\n\n if (nodeId == null) {\n nodeId = this._drawnNode.nodeId;\n }\n var node = this._drawnNode.g;\n if (node.empty()) {\n return this;\n }\n var attributes = this._drawnNode.attributes;\n\n var title = node.selectWithoutDataPropagation(\"title\");\n title\n .text(nodeId);\n if (attributes.URL || attributes.tooltip) {\n var ga = node.selectWithoutDataPropagation(\"g\");\n var a = ga.selectWithoutDataPropagation(\"a\");\n var svgElement = a.selectWithoutDataPropagation('ellipse,polygon,path,polyline');\n var text = a.selectWithoutDataPropagation('text');\n } else {\n var svgElement = node.selectWithoutDataPropagation('ellipse,polygon,path,polyline');\n var text = node.selectWithoutDataPropagation('text');\n }\n text\n .text(attributes.label || nodeId);\n\n var root = this._selection;\n var svg = root.selectWithoutDataPropagation(\"svg\");\n var graph0 = svg.selectWithoutDataPropagation(\"g\");\n var graph0Datum = graph0.datum();\n var nodeData = this._extractData(node, graph0Datum.children.length, graph0.datum());\n graph0Datum.children.push(nodeData);\n\n insertAllElementsData(node, nodeData);\n\n this._drawnNode = null;\n\n return this\n\n}\n\nexport function drawnNodeSelection() {\n\n if (this._drawnNode) {\n return this._drawnNode.g;\n } else {\n return d3.select(null);\n }\n\n}\n\nfunction createNode(nodeId, attributes) {\n var attributesString = ''\n for (var name of Object.keys(attributes)) {\n if (attributes[name] != null) {\n attributesString += ' \"' + name + '\"=\"' + attributes[name] + '\"';\n }\n }\n var dotSrc = 'graph {\"' + nodeId + '\" [' + attributesString + ']}';\n var svgDoc = this.layoutSync(dotSrc, 'svg', 'dot');\n var parser = new window.DOMParser();\n var doc = parser.parseFromString(svgDoc, \"image/svg+xml\");\n var newDoc = d3.select(document.createDocumentFragment())\n .append(function() {\n return doc.documentElement;\n });\n var node = newDoc.select('.node');\n\n return node;\n}\n","/* This file is excluded from coverage because the intrumented code\n * translates \"self\" which gives a reference error.\n */\n\n/* istanbul ignore next */\n\nexport function workerCodeBody(port) {\n\n self.document = {}; // Workaround for \"ReferenceError: document is not defined\" in hpccWasm\n\n port.addEventListener('message', function(event) {\n let hpccWasm = self[\"@hpcc-js/wasm\"];\n if (hpccWasm == undefined && event.data.vizURL) {\n importScripts(event.data.vizURL);\n hpccWasm = self[\"@hpcc-js/wasm\"];\n hpccWasm.wasmFolder(event.data.vizURL.match(/.*\\//)[0]);\n // This is an alternative workaround where wasmFolder() is not needed\n// document = {currentScript: {src: event.data.vizURL}};\n }\n hpccWasm.graphviz.layout(event.data.dot, \"svg\", event.data.engine, event.data.options).then((svg) => {\n if (svg) {\n port.postMessage({\n type: \"done\",\n svg: svg,\n });\n } else if (event.data.vizURL) {\n port.postMessage({\n type: \"init\",\n });\n } else {\n port.postMessage({\n type: \"skip\",\n });\n }\n }).catch(error => {\n port.postMessage({\n type: \"error\",\n error: error.message,\n });\n });\n });\n}\n\n/* istanbul ignore next */\n\nexport function workerCode() {\n\n const port = self;\n workerCodeBody(port);\n}\n\n/* istanbul ignore next */\n\nexport function sharedWorkerCode() {\n self.onconnect = function(e) {\n const port = e.ports[0];\n workerCodeBody(port);\n port.start();\n }\n}\n","import * as d3 from \"d3-selection\";\nimport {dispatch} from \"d3-dispatch\";\nimport render from \"./render\";\nimport {layout} from \"./dot\";\nimport dot from \"./dot\";\nimport data from \"./data\";\nimport {initViz} from \"./dot\";\nimport renderDot from \"./renderDot\";\nimport transition from \"./transition\";\nimport {active} from \"./transition\";\nimport options from \"./options\";\nimport width from \"./width\";\nimport height from \"./height\";\nimport scale from \"./scale\";\nimport fit from \"./fit\";\nimport attributer from \"./attributer\";\nimport engine from \"./engine\";\nimport images from \"./images\";\nimport keyMode from \"./keyMode\";\nimport fade from \"./fade\";\nimport tweenPaths from \"./tweenPaths\";\nimport tweenShapes from \"./tweenShapes\";\nimport convertEqualSidedPolygons from \"./convertEqualSidedPolygons\";\nimport tweenPrecision from \"./tweenPrecision\";\nimport growEnteringEdges from \"./growEnteringEdges\";\nimport zoom from \"./zoom\";\nimport {resetZoom} from \"./zoom\";\nimport {zoomBehavior} from \"./zoom\";\nimport {zoomSelection} from \"./zoom\";\nimport {zoomScaleExtent} from \"./zoom\";\nimport {zoomTranslateExtent} from \"./zoom\";\nimport on from \"./on\";\nimport onerror from \"./onerror\";\nimport logEvents from \"./logEvents\";\nimport destroy from \"./destroy\";\nimport {drawEdge} from \"./drawEdge\";\nimport {updateDrawnEdge} from \"./drawEdge\";\nimport {moveDrawnEdgeEndPoint} from \"./drawEdge\";\nimport {insertDrawnEdge} from \"./drawEdge\";\nimport {removeDrawnEdge} from \"./drawEdge\";\nimport {drawnEdgeSelection} from \"./drawEdge\";\nimport {drawNode} from \"./drawNode\";\nimport {updateDrawnNode} from \"./drawNode\";\nimport {moveDrawnNode} from \"./drawNode\";\nimport {insertDrawnNode} from \"./drawNode\";\nimport {removeDrawnNode} from \"./drawNode\";\nimport {drawnNodeSelection} from \"./drawNode\";\nimport {workerCode} from \"./workerCode\";\nimport {sharedWorkerCode} from \"./workerCode\";\nimport {workerCodeBody} from \"./workerCode\";\n\nexport function Graphviz(selection, options) {\n this._options = {\n useWorker: true,\n useSharedWorker: false,\n engine: 'dot',\n keyMode: 'title',\n fade: true,\n tweenPaths: true,\n tweenShapes: true,\n convertEqualSidedPolygons: true,\n tweenPrecision: 1,\n growEnteringEdges: true,\n zoom: true,\n zoomScaleExtent: [0.1, 10],\n zoomTranslateExtent: [[-Infinity, -Infinity], [+Infinity, +Infinity]],\n width: null,\n height: null,\n scale: 1,\n fit: false,\n };\n if (options instanceof Object) {\n for (var option of Object.keys(options)) {\n this._options[option] = options[option];\n }\n } else if (typeof options == 'boolean') {\n this._options.useWorker = options;\n }\n var useWorker = this._options.useWorker;\n var useSharedWorker = this._options.useSharedWorker;\n if (typeof Worker == 'undefined') {\n useWorker = false;\n }\n if (typeof SharedWorker == 'undefined') {\n useSharedWorker = false;\n }\n if (useWorker || useSharedWorker) {\n var scripts = d3.selectAll('script');\n var vizScript = scripts.filter(function() {\n return d3.select(this).attr('type') == 'javascript/worker' || (d3.select(this).attr('src') && d3.select(this).attr('src').match(/.*\\/@hpcc-js\\/wasm/));\n });\n if (vizScript.size() == 0) {\n console.warn('No script tag of type \"javascript/worker\" was found and \"useWorker\" is true. Not using web worker.');\n useWorker = false;\n useSharedWorker = false;\n } else {\n this._vizURL = vizScript.attr('src');\n if (!this._vizURL) {\n console.warn('No \"src\" attribute of was found on the \"javascript/worker\" script tag and \"useWorker\" is true. Not using web worker.');\n useWorker = false;\n useSharedWorker = false;\n }\n }\n }\n if (useSharedWorker) {\n const url = 'data:application/javascript;base64,' + btoa(workerCodeBody.toString() + '(' + sharedWorkerCode.toString() + ')()');\n this._worker = this._worker = new SharedWorker(url);\n this._workerPort = this._worker.port;\n this._workerPortClose = this._worker.port.close.bind(this._workerPort);\n this._worker.port.start();\n this._workerCallbacks = [];\n }\n else if (useWorker) {\n var blob = new Blob([workerCodeBody.toString() + '(' + workerCode.toString() + ')()']);\n var blobURL = window.URL.createObjectURL(blob);\n this._worker = new Worker(blobURL);\n this._workerPort = this._worker;\n this._workerPortClose = this._worker.terminate.bind(this._worker);\n this._workerCallbacks = [];\n }\n this._selection = selection;\n this._active = false;\n this._busy = false;\n this._jobs = [];\n this._queue = [];\n this._keyModes = new Set([\n 'title',\n 'id',\n 'tag-index',\n 'index'\n ]);\n this._images = [];\n this._translation = undefined;\n this._scale = undefined;\n this._eventTypes = [\n 'initEnd',\n 'start',\n 'layoutStart',\n 'layoutEnd',\n 'dataExtractEnd',\n 'dataProcessPass1End',\n 'dataProcessPass2End',\n 'dataProcessEnd',\n 'renderStart',\n 'renderEnd',\n 'transitionStart',\n 'transitionEnd',\n 'restoreEnd',\n 'end'\n ];\n this._dispatch = dispatch(...this._eventTypes);\n initViz.call(this);\n selection.node().__graphviz__ = this;\n}\n\nexport default function graphviz(selector, options) {\n var g = d3.select(selector).graphviz(options);\n return g;\n}\n\nGraphviz.prototype = graphviz.prototype = {\n constructor: Graphviz,\n engine: engine,\n addImage: images,\n keyMode: keyMode,\n fade: fade,\n tweenPaths: tweenPaths,\n tweenShapes: tweenShapes,\n convertEqualSidedPolygons: convertEqualSidedPolygons,\n tweenPrecision: tweenPrecision,\n growEnteringEdges: growEnteringEdges,\n zoom: zoom,\n resetZoom: resetZoom,\n zoomBehavior: zoomBehavior,\n zoomSelection: zoomSelection,\n zoomScaleExtent: zoomScaleExtent,\n zoomTranslateExtent: zoomTranslateExtent,\n render: render,\n layout: layout,\n dot: dot,\n data: data,\n renderDot: renderDot,\n transition: transition,\n active: active,\n options: options,\n width: width,\n height: height,\n scale: scale,\n fit: fit,\n attributer: attributer,\n on: on,\n onerror: onerror,\n logEvents: logEvents,\n destroy: destroy,\n drawEdge: drawEdge,\n updateDrawnEdge: updateDrawnEdge,\n moveDrawnEdgeEndPoint,\n insertDrawnEdge,\n removeDrawnEdge, removeDrawnEdge,\n drawnEdgeSelection, drawnEdgeSelection,\n drawNode: drawNode,\n updateDrawnNode: updateDrawnNode,\n moveDrawnNode: moveDrawnNode,\n insertDrawnNode,\n removeDrawnNode, removeDrawnNode,\n drawnNodeSelection, drawnNodeSelection,\n};\n","import {Graphviz} from \"../graphviz\";\nimport {timeout} from \"d3-timer\";\n\nexport default function(options) {\n\n var g = this.node().__graphviz__;\n if (g) {\n g.options(options);\n // Ensure a possible new initEnd event handler is attached before calling it\n timeout(function () {\n g._dispatch.call(\"initEnd\", this);\n }.bind(this), 0);\n } else {\n g = new Graphviz(this, options);\n }\n return g;\n}\n","import * as d3 from \"d3-selection\";\n\nexport default function(name) {\n\n return d3.select(this.size() > 0 ? this.node().querySelector(name) : null);\n}\n","import {selection} from \"d3-selection\";\nimport selection_graphviz from \"./graphviz\";\nimport selection_selectWithoutDataPropagation from \"./selectWithoutDataPropagation\";\n\nselection.prototype.graphviz = selection_graphviz;\nselection.prototype.selectWithoutDataPropagation = selection_selectWithoutDataPropagation;\n"],"names":["d3","zoom","interpolate","zoomTransform","zoomIdentity","timeout","transition","interpolateTransformSvg","graphviz","graphvizSync","d3_active","format","d3_path","dispatch","selection"],"mappings":"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"} \ No newline at end of file