1 |
- {"version":3,"file":"js/chunk-vendors-9a940139.e463babd.js","mappings":"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","sources":["webpack://app/./node_modules/zrender/lib/tool/parseSVG.js","webpack://app/./node_modules/zrender/lib/tool/path.js","webpack://app/./node_modules/zrender/lib/tool/transformPath.js","webpack://app/./node_modules/zrender/lib/vml/Painter.js","webpack://app/./node_modules/zrender/lib/vml/core.js","webpack://app/./node_modules/zrender/lib/vml/graphic.js","webpack://app/./node_modules/zrender/lib/vml/vml.js","webpack://app/./node_modules/zrender/lib/zrender.js"],"sourcesContent":["var Group = require(\"../container/Group\");\n\nvar ZImage = require(\"../graphic/Image\");\n\nvar Text = require(\"../graphic/Text\");\n\nvar Circle = require(\"../graphic/shape/Circle\");\n\nvar Rect = require(\"../graphic/shape/Rect\");\n\nvar Ellipse = require(\"../graphic/shape/Ellipse\");\n\nvar Line = require(\"../graphic/shape/Line\");\n\nvar Path = require(\"../graphic/Path\");\n\nvar Polygon = require(\"../graphic/shape/Polygon\");\n\nvar Polyline = require(\"../graphic/shape/Polyline\");\n\nvar LinearGradient = require(\"../graphic/LinearGradient\");\n\nvar Style = require(\"../graphic/Style\");\n\nvar matrix = require(\"../core/matrix\");\n\nvar _path = require(\"./path\");\n\nvar createFromString = _path.createFromString;\n\nvar _util = require(\"../core/util\");\n\nvar isString = _util.isString;\nvar extend = _util.extend;\nvar defaults = _util.defaults;\nvar trim = _util.trim;\nvar each = _util.each;\n// import RadialGradient from '../graphic/RadialGradient';\n// import Pattern from '../graphic/Pattern';\n// import * as vector from '../core/vector';\n// Most of the values can be separated by comma and/or white space.\nvar DILIMITER_REG = /[\\s,]+/;\n/**\n * For big svg string, this method might be time consuming.\n *\n * @param {string} svg xml string\n * @return {Object} xml root.\n */\n\nfunction parseXML(svg) {\n if (isString(svg)) {\n var parser = new DOMParser();\n svg = parser.parseFromString(svg, 'text/xml');\n } // Document node. If using $.get, doc node may be input.\n\n\n if (svg.nodeType === 9) {\n svg = svg.firstChild;\n } // nodeName of <!DOCTYPE svg> is also 'svg'.\n\n\n while (svg.nodeName.toLowerCase() !== 'svg' || svg.nodeType !== 1) {\n svg = svg.nextSibling;\n }\n\n return svg;\n}\n\nfunction SVGParser() {\n this._defs = {};\n this._root = null;\n this._isDefine = false;\n this._isText = false;\n}\n\nSVGParser.prototype.parse = function (xml, opt) {\n opt = opt || {};\n var svg = parseXML(xml);\n\n if (!svg) {\n throw new Error('Illegal svg');\n }\n\n var root = new Group();\n this._root = root; // parse view port\n\n var viewBox = svg.getAttribute('viewBox') || ''; // If width/height not specified, means \"100%\" of `opt.width/height`.\n // TODO: Other percent value not supported yet.\n\n var width = parseFloat(svg.getAttribute('width') || opt.width);\n var height = parseFloat(svg.getAttribute('height') || opt.height); // If width/height not specified, set as null for output.\n\n isNaN(width) && (width = null);\n isNaN(height) && (height = null); // Apply inline style on svg element.\n\n parseAttributes(svg, root, null, true);\n var child = svg.firstChild;\n\n while (child) {\n this._parseNode(child, root);\n\n child = child.nextSibling;\n }\n\n var viewBoxRect;\n var viewBoxTransform;\n\n if (viewBox) {\n var viewBoxArr = trim(viewBox).split(DILIMITER_REG); // Some invalid case like viewBox: 'none'.\n\n if (viewBoxArr.length >= 4) {\n viewBoxRect = {\n x: parseFloat(viewBoxArr[0] || 0),\n y: parseFloat(viewBoxArr[1] || 0),\n width: parseFloat(viewBoxArr[2]),\n height: parseFloat(viewBoxArr[3])\n };\n }\n }\n\n if (viewBoxRect && width != null && height != null) {\n viewBoxTransform = makeViewBoxTransform(viewBoxRect, width, height);\n\n if (!opt.ignoreViewBox) {\n // If set transform on the output group, it probably bring trouble when\n // some users only intend to show the clipped content inside the viewBox,\n // but not intend to transform the output group. So we keep the output\n // group no transform. If the user intend to use the viewBox as a\n // camera, just set `opt.ignoreViewBox` as `true` and set transfrom\n // manually according to the viewBox info in the output of this method.\n var elRoot = root;\n root = new Group();\n root.add(elRoot);\n elRoot.scale = viewBoxTransform.scale.slice();\n elRoot.position = viewBoxTransform.position.slice();\n }\n } // Some shapes might be overflow the viewport, which should be\n // clipped despite whether the viewBox is used, as the SVG does.\n\n\n if (!opt.ignoreRootClip && width != null && height != null) {\n root.setClipPath(new Rect({\n shape: {\n x: 0,\n y: 0,\n width: width,\n height: height\n }\n }));\n } // Set width/height on group just for output the viewport size.\n\n\n return {\n root: root,\n width: width,\n height: height,\n viewBoxRect: viewBoxRect,\n viewBoxTransform: viewBoxTransform\n };\n};\n\nSVGParser.prototype._parseNode = function (xmlNode, parentGroup) {\n var nodeName = xmlNode.nodeName.toLowerCase(); // TODO\n // support <style>...</style> in svg, where nodeName is 'style',\n // CSS classes is defined globally wherever the style tags are declared.\n\n if (nodeName === 'defs') {\n // define flag\n this._isDefine = true;\n } else if (nodeName === 'text') {\n this._isText = true;\n }\n\n var el;\n\n if (this._isDefine) {\n var parser = defineParsers[nodeName];\n\n if (parser) {\n var def = parser.call(this, xmlNode);\n var id = xmlNode.getAttribute('id');\n\n if (id) {\n this._defs[id] = def;\n }\n }\n } else {\n var parser = nodeParsers[nodeName];\n\n if (parser) {\n el = parser.call(this, xmlNode, parentGroup);\n parentGroup.add(el);\n }\n }\n\n var child = xmlNode.firstChild;\n\n while (child) {\n if (child.nodeType === 1) {\n this._parseNode(child, el);\n } // Is text\n\n\n if (child.nodeType === 3 && this._isText) {\n this._parseText(child, el);\n }\n\n child = child.nextSibling;\n } // Quit define\n\n\n if (nodeName === 'defs') {\n this._isDefine = false;\n } else if (nodeName === 'text') {\n this._isText = false;\n }\n};\n\nSVGParser.prototype._parseText = function (xmlNode, parentGroup) {\n if (xmlNode.nodeType === 1) {\n var dx = xmlNode.getAttribute('dx') || 0;\n var dy = xmlNode.getAttribute('dy') || 0;\n this._textX += parseFloat(dx);\n this._textY += parseFloat(dy);\n }\n\n var text = new Text({\n style: {\n text: xmlNode.textContent,\n transformText: true\n },\n position: [this._textX || 0, this._textY || 0]\n });\n inheritStyle(parentGroup, text);\n parseAttributes(xmlNode, text, this._defs);\n var fontSize = text.style.fontSize;\n\n if (fontSize && fontSize < 9) {\n // PENDING\n text.style.fontSize = 9;\n text.scale = text.scale || [1, 1];\n text.scale[0] *= fontSize / 9;\n text.scale[1] *= fontSize / 9;\n }\n\n var rect = text.getBoundingRect();\n this._textX += rect.width;\n parentGroup.add(text);\n return text;\n};\n\nvar nodeParsers = {\n 'g': function (xmlNode, parentGroup) {\n var g = new Group();\n inheritStyle(parentGroup, g);\n parseAttributes(xmlNode, g, this._defs);\n return g;\n },\n 'rect': function (xmlNode, parentGroup) {\n var rect = new Rect();\n inheritStyle(parentGroup, rect);\n parseAttributes(xmlNode, rect, this._defs);\n rect.setShape({\n x: parseFloat(xmlNode.getAttribute('x') || 0),\n y: parseFloat(xmlNode.getAttribute('y') || 0),\n width: parseFloat(xmlNode.getAttribute('width') || 0),\n height: parseFloat(xmlNode.getAttribute('height') || 0)\n }); // console.log(xmlNode.getAttribute('transform'));\n // console.log(rect.transform);\n\n return rect;\n },\n 'circle': function (xmlNode, parentGroup) {\n var circle = new Circle();\n inheritStyle(parentGroup, circle);\n parseAttributes(xmlNode, circle, this._defs);\n circle.setShape({\n cx: parseFloat(xmlNode.getAttribute('cx') || 0),\n cy: parseFloat(xmlNode.getAttribute('cy') || 0),\n r: parseFloat(xmlNode.getAttribute('r') || 0)\n });\n return circle;\n },\n 'line': function (xmlNode, parentGroup) {\n var line = new Line();\n inheritStyle(parentGroup, line);\n parseAttributes(xmlNode, line, this._defs);\n line.setShape({\n x1: parseFloat(xmlNode.getAttribute('x1') || 0),\n y1: parseFloat(xmlNode.getAttribute('y1') || 0),\n x2: parseFloat(xmlNode.getAttribute('x2') || 0),\n y2: parseFloat(xmlNode.getAttribute('y2') || 0)\n });\n return line;\n },\n 'ellipse': function (xmlNode, parentGroup) {\n var ellipse = new Ellipse();\n inheritStyle(parentGroup, ellipse);\n parseAttributes(xmlNode, ellipse, this._defs);\n ellipse.setShape({\n cx: parseFloat(xmlNode.getAttribute('cx') || 0),\n cy: parseFloat(xmlNode.getAttribute('cy') || 0),\n rx: parseFloat(xmlNode.getAttribute('rx') || 0),\n ry: parseFloat(xmlNode.getAttribute('ry') || 0)\n });\n return ellipse;\n },\n 'polygon': function (xmlNode, parentGroup) {\n var points = xmlNode.getAttribute('points');\n\n if (points) {\n points = parsePoints(points);\n }\n\n var polygon = new Polygon({\n shape: {\n points: points || []\n }\n });\n inheritStyle(parentGroup, polygon);\n parseAttributes(xmlNode, polygon, this._defs);\n return polygon;\n },\n 'polyline': function (xmlNode, parentGroup) {\n var path = new Path();\n inheritStyle(parentGroup, path);\n parseAttributes(xmlNode, path, this._defs);\n var points = xmlNode.getAttribute('points');\n\n if (points) {\n points = parsePoints(points);\n }\n\n var polyline = new Polyline({\n shape: {\n points: points || []\n }\n });\n return polyline;\n },\n 'image': function (xmlNode, parentGroup) {\n var img = new ZImage();\n inheritStyle(parentGroup, img);\n parseAttributes(xmlNode, img, this._defs);\n img.setStyle({\n image: xmlNode.getAttribute('xlink:href'),\n x: xmlNode.getAttribute('x'),\n y: xmlNode.getAttribute('y'),\n width: xmlNode.getAttribute('width'),\n height: xmlNode.getAttribute('height')\n });\n return img;\n },\n 'text': function (xmlNode, parentGroup) {\n var x = xmlNode.getAttribute('x') || 0;\n var y = xmlNode.getAttribute('y') || 0;\n var dx = xmlNode.getAttribute('dx') || 0;\n var dy = xmlNode.getAttribute('dy') || 0;\n this._textX = parseFloat(x) + parseFloat(dx);\n this._textY = parseFloat(y) + parseFloat(dy);\n var g = new Group();\n inheritStyle(parentGroup, g);\n parseAttributes(xmlNode, g, this._defs);\n return g;\n },\n 'tspan': function (xmlNode, parentGroup) {\n var x = xmlNode.getAttribute('x');\n var y = xmlNode.getAttribute('y');\n\n if (x != null) {\n // new offset x\n this._textX = parseFloat(x);\n }\n\n if (y != null) {\n // new offset y\n this._textY = parseFloat(y);\n }\n\n var dx = xmlNode.getAttribute('dx') || 0;\n var dy = xmlNode.getAttribute('dy') || 0;\n var g = new Group();\n inheritStyle(parentGroup, g);\n parseAttributes(xmlNode, g, this._defs);\n this._textX += dx;\n this._textY += dy;\n return g;\n },\n 'path': function (xmlNode, parentGroup) {\n // TODO svg fill rule\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-rule\n // path.style.globalCompositeOperation = 'xor';\n var d = xmlNode.getAttribute('d') || ''; // Performance sensitive.\n\n var path = createFromString(d);\n inheritStyle(parentGroup, path);\n parseAttributes(xmlNode, path, this._defs);\n return path;\n }\n};\nvar defineParsers = {\n 'lineargradient': function (xmlNode) {\n var x1 = parseInt(xmlNode.getAttribute('x1') || 0, 10);\n var y1 = parseInt(xmlNode.getAttribute('y1') || 0, 10);\n var x2 = parseInt(xmlNode.getAttribute('x2') || 10, 10);\n var y2 = parseInt(xmlNode.getAttribute('y2') || 0, 10);\n var gradient = new LinearGradient(x1, y1, x2, y2);\n\n _parseGradientColorStops(xmlNode, gradient);\n\n return gradient;\n },\n 'radialgradient': function (xmlNode) {}\n};\n\nfunction _parseGradientColorStops(xmlNode, gradient) {\n var stop = xmlNode.firstChild;\n\n while (stop) {\n if (stop.nodeType === 1) {\n var offset = stop.getAttribute('offset');\n\n if (offset.indexOf('%') > 0) {\n // percentage\n offset = parseInt(offset, 10) / 100;\n } else if (offset) {\n // number from 0 to 1\n offset = parseFloat(offset);\n } else {\n offset = 0;\n }\n\n var stopColor = stop.getAttribute('stop-color') || '#000000';\n gradient.addColorStop(offset, stopColor);\n }\n\n stop = stop.nextSibling;\n }\n}\n\nfunction inheritStyle(parent, child) {\n if (parent && parent.__inheritedStyle) {\n if (!child.__inheritedStyle) {\n child.__inheritedStyle = {};\n }\n\n defaults(child.__inheritedStyle, parent.__inheritedStyle);\n }\n}\n\nfunction parsePoints(pointsString) {\n var list = trim(pointsString).split(DILIMITER_REG);\n var points = [];\n\n for (var i = 0; i < list.length; i += 2) {\n var x = parseFloat(list[i]);\n var y = parseFloat(list[i + 1]);\n points.push([x, y]);\n }\n\n return points;\n}\n\nvar attributesMap = {\n 'fill': 'fill',\n 'stroke': 'stroke',\n 'stroke-width': 'lineWidth',\n 'opacity': 'opacity',\n 'fill-opacity': 'fillOpacity',\n 'stroke-opacity': 'strokeOpacity',\n 'stroke-dasharray': 'lineDash',\n 'stroke-dashoffset': 'lineDashOffset',\n 'stroke-linecap': 'lineCap',\n 'stroke-linejoin': 'lineJoin',\n 'stroke-miterlimit': 'miterLimit',\n 'font-family': 'fontFamily',\n 'font-size': 'fontSize',\n 'font-style': 'fontStyle',\n 'font-weight': 'fontWeight',\n 'text-align': 'textAlign',\n 'alignment-baseline': 'textBaseline'\n};\n\nfunction parseAttributes(xmlNode, el, defs, onlyInlineStyle) {\n var zrStyle = el.__inheritedStyle || {};\n var isTextEl = el.type === 'text'; // TODO Shadow\n\n if (xmlNode.nodeType === 1) {\n parseTransformAttribute(xmlNode, el);\n extend(zrStyle, parseStyleAttribute(xmlNode));\n\n if (!onlyInlineStyle) {\n for (var svgAttrName in attributesMap) {\n if (attributesMap.hasOwnProperty(svgAttrName)) {\n var attrValue = xmlNode.getAttribute(svgAttrName);\n\n if (attrValue != null) {\n zrStyle[attributesMap[svgAttrName]] = attrValue;\n }\n }\n }\n }\n }\n\n var elFillProp = isTextEl ? 'textFill' : 'fill';\n var elStrokeProp = isTextEl ? 'textStroke' : 'stroke';\n el.style = el.style || new Style();\n var elStyle = el.style;\n zrStyle.fill != null && elStyle.set(elFillProp, getPaint(zrStyle.fill, defs));\n zrStyle.stroke != null && elStyle.set(elStrokeProp, getPaint(zrStyle.stroke, defs));\n each(['lineWidth', 'opacity', 'fillOpacity', 'strokeOpacity', 'miterLimit', 'fontSize'], function (propName) {\n var elPropName = propName === 'lineWidth' && isTextEl ? 'textStrokeWidth' : propName;\n zrStyle[propName] != null && elStyle.set(elPropName, parseFloat(zrStyle[propName]));\n });\n\n if (!zrStyle.textBaseline || zrStyle.textBaseline === 'auto') {\n zrStyle.textBaseline = 'alphabetic';\n }\n\n if (zrStyle.textBaseline === 'alphabetic') {\n zrStyle.textBaseline = 'bottom';\n }\n\n if (zrStyle.textAlign === 'start') {\n zrStyle.textAlign = 'left';\n }\n\n if (zrStyle.textAlign === 'end') {\n zrStyle.textAlign = 'right';\n }\n\n each(['lineDashOffset', 'lineCap', 'lineJoin', 'fontWeight', 'fontFamily', 'fontStyle', 'textAlign', 'textBaseline'], function (propName) {\n zrStyle[propName] != null && elStyle.set(propName, zrStyle[propName]);\n });\n\n if (zrStyle.lineDash) {\n el.style.lineDash = trim(zrStyle.lineDash).split(DILIMITER_REG);\n }\n\n if (elStyle[elStrokeProp] && elStyle[elStrokeProp] !== 'none') {\n // enable stroke\n el[elStrokeProp] = true;\n }\n\n el.__inheritedStyle = zrStyle;\n}\n\nvar urlRegex = /url\\(\\s*#(.*?)\\)/;\n\nfunction getPaint(str, defs) {\n // if (str === 'none') {\n // return;\n // }\n var urlMatch = defs && str && str.match(urlRegex);\n\n if (urlMatch) {\n var url = trim(urlMatch[1]);\n var def = defs[url];\n return def;\n }\n\n return str;\n}\n\nvar transformRegex = /(translate|scale|rotate|skewX|skewY|matrix)\\(([\\-\\s0-9\\.e,]*)\\)/g;\n\nfunction parseTransformAttribute(xmlNode, node) {\n var transform = xmlNode.getAttribute('transform');\n\n if (transform) {\n transform = transform.replace(/,/g, ' ');\n var m = null;\n var transformOps = [];\n transform.replace(transformRegex, function (str, type, value) {\n transformOps.push(type, value);\n });\n\n for (var i = transformOps.length - 1; i > 0; i -= 2) {\n var value = transformOps[i];\n var type = transformOps[i - 1];\n m = m || matrix.create();\n\n switch (type) {\n case 'translate':\n value = trim(value).split(DILIMITER_REG);\n matrix.translate(m, m, [parseFloat(value[0]), parseFloat(value[1] || 0)]);\n break;\n\n case 'scale':\n value = trim(value).split(DILIMITER_REG);\n matrix.scale(m, m, [parseFloat(value[0]), parseFloat(value[1] || value[0])]);\n break;\n\n case 'rotate':\n value = trim(value).split(DILIMITER_REG);\n matrix.rotate(m, m, parseFloat(value[0]));\n break;\n\n case 'skew':\n value = trim(value).split(DILIMITER_REG);\n console.warn('Skew transform is not supported yet');\n break;\n\n case 'matrix':\n var value = trim(value).split(DILIMITER_REG);\n m[0] = parseFloat(value[0]);\n m[1] = parseFloat(value[1]);\n m[2] = parseFloat(value[2]);\n m[3] = parseFloat(value[3]);\n m[4] = parseFloat(value[4]);\n m[5] = parseFloat(value[5]);\n break;\n }\n }\n\n node.setLocalTransform(m);\n }\n} // Value may contain space.\n\n\nvar styleRegex = /([^\\s:;]+)\\s*:\\s*([^:;]+)/g;\n\nfunction parseStyleAttribute(xmlNode) {\n var style = xmlNode.getAttribute('style');\n var result = {};\n\n if (!style) {\n return result;\n }\n\n var styleList = {};\n styleRegex.lastIndex = 0;\n var styleRegResult;\n\n while ((styleRegResult = styleRegex.exec(style)) != null) {\n styleList[styleRegResult[1]] = styleRegResult[2];\n }\n\n for (var svgAttrName in attributesMap) {\n if (attributesMap.hasOwnProperty(svgAttrName) && styleList[svgAttrName] != null) {\n result[attributesMap[svgAttrName]] = styleList[svgAttrName];\n }\n }\n\n return result;\n}\n/**\n * @param {Array.<number>} viewBoxRect\n * @param {number} width\n * @param {number} height\n * @return {Object} {scale, position}\n */\n\n\nfunction makeViewBoxTransform(viewBoxRect, width, height) {\n var scaleX = width / viewBoxRect.width;\n var scaleY = height / viewBoxRect.height;\n var scale = Math.min(scaleX, scaleY); // preserveAspectRatio 'xMidYMid'\n\n var viewBoxScale = [scale, scale];\n var viewBoxPosition = [-(viewBoxRect.x + viewBoxRect.width / 2) * scale + width / 2, -(viewBoxRect.y + viewBoxRect.height / 2) * scale + height / 2];\n return {\n scale: viewBoxScale,\n position: viewBoxPosition\n };\n}\n/**\n * @param {string|XMLElement} xml\n * @param {Object} [opt]\n * @param {number} [opt.width] Default width if svg width not specified or is a percent value.\n * @param {number} [opt.height] Default height if svg height not specified or is a percent value.\n * @param {boolean} [opt.ignoreViewBox]\n * @param {boolean} [opt.ignoreRootClip]\n * @return {Object} result:\n * {\n * root: Group, The root of the the result tree of zrender shapes,\n * width: number, the viewport width of the SVG,\n * height: number, the viewport height of the SVG,\n * viewBoxRect: {x, y, width, height}, the declared viewBox rect of the SVG, if exists,\n * viewBoxTransform: the {scale, position} calculated by viewBox and viewport, is exists.\n * }\n */\n\n\nfunction parseSVG(xml, opt) {\n var parser = new SVGParser();\n return parser.parse(xml, opt);\n}\n\nexports.parseXML = parseXML;\nexports.makeViewBoxTransform = makeViewBoxTransform;\nexports.parseSVG = parseSVG;","var Path = require(\"../graphic/Path\");\n\nvar PathProxy = require(\"../core/PathProxy\");\n\nvar transformPath = require(\"./transformPath\");\n\n// command chars\n// var cc = [\n// 'm', 'M', 'l', 'L', 'v', 'V', 'h', 'H', 'z', 'Z',\n// 'c', 'C', 'q', 'Q', 't', 'T', 's', 'S', 'a', 'A'\n// ];\nvar mathSqrt = Math.sqrt;\nvar mathSin = Math.sin;\nvar mathCos = Math.cos;\nvar PI = Math.PI;\n\nvar vMag = function (v) {\n return Math.sqrt(v[0] * v[0] + v[1] * v[1]);\n};\n\nvar vRatio = function (u, v) {\n return (u[0] * v[0] + u[1] * v[1]) / (vMag(u) * vMag(v));\n};\n\nvar vAngle = function (u, v) {\n return (u[0] * v[1] < u[1] * v[0] ? -1 : 1) * Math.acos(vRatio(u, v));\n};\n\nfunction processArc(x1, y1, x2, y2, fa, fs, rx, ry, psiDeg, cmd, path) {\n var psi = psiDeg * (PI / 180.0);\n var xp = mathCos(psi) * (x1 - x2) / 2.0 + mathSin(psi) * (y1 - y2) / 2.0;\n var yp = -1 * mathSin(psi) * (x1 - x2) / 2.0 + mathCos(psi) * (y1 - y2) / 2.0;\n var lambda = xp * xp / (rx * rx) + yp * yp / (ry * ry);\n\n if (lambda > 1) {\n rx *= mathSqrt(lambda);\n ry *= mathSqrt(lambda);\n }\n\n var f = (fa === fs ? -1 : 1) * mathSqrt((rx * rx * (ry * ry) - rx * rx * (yp * yp) - ry * ry * (xp * xp)) / (rx * rx * (yp * yp) + ry * ry * (xp * xp))) || 0;\n var cxp = f * rx * yp / ry;\n var cyp = f * -ry * xp / rx;\n var cx = (x1 + x2) / 2.0 + mathCos(psi) * cxp - mathSin(psi) * cyp;\n var cy = (y1 + y2) / 2.0 + mathSin(psi) * cxp + mathCos(psi) * cyp;\n var theta = vAngle([1, 0], [(xp - cxp) / rx, (yp - cyp) / ry]);\n var u = [(xp - cxp) / rx, (yp - cyp) / ry];\n var v = [(-1 * xp - cxp) / rx, (-1 * yp - cyp) / ry];\n var dTheta = vAngle(u, v);\n\n if (vRatio(u, v) <= -1) {\n dTheta = PI;\n }\n\n if (vRatio(u, v) >= 1) {\n dTheta = 0;\n }\n\n if (fs === 0 && dTheta > 0) {\n dTheta = dTheta - 2 * PI;\n }\n\n if (fs === 1 && dTheta < 0) {\n dTheta = dTheta + 2 * PI;\n }\n\n path.addData(cmd, cx, cy, rx, ry, theta, dTheta, psi, fs);\n}\n\nvar commandReg = /([mlvhzcqtsa])([^mlvhzcqtsa]*)/ig; // Consider case:\n// (1) delimiter can be comma or space, where continuous commas\n// or spaces should be seen as one comma.\n// (2) value can be like:\n// '2e-4', 'l.5.9' (ignore 0), 'M-10-10', 'l-2.43e-1,34.9983',\n// 'l-.5E1,54', '121-23-44-11' (no delimiter)\n\nvar numberReg = /-?([0-9]*\\.)?[0-9]+([eE]-?[0-9]+)?/g; // var valueSplitReg = /[\\s,]+/;\n\nfunction createPathProxyFromString(data) {\n if (!data) {\n return new PathProxy();\n } // var data = data.replace(/-/g, ' -')\n // .replace(/ /g, ' ')\n // .replace(/ /g, ',')\n // .replace(/,,/g, ',');\n // var n;\n // create pipes so that we can split the data\n // for (n = 0; n < cc.length; n++) {\n // cs = cs.replace(new RegExp(cc[n], 'g'), '|' + cc[n]);\n // }\n // data = data.replace(/-/g, ',-');\n // create array\n // var arr = cs.split('|');\n // init context point\n\n\n var cpx = 0;\n var cpy = 0;\n var subpathX = cpx;\n var subpathY = cpy;\n var prevCmd;\n var path = new PathProxy();\n var CMD = PathProxy.CMD; // commandReg.lastIndex = 0;\n // var cmdResult;\n // while ((cmdResult = commandReg.exec(data)) != null) {\n // var cmdStr = cmdResult[1];\n // var cmdContent = cmdResult[2];\n\n var cmdList = data.match(commandReg);\n\n for (var l = 0; l < cmdList.length; l++) {\n var cmdText = cmdList[l];\n var cmdStr = cmdText.charAt(0);\n var cmd; // String#split is faster a little bit than String#replace or RegExp#exec.\n // var p = cmdContent.split(valueSplitReg);\n // var pLen = 0;\n // for (var i = 0; i < p.length; i++) {\n // // '' and other invalid str => NaN\n // var val = parseFloat(p[i]);\n // !isNaN(val) && (p[pLen++] = val);\n // }\n\n var p = cmdText.match(numberReg) || [];\n var pLen = p.length;\n\n for (var i = 0; i < pLen; i++) {\n p[i] = parseFloat(p[i]);\n }\n\n var off = 0;\n\n while (off < pLen) {\n var ctlPtx;\n var ctlPty;\n var rx;\n var ry;\n var psi;\n var fa;\n var fs;\n var x1 = cpx;\n var y1 = cpy; // convert l, H, h, V, and v to L\n\n switch (cmdStr) {\n case 'l':\n cpx += p[off++];\n cpy += p[off++];\n cmd = CMD.L;\n path.addData(cmd, cpx, cpy);\n break;\n\n case 'L':\n cpx = p[off++];\n cpy = p[off++];\n cmd = CMD.L;\n path.addData(cmd, cpx, cpy);\n break;\n\n case 'm':\n cpx += p[off++];\n cpy += p[off++];\n cmd = CMD.M;\n path.addData(cmd, cpx, cpy);\n subpathX = cpx;\n subpathY = cpy;\n cmdStr = 'l';\n break;\n\n case 'M':\n cpx = p[off++];\n cpy = p[off++];\n cmd = CMD.M;\n path.addData(cmd, cpx, cpy);\n subpathX = cpx;\n subpathY = cpy;\n cmdStr = 'L';\n break;\n\n case 'h':\n cpx += p[off++];\n cmd = CMD.L;\n path.addData(cmd, cpx, cpy);\n break;\n\n case 'H':\n cpx = p[off++];\n cmd = CMD.L;\n path.addData(cmd, cpx, cpy);\n break;\n\n case 'v':\n cpy += p[off++];\n cmd = CMD.L;\n path.addData(cmd, cpx, cpy);\n break;\n\n case 'V':\n cpy = p[off++];\n cmd = CMD.L;\n path.addData(cmd, cpx, cpy);\n break;\n\n case 'C':\n cmd = CMD.C;\n path.addData(cmd, p[off++], p[off++], p[off++], p[off++], p[off++], p[off++]);\n cpx = p[off - 2];\n cpy = p[off - 1];\n break;\n\n case 'c':\n cmd = CMD.C;\n path.addData(cmd, p[off++] + cpx, p[off++] + cpy, p[off++] + cpx, p[off++] + cpy, p[off++] + cpx, p[off++] + cpy);\n cpx += p[off - 2];\n cpy += p[off - 1];\n break;\n\n case 'S':\n ctlPtx = cpx;\n ctlPty = cpy;\n var len = path.len();\n var pathData = path.data;\n\n if (prevCmd === CMD.C) {\n ctlPtx += cpx - pathData[len - 4];\n ctlPty += cpy - pathData[len - 3];\n }\n\n cmd = CMD.C;\n x1 = p[off++];\n y1 = p[off++];\n cpx = p[off++];\n cpy = p[off++];\n path.addData(cmd, ctlPtx, ctlPty, x1, y1, cpx, cpy);\n break;\n\n case 's':\n ctlPtx = cpx;\n ctlPty = cpy;\n var len = path.len();\n var pathData = path.data;\n\n if (prevCmd === CMD.C) {\n ctlPtx += cpx - pathData[len - 4];\n ctlPty += cpy - pathData[len - 3];\n }\n\n cmd = CMD.C;\n x1 = cpx + p[off++];\n y1 = cpy + p[off++];\n cpx += p[off++];\n cpy += p[off++];\n path.addData(cmd, ctlPtx, ctlPty, x1, y1, cpx, cpy);\n break;\n\n case 'Q':\n x1 = p[off++];\n y1 = p[off++];\n cpx = p[off++];\n cpy = p[off++];\n cmd = CMD.Q;\n path.addData(cmd, x1, y1, cpx, cpy);\n break;\n\n case 'q':\n x1 = p[off++] + cpx;\n y1 = p[off++] + cpy;\n cpx += p[off++];\n cpy += p[off++];\n cmd = CMD.Q;\n path.addData(cmd, x1, y1, cpx, cpy);\n break;\n\n case 'T':\n ctlPtx = cpx;\n ctlPty = cpy;\n var len = path.len();\n var pathData = path.data;\n\n if (prevCmd === CMD.Q) {\n ctlPtx += cpx - pathData[len - 4];\n ctlPty += cpy - pathData[len - 3];\n }\n\n cpx = p[off++];\n cpy = p[off++];\n cmd = CMD.Q;\n path.addData(cmd, ctlPtx, ctlPty, cpx, cpy);\n break;\n\n case 't':\n ctlPtx = cpx;\n ctlPty = cpy;\n var len = path.len();\n var pathData = path.data;\n\n if (prevCmd === CMD.Q) {\n ctlPtx += cpx - pathData[len - 4];\n ctlPty += cpy - pathData[len - 3];\n }\n\n cpx += p[off++];\n cpy += p[off++];\n cmd = CMD.Q;\n path.addData(cmd, ctlPtx, ctlPty, cpx, cpy);\n break;\n\n case 'A':\n rx = p[off++];\n ry = p[off++];\n psi = p[off++];\n fa = p[off++];\n fs = p[off++];\n x1 = cpx, y1 = cpy;\n cpx = p[off++];\n cpy = p[off++];\n cmd = CMD.A;\n processArc(x1, y1, cpx, cpy, fa, fs, rx, ry, psi, cmd, path);\n break;\n\n case 'a':\n rx = p[off++];\n ry = p[off++];\n psi = p[off++];\n fa = p[off++];\n fs = p[off++];\n x1 = cpx, y1 = cpy;\n cpx += p[off++];\n cpy += p[off++];\n cmd = CMD.A;\n processArc(x1, y1, cpx, cpy, fa, fs, rx, ry, psi, cmd, path);\n break;\n }\n }\n\n if (cmdStr === 'z' || cmdStr === 'Z') {\n cmd = CMD.Z;\n path.addData(cmd); // z may be in the middle of the path.\n\n cpx = subpathX;\n cpy = subpathY;\n }\n\n prevCmd = cmd;\n }\n\n path.toStatic();\n return path;\n} // TODO Optimize double memory cost problem\n\n\nfunction createPathOptions(str, opts) {\n var pathProxy = createPathProxyFromString(str);\n opts = opts || {};\n\n opts.buildPath = function (path) {\n if (path.setData) {\n path.setData(pathProxy.data); // Svg and vml renderer don't have context\n\n var ctx = path.getContext();\n\n if (ctx) {\n path.rebuildPath(ctx);\n }\n } else {\n var ctx = path;\n pathProxy.rebuildPath(ctx);\n }\n };\n\n opts.applyTransform = function (m) {\n transformPath(pathProxy, m);\n this.dirty(true);\n };\n\n return opts;\n}\n/**\n * Create a Path object from path string data\n * http://www.w3.org/TR/SVG/paths.html#PathData\n * @param {Object} opts Other options\n */\n\n\nfunction createFromString(str, opts) {\n return new Path(createPathOptions(str, opts));\n}\n/**\n * Create a Path class from path string data\n * @param {string} str\n * @param {Object} opts Other options\n */\n\n\nfunction extendFromString(str, opts) {\n return Path.extend(createPathOptions(str, opts));\n}\n/**\n * Merge multiple paths\n */\n// TODO Apply transform\n// TODO stroke dash\n// TODO Optimize double memory cost problem\n\n\nfunction mergePath(pathEls, opts) {\n var pathList = [];\n var len = pathEls.length;\n\n for (var i = 0; i < len; i++) {\n var pathEl = pathEls[i];\n\n if (!pathEl.path) {\n pathEl.createPathProxy();\n }\n\n if (pathEl.__dirtyPath) {\n pathEl.buildPath(pathEl.path, pathEl.shape, true);\n }\n\n pathList.push(pathEl.path);\n }\n\n var pathBundle = new Path(opts); // Need path proxy.\n\n pathBundle.createPathProxy();\n\n pathBundle.buildPath = function (path) {\n path.appendPath(pathList); // Svg and vml renderer don't have context\n\n var ctx = path.getContext();\n\n if (ctx) {\n path.rebuildPath(ctx);\n }\n };\n\n return pathBundle;\n}\n\nexports.createFromString = createFromString;\nexports.extendFromString = extendFromString;\nexports.mergePath = mergePath;","var PathProxy = require(\"../core/PathProxy\");\n\nvar _vector = require(\"../core/vector\");\n\nvar v2ApplyTransform = _vector.applyTransform;\nvar CMD = PathProxy.CMD;\nvar points = [[], [], []];\nvar mathSqrt = Math.sqrt;\nvar mathAtan2 = Math.atan2;\n\nfunction _default(path, m) {\n var data = path.data;\n var cmd;\n var nPoint;\n var i;\n var j;\n var k;\n var p;\n var M = CMD.M;\n var C = CMD.C;\n var L = CMD.L;\n var R = CMD.R;\n var A = CMD.A;\n var Q = CMD.Q;\n\n for (i = 0, j = 0; i < data.length;) {\n cmd = data[i++];\n j = i;\n nPoint = 0;\n\n switch (cmd) {\n case M:\n nPoint = 1;\n break;\n\n case L:\n nPoint = 1;\n break;\n\n case C:\n nPoint = 3;\n break;\n\n case Q:\n nPoint = 2;\n break;\n\n case A:\n var x = m[4];\n var y = m[5];\n var sx = mathSqrt(m[0] * m[0] + m[1] * m[1]);\n var sy = mathSqrt(m[2] * m[2] + m[3] * m[3]);\n var angle = mathAtan2(-m[1] / sy, m[0] / sx); // cx\n\n data[i] *= sx;\n data[i++] += x; // cy\n\n data[i] *= sy;\n data[i++] += y; // Scale rx and ry\n // FIXME Assume psi is 0 here\n\n data[i++] *= sx;\n data[i++] *= sy; // Start angle\n\n data[i++] += angle; // end angle\n\n data[i++] += angle; // FIXME psi\n\n i += 2;\n j = i;\n break;\n\n case R:\n // x0, y0\n p[0] = data[i++];\n p[1] = data[i++];\n v2ApplyTransform(p, p, m);\n data[j++] = p[0];\n data[j++] = p[1]; // x1, y1\n\n p[0] += data[i++];\n p[1] += data[i++];\n v2ApplyTransform(p, p, m);\n data[j++] = p[0];\n data[j++] = p[1];\n }\n\n for (k = 0; k < nPoint; k++) {\n var p = points[k];\n p[0] = data[i++];\n p[1] = data[i++];\n v2ApplyTransform(p, p, m); // Write back\n\n data[j++] = p[0];\n data[j++] = p[1];\n }\n }\n}\n\nmodule.exports = _default;","var logError = require(\"../core/log\");\n\nvar vmlCore = require(\"./core\");\n\nvar _util = require(\"../core/util\");\n\nvar each = _util.each;\n\n/**\n * VML Painter.\n *\n * @module zrender/vml/Painter\n */\nfunction parseInt10(val) {\n return parseInt(val, 10);\n}\n/**\n * @alias module:zrender/vml/Painter\n */\n\n\nfunction VMLPainter(root, storage) {\n vmlCore.initVML();\n this.root = root;\n this.storage = storage;\n var vmlViewport = document.createElement('div');\n var vmlRoot = document.createElement('div');\n vmlViewport.style.cssText = 'display:inline-block;overflow:hidden;position:relative;width:300px;height:150px;';\n vmlRoot.style.cssText = 'position:absolute;left:0;top:0;';\n root.appendChild(vmlViewport);\n this._vmlRoot = vmlRoot;\n this._vmlViewport = vmlViewport;\n this.resize(); // Modify storage\n\n var oldDelFromStorage = storage.delFromStorage;\n var oldAddToStorage = storage.addToStorage;\n\n storage.delFromStorage = function (el) {\n oldDelFromStorage.call(storage, el);\n\n if (el) {\n el.onRemove && el.onRemove(vmlRoot);\n }\n };\n\n storage.addToStorage = function (el) {\n // Displayable already has a vml node\n el.onAdd && el.onAdd(vmlRoot);\n oldAddToStorage.call(storage, el);\n };\n\n this._firstPaint = true;\n}\n\nVMLPainter.prototype = {\n constructor: VMLPainter,\n getType: function () {\n return 'vml';\n },\n\n /**\n * @return {HTMLDivElement}\n */\n getViewportRoot: function () {\n return this._vmlViewport;\n },\n getViewportRootOffset: function () {\n var viewportRoot = this.getViewportRoot();\n\n if (viewportRoot) {\n return {\n offsetLeft: viewportRoot.offsetLeft || 0,\n offsetTop: viewportRoot.offsetTop || 0\n };\n }\n },\n\n /**\n * 刷新\n */\n refresh: function () {\n var list = this.storage.getDisplayList(true, true);\n\n this._paintList(list);\n },\n _paintList: function (list) {\n var vmlRoot = this._vmlRoot;\n\n for (var i = 0; i < list.length; i++) {\n var el = list[i];\n\n if (el.invisible || el.ignore) {\n if (!el.__alreadyNotVisible) {\n el.onRemove(vmlRoot);\n } // Set as already invisible\n\n\n el.__alreadyNotVisible = true;\n } else {\n if (el.__alreadyNotVisible) {\n el.onAdd(vmlRoot);\n }\n\n el.__alreadyNotVisible = false;\n\n if (el.__dirty) {\n el.beforeBrush && el.beforeBrush();\n (el.brushVML || el.brush).call(el, vmlRoot);\n el.afterBrush && el.afterBrush();\n }\n }\n\n el.__dirty = false;\n }\n\n if (this._firstPaint) {\n // Detached from document at first time\n // to avoid page refreshing too many times\n // FIXME 如果每次都先 removeChild 可能会导致一些填充和描边的效果改变\n this._vmlViewport.appendChild(vmlRoot);\n\n this._firstPaint = false;\n }\n },\n resize: function (width, height) {\n var width = width == null ? this._getWidth() : width;\n var height = height == null ? this._getHeight() : height;\n\n if (this._width !== width || this._height !== height) {\n this._width = width;\n this._height = height;\n var vmlViewportStyle = this._vmlViewport.style;\n vmlViewportStyle.width = width + 'px';\n vmlViewportStyle.height = height + 'px';\n }\n },\n dispose: function () {\n this.root.innerHTML = '';\n this._vmlRoot = this._vmlViewport = this.storage = null;\n },\n getWidth: function () {\n return this._width;\n },\n getHeight: function () {\n return this._height;\n },\n clear: function () {\n if (this._vmlViewport) {\n this.root.removeChild(this._vmlViewport);\n }\n },\n _getWidth: function () {\n var root = this.root;\n var stl = root.currentStyle;\n return (root.clientWidth || parseInt10(stl.width)) - parseInt10(stl.paddingLeft) - parseInt10(stl.paddingRight) | 0;\n },\n _getHeight: function () {\n var root = this.root;\n var stl = root.currentStyle;\n return (root.clientHeight || parseInt10(stl.height)) - parseInt10(stl.paddingTop) - parseInt10(stl.paddingBottom) | 0;\n }\n}; // Not supported methods\n\nfunction createMethodNotSupport(method) {\n return function () {\n logError('In IE8.0 VML mode painter not support method \"' + method + '\"');\n };\n} // Unsupported methods\n\n\neach(['getLayer', 'insertLayer', 'eachLayer', 'eachBuiltinLayer', 'eachOtherLayer', 'getLayers', 'modLayer', 'delLayer', 'clearLayer', 'toDataURL', 'pathToImage'], function (name) {\n VMLPainter.prototype[name] = createMethodNotSupport(name);\n});\nvar _default = VMLPainter;\nmodule.exports = _default;","var env = require(\"../core/env\");\n\nvar urn = 'urn:schemas-microsoft-com:vml';\nvar win = typeof window === 'undefined' ? null : window;\nvar vmlInited = false;\nvar doc = win && win.document;\n\nfunction createNode(tagName) {\n return doCreateNode(tagName);\n} // Avoid assign to an exported variable, for transforming to cjs.\n\n\nvar doCreateNode;\n\nif (doc && !env.canvasSupported) {\n try {\n !doc.namespaces.zrvml && doc.namespaces.add('zrvml', urn);\n\n doCreateNode = function (tagName) {\n return doc.createElement('<zrvml:' + tagName + ' class=\"zrvml\">');\n };\n } catch (e) {\n doCreateNode = function (tagName) {\n return doc.createElement('<' + tagName + ' xmlns=\"' + urn + '\" class=\"zrvml\">');\n };\n }\n} // From raphael\n\n\nfunction initVML() {\n if (vmlInited || !doc) {\n return;\n }\n\n vmlInited = true;\n var styleSheets = doc.styleSheets;\n\n if (styleSheets.length < 31) {\n doc.createStyleSheet().addRule('.zrvml', 'behavior:url(#default#VML)');\n } else {\n // http://msdn.microsoft.com/en-us/library/ms531194%28VS.85%29.aspx\n styleSheets[0].addRule('.zrvml', 'behavior:url(#default#VML)');\n }\n}\n\nexports.doc = doc;\nexports.createNode = createNode;\nexports.initVML = initVML;","var env = require(\"../core/env\");\n\nvar _vector = require(\"../core/vector\");\n\nvar applyTransform = _vector.applyTransform;\n\nvar BoundingRect = require(\"../core/BoundingRect\");\n\nvar colorTool = require(\"../tool/color\");\n\nvar textContain = require(\"../contain/text\");\n\nvar textHelper = require(\"../graphic/helper/text\");\n\nvar RectText = require(\"../graphic/mixin/RectText\");\n\nvar Displayable = require(\"../graphic/Displayable\");\n\nvar ZImage = require(\"../graphic/Image\");\n\nvar Text = require(\"../graphic/Text\");\n\nvar Path = require(\"../graphic/Path\");\n\nvar PathProxy = require(\"../core/PathProxy\");\n\nvar Gradient = require(\"../graphic/Gradient\");\n\nvar vmlCore = require(\"./core\");\n\n// http://www.w3.org/TR/NOTE-VML\n// TODO Use proxy like svg instead of overwrite brush methods\nvar CMD = PathProxy.CMD;\nvar round = Math.round;\nvar sqrt = Math.sqrt;\nvar abs = Math.abs;\nvar cos = Math.cos;\nvar sin = Math.sin;\nvar mathMax = Math.max;\n\nif (!env.canvasSupported) {\n var comma = ',';\n var imageTransformPrefix = 'progid:DXImageTransform.Microsoft';\n var Z = 21600;\n var Z2 = Z / 2;\n var ZLEVEL_BASE = 100000;\n var Z_BASE = 1000;\n\n var initRootElStyle = function (el) {\n el.style.cssText = 'position:absolute;left:0;top:0;width:1px;height:1px;';\n el.coordsize = Z + ',' + Z;\n el.coordorigin = '0,0';\n };\n\n var encodeHtmlAttribute = function (s) {\n return String(s).replace(/&/g, '&').replace(/\"/g, '"');\n };\n\n var rgb2Str = function (r, g, b) {\n return 'rgb(' + [r, g, b].join(',') + ')';\n };\n\n var append = function (parent, child) {\n if (child && parent && child.parentNode !== parent) {\n parent.appendChild(child);\n }\n };\n\n var remove = function (parent, child) {\n if (child && parent && child.parentNode === parent) {\n parent.removeChild(child);\n }\n };\n\n var getZIndex = function (zlevel, z, z2) {\n // z 的取值范围为 [0, 1000]\n return (parseFloat(zlevel) || 0) * ZLEVEL_BASE + (parseFloat(z) || 0) * Z_BASE + z2;\n };\n\n var parsePercent = textHelper.parsePercent;\n /***************************************************\n * PATH\n **************************************************/\n\n var setColorAndOpacity = function (el, color, opacity) {\n var colorArr = colorTool.parse(color);\n opacity = +opacity;\n\n if (isNaN(opacity)) {\n opacity = 1;\n }\n\n if (colorArr) {\n el.color = rgb2Str(colorArr[0], colorArr[1], colorArr[2]);\n el.opacity = opacity * colorArr[3];\n }\n };\n\n var getColorAndAlpha = function (color) {\n var colorArr = colorTool.parse(color);\n return [rgb2Str(colorArr[0], colorArr[1], colorArr[2]), colorArr[3]];\n };\n\n var updateFillNode = function (el, style, zrEl) {\n // TODO pattern\n var fill = style.fill;\n\n if (fill != null) {\n // Modified from excanvas\n if (fill instanceof Gradient) {\n var gradientType;\n var angle = 0;\n var focus = [0, 0]; // additional offset\n\n var shift = 0; // scale factor for offset\n\n var expansion = 1;\n var rect = zrEl.getBoundingRect();\n var rectWidth = rect.width;\n var rectHeight = rect.height;\n\n if (fill.type === 'linear') {\n gradientType = 'gradient';\n var transform = zrEl.transform;\n var p0 = [fill.x * rectWidth, fill.y * rectHeight];\n var p1 = [fill.x2 * rectWidth, fill.y2 * rectHeight];\n\n if (transform) {\n applyTransform(p0, p0, transform);\n applyTransform(p1, p1, transform);\n }\n\n var dx = p1[0] - p0[0];\n var dy = p1[1] - p0[1];\n angle = Math.atan2(dx, dy) * 180 / Math.PI; // The angle should be a non-negative number.\n\n if (angle < 0) {\n angle += 360;\n } // Very small angles produce an unexpected result because they are\n // converted to a scientific notation string.\n\n\n if (angle < 1e-6) {\n angle = 0;\n }\n } else {\n gradientType = 'gradientradial';\n var p0 = [fill.x * rectWidth, fill.y * rectHeight];\n var transform = zrEl.transform;\n var scale = zrEl.scale;\n var width = rectWidth;\n var height = rectHeight;\n focus = [// Percent in bounding rect\n (p0[0] - rect.x) / width, (p0[1] - rect.y) / height];\n\n if (transform) {\n applyTransform(p0, p0, transform);\n }\n\n width /= scale[0] * Z;\n height /= scale[1] * Z;\n var dimension = mathMax(width, height);\n shift = 2 * 0 / dimension;\n expansion = 2 * fill.r / dimension - shift;\n } // We need to sort the color stops in ascending order by offset,\n // otherwise IE won't interpret it correctly.\n\n\n var stops = fill.colorStops.slice();\n stops.sort(function (cs1, cs2) {\n return cs1.offset - cs2.offset;\n });\n var length = stops.length; // Color and alpha list of first and last stop\n\n var colorAndAlphaList = [];\n var colors = [];\n\n for (var i = 0; i < length; i++) {\n var stop = stops[i];\n var colorAndAlpha = getColorAndAlpha(stop.color);\n colors.push(stop.offset * expansion + shift + ' ' + colorAndAlpha[0]);\n\n if (i === 0 || i === length - 1) {\n colorAndAlphaList.push(colorAndAlpha);\n }\n }\n\n if (length >= 2) {\n var color1 = colorAndAlphaList[0][0];\n var color2 = colorAndAlphaList[1][0];\n var opacity1 = colorAndAlphaList[0][1] * style.opacity;\n var opacity2 = colorAndAlphaList[1][1] * style.opacity;\n el.type = gradientType;\n el.method = 'none';\n el.focus = '100%';\n el.angle = angle;\n el.color = color1;\n el.color2 = color2;\n el.colors = colors.join(','); // When colors attribute is used, the meanings of opacity and o:opacity2\n // are reversed.\n\n el.opacity = opacity2; // FIXME g_o_:opacity ?\n\n el.opacity2 = opacity1;\n }\n\n if (gradientType === 'radial') {\n el.focusposition = focus.join(',');\n }\n } else {\n // FIXME Change from Gradient fill to color fill\n setColorAndOpacity(el, fill, style.opacity);\n }\n }\n };\n\n var updateStrokeNode = function (el, style) {\n // if (style.lineJoin != null) {\n // el.joinstyle = style.lineJoin;\n // }\n // if (style.miterLimit != null) {\n // el.miterlimit = style.miterLimit * Z;\n // }\n // if (style.lineCap != null) {\n // el.endcap = style.lineCap;\n // }\n if (style.lineDash) {\n el.dashstyle = style.lineDash.join(' ');\n }\n\n if (style.stroke != null && !(style.stroke instanceof Gradient)) {\n setColorAndOpacity(el, style.stroke, style.opacity);\n }\n };\n\n var updateFillAndStroke = function (vmlEl, type, style, zrEl) {\n var isFill = type === 'fill';\n var el = vmlEl.getElementsByTagName(type)[0]; // Stroke must have lineWidth\n\n if (style[type] != null && style[type] !== 'none' && (isFill || !isFill && style.lineWidth)) {\n vmlEl[isFill ? 'filled' : 'stroked'] = 'true'; // FIXME Remove before updating, or set `colors` will throw error\n\n if (style[type] instanceof Gradient) {\n remove(vmlEl, el);\n }\n\n if (!el) {\n el = vmlCore.createNode(type);\n }\n\n isFill ? updateFillNode(el, style, zrEl) : updateStrokeNode(el, style);\n append(vmlEl, el);\n } else {\n vmlEl[isFill ? 'filled' : 'stroked'] = 'false';\n remove(vmlEl, el);\n }\n };\n\n var points = [[], [], []];\n\n var pathDataToString = function (path, m) {\n var M = CMD.M;\n var C = CMD.C;\n var L = CMD.L;\n var A = CMD.A;\n var Q = CMD.Q;\n var str = [];\n var nPoint;\n var cmdStr;\n var cmd;\n var i;\n var xi;\n var yi;\n var data = path.data;\n var dataLength = path.len();\n\n for (i = 0; i < dataLength;) {\n cmd = data[i++];\n cmdStr = '';\n nPoint = 0;\n\n switch (cmd) {\n case M:\n cmdStr = ' m ';\n nPoint = 1;\n xi = data[i++];\n yi = data[i++];\n points[0][0] = xi;\n points[0][1] = yi;\n break;\n\n case L:\n cmdStr = ' l ';\n nPoint = 1;\n xi = data[i++];\n yi = data[i++];\n points[0][0] = xi;\n points[0][1] = yi;\n break;\n\n case Q:\n case C:\n cmdStr = ' c ';\n nPoint = 3;\n var x1 = data[i++];\n var y1 = data[i++];\n var x2 = data[i++];\n var y2 = data[i++];\n var x3;\n var y3;\n\n if (cmd === Q) {\n // Convert quadratic to cubic using degree elevation\n x3 = x2;\n y3 = y2;\n x2 = (x2 + 2 * x1) / 3;\n y2 = (y2 + 2 * y1) / 3;\n x1 = (xi + 2 * x1) / 3;\n y1 = (yi + 2 * y1) / 3;\n } else {\n x3 = data[i++];\n y3 = data[i++];\n }\n\n points[0][0] = x1;\n points[0][1] = y1;\n points[1][0] = x2;\n points[1][1] = y2;\n points[2][0] = x3;\n points[2][1] = y3;\n xi = x3;\n yi = y3;\n break;\n\n case A:\n var x = 0;\n var y = 0;\n var sx = 1;\n var sy = 1;\n var angle = 0;\n\n if (m) {\n // Extract SRT from matrix\n x = m[4];\n y = m[5];\n sx = sqrt(m[0] * m[0] + m[1] * m[1]);\n sy = sqrt(m[2] * m[2] + m[3] * m[3]);\n angle = Math.atan2(-m[1] / sy, m[0] / sx);\n }\n\n var cx = data[i++];\n var cy = data[i++];\n var rx = data[i++];\n var ry = data[i++];\n var startAngle = data[i++] + angle;\n var endAngle = data[i++] + startAngle + angle; // FIXME\n // var psi = data[i++];\n\n i++;\n var clockwise = data[i++];\n var x0 = cx + cos(startAngle) * rx;\n var y0 = cy + sin(startAngle) * ry;\n var x1 = cx + cos(endAngle) * rx;\n var y1 = cy + sin(endAngle) * ry;\n var type = clockwise ? ' wa ' : ' at ';\n\n if (Math.abs(x0 - x1) < 1e-4) {\n // IE won't render arches drawn counter clockwise if x0 == x1.\n if (Math.abs(endAngle - startAngle) > 1e-2) {\n // Offset x0 by 1/80 of a pixel. Use something\n // that can be represented in binary\n if (clockwise) {\n x0 += 270 / Z;\n }\n } else {\n // Avoid case draw full circle\n if (Math.abs(y0 - cy) < 1e-4) {\n if (clockwise && x0 < cx || !clockwise && x0 > cx) {\n y1 -= 270 / Z;\n } else {\n y1 += 270 / Z;\n }\n } else if (clockwise && y0 < cy || !clockwise && y0 > cy) {\n x1 += 270 / Z;\n } else {\n x1 -= 270 / Z;\n }\n }\n }\n\n str.push(type, round(((cx - rx) * sx + x) * Z - Z2), comma, round(((cy - ry) * sy + y) * Z - Z2), comma, round(((cx + rx) * sx + x) * Z - Z2), comma, round(((cy + ry) * sy + y) * Z - Z2), comma, round((x0 * sx + x) * Z - Z2), comma, round((y0 * sy + y) * Z - Z2), comma, round((x1 * sx + x) * Z - Z2), comma, round((y1 * sy + y) * Z - Z2));\n xi = x1;\n yi = y1;\n break;\n\n case CMD.R:\n var p0 = points[0];\n var p1 = points[1]; // x0, y0\n\n p0[0] = data[i++];\n p0[1] = data[i++]; // x1, y1\n\n p1[0] = p0[0] + data[i++];\n p1[1] = p0[1] + data[i++];\n\n if (m) {\n applyTransform(p0, p0, m);\n applyTransform(p1, p1, m);\n }\n\n p0[0] = round(p0[0] * Z - Z2);\n p1[0] = round(p1[0] * Z - Z2);\n p0[1] = round(p0[1] * Z - Z2);\n p1[1] = round(p1[1] * Z - Z2);\n str.push( // x0, y0\n ' m ', p0[0], comma, p0[1], // x1, y0\n ' l ', p1[0], comma, p0[1], // x1, y1\n ' l ', p1[0], comma, p1[1], // x0, y1\n ' l ', p0[0], comma, p1[1]);\n break;\n\n case CMD.Z:\n // FIXME Update xi, yi\n str.push(' x ');\n }\n\n if (nPoint > 0) {\n str.push(cmdStr);\n\n for (var k = 0; k < nPoint; k++) {\n var p = points[k];\n m && applyTransform(p, p, m); // 不 round 会非常慢\n\n str.push(round(p[0] * Z - Z2), comma, round(p[1] * Z - Z2), k < nPoint - 1 ? comma : '');\n }\n }\n }\n\n return str.join('');\n }; // Rewrite the original path method\n\n\n Path.prototype.brushVML = function (vmlRoot) {\n var style = this.style;\n var vmlEl = this._vmlEl;\n\n if (!vmlEl) {\n vmlEl = vmlCore.createNode('shape');\n initRootElStyle(vmlEl);\n this._vmlEl = vmlEl;\n }\n\n updateFillAndStroke(vmlEl, 'fill', style, this);\n updateFillAndStroke(vmlEl, 'stroke', style, this);\n var m = this.transform;\n var needTransform = m != null;\n var strokeEl = vmlEl.getElementsByTagName('stroke')[0];\n\n if (strokeEl) {\n var lineWidth = style.lineWidth; // Get the line scale.\n // Determinant of this.m_ means how much the area is enlarged by the\n // transformation. So its square root can be used as a scale factor\n // for width.\n\n if (needTransform && !style.strokeNoScale) {\n var det = m[0] * m[3] - m[1] * m[2];\n lineWidth *= sqrt(abs(det));\n }\n\n strokeEl.weight = lineWidth + 'px';\n }\n\n var path = this.path || (this.path = new PathProxy());\n\n if (this.__dirtyPath) {\n path.beginPath();\n path.subPixelOptimize = false;\n this.buildPath(path, this.shape);\n path.toStatic();\n this.__dirtyPath = false;\n }\n\n vmlEl.path = pathDataToString(path, this.transform);\n vmlEl.style.zIndex = getZIndex(this.zlevel, this.z, this.z2); // Append to root\n\n append(vmlRoot, vmlEl); // Text\n\n if (style.text != null) {\n this.drawRectText(vmlRoot, this.getBoundingRect());\n } else {\n this.removeRectText(vmlRoot);\n }\n };\n\n Path.prototype.onRemove = function (vmlRoot) {\n remove(vmlRoot, this._vmlEl);\n this.removeRectText(vmlRoot);\n };\n\n Path.prototype.onAdd = function (vmlRoot) {\n append(vmlRoot, this._vmlEl);\n this.appendRectText(vmlRoot);\n };\n /***************************************************\n * IMAGE\n **************************************************/\n\n\n var isImage = function (img) {\n // FIXME img instanceof Image 如果 img 是一个字符串的时候,IE8 下会报错\n return typeof img === 'object' && img.tagName && img.tagName.toUpperCase() === 'IMG'; // return img instanceof Image;\n }; // Rewrite the original path method\n\n\n ZImage.prototype.brushVML = function (vmlRoot) {\n var style = this.style;\n var image = style.image; // Image original width, height\n\n var ow;\n var oh;\n\n if (isImage(image)) {\n var src = image.src;\n\n if (src === this._imageSrc) {\n ow = this._imageWidth;\n oh = this._imageHeight;\n } else {\n var imageRuntimeStyle = image.runtimeStyle;\n var oldRuntimeWidth = imageRuntimeStyle.width;\n var oldRuntimeHeight = imageRuntimeStyle.height;\n imageRuntimeStyle.width = 'auto';\n imageRuntimeStyle.height = 'auto'; // get the original size\n\n ow = image.width;\n oh = image.height; // and remove overides\n\n imageRuntimeStyle.width = oldRuntimeWidth;\n imageRuntimeStyle.height = oldRuntimeHeight; // Caching image original width, height and src\n\n this._imageSrc = src;\n this._imageWidth = ow;\n this._imageHeight = oh;\n }\n\n image = src;\n } else {\n if (image === this._imageSrc) {\n ow = this._imageWidth;\n oh = this._imageHeight;\n }\n }\n\n if (!image) {\n return;\n }\n\n var x = style.x || 0;\n var y = style.y || 0;\n var dw = style.width;\n var dh = style.height;\n var sw = style.sWidth;\n var sh = style.sHeight;\n var sx = style.sx || 0;\n var sy = style.sy || 0;\n var hasCrop = sw && sh;\n var vmlEl = this._vmlEl;\n\n if (!vmlEl) {\n // FIXME 使用 group 在 left, top 都不是 0 的时候就无法显示了。\n // vmlEl = vmlCore.createNode('group');\n vmlEl = vmlCore.doc.createElement('div');\n initRootElStyle(vmlEl);\n this._vmlEl = vmlEl;\n }\n\n var vmlElStyle = vmlEl.style;\n var hasRotation = false;\n var m;\n var scaleX = 1;\n var scaleY = 1;\n\n if (this.transform) {\n m = this.transform;\n scaleX = sqrt(m[0] * m[0] + m[1] * m[1]);\n scaleY = sqrt(m[2] * m[2] + m[3] * m[3]);\n hasRotation = m[1] || m[2];\n }\n\n if (hasRotation) {\n // If filters are necessary (rotation exists), create them\n // filters are bog-slow, so only create them if abbsolutely necessary\n // The following check doesn't account for skews (which don't exist\n // in the canvas spec (yet) anyway.\n // From excanvas\n var p0 = [x, y];\n var p1 = [x + dw, y];\n var p2 = [x, y + dh];\n var p3 = [x + dw, y + dh];\n applyTransform(p0, p0, m);\n applyTransform(p1, p1, m);\n applyTransform(p2, p2, m);\n applyTransform(p3, p3, m);\n var maxX = mathMax(p0[0], p1[0], p2[0], p3[0]);\n var maxY = mathMax(p0[1], p1[1], p2[1], p3[1]);\n var transformFilter = [];\n transformFilter.push('M11=', m[0] / scaleX, comma, 'M12=', m[2] / scaleY, comma, 'M21=', m[1] / scaleX, comma, 'M22=', m[3] / scaleY, comma, 'Dx=', round(x * scaleX + m[4]), comma, 'Dy=', round(y * scaleY + m[5]));\n vmlElStyle.padding = '0 ' + round(maxX) + 'px ' + round(maxY) + 'px 0'; // FIXME DXImageTransform 在 IE11 的兼容模式下不起作用\n\n vmlElStyle.filter = imageTransformPrefix + '.Matrix(' + transformFilter.join('') + ', SizingMethod=clip)';\n } else {\n if (m) {\n x = x * scaleX + m[4];\n y = y * scaleY + m[5];\n }\n\n vmlElStyle.filter = '';\n vmlElStyle.left = round(x) + 'px';\n vmlElStyle.top = round(y) + 'px';\n }\n\n var imageEl = this._imageEl;\n var cropEl = this._cropEl;\n\n if (!imageEl) {\n imageEl = vmlCore.doc.createElement('div');\n this._imageEl = imageEl;\n }\n\n var imageELStyle = imageEl.style;\n\n if (hasCrop) {\n // Needs know image original width and height\n if (!(ow && oh)) {\n var tmpImage = new Image();\n var self = this;\n\n tmpImage.onload = function () {\n tmpImage.onload = null;\n ow = tmpImage.width;\n oh = tmpImage.height; // Adjust image width and height to fit the ratio destinationSize / sourceSize\n\n imageELStyle.width = round(scaleX * ow * dw / sw) + 'px';\n imageELStyle.height = round(scaleY * oh * dh / sh) + 'px'; // Caching image original width, height and src\n\n self._imageWidth = ow;\n self._imageHeight = oh;\n self._imageSrc = image;\n };\n\n tmpImage.src = image;\n } else {\n imageELStyle.width = round(scaleX * ow * dw / sw) + 'px';\n imageELStyle.height = round(scaleY * oh * dh / sh) + 'px';\n }\n\n if (!cropEl) {\n cropEl = vmlCore.doc.createElement('div');\n cropEl.style.overflow = 'hidden';\n this._cropEl = cropEl;\n }\n\n var cropElStyle = cropEl.style;\n cropElStyle.width = round((dw + sx * dw / sw) * scaleX);\n cropElStyle.height = round((dh + sy * dh / sh) * scaleY);\n cropElStyle.filter = imageTransformPrefix + '.Matrix(Dx=' + -sx * dw / sw * scaleX + ',Dy=' + -sy * dh / sh * scaleY + ')';\n\n if (!cropEl.parentNode) {\n vmlEl.appendChild(cropEl);\n }\n\n if (imageEl.parentNode !== cropEl) {\n cropEl.appendChild(imageEl);\n }\n } else {\n imageELStyle.width = round(scaleX * dw) + 'px';\n imageELStyle.height = round(scaleY * dh) + 'px';\n vmlEl.appendChild(imageEl);\n\n if (cropEl && cropEl.parentNode) {\n vmlEl.removeChild(cropEl);\n this._cropEl = null;\n }\n }\n\n var filterStr = '';\n var alpha = style.opacity;\n\n if (alpha < 1) {\n filterStr += '.Alpha(opacity=' + round(alpha * 100) + ') ';\n }\n\n filterStr += imageTransformPrefix + '.AlphaImageLoader(src=' + image + ', SizingMethod=scale)';\n imageELStyle.filter = filterStr;\n vmlEl.style.zIndex = getZIndex(this.zlevel, this.z, this.z2); // Append to root\n\n append(vmlRoot, vmlEl); // Text\n\n if (style.text != null) {\n this.drawRectText(vmlRoot, this.getBoundingRect());\n }\n };\n\n ZImage.prototype.onRemove = function (vmlRoot) {\n remove(vmlRoot, this._vmlEl);\n this._vmlEl = null;\n this._cropEl = null;\n this._imageEl = null;\n this.removeRectText(vmlRoot);\n };\n\n ZImage.prototype.onAdd = function (vmlRoot) {\n append(vmlRoot, this._vmlEl);\n this.appendRectText(vmlRoot);\n };\n /***************************************************\n * TEXT\n **************************************************/\n\n\n var DEFAULT_STYLE_NORMAL = 'normal';\n var fontStyleCache = {};\n var fontStyleCacheCount = 0;\n var MAX_FONT_CACHE_SIZE = 100;\n var fontEl = document.createElement('div');\n\n var getFontStyle = function (fontString) {\n var fontStyle = fontStyleCache[fontString];\n\n if (!fontStyle) {\n // Clear cache\n if (fontStyleCacheCount > MAX_FONT_CACHE_SIZE) {\n fontStyleCacheCount = 0;\n fontStyleCache = {};\n }\n\n var style = fontEl.style;\n var fontFamily;\n\n try {\n style.font = fontString;\n fontFamily = style.fontFamily.split(',')[0];\n } catch (e) {}\n\n fontStyle = {\n style: style.fontStyle || DEFAULT_STYLE_NORMAL,\n variant: style.fontVariant || DEFAULT_STYLE_NORMAL,\n weight: style.fontWeight || DEFAULT_STYLE_NORMAL,\n size: parseFloat(style.fontSize || 12) | 0,\n family: fontFamily || 'Microsoft YaHei'\n };\n fontStyleCache[fontString] = fontStyle;\n fontStyleCacheCount++;\n }\n\n return fontStyle;\n };\n\n var textMeasureEl; // Overwrite measure text method\n\n textContain.$override('measureText', function (text, textFont) {\n var doc = vmlCore.doc;\n\n if (!textMeasureEl) {\n textMeasureEl = doc.createElement('div');\n textMeasureEl.style.cssText = 'position:absolute;top:-20000px;left:0;' + 'padding:0;margin:0;border:none;white-space:pre;';\n vmlCore.doc.body.appendChild(textMeasureEl);\n }\n\n try {\n textMeasureEl.style.font = textFont;\n } catch (ex) {// Ignore failures to set to invalid font.\n }\n\n textMeasureEl.innerHTML = ''; // Don't use innerHTML or innerText because they allow markup/whitespace.\n\n textMeasureEl.appendChild(doc.createTextNode(text));\n return {\n width: textMeasureEl.offsetWidth\n };\n });\n var tmpRect = new BoundingRect();\n\n var drawRectText = function (vmlRoot, rect, textRect, fromTextEl) {\n var style = this.style; // Optimize, avoid normalize every time.\n\n this.__dirty && textHelper.normalizeTextStyle(style, true);\n var text = style.text; // Convert to string\n\n text != null && (text += '');\n\n if (!text) {\n return;\n } // Convert rich text to plain text. Rich text is not supported in\n // IE8-, but tags in rich text template will be removed.\n\n\n if (style.rich) {\n var contentBlock = textContain.parseRichText(text, style);\n text = [];\n\n for (var i = 0; i < contentBlock.lines.length; i++) {\n var tokens = contentBlock.lines[i].tokens;\n var textLine = [];\n\n for (var j = 0; j < tokens.length; j++) {\n textLine.push(tokens[j].text);\n }\n\n text.push(textLine.join(''));\n }\n\n text = text.join('\\n');\n }\n\n var x;\n var y;\n var align = style.textAlign;\n var verticalAlign = style.textVerticalAlign;\n var fontStyle = getFontStyle(style.font); // FIXME encodeHtmlAttribute ?\n\n var font = fontStyle.style + ' ' + fontStyle.variant + ' ' + fontStyle.weight + ' ' + fontStyle.size + 'px \"' + fontStyle.family + '\"';\n textRect = textRect || textContain.getBoundingRect(text, font, align, verticalAlign, style.textPadding, style.textLineHeight); // Transform rect to view space\n\n var m = this.transform; // Ignore transform for text in other element\n\n if (m && !fromTextEl) {\n tmpRect.copy(rect);\n tmpRect.applyTransform(m);\n rect = tmpRect;\n }\n\n if (!fromTextEl) {\n var textPosition = style.textPosition; // Text position represented by coord\n\n if (textPosition instanceof Array) {\n x = rect.x + parsePercent(textPosition[0], rect.width);\n y = rect.y + parsePercent(textPosition[1], rect.height);\n align = align || 'left';\n } else {\n var res = this.calculateTextPosition ? this.calculateTextPosition({}, style, rect) : textContain.calculateTextPosition({}, style, rect);\n x = res.x;\n y = res.y; // Default align and baseline when has textPosition\n\n align = align || res.textAlign;\n verticalAlign = verticalAlign || res.textVerticalAlign;\n }\n } else {\n x = rect.x;\n y = rect.y;\n }\n\n x = textContain.adjustTextX(x, textRect.width, align);\n y = textContain.adjustTextY(y, textRect.height, verticalAlign); // Force baseline 'middle'\n\n y += textRect.height / 2; // var fontSize = fontStyle.size;\n // 1.75 is an arbitrary number, as there is no info about the text baseline\n // switch (baseline) {\n // case 'hanging':\n // case 'top':\n // y += fontSize / 1.75;\n // break;\n // case 'middle':\n // break;\n // default:\n // // case null:\n // // case 'alphabetic':\n // // case 'ideographic':\n // // case 'bottom':\n // y -= fontSize / 2.25;\n // break;\n // }\n // switch (align) {\n // case 'left':\n // break;\n // case 'center':\n // x -= textRect.width / 2;\n // break;\n // case 'right':\n // x -= textRect.width;\n // break;\n // case 'end':\n // align = elementStyle.direction == 'ltr' ? 'right' : 'left';\n // break;\n // case 'start':\n // align = elementStyle.direction == 'rtl' ? 'right' : 'left';\n // break;\n // default:\n // align = 'left';\n // }\n\n var createNode = vmlCore.createNode;\n var textVmlEl = this._textVmlEl;\n var pathEl;\n var textPathEl;\n var skewEl;\n\n if (!textVmlEl) {\n textVmlEl = createNode('line');\n pathEl = createNode('path');\n textPathEl = createNode('textpath');\n skewEl = createNode('skew'); // FIXME Why here is not cammel case\n // Align 'center' seems wrong\n\n textPathEl.style['v-text-align'] = 'left';\n initRootElStyle(textVmlEl);\n pathEl.textpathok = true;\n textPathEl.on = true;\n textVmlEl.from = '0 0';\n textVmlEl.to = '1000 0.05';\n append(textVmlEl, skewEl);\n append(textVmlEl, pathEl);\n append(textVmlEl, textPathEl);\n this._textVmlEl = textVmlEl;\n } else {\n // 这里是在前面 appendChild 保证顺序的前提下\n skewEl = textVmlEl.firstChild;\n pathEl = skewEl.nextSibling;\n textPathEl = pathEl.nextSibling;\n }\n\n var coords = [x, y];\n var textVmlElStyle = textVmlEl.style; // Ignore transform for text in other element\n\n if (m && fromTextEl) {\n applyTransform(coords, coords, m);\n skewEl.on = true;\n skewEl.matrix = m[0].toFixed(3) + comma + m[2].toFixed(3) + comma + m[1].toFixed(3) + comma + m[3].toFixed(3) + ',0,0'; // Text position\n\n skewEl.offset = (round(coords[0]) || 0) + ',' + (round(coords[1]) || 0); // Left top point as origin\n\n skewEl.origin = '0 0';\n textVmlElStyle.left = '0px';\n textVmlElStyle.top = '0px';\n } else {\n skewEl.on = false;\n textVmlElStyle.left = round(x) + 'px';\n textVmlElStyle.top = round(y) + 'px';\n }\n\n textPathEl.string = encodeHtmlAttribute(text); // TODO\n\n try {\n textPathEl.style.font = font;\n } // Error font format\n catch (e) {}\n\n updateFillAndStroke(textVmlEl, 'fill', {\n fill: style.textFill,\n opacity: style.opacity\n }, this);\n updateFillAndStroke(textVmlEl, 'stroke', {\n stroke: style.textStroke,\n opacity: style.opacity,\n lineDash: style.lineDash || null // style.lineDash can be `false`.\n\n }, this);\n textVmlEl.style.zIndex = getZIndex(this.zlevel, this.z, this.z2); // Attached to root\n\n append(vmlRoot, textVmlEl);\n };\n\n var removeRectText = function (vmlRoot) {\n remove(vmlRoot, this._textVmlEl);\n this._textVmlEl = null;\n };\n\n var appendRectText = function (vmlRoot) {\n append(vmlRoot, this._textVmlEl);\n };\n\n var list = [RectText, Displayable, ZImage, Path, Text]; // In case Displayable has been mixed in RectText\n\n for (var i = 0; i < list.length; i++) {\n var proto = list[i].prototype;\n proto.drawRectText = drawRectText;\n proto.removeRectText = removeRectText;\n proto.appendRectText = appendRectText;\n }\n\n Text.prototype.brushVML = function (vmlRoot) {\n var style = this.style;\n\n if (style.text != null) {\n this.drawRectText(vmlRoot, {\n x: style.x || 0,\n y: style.y || 0,\n width: 0,\n height: 0\n }, this.getBoundingRect(), true);\n } else {\n this.removeRectText(vmlRoot);\n }\n };\n\n Text.prototype.onRemove = function (vmlRoot) {\n this.removeRectText(vmlRoot);\n };\n\n Text.prototype.onAdd = function (vmlRoot) {\n this.appendRectText(vmlRoot);\n };\n}","require(\"./graphic\");\n\nvar _zrender = require(\"../zrender\");\n\nvar registerPainter = _zrender.registerPainter;\n\nvar Painter = require(\"./Painter\");\n\nregisterPainter('vml', Painter);","var guid = require(\"./core/guid\");\n\nvar env = require(\"./core/env\");\n\nvar zrUtil = require(\"./core/util\");\n\nvar Handler = require(\"./Handler\");\n\nvar Storage = require(\"./Storage\");\n\nvar Painter = require(\"./Painter\");\n\nvar Animation = require(\"./animation/Animation\");\n\nvar HandlerProxy = require(\"./dom/HandlerProxy\");\n\n/*!\n* ZRender, a high performance 2d drawing library.\n*\n* Copyright (c) 2013, Baidu Inc.\n* All rights reserved.\n*\n* LICENSE\n* https://github.com/ecomfe/zrender/blob/master/LICENSE.txt\n*/\nvar useVML = !env.canvasSupported;\nvar painterCtors = {\n canvas: Painter\n};\nvar instances = {}; // ZRender实例map索引\n\n/**\n * @type {string}\n */\n\nvar version = '4.3.1';\n/**\n * Initializing a zrender instance\n * @param {HTMLElement} dom\n * @param {Object} [opts]\n * @param {string} [opts.renderer='canvas'] 'canvas' or 'svg'\n * @param {number} [opts.devicePixelRatio]\n * @param {number|string} [opts.width] Can be 'auto' (the same as null/undefined)\n * @param {number|string} [opts.height] Can be 'auto' (the same as null/undefined)\n * @return {module:zrender/ZRender}\n */\n\nfunction init(dom, opts) {\n var zr = new ZRender(guid(), dom, opts);\n instances[zr.id] = zr;\n return zr;\n}\n/**\n * Dispose zrender instance\n * @param {module:zrender/ZRender} zr\n */\n\n\nfunction dispose(zr) {\n if (zr) {\n zr.dispose();\n } else {\n for (var key in instances) {\n if (instances.hasOwnProperty(key)) {\n instances[key].dispose();\n }\n }\n\n instances = {};\n }\n\n return this;\n}\n/**\n * Get zrender instance by id\n * @param {string} id zrender instance id\n * @return {module:zrender/ZRender}\n */\n\n\nfunction getInstance(id) {\n return instances[id];\n}\n\nfunction registerPainter(name, Ctor) {\n painterCtors[name] = Ctor;\n}\n\nfunction delInstance(id) {\n delete instances[id];\n}\n/**\n * @module zrender/ZRender\n */\n\n/**\n * @constructor\n * @alias module:zrender/ZRender\n * @param {string} id\n * @param {HTMLElement} dom\n * @param {Object} opts\n * @param {string} [opts.renderer='canvas'] 'canvas' or 'svg'\n * @param {number} [opts.devicePixelRatio]\n * @param {number} [opts.width] Can be 'auto' (the same as null/undefined)\n * @param {number} [opts.height] Can be 'auto' (the same as null/undefined)\n */\n\n\nvar ZRender = function (id, dom, opts) {\n opts = opts || {};\n /**\n * @type {HTMLDomElement}\n */\n\n this.dom = dom;\n /**\n * @type {string}\n */\n\n this.id = id;\n var self = this;\n var storage = new Storage();\n var rendererType = opts.renderer; // TODO WebGL\n\n if (useVML) {\n if (!painterCtors.vml) {\n throw new Error('You need to require \\'zrender/vml/vml\\' to support IE8');\n }\n\n rendererType = 'vml';\n } else if (!rendererType || !painterCtors[rendererType]) {\n rendererType = 'canvas';\n }\n\n var painter = new painterCtors[rendererType](dom, storage, opts, id);\n this.storage = storage;\n this.painter = painter;\n var handerProxy = !env.node && !env.worker ? new HandlerProxy(painter.getViewportRoot(), painter.root) : null;\n this.handler = new Handler(storage, painter, handerProxy, painter.root);\n /**\n * @type {module:zrender/animation/Animation}\n */\n\n this.animation = new Animation({\n stage: {\n update: zrUtil.bind(this.flush, this)\n }\n });\n this.animation.start();\n /**\n * @type {boolean}\n * @private\n */\n\n this._needsRefresh; // 修改 storage.delFromStorage, 每次删除元素之前删除动画\n // FIXME 有点ugly\n\n var oldDelFromStorage = storage.delFromStorage;\n var oldAddToStorage = storage.addToStorage;\n\n storage.delFromStorage = function (el) {\n oldDelFromStorage.call(storage, el);\n el && el.removeSelfFromZr(self);\n };\n\n storage.addToStorage = function (el) {\n oldAddToStorage.call(storage, el);\n el.addSelfToZr(self);\n };\n};\n\nZRender.prototype = {\n constructor: ZRender,\n\n /**\n * 获取实例唯一标识\n * @return {string}\n */\n getId: function () {\n return this.id;\n },\n\n /**\n * 添加元素\n * @param {module:zrender/Element} el\n */\n add: function (el) {\n this.storage.addRoot(el);\n this._needsRefresh = true;\n },\n\n /**\n * 删除元素\n * @param {module:zrender/Element} el\n */\n remove: function (el) {\n this.storage.delRoot(el);\n this._needsRefresh = true;\n },\n\n /**\n * Change configuration of layer\n * @param {string} zLevel\n * @param {Object} config\n * @param {string} [config.clearColor=0] Clear color\n * @param {string} [config.motionBlur=false] If enable motion blur\n * @param {number} [config.lastFrameAlpha=0.7] Motion blur factor. Larger value cause longer trailer\n */\n configLayer: function (zLevel, config) {\n if (this.painter.configLayer) {\n this.painter.configLayer(zLevel, config);\n }\n\n this._needsRefresh = true;\n },\n\n /**\n * Set background color\n * @param {string} backgroundColor\n */\n setBackgroundColor: function (backgroundColor) {\n if (this.painter.setBackgroundColor) {\n this.painter.setBackgroundColor(backgroundColor);\n }\n\n this._needsRefresh = true;\n },\n\n /**\n * Repaint the canvas immediately\n */\n refreshImmediately: function () {\n // var start = new Date();\n // Clear needsRefresh ahead to avoid something wrong happens in refresh\n // Or it will cause zrender refreshes again and again.\n this._needsRefresh = this._needsRefreshHover = false;\n this.painter.refresh(); // Avoid trigger zr.refresh in Element#beforeUpdate hook\n\n this._needsRefresh = this._needsRefreshHover = false; // var end = new Date();\n // var log = document.getElementById('log');\n // if (log) {\n // log.innerHTML = log.innerHTML + '<br>' + (end - start);\n // }\n },\n\n /**\n * Mark and repaint the canvas in the next frame of browser\n */\n refresh: function () {\n this._needsRefresh = true;\n },\n\n /**\n * Perform all refresh\n */\n flush: function () {\n var triggerRendered;\n\n if (this._needsRefresh) {\n triggerRendered = true;\n this.refreshImmediately();\n }\n\n if (this._needsRefreshHover) {\n triggerRendered = true;\n this.refreshHoverImmediately();\n }\n\n triggerRendered && this.trigger('rendered');\n },\n\n /**\n * Add element to hover layer\n * @param {module:zrender/Element} el\n * @param {Object} style\n */\n addHover: function (el, style) {\n if (this.painter.addHover) {\n var elMirror = this.painter.addHover(el, style);\n this.refreshHover();\n return elMirror;\n }\n },\n\n /**\n * Add element from hover layer\n * @param {module:zrender/Element} el\n */\n removeHover: function (el) {\n if (this.painter.removeHover) {\n this.painter.removeHover(el);\n this.refreshHover();\n }\n },\n\n /**\n * Clear all hover elements in hover layer\n * @param {module:zrender/Element} el\n */\n clearHover: function () {\n if (this.painter.clearHover) {\n this.painter.clearHover();\n this.refreshHover();\n }\n },\n\n /**\n * Refresh hover in next frame\n */\n refreshHover: function () {\n this._needsRefreshHover = true;\n },\n\n /**\n * Refresh hover immediately\n */\n refreshHoverImmediately: function () {\n this._needsRefreshHover = false;\n this.painter.refreshHover && this.painter.refreshHover();\n },\n\n /**\n * Resize the canvas.\n * Should be invoked when container size is changed\n * @param {Object} [opts]\n * @param {number|string} [opts.width] Can be 'auto' (the same as null/undefined)\n * @param {number|string} [opts.height] Can be 'auto' (the same as null/undefined)\n */\n resize: function (opts) {\n opts = opts || {};\n this.painter.resize(opts.width, opts.height);\n this.handler.resize();\n },\n\n /**\n * Stop and clear all animation immediately\n */\n clearAnimation: function () {\n this.animation.clear();\n },\n\n /**\n * Get container width\n */\n getWidth: function () {\n return this.painter.getWidth();\n },\n\n /**\n * Get container height\n */\n getHeight: function () {\n return this.painter.getHeight();\n },\n\n /**\n * Export the canvas as Base64 URL\n * @param {string} type\n * @param {string} [backgroundColor='#fff']\n * @return {string} Base64 URL\n */\n // toDataURL: function(type, backgroundColor) {\n // return this.painter.getRenderedCanvas({\n // backgroundColor: backgroundColor\n // }).toDataURL(type);\n // },\n\n /**\n * Converting a path to image.\n * It has much better performance of drawing image rather than drawing a vector path.\n * @param {module:zrender/graphic/Path} e\n * @param {number} width\n * @param {number} height\n */\n pathToImage: function (e, dpr) {\n return this.painter.pathToImage(e, dpr);\n },\n\n /**\n * Set default cursor\n * @param {string} [cursorStyle='default'] 例如 crosshair\n */\n setCursorStyle: function (cursorStyle) {\n this.handler.setCursorStyle(cursorStyle);\n },\n\n /**\n * Find hovered element\n * @param {number} x\n * @param {number} y\n * @return {Object} {target, topTarget}\n */\n findHover: function (x, y) {\n return this.handler.findHover(x, y);\n },\n\n /**\n * Bind event\n *\n * @param {string} eventName Event name\n * @param {Function} eventHandler Handler function\n * @param {Object} [context] Context object\n */\n on: function (eventName, eventHandler, context) {\n this.handler.on(eventName, eventHandler, context);\n },\n\n /**\n * Unbind event\n * @param {string} eventName Event name\n * @param {Function} [eventHandler] Handler function\n */\n off: function (eventName, eventHandler) {\n this.handler.off(eventName, eventHandler);\n },\n\n /**\n * Trigger event manually\n *\n * @param {string} eventName Event name\n * @param {event=} event Event object\n */\n trigger: function (eventName, event) {\n this.handler.trigger(eventName, event);\n },\n\n /**\n * Clear all objects and the canvas.\n */\n clear: function () {\n this.storage.delRoot();\n this.painter.clear();\n },\n\n /**\n * Dispose self.\n */\n dispose: function () {\n this.animation.stop();\n this.clear();\n this.storage.dispose();\n this.painter.dispose();\n this.handler.dispose();\n this.animation = this.storage = this.painter = this.handler = null;\n delInstance(this.id);\n }\n};\nexports.version = version;\nexports.init = init;\nexports.dispose = dispose;\nexports.getInstance = getInstance;\nexports.registerPainter = registerPainter;"],"names":["Group","ZImage","Text","Circle","Rect","Ellipse","Line","Path","Polygon","Polyline","LinearGradient","Style","matrix","_path","createFromString","_util","isString","extend","defaults","trim","each","DILIMITER_REG","parseXML","svg","parser","DOMParser","parseFromString","nodeType","firstChild","nodeName","toLowerCase","nextSibling","SVGParser","this","_defs","_root","_isDefine","_isText","prototype","parse","xml","opt","Error","root","viewBox","getAttribute","width","parseFloat","height","isNaN","parseAttributes","viewBoxRect","viewBoxTransform","child","_parseNode","viewBoxArr","split","length","x","y","makeViewBoxTransform","ignoreViewBox","elRoot","add","scale","slice","position","ignoreRootClip","setClipPath","shape","xmlNode","parentGroup","el","defineParsers","def","call","id","nodeParsers","_parseText","dx","dy","_textX","_textY","text","style","textContent","transformText","inheritStyle","fontSize","rect","getBoundingRect","g","setShape","circle","cx","cy","r","line","x1","y1","x2","y2","ellipse","rx","ry","points","parsePoints","polygon","path","polyline","img","setStyle","image","d","parseInt","gradient","_parseGradientColorStops","stop","offset","indexOf","stopColor","addColorStop","parent","__inheritedStyle","pointsString","list","i","push","attributesMap","defs","onlyInlineStyle","zrStyle","isTextEl","type","parseTransformAttribute","parseStyleAttribute","svgAttrName","hasOwnProperty","attrValue","elFillProp","elStrokeProp","elStyle","fill","set","getPaint","stroke","propName","elPropName","textBaseline","textAlign","lineDash","urlRegex","str","urlMatch","match","url","transformRegex","node","transform","replace","m","transformOps","value","create","translate","rotate","console","warn","setLocalTransform","styleRegex","result","styleRegResult","styleList","lastIndex","exec","scaleX","scaleY","Math","min","viewBoxScale","viewBoxPosition","parseSVG","exports","PathProxy","transformPath","mathSqrt","sqrt","mathSin","sin","mathCos","cos","PI","vMag","v","vRatio","u","vAngle","acos","processArc","fa","fs","psiDeg","cmd","psi","xp","yp","lambda","f","cxp","cyp","theta","dTheta","addData","commandReg","numberReg","createPathProxyFromString","data","prevCmd","cpx","cpy","subpathX","subpathY","CMD","cmdList","l","cmdText","cmdStr","charAt","p","pLen","off","ctlPtx","ctlPty","L","M","C","len","pathData","Q","A","Z","toStatic","createPathOptions","opts","pathProxy","buildPath","setData","ctx","getContext","rebuildPath","applyTransform","dirty","extendFromString","mergePath","pathEls","pathList","pathEl","createPathProxy","__dirtyPath","pathBundle","appendPath","_vector","v2ApplyTransform","mathAtan2","atan2","_default","nPoint","j","k","R","sx","sy","angle","module","logError","vmlCore","parseInt10","val","VMLPainter","storage","initVML","vmlViewport","document","createElement","vmlRoot","cssText","appendChild","_vmlRoot","_vmlViewport","resize","oldDelFromStorage","delFromStorage","oldAddToStorage","addToStorage","onRemove","onAdd","_firstPaint","createMethodNotSupport","method","constructor","getType","getViewportRoot","getViewportRootOffset","viewportRoot","offsetLeft","offsetTop","refresh","getDisplayList","_paintList","invisible","ignore","__alreadyNotVisible","__dirty","beforeBrush","brushVML","brush","afterBrush","_getWidth","_getHeight","_width","_height","vmlViewportStyle","dispose","innerHTML","getWidth","getHeight","clear","removeChild","stl","currentStyle","clientWidth","paddingLeft","paddingRight","clientHeight","paddingTop","paddingBottom","name","doCreateNode","env","urn","win","window","vmlInited","doc","createNode","tagName","canvasSupported","namespaces","zrvml","e","styleSheets","createStyleSheet","addRule","BoundingRect","colorTool","textContain","textHelper","RectText","Displayable","Gradient","round","abs","mathMax","max","comma","imageTransformPrefix","Z2","ZLEVEL_BASE","Z_BASE","initRootElStyle","coordsize","coordorigin","encodeHtmlAttribute","s","String","rgb2Str","b","join","append","parentNode","remove","getZIndex","zlevel","z","z2","parsePercent","setColorAndOpacity","color","opacity","colorArr","getColorAndAlpha","updateFillNode","zrEl","gradientType","focus","shift","expansion","rectWidth","rectHeight","p0","p1","dimension","stops","colorStops","sort","cs1","cs2","colorAndAlphaList","colors","colorAndAlpha","color1","color2","opacity1","opacity2","focusposition","updateStrokeNode","dashstyle","updateFillAndStroke","vmlEl","isFill","getElementsByTagName","lineWidth","pathDataToString","xi","yi","dataLength","x3","y3","startAngle","endAngle","clockwise","x0","y0","_vmlEl","needTransform","strokeEl","strokeNoScale","det","weight","beginPath","subPixelOptimize","zIndex","drawRectText","removeRectText","appendRectText","isImage","toUpperCase","ow","oh","src","_imageSrc","_imageWidth","_imageHeight","imageRuntimeStyle","runtimeStyle","oldRuntimeWidth","oldRuntimeHeight","dw","dh","sw","sWidth","sh","sHeight","hasCrop","vmlElStyle","hasRotation","p2","p3","maxX","maxY","transformFilter","padding","filter","left","top","imageEl","_imageEl","cropEl","_cropEl","imageELStyle","tmpImage","Image","self","onload","overflow","cropElStyle","filterStr","alpha","textMeasureEl","DEFAULT_STYLE_NORMAL","fontStyleCache","fontStyleCacheCount","MAX_FONT_CACHE_SIZE","fontEl","getFontStyle","fontString","fontStyle","fontFamily","font","variant","fontVariant","fontWeight","size","family","$override","textFont","body","ex","createTextNode","offsetWidth","tmpRect","textRect","fromTextEl","normalizeTextStyle","rich","contentBlock","parseRichText","lines","tokens","textLine","align","verticalAlign","textVerticalAlign","textPadding","textLineHeight","copy","textPosition","Array","res","calculateTextPosition","adjustTextX","adjustTextY","textPathEl","skewEl","textVmlEl","_textVmlEl","textpathok","on","from","to","coords","textVmlElStyle","toFixed","origin","string","textFill","textStroke","proto","_zrender","registerPainter","Painter","guid","zrUtil","Handler","Storage","Animation","HandlerProxy","useVML","painterCtors","canvas","instances","version","init","dom","zr","ZRender","key","getInstance","Ctor","delInstance","rendererType","renderer","vml","painter","handerProxy","worker","handler","animation","stage","update","bind","flush","start","_needsRefresh","removeSelfFromZr","addSelfToZr","getId","addRoot","delRoot","configLayer","zLevel","config","setBackgroundColor","backgroundColor","refreshImmediately","_needsRefreshHover","triggerRendered","refreshHoverImmediately","trigger","addHover","elMirror","refreshHover","removeHover","clearHover","clearAnimation","pathToImage","dpr","setCursorStyle","cursorStyle","findHover","eventName","eventHandler","context","event"],"sourceRoot":""}
|