1 |
- {"version":3,"file":"js/chunk-vendors-5add3539.b0e8bd83.js","mappings":"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","sources":["webpack://app/./node_modules/zrender/lib/Element.js","webpack://app/./node_modules/zrender/lib/Handler.js","webpack://app/./node_modules/zrender/lib/Layer.js","webpack://app/./node_modules/zrender/lib/Painter.js","webpack://app/./node_modules/zrender/lib/Storage.js","webpack://app/./node_modules/zrender/lib/animation/Animation.js","webpack://app/./node_modules/zrender/lib/animation/Animator.js","webpack://app/./node_modules/zrender/lib/animation/Clip.js","webpack://app/./node_modules/zrender/lib/animation/easing.js","webpack://app/./node_modules/zrender/lib/animation/requestAnimationFrame.js"],"sourcesContent":["var guid = require(\"./core/guid\");\n\nvar Eventful = require(\"./mixin/Eventful\");\n\nvar Transformable = require(\"./mixin/Transformable\");\n\nvar Animatable = require(\"./mixin/Animatable\");\n\nvar zrUtil = require(\"./core/util\");\n\n/**\n * @alias module:zrender/Element\n * @constructor\n * @extends {module:zrender/mixin/Animatable}\n * @extends {module:zrender/mixin/Transformable}\n * @extends {module:zrender/mixin/Eventful}\n */\nvar Element = function (opts) {\n // jshint ignore:line\n Transformable.call(this, opts);\n Eventful.call(this, opts);\n Animatable.call(this, opts);\n /**\n * 画布元素ID\n * @type {string}\n */\n\n this.id = opts.id || guid();\n};\n\nElement.prototype = {\n /**\n * 元素类型\n * Element type\n * @type {string}\n */\n type: 'element',\n\n /**\n * 元素名字\n * Element name\n * @type {string}\n */\n name: '',\n\n /**\n * ZRender 实例对象,会在 element 添加到 zrender 实例中后自动赋值\n * ZRender instance will be assigned when element is associated with zrender\n * @name module:/zrender/Element#__zr\n * @type {module:zrender/ZRender}\n */\n __zr: null,\n\n /**\n * 图形是否忽略,为true时忽略图形的绘制以及事件触发\n * If ignore drawing and events of the element object\n * @name module:/zrender/Element#ignore\n * @type {boolean}\n * @default false\n */\n ignore: false,\n\n /**\n * 用于裁剪的路径(shape),所有 Group 内的路径在绘制时都会被这个路径裁剪\n * 该路径会继承被裁减对象的变换\n * @type {module:zrender/graphic/Path}\n * @see http://www.w3.org/TR/2dcontext/#clipping-region\n * @readOnly\n */\n clipPath: null,\n\n /**\n * 是否是 Group\n * @type {boolean}\n */\n isGroup: false,\n\n /**\n * Drift element\n * @param {number} dx dx on the global space\n * @param {number} dy dy on the global space\n */\n drift: function (dx, dy) {\n switch (this.draggable) {\n case 'horizontal':\n dy = 0;\n break;\n\n case 'vertical':\n dx = 0;\n break;\n }\n\n var m = this.transform;\n\n if (!m) {\n m = this.transform = [1, 0, 0, 1, 0, 0];\n }\n\n m[4] += dx;\n m[5] += dy;\n this.decomposeTransform();\n this.dirty(false);\n },\n\n /**\n * Hook before update\n */\n beforeUpdate: function () {},\n\n /**\n * Hook after update\n */\n afterUpdate: function () {},\n\n /**\n * Update each frame\n */\n update: function () {\n this.updateTransform();\n },\n\n /**\n * @param {Function} cb\n * @param {} context\n */\n traverse: function (cb, context) {},\n\n /**\n * @protected\n */\n attrKV: function (key, value) {\n if (key === 'position' || key === 'scale' || key === 'origin') {\n // Copy the array\n if (value) {\n var target = this[key];\n\n if (!target) {\n target = this[key] = [];\n }\n\n target[0] = value[0];\n target[1] = value[1];\n }\n } else {\n this[key] = value;\n }\n },\n\n /**\n * Hide the element\n */\n hide: function () {\n this.ignore = true;\n this.__zr && this.__zr.refresh();\n },\n\n /**\n * Show the element\n */\n show: function () {\n this.ignore = false;\n this.__zr && this.__zr.refresh();\n },\n\n /**\n * @param {string|Object} key\n * @param {*} value\n */\n attr: function (key, value) {\n if (typeof key === 'string') {\n this.attrKV(key, value);\n } else if (zrUtil.isObject(key)) {\n for (var name in key) {\n if (key.hasOwnProperty(name)) {\n this.attrKV(name, key[name]);\n }\n }\n }\n\n this.dirty(false);\n return this;\n },\n\n /**\n * @param {module:zrender/graphic/Path} clipPath\n */\n setClipPath: function (clipPath) {\n var zr = this.__zr;\n\n if (zr) {\n clipPath.addSelfToZr(zr);\n } // Remove previous clip path\n\n\n if (this.clipPath && this.clipPath !== clipPath) {\n this.removeClipPath();\n }\n\n this.clipPath = clipPath;\n clipPath.__zr = zr;\n clipPath.__clipTarget = this;\n this.dirty(false);\n },\n\n /**\n */\n removeClipPath: function () {\n var clipPath = this.clipPath;\n\n if (clipPath) {\n if (clipPath.__zr) {\n clipPath.removeSelfFromZr(clipPath.__zr);\n }\n\n clipPath.__zr = null;\n clipPath.__clipTarget = null;\n this.clipPath = null;\n this.dirty(false);\n }\n },\n\n /**\n * Add self from zrender instance.\n * Not recursively because it will be invoked when element added to storage.\n * @param {module:zrender/ZRender} zr\n */\n addSelfToZr: function (zr) {\n this.__zr = zr; // 添加动画\n\n var animators = this.animators;\n\n if (animators) {\n for (var i = 0; i < animators.length; i++) {\n zr.animation.addAnimator(animators[i]);\n }\n }\n\n if (this.clipPath) {\n this.clipPath.addSelfToZr(zr);\n }\n },\n\n /**\n * Remove self from zrender instance.\n * Not recursively because it will be invoked when element added to storage.\n * @param {module:zrender/ZRender} zr\n */\n removeSelfFromZr: function (zr) {\n this.__zr = null; // 移除动画\n\n var animators = this.animators;\n\n if (animators) {\n for (var i = 0; i < animators.length; i++) {\n zr.animation.removeAnimator(animators[i]);\n }\n }\n\n if (this.clipPath) {\n this.clipPath.removeSelfFromZr(zr);\n }\n }\n};\nzrUtil.mixin(Element, Animatable);\nzrUtil.mixin(Element, Transformable);\nzrUtil.mixin(Element, Eventful);\nvar _default = Element;\nmodule.exports = _default;","var util = require(\"./core/util\");\n\nvar vec2 = require(\"./core/vector\");\n\nvar Draggable = require(\"./mixin/Draggable\");\n\nvar Eventful = require(\"./mixin/Eventful\");\n\nvar eventTool = require(\"./core/event\");\n\nvar GestureMgr = require(\"./core/GestureMgr\");\n\n/**\n * [The interface between `Handler` and `HandlerProxy`]:\n *\n * The default `HandlerProxy` only support the common standard web environment\n * (e.g., standalone browser, headless browser, embed browser in mobild APP, ...).\n * But `HandlerProxy` can be replaced to support more non-standard environment\n * (e.g., mini app), or to support more feature that the default `HandlerProxy`\n * not provided (like echarts-gl did).\n * So the interface between `Handler` and `HandlerProxy` should be stable. Do not\n * make break changes util inevitable. The interface include the public methods\n * of `Handler` and the events listed in `handlerNames` below, by which `HandlerProxy`\n * drives `Handler`.\n */\n\n/**\n * [Drag outside]:\n *\n * That is, triggering `mousemove` and `mouseup` event when the pointer is out of the\n * zrender area when dragging. That is important for the improvement of the user experience\n * when dragging something near the boundary without being terminated unexpectedly.\n *\n * We originally consider to introduce new events like `pagemovemove` and `pagemouseup`\n * to resolve this issue. But some drawbacks of it is described in\n * https://github.com/ecomfe/zrender/pull/536#issuecomment-560286899\n *\n * Instead, we referenced the specifications:\n * https://www.w3.org/TR/touch-events/#the-touchmove-event\n * https://www.w3.org/TR/2014/WD-DOM-Level-3-Events-20140925/#event-type-mousemove\n * where the the mousemove/touchmove can be continue to fire if the user began a drag\n * operation and the pointer has left the boundary. (for the mouse event, browsers\n * only do it on `document` and when the pointer has left the boundary of the browser.)\n *\n * So the default `HandlerProxy` supports this feature similarly: if it is in the dragging\n * state (see `pointerCapture` in `HandlerProxy`), the `mousemove` and `mouseup` continue\n * to fire until release the pointer. That is implemented by listen to those event on\n * `document`.\n * If we implement some other `HandlerProxy` only for touch device, that would be easier.\n * The touch event support this feature by default.\n *\n * Note:\n * There might be some cases that the mouse event can not be\n * received on `document`. For example,\n * (A) `useCapture` is not supported and some user defined event listeners on the ancestor\n * of zr dom throw Error .\n * (B) `useCapture` is not supported Some user defined event listeners on the ancestor of\n * zr dom call `stopPropagation`.\n * In these cases, the `mousemove` event might be keep triggered event\n * if the mouse is released. We try to reduce the side-effect in those cases.\n * That is, do nothing (especially, `findHover`) in those cases. See `isOutsideBoundary`.\n *\n * Note:\n * If `HandlerProxy` listens to `document` with `useCapture`, `HandlerProxy` needs to\n * make sure `stopPropagation` and `preventDefault` doing nothing if and only if the event\n * target is not zrender dom. Becuase it is dangerous to enable users to call them in\n * `document` capture phase to prevent the propagation to any listener of the webpage.\n * But they are needed to work when the pointer inside the zrender dom.\n */\nvar SILENT = 'silent';\n\nfunction makeEventPacket(eveType, targetInfo, event) {\n return {\n type: eveType,\n event: event,\n // target can only be an element that is not silent.\n target: targetInfo.target,\n // topTarget can be a silent element.\n topTarget: targetInfo.topTarget,\n cancelBubble: false,\n offsetX: event.zrX,\n offsetY: event.zrY,\n gestureEvent: event.gestureEvent,\n pinchX: event.pinchX,\n pinchY: event.pinchY,\n pinchScale: event.pinchScale,\n wheelDelta: event.zrDelta,\n zrByTouch: event.zrByTouch,\n which: event.which,\n stop: stopEvent\n };\n}\n\nfunction stopEvent() {\n eventTool.stop(this.event);\n}\n\nfunction EmptyProxy() {}\n\nEmptyProxy.prototype.dispose = function () {};\n\nvar handlerNames = ['click', 'dblclick', 'mousewheel', 'mouseout', 'mouseup', 'mousedown', 'mousemove', 'contextmenu'];\n/**\n * @alias module:zrender/Handler\n * @constructor\n * @extends module:zrender/mixin/Eventful\n * @param {module:zrender/Storage} storage Storage instance.\n * @param {module:zrender/Painter} painter Painter instance.\n * @param {module:zrender/dom/HandlerProxy} proxy HandlerProxy instance.\n * @param {HTMLElement} painterRoot painter.root (not painter.getViewportRoot()).\n */\n\nvar Handler = function (storage, painter, proxy, painterRoot) {\n Eventful.call(this);\n this.storage = storage;\n this.painter = painter;\n this.painterRoot = painterRoot;\n proxy = proxy || new EmptyProxy();\n /**\n * Proxy of event. can be Dom, WebGLSurface, etc.\n */\n\n this.proxy = null;\n /**\n * {target, topTarget, x, y}\n * @private\n * @type {Object}\n */\n\n this._hovered = {};\n /**\n * @private\n * @type {Date}\n */\n\n this._lastTouchMoment;\n /**\n * @private\n * @type {number}\n */\n\n this._lastX;\n /**\n * @private\n * @type {number}\n */\n\n this._lastY;\n /**\n * @private\n * @type {module:zrender/core/GestureMgr}\n */\n\n this._gestureMgr;\n Draggable.call(this);\n this.setHandlerProxy(proxy);\n};\n\nHandler.prototype = {\n constructor: Handler,\n setHandlerProxy: function (proxy) {\n if (this.proxy) {\n this.proxy.dispose();\n }\n\n if (proxy) {\n util.each(handlerNames, function (name) {\n proxy.on && proxy.on(name, this[name], this);\n }, this); // Attach handler\n\n proxy.handler = this;\n }\n\n this.proxy = proxy;\n },\n mousemove: function (event) {\n var x = event.zrX;\n var y = event.zrY;\n var isOutside = isOutsideBoundary(this, x, y);\n var lastHovered = this._hovered;\n var lastHoveredTarget = lastHovered.target; // If lastHoveredTarget is removed from zr (detected by '__zr') by some API call\n // (like 'setOption' or 'dispatchAction') in event handlers, we should find\n // lastHovered again here. Otherwise 'mouseout' can not be triggered normally.\n // See #6198.\n\n if (lastHoveredTarget && !lastHoveredTarget.__zr) {\n lastHovered = this.findHover(lastHovered.x, lastHovered.y);\n lastHoveredTarget = lastHovered.target;\n }\n\n var hovered = this._hovered = isOutside ? {\n x: x,\n y: y\n } : this.findHover(x, y);\n var hoveredTarget = hovered.target;\n var proxy = this.proxy;\n proxy.setCursor && proxy.setCursor(hoveredTarget ? hoveredTarget.cursor : 'default'); // Mouse out on previous hovered element\n\n if (lastHoveredTarget && hoveredTarget !== lastHoveredTarget) {\n this.dispatchToElement(lastHovered, 'mouseout', event);\n } // Mouse moving on one element\n\n\n this.dispatchToElement(hovered, 'mousemove', event); // Mouse over on a new element\n\n if (hoveredTarget && hoveredTarget !== lastHoveredTarget) {\n this.dispatchToElement(hovered, 'mouseover', event);\n }\n },\n mouseout: function (event) {\n var eventControl = event.zrEventControl;\n var zrIsToLocalDOM = event.zrIsToLocalDOM;\n\n if (eventControl !== 'only_globalout') {\n this.dispatchToElement(this._hovered, 'mouseout', event);\n }\n\n if (eventControl !== 'no_globalout') {\n // FIXME: if the pointer moving from the extra doms to realy \"outside\",\n // the `globalout` should have been triggered. But currently not.\n !zrIsToLocalDOM && this.trigger('globalout', {\n type: 'globalout',\n event: event\n });\n }\n },\n\n /**\n * Resize\n */\n resize: function (event) {\n this._hovered = {};\n },\n\n /**\n * Dispatch event\n * @param {string} eventName\n * @param {event=} eventArgs\n */\n dispatch: function (eventName, eventArgs) {\n var handler = this[eventName];\n handler && handler.call(this, eventArgs);\n },\n\n /**\n * Dispose\n */\n dispose: function () {\n this.proxy.dispose();\n this.storage = this.proxy = this.painter = null;\n },\n\n /**\n * 设置默认的cursor style\n * @param {string} [cursorStyle='default'] 例如 crosshair\n */\n setCursorStyle: function (cursorStyle) {\n var proxy = this.proxy;\n proxy.setCursor && proxy.setCursor(cursorStyle);\n },\n\n /**\n * 事件分发代理\n *\n * @private\n * @param {Object} targetInfo {target, topTarget} 目标图形元素\n * @param {string} eventName 事件名称\n * @param {Object} event 事件对象\n */\n dispatchToElement: function (targetInfo, eventName, event) {\n targetInfo = targetInfo || {};\n var el = targetInfo.target;\n\n if (el && el.silent) {\n return;\n }\n\n var eventHandler = 'on' + eventName;\n var eventPacket = makeEventPacket(eventName, targetInfo, event);\n\n while (el) {\n el[eventHandler] && (eventPacket.cancelBubble = el[eventHandler].call(el, eventPacket));\n el.trigger(eventName, eventPacket);\n el = el.parent;\n\n if (eventPacket.cancelBubble) {\n break;\n }\n }\n\n if (!eventPacket.cancelBubble) {\n // 冒泡到顶级 zrender 对象\n this.trigger(eventName, eventPacket); // 分发事件到用户自定义层\n // 用户有可能在全局 click 事件中 dispose,所以需要判断下 painter 是否存在\n\n this.painter && this.painter.eachOtherLayer(function (layer) {\n if (typeof layer[eventHandler] === 'function') {\n layer[eventHandler].call(layer, eventPacket);\n }\n\n if (layer.trigger) {\n layer.trigger(eventName, eventPacket);\n }\n });\n }\n },\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {module:zrender/graphic/Displayable} exclude\n * @return {model:zrender/Element}\n * @method\n */\n findHover: function (x, y, exclude) {\n var list = this.storage.getDisplayList();\n var out = {\n x: x,\n y: y\n };\n\n for (var i = list.length - 1; i >= 0; i--) {\n var hoverCheckResult;\n\n if (list[i] !== exclude // getDisplayList may include ignored item in VML mode\n && !list[i].ignore && (hoverCheckResult = isHover(list[i], x, y))) {\n !out.topTarget && (out.topTarget = list[i]);\n\n if (hoverCheckResult !== SILENT) {\n out.target = list[i];\n break;\n }\n }\n }\n\n return out;\n },\n processGesture: function (event, stage) {\n if (!this._gestureMgr) {\n this._gestureMgr = new GestureMgr();\n }\n\n var gestureMgr = this._gestureMgr;\n stage === 'start' && gestureMgr.clear();\n var gestureInfo = gestureMgr.recognize(event, this.findHover(event.zrX, event.zrY, null).target, this.proxy.dom);\n stage === 'end' && gestureMgr.clear(); // Do not do any preventDefault here. Upper application do that if necessary.\n\n if (gestureInfo) {\n var type = gestureInfo.type;\n event.gestureEvent = type;\n this.dispatchToElement({\n target: gestureInfo.target\n }, type, gestureInfo.event);\n }\n }\n}; // Common handlers\n\nutil.each(['click', 'mousedown', 'mouseup', 'mousewheel', 'dblclick', 'contextmenu'], function (name) {\n Handler.prototype[name] = function (event) {\n var x = event.zrX;\n var y = event.zrY;\n var isOutside = isOutsideBoundary(this, x, y);\n var hovered;\n var hoveredTarget;\n\n if (name !== 'mouseup' || !isOutside) {\n // Find hover again to avoid click event is dispatched manually. Or click is triggered without mouseover\n hovered = this.findHover(x, y);\n hoveredTarget = hovered.target;\n }\n\n if (name === 'mousedown') {\n this._downEl = hoveredTarget;\n this._downPoint = [event.zrX, event.zrY]; // In case click triggered before mouseup\n\n this._upEl = hoveredTarget;\n } else if (name === 'mouseup') {\n this._upEl = hoveredTarget;\n } else if (name === 'click') {\n if (this._downEl !== this._upEl // Original click event is triggered on the whole canvas element,\n // including the case that `mousedown` - `mousemove` - `mouseup`,\n // which should be filtered, otherwise it will bring trouble to\n // pan and zoom.\n || !this._downPoint // Arbitrary value\n || vec2.dist(this._downPoint, [event.zrX, event.zrY]) > 4) {\n return;\n }\n\n this._downPoint = null;\n }\n\n this.dispatchToElement(hovered, name, event);\n };\n});\n\nfunction isHover(displayable, x, y) {\n if (displayable[displayable.rectHover ? 'rectContain' : 'contain'](x, y)) {\n var el = displayable;\n var isSilent;\n\n while (el) {\n // If clipped by ancestor.\n // FIXME: If clipPath has neither stroke nor fill,\n // el.clipPath.contain(x, y) will always return false.\n if (el.clipPath && !el.clipPath.contain(x, y)) {\n return false;\n }\n\n if (el.silent) {\n isSilent = true;\n }\n\n el = el.parent;\n }\n\n return isSilent ? SILENT : true;\n }\n\n return false;\n}\n/**\n * See [Drag outside].\n */\n\n\nfunction isOutsideBoundary(handlerInstance, x, y) {\n var painter = handlerInstance.painter;\n return x < 0 || x > painter.getWidth() || y < 0 || y > painter.getHeight();\n}\n\nutil.mixin(Handler, Eventful);\nutil.mixin(Handler, Draggable);\nvar _default = Handler;\nmodule.exports = _default;","var util = require(\"./core/util\");\n\nvar _config = require(\"./config\");\n\nvar devicePixelRatio = _config.devicePixelRatio;\n\nvar Style = require(\"./graphic/Style\");\n\nvar Pattern = require(\"./graphic/Pattern\");\n\n/**\n * @module zrender/Layer\n * @author pissang(https://www.github.com/pissang)\n */\nfunction returnFalse() {\n return false;\n}\n/**\n * 创建dom\n *\n * @inner\n * @param {string} id dom id 待用\n * @param {Painter} painter painter instance\n * @param {number} number\n */\n\n\nfunction createDom(id, painter, dpr) {\n var newDom = util.createCanvas();\n var width = painter.getWidth();\n var height = painter.getHeight();\n var newDomStyle = newDom.style;\n\n if (newDomStyle) {\n // In node or some other non-browser environment\n newDomStyle.position = 'absolute';\n newDomStyle.left = 0;\n newDomStyle.top = 0;\n newDomStyle.width = width + 'px';\n newDomStyle.height = height + 'px';\n newDom.setAttribute('data-zr-dom-id', id);\n }\n\n newDom.width = width * dpr;\n newDom.height = height * dpr;\n return newDom;\n}\n/**\n * @alias module:zrender/Layer\n * @constructor\n * @extends module:zrender/mixin/Transformable\n * @param {string} id\n * @param {module:zrender/Painter} painter\n * @param {number} [dpr]\n */\n\n\nvar Layer = function (id, painter, dpr) {\n var dom;\n dpr = dpr || devicePixelRatio;\n\n if (typeof id === 'string') {\n dom = createDom(id, painter, dpr);\n } // Not using isDom because in node it will return false\n else if (util.isObject(id)) {\n dom = id;\n id = dom.id;\n }\n\n this.id = id;\n this.dom = dom;\n var domStyle = dom.style;\n\n if (domStyle) {\n // Not in node\n dom.onselectstart = returnFalse; // 避免页面选中的尴尬\n\n domStyle['-webkit-user-select'] = 'none';\n domStyle['user-select'] = 'none';\n domStyle['-webkit-touch-callout'] = 'none';\n domStyle['-webkit-tap-highlight-color'] = 'rgba(0,0,0,0)';\n domStyle['padding'] = 0; // eslint-disable-line dot-notation\n\n domStyle['margin'] = 0; // eslint-disable-line dot-notation\n\n domStyle['border-width'] = 0;\n }\n\n this.domBack = null;\n this.ctxBack = null;\n this.painter = painter;\n this.config = null; // Configs\n\n /**\n * 每次清空画布的颜色\n * @type {string}\n * @default 0\n */\n\n this.clearColor = 0;\n /**\n * 是否开启动态模糊\n * @type {boolean}\n * @default false\n */\n\n this.motionBlur = false;\n /**\n * 在开启动态模糊的时候使用,与上一帧混合的alpha值,值越大尾迹越明显\n * @type {number}\n * @default 0.7\n */\n\n this.lastFrameAlpha = 0.7;\n /**\n * Layer dpr\n * @type {number}\n */\n\n this.dpr = dpr;\n};\n\nLayer.prototype = {\n constructor: Layer,\n __dirty: true,\n __used: false,\n __drawIndex: 0,\n __startIndex: 0,\n __endIndex: 0,\n incremental: false,\n getElementCount: function () {\n return this.__endIndex - this.__startIndex;\n },\n initContext: function () {\n this.ctx = this.dom.getContext('2d');\n this.ctx.dpr = this.dpr;\n },\n createBackBuffer: function () {\n var dpr = this.dpr;\n this.domBack = createDom('back-' + this.id, this.painter, dpr);\n this.ctxBack = this.domBack.getContext('2d');\n\n if (dpr !== 1) {\n this.ctxBack.scale(dpr, dpr);\n }\n },\n\n /**\n * @param {number} width\n * @param {number} height\n */\n resize: function (width, height) {\n var dpr = this.dpr;\n var dom = this.dom;\n var domStyle = dom.style;\n var domBack = this.domBack;\n\n if (domStyle) {\n domStyle.width = width + 'px';\n domStyle.height = height + 'px';\n }\n\n dom.width = width * dpr;\n dom.height = height * dpr;\n\n if (domBack) {\n domBack.width = width * dpr;\n domBack.height = height * dpr;\n\n if (dpr !== 1) {\n this.ctxBack.scale(dpr, dpr);\n }\n }\n },\n\n /**\n * 清空该层画布\n * @param {boolean} [clearAll]=false Clear all with out motion blur\n * @param {Color} [clearColor]\n */\n clear: function (clearAll, clearColor) {\n var dom = this.dom;\n var ctx = this.ctx;\n var width = dom.width;\n var height = dom.height;\n var clearColor = clearColor || this.clearColor;\n var haveMotionBLur = this.motionBlur && !clearAll;\n var lastFrameAlpha = this.lastFrameAlpha;\n var dpr = this.dpr;\n\n if (haveMotionBLur) {\n if (!this.domBack) {\n this.createBackBuffer();\n }\n\n this.ctxBack.globalCompositeOperation = 'copy';\n this.ctxBack.drawImage(dom, 0, 0, width / dpr, height / dpr);\n }\n\n ctx.clearRect(0, 0, width, height);\n\n if (clearColor && clearColor !== 'transparent') {\n var clearColorGradientOrPattern; // Gradient\n\n if (clearColor.colorStops) {\n // Cache canvas gradient\n clearColorGradientOrPattern = clearColor.__canvasGradient || Style.getGradient(ctx, clearColor, {\n x: 0,\n y: 0,\n width: width,\n height: height\n });\n clearColor.__canvasGradient = clearColorGradientOrPattern;\n } // Pattern\n else if (clearColor.image) {\n clearColorGradientOrPattern = Pattern.prototype.getCanvasPattern.call(clearColor, ctx);\n }\n\n ctx.save();\n ctx.fillStyle = clearColorGradientOrPattern || clearColor;\n ctx.fillRect(0, 0, width, height);\n ctx.restore();\n }\n\n if (haveMotionBLur) {\n var domBack = this.domBack;\n ctx.save();\n ctx.globalAlpha = lastFrameAlpha;\n ctx.drawImage(domBack, 0, 0, width, height);\n ctx.restore();\n }\n }\n};\nvar _default = Layer;\nmodule.exports = _default;","var _config = require(\"./config\");\n\nvar devicePixelRatio = _config.devicePixelRatio;\n\nvar util = require(\"./core/util\");\n\nvar logError = require(\"./core/log\");\n\nvar BoundingRect = require(\"./core/BoundingRect\");\n\nvar timsort = require(\"./core/timsort\");\n\nvar Layer = require(\"./Layer\");\n\nvar requestAnimationFrame = require(\"./animation/requestAnimationFrame\");\n\nvar Image = require(\"./graphic/Image\");\n\nvar env = require(\"./core/env\");\n\nvar HOVER_LAYER_ZLEVEL = 1e5;\nvar CANVAS_ZLEVEL = 314159;\nvar EL_AFTER_INCREMENTAL_INC = 0.01;\nvar INCREMENTAL_INC = 0.001;\n\nfunction parseInt10(val) {\n return parseInt(val, 10);\n}\n\nfunction isLayerValid(layer) {\n if (!layer) {\n return false;\n }\n\n if (layer.__builtin__) {\n return true;\n }\n\n if (typeof layer.resize !== 'function' || typeof layer.refresh !== 'function') {\n return false;\n }\n\n return true;\n}\n\nvar tmpRect = new BoundingRect(0, 0, 0, 0);\nvar viewRect = new BoundingRect(0, 0, 0, 0);\n\nfunction isDisplayableCulled(el, width, height) {\n tmpRect.copy(el.getBoundingRect());\n\n if (el.transform) {\n tmpRect.applyTransform(el.transform);\n }\n\n viewRect.width = width;\n viewRect.height = height;\n return !tmpRect.intersect(viewRect);\n}\n\nfunction isClipPathChanged(clipPaths, prevClipPaths) {\n // displayable.__clipPaths can only be `null`/`undefined` or an non-empty array.\n if (clipPaths === prevClipPaths) {\n return false;\n }\n\n if (!clipPaths || !prevClipPaths || clipPaths.length !== prevClipPaths.length) {\n return true;\n }\n\n for (var i = 0; i < clipPaths.length; i++) {\n if (clipPaths[i] !== prevClipPaths[i]) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction doClip(clipPaths, ctx) {\n for (var i = 0; i < clipPaths.length; i++) {\n var clipPath = clipPaths[i];\n clipPath.setTransform(ctx);\n ctx.beginPath();\n clipPath.buildPath(ctx, clipPath.shape);\n ctx.clip(); // Transform back\n\n clipPath.restoreTransform(ctx);\n }\n}\n\nfunction createRoot(width, height) {\n var domRoot = document.createElement('div'); // domRoot.onselectstart = returnFalse; // Avoid page selected\n\n domRoot.style.cssText = ['position:relative', // IOS13 safari probably has a compositing bug (z order of the canvas and the consequent\n // dom does not act as expected) when some of the parent dom has\n // `-webkit-overflow-scrolling: touch;` and the webpage is longer than one screen and\n // the canvas is not at the top part of the page.\n // Check `https://bugs.webkit.org/show_bug.cgi?id=203681` for more details. We remove\n // this `overflow:hidden` to avoid the bug.\n // 'overflow:hidden',\n 'width:' + width + 'px', 'height:' + height + 'px', 'padding:0', 'margin:0', 'border-width:0'].join(';') + ';';\n return domRoot;\n}\n/**\n * @alias module:zrender/Painter\n * @constructor\n * @param {HTMLElement} root 绘图容器\n * @param {module:zrender/Storage} storage\n * @param {Object} opts\n */\n\n\nvar Painter = function (root, storage, opts) {\n this.type = 'canvas'; // In node environment using node-canvas\n\n var singleCanvas = !root.nodeName // In node ?\n || root.nodeName.toUpperCase() === 'CANVAS';\n this._opts = opts = util.extend({}, opts || {});\n /**\n * @type {number}\n */\n\n this.dpr = opts.devicePixelRatio || devicePixelRatio;\n /**\n * @type {boolean}\n * @private\n */\n\n this._singleCanvas = singleCanvas;\n /**\n * 绘图容器\n * @type {HTMLElement}\n */\n\n this.root = root;\n var rootStyle = root.style;\n\n if (rootStyle) {\n rootStyle['-webkit-tap-highlight-color'] = 'transparent';\n rootStyle['-webkit-user-select'] = rootStyle['user-select'] = rootStyle['-webkit-touch-callout'] = 'none';\n root.innerHTML = '';\n }\n /**\n * @type {module:zrender/Storage}\n */\n\n\n this.storage = storage;\n /**\n * @type {Array.<number>}\n * @private\n */\n\n var zlevelList = this._zlevelList = [];\n /**\n * @type {Object.<string, module:zrender/Layer>}\n * @private\n */\n\n var layers = this._layers = {};\n /**\n * @type {Object.<string, Object>}\n * @private\n */\n\n this._layerConfig = {};\n /**\n * zrender will do compositing when root is a canvas and have multiple zlevels.\n */\n\n this._needsManuallyCompositing = false;\n\n if (!singleCanvas) {\n this._width = this._getSize(0);\n this._height = this._getSize(1);\n var domRoot = this._domRoot = createRoot(this._width, this._height);\n root.appendChild(domRoot);\n } else {\n var width = root.width;\n var height = root.height;\n\n if (opts.width != null) {\n width = opts.width;\n }\n\n if (opts.height != null) {\n height = opts.height;\n }\n\n this.dpr = opts.devicePixelRatio || 1; // Use canvas width and height directly\n\n root.width = width * this.dpr;\n root.height = height * this.dpr;\n this._width = width;\n this._height = height; // Create layer if only one given canvas\n // Device can be specified to create a high dpi image.\n\n var mainLayer = new Layer(root, this, this.dpr);\n mainLayer.__builtin__ = true;\n mainLayer.initContext(); // FIXME Use canvas width and height\n // mainLayer.resize(width, height);\n\n layers[CANVAS_ZLEVEL] = mainLayer;\n mainLayer.zlevel = CANVAS_ZLEVEL; // Not use common zlevel.\n\n zlevelList.push(CANVAS_ZLEVEL);\n this._domRoot = root;\n }\n /**\n * @type {module:zrender/Layer}\n * @private\n */\n\n\n this._hoverlayer = null;\n this._hoverElements = [];\n};\n\nPainter.prototype = {\n constructor: Painter,\n getType: function () {\n return 'canvas';\n },\n\n /**\n * If painter use a single canvas\n * @return {boolean}\n */\n isSingleCanvas: function () {\n return this._singleCanvas;\n },\n\n /**\n * @return {HTMLDivElement}\n */\n getViewportRoot: function () {\n return this._domRoot;\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 * @param {boolean} [paintAll=false] 强制绘制所有displayable\n */\n refresh: function (paintAll) {\n var list = this.storage.getDisplayList(true);\n var zlevelList = this._zlevelList;\n this._redrawId = Math.random();\n\n this._paintList(list, paintAll, this._redrawId); // Paint custum layers\n\n\n for (var i = 0; i < zlevelList.length; i++) {\n var z = zlevelList[i];\n var layer = this._layers[z];\n\n if (!layer.__builtin__ && layer.refresh) {\n var clearColor = i === 0 ? this._backgroundColor : null;\n layer.refresh(clearColor);\n }\n }\n\n this.refreshHover();\n return this;\n },\n addHover: function (el, hoverStyle) {\n if (el.__hoverMir) {\n return;\n }\n\n var elMirror = new el.constructor({\n style: el.style,\n shape: el.shape,\n z: el.z,\n z2: el.z2,\n silent: el.silent\n });\n elMirror.__from = el;\n el.__hoverMir = elMirror;\n hoverStyle && elMirror.setStyle(hoverStyle);\n\n this._hoverElements.push(elMirror);\n\n return elMirror;\n },\n removeHover: function (el) {\n var elMirror = el.__hoverMir;\n var hoverElements = this._hoverElements;\n var idx = util.indexOf(hoverElements, elMirror);\n\n if (idx >= 0) {\n hoverElements.splice(idx, 1);\n }\n\n el.__hoverMir = null;\n },\n clearHover: function (el) {\n var hoverElements = this._hoverElements;\n\n for (var i = 0; i < hoverElements.length; i++) {\n var from = hoverElements[i].__from;\n\n if (from) {\n from.__hoverMir = null;\n }\n }\n\n hoverElements.length = 0;\n },\n refreshHover: function () {\n var hoverElements = this._hoverElements;\n var len = hoverElements.length;\n var hoverLayer = this._hoverlayer;\n hoverLayer && hoverLayer.clear();\n\n if (!len) {\n return;\n }\n\n timsort(hoverElements, this.storage.displayableSortFunc); // Use a extream large zlevel\n // FIXME?\n\n if (!hoverLayer) {\n hoverLayer = this._hoverlayer = this.getLayer(HOVER_LAYER_ZLEVEL);\n }\n\n var scope = {};\n hoverLayer.ctx.save();\n\n for (var i = 0; i < len;) {\n var el = hoverElements[i];\n var originalEl = el.__from; // Original el is removed\n // PENDING\n\n if (!(originalEl && originalEl.__zr)) {\n hoverElements.splice(i, 1);\n originalEl.__hoverMir = null;\n len--;\n continue;\n }\n\n i++; // Use transform\n // FIXME style and shape ?\n\n if (!originalEl.invisible) {\n el.transform = originalEl.transform;\n el.invTransform = originalEl.invTransform;\n el.__clipPaths = originalEl.__clipPaths; // el.\n\n this._doPaintEl(el, hoverLayer, true, scope);\n }\n }\n\n hoverLayer.ctx.restore();\n },\n getHoverLayer: function () {\n return this.getLayer(HOVER_LAYER_ZLEVEL);\n },\n _paintList: function (list, paintAll, redrawId) {\n if (this._redrawId !== redrawId) {\n return;\n }\n\n paintAll = paintAll || false;\n\n this._updateLayerStatus(list);\n\n var finished = this._doPaintList(list, paintAll);\n\n if (this._needsManuallyCompositing) {\n this._compositeManually();\n }\n\n if (!finished) {\n var self = this;\n requestAnimationFrame(function () {\n self._paintList(list, paintAll, redrawId);\n });\n }\n },\n _compositeManually: function () {\n var ctx = this.getLayer(CANVAS_ZLEVEL).ctx;\n var width = this._domRoot.width;\n var height = this._domRoot.height;\n ctx.clearRect(0, 0, width, height); // PENDING, If only builtin layer?\n\n this.eachBuiltinLayer(function (layer) {\n if (layer.virtual) {\n ctx.drawImage(layer.dom, 0, 0, width, height);\n }\n });\n },\n _doPaintList: function (list, paintAll) {\n var layerList = [];\n\n for (var zi = 0; zi < this._zlevelList.length; zi++) {\n var zlevel = this._zlevelList[zi];\n var layer = this._layers[zlevel];\n\n if (layer.__builtin__ && layer !== this._hoverlayer && (layer.__dirty || paintAll)) {\n layerList.push(layer);\n }\n }\n\n var finished = true;\n\n for (var k = 0; k < layerList.length; k++) {\n var layer = layerList[k];\n var ctx = layer.ctx;\n var scope = {};\n ctx.save();\n var start = paintAll ? layer.__startIndex : layer.__drawIndex;\n var useTimer = !paintAll && layer.incremental && Date.now;\n var startTime = useTimer && Date.now();\n var clearColor = layer.zlevel === this._zlevelList[0] ? this._backgroundColor : null; // All elements in this layer are cleared.\n\n if (layer.__startIndex === layer.__endIndex) {\n layer.clear(false, clearColor);\n } else if (start === layer.__startIndex) {\n var firstEl = list[start];\n\n if (!firstEl.incremental || !firstEl.notClear || paintAll) {\n layer.clear(false, clearColor);\n }\n }\n\n if (start === -1) {\n console.error('For some unknown reason. drawIndex is -1');\n start = layer.__startIndex;\n }\n\n for (var i = start; i < layer.__endIndex; i++) {\n var el = list[i];\n\n this._doPaintEl(el, layer, paintAll, scope);\n\n el.__dirty = el.__dirtyText = false;\n\n if (useTimer) {\n // Date.now can be executed in 13,025,305 ops/second.\n var dTime = Date.now() - startTime; // Give 15 millisecond to draw.\n // The rest elements will be drawn in the next frame.\n\n if (dTime > 15) {\n break;\n }\n }\n }\n\n layer.__drawIndex = i;\n\n if (layer.__drawIndex < layer.__endIndex) {\n finished = false;\n }\n\n if (scope.prevElClipPaths) {\n // Needs restore the state. If last drawn element is in the clipping area.\n ctx.restore();\n }\n\n ctx.restore();\n }\n\n if (env.wxa) {\n // Flush for weixin application\n util.each(this._layers, function (layer) {\n if (layer && layer.ctx && layer.ctx.draw) {\n layer.ctx.draw();\n }\n });\n }\n\n return finished;\n },\n _doPaintEl: function (el, currentLayer, forcePaint, scope) {\n var ctx = currentLayer.ctx;\n var m = el.transform;\n\n if ((currentLayer.__dirty || forcePaint) && // Ignore invisible element\n !el.invisible // Ignore transparent element\n && el.style.opacity !== 0 // Ignore scale 0 element, in some environment like node-canvas\n // Draw a scale 0 element can cause all following draw wrong\n // And setTransform with scale 0 will cause set back transform failed.\n && !(m && !m[0] && !m[3]) // Ignore culled element\n && !(el.culling && isDisplayableCulled(el, this._width, this._height))) {\n var clipPaths = el.__clipPaths;\n var prevElClipPaths = scope.prevElClipPaths; // Optimize when clipping on group with several elements\n\n if (!prevElClipPaths || isClipPathChanged(clipPaths, prevElClipPaths)) {\n // If has previous clipping state, restore from it\n if (prevElClipPaths) {\n ctx.restore();\n scope.prevElClipPaths = null; // Reset prevEl since context has been restored\n\n scope.prevEl = null;\n } // New clipping state\n\n\n if (clipPaths) {\n ctx.save();\n doClip(clipPaths, ctx);\n scope.prevElClipPaths = clipPaths;\n }\n }\n\n el.beforeBrush && el.beforeBrush(ctx);\n el.brush(ctx, scope.prevEl || null);\n scope.prevEl = el;\n el.afterBrush && el.afterBrush(ctx);\n }\n },\n\n /**\n * 获取 zlevel 所在层,如果不存在则会创建一个新的层\n * @param {number} zlevel\n * @param {boolean} virtual Virtual layer will not be inserted into dom.\n * @return {module:zrender/Layer}\n */\n getLayer: function (zlevel, virtual) {\n if (this._singleCanvas && !this._needsManuallyCompositing) {\n zlevel = CANVAS_ZLEVEL;\n }\n\n var layer = this._layers[zlevel];\n\n if (!layer) {\n // Create a new layer\n layer = new Layer('zr_' + zlevel, this, this.dpr);\n layer.zlevel = zlevel;\n layer.__builtin__ = true;\n\n if (this._layerConfig[zlevel]) {\n util.merge(layer, this._layerConfig[zlevel], true);\n } // TODO Remove EL_AFTER_INCREMENTAL_INC magic number\n else if (this._layerConfig[zlevel - EL_AFTER_INCREMENTAL_INC]) {\n util.merge(layer, this._layerConfig[zlevel - EL_AFTER_INCREMENTAL_INC], true);\n }\n\n if (virtual) {\n layer.virtual = virtual;\n }\n\n this.insertLayer(zlevel, layer); // Context is created after dom inserted to document\n // Or excanvas will get 0px clientWidth and clientHeight\n\n layer.initContext();\n }\n\n return layer;\n },\n insertLayer: function (zlevel, layer) {\n var layersMap = this._layers;\n var zlevelList = this._zlevelList;\n var len = zlevelList.length;\n var prevLayer = null;\n var i = -1;\n var domRoot = this._domRoot;\n\n if (layersMap[zlevel]) {\n logError('ZLevel ' + zlevel + ' has been used already');\n return;\n } // Check if is a valid layer\n\n\n if (!isLayerValid(layer)) {\n logError('Layer of zlevel ' + zlevel + ' is not valid');\n return;\n }\n\n if (len > 0 && zlevel > zlevelList[0]) {\n for (i = 0; i < len - 1; i++) {\n if (zlevelList[i] < zlevel && zlevelList[i + 1] > zlevel) {\n break;\n }\n }\n\n prevLayer = layersMap[zlevelList[i]];\n }\n\n zlevelList.splice(i + 1, 0, zlevel);\n layersMap[zlevel] = layer; // Vitual layer will not directly show on the screen.\n // (It can be a WebGL layer and assigned to a ZImage element)\n // But it still under management of zrender.\n\n if (!layer.virtual) {\n if (prevLayer) {\n var prevDom = prevLayer.dom;\n\n if (prevDom.nextSibling) {\n domRoot.insertBefore(layer.dom, prevDom.nextSibling);\n } else {\n domRoot.appendChild(layer.dom);\n }\n } else {\n if (domRoot.firstChild) {\n domRoot.insertBefore(layer.dom, domRoot.firstChild);\n } else {\n domRoot.appendChild(layer.dom);\n }\n }\n }\n },\n // Iterate each layer\n eachLayer: function (cb, context) {\n var zlevelList = this._zlevelList;\n var z;\n var i;\n\n for (i = 0; i < zlevelList.length; i++) {\n z = zlevelList[i];\n cb.call(context, this._layers[z], z);\n }\n },\n // Iterate each buildin layer\n eachBuiltinLayer: function (cb, context) {\n var zlevelList = this._zlevelList;\n var layer;\n var z;\n var i;\n\n for (i = 0; i < zlevelList.length; i++) {\n z = zlevelList[i];\n layer = this._layers[z];\n\n if (layer.__builtin__) {\n cb.call(context, layer, z);\n }\n }\n },\n // Iterate each other layer except buildin layer\n eachOtherLayer: function (cb, context) {\n var zlevelList = this._zlevelList;\n var layer;\n var z;\n var i;\n\n for (i = 0; i < zlevelList.length; i++) {\n z = zlevelList[i];\n layer = this._layers[z];\n\n if (!layer.__builtin__) {\n cb.call(context, layer, z);\n }\n }\n },\n\n /**\n * 获取所有已创建的层\n * @param {Array.<module:zrender/Layer>} [prevLayer]\n */\n getLayers: function () {\n return this._layers;\n },\n _updateLayerStatus: function (list) {\n this.eachBuiltinLayer(function (layer, z) {\n layer.__dirty = layer.__used = false;\n });\n\n function updatePrevLayer(idx) {\n if (prevLayer) {\n if (prevLayer.__endIndex !== idx) {\n prevLayer.__dirty = true;\n }\n\n prevLayer.__endIndex = idx;\n }\n }\n\n if (this._singleCanvas) {\n for (var i = 1; i < list.length; i++) {\n var el = list[i];\n\n if (el.zlevel !== list[i - 1].zlevel || el.incremental) {\n this._needsManuallyCompositing = true;\n break;\n }\n }\n }\n\n var prevLayer = null;\n var incrementalLayerCount = 0;\n var prevZlevel;\n\n for (var i = 0; i < list.length; i++) {\n var el = list[i];\n var zlevel = el.zlevel;\n var layer;\n\n if (prevZlevel !== zlevel) {\n prevZlevel = zlevel;\n incrementalLayerCount = 0;\n } // TODO Not use magic number on zlevel.\n // Each layer with increment element can be separated to 3 layers.\n // (Other Element drawn after incremental element)\n // -----------------zlevel + EL_AFTER_INCREMENTAL_INC--------------------\n // (Incremental element)\n // ----------------------zlevel + INCREMENTAL_INC------------------------\n // (Element drawn before incremental element)\n // --------------------------------zlevel--------------------------------\n\n\n if (el.incremental) {\n layer = this.getLayer(zlevel + INCREMENTAL_INC, this._needsManuallyCompositing);\n layer.incremental = true;\n incrementalLayerCount = 1;\n } else {\n layer = this.getLayer(zlevel + (incrementalLayerCount > 0 ? EL_AFTER_INCREMENTAL_INC : 0), this._needsManuallyCompositing);\n }\n\n if (!layer.__builtin__) {\n logError('ZLevel ' + zlevel + ' has been used by unkown layer ' + layer.id);\n }\n\n if (layer !== prevLayer) {\n layer.__used = true;\n\n if (layer.__startIndex !== i) {\n layer.__dirty = true;\n }\n\n layer.__startIndex = i;\n\n if (!layer.incremental) {\n layer.__drawIndex = i;\n } else {\n // Mark layer draw index needs to update.\n layer.__drawIndex = -1;\n }\n\n updatePrevLayer(i);\n prevLayer = layer;\n }\n\n if (el.__dirty) {\n layer.__dirty = true;\n\n if (layer.incremental && layer.__drawIndex < 0) {\n // Start draw from the first dirty element.\n layer.__drawIndex = i;\n }\n }\n }\n\n updatePrevLayer(i);\n this.eachBuiltinLayer(function (layer, z) {\n // Used in last frame but not in this frame. Needs clear\n if (!layer.__used && layer.getElementCount() > 0) {\n layer.__dirty = true;\n layer.__startIndex = layer.__endIndex = layer.__drawIndex = 0;\n } // For incremental layer. In case start index changed and no elements are dirty.\n\n\n if (layer.__dirty && layer.__drawIndex < 0) {\n layer.__drawIndex = layer.__startIndex;\n }\n });\n },\n\n /**\n * 清除hover层外所有内容\n */\n clear: function () {\n this.eachBuiltinLayer(this._clearLayer);\n return this;\n },\n _clearLayer: function (layer) {\n layer.clear();\n },\n setBackgroundColor: function (backgroundColor) {\n this._backgroundColor = backgroundColor;\n },\n\n /**\n * 修改指定zlevel的绘制参数\n *\n * @param {string} zlevel\n * @param {Object} config 配置对象\n * @param {string} [config.clearColor=0] 每次清空画布的颜色\n * @param {string} [config.motionBlur=false] 是否开启动态模糊\n * @param {number} [config.lastFrameAlpha=0.7]\n * 在开启动态模糊的时候使用,与上一帧混合的alpha值,值越大尾迹越明显\n */\n configLayer: function (zlevel, config) {\n if (config) {\n var layerConfig = this._layerConfig;\n\n if (!layerConfig[zlevel]) {\n layerConfig[zlevel] = config;\n } else {\n util.merge(layerConfig[zlevel], config, true);\n }\n\n for (var i = 0; i < this._zlevelList.length; i++) {\n var _zlevel = this._zlevelList[i]; // TODO Remove EL_AFTER_INCREMENTAL_INC magic number\n\n if (_zlevel === zlevel || _zlevel === zlevel + EL_AFTER_INCREMENTAL_INC) {\n var layer = this._layers[_zlevel];\n util.merge(layer, layerConfig[zlevel], true);\n }\n }\n }\n },\n\n /**\n * 删除指定层\n * @param {number} zlevel 层所在的zlevel\n */\n delLayer: function (zlevel) {\n var layers = this._layers;\n var zlevelList = this._zlevelList;\n var layer = layers[zlevel];\n\n if (!layer) {\n return;\n }\n\n layer.dom.parentNode.removeChild(layer.dom);\n delete layers[zlevel];\n zlevelList.splice(util.indexOf(zlevelList, zlevel), 1);\n },\n\n /**\n * 区域大小变化后重绘\n */\n resize: function (width, height) {\n if (!this._domRoot.style) {\n // Maybe in node or worker\n if (width == null || height == null) {\n return;\n }\n\n this._width = width;\n this._height = height;\n this.getLayer(CANVAS_ZLEVEL).resize(width, height);\n } else {\n var domRoot = this._domRoot; // FIXME Why ?\n\n domRoot.style.display = 'none'; // Save input w/h\n\n var opts = this._opts;\n width != null && (opts.width = width);\n height != null && (opts.height = height);\n width = this._getSize(0);\n height = this._getSize(1);\n domRoot.style.display = ''; // 优化没有实际改变的resize\n\n if (this._width !== width || height !== this._height) {\n domRoot.style.width = width + 'px';\n domRoot.style.height = height + 'px';\n\n for (var id in this._layers) {\n if (this._layers.hasOwnProperty(id)) {\n this._layers[id].resize(width, height);\n }\n }\n\n util.each(this._progressiveLayers, function (layer) {\n layer.resize(width, height);\n });\n this.refresh(true);\n }\n\n this._width = width;\n this._height = height;\n }\n\n return this;\n },\n\n /**\n * 清除单独的一个层\n * @param {number} zlevel\n */\n clearLayer: function (zlevel) {\n var layer = this._layers[zlevel];\n\n if (layer) {\n layer.clear();\n }\n },\n\n /**\n * 释放\n */\n dispose: function () {\n this.root.innerHTML = '';\n this.root = this.storage = this._domRoot = this._layers = null;\n },\n\n /**\n * Get canvas which has all thing rendered\n * @param {Object} opts\n * @param {string} [opts.backgroundColor]\n * @param {number} [opts.pixelRatio]\n */\n getRenderedCanvas: function (opts) {\n opts = opts || {};\n\n if (this._singleCanvas && !this._compositeManually) {\n return this._layers[CANVAS_ZLEVEL].dom;\n }\n\n var imageLayer = new Layer('image', this, opts.pixelRatio || this.dpr);\n imageLayer.initContext();\n imageLayer.clear(false, opts.backgroundColor || this._backgroundColor);\n\n if (opts.pixelRatio <= this.dpr) {\n this.refresh();\n var width = imageLayer.dom.width;\n var height = imageLayer.dom.height;\n var ctx = imageLayer.ctx;\n this.eachLayer(function (layer) {\n if (layer.__builtin__) {\n ctx.drawImage(layer.dom, 0, 0, width, height);\n } else if (layer.renderToCanvas) {\n imageLayer.ctx.save();\n layer.renderToCanvas(imageLayer.ctx);\n imageLayer.ctx.restore();\n }\n });\n } else {\n // PENDING, echarts-gl and incremental rendering.\n var scope = {};\n var displayList = this.storage.getDisplayList(true);\n\n for (var i = 0; i < displayList.length; i++) {\n var el = displayList[i];\n\n this._doPaintEl(el, imageLayer, true, scope);\n }\n }\n\n return imageLayer.dom;\n },\n\n /**\n * 获取绘图区域宽度\n */\n getWidth: function () {\n return this._width;\n },\n\n /**\n * 获取绘图区域高度\n */\n getHeight: function () {\n return this._height;\n },\n _getSize: function (whIdx) {\n var opts = this._opts;\n var wh = ['width', 'height'][whIdx];\n var cwh = ['clientWidth', 'clientHeight'][whIdx];\n var plt = ['paddingLeft', 'paddingTop'][whIdx];\n var prb = ['paddingRight', 'paddingBottom'][whIdx];\n\n if (opts[wh] != null && opts[wh] !== 'auto') {\n return parseFloat(opts[wh]);\n }\n\n var root = this.root; // IE8 does not support getComputedStyle, but it use VML.\n\n var stl = document.defaultView.getComputedStyle(root);\n return (root[cwh] || parseInt10(stl[wh]) || parseInt10(root.style[wh])) - (parseInt10(stl[plt]) || 0) - (parseInt10(stl[prb]) || 0) | 0;\n },\n pathToImage: function (path, dpr) {\n dpr = dpr || this.dpr;\n var canvas = document.createElement('canvas');\n var ctx = canvas.getContext('2d');\n var rect = path.getBoundingRect();\n var style = path.style;\n var shadowBlurSize = style.shadowBlur * dpr;\n var shadowOffsetX = style.shadowOffsetX * dpr;\n var shadowOffsetY = style.shadowOffsetY * dpr;\n var lineWidth = style.hasStroke() ? style.lineWidth : 0;\n var leftMargin = Math.max(lineWidth / 2, -shadowOffsetX + shadowBlurSize);\n var rightMargin = Math.max(lineWidth / 2, shadowOffsetX + shadowBlurSize);\n var topMargin = Math.max(lineWidth / 2, -shadowOffsetY + shadowBlurSize);\n var bottomMargin = Math.max(lineWidth / 2, shadowOffsetY + shadowBlurSize);\n var width = rect.width + leftMargin + rightMargin;\n var height = rect.height + topMargin + bottomMargin;\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n ctx.scale(dpr, dpr);\n ctx.clearRect(0, 0, width, height);\n ctx.dpr = dpr;\n var pathTransform = {\n position: path.position,\n rotation: path.rotation,\n scale: path.scale\n };\n path.position = [leftMargin - rect.x, topMargin - rect.y];\n path.rotation = 0;\n path.scale = [1, 1];\n path.updateTransform();\n\n if (path) {\n path.brush(ctx);\n }\n\n var ImageShape = Image;\n var imgShape = new ImageShape({\n style: {\n x: 0,\n y: 0,\n image: canvas\n }\n });\n\n if (pathTransform.position != null) {\n imgShape.position = path.position = pathTransform.position;\n }\n\n if (pathTransform.rotation != null) {\n imgShape.rotation = path.rotation = pathTransform.rotation;\n }\n\n if (pathTransform.scale != null) {\n imgShape.scale = path.scale = pathTransform.scale;\n }\n\n return imgShape;\n }\n};\nvar _default = Painter;\nmodule.exports = _default;","var util = require(\"./core/util\");\n\nvar env = require(\"./core/env\");\n\nvar Group = require(\"./container/Group\");\n\nvar timsort = require(\"./core/timsort\");\n\n// Use timsort because in most case elements are partially sorted\n// https://jsfiddle.net/pissang/jr4x7mdm/8/\nfunction shapeCompareFunc(a, b) {\n if (a.zlevel === b.zlevel) {\n if (a.z === b.z) {\n // if (a.z2 === b.z2) {\n // // FIXME Slow has renderidx compare\n // // http://stackoverflow.com/questions/20883421/sorting-in-javascript-should-every-compare-function-have-a-return-0-statement\n // // https://github.com/v8/v8/blob/47cce544a31ed5577ffe2963f67acb4144ee0232/src/js/array.js#L1012\n // return a.__renderidx - b.__renderidx;\n // }\n return a.z2 - b.z2;\n }\n\n return a.z - b.z;\n }\n\n return a.zlevel - b.zlevel;\n}\n/**\n * 内容仓库 (M)\n * @alias module:zrender/Storage\n * @constructor\n */\n\n\nvar Storage = function () {\n // jshint ignore:line\n this._roots = [];\n this._displayList = [];\n this._displayListLen = 0;\n};\n\nStorage.prototype = {\n constructor: Storage,\n\n /**\n * @param {Function} cb\n *\n */\n traverse: function (cb, context) {\n for (var i = 0; i < this._roots.length; i++) {\n this._roots[i].traverse(cb, context);\n }\n },\n\n /**\n * 返回所有图形的绘制队列\n * @param {boolean} [update=false] 是否在返回前更新该数组\n * @param {boolean} [includeIgnore=false] 是否包含 ignore 的数组, 在 update 为 true 的时候有效\n *\n * 详见{@link module:zrender/graphic/Displayable.prototype.updateDisplayList}\n * @return {Array.<module:zrender/graphic/Displayable>}\n */\n getDisplayList: function (update, includeIgnore) {\n includeIgnore = includeIgnore || false;\n\n if (update) {\n this.updateDisplayList(includeIgnore);\n }\n\n return this._displayList;\n },\n\n /**\n * 更新图形的绘制队列。\n * 每次绘制前都会调用,该方法会先深度优先遍历整个树,更新所有Group和Shape的变换并且把所有可见的Shape保存到数组中,\n * 最后根据绘制的优先级(zlevel > z > 插入顺序)排序得到绘制队列\n * @param {boolean} [includeIgnore=false] 是否包含 ignore 的数组\n */\n updateDisplayList: function (includeIgnore) {\n this._displayListLen = 0;\n var roots = this._roots;\n var displayList = this._displayList;\n\n for (var i = 0, len = roots.length; i < len; i++) {\n this._updateAndAddDisplayable(roots[i], null, includeIgnore);\n }\n\n displayList.length = this._displayListLen;\n env.canvasSupported && timsort(displayList, shapeCompareFunc);\n },\n _updateAndAddDisplayable: function (el, clipPaths, includeIgnore) {\n if (el.ignore && !includeIgnore) {\n return;\n }\n\n el.beforeUpdate();\n\n if (el.__dirty) {\n el.update();\n }\n\n el.afterUpdate();\n var userSetClipPath = el.clipPath;\n\n if (userSetClipPath) {\n // FIXME 效率影响\n if (clipPaths) {\n clipPaths = clipPaths.slice();\n } else {\n clipPaths = [];\n }\n\n var currentClipPath = userSetClipPath;\n var parentClipPath = el; // Recursively add clip path\n\n while (currentClipPath) {\n // clipPath 的变换是基于使用这个 clipPath 的元素\n currentClipPath.parent = parentClipPath;\n currentClipPath.updateTransform();\n clipPaths.push(currentClipPath);\n parentClipPath = currentClipPath;\n currentClipPath = currentClipPath.clipPath;\n }\n }\n\n if (el.isGroup) {\n var children = el._children;\n\n for (var i = 0; i < children.length; i++) {\n var child = children[i]; // Force to mark as dirty if group is dirty\n // FIXME __dirtyPath ?\n\n if (el.__dirty) {\n child.__dirty = true;\n }\n\n this._updateAndAddDisplayable(child, clipPaths, includeIgnore);\n } // Mark group clean here\n\n\n el.__dirty = false;\n } else {\n el.__clipPaths = clipPaths;\n this._displayList[this._displayListLen++] = el;\n }\n },\n\n /**\n * 添加图形(Shape)或者组(Group)到根节点\n * @param {module:zrender/Element} el\n */\n addRoot: function (el) {\n if (el.__storage === this) {\n return;\n }\n\n if (el instanceof Group) {\n el.addChildrenToStorage(this);\n }\n\n this.addToStorage(el);\n\n this._roots.push(el);\n },\n\n /**\n * 删除指定的图形(Shape)或者组(Group)\n * @param {string|Array.<string>} [el] 如果为空清空整个Storage\n */\n delRoot: function (el) {\n if (el == null) {\n // 不指定el清空\n for (var i = 0; i < this._roots.length; i++) {\n var root = this._roots[i];\n\n if (root instanceof Group) {\n root.delChildrenFromStorage(this);\n }\n }\n\n this._roots = [];\n this._displayList = [];\n this._displayListLen = 0;\n return;\n }\n\n if (el instanceof Array) {\n for (var i = 0, l = el.length; i < l; i++) {\n this.delRoot(el[i]);\n }\n\n return;\n }\n\n var idx = util.indexOf(this._roots, el);\n\n if (idx >= 0) {\n this.delFromStorage(el);\n\n this._roots.splice(idx, 1);\n\n if (el instanceof Group) {\n el.delChildrenFromStorage(this);\n }\n }\n },\n addToStorage: function (el) {\n if (el) {\n el.__storage = this;\n el.dirty(false);\n }\n\n return this;\n },\n delFromStorage: function (el) {\n if (el) {\n el.__storage = null;\n }\n\n return this;\n },\n\n /**\n * 清空并且释放Storage\n */\n dispose: function () {\n this._renderList = this._roots = null;\n },\n displayableSortFunc: shapeCompareFunc\n};\nvar _default = Storage;\nmodule.exports = _default;","var util = require(\"../core/util\");\n\nvar _event = require(\"../core/event\");\n\nvar Dispatcher = _event.Dispatcher;\n\nvar requestAnimationFrame = require(\"./requestAnimationFrame\");\n\nvar Animator = require(\"./Animator\");\n\n/**\n * Animation main class, dispatch and manage all animation controllers\n *\n * @module zrender/animation/Animation\n * @author pissang(https://github.com/pissang)\n */\n// TODO Additive animation\n// http://iosoteric.com/additive-animations-animatewithduration-in-ios-8/\n// https://developer.apple.com/videos/wwdc2014/#236\n\n/**\n * @typedef {Object} IZRenderStage\n * @property {Function} update\n */\n\n/**\n * @alias module:zrender/animation/Animation\n * @constructor\n * @param {Object} [options]\n * @param {Function} [options.onframe]\n * @param {IZRenderStage} [options.stage]\n * @example\n * var animation = new Animation();\n * var obj = {\n * x: 100,\n * y: 100\n * };\n * animation.animate(node.position)\n * .when(1000, {\n * x: 500,\n * y: 500\n * })\n * .when(2000, {\n * x: 100,\n * y: 100\n * })\n * .start('spline');\n */\nvar Animation = function (options) {\n options = options || {};\n this.stage = options.stage || {};\n\n this.onframe = options.onframe || function () {}; // private properties\n\n\n this._clips = [];\n this._running = false;\n this._time;\n this._pausedTime;\n this._pauseStart;\n this._paused = false;\n Dispatcher.call(this);\n};\n\nAnimation.prototype = {\n constructor: Animation,\n\n /**\n * Add clip\n * @param {module:zrender/animation/Clip} clip\n */\n addClip: function (clip) {\n this._clips.push(clip);\n },\n\n /**\n * Add animator\n * @param {module:zrender/animation/Animator} animator\n */\n addAnimator: function (animator) {\n animator.animation = this;\n var clips = animator.getClips();\n\n for (var i = 0; i < clips.length; i++) {\n this.addClip(clips[i]);\n }\n },\n\n /**\n * Delete animation clip\n * @param {module:zrender/animation/Clip} clip\n */\n removeClip: function (clip) {\n var idx = util.indexOf(this._clips, clip);\n\n if (idx >= 0) {\n this._clips.splice(idx, 1);\n }\n },\n\n /**\n * Delete animation clip\n * @param {module:zrender/animation/Animator} animator\n */\n removeAnimator: function (animator) {\n var clips = animator.getClips();\n\n for (var i = 0; i < clips.length; i++) {\n this.removeClip(clips[i]);\n }\n\n animator.animation = null;\n },\n _update: function () {\n var time = new Date().getTime() - this._pausedTime;\n\n var delta = time - this._time;\n var clips = this._clips;\n var len = clips.length;\n var deferredEvents = [];\n var deferredClips = [];\n\n for (var i = 0; i < len; i++) {\n var clip = clips[i];\n var e = clip.step(time, delta); // Throw out the events need to be called after\n // stage.update, like destroy\n\n if (e) {\n deferredEvents.push(e);\n deferredClips.push(clip);\n }\n } // Remove the finished clip\n\n\n for (var i = 0; i < len;) {\n if (clips[i]._needsRemove) {\n clips[i] = clips[len - 1];\n clips.pop();\n len--;\n } else {\n i++;\n }\n }\n\n len = deferredEvents.length;\n\n for (var i = 0; i < len; i++) {\n deferredClips[i].fire(deferredEvents[i]);\n }\n\n this._time = time;\n this.onframe(delta); // 'frame' should be triggered before stage, because upper application\n // depends on the sequence (e.g., echarts-stream and finish\n // event judge)\n\n this.trigger('frame', delta);\n\n if (this.stage.update) {\n this.stage.update();\n }\n },\n _startLoop: function () {\n var self = this;\n this._running = true;\n\n function step() {\n if (self._running) {\n requestAnimationFrame(step);\n !self._paused && self._update();\n }\n }\n\n requestAnimationFrame(step);\n },\n\n /**\n * Start animation.\n */\n start: function () {\n this._time = new Date().getTime();\n this._pausedTime = 0;\n\n this._startLoop();\n },\n\n /**\n * Stop animation.\n */\n stop: function () {\n this._running = false;\n },\n\n /**\n * Pause animation.\n */\n pause: function () {\n if (!this._paused) {\n this._pauseStart = new Date().getTime();\n this._paused = true;\n }\n },\n\n /**\n * Resume animation.\n */\n resume: function () {\n if (this._paused) {\n this._pausedTime += new Date().getTime() - this._pauseStart;\n this._paused = false;\n }\n },\n\n /**\n * Clear animation.\n */\n clear: function () {\n this._clips = [];\n },\n\n /**\n * Whether animation finished.\n */\n isFinished: function () {\n return !this._clips.length;\n },\n\n /**\n * Creat animator for a target, whose props can be animated.\n *\n * @param {Object} target\n * @param {Object} options\n * @param {boolean} [options.loop=false] Whether loop animation.\n * @param {Function} [options.getter=null] Get value from target.\n * @param {Function} [options.setter=null] Set value to target.\n * @return {module:zrender/animation/Animation~Animator}\n */\n // TODO Gap\n animate: function (target, options) {\n options = options || {};\n var animator = new Animator(target, options.loop, options.getter, options.setter);\n this.addAnimator(animator);\n return animator;\n }\n};\nutil.mixin(Animation, Dispatcher);\nvar _default = Animation;\nmodule.exports = _default;","var Clip = require(\"./Clip\");\n\nvar color = require(\"../tool/color\");\n\nvar _util = require(\"../core/util\");\n\nvar isArrayLike = _util.isArrayLike;\n\n/**\n * @module echarts/animation/Animator\n */\nvar arraySlice = Array.prototype.slice;\n\nfunction defaultGetter(target, key) {\n return target[key];\n}\n\nfunction defaultSetter(target, key, value) {\n target[key] = value;\n}\n/**\n * @param {number} p0\n * @param {number} p1\n * @param {number} percent\n * @return {number}\n */\n\n\nfunction interpolateNumber(p0, p1, percent) {\n return (p1 - p0) * percent + p0;\n}\n/**\n * @param {string} p0\n * @param {string} p1\n * @param {number} percent\n * @return {string}\n */\n\n\nfunction interpolateString(p0, p1, percent) {\n return percent > 0.5 ? p1 : p0;\n}\n/**\n * @param {Array} p0\n * @param {Array} p1\n * @param {number} percent\n * @param {Array} out\n * @param {number} arrDim\n */\n\n\nfunction interpolateArray(p0, p1, percent, out, arrDim) {\n var len = p0.length;\n\n if (arrDim === 1) {\n for (var i = 0; i < len; i++) {\n out[i] = interpolateNumber(p0[i], p1[i], percent);\n }\n } else {\n var len2 = len && p0[0].length;\n\n for (var i = 0; i < len; i++) {\n for (var j = 0; j < len2; j++) {\n out[i][j] = interpolateNumber(p0[i][j], p1[i][j], percent);\n }\n }\n }\n} // arr0 is source array, arr1 is target array.\n// Do some preprocess to avoid error happened when interpolating from arr0 to arr1\n\n\nfunction fillArr(arr0, arr1, arrDim) {\n var arr0Len = arr0.length;\n var arr1Len = arr1.length;\n\n if (arr0Len !== arr1Len) {\n // FIXME Not work for TypedArray\n var isPreviousLarger = arr0Len > arr1Len;\n\n if (isPreviousLarger) {\n // Cut the previous\n arr0.length = arr1Len;\n } else {\n // Fill the previous\n for (var i = arr0Len; i < arr1Len; i++) {\n arr0.push(arrDim === 1 ? arr1[i] : arraySlice.call(arr1[i]));\n }\n }\n } // Handling NaN value\n\n\n var len2 = arr0[0] && arr0[0].length;\n\n for (var i = 0; i < arr0.length; i++) {\n if (arrDim === 1) {\n if (isNaN(arr0[i])) {\n arr0[i] = arr1[i];\n }\n } else {\n for (var j = 0; j < len2; j++) {\n if (isNaN(arr0[i][j])) {\n arr0[i][j] = arr1[i][j];\n }\n }\n }\n }\n}\n/**\n * @param {Array} arr0\n * @param {Array} arr1\n * @param {number} arrDim\n * @return {boolean}\n */\n\n\nfunction isArraySame(arr0, arr1, arrDim) {\n if (arr0 === arr1) {\n return true;\n }\n\n var len = arr0.length;\n\n if (len !== arr1.length) {\n return false;\n }\n\n if (arrDim === 1) {\n for (var i = 0; i < len; i++) {\n if (arr0[i] !== arr1[i]) {\n return false;\n }\n }\n } else {\n var len2 = arr0[0].length;\n\n for (var i = 0; i < len; i++) {\n for (var j = 0; j < len2; j++) {\n if (arr0[i][j] !== arr1[i][j]) {\n return false;\n }\n }\n }\n }\n\n return true;\n}\n/**\n * Catmull Rom interpolate array\n * @param {Array} p0\n * @param {Array} p1\n * @param {Array} p2\n * @param {Array} p3\n * @param {number} t\n * @param {number} t2\n * @param {number} t3\n * @param {Array} out\n * @param {number} arrDim\n */\n\n\nfunction catmullRomInterpolateArray(p0, p1, p2, p3, t, t2, t3, out, arrDim) {\n var len = p0.length;\n\n if (arrDim === 1) {\n for (var i = 0; i < len; i++) {\n out[i] = catmullRomInterpolate(p0[i], p1[i], p2[i], p3[i], t, t2, t3);\n }\n } else {\n var len2 = p0[0].length;\n\n for (var i = 0; i < len; i++) {\n for (var j = 0; j < len2; j++) {\n out[i][j] = catmullRomInterpolate(p0[i][j], p1[i][j], p2[i][j], p3[i][j], t, t2, t3);\n }\n }\n }\n}\n/**\n * Catmull Rom interpolate number\n * @param {number} p0\n * @param {number} p1\n * @param {number} p2\n * @param {number} p3\n * @param {number} t\n * @param {number} t2\n * @param {number} t3\n * @return {number}\n */\n\n\nfunction catmullRomInterpolate(p0, p1, p2, p3, t, t2, t3) {\n var v0 = (p2 - p0) * 0.5;\n var v1 = (p3 - p1) * 0.5;\n return (2 * (p1 - p2) + v0 + v1) * t3 + (-3 * (p1 - p2) - 2 * v0 - v1) * t2 + v0 * t + p1;\n}\n\nfunction cloneValue(value) {\n if (isArrayLike(value)) {\n var len = value.length;\n\n if (isArrayLike(value[0])) {\n var ret = [];\n\n for (var i = 0; i < len; i++) {\n ret.push(arraySlice.call(value[i]));\n }\n\n return ret;\n }\n\n return arraySlice.call(value);\n }\n\n return value;\n}\n\nfunction rgba2String(rgba) {\n rgba[0] = Math.floor(rgba[0]);\n rgba[1] = Math.floor(rgba[1]);\n rgba[2] = Math.floor(rgba[2]);\n return 'rgba(' + rgba.join(',') + ')';\n}\n\nfunction getArrayDim(keyframes) {\n var lastValue = keyframes[keyframes.length - 1].value;\n return isArrayLike(lastValue && lastValue[0]) ? 2 : 1;\n}\n\nfunction createTrackClip(animator, easing, oneTrackDone, keyframes, propName, forceAnimate) {\n var getter = animator._getter;\n var setter = animator._setter;\n var useSpline = easing === 'spline';\n var trackLen = keyframes.length;\n\n if (!trackLen) {\n return;\n } // Guess data type\n\n\n var firstVal = keyframes[0].value;\n var isValueArray = isArrayLike(firstVal);\n var isValueColor = false;\n var isValueString = false; // For vertices morphing\n\n var arrDim = isValueArray ? getArrayDim(keyframes) : 0;\n var trackMaxTime; // Sort keyframe as ascending\n\n keyframes.sort(function (a, b) {\n return a.time - b.time;\n });\n trackMaxTime = keyframes[trackLen - 1].time; // Percents of each keyframe\n\n var kfPercents = []; // Value of each keyframe\n\n var kfValues = [];\n var prevValue = keyframes[0].value;\n var isAllValueEqual = true;\n\n for (var i = 0; i < trackLen; i++) {\n kfPercents.push(keyframes[i].time / trackMaxTime); // Assume value is a color when it is a string\n\n var value = keyframes[i].value; // Check if value is equal, deep check if value is array\n\n if (!(isValueArray && isArraySame(value, prevValue, arrDim) || !isValueArray && value === prevValue)) {\n isAllValueEqual = false;\n }\n\n prevValue = value; // Try converting a string to a color array\n\n if (typeof value === 'string') {\n var colorArray = color.parse(value);\n\n if (colorArray) {\n value = colorArray;\n isValueColor = true;\n } else {\n isValueString = true;\n }\n }\n\n kfValues.push(value);\n }\n\n if (!forceAnimate && isAllValueEqual) {\n return;\n }\n\n var lastValue = kfValues[trackLen - 1]; // Polyfill array and NaN value\n\n for (var i = 0; i < trackLen - 1; i++) {\n if (isValueArray) {\n fillArr(kfValues[i], lastValue, arrDim);\n } else {\n if (isNaN(kfValues[i]) && !isNaN(lastValue) && !isValueString && !isValueColor) {\n kfValues[i] = lastValue;\n }\n }\n }\n\n isValueArray && fillArr(getter(animator._target, propName), lastValue, arrDim); // Cache the key of last frame to speed up when\n // animation playback is sequency\n\n var lastFrame = 0;\n var lastFramePercent = 0;\n var start;\n var w;\n var p0;\n var p1;\n var p2;\n var p3;\n\n if (isValueColor) {\n var rgba = [0, 0, 0, 0];\n }\n\n var onframe = function (target, percent) {\n // Find the range keyframes\n // kf1-----kf2---------current--------kf3\n // find kf2 and kf3 and do interpolation\n var frame; // In the easing function like elasticOut, percent may less than 0\n\n if (percent < 0) {\n frame = 0;\n } else if (percent < lastFramePercent) {\n // Start from next key\n // PENDING start from lastFrame ?\n start = Math.min(lastFrame + 1, trackLen - 1);\n\n for (frame = start; frame >= 0; frame--) {\n if (kfPercents[frame] <= percent) {\n break;\n }\n } // PENDING really need to do this ?\n\n\n frame = Math.min(frame, trackLen - 2);\n } else {\n for (frame = lastFrame; frame < trackLen; frame++) {\n if (kfPercents[frame] > percent) {\n break;\n }\n }\n\n frame = Math.min(frame - 1, trackLen - 2);\n }\n\n lastFrame = frame;\n lastFramePercent = percent;\n var range = kfPercents[frame + 1] - kfPercents[frame];\n\n if (range === 0) {\n return;\n } else {\n w = (percent - kfPercents[frame]) / range;\n }\n\n if (useSpline) {\n p1 = kfValues[frame];\n p0 = kfValues[frame === 0 ? frame : frame - 1];\n p2 = kfValues[frame > trackLen - 2 ? trackLen - 1 : frame + 1];\n p3 = kfValues[frame > trackLen - 3 ? trackLen - 1 : frame + 2];\n\n if (isValueArray) {\n catmullRomInterpolateArray(p0, p1, p2, p3, w, w * w, w * w * w, getter(target, propName), arrDim);\n } else {\n var value;\n\n if (isValueColor) {\n value = catmullRomInterpolateArray(p0, p1, p2, p3, w, w * w, w * w * w, rgba, 1);\n value = rgba2String(rgba);\n } else if (isValueString) {\n // String is step(0.5)\n return interpolateString(p1, p2, w);\n } else {\n value = catmullRomInterpolate(p0, p1, p2, p3, w, w * w, w * w * w);\n }\n\n setter(target, propName, value);\n }\n } else {\n if (isValueArray) {\n interpolateArray(kfValues[frame], kfValues[frame + 1], w, getter(target, propName), arrDim);\n } else {\n var value;\n\n if (isValueColor) {\n interpolateArray(kfValues[frame], kfValues[frame + 1], w, rgba, 1);\n value = rgba2String(rgba);\n } else if (isValueString) {\n // String is step(0.5)\n return interpolateString(kfValues[frame], kfValues[frame + 1], w);\n } else {\n value = interpolateNumber(kfValues[frame], kfValues[frame + 1], w);\n }\n\n setter(target, propName, value);\n }\n }\n };\n\n var clip = new Clip({\n target: animator._target,\n life: trackMaxTime,\n loop: animator._loop,\n delay: animator._delay,\n onframe: onframe,\n ondestroy: oneTrackDone\n });\n\n if (easing && easing !== 'spline') {\n clip.easing = easing;\n }\n\n return clip;\n}\n/**\n * @alias module:zrender/animation/Animator\n * @constructor\n * @param {Object} target\n * @param {boolean} loop\n * @param {Function} getter\n * @param {Function} setter\n */\n\n\nvar Animator = function (target, loop, getter, setter) {\n this._tracks = {};\n this._target = target;\n this._loop = loop || false;\n this._getter = getter || defaultGetter;\n this._setter = setter || defaultSetter;\n this._clipCount = 0;\n this._delay = 0;\n this._doneList = [];\n this._onframeList = [];\n this._clipList = [];\n};\n\nAnimator.prototype = {\n /**\n * Set Animation keyframe\n * @param {number} time 关键帧时间,单位是ms\n * @param {Object} props 关键帧的属性值,key-value表示\n * @return {module:zrender/animation/Animator}\n */\n when: function (time\n /* ms */\n , props) {\n var tracks = this._tracks;\n\n for (var propName in props) {\n if (!props.hasOwnProperty(propName)) {\n continue;\n }\n\n if (!tracks[propName]) {\n tracks[propName] = []; // Invalid value\n\n var value = this._getter(this._target, propName);\n\n if (value == null) {\n // zrLog('Invalid property ' + propName);\n continue;\n } // If time is 0\n // Then props is given initialize value\n // Else\n // Initialize value from current prop value\n\n\n if (time !== 0) {\n tracks[propName].push({\n time: 0,\n value: cloneValue(value)\n });\n }\n }\n\n tracks[propName].push({\n time: time,\n value: props[propName]\n });\n }\n\n return this;\n },\n\n /**\n * 添加动画每一帧的回调函数\n * @param {Function} callback\n * @return {module:zrender/animation/Animator}\n */\n during: function (callback) {\n this._onframeList.push(callback);\n\n return this;\n },\n pause: function () {\n for (var i = 0; i < this._clipList.length; i++) {\n this._clipList[i].pause();\n }\n\n this._paused = true;\n },\n resume: function () {\n for (var i = 0; i < this._clipList.length; i++) {\n this._clipList[i].resume();\n }\n\n this._paused = false;\n },\n isPaused: function () {\n return !!this._paused;\n },\n _doneCallback: function () {\n // Clear all tracks\n this._tracks = {}; // Clear all clips\n\n this._clipList.length = 0;\n var doneList = this._doneList;\n var len = doneList.length;\n\n for (var i = 0; i < len; i++) {\n doneList[i].call(this);\n }\n },\n\n /**\n * Start the animation\n * @param {string|Function} [easing]\n * 动画缓动函数,详见{@link module:zrender/animation/easing}\n * @param {boolean} forceAnimate\n * @return {module:zrender/animation/Animator}\n */\n start: function (easing, forceAnimate) {\n var self = this;\n var clipCount = 0;\n\n var oneTrackDone = function () {\n clipCount--;\n\n if (!clipCount) {\n self._doneCallback();\n }\n };\n\n var lastClip;\n\n for (var propName in this._tracks) {\n if (!this._tracks.hasOwnProperty(propName)) {\n continue;\n }\n\n var clip = createTrackClip(this, easing, oneTrackDone, this._tracks[propName], propName, forceAnimate);\n\n if (clip) {\n this._clipList.push(clip);\n\n clipCount++; // If start after added to animation\n\n if (this.animation) {\n this.animation.addClip(clip);\n }\n\n lastClip = clip;\n }\n } // Add during callback on the last clip\n\n\n if (lastClip) {\n var oldOnFrame = lastClip.onframe;\n\n lastClip.onframe = function (target, percent) {\n oldOnFrame(target, percent);\n\n for (var i = 0; i < self._onframeList.length; i++) {\n self._onframeList[i](target, percent);\n }\n };\n } // This optimization will help the case that in the upper application\n // the view may be refreshed frequently, where animation will be\n // called repeatly but nothing changed.\n\n\n if (!clipCount) {\n this._doneCallback();\n }\n\n return this;\n },\n\n /**\n * Stop animation\n * @param {boolean} forwardToLast If move to last frame before stop\n */\n stop: function (forwardToLast) {\n var clipList = this._clipList;\n var animation = this.animation;\n\n for (var i = 0; i < clipList.length; i++) {\n var clip = clipList[i];\n\n if (forwardToLast) {\n // Move to last frame before stop\n clip.onframe(this._target, 1);\n }\n\n animation && animation.removeClip(clip);\n }\n\n clipList.length = 0;\n },\n\n /**\n * Set when animation delay starts\n * @param {number} time 单位ms\n * @return {module:zrender/animation/Animator}\n */\n delay: function (time) {\n this._delay = time;\n return this;\n },\n\n /**\n * Add callback for animation end\n * @param {Function} cb\n * @return {module:zrender/animation/Animator}\n */\n done: function (cb) {\n if (cb) {\n this._doneList.push(cb);\n }\n\n return this;\n },\n\n /**\n * @return {Array.<module:zrender/animation/Clip>}\n */\n getClips: function () {\n return this._clipList;\n }\n};\nvar _default = Animator;\nmodule.exports = _default;","var easingFuncs = require(\"./easing\");\n\n/**\n * 动画主控制器\n * @config target 动画对象,可以是数组,如果是数组的话会批量分发onframe等事件\n * @config life(1000) 动画时长\n * @config delay(0) 动画延迟时间\n * @config loop(true)\n * @config gap(0) 循环的间隔时间\n * @config onframe\n * @config easing(optional)\n * @config ondestroy(optional)\n * @config onrestart(optional)\n *\n * TODO pause\n */\nfunction Clip(options) {\n this._target = options.target; // 生命周期\n\n this._life = options.life || 1000; // 延时\n\n this._delay = options.delay || 0; // 开始时间\n // this._startTime = new Date().getTime() + this._delay;// 单位毫秒\n\n this._initialized = false; // 是否循环\n\n this.loop = options.loop == null ? false : options.loop;\n this.gap = options.gap || 0;\n this.easing = options.easing || 'Linear';\n this.onframe = options.onframe;\n this.ondestroy = options.ondestroy;\n this.onrestart = options.onrestart;\n this._pausedTime = 0;\n this._paused = false;\n}\n\nClip.prototype = {\n constructor: Clip,\n step: function (globalTime, deltaTime) {\n // Set startTime on first step, or _startTime may has milleseconds different between clips\n // PENDING\n if (!this._initialized) {\n this._startTime = globalTime + this._delay;\n this._initialized = true;\n }\n\n if (this._paused) {\n this._pausedTime += deltaTime;\n return;\n }\n\n var percent = (globalTime - this._startTime - this._pausedTime) / this._life; // 还没开始\n\n if (percent < 0) {\n return;\n }\n\n percent = Math.min(percent, 1);\n var easing = this.easing;\n var easingFunc = typeof easing === 'string' ? easingFuncs[easing] : easing;\n var schedule = typeof easingFunc === 'function' ? easingFunc(percent) : percent;\n this.fire('frame', schedule); // 结束\n\n if (percent === 1) {\n if (this.loop) {\n this.restart(globalTime); // 重新开始周期\n // 抛出而不是直接调用事件直到 stage.update 后再统一调用这些事件\n\n return 'restart';\n } // 动画完成将这个控制器标识为待删除\n // 在Animation.update中进行批量删除\n\n\n this._needsRemove = true;\n return 'destroy';\n }\n\n return null;\n },\n restart: function (globalTime) {\n var remainder = (globalTime - this._startTime - this._pausedTime) % this._life;\n this._startTime = globalTime - remainder + this.gap;\n this._pausedTime = 0;\n this._needsRemove = false;\n },\n fire: function (eventType, arg) {\n eventType = 'on' + eventType;\n\n if (this[eventType]) {\n this[eventType](this._target, arg);\n }\n },\n pause: function () {\n this._paused = true;\n },\n resume: function () {\n this._paused = false;\n }\n};\nvar _default = Clip;\nmodule.exports = _default;","/**\n * 缓动代码来自 https://github.com/sole/tween.js/blob/master/src/Tween.js\n * @see http://sole.github.io/tween.js/examples/03_graphs.html\n * @exports zrender/animation/easing\n */\nvar easing = {\n /**\n * @param {number} k\n * @return {number}\n */\n linear: function (k) {\n return k;\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n quadraticIn: function (k) {\n return k * k;\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n quadraticOut: function (k) {\n return k * (2 - k);\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n quadraticInOut: function (k) {\n if ((k *= 2) < 1) {\n return 0.5 * k * k;\n }\n\n return -0.5 * (--k * (k - 2) - 1);\n },\n // 三次方的缓动(t^3)\n\n /**\n * @param {number} k\n * @return {number}\n */\n cubicIn: function (k) {\n return k * k * k;\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n cubicOut: function (k) {\n return --k * k * k + 1;\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n cubicInOut: function (k) {\n if ((k *= 2) < 1) {\n return 0.5 * k * k * k;\n }\n\n return 0.5 * ((k -= 2) * k * k + 2);\n },\n // 四次方的缓动(t^4)\n\n /**\n * @param {number} k\n * @return {number}\n */\n quarticIn: function (k) {\n return k * k * k * k;\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n quarticOut: function (k) {\n return 1 - --k * k * k * k;\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n quarticInOut: function (k) {\n if ((k *= 2) < 1) {\n return 0.5 * k * k * k * k;\n }\n\n return -0.5 * ((k -= 2) * k * k * k - 2);\n },\n // 五次方的缓动(t^5)\n\n /**\n * @param {number} k\n * @return {number}\n */\n quinticIn: function (k) {\n return k * k * k * k * k;\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n quinticOut: function (k) {\n return --k * k * k * k * k + 1;\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n quinticInOut: function (k) {\n if ((k *= 2) < 1) {\n return 0.5 * k * k * k * k * k;\n }\n\n return 0.5 * ((k -= 2) * k * k * k * k + 2);\n },\n // 正弦曲线的缓动(sin(t))\n\n /**\n * @param {number} k\n * @return {number}\n */\n sinusoidalIn: function (k) {\n return 1 - Math.cos(k * Math.PI / 2);\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n sinusoidalOut: function (k) {\n return Math.sin(k * Math.PI / 2);\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n sinusoidalInOut: function (k) {\n return 0.5 * (1 - Math.cos(Math.PI * k));\n },\n // 指数曲线的缓动(2^t)\n\n /**\n * @param {number} k\n * @return {number}\n */\n exponentialIn: function (k) {\n return k === 0 ? 0 : Math.pow(1024, k - 1);\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n exponentialOut: function (k) {\n return k === 1 ? 1 : 1 - Math.pow(2, -10 * k);\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n exponentialInOut: function (k) {\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n if ((k *= 2) < 1) {\n return 0.5 * Math.pow(1024, k - 1);\n }\n\n return 0.5 * (-Math.pow(2, -10 * (k - 1)) + 2);\n },\n // 圆形曲线的缓动(sqrt(1-t^2))\n\n /**\n * @param {number} k\n * @return {number}\n */\n circularIn: function (k) {\n return 1 - Math.sqrt(1 - k * k);\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n circularOut: function (k) {\n return Math.sqrt(1 - --k * k);\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n circularInOut: function (k) {\n if ((k *= 2) < 1) {\n return -0.5 * (Math.sqrt(1 - k * k) - 1);\n }\n\n return 0.5 * (Math.sqrt(1 - (k -= 2) * k) + 1);\n },\n // 创建类似于弹簧在停止前来回振荡的动画\n\n /**\n * @param {number} k\n * @return {number}\n */\n elasticIn: function (k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n\n return -(a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p));\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n elasticOut: function (k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n\n return a * Math.pow(2, -10 * k) * Math.sin((k - s) * (2 * Math.PI) / p) + 1;\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n elasticInOut: function (k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n\n if ((k *= 2) < 1) {\n return -0.5 * (a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p));\n }\n\n return a * Math.pow(2, -10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p) * 0.5 + 1;\n },\n // 在某一动画开始沿指示的路径进行动画处理前稍稍收回该动画的移动\n\n /**\n * @param {number} k\n * @return {number}\n */\n backIn: function (k) {\n var s = 1.70158;\n return k * k * ((s + 1) * k - s);\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n backOut: function (k) {\n var s = 1.70158;\n return --k * k * ((s + 1) * k + s) + 1;\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n backInOut: function (k) {\n var s = 1.70158 * 1.525;\n\n if ((k *= 2) < 1) {\n return 0.5 * (k * k * ((s + 1) * k - s));\n }\n\n return 0.5 * ((k -= 2) * k * ((s + 1) * k + s) + 2);\n },\n // 创建弹跳效果\n\n /**\n * @param {number} k\n * @return {number}\n */\n bounceIn: function (k) {\n return 1 - easing.bounceOut(1 - k);\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n bounceOut: function (k) {\n if (k < 1 / 2.75) {\n return 7.5625 * k * k;\n } else if (k < 2 / 2.75) {\n return 7.5625 * (k -= 1.5 / 2.75) * k + 0.75;\n } else if (k < 2.5 / 2.75) {\n return 7.5625 * (k -= 2.25 / 2.75) * k + 0.9375;\n } else {\n return 7.5625 * (k -= 2.625 / 2.75) * k + 0.984375;\n }\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n bounceInOut: function (k) {\n if (k < 0.5) {\n return easing.bounceIn(k * 2) * 0.5;\n }\n\n return easing.bounceOut(k * 2 - 1) * 0.5 + 0.5;\n }\n};\nvar _default = easing;\nmodule.exports = _default;","var _default = typeof window !== 'undefined' && (window.requestAnimationFrame && window.requestAnimationFrame.bind(window) || // https://github.com/ecomfe/zrender/issues/189#issuecomment-224919809\nwindow.msRequestAnimationFrame && window.msRequestAnimationFrame.bind(window) || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame) || function (func) {\n setTimeout(func, 16);\n};\n\nmodule.exports = _default;"],"names":["guid","Eventful","Transformable","Animatable","zrUtil","Element","opts","call","this","id","prototype","type","name","__zr","ignore","clipPath","isGroup","drift","dx","dy","draggable","m","transform","decomposeTransform","dirty","beforeUpdate","afterUpdate","update","updateTransform","traverse","cb","context","attrKV","key","value","target","hide","refresh","show","attr","isObject","hasOwnProperty","setClipPath","zr","addSelfToZr","removeClipPath","__clipTarget","removeSelfFromZr","animators","i","length","animation","addAnimator","removeAnimator","mixin","_default","module","exports","util","vec2","Draggable","eventTool","GestureMgr","SILENT","makeEventPacket","eveType","targetInfo","event","topTarget","cancelBubble","offsetX","zrX","offsetY","zrY","gestureEvent","pinchX","pinchY","pinchScale","wheelDelta","zrDelta","zrByTouch","which","stop","stopEvent","EmptyProxy","dispose","handlerNames","Handler","storage","painter","proxy","painterRoot","_hovered","_lastTouchMoment","_lastX","_lastY","_gestureMgr","setHandlerProxy","isHover","displayable","x","y","rectHover","isSilent","el","contain","silent","parent","isOutsideBoundary","handlerInstance","getWidth","getHeight","constructor","each","on","handler","mousemove","isOutside","lastHovered","lastHoveredTarget","findHover","hovered","hoveredTarget","setCursor","cursor","dispatchToElement","mouseout","eventControl","zrEventControl","zrIsToLocalDOM","trigger","resize","dispatch","eventName","eventArgs","setCursorStyle","cursorStyle","eventHandler","eventPacket","eachOtherLayer","layer","exclude","list","getDisplayList","out","hoverCheckResult","processGesture","stage","gestureMgr","clear","gestureInfo","recognize","dom","_downEl","_downPoint","_upEl","dist","_config","devicePixelRatio","Style","Pattern","returnFalse","createDom","dpr","newDom","createCanvas","width","height","newDomStyle","style","position","left","top","setAttribute","Layer","domStyle","onselectstart","domBack","ctxBack","config","clearColor","motionBlur","lastFrameAlpha","__dirty","__used","__drawIndex","__startIndex","__endIndex","incremental","getElementCount","initContext","ctx","getContext","createBackBuffer","scale","clearAll","clearColorGradientOrPattern","haveMotionBLur","globalCompositeOperation","drawImage","clearRect","colorStops","__canvasGradient","getGradient","image","getCanvasPattern","save","fillStyle","fillRect","restore","globalAlpha","logError","BoundingRect","timsort","requestAnimationFrame","Image","env","HOVER_LAYER_ZLEVEL","CANVAS_ZLEVEL","EL_AFTER_INCREMENTAL_INC","INCREMENTAL_INC","parseInt10","val","parseInt","isLayerValid","__builtin__","tmpRect","viewRect","isDisplayableCulled","copy","getBoundingRect","applyTransform","intersect","isClipPathChanged","clipPaths","prevClipPaths","doClip","setTransform","beginPath","buildPath","shape","clip","restoreTransform","createRoot","domRoot","document","createElement","cssText","join","Painter","root","singleCanvas","nodeName","toUpperCase","_opts","extend","_singleCanvas","rootStyle","innerHTML","zlevelList","_zlevelList","layers","_layers","_layerConfig","_needsManuallyCompositing","_width","_height","mainLayer","zlevel","push","_domRoot","_getSize","appendChild","_hoverlayer","_hoverElements","getType","isSingleCanvas","getViewportRoot","getViewportRootOffset","viewportRoot","offsetLeft","offsetTop","paintAll","_redrawId","Math","random","_paintList","z","_backgroundColor","refreshHover","addHover","hoverStyle","__hoverMir","elMirror","z2","__from","setStyle","removeHover","hoverElements","idx","indexOf","splice","clearHover","from","len","hoverLayer","displayableSortFunc","getLayer","scope","originalEl","invisible","invTransform","__clipPaths","_doPaintEl","getHoverLayer","redrawId","_updateLayerStatus","finished","_doPaintList","_compositeManually","self","eachBuiltinLayer","virtual","layerList","zi","k","start","useTimer","Date","now","startTime","firstEl","notClear","console","error","__dirtyText","dTime","prevElClipPaths","wxa","draw","currentLayer","forcePaint","opacity","culling","prevEl","beforeBrush","brush","afterBrush","merge","insertLayer","layersMap","prevLayer","prevDom","nextSibling","insertBefore","firstChild","eachLayer","getLayers","updatePrevLayer","prevZlevel","incrementalLayerCount","_clearLayer","setBackgroundColor","backgroundColor","configLayer","layerConfig","_zlevel","delLayer","parentNode","removeChild","display","_progressiveLayers","clearLayer","getRenderedCanvas","imageLayer","pixelRatio","renderToCanvas","displayList","whIdx","wh","cwh","plt","prb","parseFloat","stl","defaultView","getComputedStyle","pathToImage","path","canvas","rect","shadowBlurSize","shadowBlur","shadowOffsetX","shadowOffsetY","lineWidth","hasStroke","leftMargin","max","rightMargin","topMargin","bottomMargin","pathTransform","rotation","ImageShape","imgShape","Group","shapeCompareFunc","a","b","Storage","_roots","_displayList","_displayListLen","includeIgnore","updateDisplayList","roots","_updateAndAddDisplayable","canvasSupported","userSetClipPath","slice","currentClipPath","parentClipPath","children","_children","child","addRoot","__storage","addChildrenToStorage","addToStorage","delRoot","delChildrenFromStorage","Array","l","delFromStorage","_renderList","_event","Dispatcher","Animator","Animation","options","onframe","_clips","_running","_time","_pausedTime","_pauseStart","_paused","addClip","animator","clips","getClips","removeClip","_update","time","getTime","delta","deferredEvents","deferredClips","e","step","_needsRemove","pop","fire","_startLoop","pause","resume","isFinished","animate","loop","getter","setter","Clip","color","_util","isArrayLike","arraySlice","defaultGetter","defaultSetter","interpolateNumber","p0","p1","percent","interpolateString","interpolateArray","arrDim","len2","j","fillArr","arr0","arr1","arr0Len","arr1Len","isPreviousLarger","isNaN","isArraySame","catmullRomInterpolateArray","p2","p3","t","t2","t3","catmullRomInterpolate","v0","v1","cloneValue","ret","rgba2String","rgba","floor","getArrayDim","keyframes","lastValue","createTrackClip","easing","oneTrackDone","propName","forceAnimate","_getter","_setter","useSpline","trackLen","trackMaxTime","firstVal","isValueArray","isValueColor","isValueString","sort","kfPercents","kfValues","prevValue","isAllValueEqual","colorArray","parse","_target","w","lastFrame","lastFramePercent","frame","min","range","life","_loop","delay","_delay","ondestroy","_tracks","_clipCount","_doneList","_onframeList","_clipList","when","props","tracks","during","callback","isPaused","_doneCallback","doneList","lastClip","clipCount","oldOnFrame","forwardToLast","clipList","done","easingFuncs","_life","_initialized","gap","onrestart","globalTime","deltaTime","_startTime","easingFunc","schedule","restart","remainder","eventType","arg","linear","quadraticIn","quadraticOut","quadraticInOut","cubicIn","cubicOut","cubicInOut","quarticIn","quarticOut","quarticInOut","quinticIn","quinticOut","quinticInOut","sinusoidalIn","cos","PI","sinusoidalOut","sin","sinusoidalInOut","exponentialIn","pow","exponentialOut","exponentialInOut","circularIn","sqrt","circularOut","circularInOut","elasticIn","s","p","asin","elasticOut","elasticInOut","backIn","backOut","backInOut","bounceIn","bounceOut","bounceInOut","window","bind","msRequestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","func","setTimeout"],"sourceRoot":""}
|