svgdata.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. /**
  2. * Sample plugin.
  3. */
  4. Draw.loadPlugin(function(ui) {
  5. /**
  6. * Overrides SVG export to add metadata for each cell.
  7. */
  8. var graphCreateSvgImageExport = Graph.prototype.createSvgImageExport;
  9. Graph.prototype.createSvgImageExport = function()
  10. {
  11. var exp = graphCreateSvgImageExport.apply(this, arguments);
  12. // Overrides rendering to add metadata
  13. var expDrawCellState = exp.drawCellState;
  14. exp.drawCellState = function(state, canvas)
  15. {
  16. var svgDoc = canvas.root.ownerDocument;
  17. var g = (svgDoc.createElementNS != null) ?
  18. svgDoc.createElementNS(mxConstants.NS_SVG, 'g') : svgDoc.createElement('g');
  19. g.setAttribute('id', 'cell-' + state.cell.id);
  20. // Temporary replaces root for content rendering
  21. var prev = canvas.root;
  22. prev.appendChild(g);
  23. canvas.root = g;
  24. expDrawCellState.apply(this, arguments);
  25. // Adds metadata if group is not empty
  26. if (g.firstChild == null)
  27. {
  28. g.parentNode.removeChild(g);
  29. }
  30. else if (mxUtils.isNode(state.cell.value))
  31. {
  32. g.setAttribute('content', mxUtils.getXml(state.cell.value));
  33. for (var i = 0; i < state.cell.value.attributes.length; i++)
  34. {
  35. var attrib = state.cell.value.attributes[i];
  36. g.setAttribute('data-' + attrib.name, attrib.value);
  37. }
  38. }
  39. // Restores previous root
  40. canvas.root = prev;
  41. };
  42. return exp;
  43. };
  44. });