add-text-label.js 948 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import util from '../util'
  2. /*
  3. * Attaches a text label to the specified root. Handles escape sequences.
  4. */
  5. function addTextLabel (root, node) {
  6. const domNode = root.append('text')
  7. const lines = processEscapeSequences(node.label).split('\n')
  8. for (let i = 0; i < lines.length; i += 1) {
  9. domNode
  10. .append('tspan')
  11. .attr('xml:space', 'preserve')
  12. .attr('dy', '1em')
  13. .attr('x', '1')
  14. .text(lines[i])
  15. }
  16. util.applyStyle(domNode, node.labelStyle)
  17. return domNode
  18. }
  19. function processEscapeSequences (text) {
  20. let newText = ''
  21. let escaped = false
  22. let ch = null
  23. for (let i = 0; i < text.length; i += 1) {
  24. ch = text[i]
  25. if (escaped) {
  26. switch (ch) {
  27. case 'n': newText += '\n'; break
  28. default: newText += ch
  29. }
  30. escaped = false
  31. } else if (ch === '\\') {
  32. escaped = true
  33. } else {
  34. newText += ch
  35. }
  36. }
  37. return newText
  38. }
  39. export default addTextLabel