devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
79 lines (72 loc) • 2.75 kB
JavaScript
/**
* DevExtreme (cjs/__internal/core/utils/m_svg.js)
* Version: 24.2.6
* Build date: Mon Mar 17 2025
*
* Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.HIDDEN_FOR_EXPORT = void 0;
exports.getSvgElement = getSvgElement;
exports.getSvgMarkup = getSvgMarkup;
var _dom_adapter = _interopRequireDefault(require("../../../core/dom_adapter"));
var _renderer = _interopRequireDefault(require("../../../core/renderer"));
var _type = require("../../../core/utils/type");
var _window = require("../../../core/utils/window");
function _interopRequireDefault(e) {
return e && e.__esModule ? e : {
default: e
}
}
const window = (0, _window.getWindow)();
function getMarkup(element, backgroundColor) {
const temp = _dom_adapter.default.createElement("div");
const clone = element.cloneNode(true);
if (backgroundColor) {
(0, _renderer.default)(clone).css("backgroundColor", backgroundColor)
}
temp.appendChild(clone);
return temp.innerHTML
}
function fixNamespaces(markup) {
let first = true;
if (-1 === markup.indexOf("xmlns:xlink")) {
markup = markup.replace("<svg", '<svg xmlns:xlink="http://www.w3.org/1999/xlink"')
}
markup = markup.replace(/xmlns="[\s\S]*?"/gi, (function(match) {
if (!first) {
return ""
}
first = false;
return match
}));
return markup.replace(/xmlns:NS1="[\s\S]*?"/gi, "").replace(/NS1:xmlns:xlink="([\s\S]*?)"/gi, 'xmlns:xlink="$1"')
}
function decodeHtmlEntities(markup) {
return markup.replace(/"/gi, """).replace(/&/gi, "&").replace(/'/gi, "'").replace(/</gi, "<").replace(/>/gi, ">").replace(/ /gi, " ").replace(/­/gi, "­")
}
const HIDDEN_FOR_EXPORT = exports.HIDDEN_FOR_EXPORT = "hidden-for-export";
function getSvgMarkup(element, backgroundColor) {
return fixNamespaces(decodeHtmlEntities(getMarkup(element, backgroundColor)))
}
function getSvgElement(markup) {
if ((0, _type.isString)(markup)) {
const parsedMarkup = (new window.DOMParser).parseFromString(markup, "image/svg+xml").childNodes[0];
return parsedMarkup
}
if (_dom_adapter.default.isNode(markup)) {
return markup
}
if ((0, _type.isRenderer)(markup)) {
return markup.get(0)
}
}
var _default = exports.default = {
getSvgElement: getSvgElement,
getSvgMarkup: getSvgMarkup,
HIDDEN_FOR_EXPORT: HIDDEN_FOR_EXPORT
};