Spaces:
Build error
Build error
File size: 2,361 Bytes
c211499 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
import * as d3 from 'd3';
import * as _ from 'lodash-es';
import { addLabel } from './label/add-label.js';
import * as util from './util.js';
export { createNodes, setCreateNodes };
var createNodes = function (selection, g, shapes) {
var simpleNodes = g.nodes().filter(function (v) {
return !util.isSubgraph(g, v);
});
var svgNodes = selection
.selectAll('g.node')
.data(simpleNodes, function (v) {
return v;
})
.classed('update', true);
svgNodes.exit().remove();
svgNodes.enter().append('g').attr('class', 'node').style('opacity', 0);
svgNodes = selection.selectAll('g.node');
svgNodes.each(function (v) {
var node = g.node(v);
var thisGroup = d3.select(this);
util.applyClass(
thisGroup,
node['class'],
(thisGroup.classed('update') ? 'update ' : '') + 'node'
);
thisGroup.select('g.label').remove();
var labelGroup = thisGroup.append('g').attr('class', 'label');
var labelDom = addLabel(labelGroup, node);
var shape = shapes[node.shape];
var bbox = _.pick(labelDom.node().getBBox(), 'width', 'height');
node.elem = this;
if (node.id) {
thisGroup.attr('id', node.id);
}
if (node.labelId) {
labelGroup.attr('id', node.labelId);
}
if (_.has(node, 'width')) {
bbox.width = node.width;
}
if (_.has(node, 'height')) {
bbox.height = node.height;
}
bbox.width += node.paddingLeft + node.paddingRight;
bbox.height += node.paddingTop + node.paddingBottom;
labelGroup.attr(
'transform',
'translate(' +
(node.paddingLeft - node.paddingRight) / 2 +
',' +
(node.paddingTop - node.paddingBottom) / 2 +
')'
);
var root = d3.select(this);
root.select('.label-container').remove();
var shapeSvg = shape(root, bbox, node).classed('label-container', true);
util.applyStyle(shapeSvg, node.style);
var shapeBBox = shapeSvg.node().getBBox();
node.width = shapeBBox.width;
node.height = shapeBBox.height;
});
var exitSelection;
if (svgNodes.exit) {
exitSelection = svgNodes.exit();
} else {
exitSelection = svgNodes.selectAll(null); // empty selection
}
util.applyTransition(exitSelection, g).style('opacity', 0).remove();
return svgNodes;
};
function setCreateNodes(value) {
createNodes = value;
}
|