import { keys, map } from '../core/util.js'; import { encodeHTML } from '../core/dom.js'; export var SVGNS = 'http://www.w3.org/2000/svg'; export var XLINKNS = 'http://www.w3.org/1999/xlink'; export var XMLNS = 'http://www.w3.org/2000/xmlns/'; export var XML_NAMESPACE = 'http://www.w3.org/XML/1998/namespace'; export var META_DATA_PREFIX = 'ecmeta_'; export function createElement(name) { return document.createElementNS(SVGNS, name); } ; export function createVNode(tag, key, attrs, children, text) { return { tag: tag, attrs: attrs || {}, children: children, text: text, key: key }; } function createElementOpen(name, attrs) { var attrsStr = []; if (attrs) { for (var key in attrs) { var val = attrs[key]; var part = key; if (val === false) { continue; } else if (val !== true && val != null) { part += "=\"" + val + "\""; } attrsStr.push(part); } } return "<" + name + " " + attrsStr.join(' ') + ">"; } function createElementClose(name) { return ""; } export function vNodeToString(el, opts) { opts = opts || {}; var S = opts.newline ? '\n' : ''; function convertElToString(el) { var children = el.children, tag = el.tag, attrs = el.attrs, text = el.text; return createElementOpen(tag, attrs) + (tag !== 'style' ? encodeHTML(text) : text || '') + (children ? "" + S + map(children, function (child) { return convertElToString(child); }).join(S) + S : '') + createElementClose(tag); } return convertElToString(el); } export function getCssString(selectorNodes, animationNodes, opts) { opts = opts || {}; var S = opts.newline ? '\n' : ''; var bracketBegin = " {" + S; var bracketEnd = S + "}"; var selectors = map(keys(selectorNodes), function (className) { return className + bracketBegin + map(keys(selectorNodes[className]), function (attrName) { return attrName + ":" + selectorNodes[className][attrName] + ";"; }).join(S) + bracketEnd; }).join(S); var animations = map(keys(animationNodes), function (animationName) { return "@keyframes " + animationName + bracketBegin + map(keys(animationNodes[animationName]), function (percent) { return percent + bracketBegin + map(keys(animationNodes[animationName][percent]), function (attrName) { var val = animationNodes[animationName][percent][attrName]; if (attrName === 'd') { val = "path(\"" + val + "\")"; } return attrName + ":" + val + ";"; }).join(S) + bracketEnd; }).join(S) + bracketEnd; }).join(S); if (!selectors && !animations) { return ''; } return [''].join(S); } export function createBrushScope(zrId) { return { zrId: zrId, shadowCache: {}, patternCache: {}, gradientCache: {}, clipPathCache: {}, defs: {}, cssNodes: {}, cssAnims: {}, cssStyleCache: {}, cssAnimIdx: 0, shadowIdx: 0, gradientIdx: 0, patternIdx: 0, clipPathIdx: 0 }; } export function createSVGVNode(width, height, children, useViewBox) { return createVNode('svg', 'root', { 'width': width, 'height': height, 'xmlns': SVGNS, 'xmlns:xlink': XLINKNS, 'version': '1.1', 'baseProfile': 'full', 'viewBox': useViewBox ? "0 0 " + width + " " + height : false }, children); }