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; | |
| } | |