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 "</" + name + ">"; 
 | 
} 
 | 
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 ['<![CDATA[', selectors, animations, ']]>'].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); 
 | 
} 
 |