svg.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. /**
  2. * DevExtreme (core/utils/svg.js)
  3. * Version: 19.1.16
  4. * Build date: Tue Oct 18 2022
  5. *
  6. * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED
  7. * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
  8. */
  9. "use strict";
  10. var domAdapter = require("../../core/dom_adapter");
  11. var window = require("./window").getWindow();
  12. var $ = require("../../core/renderer");
  13. function getMarkup(element, backgroundColor) {
  14. var temp = domAdapter.createElement("div");
  15. var clone = element.cloneNode(true);
  16. if (backgroundColor) {
  17. $(clone).css("backgroundColor", backgroundColor)
  18. }
  19. temp.appendChild(clone);
  20. return temp.innerHTML
  21. }
  22. function fixNamespaces(markup) {
  23. var first = true;
  24. if (markup.indexOf("xmlns:xlink") === -1) {
  25. markup = markup.replace("<svg", '<svg xmlns:xlink="http://www.w3.org/1999/xlink"')
  26. }
  27. markup = markup.replace(/xmlns="[\s\S]*?"/gi, function(match) {
  28. if (!first) {
  29. return ""
  30. }
  31. first = false;
  32. return match
  33. });
  34. return markup.replace(/xmlns:NS1="[\s\S]*?"/gi, "").replace(/NS1:xmlns:xlink="([\s\S]*?)"/gi, 'xmlns:xlink="$1"')
  35. }
  36. function decodeHtmlEntities(markup) {
  37. return markup.replace(/&quot;/gi, "&#34;").replace(/&amp;/gi, "&#38;").replace(/&apos;/gi, "&#39;").replace(/&lt;/gi, "&#60;").replace(/&gt;/gi, "&#62;").replace(/&nbsp;/gi, "&#160;").replace(/&shy;/gi, "&#173;")
  38. }
  39. exports.getSvgMarkup = function(element, backgroundColor) {
  40. return fixNamespaces(decodeHtmlEntities(getMarkup(element, backgroundColor)))
  41. };
  42. exports.getSvgElement = function(markup) {
  43. return domAdapter.isNode(markup) ? markup : (new window.DOMParser).parseFromString(markup, "image/svg+xml").childNodes[0]
  44. };