Spaces:
Build error
Build error
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; | |
} | |