import createLabel from '../createLabel'; import { getConfig } from '../../config'; import { select } from 'd3'; import { evaluate } from '../../diagrams/common/common'; export const labelHelper = (parent, node, _classes, isNode) => { let classes; if (!_classes) { classes = 'node default'; } else { classes = _classes; } // Add outer g element const shapeSvg = parent .insert('g') .attr('class', classes) .attr('id', node.domId || node.id); // Create the label and insert it after the rect const label = shapeSvg .insert('g') .attr('class', 'label') .attr('style', node.labelStyle); const text = label .node() .appendChild(createLabel(node.labelText, node.labelStyle, false, isNode)); // Get the size of the label let bbox = text.getBBox(); if (evaluate(getConfig().flowchart.htmlLabels)) { const div = text.children[0]; const dv = select(text); bbox = div.getBoundingClientRect(); dv.attr('width', bbox.width); dv.attr('height', bbox.height); } const halfPadding = node.padding / 2; // Center the label label.attr('transform', 'translate(' + -bbox.width / 2 + ', ' + -bbox.height / 2 + ')'); return { shapeSvg, bbox, halfPadding, label }; }; export const updateNodeBounds = (node, element) => { const bbox = element.node().getBBox(); node.width = bbox.width; node.height = bbox.height; }; export function insertPolygonShape(parent, w, h, points) { return parent .insert('polygon', ':first-child') .attr( 'points', points .map(function(d) { return d.x + ',' + d.y; }) .join(' ') ) .attr('class', 'label-container') .attr('transform', 'translate(' + -w / 2 + ',' + h / 2 + ')'); }