create-edge-labels.js 1021 B

12345678910111213141516171819202122232425262728293031323334353637
  1. import * as d3 from 'd3'
  2. import _ from 'lodash'
  3. import addLabel from './label/add-label'
  4. import util from './util'
  5. function createEdgeLabels (selection, g) {
  6. let svgEdgeLabels = selection.selectAll('g.edgeLabel')
  7. .data(g.edges(), function (e) { return util.edgeToId(e) })
  8. .classed('update', true)
  9. svgEdgeLabels.selectAll('*').remove()
  10. svgEdgeLabels.enter()
  11. .append('g')
  12. .classed('edgeLabel', true)
  13. .style('opacity', 0)
  14. svgEdgeLabels = selection.selectAll('g.edgeLabel')
  15. svgEdgeLabels.each(function (e) {
  16. const edge = g.edge(e)
  17. const label = addLabel(d3.select(this), g.edge(e), 0, 0).classed('label', true)
  18. const bbox = label.node().getBBox()
  19. if (edge.labelId) { label.attr('id', edge.labelId) }
  20. if (!_.has(edge, 'width')) { edge.width = bbox.width }
  21. if (!_.has(edge, 'height')) { edge.height = bbox.height }
  22. })
  23. util.applyTransition(svgEdgeLabels.exit(), g)
  24. .style('opacity', 0)
  25. .remove()
  26. return svgEdgeLabels
  27. }
  28. export default createEdgeLabels