/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ !function(t, e) { "object" == typeof exports && "undefined" != typeof module ? e(exports) : "function" == typeof define && define.amd ? define(["exports"], e) : e(t.echarts = {}) }(this, function(t) { "use strict"; var e = 2311 , n = function() { return e++ } , v = "object" == typeof wx && "function" == typeof wx.getSystemInfoSync ? { browser: {}, os: {}, node: !1, wxa: !0, canvasSupported: !0, svgSupported: !1, touchEventsSupported: !0, domSupported: !1 } : "undefined" == typeof document && "undefined" != typeof self ? { browser: {}, os: {}, node: !1, worker: !0, canvasSupported: !0, domSupported: !1 } : "undefined" == typeof navigator ? { browser: {}, os: {}, node: !0, worker: !1, canvasSupported: !0, svgSupported: !0, domSupported: !1 } : function(t) { var e = {} , i = t.match(/Firefox\/([\d.]+)/) , n = t.match(/MSIE\s([\d.]+)/) || t.match(/Trident\/.+?rv:(([\d.]+))/) , o = t.match(/Edge\/([\d.]+)/) , a = /micromessenger/i.test(t); i && (e.firefox = !0, e.version = i[1]); n && (e.ie = !0, e.version = n[1]); o && (e.edge = !0, e.version = o[1]); a && (e.weChat = !0); return { browser: e, os: {}, node: !1, canvasSupported: !!document.createElement("canvas").getContext, svgSupported: "undefined" != typeof SVGRect, touchEventsSupported: "ontouchstart"in window && !e.ie && !e.edge, pointerEventsSupported: "onpointerdown"in window && (e.edge || e.ie && 11 <= e.version), domSupported: "undefined" != typeof document } }(navigator.userAgent); var s = { "[object Function]": 1, "[object RegExp]": 1, "[object Date]": 1, "[object Error]": 1, "[object CanvasGradient]": 1, "[object CanvasPattern]": 1, "[object Image]": 1, "[object Canvas]": 1 } , l = { "[object Int8Array]": 1, "[object Uint8Array]": 1, "[object Uint8ClampedArray]": 1, "[object Int16Array]": 1, "[object Uint16Array]": 1, "[object Int32Array]": 1, "[object Uint32Array]": 1, "[object Float32Array]": 1, "[object Float64Array]": 1 } , u = Object.prototype.toString , i = Array.prototype , r = i.forEach , h = i.filter , o = i.slice , c = i.map , d = i.reduce , a = {}; function f(t, e) { "createCanvas" === t && (g = null), a[t] = e } function k(t) { if (null == t || "object" != typeof t) return t; var e = t , i = u.call(t); if ("[object Array]" === i) { if (!$(t)) { e = []; for (var n = 0, o = t.length; n < o; n++) e[n] = k(t[n]) } } else if (l[i]) { if (!$(t)) { var a = t.constructor; if (t.constructor.from) e = a.from(t); else { e = new a(t.length); for (n = 0, o = t.length; n < o; n++) e[n] = k(t[n]) } } } else if (!s[i] && !$(t) && !G(t)) for (var r in e = {}, t) t.hasOwnProperty(r) && (e[r] = k(t[r])); return e } function m(t, e, i) { if (!z(e) || !z(t)) return i ? k(e) : t; for (var n in e) if (e.hasOwnProperty(n)) { var o = t[n] , a = e[n]; !z(a) || !z(o) || L(a) || L(o) || G(a) || G(o) || B(a) || B(o) || $(a) || $(o) ? !i && n in t || (t[n] = k(e[n])) : m(o, a, i) } return t } function p(t, e) { for (var i = t[0], n = 1, o = t.length; n < o; n++) i = m(i, t[n], e); return i } function P(t, e) { for (var i in e) e.hasOwnProperty(i) && (t[i] = e[i]); return t } function D(t, e, i) { for (var n in e) e.hasOwnProperty(n) && (i ? null != e[n] : null == t[n]) && (t[n] = e[n]); return t } function y() { return a.createCanvas() } var g; function x() { return g = g || y().getContext("2d") } function _(t, e) { if (t) { if (t.indexOf) return t.indexOf(e); for (var i = 0, n = t.length; i < n; i++) if (t[i] === e) return i } return -1 } function w(t, e) { var i = t.prototype; function n() {} for (var o in n.prototype = e.prototype, t.prototype = new n, i) i.hasOwnProperty(o) && (t.prototype[o] = i[o]); (t.prototype.constructor = t).superClass = e } function b(t, e, i) { D(t = "prototype"in t ? t.prototype : t, e = "prototype"in e ? e.prototype : e, i) } function N(t) { if (t) return "string" != typeof t && "number" == typeof t.length } function E(t, e, i) { if (t && e) if (t.forEach && t.forEach === r) t.forEach(e, i); else if (t.length === +t.length) for (var n = 0, o = t.length; n < o; n++) e.call(i, t[n], n, t); else for (var a in t) t.hasOwnProperty(a) && e.call(i, t[a], a, t) } function O(t, e, i) { if (t && e) { if (t.map && t.map === c) return t.map(e, i); for (var n = [], o = 0, a = t.length; o < a; o++) n.push(e.call(i, t[o], o, t)); return n } } function S(t, e, i, n) { if (t && e) { if (t.reduce && t.reduce === d) return t.reduce(e, i, n); for (var o = 0, a = t.length; o < a; o++) i = e.call(n, i, t[o], o, t); return i } } function M(t, e, i) { if (t && e) { if (t.filter && t.filter === h) return t.filter(e, i); for (var n = [], o = 0, a = t.length; o < a; o++) e.call(i, t[o], o, t) && n.push(t[o]); return n } } function I(t, e, i) { if (t && e) for (var n = 0, o = t.length; n < o; n++) if (e.call(i, t[n], n, t)) return t[n] } function A(t, e) { var i = o.call(arguments, 2); return function() { return t.apply(e, i.concat(o.call(arguments))) } } function T(t) { var e = o.call(arguments, 1); return function() { return t.apply(this, e.concat(o.call(arguments))) } } function L(t) { return "[object Array]" === u.call(t) } function C(t) { return "function" == typeof t } function R(t) { return "[object String]" === u.call(t) } function z(t) { var e = typeof t; return "function" == e || !!t && "object" == e } function B(t) { return !!s[u.call(t)] } function V(t) { return !!l[u.call(t)] } function G(t) { return "object" == typeof t && "number" == typeof t.nodeType && "object" == typeof t.ownerDocument } function F(t) { return t != t } function W(t) { for (var e = 0, i = arguments.length; e < i; e++) if (null != arguments[e]) return arguments[e] } function H(t, e) { return null != t ? t : e } function Z(t, e, i) { return null != t ? t : null != e ? e : i } function U() { return Function.call.apply(o, arguments) } function X(t) { if ("number" == typeof t) return [t, t, t, t]; var e = t.length; return 2 === e ? [t[0], t[1], t[0], t[1]] : 3 === e ? [t[0], t[1], t[2], t[1]] : t } function Y(t, e) { if (!t) throw new Error(e) } function j(t) { return null == t ? null : "function" == typeof t.trim ? t.trim() : t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, "") } a.createCanvas = function() { return document.createElement("canvas") } ; var q = "__ec_primitive__"; function K(t) { t[q] = !0 } function $(t) { return t[q] } function J(t) { var i = L(t); this.data = {}; var n = this; function e(t, e) { i ? n.set(t, e) : n.set(e, t) } t instanceof J ? t.each(e) : t && E(t, e) } function Q(t) { return new J(t) } function tt(t, e) { for (var i = new t.constructor(t.length + e.length), n = 0; n < t.length; n++) i[n] = t[n]; var o = t.length; for (n = 0; n < e.length; n++) i[n + o] = e[n]; return i } function et() {} J.prototype = { constructor: J, get: function(t) { return this.data.hasOwnProperty(t) ? this.data[t] : null }, set: function(t, e) { return this.data[t] = e }, each: function(t, e) { for (var i in void 0 !== e && (t = A(t, e)), this.data) this.data.hasOwnProperty(i) && t(this.data[i], i) }, removeKey: function(t) { delete this.data[t] } }; var it = (Object.freeze || Object)({ $override: f, clone: k, merge: m, mergeAll: p, extend: P, defaults: D, createCanvas: y, getContext: x, indexOf: _, inherits: w, mixin: b, isArrayLike: N, each: E, map: O, reduce: S, filter: M, find: I, bind: A, curry: T, isArray: L, isFunction: C, isString: R, isObject: z, isBuiltInObject: B, isTypedArray: V, isDom: G, eqNaN: F, retrieve: W, retrieve2: H, retrieve3: Z, slice: U, normalizeCssArray: X, assert: Y, trim: j, setAsPrimitive: K, isPrimitive: $, createHashMap: Q, concatArray: tt, noop: et }) , nt = "undefined" == typeof Float32Array ? Array : Float32Array; function ot(t, e) { var i = new nt(2); return null == t && (t = 0), null == e && (e = 0), i[0] = t, i[1] = e, i } function at(t, e) { return t[0] = e[0], t[1] = e[1], t } function rt(t) { var e = new nt(2); return e[0] = t[0], e[1] = t[1], e } function st(t, e, i) { return t[0] = e, t[1] = i, t } function lt(t, e, i) { return t[0] = e[0] + i[0], t[1] = e[1] + i[1], t } function ut(t, e, i, n) { return t[0] = e[0] + i[0] * n, t[1] = e[1] + i[1] * n, t } function ht(t, e, i) { return t[0] = e[0] - i[0], t[1] = e[1] - i[1], t } function ct(t) { return Math.sqrt(ft(t)) } var dt = ct; function ft(t) { return t[0] * t[0] + t[1] * t[1] } var pt = ft; function gt(t, e, i) { return t[0] = e[0] * i, t[1] = e[1] * i, t } function mt(t, e) { var i = ct(e); return 0 === i ? (t[0] = 0, t[1] = 0) : (t[0] = e[0] / i, t[1] = e[1] / i), t } function vt(t, e) { return Math.sqrt((t[0] - e[0]) * (t[0] - e[0]) + (t[1] - e[1]) * (t[1] - e[1])) } var yt = vt; function xt(t, e) { return (t[0] - e[0]) * (t[0] - e[0]) + (t[1] - e[1]) * (t[1] - e[1]) } var _t = xt; function wt(t, e, i, n) { return t[0] = e[0] + n * (i[0] - e[0]), t[1] = e[1] + n * (i[1] - e[1]), t } function bt(t, e, i) { var n = e[0] , o = e[1]; return t[0] = i[0] * n + i[2] * o + i[4], t[1] = i[1] * n + i[3] * o + i[5], t } function St(t, e, i) { return t[0] = Math.min(e[0], i[0]), t[1] = Math.min(e[1], i[1]), t } function Mt(t, e, i) { return t[0] = Math.max(e[0], i[0]), t[1] = Math.max(e[1], i[1]), t } var It = (Object.freeze || Object)({ create: ot, copy: at, clone: rt, set: st, add: lt, scaleAndAdd: ut, sub: ht, len: ct, length: dt, lenSquare: ft, lengthSquare: pt, mul: function(t, e, i) { return t[0] = e[0] * i[0], t[1] = e[1] * i[1], t }, div: function(t, e, i) { return t[0] = e[0] / i[0], t[1] = e[1] / i[1], t }, dot: function(t, e) { return t[0] * e[0] + t[1] * e[1] }, scale: gt, normalize: mt, distance: vt, dist: yt, distanceSquare: xt, distSquare: _t, negate: function(t, e) { return t[0] = -e[0], t[1] = -e[1], t }, lerp: wt, applyTransform: bt, min: St, max: Mt }); function Tt() { this.on("mousedown", this._dragStart, this), this.on("mousemove", this._drag, this), this.on("mouseup", this._dragEnd, this) } function At(t, e) { return { target: t, topTarget: e && e.topTarget } } Tt.prototype = { constructor: Tt, _dragStart: function(t) { for (var e = t.target; e && !e.draggable; ) e = e.parent; e && ((this._draggingTarget = e).dragging = !0, this._x = t.offsetX, this._y = t.offsetY, this.dispatchToElement(At(e, t), "dragstart", t.event)) }, _drag: function(t) { var e = this._draggingTarget; if (e) { var i = t.offsetX , n = t.offsetY , o = i - this._x , a = n - this._y; this._x = i, this._y = n, e.drift(o, a, t), this.dispatchToElement(At(e, t), "drag", t.event); var r = this.findHover(i, n, e).target , s = this._dropTarget; e !== (this._dropTarget = r) && (s && r !== s && this.dispatchToElement(At(s, t), "dragleave", t.event), r && r !== s && this.dispatchToElement(At(r, t), "dragenter", t.event)) } }, _dragEnd: function(t) { var e = this._draggingTarget; e && (e.dragging = !1), this.dispatchToElement(At(e, t), "dragend", t.event), this._dropTarget && this.dispatchToElement(At(this._dropTarget, t), "drop", t.event), this._draggingTarget = null, this._dropTarget = null } }; var Dt = Array.prototype.slice , Ct = function(t) { this._$handlers = {}, this._$eventProcessor = t }; function Lt(t, e, i, n, o, a) { var r = t._$handlers; if ("function" == typeof i && (o = n, n = i, i = null), !n || !e) return t; i = function(t, e) { var i = t._$eventProcessor; return null != e && i && i.normalizeQuery && (e = i.normalizeQuery(e)), e }(t, i), r[e] || (r[e] = []); for (var s = 0; s < r[e].length; s++) if (r[e][s].h === n) return t; var l = { h: n, one: a, query: i, ctx: o || t, callAtLast: n.zrEventfulCallAtLast } , u = r[e].length - 1 , h = r[e][u]; return h && h.callAtLast ? r[e].splice(u, 0, l) : r[e].push(l), t } Ct.prototype = { constructor: Ct, one: function(t, e, i, n) { return Lt(this, t, e, i, n, !0) }, on: function(t, e, i, n) { return Lt(this, t, e, i, n, !1) }, isSilent: function(t) { var e = this._$handlers; return !e[t] || !e[t].length }, off: function(t, e) { var i = this._$handlers; if (!t) return this._$handlers = {}, this; if (e) { if (i[t]) { for (var n = [], o = 0, a = i[t].length; o < a; o++) i[t][o].h !== e && n.push(i[t][o]); i[t] = n } i[t] && 0 === i[t].length && delete i[t] } else delete i[t]; return this }, trigger: function(t) { var e = this._$handlers[t] , i = this._$eventProcessor; if (e) { var n = arguments , o = n.length; 3 < o && (n = Dt.call(n, 1)); for (var a = e.length, r = 0; r < a; ) { var s = e[r]; if (i && i.filter && null != s.query && !i.filter(t, s.query)) r++; else { switch (o) { case 1: s.h.call(s.ctx); break; case 2: s.h.call(s.ctx, n[1]); break; case 3: s.h.call(s.ctx, n[1], n[2]); break; default: s.h.apply(s.ctx, n) } s.one ? (e.splice(r, 1), a--) : r++ } } } return i && i.afterTrigger && i.afterTrigger(t), this }, triggerWithContext: function(t) { var e = this._$handlers[t] , i = this._$eventProcessor; if (e) { var n = arguments , o = n.length; 4 < o && (n = Dt.call(n, 1, n.length - 1)); for (var a = n[n.length - 1], r = e.length, s = 0; s < r; ) { var l = e[s]; if (i && i.filter && null != l.query && !i.filter(t, l.query)) s++; else { switch (o) { case 1: l.h.call(a); break; case 2: l.h.call(a, n[1]); break; case 3: l.h.call(a, n[1], n[2]); break; default: l.h.apply(a, n) } l.one ? (e.splice(s, 1), r--) : s++ } } } return i && i.afterTrigger && i.afterTrigger(t), this } }; var kt = Math.log(2); function Pt(t, e, i, n, o, a) { var r = n + "-" + o , s = t.length; if (a.hasOwnProperty(r)) return a[r]; if (1 === e) { var l = Math.round(Math.log((1 << s) - 1 & ~o) / kt); return t[i][l] } for (var u = n | 1 << i, h = i + 1; n & 1 << h; ) h++; for (var c = 0, d = 0, f = 0; d < s; d++) { var p = 1 << d; p & o || (c += (f % 2 ? -1 : 1) * t[i][d] * Pt(t, e - 1, h, u, o | p, a), f++) } return a[r] = c } function Nt(t, e) { var i = [[t[0], t[1], 1, 0, 0, 0, -e[0] * t[0], -e[0] * t[1]], [0, 0, 0, t[0], t[1], 1, -e[1] * t[0], -e[1] * t[1]], [t[2], t[3], 1, 0, 0, 0, -e[2] * t[2], -e[2] * t[3]], [0, 0, 0, t[2], t[3], 1, -e[3] * t[2], -e[3] * t[3]], [t[4], t[5], 1, 0, 0, 0, -e[4] * t[4], -e[4] * t[5]], [0, 0, 0, t[4], t[5], 1, -e[5] * t[4], -e[5] * t[5]], [t[6], t[7], 1, 0, 0, 0, -e[6] * t[6], -e[6] * t[7]], [0, 0, 0, t[6], t[7], 1, -e[7] * t[6], -e[7] * t[7]]] , n = {} , o = Pt(i, 8, 0, 0, 0, n); if (0 !== o) { for (var a = [], r = 0; r < 8; r++) for (var s = 0; s < 8; s++) null == a[s] && (a[s] = 0), a[s] += ((r + s) % 2 ? -1 : 1) * Pt(i, 7, 0 === r ? 1 : 0, 1 << r, 1 << s, n) / o * e[r]; return function(t, e, i) { var n = e * a[6] + i * a[7] + 1; t[0] = (e * a[0] + i * a[1] + a[2]) / n, t[1] = (e * a[3] + i * a[4] + a[5]) / n } } } var Ot = "___zrEVENTSAVED" , Et = []; function Rt(t, e, i, n, o) { if (e.getBoundingClientRect && v.domSupported && !zt(e)) { var a = e[Ot] || (e[Ot] = {}) , r = function(t, e, i) { for (var n = i ? "invTrans" : "trans", o = e[n], a = e.srcCoords, r = !0, s = [], l = [], u = 0; u < 4; u++) { var h = t[u].getBoundingClientRect() , c = 2 * u , d = h.left , f = h.top; s.push(d, f), r = r && a && d === a[c] && f === a[1 + c], l.push(t[u].offsetLeft, t[u].offsetTop) } return r && o ? o : (e.srcCoords = s, e[n] = i ? Nt(l, s) : Nt(s, l)) }(function(t, e) { var i = e.markers; if (i) return i; i = e.markers = []; for (var n = ["left", "right"], o = ["top", "bottom"], a = 0; a < 4; a++) { var r = document.createElement("div") , s = r.style , l = a % 2 , u = (a >> 1) % 2; s.cssText = ["position: absolute", "visibility: hidden", "padding: 0", "margin: 0", "border-width: 0", "user-select: none", "width:0", "height:0", n[l] + ":0", o[u] + ":0", n[1 - l] + ":auto", o[1 - u] + ":auto", ""].join("!important;"), t.appendChild(r), i.push(r) } return i }(e, a), a, o); if (r) return r(t, i, n), !0 } return !1 } function zt(t) { return "CANVAS" === t.nodeName.toUpperCase() } var Bt = "undefined" != typeof window && !!window.addEventListener , Vt = /^(?:mouse|pointer|contextmenu|drag|drop)|click/ , Gt = []; function Ft(t, e, i, n) { return i = i || {}, n || !v.canvasSupported ? Wt(t, e, i) : v.browser.firefox && null != e.layerX && e.layerX !== e.offsetX ? (i.zrX = e.layerX, i.zrY = e.layerY) : null != e.offsetX ? (i.zrX = e.offsetX, i.zrY = e.offsetY) : Wt(t, e, i), i } function Wt(t, e, i) { if (v.domSupported && t.getBoundingClientRect) { var n = e.clientX , o = e.clientY; if (zt(t)) { var a = t.getBoundingClientRect(); return i.zrX = n - a.left, void (i.zrY = o - a.top) } if (Rt(Gt, t, n, o)) return i.zrX = Gt[0], void (i.zrY = Gt[1]) } i.zrX = i.zrY = 0 } function Ht(t) { return t || window.event } function Zt(t, e, i) { if (null != (e = Ht(e)).zrX) return e; var n = e.type; if (n && 0 <= n.indexOf("touch")) { var o = "touchend" !== n ? e.targetTouches[0] : e.changedTouches[0]; o && Ft(t, o, e, i) } else Ft(t, e, e, i), e.zrDelta = e.wheelDelta ? e.wheelDelta / 120 : -(e.detail || 0) / 3; var a = e.button; return null == e.which && void 0 !== a && Vt.test(e.type) && (e.which = 1 & a ? 1 : 2 & a ? 3 : 4 & a ? 2 : 0), e } function Ut(t, e, i, n) { Bt ? t.addEventListener(e, i, n) : t.attachEvent("on" + e, i) } var Xt = Bt ? function(t) { t.preventDefault(), t.stopPropagation(), t.cancelBubble = !0 } : function(t) { t.returnValue = !1, t.cancelBubble = !0 } ; function Yt(t) { return 2 === t.which || 3 === t.which } function jt() { this._track = [] } function qt(t) { var e = t[1][0] - t[0][0] , i = t[1][1] - t[0][1]; return Math.sqrt(e * e + i * i) } jt.prototype = { constructor: jt, recognize: function(t, e, i) { return this._doTrack(t, e, i), this._recognize(t) }, clear: function() { return this._track.length = 0, this }, _doTrack: function(t, e, i) { var n = t.touches; if (n) { for (var o = { points: [], touches: [], target: e, event: t }, a = 0, r = n.length; a < r; a++) { var s = n[a] , l = Ft(i, s, {}); o.points.push([l.zrX, l.zrY]), o.touches.push(s) } this._track.push(o) } }, _recognize: function(t) { for (var e in Kt) if (Kt.hasOwnProperty(e)) { var i = Kt[e](this._track, t); if (i) return i } } }; var Kt = { pinch: function(t, e) { var i = t.length; if (i) { var n = (t[i - 1] || {}).points , o = (t[i - 2] || {}).points || n; if (o && 1 < o.length && n && 1 < n.length) { var a = qt(n) / qt(o); isFinite(a) || (a = 1), e.pinchScale = a; var r = function(t) { return [(t[0][0] + t[1][0]) / 2, (t[0][1] + t[1][1]) / 2] }(n); return e.pinchX = r[0], e.pinchY = r[1], { type: "pinch", target: t[0].target, event: e } } } } } , $t = "silent"; function Jt() { Xt(this.event) } function Qt() {} Qt.prototype.dispose = function() {} ; function te(t, e, i, n) { Ct.call(this), this.storage = t, this.painter = e, this.painterRoot = n, i = i || new Qt, this.proxy = null, this._hovered = {}, this._lastTouchMoment, this._lastX, this._lastY, this._gestureMgr, Tt.call(this), this.setHandlerProxy(i) } var ee = ["click", "dblclick", "mousewheel", "mouseout", "mouseup", "mousedown", "mousemove", "contextmenu"]; function ie(t, e, i) { if (t[t.rectHover ? "rectContain" : "contain"](e, i)) { for (var n, o = t; o; ) { if (o.clipPath && !o.clipPath.contain(e, i)) return !1; o.silent && (n = !0), o = o.parent } return !n || $t } return !1 } function ne(t, e, i) { var n = t.painter; return e < 0 || e > n.getWidth() || i < 0 || i > n.getHeight() } te.prototype = { constructor: te, setHandlerProxy: function(e) { this.proxy && this.proxy.dispose(), e && (E(ee, function(t) { e.on && e.on(t, this[t], this) }, this), e.handler = this), this.proxy = e }, mousemove: function(t) { var e = t.zrX , i = t.zrY , n = ne(this, e, i) , o = this._hovered , a = o.target; a && !a.__zr && (a = (o = this.findHover(o.x, o.y)).target); var r = this._hovered = n ? { x: e, y: i } : this.findHover(e, i) , s = r.target , l = this.proxy; l.setCursor && l.setCursor(s ? s.cursor : "default"), a && s !== a && this.dispatchToElement(o, "mouseout", t), this.dispatchToElement(r, "mousemove", t), s && s !== a && this.dispatchToElement(r, "mouseover", t) }, mouseout: function(t) { var e = t.zrEventControl , i = t.zrIsToLocalDOM; "only_globalout" !== e && this.dispatchToElement(this._hovered, "mouseout", t), "no_globalout" !== e && (i || this.trigger("globalout", { type: "globalout", event: t })) }, resize: function(t) { this._hovered = {} }, dispatch: function(t, e) { var i = this[t]; i && i.call(this, e) }, dispose: function() { this.proxy.dispose(), this.storage = this.proxy = this.painter = null }, setCursorStyle: function(t) { var e = this.proxy; e.setCursor && e.setCursor(t) }, dispatchToElement: function(t, e, i) { var n = (t = t || {}).target; if (!n || !n.silent) { for (var o = "on" + e, a = function(t, e, i) { return { type: t, event: i, target: e.target, topTarget: e.topTarget, cancelBubble: !1, offsetX: i.zrX, offsetY: i.zrY, gestureEvent: i.gestureEvent, pinchX: i.pinchX, pinchY: i.pinchY, pinchScale: i.pinchScale, wheelDelta: i.zrDelta, zrByTouch: i.zrByTouch, which: i.which, stop: Jt } }(e, t, i); n && (n[o] && (a.cancelBubble = n[o].call(n, a)), n.trigger(e, a), n = n.parent, !a.cancelBubble); ) ; a.cancelBubble || (this.trigger(e, a), this.painter && this.painter.eachOtherLayer(function(t) { "function" == typeof t[o] && t[o].call(t, a), t.trigger && t.trigger(e, a) })) } }, findHover: function(t, e, i) { for (var n = this.storage.getDisplayList(), o = { x: t, y: e }, a = n.length - 1; 0 <= a; a--) { var r; if (n[a] !== i && !n[a].ignore && (r = ie(n[a], t, e)) && (o.topTarget || (o.topTarget = n[a]), r !== $t)) { o.target = n[a]; break } } return o }, processGesture: function(t, e) { this._gestureMgr || (this._gestureMgr = new jt); var i = this._gestureMgr; "start" === e && i.clear(); var n = i.recognize(t, this.findHover(t.zrX, t.zrY, null).target, this.proxy.dom); if ("end" === e && i.clear(), n) { var o = n.type; t.gestureEvent = o, this.dispatchToElement({ target: n.target }, o, n.event) } } }, E(["click", "mousedown", "mouseup", "mousewheel", "dblclick", "contextmenu"], function(r) { te.prototype[r] = function(t) { var e, i, n = t.zrX, o = t.zrY, a = ne(this, n, o); if ("mouseup" === r && a || (i = (e = this.findHover(n, o)).target), "mousedown" === r) this._downEl = i, this._downPoint = [t.zrX, t.zrY], this._upEl = i; else if ("mouseup" === r) this._upEl = i; else if ("click" === r) { if (this._downEl !== this._upEl || !this._downPoint || 4 < yt(this._downPoint, [t.zrX, t.zrY])) return; this._downPoint = null } this.dispatchToElement(e, r, t) } }), b(te, Ct), b(te, Tt); var oe = "undefined" == typeof Float32Array ? Array : Float32Array; function ae() { var t = new oe(6); return re(t), t } function re(t) { return t[0] = 1, t[1] = 0, t[2] = 0, t[3] = 1, t[4] = 0, t[5] = 0, t } function se(t, e) { return t[0] = e[0], t[1] = e[1], t[2] = e[2], t[3] = e[3], t[4] = e[4], t[5] = e[5], t } function le(t, e, i) { var n = e[0] * i[0] + e[2] * i[1] , o = e[1] * i[0] + e[3] * i[1] , a = e[0] * i[2] + e[2] * i[3] , r = e[1] * i[2] + e[3] * i[3] , s = e[0] * i[4] + e[2] * i[5] + e[4] , l = e[1] * i[4] + e[3] * i[5] + e[5]; return t[0] = n, t[1] = o, t[2] = a, t[3] = r, t[4] = s, t[5] = l, t } function ue(t, e, i) { return t[0] = e[0], t[1] = e[1], t[2] = e[2], t[3] = e[3], t[4] = e[4] + i[0], t[5] = e[5] + i[1], t } function he(t, e, i) { var n = e[0] , o = e[2] , a = e[4] , r = e[1] , s = e[3] , l = e[5] , u = Math.sin(i) , h = Math.cos(i); return t[0] = n * h + r * u, t[1] = -n * u + r * h, t[2] = o * h + s * u, t[3] = -o * u + h * s, t[4] = h * a + u * l, t[5] = h * l - u * a, t } function ce(t, e, i) { var n = i[0] , o = i[1]; return t[0] = e[0] * n, t[1] = e[1] * o, t[2] = e[2] * n, t[3] = e[3] * o, t[4] = e[4] * n, t[5] = e[5] * o, t } function de(t, e) { var i = e[0] , n = e[2] , o = e[4] , a = e[1] , r = e[3] , s = e[5] , l = i * r - a * n; return l ? (l = 1 / l, t[0] = r * l, t[1] = -a * l, t[2] = -n * l, t[3] = i * l, t[4] = (n * s - r * o) * l, t[5] = (a * o - i * s) * l, t) : null } function fe(t) { var e = ae(); return se(e, t), e } var pe = (Object.freeze || Object)({ create: ae, identity: re, copy: se, mul: le, translate: ue, rotate: he, scale: ce, invert: de, clone: fe }) , ge = re; function me(t) { return 5e-5 < t || t < -5e-5 } var ve = function(t) { (t = t || {}).position || (this.position = [0, 0]), null == t.rotation && (this.rotation = 0), t.scale || (this.scale = [1, 1]), this.origin = this.origin || null } , ye = ve.prototype; ye.transform = null, ye.needLocalTransform = function() { return me(this.rotation) || me(this.position[0]) || me(this.position[1]) || me(this.scale[0] - 1) || me(this.scale[1] - 1) } ; var xe = []; ye.updateTransform = function() { var t = this.parent , e = t && t.transform , i = this.needLocalTransform() , n = this.transform; if (i || e) { n = n || ae(), i ? this.getLocalTransform(n) : ge(n), e && (i ? le(n, t.transform, n) : se(n, t.transform)), this.transform = n; var o = this.globalScaleRatio; if (null != o && 1 !== o) { this.getGlobalScale(xe); var a = xe[0] < 0 ? -1 : 1 , r = xe[1] < 0 ? -1 : 1 , s = ((xe[0] - a) * o + a) / xe[0] || 0 , l = ((xe[1] - r) * o + r) / xe[1] || 0; n[0] *= s, n[1] *= s, n[2] *= l, n[3] *= l } this.invTransform = this.invTransform || ae(), de(this.invTransform, n) } else n && ge(n) } , ye.getLocalTransform = function(t) { return ve.getLocalTransform(this, t) } , ye.setTransform = function(t) { var e = this.transform , i = t.dpr || 1; e ? t.setTransform(i * e[0], i * e[1], i * e[2], i * e[3], i * e[4], i * e[5]) : t.setTransform(i, 0, 0, i, 0, 0) } , ye.restoreTransform = function(t) { var e = t.dpr || 1; t.setTransform(e, 0, 0, e, 0, 0) } ; var _e = [] , we = ae(); ye.setLocalTransform = function(t) { if (t) { var e = t[0] * t[0] + t[1] * t[1] , i = t[2] * t[2] + t[3] * t[3] , n = this.position , o = this.scale; me(e - 1) && (e = Math.sqrt(e)), me(i - 1) && (i = Math.sqrt(i)), t[0] < 0 && (e = -e), t[3] < 0 && (i = -i), n[0] = t[4], n[1] = t[5], o[0] = e, o[1] = i, this.rotation = Math.atan2(-t[1] / i, t[0] / e) } } , ye.decomposeTransform = function() { if (this.transform) { var t = this.parent , e = this.transform; t && t.transform && (le(_e, t.invTransform, e), e = _e); var i = this.origin; i && (i[0] || i[1]) && (we[4] = i[0], we[5] = i[1], le(_e, e, we), _e[4] -= i[0], _e[5] -= i[1], e = _e), this.setLocalTransform(e) } } , ye.getGlobalScale = function(t) { var e = this.transform; return t = t || [], e ? (t[0] = Math.sqrt(e[0] * e[0] + e[1] * e[1]), t[1] = Math.sqrt(e[2] * e[2] + e[3] * e[3]), e[0] < 0 && (t[0] = -t[0]), e[3] < 0 && (t[1] = -t[1])) : (t[0] = 1, t[1] = 1), t } , ye.transformCoordToLocal = function(t, e) { var i = [t, e] , n = this.invTransform; return n && bt(i, i, n), i } , ye.transformCoordToGlobal = function(t, e) { var i = [t, e] , n = this.transform; return n && bt(i, i, n), i } , ve.getLocalTransform = function(t, e) { ge(e = e || []); var i = t.origin , n = t.scale || [1, 1] , o = t.rotation || 0 , a = t.position || [0, 0]; return i && (e[4] -= i[0], e[5] -= i[1]), ce(e, e, n), o && he(e, e, o), i && (e[4] += i[0], e[5] += i[1]), e[4] += a[0], e[5] += a[1], e } ; var be = { linear: function(t) { return t }, quadraticIn: function(t) { return t * t }, quadraticOut: function(t) { return t * (2 - t) }, quadraticInOut: function(t) { return (t *= 2) < 1 ? .5 * t * t : -.5 * (--t * (t - 2) - 1) }, cubicIn: function(t) { return t * t * t }, cubicOut: function(t) { return --t * t * t + 1 }, cubicInOut: function(t) { return (t *= 2) < 1 ? .5 * t * t * t : .5 * ((t -= 2) * t * t + 2) }, quarticIn: function(t) { return t * t * t * t }, quarticOut: function(t) { return 1 - --t * t * t * t }, quarticInOut: function(t) { return (t *= 2) < 1 ? .5 * t * t * t * t : -.5 * ((t -= 2) * t * t * t - 2) }, quinticIn: function(t) { return t * t * t * t * t }, quinticOut: function(t) { return --t * t * t * t * t + 1 }, quinticInOut: function(t) { return (t *= 2) < 1 ? .5 * t * t * t * t * t : .5 * ((t -= 2) * t * t * t * t + 2) }, sinusoidalIn: function(t) { return 1 - Math.cos(t * Math.PI / 2) }, sinusoidalOut: function(t) { return Math.sin(t * Math.PI / 2) }, sinusoidalInOut: function(t) { return .5 * (1 - Math.cos(Math.PI * t)) }, exponentialIn: function(t) { return 0 === t ? 0 : Math.pow(1024, t - 1) }, exponentialOut: function(t) { return 1 === t ? 1 : 1 - Math.pow(2, -10 * t) }, exponentialInOut: function(t) { return 0 === t ? 0 : 1 === t ? 1 : (t *= 2) < 1 ? .5 * Math.pow(1024, t - 1) : .5 * (2 - Math.pow(2, -10 * (t - 1))) }, circularIn: function(t) { return 1 - Math.sqrt(1 - t * t) }, circularOut: function(t) { return Math.sqrt(1 - --t * t) }, circularInOut: function(t) { return (t *= 2) < 1 ? -.5 * (Math.sqrt(1 - t * t) - 1) : .5 * (Math.sqrt(1 - (t -= 2) * t) + 1) }, elasticIn: function(t) { var e, i = .1; return 0 === t ? 0 : 1 === t ? 1 : (e = !i || i < 1 ? (i = 1, .1) : .4 * Math.asin(1 / i) / (2 * Math.PI), -i * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - e) * (2 * Math.PI) / .4)) }, elasticOut: function(t) { var e, i = .1; return 0 === t ? 0 : 1 === t ? 1 : (e = !i || i < 1 ? (i = 1, .1) : .4 * Math.asin(1 / i) / (2 * Math.PI), i * Math.pow(2, -10 * t) * Math.sin((t - e) * (2 * Math.PI) / .4) + 1) }, elasticInOut: function(t) { var e, i = .1; return 0 === t ? 0 : 1 === t ? 1 : (e = !i || i < 1 ? (i = 1, .1) : .4 * Math.asin(1 / i) / (2 * Math.PI), (t *= 2) < 1 ? i * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - e) * (2 * Math.PI) / .4) * -.5 : i * Math.pow(2, -10 * (t -= 1)) * Math.sin((t - e) * (2 * Math.PI) / .4) * .5 + 1) }, backIn: function(t) { return t * t * (2.70158 * t - 1.70158) }, backOut: function(t) { return --t * t * (2.70158 * t + 1.70158) + 1 }, backInOut: function(t) { var e = 2.5949095; return (t *= 2) < 1 ? t * t * ((1 + e) * t - e) * .5 : .5 * ((t -= 2) * t * ((1 + e) * t + e) + 2) }, bounceIn: function(t) { return 1 - be.bounceOut(1 - t) }, bounceOut: function(t) { return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375 }, bounceInOut: function(t) { return t < .5 ? .5 * be.bounceIn(2 * t) : .5 * be.bounceOut(2 * t - 1) + .5 } }; function Se(t) { this._target = t.target, this._life = t.life || 1e3, this._delay = t.delay || 0, this._initialized = !1, this.loop = null != t.loop && t.loop, this.gap = t.gap || 0, this.easing = t.easing || "Linear", this.onframe = t.onframe, this.ondestroy = t.ondestroy, this.onrestart = t.onrestart, this._pausedTime = 0, this._paused = !1 } Se.prototype = { constructor: Se, step: function(t, e) { if (this._initialized || (this._startTime = t + this._delay, this._initialized = !0), this._paused) this._pausedTime += e; else { var i = (t - this._startTime - this._pausedTime) / this._life; if (!(i < 0)) { i = Math.min(i, 1); var n = this.easing , o = "string" == typeof n ? be[n] : n , a = "function" == typeof o ? o(i) : i; return this.fire("frame", a), 1 === i ? this.loop ? (this.restart(t), "restart") : (this._needsRemove = !0, "destroy") : null } } }, restart: function(t) { var e = (t - this._startTime - this._pausedTime) % this._life; this._startTime = t - e + this.gap, this._pausedTime = 0, this._needsRemove = !1 }, fire: function(t, e) { this[t = "on" + t] && this[t](this._target, e) }, pause: function() { this._paused = !0 }, resume: function() { this._paused = !1 } }; function Me() { this.head = null, this.tail = null, this._len = 0 } var Ie = Me.prototype; Ie.insert = function(t) { var e = new Ae(t); return this.insertEntry(e), e } , Ie.insertEntry = function(t) { this.head ? ((this.tail.next = t).prev = this.tail, t.next = null, this.tail = t) : this.head = this.tail = t, this._len++ } , Ie.remove = function(t) { var e = t.prev , i = t.next; e ? e.next = i : this.head = i, i ? i.prev = e : this.tail = e, t.next = t.prev = null, this._len-- } , Ie.len = function() { return this._len } , Ie.clear = function() { this.head = this.tail = null, this._len = 0 } ; function Te(t) { this._list = new Me, this._map = {}, this._maxSize = t || 10, this._lastRemovedEntry = null } var Ae = function(t) { this.value = t, this.next, this.prev } , De = Te.prototype; De.put = function(t, e) { var i = this._list , n = this._map , o = null; if (null == n[t]) { var a = i.len() , r = this._lastRemovedEntry; if (a >= this._maxSize && 0 < a) { var s = i.head; i.remove(s), delete n[s.key], o = s.value, this._lastRemovedEntry = s } r ? r.value = e : r = new Ae(e), r.key = t, i.insertEntry(r), n[t] = r } return o } , De.get = function(t) { var e = this._map[t] , i = this._list; if (null != e) return e !== i.tail && (i.remove(e), i.insertEntry(e)), e.value } , De.clear = function() { this._list.clear(), this._map = {} } ; var Ce = { transparent: [0, 0, 0, 0], aliceblue: [240, 248, 255, 1], antiquewhite: [250, 235, 215, 1], aqua: [0, 255, 255, 1], aquamarine: [127, 255, 212, 1], azure: [240, 255, 255, 1], beige: [245, 245, 220, 1], bisque: [255, 228, 196, 1], black: [0, 0, 0, 1], blanchedalmond: [255, 235, 205, 1], blue: [0, 0, 255, 1], blueviolet: [138, 43, 226, 1], brown: [165, 42, 42, 1], burlywood: [222, 184, 135, 1], cadetblue: [95, 158, 160, 1], chartreuse: [127, 255, 0, 1], chocolate: [210, 105, 30, 1], coral: [255, 127, 80, 1], cornflowerblue: [100, 149, 237, 1], cornsilk: [255, 248, 220, 1], crimson: [220, 20, 60, 1], cyan: [0, 255, 255, 1], darkblue: [0, 0, 139, 1], darkcyan: [0, 139, 139, 1], darkgoldenrod: [184, 134, 11, 1], darkgray: [169, 169, 169, 1], darkgreen: [0, 100, 0, 1], darkgrey: [169, 169, 169, 1], darkkhaki: [189, 183, 107, 1], darkmagenta: [139, 0, 139, 1], darkolivegreen: [85, 107, 47, 1], darkorange: [255, 140, 0, 1], darkorchid: [153, 50, 204, 1], darkred: [139, 0, 0, 1], darksalmon: [233, 150, 122, 1], darkseagreen: [143, 188, 143, 1], darkslateblue: [72, 61, 139, 1], darkslategray: [47, 79, 79, 1], darkslategrey: [47, 79, 79, 1], darkturquoise: [0, 206, 209, 1], darkviolet: [148, 0, 211, 1], deeppink: [255, 20, 147, 1], deepskyblue: [0, 191, 255, 1], dimgray: [105, 105, 105, 1], dimgrey: [105, 105, 105, 1], dodgerblue: [30, 144, 255, 1], firebrick: [178, 34, 34, 1], floralwhite: [255, 250, 240, 1], forestgreen: [34, 139, 34, 1], fuchsia: [255, 0, 255, 1], gainsboro: [220, 220, 220, 1], ghostwhite: [248, 248, 255, 1], gold: [255, 215, 0, 1], goldenrod: [218, 165, 32, 1], gray: [128, 128, 128, 1], green: [0, 128, 0, 1], greenyellow: [173, 255, 47, 1], grey: [128, 128, 128, 1], honeydew: [240, 255, 240, 1], hotpink: [255, 105, 180, 1], indianred: [205, 92, 92, 1], indigo: [75, 0, 130, 1], ivory: [255, 255, 240, 1], khaki: [240, 230, 140, 1], lavender: [230, 230, 250, 1], lavenderblush: [255, 240, 245, 1], lawngreen: [124, 252, 0, 1], lemonchiffon: [255, 250, 205, 1], lightblue: [173, 216, 230, 1], lightcoral: [240, 128, 128, 1], lightcyan: [224, 255, 255, 1], lightgoldenrodyellow: [250, 250, 210, 1], lightgray: [211, 211, 211, 1], lightgreen: [144, 238, 144, 1], lightgrey: [211, 211, 211, 1], lightpink: [255, 182, 193, 1], lightsalmon: [255, 160, 122, 1], lightseagreen: [32, 178, 170, 1], lightskyblue: [135, 206, 250, 1], lightslategray: [119, 136, 153, 1], lightslategrey: [119, 136, 153, 1], lightsteelblue: [176, 196, 222, 1], lightyellow: [255, 255, 224, 1], lime: [0, 255, 0, 1], limegreen: [50, 205, 50, 1], linen: [250, 240, 230, 1], magenta: [255, 0, 255, 1], maroon: [128, 0, 0, 1], mediumaquamarine: [102, 205, 170, 1], mediumblue: [0, 0, 205, 1], mediumorchid: [186, 85, 211, 1], mediumpurple: [147, 112, 219, 1], mediumseagreen: [60, 179, 113, 1], mediumslateblue: [123, 104, 238, 1], mediumspringgreen: [0, 250, 154, 1], mediumturquoise: [72, 209, 204, 1], mediumvioletred: [199, 21, 133, 1], midnightblue: [25, 25, 112, 1], mintcream: [245, 255, 250, 1], mistyrose: [255, 228, 225, 1], moccasin: [255, 228, 181, 1], navajowhite: [255, 222, 173, 1], navy: [0, 0, 128, 1], oldlace: [253, 245, 230, 1], olive: [128, 128, 0, 1], olivedrab: [107, 142, 35, 1], orange: [255, 165, 0, 1], orangered: [255, 69, 0, 1], orchid: [218, 112, 214, 1], palegoldenrod: [238, 232, 170, 1], palegreen: [152, 251, 152, 1], paleturquoise: [175, 238, 238, 1], palevioletred: [219, 112, 147, 1], papayawhip: [255, 239, 213, 1], peachpuff: [255, 218, 185, 1], peru: [205, 133, 63, 1], pink: [255, 192, 203, 1], plum: [221, 160, 221, 1], powderblue: [176, 224, 230, 1], purple: [128, 0, 128, 1], red: [255, 0, 0, 1], rosybrown: [188, 143, 143, 1], royalblue: [65, 105, 225, 1], saddlebrown: [139, 69, 19, 1], salmon: [250, 128, 114, 1], sandybrown: [244, 164, 96, 1], seagreen: [46, 139, 87, 1], seashell: [255, 245, 238, 1], sienna: [160, 82, 45, 1], silver: [192, 192, 192, 1], skyblue: [135, 206, 235, 1], slateblue: [106, 90, 205, 1], slategray: [112, 128, 144, 1], slategrey: [112, 128, 144, 1], snow: [255, 250, 250, 1], springgreen: [0, 255, 127, 1], steelblue: [70, 130, 180, 1], tan: [210, 180, 140, 1], teal: [0, 128, 128, 1], thistle: [216, 191, 216, 1], tomato: [255, 99, 71, 1], turquoise: [64, 224, 208, 1], violet: [238, 130, 238, 1], wheat: [245, 222, 179, 1], white: [255, 255, 255, 1], whitesmoke: [245, 245, 245, 1], yellow: [255, 255, 0, 1], yellowgreen: [154, 205, 50, 1] }; function Le(t) { return (t = Math.round(t)) < 0 ? 0 : 255 < t ? 255 : t } function ke(t) { return t < 0 ? 0 : 1 < t ? 1 : t } function Pe(t) { return t.length && "%" === t.charAt(t.length - 1) ? Le(parseFloat(t) / 100 * 255) : Le(parseInt(t, 10)) } function Ne(t) { return t.length && "%" === t.charAt(t.length - 1) ? ke(parseFloat(t) / 100) : ke(parseFloat(t)) } function Oe(t, e, i) { return i < 0 ? i += 1 : 1 < i && (i -= 1), 6 * i < 1 ? t + (e - t) * i * 6 : 2 * i < 1 ? e : 3 * i < 2 ? t + (e - t) * (2 / 3 - i) * 6 : t } function Ee(t, e, i) { return t + (e - t) * i } function Re(t, e, i, n, o) { return t[0] = e, t[1] = i, t[2] = n, t[3] = o, t } function ze(t, e) { return t[0] = e[0], t[1] = e[1], t[2] = e[2], t[3] = e[3], t } var Be = new Te(20) , Ve = null; function Ge(t, e) { Ve && ze(Ve, e), Ve = Be.put(t, Ve || e.slice()) } function Fe(t, e) { if (t) { e = e || []; var i = Be.get(t); if (i) return ze(e, i); var n, o = (t += "").replace(/ /g, "").toLowerCase(); if (o in Ce) return ze(e, Ce[o]), Ge(t, e), e; if ("#" === o.charAt(0)) return 4 === o.length ? 0 <= (n = parseInt(o.substr(1), 16)) && n <= 4095 ? (Re(e, (3840 & n) >> 4 | (3840 & n) >> 8, 240 & n | (240 & n) >> 4, 15 & n | (15 & n) << 4, 1), Ge(t, e), e) : void Re(e, 0, 0, 0, 1) : 7 === o.length ? 0 <= (n = parseInt(o.substr(1), 16)) && n <= 16777215 ? (Re(e, (16711680 & n) >> 16, (65280 & n) >> 8, 255 & n, 1), Ge(t, e), e) : void Re(e, 0, 0, 0, 1) : void 0; var a = o.indexOf("(") , r = o.indexOf(")"); if (-1 !== a && r + 1 === o.length) { var s = o.substr(0, a) , l = o.substr(a + 1, r - (a + 1)).split(",") , u = 1; switch (s) { case "rgba": if (4 !== l.length) return void Re(e, 0, 0, 0, 1); u = Ne(l.pop()); case "rgb": return 3 !== l.length ? void Re(e, 0, 0, 0, 1) : (Re(e, Pe(l[0]), Pe(l[1]), Pe(l[2]), u), Ge(t, e), e); case "hsla": return 4 !== l.length ? void Re(e, 0, 0, 0, 1) : (l[3] = Ne(l[3]), We(l, e), Ge(t, e), e); case "hsl": return 3 !== l.length ? void Re(e, 0, 0, 0, 1) : (We(l, e), Ge(t, e), e); default: return } } Re(e, 0, 0, 0, 1) } } function We(t, e) { var i = (parseFloat(t[0]) % 360 + 360) % 360 / 360 , n = Ne(t[1]) , o = Ne(t[2]) , a = o <= .5 ? o * (n + 1) : o + n - o * n , r = 2 * o - a; return Re(e = e || [], Le(255 * Oe(r, a, i + 1 / 3)), Le(255 * Oe(r, a, i)), Le(255 * Oe(r, a, i - 1 / 3)), 1), 4 === t.length && (e[3] = t[3]), e } function He(t, e) { var i = Fe(t); if (i) { for (var n = 0; n < 3; n++) i[n] = e < 0 ? i[n] * (1 - e) | 0 : (255 - i[n]) * e + i[n] | 0, 255 < i[n] ? i[n] = 255 : t[n] < 0 && (i[n] = 0); return $e(i, 4 === i.length ? "rgba" : "rgb") } } function Ze(t) { var e = Fe(t); if (e) return ((1 << 24) + (e[0] << 16) + (e[1] << 8) + +e[2]).toString(16).slice(1) } function Ue(t, e, i) { if (e && e.length && 0 <= t && t <= 1) { i = i || []; var n = t * (e.length - 1) , o = Math.floor(n) , a = Math.ceil(n) , r = e[o] , s = e[a] , l = n - o; return i[0] = Le(Ee(r[0], s[0], l)), i[1] = Le(Ee(r[1], s[1], l)), i[2] = Le(Ee(r[2], s[2], l)), i[3] = ke(Ee(r[3], s[3], l)), i } } var Xe = Ue; function Ye(t, e, i) { if (e && e.length && 0 <= t && t <= 1) { var n = t * (e.length - 1) , o = Math.floor(n) , a = Math.ceil(n) , r = Fe(e[o]) , s = Fe(e[a]) , l = n - o , u = $e([Le(Ee(r[0], s[0], l)), Le(Ee(r[1], s[1], l)), Le(Ee(r[2], s[2], l)), ke(Ee(r[3], s[3], l))], "rgba"); return i ? { color: u, leftIndex: o, rightIndex: a, value: n } : u } } var je = Ye; function qe(t, e, i, n) { if (t = Fe(t)) return t = function(t) { if (t) { var e, i, n = t[0] / 255, o = t[1] / 255, a = t[2] / 255, r = Math.min(n, o, a), s = Math.max(n, o, a), l = s - r, u = (s + r) / 2; if (0 == l) i = e = 0; else { i = u < .5 ? l / (s + r) : l / (2 - s - r); var h = ((s - n) / 6 + l / 2) / l , c = ((s - o) / 6 + l / 2) / l , d = ((s - a) / 6 + l / 2) / l; n === s ? e = d - c : o === s ? e = 1 / 3 + h - d : a === s && (e = 2 / 3 + c - h), e < 0 && (e += 1), 1 < e && (e -= 1) } var f = [360 * e, i, u]; return null != t[3] && f.push(t[3]), f } }(t), null != e && (t[0] = function(t) { return (t = Math.round(t)) < 0 ? 0 : 360 < t ? 360 : t }(e)), null != i && (t[1] = Ne(i)), null != n && (t[2] = Ne(n)), $e(We(t), "rgba") } function Ke(t, e) { if ((t = Fe(t)) && null != e) return t[3] = ke(e), $e(t, "rgba") } function $e(t, e) { if (t && t.length) { var i = t[0] + "," + t[1] + "," + t[2]; return "rgba" !== e && "hsva" !== e && "hsla" !== e || (i += "," + t[3]), e + "(" + i + ")" } } var Je = (Object.freeze || Object)({ parse: Fe, lift: He, toHex: Ze, fastLerp: Ue, fastMapToColor: Xe, lerp: Ye, mapToColor: je, modifyHSL: qe, modifyAlpha: Ke, stringify: $e }) , Qe = Array.prototype.slice; function ti(t, e) { return t[e] } function ei(t, e, i) { t[e] = i } function ii(t, e, i) { return (e - t) * i + t } function ni(t, e, i) { return .5 < i ? e : t } function oi(t, e, i, n, o) { var a = t.length; if (1 === o) for (var r = 0; r < a; r++) n[r] = ii(t[r], e[r], i); else { var s = a && t[0].length; for (r = 0; r < a; r++) for (var l = 0; l < s; l++) n[r][l] = ii(t[r][l], e[r][l], i) } } function ai(t, e, i) { var n = t.length , o = e.length; if (n !== o) if (o < n) t.length = o; else for (var a = n; a < o; a++) t.push(1 === i ? e[a] : Qe.call(e[a])); var r = t[0] && t[0].length; for (a = 0; a < t.length; a++) if (1 === i) isNaN(t[a]) && (t[a] = e[a]); else for (var s = 0; s < r; s++) isNaN(t[a][s]) && (t[a][s] = e[a][s]) } function ri(t, e, i) { if (t === e) return !0; var n = t.length; if (n !== e.length) return !1; if (1 === i) { for (var o = 0; o < n; o++) if (t[o] !== e[o]) return !1 } else { var a = t[0].length; for (o = 0; o < n; o++) for (var r = 0; r < a; r++) if (t[o][r] !== e[o][r]) return !1 } return !0 } function si(t, e, i, n, o, a, r, s, l) { var u = t.length; if (1 === l) for (var h = 0; h < u; h++) s[h] = li(t[h], e[h], i[h], n[h], o, a, r); else { var c = t[0].length; for (h = 0; h < u; h++) for (var d = 0; d < c; d++) s[h][d] = li(t[h][d], e[h][d], i[h][d], n[h][d], o, a, r) } } function li(t, e, i, n, o, a, r) { var s = .5 * (i - t) , l = .5 * (n - e); return (2 * (e - i) + s + l) * r + (-3 * (e - i) - 2 * s - l) * a + s * o + e } function ui(t) { if (N(t)) { var e = t.length; if (N(t[0])) { for (var i = [], n = 0; n < e; n++) i.push(Qe.call(t[n])); return i } return Qe.call(t) } return t } function hi(t) { return t[0] = Math.floor(t[0]), t[1] = Math.floor(t[1]), t[2] = Math.floor(t[2]), "rgba(" + t.join(",") + ")" } function ci(t, e, i, n, a, o) { var r = t._getter , s = t._setter , l = "spline" === e , u = n.length; if (u) { var h, c = N(n[0].value), d = !1, f = !1, p = c ? function(t) { var e = t[t.length - 1].value; return N(e && e[0]) ? 2 : 1 }(n) : 0; n.sort(function(t, e) { return t.time - e.time }), h = n[u - 1].time; for (var g = [], m = [], v = n[0].value, y = !0, x = 0; x < u; x++) { g.push(n[x].time / h); var _ = n[x].value; if (c && ri(_, v, p) || !c && _ === v || (y = !1), "string" == typeof (v = _)) { var w = Fe(_); w ? (_ = w, d = !0) : f = !0 } m.push(_) } if (o || !y) { var b = m[u - 1]; for (x = 0; x < u - 1; x++) c ? ai(m[x], b, p) : !isNaN(m[x]) || isNaN(b) || f || d || (m[x] = b); c && ai(r(t._target, a), b, p); var S, M, I, T, A, D = 0, C = 0; if (d) var L = [0, 0, 0, 0]; var k = new Se({ target: t._target, life: h, loop: t._loop, delay: t._delay, onframe: function(t, e) { var i; if (e < 0) i = 0; else if (e < C) { for (i = Math.min(D + 1, u - 1); 0 <= i && !(g[i] <= e); i--) ; i = Math.min(i, u - 2) } else { for (i = D; i < u && !(g[i] > e); i++) ; i = Math.min(i - 1, u - 2) } C = e; var n = g[(D = i) + 1] - g[i]; if (0 != n) if (S = (e - g[i]) / n, l) if (I = m[i], M = m[0 === i ? i : i - 1], T = m[u - 2 < i ? u - 1 : i + 1], A = m[u - 3 < i ? u - 1 : i + 2], c) si(M, I, T, A, S, S * S, S * S * S, r(t, a), p); else { if (d) o = si(M, I, T, A, S, S * S, S * S * S, L, 1), o = hi(L); else { if (f) return ni(I, T, S); o = li(M, I, T, A, S, S * S, S * S * S) } s(t, a, o) } else if (c) oi(m[i], m[i + 1], S, r(t, a), p); else { var o; if (d) oi(m[i], m[i + 1], S, L, 1), o = hi(L); else { if (f) return ni(m[i], m[i + 1], S); o = ii(m[i], m[i + 1], S) } s(t, a, o) } }, ondestroy: i }); return e && "spline" !== e && (k.easing = e), k } } } function di(t, e, i, n) { this._tracks = {}, this._target = t, this._loop = e || !1, this._getter = i || ti, this._setter = n || ei, this._clipCount = 0, this._delay = 0, this._doneList = [], this._onframeList = [], this._clipList = [] } di.prototype = { when: function(t, e) { var i = this._tracks; for (var n in e) if (e.hasOwnProperty(n)) { if (!i[n]) { i[n] = []; var o = this._getter(this._target, n); if (null == o) continue; 0 !== t && i[n].push({ time: 0, value: ui(o) }) } i[n].push({ time: t, value: e[n] }) } return this }, during: function(t) { return this._onframeList.push(t), this }, pause: function() { for (var t = 0; t < this._clipList.length; t++) this._clipList[t].pause(); this._paused = !0 }, resume: function() { for (var t = 0; t < this._clipList.length; t++) this._clipList[t].resume(); this._paused = !1 }, isPaused: function() { return !!this._paused }, _doneCallback: function() { this._tracks = {}, this._clipList.length = 0; for (var t = this._doneList, e = t.length, i = 0; i < e; i++) t[i].call(this) }, start: function(t, e) { function i() { --a || o._doneCallback() } var n, o = this, a = 0; for (var r in this._tracks) if (this._tracks.hasOwnProperty(r)) { var s = ci(this, t, i, this._tracks[r], r, e); s && (this._clipList.push(s), a++, this.animation && this.animation.addClip(s), n = s) } if (n) { var l = n.onframe; n.onframe = function(t, e) { l(t, e); for (var i = 0; i < o._onframeList.length; i++) o._onframeList[i](t, e) } } return a || this._doneCallback(), this }, stop: function(t) { for (var e = this._clipList, i = this.animation, n = 0; n < e.length; n++) { var o = e[n]; t && o.onframe(this._target, 1), i && i.removeClip(o) } e.length = 0 }, delay: function(t) { return this._delay = t, this }, done: function(t) { return t && this._doneList.push(t), this }, getClips: function() { return this._clipList } }; var fi = 1; "undefined" != typeof window && (fi = Math.max(window.devicePixelRatio || 1, 1)); var pi = fi , gi = function() {}; function mi() { this.animators = [] } var vi = gi; function yi(t, e, i, n, o, a, r, s) { R(n) ? (a = o, o = n, n = 0) : C(o) ? (a = o, o = "linear", n = 0) : C(n) ? (a = n, n = 0) : i = C(i) ? (a = i, 500) : i || 500, t.stopAnimation(), function t(e, i, n, o, a, r, s) { var l = {}; var u = 0; for (var h in o) o.hasOwnProperty(h) && (null != n[h] ? z(o[h]) && !N(o[h]) ? t(e, i ? i + "." + h : h, n[h], o[h], a, r, s) : (s ? (l[h] = n[h], xi(e, i, h, o[h])) : l[h] = o[h], u++) : null == o[h] || s || xi(e, i, h, o[h])); 0 < u && e.animate(i, !1).when(null == a ? 500 : a, l).delay(r || 0) }(t, "", t, e, i, n, s); var l = t.animators.slice() , u = l.length; function h() { --u || a && a() } u || a && a(); for (var c = 0; c < l.length; c++) l[c].done(h).start(o, r) } function xi(t, e, i, n) { if (e) { var o = {}; o[e] = {}, o[e][i] = n, t.attr(o) } else t.attr(i, n) } mi.prototype = { constructor: mi, animate: function(t, e) { var i, n = !1, o = this, a = this.__zr; if (t) { var r = t.split(".") , s = o; n = "shape" === r[0]; for (var l = 0, u = r.length; l < u; l++) s = s && s[r[l]]; s && (i = s) } else i = o; if (i) { var h = o.animators , c = new di(i,e); return c.during(function(t) { o.dirty(n) }).done(function() { h.splice(_(h, c), 1) }), h.push(c), a && a.animation.addAnimator(c), c } vi('Property "' + t + '" is not existed in element ' + o.id) }, stopAnimation: function(t) { for (var e = this.animators, i = e.length, n = 0; n < i; n++) e[n].stop(t); return e.length = 0, this }, animateTo: function(t, e, i, n, o, a) { yi(this, t, e, i, n, o, a) }, animateFrom: function(t, e, i, n, o, a) { yi(this, t, e, i, n, o, a, !0) } }; var _i = function(t) { ve.call(this, t), Ct.call(this, t), mi.call(this, t), this.id = t.id || n() }; _i.prototype = { type: "element", name: "", __zr: null, ignore: !1, clipPath: null, isGroup: !1, drift: function(t, e) { switch (this.draggable) { case "horizontal": e = 0; break; case "vertical": t = 0 } var i = this.transform; (i = i || (this.transform = [1, 0, 0, 1, 0, 0]))[4] += t, i[5] += e, this.decomposeTransform(), this.dirty(!1) }, beforeUpdate: function() {}, afterUpdate: function() {}, update: function() { this.updateTransform() }, traverse: function(t, e) {}, attrKV: function(t, e) { if ("position" === t || "scale" === t || "origin" === t) { if (e) { var i = this[t]; (i = i || (this[t] = []))[0] = e[0], i[1] = e[1] } } else this[t] = e }, hide: function() { this.ignore = !0, this.__zr && this.__zr.refresh() }, show: function() { this.ignore = !1, this.__zr && this.__zr.refresh() }, attr: function(t, e) { if ("string" == typeof t) this.attrKV(t, e); else if (z(t)) for (var i in t) t.hasOwnProperty(i) && this.attrKV(i, t[i]); return this.dirty(!1), this }, setClipPath: function(t) { var e = this.__zr; e && t.addSelfToZr(e), this.clipPath && this.clipPath !== t && this.removeClipPath(), (this.clipPath = t).__zr = e, (t.__clipTarget = this).dirty(!1) }, removeClipPath: function() { var t = this.clipPath; t && (t.__zr && t.removeSelfFromZr(t.__zr), t.__zr = null, t.__clipTarget = null, this.clipPath = null, this.dirty(!1)) }, addSelfToZr: function(t) { this.__zr = t; var e = this.animators; if (e) for (var i = 0; i < e.length; i++) t.animation.addAnimator(e[i]); this.clipPath && this.clipPath.addSelfToZr(t) }, removeSelfFromZr: function(t) { this.__zr = null; var e = this.animators; if (e) for (var i = 0; i < e.length; i++) t.animation.removeAnimator(e[i]); this.clipPath && this.clipPath.removeSelfFromZr(t) } }, b(_i, mi), b(_i, ve), b(_i, Ct); var wi, bi, Si, Mi, Ii = bt, Ti = Math.min, Ai = Math.max; function Di(t, e, i, n) { i < 0 && (t += i, i = -i), n < 0 && (e += n, n = -n), this.x = t, this.y = e, this.width = i, this.height = n } Di.prototype = { constructor: Di, union: function(t) { var e = Ti(t.x, this.x) , i = Ti(t.y, this.y); this.width = Ai(t.x + t.width, this.x + this.width) - e, this.height = Ai(t.y + t.height, this.y + this.height) - i, this.x = e, this.y = i }, applyTransform: (wi = [], bi = [], Si = [], Mi = [], function(t) { if (t) { wi[0] = Si[0] = this.x, wi[1] = Mi[1] = this.y, bi[0] = Mi[0] = this.x + this.width, bi[1] = Si[1] = this.y + this.height, Ii(wi, wi, t), Ii(bi, bi, t), Ii(Si, Si, t), Ii(Mi, Mi, t), this.x = Ti(wi[0], bi[0], Si[0], Mi[0]), this.y = Ti(wi[1], bi[1], Si[1], Mi[1]); var e = Ai(wi[0], bi[0], Si[0], Mi[0]) , i = Ai(wi[1], bi[1], Si[1], Mi[1]); this.width = e - this.x, this.height = i - this.y } } ), calculateTransform: function(t) { var e = t.width / this.width , i = t.height / this.height , n = ae(); return ue(n, n, [-this.x, -this.y]), ce(n, n, [e, i]), ue(n, n, [t.x, t.y]), n }, intersect: function(t) { if (!t) return !1; t instanceof Di || (t = Di.create(t)); var e = this , i = e.x , n = e.x + e.width , o = e.y , a = e.y + e.height , r = t.x , s = t.x + t.width , l = t.y , u = t.y + t.height; return !(n < r || s < i || a < l || u < o) }, contain: function(t, e) { var i = this; return t >= i.x && t <= i.x + i.width && e >= i.y && e <= i.y + i.height }, clone: function() { return new Di(this.x,this.y,this.width,this.height) }, copy: function(t) { this.x = t.x, this.y = t.y, this.width = t.width, this.height = t.height }, plain: function() { return { x: this.x, y: this.y, width: this.width, height: this.height } } }, Di.create = function(t) { return new Di(t.x,t.y,t.width,t.height) } ; var Ci = function(t) { for (var e in t = t || {}, _i.call(this, t), t) t.hasOwnProperty(e) && (this[e] = t[e]); this._children = [], this.__storage = null, this.__dirty = !0 }; Ci.prototype = { constructor: Ci, isGroup: !0, type: "group", silent: !1, children: function() { return this._children.slice() }, childAt: function(t) { return this._children[t] }, childOfName: function(t) { for (var e = this._children, i = 0; i < e.length; i++) if (e[i].name === t) return e[i] }, childCount: function() { return this._children.length }, add: function(t) { return t && t !== this && t.parent !== this && (this._children.push(t), this._doAdd(t)), this }, addBefore: function(t, e) { if (t && t !== this && t.parent !== this && e && e.parent === this) { var i = this._children , n = i.indexOf(e); 0 <= n && (i.splice(n, 0, t), this._doAdd(t)) } return this }, _doAdd: function(t) { t.parent && t.parent.remove(t); var e = (t.parent = this).__storage , i = this.__zr; e && e !== t.__storage && (e.addToStorage(t), t instanceof Ci && t.addChildrenToStorage(e)), i && i.refresh() }, remove: function(t) { var e = this.__zr , i = this.__storage , n = this._children , o = _(n, t); return o < 0 || (n.splice(o, 1), t.parent = null, i && (i.delFromStorage(t), t instanceof Ci && t.delChildrenFromStorage(i)), e && e.refresh()), this }, removeAll: function() { var t, e, i = this._children, n = this.__storage; for (e = 0; e < i.length; e++) t = i[e], n && (n.delFromStorage(t), t instanceof Ci && t.delChildrenFromStorage(n)), t.parent = null; return i.length = 0, this }, eachChild: function(t, e) { for (var i = this._children, n = 0; n < i.length; n++) { var o = i[n]; t.call(e, o, n) } return this }, traverse: function(t, e) { for (var i = 0; i < this._children.length; i++) { var n = this._children[i]; t.call(e, n), "group" === n.type && n.traverse(t, e) } return this }, addChildrenToStorage: function(t) { for (var e = 0; e < this._children.length; e++) { var i = this._children[e]; t.addToStorage(i), i instanceof Ci && i.addChildrenToStorage(t) } }, delChildrenFromStorage: function(t) { for (var e = 0; e < this._children.length; e++) { var i = this._children[e]; t.delFromStorage(i), i instanceof Ci && i.delChildrenFromStorage(t) } }, dirty: function() { return this.__dirty = !0, this.__zr && this.__zr.refresh(), this }, getBoundingRect: function(t) { for (var e = null, i = new Di(0,0,0,0), n = t || this._children, o = [], a = 0; a < n.length; a++) { var r = n[a]; if (!r.ignore && !r.invisible) { var s = r.getBoundingRect() , l = r.getLocalTransform(o); l ? (i.copy(s), i.applyTransform(l), (e = e || i.clone()).union(i)) : (e = e || s.clone()).union(s) } } return e || i } }, w(Ci, _i); var Li = 32 , ki = 7; function Pi(t, e, i, n) { var o = e + 1; if (o === i) return 1; if (n(t[o++], t[e]) < 0) { for (; o < i && n(t[o], t[o - 1]) < 0; ) o++; !function(t, e, i) { i--; for (; e < i; ) { var n = t[e]; t[e++] = t[i], t[i--] = n } }(t, e, o) } else for (; o < i && 0 <= n(t[o], t[o - 1]); ) o++; return o - e } function Ni(t, e, i, n, o) { for (n === e && n++; n < i; n++) { for (var a, r = t[n], s = e, l = n; s < l; ) o(r, t[a = s + l >>> 1]) < 0 ? l = a : s = 1 + a; var u = n - s; switch (u) { case 3: t[s + 3] = t[s + 2]; case 2: t[s + 2] = t[s + 1]; case 1: t[s + 1] = t[s]; break; default: for (; 0 < u; ) t[s + u] = t[s + u - 1], u-- } t[s] = r } } function Oi(t, e, i, n, o, a) { var r = 0 , s = 0 , l = 1; if (0 < a(t, e[i + o])) { for (s = n - o; l < s && 0 < a(t, e[i + o + l]); ) (l = 1 + ((r = l) << 1)) <= 0 && (l = s); s < l && (l = s), r += o, l += o } else { for (s = o + 1; l < s && a(t, e[i + o - l]) <= 0; ) (l = 1 + ((r = l) << 1)) <= 0 && (l = s); s < l && (l = s); var u = r; r = o - l, l = o - u } for (r++; r < l; ) { var h = r + (l - r >>> 1); 0 < a(t, e[i + h]) ? r = h + 1 : l = h } return l } function Ei(t, e, i, n, o, a) { var r = 0 , s = 0 , l = 1; if (a(t, e[i + o]) < 0) { for (s = o + 1; l < s && a(t, e[i + o - l]) < 0; ) (l = 1 + ((r = l) << 1)) <= 0 && (l = s); s < l && (l = s); var u = r; r = o - l, l = o - u } else { for (s = n - o; l < s && 0 <= a(t, e[i + o + l]); ) (l = 1 + ((r = l) << 1)) <= 0 && (l = s); s < l && (l = s), r += o, l += o } for (r++; r < l; ) { var h = r + (l - r >>> 1); a(t, e[i + h]) < 0 ? l = h : r = h + 1 } return l } function Ri(p, g) { var r, s, m = ki, l = 0, v = []; function e(t) { var e = r[t] , i = s[t] , n = r[t + 1] , o = s[t + 1]; s[t] = i + o, t === l - 3 && (r[t + 1] = r[t + 2], s[t + 1] = s[t + 2]), l--; var a = Ei(p[n], p, e, i, 0, g); e += a, 0 !== (i -= a) && 0 !== (o = Oi(p[e + i - 1], p, n, o, o - 1, g)) && (i <= o ? function(t, e, i, n) { var o = 0; for (o = 0; o < e; o++) v[o] = p[t + o]; var a = 0 , r = i , s = t; if (p[s++] = p[r++], 0 == --n) { for (o = 0; o < e; o++) p[s + o] = v[a + o]; return } if (1 === e) { for (o = 0; o < n; o++) p[s + o] = p[r + o]; return p[s + n] = v[a] } var l, u, h, c = m; for (; ; ) { u = l = 0, h = !1; do { if (g(p[r], v[a]) < 0) { if (p[s++] = p[r++], u++, (l = 0) == --n) { h = !0; break } } else if (p[s++] = v[a++], l++, u = 0, 1 == --e) { h = !0; break } } while ((l | u) < c); if (h) break; do { if (0 !== (l = Ei(p[r], v, a, e, 0, g))) { for (o = 0; o < l; o++) p[s + o] = v[a + o]; if (s += l, a += l, (e -= l) <= 1) { h = !0; break } } if (p[s++] = p[r++], 0 == --n) { h = !0; break } if (0 !== (u = Oi(v[a], p, r, n, 0, g))) { for (o = 0; o < u; o++) p[s + o] = p[r + o]; if (s += u, r += u, 0 === (n -= u)) { h = !0; break } } if (p[s++] = v[a++], 1 == --e) { h = !0; break } c-- } while (ki <= l || ki <= u); if (h) break; c < 0 && (c = 0), c += 2 } if ((m = c) < 1 && (m = 1), 1 === e) { for (o = 0; o < n; o++) p[s + o] = p[r + o]; p[s + n] = v[a] } else { if (0 === e) throw new Error; for (o = 0; o < e; o++) p[s + o] = v[a + o] } }(e, i, n, o) : function(t, e, i, n) { var o = 0; for (o = 0; o < n; o++) v[o] = p[i + o]; var a = t + e - 1 , r = n - 1 , s = i + n - 1 , l = 0 , u = 0; if (p[s--] = p[a--], 0 == --e) { for (l = s - (n - 1), o = 0; o < n; o++) p[l + o] = v[o]; return } if (1 === n) { for (u = (s -= e) + 1, l = (a -= e) + 1, o = e - 1; 0 <= o; o--) p[u + o] = p[l + o]; return p[s] = v[r] } var h = m; for (; ; ) { var c = 0 , d = 0 , f = !1; do { if (g(v[r], p[a]) < 0) { if (p[s--] = p[a--], c++, (d = 0) == --e) { f = !0; break } } else if (p[s--] = v[r--], d++, c = 0, 1 == --n) { f = !0; break } } while ((c | d) < h); if (f) break; do { if (0 !== (c = e - Ei(v[r], p, t, e, e - 1, g))) { for (e -= c, u = (s -= c) + 1, l = (a -= c) + 1, o = c - 1; 0 <= o; o--) p[u + o] = p[l + o]; if (0 === e) { f = !0; break } } if (p[s--] = v[r--], 1 == --n) { f = !0; break } if (0 !== (d = n - Oi(p[a], v, 0, n, n - 1, g))) { for (n -= d, u = (s -= d) + 1, l = (r -= d) + 1, o = 0; o < d; o++) p[u + o] = v[l + o]; if (n <= 1) { f = !0; break } } if (p[s--] = p[a--], 0 == --e) { f = !0; break } h-- } while (ki <= c || ki <= d); if (f) break; h < 0 && (h = 0), h += 2 } (m = h) < 1 && (m = 1); if (1 === n) { for (u = (s -= e) + 1, l = (a -= e) + 1, o = e - 1; 0 <= o; o--) p[u + o] = p[l + o]; p[s] = v[r] } else { if (0 === n) throw new Error; for (l = s - (n - 1), o = 0; o < n; o++) p[l + o] = v[o] } }(e, i, n, o)) } r = [], s = [], this.mergeRuns = function() { for (; 1 < l; ) { var t = l - 2; if (1 <= t && s[t - 1] <= s[t] + s[t + 1] || 2 <= t && s[t - 2] <= s[t] + s[t - 1]) s[t - 1] < s[t + 1] && t--; else if (s[t] > s[t + 1]) break; e(t) } } , this.forceMergeRuns = function() { for (; 1 < l; ) { var t = l - 2; 0 < t && s[t - 1] < s[t + 1] && t--, e(t) } } , this.pushRun = function(t, e) { r[l] = t, s[l] = e, l += 1 } } function zi(t, e, i, n) { i = i || 0; var o = (n = n || t.length) - i; if (!(o < 2)) { var a = 0; if (o < Li) Ni(t, i, n, i + (a = Pi(t, i, n, e)), e); else { var r = new Ri(t,e) , s = function(t) { for (var e = 0; Li <= t; ) e |= 1 & t, t >>= 1; return t + e }(o); do { if ((a = Pi(t, i, n, e)) < s) { var l = o; s < l && (l = s), Ni(t, i, i + l, i + a, e), a = l } r.pushRun(i, a), r.mergeRuns(), o -= a, i += a } while (0 !== o); r.forceMergeRuns() } } } function Bi(t, e) { return t.zlevel === e.zlevel ? t.z === e.z ? t.z2 - e.z2 : t.z - e.z : t.zlevel - e.zlevel } function Vi() { this._roots = [], this._displayList = [], this._displayListLen = 0 } Vi.prototype = { constructor: Vi, traverse: function(t, e) { for (var i = 0; i < this._roots.length; i++) this._roots[i].traverse(t, e) }, getDisplayList: function(t, e) { return e = e || !1, t && this.updateDisplayList(e), this._displayList }, updateDisplayList: function(t) { this._displayListLen = 0; for (var e = this._roots, i = this._displayList, n = 0, o = e.length; n < o; n++) this._updateAndAddDisplayable(e[n], null, t); i.length = this._displayListLen, v.canvasSupported && zi(i, Bi) }, _updateAndAddDisplayable: function(t, e, i) { if (!t.ignore || i) { t.beforeUpdate(), t.__dirty && t.update(), t.afterUpdate(); var n = t.clipPath; if (n) { e = e ? e.slice() : []; for (var o = n, a = t; o; ) o.parent = a, o.updateTransform(), e.push(o), o = (a = o).clipPath } if (t.isGroup) { for (var r = t._children, s = 0; s < r.length; s++) { var l = r[s]; t.__dirty && (l.__dirty = !0), this._updateAndAddDisplayable(l, e, i) } t.__dirty = !1 } else t.__clipPaths = e, this._displayList[this._displayListLen++] = t } }, addRoot: function(t) { t.__storage !== this && (t instanceof Ci && t.addChildrenToStorage(this), this.addToStorage(t), this._roots.push(t)) }, delRoot: function(t) { if (null == t) { for (var e = 0; e < this._roots.length; e++) { var i = this._roots[e]; i instanceof Ci && i.delChildrenFromStorage(this) } return this._roots = [], this._displayList = [], void (this._displayListLen = 0) } if (t instanceof Array) { e = 0; for (var n = t.length; e < n; e++) this.delRoot(t[e]) } else { var o = _(this._roots, t); 0 <= o && (this.delFromStorage(t), this._roots.splice(o, 1), t instanceof Ci && t.delChildrenFromStorage(this)) } }, addToStorage: function(t) { return t && (t.__storage = this, t.dirty(!1)), this }, delFromStorage: function(t) { return t && (t.__storage = null), this }, dispose: function() { this._renderList = this._roots = null }, displayableSortFunc: Bi }; var Gi = { shadowBlur: 1, shadowOffsetX: 1, shadowOffsetY: 1, textShadowBlur: 1, textShadowOffsetX: 1, textShadowOffsetY: 1, textBoxShadowBlur: 1, textBoxShadowOffsetX: 1, textBoxShadowOffsetY: 1 } , Fi = function(t, e, i) { return Gi.hasOwnProperty(e) ? i * t.dpr : i } , Wi = { NONE: 0, STYLE_BIND: 1, PLAIN_TEXT: 2 } , Hi = 9 , Zi = [["shadowBlur", 0], ["shadowOffsetX", 0], ["shadowOffsetY", 0], ["shadowColor", "#000"], ["lineCap", "butt"], ["lineJoin", "miter"], ["miterLimit", 10]] , Ui = function(t) { this.extendFrom(t, !1) }; function Xi(t, e, i) { var n = null == e.x ? 0 : e.x , o = null == e.x2 ? 1 : e.x2 , a = null == e.y ? 0 : e.y , r = null == e.y2 ? 0 : e.y2; return e.global || (n = n * i.width + i.x, o = o * i.width + i.x, a = a * i.height + i.y, r = r * i.height + i.y), n = isNaN(n) ? 0 : n, o = isNaN(o) ? 1 : o, a = isNaN(a) ? 0 : a, r = isNaN(r) ? 0 : r, t.createLinearGradient(n, a, o, r) } function Yi(t, e, i) { var n = i.width , o = i.height , a = Math.min(n, o) , r = null == e.x ? .5 : e.x , s = null == e.y ? .5 : e.y , l = null == e.r ? .5 : e.r; return e.global || (r = r * n + i.x, s = s * o + i.y, l *= a), t.createRadialGradient(r, s, 0, r, s, l) } Ui.prototype = { constructor: Ui, fill: "#000", stroke: null, opacity: 1, fillOpacity: null, strokeOpacity: null, lineDash: null, lineDashOffset: 0, shadowBlur: 0, shadowOffsetX: 0, shadowOffsetY: 0, lineWidth: 1, strokeNoScale: !1, text: null, font: null, textFont: null, fontStyle: null, fontWeight: null, fontSize: null, fontFamily: null, textTag: null, textFill: "#000", textStroke: null, textWidth: null, textHeight: null, textStrokeWidth: 0, textLineHeight: null, textPosition: "inside", textRect: null, textOffset: null, textAlign: null, textVerticalAlign: null, textDistance: 5, textShadowColor: "transparent", textShadowBlur: 0, textShadowOffsetX: 0, textShadowOffsetY: 0, textBoxShadowColor: "transparent", textBoxShadowBlur: 0, textBoxShadowOffsetX: 0, textBoxShadowOffsetY: 0, transformText: !1, textRotation: 0, textOrigin: null, textBackgroundColor: null, textBorderColor: null, textBorderWidth: 0, textBorderRadius: 0, textPadding: null, rich: null, truncate: null, blend: null, bind: function(t, e, i) { var n = this , o = i && i.style , a = !o || t.__attrCachedBy !== Wi.STYLE_BIND; t.__attrCachedBy = Wi.STYLE_BIND; for (var r = 0; r < Zi.length; r++) { var s = Zi[r] , l = s[0]; !a && n[l] === o[l] || (t[l] = Fi(t, l, n[l] || s[1])) } if (!a && n.fill === o.fill || (t.fillStyle = n.fill), !a && n.stroke === o.stroke || (t.strokeStyle = n.stroke), !a && n.opacity === o.opacity || (t.globalAlpha = null == n.opacity ? 1 : n.opacity), !a && n.blend === o.blend || (t.globalCompositeOperation = n.blend || "source-over"), this.hasStroke()) { var u = n.lineWidth; t.lineWidth = u / (this.strokeNoScale && e && e.getLineScale ? e.getLineScale() : 1) } }, hasFill: function() { var t = this.fill; return null != t && "none" !== t }, hasStroke: function() { var t = this.stroke; return null != t && "none" !== t && 0 < this.lineWidth }, extendFrom: function(t, e) { if (t) for (var i in t) !t.hasOwnProperty(i) || !0 !== e && (!1 === e ? this.hasOwnProperty(i) : null == t[i]) || (this[i] = t[i]) }, set: function(t, e) { "string" == typeof t ? this[t] = e : this.extendFrom(t, !0) }, clone: function() { var t = new this.constructor; return t.extendFrom(this, !0), t }, getGradient: function(t, e, i) { for (var n = ("radial" === e.type ? Yi : Xi)(t, e, i), o = e.colorStops, a = 0; a < o.length; a++) n.addColorStop(o[a].offset, o[a].color); return n } }; for (var ji = Ui.prototype, qi = 0; qi < Zi.length; qi++) { var Ki = Zi[qi]; Ki[0]in ji || (ji[Ki[0]] = Ki[1]) } Ui.getGradient = ji.getGradient; function $i(t, e) { this.image = t, this.repeat = e, this.type = "pattern" } function Ji() { return !1 } function Qi(t, e, i) { var n = y() , o = e.getWidth() , a = e.getHeight() , r = n.style; return r && (r.position = "absolute", r.left = 0, r.top = 0, r.width = o + "px", r.height = a + "px", n.setAttribute("data-zr-dom-id", t)), n.width = o * i, n.height = a * i, n } function tn(t, e, i) { var n; i = i || pi, "string" == typeof t ? n = Qi(t, e, i) : z(t) && (t = (n = t).id), this.id = t; var o = (this.dom = n).style; o && (n.onselectstart = Ji, o["-webkit-user-select"] = "none", o["user-select"] = "none", o["-webkit-touch-callout"] = "none", o["-webkit-tap-highlight-color"] = "rgba(0,0,0,0)", o.padding = 0, o.margin = 0, o["border-width"] = 0), this.domBack = null, this.ctxBack = null, this.painter = e, this.config = null, this.clearColor = 0, this.motionBlur = !1, this.lastFrameAlpha = .7, this.dpr = i } tn.prototype = { constructor: tn, __dirty: !0, __used: !($i.prototype.getCanvasPattern = function(t) { return t.createPattern(this.image, this.repeat || "repeat") } ), __drawIndex: 0, __startIndex: 0, __endIndex: 0, incremental: !1, getElementCount: function() { return this.__endIndex - this.__startIndex }, initContext: function() { this.ctx = this.dom.getContext("2d"), this.ctx.dpr = this.dpr }, createBackBuffer: function() { var t = this.dpr; this.domBack = Qi("back-" + this.id, this.painter, t), this.ctxBack = this.domBack.getContext("2d"), 1 !== t && this.ctxBack.scale(t, t) }, resize: function(t, e) { var i = this.dpr , n = this.dom , o = n.style , a = this.domBack; o && (o.width = t + "px", o.height = e + "px"), n.width = t * i, n.height = e * i, a && (a.width = t * i, a.height = e * i, 1 !== i && this.ctxBack.scale(i, i)) }, clear: function(t, e) { var i, n = this.dom, o = this.ctx, a = n.width, r = n.height, s = (e = e || this.clearColor, this.motionBlur && !t), l = this.lastFrameAlpha, u = this.dpr; s && (this.domBack || this.createBackBuffer(), this.ctxBack.globalCompositeOperation = "copy", this.ctxBack.drawImage(n, 0, 0, a / u, r / u)), o.clearRect(0, 0, a, r), e && "transparent" !== e && (e.colorStops ? (i = e.__canvasGradient || Ui.getGradient(o, e, { x: 0, y: 0, width: a, height: r }), e.__canvasGradient = i) : e.image && (i = $i.prototype.getCanvasPattern.call(e, o)), o.save(), o.fillStyle = i || e, o.fillRect(0, 0, a, r), o.restore()); if (s) { var h = this.domBack; o.save(), o.globalAlpha = l, o.drawImage(h, 0, 0, a, r), o.restore() } } }; var en = "undefined" != typeof window && (window.requestAnimationFrame && window.requestAnimationFrame.bind(window) || window.msRequestAnimationFrame && window.msRequestAnimationFrame.bind(window) || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame) || function(t) { setTimeout(t, 16) } , nn = new Te(50); function on(t) { if ("string" != typeof t) return t; var e = nn.get(t); return e && e.image } function an(t, e, i, n, o) { if (t) { if ("string" != typeof t) return t; if (e && e.__zrImageSrc === t || !i) return e; var a = nn.get(t) , r = { hostEl: i, cb: n, cbPayload: o }; return a ? sn(e = a.image) || a.pending.push(r) : ((e = new Image).onload = e.onerror = rn, nn.put(t, e.__cachedImgObj = { image: e, pending: [r] }), e.src = e.__zrImageSrc = t), e } return e } function rn() { var t = this.__cachedImgObj; this.onload = this.onerror = this.__cachedImgObj = null; for (var e = 0; e < t.pending.length; e++) { var i = t.pending[e] , n = i.cb; n && n(this, i.cbPayload), i.hostEl.dirty() } t.pending.length = 0 } function sn(t) { return t && t.width && t.height } var ln = {} , un = 0 , hn = 5e3 , cn = /\{([a-zA-Z0-9_]+)\|([^}]*)\}/g , dn = "12px sans-serif" , fn = {}; function pn(t, e) { var i = t + ":" + (e = e || dn); if (ln[i]) return ln[i]; for (var n, o, a = (t + "").split("\n"), r = 0, s = 0, l = a.length; s < l; s++) r = Math.max((n = a[s], o = e, fn.measureText(n, o)).width, r); return hn < un && (un = 0, ln = {}), un++, ln[i] = r } function gn(t, e, i, n, o, a, r, s) { return r ? function(t, e, i, n, o, a, r, s) { var l = In(t, { rich: r, truncate: s, font: e, textAlign: i, textPadding: o, textLineHeight: a }) , u = l.outerWidth , h = l.outerHeight , c = mn(0, u, i) , d = vn(0, h, n); return new Di(c,d,u,h) }(t, e, i, n, o, a, r, s) : function(t, e, i, n, o, a, r) { var s = Mn(t, e, o, a, r) , l = pn(t, e); o && (l += o[1] + o[3]); var u = s.outerHeight , h = mn(0, l, i) , c = vn(0, u, n) , d = new Di(h,c,l,u); return d.lineHeight = s.lineHeight, d }(t, e, i, n, o, a, s) } function mn(t, e, i) { return "right" === i ? t -= e : "center" === i && (t -= e / 2), t } function vn(t, e, i) { return "middle" === i ? t -= e / 2 : "bottom" === i && (t -= e), t } function yn(t, e, i) { var n = e.textPosition , o = e.textDistance , a = i.x , r = i.y; o = o || 0; var s = i.height , l = i.width , u = s / 2 , h = "left" , c = "top"; switch (n) { case "left": a -= o, r += u, h = "right", c = "middle"; break; case "right": a += o + l, r += u, c = "middle"; break; case "top": a += l / 2, r -= o, h = "center", c = "bottom"; break; case "bottom": a += l / 2, r += s + o, h = "center"; break; case "inside": a += l / 2, r += u, h = "center", c = "middle"; break; case "insideLeft": a += o, r += u, c = "middle"; break; case "insideRight": a += l - o, r += u, h = "right", c = "middle"; break; case "insideTop": a += l / 2, r += o, h = "center"; break; case "insideBottom": a += l / 2, r += s - o, h = "center", c = "bottom"; break; case "insideTopLeft": a += o, r += o; break; case "insideTopRight": a += l - o, r += o, h = "right"; break; case "insideBottomLeft": a += o, r += s - o, c = "bottom"; break; case "insideBottomRight": a += l - o, r += s - o, h = "right", c = "bottom" } return (t = t || {}).x = a, t.y = r, t.textAlign = h, t.textVerticalAlign = c, t } function xn(t, e, i, n, o) { if (!e) return ""; var a = (t + "").split("\n"); o = _n(e, i, n, o); for (var r = 0, s = a.length; r < s; r++) a[r] = wn(a[r], o); return a.join("\n") } function _n(t, e, i, n) { (n = P({}, n)).font = e; i = H(i, "..."); n.maxIterations = H(n.maxIterations, 2); var o = n.minChar = H(n.minChar, 0); n.cnCharWidth = pn("国", e); var a = n.ascCharWidth = pn("a", e); n.placeholder = H(n.placeholder, ""); for (var r = t = Math.max(0, t - 1), s = 0; s < o && a <= r; s++) r -= a; var l = pn(i, e); return r < l && (i = "", l = 0), r = t - l, n.ellipsis = i, n.ellipsisWidth = l, n.contentWidth = r, n.containerWidth = t, n } function wn(t, e) { var i = e.containerWidth , n = e.font , o = e.contentWidth; if (!i) return ""; var a = pn(t, n); if (a <= i) return t; for (var r = 0; ; r++) { if (a <= o || r >= e.maxIterations) { t += e.ellipsis; break } var s = 0 === r ? bn(t, o, e.ascCharWidth, e.cnCharWidth) : 0 < a ? Math.floor(t.length * o / a) : 0; a = pn(t = t.substr(0, s), n) } return "" === t && (t = e.placeholder), t } function bn(t, e, i, n) { for (var o = 0, a = 0, r = t.length; a < r && o < e; a++) { var s = t.charCodeAt(a); o += 0 <= s && s <= 127 ? i : n } return a } function Sn(t) { return pn("国", t) } function Mn(t, e, i, n, o) { null != t && (t += ""); var a = H(n, Sn(e)) , r = t ? t.split("\n") : [] , s = r.length * a , l = s , u = !0; if (i && (l += i[0] + i[2]), t && o) { u = !1; var h = o.outerHeight , c = o.outerWidth; if (null != h && h < l) t = "", r = []; else if (null != c) for (var d = _n(c - (i ? i[1] + i[3] : 0), e, o.ellipsis, { minChar: o.minChar, placeholder: o.placeholder }), f = 0, p = r.length; f < p; f++) r[f] = wn(r[f], d) } return { lines: r, height: s, outerHeight: l, lineHeight: a, canCacheByTextString: u } } function In(t, e) { var i = { lines: [], width: 0, height: 0 }; if (null != t && (t += ""), !t) return i; for (var n, o = cn.lastIndex = 0; null != (n = cn.exec(t)); ) { var a = n.index; o < a && Tn(i, t.substring(o, a)), Tn(i, n[2], n[1]), o = cn.lastIndex } o < t.length && Tn(i, t.substring(o, t.length)); var r = i.lines , s = 0 , l = 0 , u = [] , h = e.textPadding , c = e.truncate , d = c && c.outerWidth , f = c && c.outerHeight; h && (null != d && (d -= h[1] + h[3]), null != f && (f -= h[0] + h[2])); for (var p = 0; p < r.length; p++) { for (var g = r[p], m = 0, v = 0, y = 0; y < g.tokens.length; y++) { var x = (C = g.tokens[y]).styleName && e.rich[C.styleName] || {} , _ = C.textPadding = x.textPadding , w = C.font = x.font || e.font , b = C.textHeight = H(x.textHeight, Sn(w)); if (_ && (b += _[0] + _[2]), C.height = b, C.lineHeight = Z(x.textLineHeight, e.textLineHeight, b), C.textAlign = x && x.textAlign || e.textAlign, C.textVerticalAlign = x && x.textVerticalAlign || "middle", null != f && s + C.lineHeight > f) return { lines: [], width: 0, height: 0 }; C.textWidth = pn(C.text, w); var S = x.textWidth , M = null == S || "auto" === S; if ("string" == typeof S && "%" === S.charAt(S.length - 1)) C.percentWidth = S, u.push(C), S = 0; else { if (M) { S = C.textWidth; var I = x.textBackgroundColor , T = I && I.image; T && sn(T = on(T)) && (S = Math.max(S, T.width * b / T.height)) } var A = _ ? _[1] + _[3] : 0; S += A; var D = null != d ? d - v : null; null != D && D < S && (!M || D < A ? (C.text = "", C.textWidth = S = 0) : (C.text = xn(C.text, D - A, w, c.ellipsis, { minChar: c.minChar }), C.textWidth = pn(C.text, w), S = C.textWidth + A)) } v += C.width = S, x && (m = Math.max(m, C.lineHeight)) } g.width = v, s += g.lineHeight = m, l = Math.max(l, v) } i.outerWidth = i.width = H(e.textWidth, l), i.outerHeight = i.height = H(e.textHeight, s), h && (i.outerWidth += h[1] + h[3], i.outerHeight += h[0] + h[2]); for (p = 0; p < u.length; p++) { var C, L = (C = u[p]).percentWidth; C.width = parseInt(L, 10) / 100 * l } return i } function Tn(t, e, i) { for (var n = "" === e, o = e.split("\n"), a = t.lines, r = 0; r < o.length; r++) { var s = o[r] , l = { styleName: i, text: s, isLineHolder: !s && !n }; if (r) a.push({ tokens: [l] }); else { var u = (a[a.length - 1] || (a[0] = { tokens: [] })).tokens , h = u.length; 1 === h && u[0].isLineHolder ? u[0] = l : !s && h && !n || u.push(l) } } } function An(t) { var e = (t.fontSize || t.fontFamily) && [t.fontStyle, t.fontWeight, (t.fontSize || 12) + "px", t.fontFamily || "sans-serif"].join(" "); return e && j(e) || t.textFont || t.font } function Dn(t, e) { var i, n, o, a, r, s = e.x, l = e.y, u = e.width, h = e.height, c = e.r; u < 0 && (s += u, u = -u), h < 0 && (l += h, h = -h), "number" == typeof c ? i = n = o = a = c : c instanceof Array ? 1 === c.length ? i = n = o = a = c[0] : 2 === c.length ? (i = o = c[0], n = a = c[1]) : 3 === c.length ? (i = c[0], n = a = c[1], o = c[2]) : (i = c[0], n = c[1], o = c[2], a = c[3]) : i = n = o = a = 0, u < i + n && (i *= u / (r = i + n), n *= u / r), u < o + a && (o *= u / (r = o + a), a *= u / r), h < n + o && (n *= h / (r = n + o), o *= h / r), h < i + a && (i *= h / (r = i + a), a *= h / r), t.moveTo(s + i, l), t.lineTo(s + u - n, l), 0 !== n && t.arc(s + u - n, l + n, n, -Math.PI / 2, 0), t.lineTo(s + u, l + h - o), 0 !== o && t.arc(s + u - o, l + h - o, o, 0, Math.PI / 2), t.lineTo(s + a, l + h), 0 !== a && t.arc(s + a, l + h - a, a, Math.PI / 2, Math.PI), t.lineTo(s, l + i), 0 !== i && t.arc(s + i, l + i, i, Math.PI, 1.5 * Math.PI) } fn.measureText = function(t, e) { var i = x(); return i.font = e || dn, i.measureText(t) } ; var Cn = dn , Ln = { left: 1, right: 1, center: 1 } , kn = { top: 1, bottom: 1, middle: 1 } , Pn = [["textShadowBlur", "shadowBlur", 0], ["textShadowOffsetX", "shadowOffsetX", 0], ["textShadowOffsetY", "shadowOffsetY", 0], ["textShadowColor", "shadowColor", "transparent"]] , Nn = {} , On = {}; function En(t) { return Rn(t), E(t.rich, Rn), t } function Rn(t) { if (t) { t.font = An(t); var e = t.textAlign; "middle" === e && (e = "center"), t.textAlign = null == e || Ln[e] ? e : "left"; var i = t.textVerticalAlign || t.textBaseline; "center" === i && (i = "middle"), t.textVerticalAlign = null == i || kn[i] ? i : "top", t.textPadding && (t.textPadding = X(t.textPadding)) } } function zn(t, e, i, n, o, a) { n.rich ? function(t, e, i, n, o, a) { a !== Hi && (e.__attrCachedBy = Wi.NONE); var r = t.__textCotentBlock; r && !t.__dirtyText || (r = t.__textCotentBlock = In(i, n)); !function(t, e, i, n, o) { var a = i.width , r = i.outerWidth , s = i.outerHeight , l = n.textPadding , u = Hn(On, t, n, o) , h = u.baseX , c = u.baseY , d = u.textAlign , f = u.textVerticalAlign; Bn(e, n, o, h, c); var p = mn(h, r, d) , g = vn(c, s, f) , m = p , v = g; l && (m += l[3], v += l[0]); var y = m + a; Gn(n) && Fn(t, e, n, p, g, r, s); for (var x = 0; x < i.lines.length; x++) { for (var _, w = i.lines[x], b = w.tokens, S = b.length, M = w.lineHeight, I = w.width, T = 0, A = m, D = y, C = S - 1; T < S && (!(_ = b[T]).textAlign || "left" === _.textAlign); ) Vn(t, e, _, n, M, v, A, "left"), I -= _.width, A += _.width, T++; for (; 0 <= C && "right" === (_ = b[C]).textAlign; ) Vn(t, e, _, n, M, v, D, "right"), I -= _.width, D -= _.width, C--; for (A += (a - (A - m) - (y - D) - I) / 2; T <= C; ) _ = b[T], Vn(t, e, _, n, M, v, A + _.width / 2, "center"), A += _.width, T++; v += M } }(t, e, r, n, o) }(t, e, i, n, o, a) : function(t, e, i, n, o, a) { var r, s = Gn(n), l = !1, u = e.__attrCachedBy === Wi.PLAIN_TEXT; a !== Hi ? (a && (r = a.style, l = !s && u && r), e.__attrCachedBy = s ? Wi.NONE : Wi.PLAIN_TEXT) : u && (e.__attrCachedBy = Wi.NONE); var h = n.font || Cn; l && h === (r.font || Cn) || (e.font = h); var c = t.__computedFont; t.__styleFont !== h && (t.__styleFont = h, c = t.__computedFont = e.font); var d = n.textPadding , f = n.textLineHeight , p = t.__textCotentBlock; p && !t.__dirtyText || (p = t.__textCotentBlock = Mn(i, c, d, f, n.truncate)); var g = p.outerHeight , m = p.lines , v = p.lineHeight , y = Hn(On, t, n, o) , x = y.baseX , _ = y.baseY , w = y.textAlign || "left" , b = y.textVerticalAlign; Bn(e, n, o, x, _); var S = vn(_, g, b) , M = x , I = S; if (s || d) { var T = pn(i, c); d && (T += d[1] + d[3]); var A = mn(x, T, w); s && Fn(t, e, n, A, S, T, g), d && (M = jn(x, w, d), I += d[0]) } e.textAlign = w, e.textBaseline = "middle", e.globalAlpha = n.opacity || 1; for (var D = 0; D < Pn.length; D++) { var C = Pn[D] , L = C[0] , k = C[1] , P = n[L]; l && P === r[L] || (e[k] = Fi(e, k, P || C[2])) } I += v / 2; var N = n.textStrokeWidth , O = l ? r.textStrokeWidth : null , E = !l || N !== O , R = !l || E || n.textStroke !== r.textStroke , z = Un(n.textStroke, N) , B = Xn(n.textFill); z && (E && (e.lineWidth = N), R && (e.strokeStyle = z)); B && (l && n.textFill === r.textFill || (e.fillStyle = B)); if (1 === m.length) z && e.strokeText(m[0], M, I), B && e.fillText(m[0], M, I); else for (D = 0; D < m.length; D++) z && e.strokeText(m[D], M, I), B && e.fillText(m[D], M, I), I += v }(t, e, i, n, o, a) } function Bn(t, e, i, n, o) { if (i && e.textRotation) { var a = e.textOrigin; "center" === a ? (n = i.width / 2 + i.x, o = i.height / 2 + i.y) : a && (n = a[0] + i.x, o = a[1] + i.y), t.translate(n, o), t.rotate(-e.textRotation), t.translate(-n, -o) } } function Vn(t, e, i, n, o, a, r, s) { var l = n.rich[i.styleName] || {}; l.text = i.text; var u = i.textVerticalAlign , h = a + o / 2; "top" === u ? h = a + i.height / 2 : "bottom" === u && (h = a + o - i.height / 2), !i.isLineHolder && Gn(l) && Fn(t, e, l, "right" === s ? r - i.width : "center" === s ? r - i.width / 2 : r, h - i.height / 2, i.width, i.height); var c = i.textPadding; c && (r = jn(r, s, c), h -= i.height / 2 - c[2] - i.textHeight / 2), Zn(e, "shadowBlur", Z(l.textShadowBlur, n.textShadowBlur, 0)), Zn(e, "shadowColor", l.textShadowColor || n.textShadowColor || "transparent"), Zn(e, "shadowOffsetX", Z(l.textShadowOffsetX, n.textShadowOffsetX, 0)), Zn(e, "shadowOffsetY", Z(l.textShadowOffsetY, n.textShadowOffsetY, 0)), Zn(e, "textAlign", s), Zn(e, "textBaseline", "middle"), Zn(e, "font", i.font || Cn); var d = Un(l.textStroke || n.textStroke, p) , f = Xn(l.textFill || n.textFill) , p = H(l.textStrokeWidth, n.textStrokeWidth); d && (Zn(e, "lineWidth", p), Zn(e, "strokeStyle", d), e.strokeText(i.text, r, h)), f && (Zn(e, "fillStyle", f), e.fillText(i.text, r, h)) } function Gn(t) { return !!(t.textBackgroundColor || t.textBorderWidth && t.textBorderColor) } function Fn(t, e, i, n, o, a, r) { var s = i.textBackgroundColor , l = i.textBorderWidth , u = i.textBorderColor , h = R(s); if (Zn(e, "shadowBlur", i.textBoxShadowBlur || 0), Zn(e, "shadowColor", i.textBoxShadowColor || "transparent"), Zn(e, "shadowOffsetX", i.textBoxShadowOffsetX || 0), Zn(e, "shadowOffsetY", i.textBoxShadowOffsetY || 0), h || l && u) { e.beginPath(); var c = i.textBorderRadius; c ? Dn(e, { x: n, y: o, width: a, height: r, r: c }) : e.rect(n, o, a, r), e.closePath() } if (h) if (Zn(e, "fillStyle", s), null != i.fillOpacity) { var d = e.globalAlpha; e.globalAlpha = i.fillOpacity * i.opacity, e.fill(), e.globalAlpha = d } else e.fill(); else if (z(s)) { var f = s.image; (f = an(f, null, t, Wn, s)) && sn(f) && e.drawImage(f, n, o, a, r) } if (l && u) if (Zn(e, "lineWidth", l), Zn(e, "strokeStyle", u), null != i.strokeOpacity) { d = e.globalAlpha; e.globalAlpha = i.strokeOpacity * i.opacity, e.stroke(), e.globalAlpha = d } else e.stroke() } function Wn(t, e) { e.image = t } function Hn(t, e, i, n) { var o = i.x || 0 , a = i.y || 0 , r = i.textAlign , s = i.textVerticalAlign; if (n) { var l = i.textPosition; if (l instanceof Array) o = n.x + Yn(l[0], n.width), a = n.y + Yn(l[1], n.height); else { var u = e && e.calculateTextPosition ? e.calculateTextPosition(Nn, i, n) : yn(Nn, i, n); o = u.x, a = u.y, r = r || u.textAlign, s = s || u.textVerticalAlign } var h = i.textOffset; h && (o += h[0], a += h[1]) } return (t = t || {}).baseX = o, t.baseY = a, t.textAlign = r, t.textVerticalAlign = s, t } function Zn(t, e, i) { return t[e] = Fi(t, e, i), t[e] } function Un(t, e) { return null == t || e <= 0 || "transparent" === t || "none" === t ? null : t.image || t.colorStops ? "#000" : t } function Xn(t) { return null == t || "none" === t ? null : t.image || t.colorStops ? "#000" : t } function Yn(t, e) { return "string" == typeof t ? 0 <= t.lastIndexOf("%") ? parseFloat(t) / 100 * e : parseFloat(t) : t } function jn(t, e, i) { return "right" === e ? t - i[1] : "center" === e ? t + i[3] / 2 - i[1] / 2 : t + i[3] } function qn(t, e) { return null != t && (t || e.textBackgroundColor || e.textBorderWidth && e.textBorderColor || e.textPadding) } function Kn() {} var $n = new Di; function Jn(t) { for (var e in t = t || {}, _i.call(this, t), t) t.hasOwnProperty(e) && "style" !== e && (this[e] = t[e]); this.style = new Ui(t.style,this), this._rect = null, this.__clipPaths = null } function Qn(t) { Jn.call(this, t) } Jn.prototype = { constructor: Jn, type: "displayable", __dirty: !0, invisible: !(Kn.prototype = { constructor: Kn, drawRectText: function(t, e) { var i = this.style; e = i.textRect || e, this.__dirty && En(i); var n = i.text; if (null != n && (n += ""), qn(n, i)) { t.save(); var o = this.transform; i.transformText ? this.setTransform(t) : o && ($n.copy(e), $n.applyTransform(o), e = $n), zn(this, t, n, i, e, Hi), t.restore() } } }), z: 0, z2: 0, zlevel: 0, draggable: !1, dragging: !1, silent: !1, culling: !1, cursor: "pointer", rectHover: !1, progressive: !1, incremental: !1, globalScaleRatio: 1, beforeBrush: function(t) {}, afterBrush: function(t) {}, brush: function(t, e) {}, getBoundingRect: function() {}, contain: function(t, e) { return this.rectContain(t, e) }, traverse: function(t, e) { t.call(e, this) }, rectContain: function(t, e) { var i = this.transformCoordToLocal(t, e); return this.getBoundingRect().contain(i[0], i[1]) }, dirty: function() { this.__dirty = this.__dirtyText = !0, this._rect = null, this.__zr && this.__zr.refresh() }, animateStyle: function(t) { return this.animate("style", t) }, attrKV: function(t, e) { "style" !== t ? _i.prototype.attrKV.call(this, t, e) : this.style.set(e) }, setStyle: function(t, e) { return this.style.set(t, e), this.dirty(!1), this }, useStyle: function(t) { return this.style = new Ui(t,this), this.dirty(!1), this }, calculateTextPosition: null }, w(Jn, _i), b(Jn, Kn), Qn.prototype = { constructor: Qn, type: "image", brush: function(t, e) { var i = this.style , n = i.image; i.bind(t, this, e); var o = this._image = an(n, this._image, this, this.onload); if (o && sn(o)) { var a = i.x || 0 , r = i.y || 0 , s = i.width , l = i.height , u = o.width / o.height; if (null == s && null != l ? s = l * u : null == l && null != s ? l = s / u : null == s && null == l && (s = o.width, l = o.height), this.setTransform(t), i.sWidth && i.sHeight) { var h = i.sx || 0 , c = i.sy || 0; t.drawImage(o, h, c, i.sWidth, i.sHeight, a, r, s, l) } else if (i.sx && i.sy) { var d = s - (h = i.sx) , f = l - (c = i.sy); t.drawImage(o, h, c, d, f, a, r, s, l) } else t.drawImage(o, a, r, s, l); null != i.text && (this.restoreTransform(t), this.drawRectText(t, this.getBoundingRect())) } }, getBoundingRect: function() { var t = this.style; return this._rect || (this._rect = new Di(t.x || 0,t.y || 0,t.width || 0,t.height || 0)), this._rect } }, w(Qn, Jn); var to = 314159; function eo(t) { return parseInt(t, 10) } var io = new Di(0,0,0,0) , no = new Di(0,0,0,0); function oo(t, e, i) { this.type = "canvas"; var n = !t.nodeName || "CANVAS" === t.nodeName.toUpperCase(); this._opts = i = P({}, i || {}), this.dpr = i.devicePixelRatio || pi, this._singleCanvas = n; var o = (this.root = t).style; o && (o["-webkit-tap-highlight-color"] = "transparent", o["-webkit-user-select"] = o["user-select"] = o["-webkit-touch-callout"] = "none", t.innerHTML = ""), this.storage = e; var a = this._zlevelList = [] , r = this._layers = {}; if (this._layerConfig = {}, this._needsManuallyCompositing = !1, n) { var s = t.width , l = t.height; null != i.width && (s = i.width), null != i.height && (l = i.height), this.dpr = i.devicePixelRatio || 1, t.width = s * this.dpr, t.height = l * this.dpr, this._width = s, this._height = l; var u = new tn(t,this,this.dpr); u.__builtin__ = !0, u.initContext(), (r[to] = u).zlevel = to, a.push(to), this._domRoot = t } else { this._width = this._getSize(0), this._height = this._getSize(1); var h = this._domRoot = function(t, e) { var i = document.createElement("div"); return i.style.cssText = ["position:relative", "width:" + t + "px", "height:" + e + "px", "padding:0", "margin:0", "border-width:0"].join(";") + ";", i }(this._width, this._height); t.appendChild(h) } this._hoverlayer = null, this._hoverElements = [] } oo.prototype = { constructor: oo, getType: function() { return "canvas" }, isSingleCanvas: function() { return this._singleCanvas }, getViewportRoot: function() { return this._domRoot }, getViewportRootOffset: function() { var t = this.getViewportRoot(); if (t) return { offsetLeft: t.offsetLeft || 0, offsetTop: t.offsetTop || 0 } }, refresh: function(t) { var e = this.storage.getDisplayList(!0) , i = this._zlevelList; this._redrawId = Math.random(), this._paintList(e, t, this._redrawId); for (var n = 0; n < i.length; n++) { var o = i[n] , a = this._layers[o]; if (!a.__builtin__ && a.refresh) { var r = 0 === n ? this._backgroundColor : null; a.refresh(r) } } return this.refreshHover(), this }, addHover: function(t, e) { if (!t.__hoverMir) { var i = new t.constructor({ style: t.style, shape: t.shape, z: t.z, z2: t.z2, silent: t.silent }); return (i.__from = t).__hoverMir = i, e && i.setStyle(e), this._hoverElements.push(i), i } }, removeHover: function(t) { var e = t.__hoverMir , i = this._hoverElements , n = _(i, e); 0 <= n && i.splice(n, 1), t.__hoverMir = null }, clearHover: function(t) { for (var e = this._hoverElements, i = 0; i < e.length; i++) { var n = e[i].__from; n && (n.__hoverMir = null) } e.length = 0 }, refreshHover: function() { var t = this._hoverElements , e = t.length , i = this._hoverlayer; if (i && i.clear(), e) { zi(t, this.storage.displayableSortFunc); var n = {}; (i = i || (this._hoverlayer = this.getLayer(1e5))).ctx.save(); for (var o = 0; o < e; ) { var a = t[o] , r = a.__from; r && r.__zr ? (o++, r.invisible || (a.transform = r.transform, a.invTransform = r.invTransform, a.__clipPaths = r.__clipPaths, this._doPaintEl(a, i, !0, n))) : (t.splice(o, 1), r.__hoverMir = null, e--) } i.ctx.restore() } }, getHoverLayer: function() { return this.getLayer(1e5) }, _paintList: function(t, e, i) { if (this._redrawId === i) { e = e || !1, this._updateLayerStatus(t); var n = this._doPaintList(t, e); if (this._needsManuallyCompositing && this._compositeManually(), !n) { var o = this; en(function() { o._paintList(t, e, i) }) } } }, _compositeManually: function() { var e = this.getLayer(to).ctx , i = this._domRoot.width , n = this._domRoot.height; e.clearRect(0, 0, i, n), this.eachBuiltinLayer(function(t) { t.virtual && e.drawImage(t.dom, 0, 0, i, n) }) }, _doPaintList: function(t, e) { for (var i = [], n = 0; n < this._zlevelList.length; n++) { var o = this._zlevelList[n]; (s = this._layers[o]).__builtin__ && s !== this._hoverlayer && (s.__dirty || e) && i.push(s) } for (var a = !0, r = 0; r < i.length; r++) { var s, l = (s = i[r]).ctx, u = {}; l.save(); var h = e ? s.__startIndex : s.__drawIndex , c = !e && s.incremental && Date.now , d = c && Date.now() , f = s.zlevel === this._zlevelList[0] ? this._backgroundColor : null; if (s.__startIndex === s.__endIndex) s.clear(!1, f); else if (h === s.__startIndex) { var p = t[h]; p.incremental && p.notClear && !e || s.clear(!1, f) } -1 === h && (console.error("For some unknown reason. drawIndex is -1"), h = s.__startIndex); for (var g = h; g < s.__endIndex; g++) { var m = t[g]; if (this._doPaintEl(m, s, e, u), m.__dirty = m.__dirtyText = !1, c) if (15 < Date.now() - d) break } s.__drawIndex = g, s.__drawIndex < s.__endIndex && (a = !1), u.prevElClipPaths && l.restore(), l.restore() } return v.wxa && E(this._layers, function(t) { t && t.ctx && t.ctx.draw && t.ctx.draw() }), a }, _doPaintEl: function(t, e, i, n) { var o = e.ctx , a = t.transform; if ((e.__dirty || i) && !t.invisible && 0 !== t.style.opacity && (!a || a[0] || a[3]) && (!t.culling || !function(t, e, i) { return io.copy(t.getBoundingRect()), t.transform && io.applyTransform(t.transform), no.width = e, no.height = i, !io.intersect(no) }(t, this._width, this._height))) { var r = t.__clipPaths , s = n.prevElClipPaths; s && !function(t, e) { if (t === e) return !1; if (!t || !e || t.length !== e.length) return !0; for (var i = 0; i < t.length; i++) if (t[i] !== e[i]) return !0; return !1 }(r, s) || (s && (o.restore(), n.prevElClipPaths = null, n.prevEl = null), r && (o.save(), function(t, e) { for (var i = 0; i < t.length; i++) { var n = t[i]; n.setTransform(e), e.beginPath(), n.buildPath(e, n.shape), e.clip(), n.restoreTransform(e) } }(r, o), n.prevElClipPaths = r)), t.beforeBrush && t.beforeBrush(o), t.brush(o, n.prevEl || null), (n.prevEl = t).afterBrush && t.afterBrush(o) } }, getLayer: function(t, e) { this._singleCanvas && !this._needsManuallyCompositing && (t = to); var i = this._layers[t]; return i || ((i = new tn("zr_" + t,this,this.dpr)).zlevel = t, i.__builtin__ = !0, this._layerConfig[t] ? m(i, this._layerConfig[t], !0) : this._layerConfig[t - .01] && m(i, this._layerConfig[t - .01], !0), e && (i.virtual = e), this.insertLayer(t, i), i.initContext()), i }, insertLayer: function(t, e) { var i = this._layers , n = this._zlevelList , o = n.length , a = null , r = -1 , s = this._domRoot; if (i[t]) vi("ZLevel " + t + " has been used already"); else if (function(t) { return !!t && (!!t.__builtin__ || "function" == typeof t.resize && "function" == typeof t.refresh) }(e)) { if (0 < o && t > n[0]) { for (r = 0; r < o - 1 && !(n[r] < t && n[r + 1] > t); r++) ; a = i[n[r]] } if (n.splice(r + 1, 0, t), !(i[t] = e).virtual) if (a) { var l = a.dom; l.nextSibling ? s.insertBefore(e.dom, l.nextSibling) : s.appendChild(e.dom) } else s.firstChild ? s.insertBefore(e.dom, s.firstChild) : s.appendChild(e.dom) } else vi("Layer of zlevel " + t + " is not valid") }, eachLayer: function(t, e) { var i, n, o = this._zlevelList; for (n = 0; n < o.length; n++) i = o[n], t.call(e, this._layers[i], i) }, eachBuiltinLayer: function(t, e) { var i, n, o, a = this._zlevelList; for (o = 0; o < a.length; o++) n = a[o], (i = this._layers[n]).__builtin__ && t.call(e, i, n) }, eachOtherLayer: function(t, e) { var i, n, o, a = this._zlevelList; for (o = 0; o < a.length; o++) n = a[o], (i = this._layers[n]).__builtin__ || t.call(e, i, n) }, getLayers: function() { return this._layers }, _updateLayerStatus: function(t) { function e(t) { o && (o.__endIndex !== t && (o.__dirty = !0), o.__endIndex = t) } if (this.eachBuiltinLayer(function(t, e) { t.__dirty = t.__used = !1 }), this._singleCanvas) for (var i = 1; i < t.length; i++) { if ((r = t[i]).zlevel !== t[i - 1].zlevel || r.incremental) { this._needsManuallyCompositing = !0; break } } var n, o = null, a = 0; for (i = 0; i < t.length; i++) { var r, s, l = (r = t[i]).zlevel; n !== l && (n = l, a = 0), r.incremental ? ((s = this.getLayer(l + .001, this._needsManuallyCompositing)).incremental = !0, a = 1) : s = this.getLayer(l + (0 < a ? .01 : 0), this._needsManuallyCompositing), s.__builtin__ || vi("ZLevel " + l + " has been used by unkown layer " + s.id), s !== o && (s.__used = !0, s.__startIndex !== i && (s.__dirty = !0), s.__startIndex = i, s.incremental ? s.__drawIndex = -1 : s.__drawIndex = i, e(i), o = s), r.__dirty && (s.__dirty = !0, s.incremental && s.__drawIndex < 0 && (s.__drawIndex = i)) } e(i), this.eachBuiltinLayer(function(t, e) { !t.__used && 0 < t.getElementCount() && (t.__dirty = !0, t.__startIndex = t.__endIndex = t.__drawIndex = 0), t.__dirty && t.__drawIndex < 0 && (t.__drawIndex = t.__startIndex) }) }, clear: function() { return this.eachBuiltinLayer(this._clearLayer), this }, _clearLayer: function(t) { t.clear() }, setBackgroundColor: function(t) { this._backgroundColor = t }, configLayer: function(t, e) { if (e) { var i = this._layerConfig; i[t] ? m(i[t], e, !0) : i[t] = e; for (var n = 0; n < this._zlevelList.length; n++) { var o = this._zlevelList[n]; if (o === t || o === t + .01) m(this._layers[o], i[t], !0) } } }, delLayer: function(t) { var e = this._layers , i = this._zlevelList , n = e[t]; n && (n.dom.parentNode.removeChild(n.dom), delete e[t], i.splice(_(i, t), 1)) }, resize: function(e, i) { if (this._domRoot.style) { var t = this._domRoot; t.style.display = "none"; var n = this._opts; if (null != e && (n.width = e), null != i && (n.height = i), e = this._getSize(0), i = this._getSize(1), t.style.display = "", this._width !== e || i !== this._height) { for (var o in t.style.width = e + "px", t.style.height = i + "px", this._layers) this._layers.hasOwnProperty(o) && this._layers[o].resize(e, i); E(this._progressiveLayers, function(t) { t.resize(e, i) }), this.refresh(!0) } this._width = e, this._height = i } else { if (null == e || null == i) return; this._width = e, this._height = i, this.getLayer(to).resize(e, i) } return this }, clearLayer: function(t) { var e = this._layers[t]; e && e.clear() }, dispose: function() { this.root.innerHTML = "", this.root = this.storage = this._domRoot = this._layers = null }, getRenderedCanvas: function(t) { if (t = t || {}, this._singleCanvas && !this._compositeManually) return this._layers[to].dom; var e = new tn("image",this,t.pixelRatio || this.dpr); if (e.initContext(), e.clear(!1, t.backgroundColor || this._backgroundColor), t.pixelRatio <= this.dpr) { this.refresh(); var i = e.dom.width , n = e.dom.height , o = e.ctx; this.eachLayer(function(t) { t.__builtin__ ? o.drawImage(t.dom, 0, 0, i, n) : t.renderToCanvas && (e.ctx.save(), t.renderToCanvas(e.ctx), e.ctx.restore()) }) } else for (var a = {}, r = this.storage.getDisplayList(!0), s = 0; s < r.length; s++) { var l = r[s]; this._doPaintEl(l, e, !0, a) } return e.dom }, getWidth: function() { return this._width }, getHeight: function() { return this._height }, _getSize: function(t) { var e = this._opts , i = ["width", "height"][t] , n = ["clientWidth", "clientHeight"][t] , o = ["paddingLeft", "paddingTop"][t] , a = ["paddingRight", "paddingBottom"][t]; if (null != e[i] && "auto" !== e[i]) return parseFloat(e[i]); var r = this.root , s = document.defaultView.getComputedStyle(r); return (r[n] || eo(s[i]) || eo(r.style[i])) - (eo(s[o]) || 0) - (eo(s[a]) || 0) | 0 }, pathToImage: function(t, e) { e = e || this.dpr; var i = document.createElement("canvas") , n = i.getContext("2d") , o = t.getBoundingRect() , a = t.style , r = a.shadowBlur * e , s = a.shadowOffsetX * e , l = a.shadowOffsetY * e , u = a.hasStroke() ? a.lineWidth : 0 , h = Math.max(u / 2, r - s) , c = Math.max(u / 2, s + r) , d = Math.max(u / 2, r - l) , f = Math.max(u / 2, l + r) , p = o.width + h + c , g = o.height + d + f; i.width = p * e, i.height = g * e, n.scale(e, e), n.clearRect(0, 0, p, g), n.dpr = e; var m = { position: t.position, rotation: t.rotation, scale: t.scale }; t.position = [h - o.x, d - o.y], t.rotation = 0, t.scale = [1, 1], t.updateTransform(), t && t.brush(n); var v = new Qn({ style: { x: 0, y: 0, image: i } }); return null != m.position && (v.position = t.position = m.position), null != m.rotation && (v.rotation = t.rotation = m.rotation), null != m.scale && (v.scale = t.scale = m.scale), v } }; function ao(t) { t = t || {}, this.stage = t.stage || {}, this.onframe = t.onframe || function() {} , this._clips = [], this._running = !1, this._time, this._pausedTime, this._pauseStart, this._paused = !1, Ct.call(this) } ao.prototype = { constructor: ao, addClip: function(t) { this._clips.push(t) }, addAnimator: function(t) { t.animation = this; for (var e = t.getClips(), i = 0; i < e.length; i++) this.addClip(e[i]) }, removeClip: function(t) { var e = _(this._clips, t); 0 <= e && this._clips.splice(e, 1) }, removeAnimator: function(t) { for (var e = t.getClips(), i = 0; i < e.length; i++) this.removeClip(e[i]); t.animation = null }, _update: function() { for (var t = (new Date).getTime() - this._pausedTime, e = t - this._time, i = this._clips, n = i.length, o = [], a = [], r = 0; r < n; r++) { var s = i[r] , l = s.step(t, e); l && (o.push(l), a.push(s)) } for (r = 0; r < n; ) i[r]._needsRemove ? (i[r] = i[n - 1], i.pop(), n--) : r++; n = o.length; for (r = 0; r < n; r++) a[r].fire(o[r]); this._time = t, this.onframe(e), this.trigger("frame", e), this.stage.update && this.stage.update() }, _startLoop: function() { var e = this; this._running = !0, en(function t() { e._running && (en(t), e._paused || e._update()) }) }, start: function() { this._time = (new Date).getTime(), this._pausedTime = 0, this._startLoop() }, stop: function() { this._running = !1 }, pause: function() { this._paused || (this._pauseStart = (new Date).getTime(), this._paused = !0) }, resume: function() { this._paused && (this._pausedTime += (new Date).getTime() - this._pauseStart, this._paused = !1) }, clear: function() { this._clips = [] }, isFinished: function() { return !this._clips.length }, animate: function(t, e) { var i = new di(t,(e = e || {}).loop,e.getter,e.setter); return this.addAnimator(i), i } }, b(ao, Ct); var ro, so, lo = v.domSupported, uo = (so = { pointerdown: 1, pointerup: 1, pointermove: 1, pointerout: 1 }, { mouse: ro = ["click", "dblclick", "mousewheel", "mouseout", "mouseup", "mousedown", "mousemove", "contextmenu"], touch: ["touchstart", "touchend", "touchmove"], pointer: O(ro, function(t) { var e = t.replace("mouse", "pointer"); return so.hasOwnProperty(e) ? e : t }) }), ho = { mouse: ["mousemove", "mouseup"], pointer: ["pointermove", "pointerup"] }; function co(t) { return "mousewheel" === t && v.browser.firefox ? "DOMMouseScroll" : t } function fo(t) { var e = t.pointerType; return "pen" === e || "touch" === e } function po(t) { t && (t.zrByTouch = !0) } function go(t, e) { for (var i = e, n = !1; i && 9 !== i.nodeType && !(n = i.domBelongToZr || i !== e && i === t.painterRoot); ) i = i.parentNode; return n } function mo(t, e) { this.type = e.type, this.target = this.currentTarget = t.dom, this.pointerType = e.pointerType, this.clientX = e.clientX, this.clientY = e.clientY } var vo = mo.prototype; vo.stopPropagation = vo.stopImmediatePropagation = vo.preventDefault = et; var yo = { mousedown: function(t) { t = Zt(this.dom, t), this._mayPointerCapture = [t.zrX, t.zrY], this.trigger("mousedown", t) }, mousemove: function(t) { t = Zt(this.dom, t); var e = this._mayPointerCapture; !e || t.zrX === e[0] && t.zrY === e[1] || Mo(this, !0), this.trigger("mousemove", t) }, mouseup: function(t) { t = Zt(this.dom, t), Mo(this, !1), this.trigger("mouseup", t) }, mouseout: function(t) { t = Zt(this.dom, t), this._pointerCapturing && (t.zrEventControl = "no_globalout"); var e = t.toElement || t.relatedTarget; t.zrIsToLocalDOM = go(this, e), this.trigger("mouseout", t) }, touchstart: function(t) { po(t = Zt(this.dom, t)), this._lastTouchMoment = new Date, this.handler.processGesture(t, "start"), yo.mousemove.call(this, t), yo.mousedown.call(this, t) }, touchmove: function(t) { po(t = Zt(this.dom, t)), this.handler.processGesture(t, "change"), yo.mousemove.call(this, t) }, touchend: function(t) { po(t = Zt(this.dom, t)), this.handler.processGesture(t, "end"), yo.mouseup.call(this, t), +new Date - this._lastTouchMoment < 300 && yo.click.call(this, t) }, pointerdown: function(t) { yo.mousedown.call(this, t) }, pointermove: function(t) { fo(t) || yo.mousemove.call(this, t) }, pointerup: function(t) { yo.mouseup.call(this, t) }, pointerout: function(t) { fo(t) || yo.mouseout.call(this, t) } }; E(["click", "mousewheel", "dblclick", "contextmenu"], function(e) { yo[e] = function(t) { t = Zt(this.dom, t), this.trigger(e, t) } }); var xo = { pointermove: function(t) { fo(t) || xo.mousemove.call(this, t) }, pointerup: function(t) { xo.mouseup.call(this, t) }, mousemove: function(t) { this.trigger("mousemove", t) }, mouseup: function(t) { var e = this._pointerCapturing; Mo(this, !1), this.trigger("mouseup", t), e && (t.zrEventControl = "only_globalout", this.trigger("mouseout", t)) } }; function _o(i, n) { var o = n.domHandlers; v.pointerEventsSupported ? E(uo.pointer, function(e) { bo(n, e, function(t) { o[e].call(i, t) }) }) : (v.touchEventsSupported && E(uo.touch, function(e) { bo(n, e, function(t) { o[e].call(i, t), function(t) { t.touching = !0, null != t.touchTimer && (clearTimeout(t.touchTimer), t.touchTimer = null), t.touchTimer = setTimeout(function() { t.touching = !1, t.touchTimer = null }, 700) }(n) }) }), E(uo.mouse, function(e) { bo(n, e, function(t) { t = Ht(t), n.touching || o[e].call(i, t) }) })) } function wo(i, n) { function t(e) { bo(n, e, function(t) { t = Ht(t), go(i, t.target) || (t = function(t, e) { return Zt(t.dom, new mo(t,e), !0) }(i, t), n.domHandlers[e].call(i, t)) }, { capture: !0 }) } v.pointerEventsSupported ? E(ho.pointer, t) : v.touchEventsSupported || E(ho.mouse, t) } function bo(t, e, i, n) { t.mounted[e] = i, t.listenerOpts[e] = n, Ut(t.domTarget, co(e), i, n) } function So(t) { var e, i, n, o, a = t.mounted; for (var r in a) a.hasOwnProperty(r) && (e = t.domTarget, i = co(r), n = a[r], o = t.listenerOpts[r], Bt ? e.removeEventListener(i, n, o) : e.detachEvent("on" + i, n)); t.mounted = {} } function Mo(t, e) { if (t._mayPointerCapture = null, lo && t._pointerCapturing ^ e) { t._pointerCapturing = e; var i = t._globalHandlerScope; e ? wo(t, i) : So(i) } } function Io(t, e) { this.domTarget = t, this.domHandlers = e, this.mounted = {}, this.listenerOpts = {}, this.touchTimer = null, this.touching = !1 } function To(t, e) { Ct.call(this), this.dom = t, this.painterRoot = e, this._localHandlerScope = new Io(t,yo), lo && (this._globalHandlerScope = new Io(document,xo)), this._pointerCapturing = !1, this._mayPointerCapture = null, _o(this, this._localHandlerScope) } var Ao = To.prototype; Ao.dispose = function() { So(this._localHandlerScope), lo && So(this._globalHandlerScope) } , Ao.setCursor = function(t) { this.dom.style && (this.dom.style.cursor = t || "default") } , b(To, Ct); var Do = !v.canvasSupported , Co = { canvas: oo } , Lo = {}; function ko(t, e) { var i = new No(n(),t,e); return Lo[i.id] = i } function Po(t, e) { Co[t] = e } var No = function(t, e, i) { i = i || {}, this.dom = e, this.id = t; var n = this , o = new Vi , a = i.renderer; if (Do) { if (!Co.vml) throw new Error("You need to require 'zrender/vml/vml' to support IE8"); a = "vml" } else a && Co[a] || (a = "canvas"); var r = new Co[a](e,o,i,t); this.storage = o, this.painter = r; var s = v.node || v.worker ? null : new To(r.getViewportRoot(),r.root); this.handler = new te(o,r,s,r.root), this.animation = new ao({ stage: { update: A(this.flush, this) } }), this.animation.start(), this._needsRefresh; var l = o.delFromStorage , u = o.addToStorage; o.delFromStorage = function(t) { l.call(o, t), t && t.removeSelfFromZr(n) } , o.addToStorage = function(t) { u.call(o, t), t.addSelfToZr(n) } }; No.prototype = { constructor: No, getId: function() { return this.id }, add: function(t) { this.storage.addRoot(t), this._needsRefresh = !0 }, remove: function(t) { this.storage.delRoot(t), this._needsRefresh = !0 }, configLayer: function(t, e) { this.painter.configLayer && this.painter.configLayer(t, e), this._needsRefresh = !0 }, setBackgroundColor: function(t) { this.painter.setBackgroundColor && this.painter.setBackgroundColor(t), this._needsRefresh = !0 }, refreshImmediately: function() { this._needsRefresh = this._needsRefreshHover = !1, this.painter.refresh(), this._needsRefresh = this._needsRefreshHover = !1 }, refresh: function() { this._needsRefresh = !0 }, flush: function() { var t; this._needsRefresh && (t = !0, this.refreshImmediately()), this._needsRefreshHover && (t = !0, this.refreshHoverImmediately()), t && this.trigger("rendered") }, addHover: function(t, e) { if (this.painter.addHover) { var i = this.painter.addHover(t, e); return this.refreshHover(), i } }, removeHover: function(t) { this.painter.removeHover && (this.painter.removeHover(t), this.refreshHover()) }, clearHover: function() { this.painter.clearHover && (this.painter.clearHover(), this.refreshHover()) }, refreshHover: function() { this._needsRefreshHover = !0 }, refreshHoverImmediately: function() { this._needsRefreshHover = !1, this.painter.refreshHover && this.painter.refreshHover() }, resize: function(t) { t = t || {}, this.painter.resize(t.width, t.height), this.handler.resize() }, clearAnimation: function() { this.animation.clear() }, getWidth: function() { return this.painter.getWidth() }, getHeight: function() { return this.painter.getHeight() }, pathToImage: function(t, e) { return this.painter.pathToImage(t, e) }, setCursorStyle: function(t) { this.handler.setCursorStyle(t) }, findHover: function(t, e) { return this.handler.findHover(t, e) }, on: function(t, e, i) { this.handler.on(t, e, i) }, off: function(t, e) { this.handler.off(t, e) }, trigger: function(t, e) { this.handler.trigger(t, e) }, clear: function() { this.storage.delRoot(), this.painter.clear() }, dispose: function() { this.animation.stop(), this.clear(), this.storage.dispose(), this.painter.dispose(), this.handler.dispose(), this.animation = this.storage = this.painter = this.handler = null, function(t) { delete Lo[t] }(this.id) } }; var Oo = (Object.freeze || Object)({ version: "4.3.1", init: ko, dispose: function(t) { if (t) t.dispose(); else { for (var e in Lo) Lo.hasOwnProperty(e) && Lo[e].dispose(); Lo = {} } return this }, getInstance: function(t) { return Lo[t] }, registerPainter: Po }) , Eo = E , Ro = z , zo = L , Bo = "series\0"; function Vo(t) { return t instanceof Array ? t : null == t ? [] : [t] } function Go(t, e, i) { if (t) { t[e] = t[e] || {}, t.emphasis = t.emphasis || {}, t.emphasis[e] = t.emphasis[e] || {}; for (var n = 0, o = i.length; n < o; n++) { var a = i[n]; !t.emphasis[e].hasOwnProperty(a) && t[e].hasOwnProperty(a) && (t.emphasis[e][a] = t[e][a]) } } } var Fo = ["fontStyle", "fontWeight", "fontSize", "fontFamily", "rich", "tag", "color", "textBorderColor", "textBorderWidth", "width", "height", "lineHeight", "align", "verticalAlign", "baseline", "shadowColor", "shadowBlur", "shadowOffsetX", "shadowOffsetY", "textShadowColor", "textShadowBlur", "textShadowOffsetX", "textShadowOffsetY", "backgroundColor", "borderColor", "borderWidth", "borderRadius", "padding"]; function Wo(t) { return !Ro(t) || zo(t) || t instanceof Date ? t : t.value } function Ho(t, o) { o = (o || []).slice(); var a = O(t || [], function(t, e) { return { exist: t } }); return Eo(o, function(t, e) { if (Ro(t)) { for (var i = 0; i < a.length; i++) if (!a[i].option && null != t.id && a[i].exist.id === t.id + "") return a[i].option = t, void (o[e] = null); for (i = 0; i < a.length; i++) { var n = a[i].exist; if (!(a[i].option || null != n.id && null != t.id || null == t.name || Xo(t) || Xo(n) || n.name !== t.name + "")) return a[i].option = t, void (o[e] = null) } } }), Eo(o, function(t, e) { if (Ro(t)) { for (var i = 0; i < a.length; i++) { var n = a[i].exist; if (!a[i].option && !Xo(n) && null == t.id) { a[i].option = t; break } } i >= a.length && a.push({ option: t }) } }), a } function Zo(t) { var r = Q(); Eo(t, function(t, e) { var i = t.exist; i && r.set(i.id, t) }), Eo(t, function(t, e) { var i = t.option; Y(!i || null == i.id || !r.get(i.id) || r.get(i.id) === t, "id duplicates: " + (i && i.id)), i && null != i.id && r.set(i.id, t), t.keyInfo || (t.keyInfo = {}) }), Eo(t, function(t, e) { var i = t.exist , n = t.option , o = t.keyInfo; if (Ro(n)) { if (o.name = null != n.name ? n.name + "" : i ? i.name : Bo + e, i) o.id = i.id; else if (null != n.id) o.id = n.id + ""; else for (var a = 0; o.id = "\0" + o.name + "\0" + a++, r.get(o.id); ) ; r.set(o.id, t) } }) } function Uo(t) { var e = t.name; return !(!e || !e.indexOf(Bo)) } function Xo(t) { return Ro(t) && t.id && 0 === (t.id + "").indexOf("\0_ec_\0") } function Yo(e, t) { return null != t.dataIndexInside ? t.dataIndexInside : null != t.dataIndex ? L(t.dataIndex) ? O(t.dataIndex, function(t) { return e.indexOfRawIndex(t) }) : e.indexOfRawIndex(t.dataIndex) : null != t.name ? L(t.name) ? O(t.name, function(t) { return e.indexOfName(t) }) : e.indexOfName(t.name) : void 0 } function jo() { var e = "__\0ec_inner_" + qo++ + "_" + Math.random().toFixed(5); return function(t) { return t[e] || (t[e] = {}) } } var qo = 0; function Ko(s, l, u) { if (R(l)) { var t = {}; t[l + "Index"] = 0, l = t } var e = u && u.defaultMainType; !e || $o(l, e + "Index") || $o(l, e + "Id") || $o(l, e + "Name") || (l[e + "Index"] = 0); var h = {}; return Eo(l, function(t, e) { t = l[e]; if ("dataIndex" !== e && "dataIndexInside" !== e) { var i = e.match(/^(\w+)(Index|Id|Name)$/) || [] , n = i[1] , o = (i[2] || "").toLowerCase(); if (!(!n || !o || null == t || "index" === o && "none" === t || u && u.includeMainTypes && _(u.includeMainTypes, n) < 0)) { var a = { mainType: n }; "index" === o && "all" === t || (a[o] = t); var r = s.queryComponents(a); h[n + "Models"] = r, h[n + "Model"] = r[0] } } else h[e] = t }), h } function $o(t, e) { return t && t.hasOwnProperty(e) } function Jo(t, e, i) { t.setAttribute ? t.setAttribute(e, i) : t[e] = i } function Qo(t) { return "auto" === t ? v.domSupported ? "html" : "richText" : t || "html" } function ta(t, i) { var n = Q() , o = []; return E(t, function(t) { var e = i(t); (n.get(e) || (o.push(e), n.set(e, []))).push(t) }), { keys: o, buckets: n } } var ea = "." , ia = "___EC__COMPONENT__CONTAINER___"; function na(t) { var e = { main: "", sub: "" }; return t && (t = t.split(ea), e.main = t[0] || "", e.sub = t[1] || ""), e } function oa(t) { (t.$constructor = t).extend = function(t) { function e() { t.$constructor ? t.$constructor.apply(this, arguments) : i.apply(this, arguments) } var i = this; return P(e.prototype, t), e.extend = this.extend, e.superCall = sa, e.superApply = la, w(e, this), e.superClass = i, e } } var aa = 0; function ra(t) { var e = ["__\0is_clz", aa++, Math.random().toFixed(3)].join("_"); t.prototype[e] = !0, t.isInstance = function(t) { return !(!t || !t[e]) } } function sa(t, e) { var i = U(arguments, 2); return this.superClass.prototype[e].apply(t, i) } function la(t, e, i) { return this.superClass.prototype[e].apply(t, i) } function ua(i, t) { t = t || {}; var o = {}; if (i.registerClass = function(t, e) { if (e) if (function(t) { Y(/^[a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)?$/.test(t), 'componentType "' + t + '" illegal') }(e), (e = na(e)).sub) { if (e.sub !== ia) { (function(t) { var e = o[t.main]; e && e[ia] || ((e = o[t.main] = {})[ia] = !0); return e } )(e)[e.sub] = t } } else o[e.main] = t; return t } , i.getClass = function(t, e, i) { var n = o[t]; if (n && n[ia] && (n = e ? n[e] : null), i && !n) throw new Error(e ? "Component " + t + "." + (e || "") + " not exists. Load it first." : t + ".type should be specified."); return n } , i.getClassesByMainType = function(t) { t = na(t); var i = [] , e = o[t.main]; return e && e[ia] ? E(e, function(t, e) { e !== ia && i.push(t) }) : i.push(e), i } , i.hasClass = function(t) { return t = na(t), !!o[t.main] } , i.getAllClassMainTypes = function() { var i = []; return E(o, function(t, e) { i.push(e) }), i } , i.hasSubTypes = function(t) { t = na(t); var e = o[t.main]; return e && e[ia] } , i.parseClassType = na, t.registerWhenExtend) { var n = i.extend; n && (i.extend = function(t) { var e = n.call(this, t); return i.registerClass(e, t.type) } ) } return i } function ha(s) { for (var t = 0; t < s.length; t++) s[t][1] || (s[t][1] = s[t][0]); return function(t, e, i) { for (var n = {}, o = 0; o < s.length; o++) { var a = s[o][1]; if (!(e && 0 <= _(e, a) || i && _(i, a) < 0)) { var r = t.getShallow(a); null != r && (n[s[o][0]] = r) } } return n } } var ca = ha([["lineWidth", "width"], ["stroke", "color"], ["opacity"], ["shadowBlur"], ["shadowOffsetX"], ["shadowOffsetY"], ["shadowColor"]]) , da = { getLineStyle: function(t) { var e = ca(this, t); return e.lineDash = this.getLineDash(e.lineWidth), e }, getLineDash: function(t) { null == t && (t = 1); var e = this.get("type") , i = Math.max(t, 2) , n = 4 * t; return "solid" !== e && null != e && ("dashed" === e ? [n, n] : [i, i]) } } , fa = ha([["fill", "color"], ["shadowBlur"], ["shadowOffsetX"], ["shadowOffsetY"], ["opacity"], ["shadowColor"]]) , pa = { getAreaStyle: function(t, e) { return fa(this, t, e) } } , ga = Math.pow , ma = Math.sqrt , va = 1e-8 , ya = 1e-4 , xa = ma(3) , _a = 1 / 3 , wa = ot() , ba = ot() , Sa = ot(); function Ma(t) { return -va < t && t < va } function Ia(t) { return va < t || t < -va } function Ta(t, e, i, n, o) { var a = 1 - o; return a * a * (a * t + 3 * o * e) + o * o * (o * n + 3 * a * i) } function Aa(t, e, i, n, o) { var a = 1 - o; return 3 * (((e - t) * a + 2 * (i - e) * o) * a + (n - i) * o * o) } function Da(t, e, i, n, o) { var a = 6 * i - 12 * e + 6 * t , r = 9 * e + 3 * n - 3 * t - 9 * i , s = 3 * e - 3 * t , l = 0; if (Ma(r)) { if (Ia(a)) 0 <= (h = -s / a) && h <= 1 && (o[l++] = h) } else { var u = a * a - 4 * r * s; if (Ma(u)) o[0] = -a / (2 * r); else if (0 < u) { var h, c = ma(u), d = (-a - c) / (2 * r); 0 <= (h = (-a + c) / (2 * r)) && h <= 1 && (o[l++] = h), 0 <= d && d <= 1 && (o[l++] = d) } } return l } function Ca(t, e, i, n, o, a) { var r = (e - t) * o + t , s = (i - e) * o + e , l = (n - i) * o + i , u = (s - r) * o + r , h = (l - s) * o + s , c = (h - u) * o + u; a[0] = t, a[1] = r, a[2] = u, a[3] = c, a[4] = c, a[5] = h, a[6] = l, a[7] = n } function La(t, e, i, n) { var o = 1 - n; return o * (o * t + 2 * n * e) + n * n * i } function ka(t, e, i, n) { return 2 * ((1 - n) * (e - t) + n * (i - e)) } function Pa(t, e, i) { var n = t + i - 2 * e; return 0 == n ? .5 : (t - e) / n } function Na(t, e, i, n, o) { var a = (e - t) * n + t , r = (i - e) * n + e , s = (r - a) * n + a; o[0] = t, o[1] = a, o[2] = s, o[3] = s, o[4] = r, o[5] = i } var Oa = Math.min , Ea = Math.max , Ra = Math.sin , za = Math.cos , Ba = 2 * Math.PI , Va = ot() , Ga = ot() , Fa = ot(); function Wa(t, e, i) { if (0 !== t.length) { var n, o = t[0], a = o[0], r = o[0], s = o[1], l = o[1]; for (n = 1; n < t.length; n++) o = t[n], a = Oa(a, o[0]), r = Ea(r, o[0]), s = Oa(s, o[1]), l = Ea(l, o[1]); e[0] = a, e[1] = s, i[0] = r, i[1] = l } } function Ha(t, e, i, n, o, a) { o[0] = Oa(t, i), o[1] = Oa(e, n), a[0] = Ea(t, i), a[1] = Ea(e, n) } var Za = [] , Ua = []; function Xa(t, e, i, n, o, a, r, s, l, u) { var h, c = Da, d = Ta, f = c(t, i, o, r, Za); for (l[0] = 1 / 0, l[1] = 1 / 0, u[0] = -1 / 0, u[1] = -1 / 0, h = 0; h < f; h++) { var p = d(t, i, o, r, Za[h]); l[0] = Oa(p, l[0]), u[0] = Ea(p, u[0]) } for (f = c(e, n, a, s, Ua), h = 0; h < f; h++) { var g = d(e, n, a, s, Ua[h]); l[1] = Oa(g, l[1]), u[1] = Ea(g, u[1]) } l[0] = Oa(t, l[0]), u[0] = Ea(t, u[0]), l[0] = Oa(r, l[0]), u[0] = Ea(r, u[0]), l[1] = Oa(e, l[1]), u[1] = Ea(e, u[1]), l[1] = Oa(s, l[1]), u[1] = Ea(s, u[1]) } function Ya(t, e, i, n, o, a, r, s, l) { var u = St , h = Mt , c = Math.abs(o - a); if (c % Ba < 1e-4 && 1e-4 < c) return s[0] = t - i, s[1] = e - n, l[0] = t + i, void (l[1] = e + n); if (Va[0] = za(o) * i + t, Va[1] = Ra(o) * n + e, Ga[0] = za(a) * i + t, Ga[1] = Ra(a) * n + e, u(s, Va, Ga), h(l, Va, Ga), (o %= Ba) < 0 && (o += Ba), (a %= Ba) < 0 && (a += Ba), a < o && !r ? a += Ba : o < a && r && (o += Ba), r) { var d = a; a = o, o = d } for (var f = 0; f < a; f += Math.PI / 2) o < f && (Fa[0] = za(f) * i + t, Fa[1] = Ra(f) * n + e, u(s, Fa, s), h(l, Fa, l)) } var ja = { M: 1, L: 2, C: 3, Q: 4, A: 5, Z: 6, R: 7 } , qa = [] , Ka = [] , $a = [] , Ja = [] , Qa = Math.min , tr = Math.max , er = Math.cos , ir = Math.sin , nr = Math.sqrt , or = Math.abs , ar = "undefined" != typeof Float32Array , rr = function(t) { this._saveData = !t, this._saveData && (this.data = []), this._ctx = null }; function sr(t, e, i, n, o, a, r) { if (0 === o) return !1; var s = o , l = 0; if (e + s < r && n + s < r || r < e - s && r < n - s || t + s < a && i + s < a || a < t - s && a < i - s) return !1; if (t === i) return Math.abs(a - t) <= s / 2; var u = (l = (e - n) / (t - i)) * a - r + (t * n - i * e) / (t - i); return u * u / (l * l + 1) <= s / 2 * s / 2 } function lr(t, e, i, n, o, a, r, s, l, u, h) { if (0 === l) return !1; var c = l; return !(e + c < h && n + c < h && a + c < h && s + c < h || h < e - c && h < n - c && h < a - c && h < s - c || t + c < u && i + c < u && o + c < u && r + c < u || u < t - c && u < i - c && u < o - c && u < r - c) && function(t, e, i, n, o, a, r, s, l, u, h) { var c, d, f, p, g, m = .005, v = 1 / 0; wa[0] = l, wa[1] = u; for (var y = 0; y < 1; y += .05) ba[0] = Ta(t, i, o, r, y), ba[1] = Ta(e, n, a, s, y), (p = _t(wa, ba)) < v && (c = y, v = p); v = 1 / 0; for (var x = 0; x < 32 && !(m < ya); x++) d = c - m, f = c + m, ba[0] = Ta(t, i, o, r, d), ba[1] = Ta(e, n, a, s, d), p = _t(ba, wa), 0 <= d && p < v ? (c = d, v = p) : (Sa[0] = Ta(t, i, o, r, f), Sa[1] = Ta(e, n, a, s, f), g = _t(Sa, wa), f <= 1 && g < v ? (c = f, v = g) : m *= .5); return h && (h[0] = Ta(t, i, o, r, c), h[1] = Ta(e, n, a, s, c)), ma(v) }(t, e, i, n, o, a, r, s, u, h, null) <= c / 2 } function ur(t, e, i, n, o, a, r, s, l) { if (0 === r) return !1; var u = r; return !(e + u < l && n + u < l && a + u < l || l < e - u && l < n - u && l < a - u || t + u < s && i + u < s && o + u < s || s < t - u && s < i - u && s < o - u) && function(t, e, i, n, o, a, r, s, l) { var u, h = .005, c = 1 / 0; wa[0] = r, wa[1] = s; for (var d = 0; d < 1; d += .05) { ba[0] = La(t, i, o, d), ba[1] = La(e, n, a, d), (m = _t(wa, ba)) < c && (u = d, c = m) } c = 1 / 0; for (var f = 0; f < 32 && !(h < ya); f++) { var p = u - h , g = u + h; ba[0] = La(t, i, o, p), ba[1] = La(e, n, a, p); var m = _t(ba, wa); if (0 <= p && m < c) u = p, c = m; else { Sa[0] = La(t, i, o, g), Sa[1] = La(e, n, a, g); var v = _t(Sa, wa); g <= 1 && v < c ? (u = g, c = v) : h *= .5 } } return l && (l[0] = La(t, i, o, u), l[1] = La(e, n, a, u)), ma(c) }(t, e, i, n, o, a, s, l, null) <= u / 2 } rr.prototype = { constructor: rr, _xi: 0, _yi: 0, _x0: 0, _y0: 0, _ux: 0, _uy: 0, _len: 0, _lineDash: null, _dashOffset: 0, _dashIdx: 0, _dashSum: 0, setScale: function(t, e, i) { i = i || 0, this._ux = or(i / pi / t) || 0, this._uy = or(i / pi / e) || 0 }, getContext: function() { return this._ctx }, beginPath: function(t) { return (this._ctx = t) && t.beginPath(), t && (this.dpr = t.dpr), this._saveData && (this._len = 0), this._lineDash && (this._lineDash = null, this._dashOffset = 0), this }, moveTo: function(t, e) { return this.addData(ja.M, t, e), this._ctx && this._ctx.moveTo(t, e), this._x0 = t, this._y0 = e, this._xi = t, this._yi = e, this }, lineTo: function(t, e) { var i = or(t - this._xi) > this._ux || or(e - this._yi) > this._uy || this._len < 5; return this.addData(ja.L, t, e), this._ctx && i && (this._needsDash() ? this._dashedLineTo(t, e) : this._ctx.lineTo(t, e)), i && (this._xi = t, this._yi = e), this }, bezierCurveTo: function(t, e, i, n, o, a) { return this.addData(ja.C, t, e, i, n, o, a), this._ctx && (this._needsDash() ? this._dashedBezierTo(t, e, i, n, o, a) : this._ctx.bezierCurveTo(t, e, i, n, o, a)), this._xi = o, this._yi = a, this }, quadraticCurveTo: function(t, e, i, n) { return this.addData(ja.Q, t, e, i, n), this._ctx && (this._needsDash() ? this._dashedQuadraticTo(t, e, i, n) : this._ctx.quadraticCurveTo(t, e, i, n)), this._xi = i, this._yi = n, this }, arc: function(t, e, i, n, o, a) { return this.addData(ja.A, t, e, i, i, n, o - n, 0, a ? 0 : 1), this._ctx && this._ctx.arc(t, e, i, n, o, a), this._xi = er(o) * i + t, this._yi = ir(o) * i + e, this }, arcTo: function(t, e, i, n, o) { return this._ctx && this._ctx.arcTo(t, e, i, n, o), this }, rect: function(t, e, i, n) { return this._ctx && this._ctx.rect(t, e, i, n), this.addData(ja.R, t, e, i, n), this }, closePath: function() { this.addData(ja.Z); var t = this._ctx , e = this._x0 , i = this._y0; return t && (this._needsDash() && this._dashedLineTo(e, i), t.closePath()), this._xi = e, this._yi = i, this }, fill: function(t) { t && t.fill(), this.toStatic() }, stroke: function(t) { t && t.stroke(), this.toStatic() }, setLineDash: function(t) { if (t instanceof Array) { this._lineDash = t; for (var e = this._dashIdx = 0, i = 0; i < t.length; i++) e += t[i]; this._dashSum = e } return this }, setLineDashOffset: function(t) { return this._dashOffset = t, this }, len: function() { return this._len }, setData: function(t) { var e = t.length; this.data && this.data.length === e || !ar || (this.data = new Float32Array(e)); for (var i = 0; i < e; i++) this.data[i] = t[i]; this._len = e }, appendPath: function(t) { t instanceof Array || (t = [t]); for (var e = t.length, i = 0, n = this._len, o = 0; o < e; o++) i += t[o].len(); ar && this.data instanceof Float32Array && (this.data = new Float32Array(n + i)); for (o = 0; o < e; o++) for (var a = t[o].data, r = 0; r < a.length; r++) this.data[n++] = a[r]; this._len = n }, addData: function(t) { if (this._saveData) { var e = this.data; this._len + arguments.length > e.length && (this._expandData(), e = this.data); for (var i = 0; i < arguments.length; i++) e[this._len++] = arguments[i]; this._prevCmd = t } }, _expandData: function() { if (!(this.data instanceof Array)) { for (var t = [], e = 0; e < this._len; e++) t[e] = this.data[e]; this.data = t } }, _needsDash: function() { return this._lineDash }, _dashedLineTo: function(t, e) { var i, n, o = this._dashSum, a = this._dashOffset, r = this._lineDash, s = this._ctx, l = this._xi, u = this._yi, h = t - l, c = e - u, d = nr(h * h + c * c), f = l, p = u, g = r.length; for (a < 0 && (a = o + a), f -= (a %= o) * (h /= d), p -= a * (c /= d); 0 < h && f <= t || h < 0 && t <= f || 0 === h && (0 < c && p <= e || c < 0 && e <= p); ) f += h * (i = r[n = this._dashIdx]), p += c * i, this._dashIdx = (n + 1) % g, 0 < h && f < l || h < 0 && l < f || 0 < c && p < u || c < 0 && u < p || s[n % 2 ? "moveTo" : "lineTo"](0 <= h ? Qa(f, t) : tr(f, t), 0 <= c ? Qa(p, e) : tr(p, e)); h = f - t, c = p - e, this._dashOffset = -nr(h * h + c * c) }, _dashedBezierTo: function(t, e, i, n, o, a) { var r, s, l, u, h, c = this._dashSum, d = this._dashOffset, f = this._lineDash, p = this._ctx, g = this._xi, m = this._yi, v = Ta, y = 0, x = this._dashIdx, _ = f.length, w = 0; for (d < 0 && (d = c + d), d %= c, r = 0; r < 1; r += .1) s = v(g, t, i, o, r + .1) - v(g, t, i, o, r), l = v(m, e, n, a, r + .1) - v(m, e, n, a, r), y += nr(s * s + l * l); for (; x < _ && !(d < (w += f[x])); x++) ; for (r = (w - d) / y; r <= 1; ) u = v(g, t, i, o, r), h = v(m, e, n, a, r), x % 2 ? p.moveTo(u, h) : p.lineTo(u, h), r += f[x] / y, x = (x + 1) % _; x % 2 != 0 && p.lineTo(o, a), s = o - u, l = a - h, this._dashOffset = -nr(s * s + l * l) }, _dashedQuadraticTo: function(t, e, i, n) { var o = i , a = n; i = (i + 2 * t) / 3, n = (n + 2 * e) / 3, t = (this._xi + 2 * t) / 3, e = (this._yi + 2 * e) / 3, this._dashedBezierTo(t, e, i, n, o, a) }, toStatic: function() { var t = this.data; t instanceof Array && (t.length = this._len, ar && (this.data = new Float32Array(t))) }, getBoundingRect: function() { qa[0] = qa[1] = $a[0] = $a[1] = Number.MAX_VALUE, Ka[0] = Ka[1] = Ja[0] = Ja[1] = -Number.MAX_VALUE; for (var t, e, i, n, o, a, r, s, l, u, h, c, d, f, p = this.data, g = 0, m = 0, v = 0, y = 0, x = 0; x < p.length; ) { var _ = p[x++]; switch (1 === x && (v = g = p[x], y = m = p[x + 1]), _) { case ja.M: g = v = p[x++], m = y = p[x++], $a[0] = v, $a[1] = y, Ja[0] = v, Ja[1] = y; break; case ja.L: Ha(g, m, p[x], p[x + 1], $a, Ja), g = p[x++], m = p[x++]; break; case ja.C: Xa(g, m, p[x++], p[x++], p[x++], p[x++], p[x], p[x + 1], $a, Ja), g = p[x++], m = p[x++]; break; case ja.Q: t = g, e = m, i = p[x++], n = p[x++], o = p[x], a = p[x + 1], r = $a, s = Ja, u = l = void 0, u = La, h = Ea(Oa((l = Pa)(t, i, o), 1), 0), c = Ea(Oa(l(e, n, a), 1), 0), d = u(t, i, o, h), f = u(e, n, a, c), r[0] = Oa(t, o, d), r[1] = Oa(e, a, f), s[0] = Ea(t, o, d), s[1] = Ea(e, a, f), g = p[x++], m = p[x++]; break; case ja.A: var w = p[x++] , b = p[x++] , S = p[x++] , M = p[x++] , I = p[x++] , T = p[x++] + I; x += 1; var A = 1 - p[x++]; 1 === x && (v = er(I) * S + w, y = ir(I) * M + b), Ya(w, b, S, M, I, T, A, $a, Ja), g = er(T) * S + w, m = ir(T) * M + b; break; case ja.R: Ha(v = g = p[x++], y = m = p[x++], v + p[x++], y + p[x++], $a, Ja); break; case ja.Z: g = v, m = y } St(qa, qa, $a), Mt(Ka, Ka, Ja) } return 0 === x && (qa[0] = qa[1] = Ka[0] = Ka[1] = 0), new Di(qa[0],qa[1],Ka[0] - qa[0],Ka[1] - qa[1]) }, rebuildPath: function(t) { for (var e, i, n, o, a, r, s = this.data, l = this._ux, u = this._uy, h = this._len, c = 0; c < h; ) { var d = s[c++]; switch (1 === c && (e = n = s[c], i = o = s[c + 1]), d) { case ja.M: e = n = s[c++], i = o = s[c++], t.moveTo(n, o); break; case ja.L: a = s[c++], r = s[c++], (or(a - n) > l || or(r - o) > u || c === h - 1) && (t.lineTo(a, r), n = a, o = r); break; case ja.C: t.bezierCurveTo(s[c++], s[c++], s[c++], s[c++], s[c++], s[c++]), n = s[c - 2], o = s[c - 1]; break; case ja.Q: t.quadraticCurveTo(s[c++], s[c++], s[c++], s[c++]), n = s[c - 2], o = s[c - 1]; break; case ja.A: var f = s[c++] , p = s[c++] , g = s[c++] , m = s[c++] , v = s[c++] , y = s[c++] , x = s[c++] , _ = s[c++] , w = m < g ? g : m , b = m < g ? 1 : g / m , S = m < g ? m / g : 1 , M = v + y; .001 < Math.abs(g - m) ? (t.translate(f, p), t.rotate(x), t.scale(b, S), t.arc(0, 0, w, v, M, 1 - _), t.scale(1 / b, 1 / S), t.rotate(-x), t.translate(-f, -p)) : t.arc(f, p, w, v, M, 1 - _), 1 === c && (e = er(v) * g + f, i = ir(v) * m + p), n = er(M) * g + f, o = ir(M) * m + p; break; case ja.R: e = n = s[c], i = o = s[c + 1], t.rect(s[c++], s[c++], s[c++], s[c++]); break; case ja.Z: t.closePath(), n = e, o = i } } } }, rr.CMD = ja; var hr = 2 * Math.PI; function cr(t) { return (t %= hr) < 0 && (t += hr), t } var dr = 2 * Math.PI; function fr(t, e, i, n, o, a, r, s, l) { if (0 === r) return !1; var u = r; s -= t, l -= e; var h = Math.sqrt(s * s + l * l); if (i < h - u || h + u < i) return !1; if (Math.abs(n - o) % dr < 1e-4) return !0; if (a) { var c = n; n = cr(o), o = cr(c) } else n = cr(n), o = cr(o); o < n && (o += dr); var d = Math.atan2(l, s); return d < 0 && (d += dr), n <= d && d <= o || n <= d + dr && d + dr <= o } function pr(t, e, i, n, o, a) { if (e < a && n < a || a < e && a < n) return 0; if (n === e) return 0; var r = n < e ? 1 : -1 , s = (a - e) / (n - e); 1 != s && 0 != s || (r = n < e ? .5 : -.5); var l = s * (i - t) + t; return l === o ? 1 / 0 : o < l ? r : 0 } var gr = rr.CMD , mr = 2 * Math.PI , vr = 1e-4; var yr = [-1, -1, -1] , xr = [-1, -1]; function _r(t, e, i, n, o, a, r, s, l, u) { if (e < u && n < u && a < u && s < u || u < e && u < n && u < a && u < s) return 0; var h, c = function(t, e, i, n, o, a) { var r = n + 3 * (e - i) - t , s = 3 * (i - 2 * e + t) , l = 3 * (e - t) , u = t - o , h = s * s - 3 * r * l , c = s * l - 9 * r * u , d = l * l - 3 * s * u , f = 0; if (Ma(h) && Ma(c)) { if (Ma(s)) a[0] = 0; else 0 <= (M = -l / s) && M <= 1 && (a[f++] = M) } else { var p = c * c - 4 * h * d; if (Ma(p)) { var g = c / h , m = -g / 2; 0 <= (M = -s / r + g) && M <= 1 && (a[f++] = M), 0 <= m && m <= 1 && (a[f++] = m) } else if (0 < p) { var v = ma(p) , y = h * s + 1.5 * r * (-c + v) , x = h * s + 1.5 * r * (-c - v); 0 <= (M = (-s - ((y = y < 0 ? -ga(-y, _a) : ga(y, _a)) + (x = x < 0 ? -ga(-x, _a) : ga(x, _a)))) / (3 * r)) && M <= 1 && (a[f++] = M) } else { var _ = (2 * h * s - 3 * r * c) / (2 * ma(h * h * h)) , w = Math.acos(_) / 3 , b = ma(h) , S = Math.cos(w) , M = (-s - 2 * b * S) / (3 * r) , I = (m = (-s + b * (S + xa * Math.sin(w))) / (3 * r), (-s + b * (S - xa * Math.sin(w))) / (3 * r)); 0 <= M && M <= 1 && (a[f++] = M), 0 <= m && m <= 1 && (a[f++] = m), 0 <= I && I <= 1 && (a[f++] = I) } } return f }(e, n, a, s, u, yr); if (0 === c) return 0; for (var d, f, p = 0, g = -1, m = 0; m < c; m++) { var v = yr[m] , y = 0 === v || 1 === v ? .5 : 1; Ta(t, i, o, r, v) < l || (g < 0 && (g = Da(e, n, a, s, xr), xr[1] < xr[0] && 1 < g && (void 0, h = xr[0], xr[0] = xr[1], xr[1] = h), d = Ta(e, n, a, s, xr[0]), 1 < g && (f = Ta(e, n, a, s, xr[1]))), 2 === g ? v < xr[0] ? p += d < e ? y : -y : v < xr[1] ? p += f < d ? y : -y : p += s < f ? y : -y : v < xr[0] ? p += d < e ? y : -y : p += s < d ? y : -y) } return p } function wr(t, e, i, n, o, a, r, s) { if (e < s && n < s && a < s || s < e && s < n && s < a) return 0; var l = function(t, e, i, n, o) { var a = t - 2 * e + i , r = 2 * (e - t) , s = t - n , l = 0; if (Ma(a)) { if (Ia(r)) 0 <= (h = -s / r) && h <= 1 && (o[l++] = h) } else { var u = r * r - 4 * a * s; if (Ma(u)) 0 <= (h = -r / (2 * a)) && h <= 1 && (o[l++] = h); else if (0 < u) { var h, c = ma(u), d = (-r - c) / (2 * a); 0 <= (h = (-r + c) / (2 * a)) && h <= 1 && (o[l++] = h), 0 <= d && d <= 1 && (o[l++] = d) } } return l }(e, n, a, s, yr); if (0 === l) return 0; var u = Pa(e, n, a); if (0 <= u && u <= 1) { for (var h = 0, c = La(e, n, a, u), d = 0; d < l; d++) { var f = 0 === yr[d] || 1 === yr[d] ? .5 : 1; La(t, i, o, yr[d]) < r || (yr[d] < u ? h += c < e ? f : -f : h += a < c ? f : -f) } return h } f = 0 === yr[0] || 1 === yr[0] ? .5 : 1; return La(t, i, o, yr[0]) < r ? 0 : a < e ? f : -f } function br(t, e, i, n, o, a, r, s) { if (i < (s -= e) || s < -i) return 0; var l = Math.sqrt(i * i - s * s); yr[0] = -l, yr[1] = l; var u = Math.abs(n - o); if (u < 1e-4) return 0; if (u % mr < 1e-4) { o = mr; var h = a ? 1 : -1; return r >= yr[n = 0] + t && r <= yr[1] + t ? h : 0 } if (a) { l = n; n = cr(o), o = cr(l) } else n = cr(n), o = cr(o); o < n && (o += mr); for (var c = 0, d = 0; d < 2; d++) { var f = yr[d]; if (r < f + t) { var p = Math.atan2(s, f); h = a ? 1 : -1; p < 0 && (p = mr + p), (n <= p && p <= o || n <= p + mr && p + mr <= o) && (p > Math.PI / 2 && p < 1.5 * Math.PI && (h = -h), c += h) } } return c } function Sr(t, e, i, n, o) { for (var a = 0, r = 0, s = 0, l = 0, u = 0, h = 0; h < t.length; ) { var c = t[h++]; switch (c === gr.M && 1 < h && (i || (a += pr(r, s, l, u, n, o))), 1 === h && (l = r = t[h], u = s = t[h + 1]), c) { case gr.M: r = l = t[h++], s = u = t[h++]; break; case gr.L: if (i) { if (sr(r, s, t[h], t[h + 1], e, n, o)) return !0 } else a += pr(r, s, t[h], t[h + 1], n, o) || 0; r = t[h++], s = t[h++]; break; case gr.C: if (i) { if (lr(r, s, t[h++], t[h++], t[h++], t[h++], t[h], t[h + 1], e, n, o)) return !0 } else a += _r(r, s, t[h++], t[h++], t[h++], t[h++], t[h], t[h + 1], n, o) || 0; r = t[h++], s = t[h++]; break; case gr.Q: if (i) { if (ur(r, s, t[h++], t[h++], t[h], t[h + 1], e, n, o)) return !0 } else a += wr(r, s, t[h++], t[h++], t[h], t[h + 1], n, o) || 0; r = t[h++], s = t[h++]; break; case gr.A: var d = t[h++] , f = t[h++] , p = t[h++] , g = t[h++] , m = t[h++] , v = t[h++]; h += 1; var y = 1 - t[h++] , x = Math.cos(m) * p + d , _ = Math.sin(m) * g + f; 1 < h ? a += pr(r, s, x, _, n, o) : (l = x, u = _); var w = (n - d) * g / p + d; if (i) { if (fr(d, f, g, m, m + v, y, e, w, o)) return !0 } else a += br(d, f, g, m, m + v, y, w, o); r = Math.cos(m + v) * p + d, s = Math.sin(m + v) * g + f; break; case gr.R: l = r = t[h++], u = s = t[h++]; x = l + t[h++], _ = u + t[h++]; if (i) { if (sr(l, u, x, u, e, n, o) || sr(x, u, x, _, e, n, o) || sr(x, _, l, _, e, n, o) || sr(l, _, l, u, e, n, o)) return !0 } else a += pr(x, u, x, _, n, o), a += pr(l, _, l, u, n, o); break; case gr.Z: if (i) { if (sr(r, s, l, u, e, n, o)) return !0 } else a += pr(r, s, l, u, n, o); r = l, s = u } } return i || function(t, e) { return Math.abs(t - e) < vr }(s, u) || (a += pr(r, s, l, u, n, o) || 0), 0 !== a } var Mr = $i.prototype.getCanvasPattern , Ir = Math.abs , Tr = new rr(!0); function Ar(t) { Jn.call(this, t), this.path = null } Ar.prototype = { constructor: Ar, type: "path", __dirtyPath: !0, strokeContainThreshold: 5, segmentIgnoreThreshold: 0, subPixelOptimize: !1, brush: function(t, e) { var i, n = this.style, o = this.path || Tr, a = n.hasStroke(), r = n.hasFill(), s = n.fill, l = n.stroke, u = r && !!s.colorStops, h = a && !!l.colorStops, c = r && !!s.image, d = a && !!l.image; n.bind(t, this, e), this.setTransform(t), this.__dirty && (u && (i = i || this.getBoundingRect(), this._fillGradient = n.getGradient(t, s, i)), h && (i = i || this.getBoundingRect(), this._strokeGradient = n.getGradient(t, l, i))); u ? t.fillStyle = this._fillGradient : c && (t.fillStyle = Mr.call(s, t)), h ? t.strokeStyle = this._strokeGradient : d && (t.strokeStyle = Mr.call(l, t)); var f = n.lineDash , p = n.lineDashOffset , g = !!t.setLineDash , m = this.getGlobalScale(); if (o.setScale(m[0], m[1], this.segmentIgnoreThreshold), this.__dirtyPath || f && !g && a ? (o.beginPath(t), f && !g && (o.setLineDash(f), o.setLineDashOffset(p)), this.buildPath(o, this.shape, !1), this.path && (this.__dirtyPath = !1)) : (t.beginPath(), this.path.rebuildPath(t)), r) if (null != n.fillOpacity) { var v = t.globalAlpha; t.globalAlpha = n.fillOpacity * n.opacity, o.fill(t), t.globalAlpha = v } else o.fill(t); if (f && g && (t.setLineDash(f), t.lineDashOffset = p), a) if (null != n.strokeOpacity) { v = t.globalAlpha; t.globalAlpha = n.strokeOpacity * n.opacity, o.stroke(t), t.globalAlpha = v } else o.stroke(t); f && g && t.setLineDash([]), null != n.text && (this.restoreTransform(t), this.drawRectText(t, this.getBoundingRect())) }, buildPath: function(t, e, i) {}, createPathProxy: function() { this.path = new rr }, getBoundingRect: function() { var t = this._rect , e = this.style , i = !t; if (i) { var n = this.path; n = n || (this.path = new rr), this.__dirtyPath && (n.beginPath(), this.buildPath(n, this.shape, !1)), t = n.getBoundingRect() } if (this._rect = t, e.hasStroke()) { var o = this._rectWithStroke || (this._rectWithStroke = t.clone()); if (this.__dirty || i) { o.copy(t); var a = e.lineWidth , r = e.strokeNoScale ? this.getLineScale() : 1; e.hasFill() || (a = Math.max(a, this.strokeContainThreshold || 4)), 1e-10 < r && (o.width += a / r, o.height += a / r, o.x -= a / r / 2, o.y -= a / r / 2) } return o } return t }, contain: function(t, e) { var i = this.transformCoordToLocal(t, e) , n = this.getBoundingRect() , o = this.style; if (t = i[0], e = i[1], n.contain(t, e)) { var a = this.path.data; if (o.hasStroke()) { var r = o.lineWidth , s = o.strokeNoScale ? this.getLineScale() : 1; if (1e-10 < s && (o.hasFill() || (r = Math.max(r, this.strokeContainThreshold)), function(t, e, i, n) { return Sr(t, e, !0, i, n) }(a, r / s, t, e))) return !0 } if (o.hasFill()) return function(t, e, i) { return Sr(t, 0, !1, e, i) }(a, t, e) } return !1 }, dirty: function(t) { null == t && (t = !0), t && (this.__dirtyPath = t, this._rect = null), this.__dirty = this.__dirtyText = !0, this.__zr && this.__zr.refresh(), this.__clipTarget && this.__clipTarget.dirty() }, animateShape: function(t) { return this.animate("shape", t) }, attrKV: function(t, e) { "shape" === t ? (this.setShape(e), this.__dirtyPath = !0, this._rect = null) : Jn.prototype.attrKV.call(this, t, e) }, setShape: function(t, e) { var i = this.shape; if (i) { if (z(t)) for (var n in t) t.hasOwnProperty(n) && (i[n] = t[n]); else i[t] = e; this.dirty(!0) } return this }, getLineScale: function() { var t = this.transform; return t && 1e-10 < Ir(t[0] - 1) && 1e-10 < Ir(t[3] - 1) ? Math.sqrt(Ir(t[0] * t[3] - t[2] * t[1])) : 1 } }, Ar.extend = function(o) { function t(t) { Ar.call(this, t), o.style && this.style.extendFrom(o.style, !1); var e = o.shape; if (e) { this.shape = this.shape || {}; var i = this.shape; for (var n in e) !i.hasOwnProperty(n) && e.hasOwnProperty(n) && (i[n] = e[n]) } o.init && o.init.call(this, t) } for (var e in w(t, Ar), o) "style" !== e && "shape" !== e && (t.prototype[e] = o[e]); return t } , w(Ar, Jn); function Dr(t) { return Math.sqrt(t[0] * t[0] + t[1] * t[1]) } var Cr = rr.CMD , Lr = [[], [], []] , kr = Math.sqrt , Pr = Math.atan2 , Nr = function(t, e) { var i, n, o, a, r, s = t.data, l = Cr.M, u = Cr.C, h = Cr.L, c = Cr.R, d = Cr.A, f = Cr.Q; for (a = o = 0; o < s.length; ) { switch (i = s[o++], a = o, n = 0, i) { case l: case h: n = 1; break; case u: n = 3; break; case f: n = 2; break; case d: var p = e[4] , g = e[5] , m = kr(e[0] * e[0] + e[1] * e[1]) , v = kr(e[2] * e[2] + e[3] * e[3]) , y = Pr(-e[1] / v, e[0] / m); s[o] *= m, s[o++] += p, s[o] *= v, s[o++] += g, s[o++] *= m, s[o++] *= v, s[o++] += y, s[o++] += y, a = o += 2; break; case c: x[0] = s[o++], x[1] = s[o++], bt(x, x, e), s[a++] = x[0], s[a++] = x[1], x[0] += s[o++], x[1] += s[o++], bt(x, x, e), s[a++] = x[0], s[a++] = x[1] } for (r = 0; r < n; r++) { var x; (x = Lr[r])[0] = s[o++], x[1] = s[o++], bt(x, x, e), s[a++] = x[0], s[a++] = x[1] } } } , Or = Math.sqrt , Er = Math.sin , Rr = Math.cos , zr = Math.PI , Br = function(t, e) { return (t[0] * e[0] + t[1] * e[1]) / (Dr(t) * Dr(e)) } , Vr = function(t, e) { return (t[0] * e[1] < t[1] * e[0] ? -1 : 1) * Math.acos(Br(t, e)) }; function Gr(t, e, i, n, o, a, r, s, l, u, h) { var c = l * (zr / 180) , d = Rr(c) * (t - i) / 2 + Er(c) * (e - n) / 2 , f = -1 * Er(c) * (t - i) / 2 + Rr(c) * (e - n) / 2 , p = d * d / (r * r) + f * f / (s * s); 1 < p && (r *= Or(p), s *= Or(p)); var g = (o === a ? -1 : 1) * Or((r * r * (s * s) - r * r * (f * f) - s * s * (d * d)) / (r * r * (f * f) + s * s * (d * d))) || 0 , m = g * r * f / s , v = g * -s * d / r , y = (t + i) / 2 + Rr(c) * m - Er(c) * v , x = (e + n) / 2 + Er(c) * m + Rr(c) * v , _ = Vr([1, 0], [(d - m) / r, (f - v) / s]) , w = [(d - m) / r, (f - v) / s] , b = [(-1 * d - m) / r, (-1 * f - v) / s] , S = Vr(w, b); Br(w, b) <= -1 && (S = zr), 1 <= Br(w, b) && (S = 0), 0 === a && 0 < S && (S -= 2 * zr), 1 === a && S < 0 && (S += 2 * zr), h.addData(u, y, x, r, s, _, S, c, a) } var Fr = /([mlvhzcqtsa])([^mlvhzcqtsa]*)/gi , Wr = /-?([0-9]*\.)?[0-9]+([eE]-?[0-9]+)?/g; function Hr(t, e) { var i = function(t) { if (!t) return new rr; for (var e, i = 0, n = 0, o = i, a = n, r = new rr, s = rr.CMD, l = t.match(Fr), u = 0; u < l.length; u++) { for (var h, c = l[u], d = c.charAt(0), f = c.match(Wr) || [], p = f.length, g = 0; g < p; g++) f[g] = parseFloat(f[g]); for (var m = 0; m < p; ) { var v, y, x, _, w, b, S, M = i, I = n; switch (d) { case "l": i += f[m++], n += f[m++], h = s.L, r.addData(h, i, n); break; case "L": i = f[m++], n = f[m++], h = s.L, r.addData(h, i, n); break; case "m": i += f[m++], n += f[m++], h = s.M, r.addData(h, i, n), o = i, a = n, d = "l"; break; case "M": i = f[m++], n = f[m++], h = s.M, r.addData(h, i, n), o = i, a = n, d = "L"; break; case "h": i += f[m++], h = s.L, r.addData(h, i, n); break; case "H": i = f[m++], h = s.L, r.addData(h, i, n); break; case "v": n += f[m++], h = s.L, r.addData(h, i, n); break; case "V": n = f[m++], h = s.L, r.addData(h, i, n); break; case "C": h = s.C, r.addData(h, f[m++], f[m++], f[m++], f[m++], f[m++], f[m++]), i = f[m - 2], n = f[m - 1]; break; case "c": h = s.C, r.addData(h, f[m++] + i, f[m++] + n, f[m++] + i, f[m++] + n, f[m++] + i, f[m++] + n), i += f[m - 2], n += f[m - 1]; break; case "S": v = i, y = n; var T = r.len() , A = r.data; e === s.C && (v += i - A[T - 4], y += n - A[T - 3]), h = s.C, M = f[m++], I = f[m++], i = f[m++], n = f[m++], r.addData(h, v, y, M, I, i, n); break; case "s": v = i, y = n; T = r.len(), A = r.data; e === s.C && (v += i - A[T - 4], y += n - A[T - 3]), h = s.C, M = i + f[m++], I = n + f[m++], i += f[m++], n += f[m++], r.addData(h, v, y, M, I, i, n); break; case "Q": M = f[m++], I = f[m++], i = f[m++], n = f[m++], h = s.Q, r.addData(h, M, I, i, n); break; case "q": M = f[m++] + i, I = f[m++] + n, i += f[m++], n += f[m++], h = s.Q, r.addData(h, M, I, i, n); break; case "T": v = i, y = n; T = r.len(), A = r.data; e === s.Q && (v += i - A[T - 4], y += n - A[T - 3]), i = f[m++], n = f[m++], h = s.Q, r.addData(h, v, y, i, n); break; case "t": v = i, y = n; T = r.len(), A = r.data; e === s.Q && (v += i - A[T - 4], y += n - A[T - 3]), i += f[m++], n += f[m++], h = s.Q, r.addData(h, v, y, i, n); break; case "A": x = f[m++], _ = f[m++], w = f[m++], b = f[m++], S = f[m++], Gr(M = i, I = n, i = f[m++], n = f[m++], b, S, x, _, w, h = s.A, r); break; case "a": x = f[m++], _ = f[m++], w = f[m++], b = f[m++], S = f[m++], Gr(M = i, I = n, i += f[m++], n += f[m++], b, S, x, _, w, h = s.A, r) } } "z" !== d && "Z" !== d || (h = s.Z, r.addData(h), i = o, n = a), e = h } return r.toStatic(), r }(t); return (e = e || {}).buildPath = function(t) { if (t.setData) { t.setData(i.data), (e = t.getContext()) && t.rebuildPath(e) } else { var e = t; i.rebuildPath(e) } } , e.applyTransform = function(t) { Nr(i, t), this.dirty(!0) } , e } function Zr(t, e) { return new Ar(Hr(t, e)) } var Ur = function(t) { Jn.call(this, t) }; Ur.prototype = { constructor: Ur, type: "text", brush: function(t, e) { var i = this.style; this.__dirty && En(i), i.fill = i.stroke = i.shadowBlur = i.shadowColor = i.shadowOffsetX = i.shadowOffsetY = null; var n = i.text; null != n && (n += ""), qn(n, i) ? (this.setTransform(t), zn(this, t, n, i, null, e), this.restoreTransform(t)) : t.__attrCachedBy = Wi.NONE }, getBoundingRect: function() { var t = this.style; if (this.__dirty && En(t), !this._rect) { var e = t.text; null != e ? e += "" : e = ""; var i = gn(t.text + "", t.font, t.textAlign, t.textVerticalAlign, t.textPadding, t.textLineHeight, t.rich); if (i.x += t.x || 0, i.y += t.y || 0, Un(t.textStroke, t.textStrokeWidth)) { var n = t.textStrokeWidth; i.x -= n / 2, i.y -= n / 2, i.width += n, i.height += n } this._rect = i } return this._rect } }, w(Ur, Jn); function Xr(l) { return v.browser.ie && 11 <= v.browser.version ? function() { var t, e = this.__clipPaths, i = this.style; if (e) for (var n = 0; n < e.length; n++) { var o = e[n] , a = o && o.shape , r = o && o.type; if (a && ("sector" === r && a.startAngle === a.endAngle || "rect" === r && (!a.width || !a.height))) { for (var s = 0; s < jr.length; s++) jr[s][2] = i[jr[s][0]], i[jr[s][0]] = jr[s][1]; t = !0; break } } if (l.apply(this, arguments), t) for (s = 0; s < jr.length; s++) i[jr[s][0]] = jr[s][2] } : l } var Yr = Ar.extend({ type: "circle", shape: { cx: 0, cy: 0, r: 0 }, buildPath: function(t, e, i) { i && t.moveTo(e.cx + e.r, e.cy), t.arc(e.cx, e.cy, e.r, 0, 2 * Math.PI, !0) } }) , jr = [["shadowBlur", 0], ["shadowColor", "#000"], ["shadowOffsetX", 0], ["shadowOffsetY", 0]] , qr = Ar.extend({ type: "sector", shape: { cx: 0, cy: 0, r0: 0, r: 0, startAngle: 0, endAngle: 2 * Math.PI, clockwise: !0 }, brush: Xr(Ar.prototype.brush), buildPath: function(t, e) { var i = e.cx , n = e.cy , o = Math.max(e.r0 || 0, 0) , a = Math.max(e.r, 0) , r = e.startAngle , s = e.endAngle , l = e.clockwise , u = Math.cos(r) , h = Math.sin(r); t.moveTo(u * o + i, h * o + n), t.lineTo(u * a + i, h * a + n), t.arc(i, n, a, r, s, !l), t.lineTo(Math.cos(s) * o + i, Math.sin(s) * o + n), 0 !== o && t.arc(i, n, o, s, r, l), t.closePath() } }) , Kr = Ar.extend({ type: "ring", shape: { cx: 0, cy: 0, r: 0, r0: 0 }, buildPath: function(t, e) { var i = e.cx , n = e.cy , o = 2 * Math.PI; t.moveTo(i + e.r, n), t.arc(i, n, e.r, 0, o, !1), t.moveTo(i + e.r0, n), t.arc(i, n, e.r0, 0, o, !0) } }); function $r(t, e, i, n, o, a, r) { var s = .5 * (i - t) , l = .5 * (n - e); return (2 * (e - i) + s + l) * r + (-3 * (e - i) - 2 * s - l) * a + s * o + e } function Jr(t, e, i) { var n = e.points , o = e.smooth; if (n && 2 <= n.length) { if (o && "spline" !== o) { var a = function(t, e, i, n) { var o, a, r, s, l = [], u = [], h = [], c = []; if (n) { r = [1 / 0, 1 / 0], s = [-1 / 0, -1 / 0]; for (var d = 0, f = t.length; d < f; d++) St(r, r, t[d]), Mt(s, s, t[d]); St(r, r, n[0]), Mt(s, s, n[1]) } for (d = 0, f = t.length; d < f; d++) { var p = t[d]; if (i) o = t[d ? d - 1 : f - 1], a = t[(d + 1) % f]; else { if (0 === d || d === f - 1) { l.push(rt(t[d])); continue } o = t[d - 1], a = t[d + 1] } ht(u, a, o), gt(u, u, e); var g = vt(p, o) , m = vt(p, a) , v = g + m; 0 !== v && (g /= v, m /= v), gt(h, u, -g), gt(c, u, m); var y = lt([], p, h) , x = lt([], p, c); n && (Mt(y, y, r), St(y, y, s), Mt(x, x, r), St(x, x, s)), l.push(y), l.push(x) } return i && l.push(l.shift()), l }(n, o, i, e.smoothConstraint); t.moveTo(n[0][0], n[0][1]); for (var r = n.length, s = 0; s < (i ? r : r - 1); s++) { var l = a[2 * s] , u = a[2 * s + 1] , h = n[(s + 1) % r]; t.bezierCurveTo(l[0], l[1], u[0], u[1], h[0], h[1]) } } else { "spline" === o && (n = function(t, e) { for (var i = t.length, n = [], o = 0, a = 1; a < i; a++) o += vt(t[a - 1], t[a]); var r = o / 2; r = r < i ? i : r; for (a = 0; a < r; a++) { var s, l, u, h = a / (r - 1) * (e ? i : i - 1), c = Math.floor(h), d = h - c, f = t[c % i]; u = e ? (s = t[(c - 1 + i) % i], l = t[(c + 1) % i], t[(c + 2) % i]) : (s = t[0 === c ? c : c - 1], l = t[i - 2 < c ? i - 1 : c + 1], t[i - 3 < c ? i - 1 : c + 2]); var p = d * d , g = d * p; n.push([$r(s[0], f[0], l[0], u[0], d, p, g), $r(s[1], f[1], l[1], u[1], d, p, g)]) } return n }(n, i)), t.moveTo(n[0][0], n[0][1]); s = 1; for (var c = n.length; s < c; s++) t.lineTo(n[s][0], n[s][1]) } i && t.closePath() } } var Qr = Ar.extend({ type: "polygon", shape: { points: null, smooth: !1, smoothConstraint: null }, buildPath: function(t, e) { Jr(t, e, !0) } }) , ts = Ar.extend({ type: "polyline", shape: { points: null, smooth: !1, smoothConstraint: null }, style: { stroke: "#000", fill: null }, buildPath: function(t, e) { Jr(t, e, !1) } }) , es = Math.round; function is(t, e, i) { if (e) { var n = e.x1 , o = e.x2 , a = e.y1 , r = e.y2; t.x1 = n, t.x2 = o, t.y1 = a, t.y2 = r; var s = i && i.lineWidth; s && (es(2 * n) === es(2 * o) && (t.x1 = t.x2 = os(n, s, !0)), es(2 * a) === es(2 * r) && (t.y1 = t.y2 = os(a, s, !0))) } } function ns(t, e, i) { if (e) { var n = e.x , o = e.y , a = e.width , r = e.height; t.x = n, t.y = o, t.width = a, t.height = r; var s = i && i.lineWidth; s && (t.x = os(n, s, !0), t.y = os(o, s, !0), t.width = Math.max(os(n + a, s, !1) - t.x, 0 === a ? 0 : 1), t.height = Math.max(os(o + r, s, !1) - t.y, 0 === r ? 0 : 1)) } } function os(t, e, i) { if (!e) return t; var n = es(2 * t); return (n + es(e)) % 2 == 0 ? n / 2 : (n + (i ? 1 : -1)) / 2 } var as = {} , rs = Ar.extend({ type: "rect", shape: { r: 0, x: 0, y: 0, width: 0, height: 0 }, buildPath: function(t, e) { var i, n, o, a; this.subPixelOptimize ? (ns(as, e, this.style), i = as.x, n = as.y, o = as.width, a = as.height, as.r = e.r, e = as) : (i = e.x, n = e.y, o = e.width, a = e.height), e.r ? Dn(t, e) : t.rect(i, n, o, a), t.closePath() } }) , ss = {} , ls = Ar.extend({ type: "line", shape: { x1: 0, y1: 0, x2: 0, y2: 0, percent: 1 }, style: { stroke: "#000", fill: null }, buildPath: function(t, e) { var i, n, o, a; a = this.subPixelOptimize ? (is(ss, e, this.style), i = ss.x1, n = ss.y1, o = ss.x2, ss.y2) : (i = e.x1, n = e.y1, o = e.x2, e.y2); var r = e.percent; 0 !== r && (t.moveTo(i, n), r < 1 && (o = i * (1 - r) + o * r, a = n * (1 - r) + a * r), t.lineTo(o, a)) }, pointAt: function(t) { var e = this.shape; return [e.x1 * (1 - t) + e.x2 * t, e.y1 * (1 - t) + e.y2 * t] } }) , us = []; function hs(t, e, i) { var n = t.cpx2 , o = t.cpy2; return null === n || null === o ? [(i ? Aa : Ta)(t.x1, t.cpx1, t.cpx2, t.x2, e), (i ? Aa : Ta)(t.y1, t.cpy1, t.cpy2, t.y2, e)] : [(i ? ka : La)(t.x1, t.cpx1, t.x2, e), (i ? ka : La)(t.y1, t.cpy1, t.y2, e)] } function cs(t) { this.colorStops = t || [] } var ds = Ar.extend({ type: "bezier-curve", shape: { x1: 0, y1: 0, x2: 0, y2: 0, cpx1: 0, cpy1: 0, percent: 1 }, style: { stroke: "#000", fill: null }, buildPath: function(t, e) { var i = e.x1 , n = e.y1 , o = e.x2 , a = e.y2 , r = e.cpx1 , s = e.cpy1 , l = e.cpx2 , u = e.cpy2 , h = e.percent; 0 !== h && (t.moveTo(i, n), null == l || null == u ? (h < 1 && (Na(i, r, o, h, us), r = us[1], o = us[2], Na(n, s, a, h, us), s = us[1], a = us[2]), t.quadraticCurveTo(r, s, o, a)) : (h < 1 && (Ca(i, r, l, o, h, us), r = us[1], l = us[2], o = us[3], Ca(n, s, u, a, h, us), s = us[1], u = us[2], a = us[3]), t.bezierCurveTo(r, s, l, u, o, a))) }, pointAt: function(t) { return hs(this.shape, t, !1) }, tangentAt: function(t) { var e = hs(this.shape, t, !0); return mt(e, e) } }) , fs = Ar.extend({ type: "arc", shape: { cx: 0, cy: 0, r: 0, startAngle: 0, endAngle: 2 * Math.PI, clockwise: !0 }, style: { stroke: "#000", fill: null }, buildPath: function(t, e) { var i = e.cx , n = e.cy , o = Math.max(e.r, 0) , a = e.startAngle , r = e.endAngle , s = e.clockwise , l = Math.cos(a) , u = Math.sin(a); t.moveTo(l * o + i, u * o + n), t.arc(i, n, o, a, r, !s) } }) , ps = Ar.extend({ type: "compound", shape: { paths: null }, _updatePathDirty: function() { for (var t = this.__dirtyPath, e = this.shape.paths, i = 0; i < e.length; i++) t = t || e[i].__dirtyPath; this.__dirtyPath = t, this.__dirty = this.__dirty || t }, beforeBrush: function() { this._updatePathDirty(); for (var t = this.shape.paths || [], e = this.getGlobalScale(), i = 0; i < t.length; i++) t[i].path || t[i].createPathProxy(), t[i].path.setScale(e[0], e[1], t[i].segmentIgnoreThreshold) }, buildPath: function(t, e) { for (var i = e.paths || [], n = 0; n < i.length; n++) i[n].buildPath(t, i[n].shape, !0) }, afterBrush: function() { for (var t = this.shape.paths || [], e = 0; e < t.length; e++) t[e].__dirtyPath = !1 }, getBoundingRect: function() { return this._updatePathDirty(), Ar.prototype.getBoundingRect.call(this) } }); cs.prototype = { constructor: cs, addColorStop: function(t, e) { this.colorStops.push({ offset: t, color: e }) } }; function gs(t, e, i, n, o, a) { this.x = null == t ? 0 : t, this.y = null == e ? 0 : e, this.x2 = null == i ? 1 : i, this.y2 = null == n ? 0 : n, this.type = "linear", this.global = a || !1, cs.call(this, o) } gs.prototype = { constructor: gs }, w(gs, cs); function ms(t, e, i, n, o) { this.x = null == t ? .5 : t, this.y = null == e ? .5 : e, this.r = null == i ? .5 : i, this.type = "radial", this.global = o || !1, cs.call(this, n) } function vs(t) { Jn.call(this, t), this._displayables = [], this._temporaryDisplayables = [], this._cursor = 0, this.notClear = !0 } ms.prototype = { constructor: ms }, w(ms, cs), vs.prototype.incremental = !0, vs.prototype.clearDisplaybles = function() { this._displayables = [], this._temporaryDisplayables = [], this._cursor = 0, this.dirty(), this.notClear = !1 } , vs.prototype.addDisplayable = function(t, e) { e ? this._temporaryDisplayables.push(t) : this._displayables.push(t), this.dirty() } , vs.prototype.addDisplayables = function(t, e) { e = e || !1; for (var i = 0; i < t.length; i++) this.addDisplayable(t[i], e) } , vs.prototype.eachPendingDisplayable = function(t) { for (var e = this._cursor; e < this._displayables.length; e++) t && t(this._displayables[e]); for (e = 0; e < this._temporaryDisplayables.length; e++) t && t(this._temporaryDisplayables[e]) } , vs.prototype.update = function() { this.updateTransform(); for (var t = this._cursor; t < this._displayables.length; t++) { (e = this._displayables[t]).parent = this, e.update(), e.parent = null } for (t = 0; t < this._temporaryDisplayables.length; t++) { var e; (e = this._temporaryDisplayables[t]).parent = this, e.update(), e.parent = null } } , vs.prototype.brush = function(t, e) { for (var i = this._cursor; i < this._displayables.length; i++) { (n = this._displayables[i]).beforeBrush && n.beforeBrush(t), n.brush(t, i === this._cursor ? null : this._displayables[i - 1]), n.afterBrush && n.afterBrush(t) } this._cursor = i; for (i = 0; i < this._temporaryDisplayables.length; i++) { var n; (n = this._temporaryDisplayables[i]).beforeBrush && n.beforeBrush(t), n.brush(t, 0 === i ? null : this._temporaryDisplayables[i - 1]), n.afterBrush && n.afterBrush(t) } this._temporaryDisplayables = [], this.notClear = !0 } ; var ys = []; vs.prototype.getBoundingRect = function() { if (!this._rect) { for (var t = new Di(1 / 0,1 / 0,-1 / 0,-1 / 0), e = 0; e < this._displayables.length; e++) { var i = this._displayables[e] , n = i.getBoundingRect().clone(); i.needLocalTransform() && n.applyTransform(i.getLocalTransform(ys)), t.union(n) } this._rect = t } return this._rect } , vs.prototype.contain = function(t, e) { var i = this.transformCoordToLocal(t, e); if (this.getBoundingRect().contain(i[0], i[1])) for (var n = 0; n < this._displayables.length; n++) { if (this._displayables[n].contain(t, e)) return !0 } return !1 } , w(vs, Jn); var xs = Math.max , _s = Math.min , ws = {} , bs = 1 , Ss = { color: "textFill", textBorderColor: "textStroke", textBorderWidth: "textStrokeWidth" } , Ms = "emphasis" , Is = "normal" , Ts = 1 , As = {} , Ds = {}; function Cs(t) { return Ar.extend(t) } function Ls(t, e) { Ds[t] = e } function ks(t) { if (Ds.hasOwnProperty(t)) return Ds[t] } function Ps(t, e, i, n) { var o = Zr(t, e); return i && ("center" === n && (i = Os(i, o.getBoundingRect())), Rs(o, i)), o } function Ns(t, i, n) { var o = new Qn({ style: { image: t, x: i.x, y: i.y, width: i.width, height: i.height }, onload: function(t) { if ("center" === n) { var e = { width: t.width, height: t.height }; o.setStyle(Os(i, e)) } } }); return o } function Os(t, e) { var i, n = e.width / e.height, o = t.height * n; return i = o <= t.width ? t.height : (o = t.width) / n, { x: t.x + t.width / 2 - o / 2, y: t.y + t.height / 2 - i / 2, width: o, height: i } } var Es = function(t, e) { for (var i = [], n = t.length, o = 0; o < n; o++) { var a = t[o]; a.path || a.createPathProxy(), a.__dirtyPath && a.buildPath(a.path, a.shape, !0), i.push(a.path) } var r = new Ar(e); return r.createPathProxy(), r.buildPath = function(t) { t.appendPath(i); var e = t.getContext(); e && t.rebuildPath(e) } , r }; function Rs(t, e) { if (t.applyTransform) { var i = t.getBoundingRect().calculateTransform(e); t.applyTransform(i) } } var zs = os; function Bs(t) { return null != t && "none" !== t } var Vs = Q() , Gs = 0; function Fs(t) { var e = t.__hoverStl; if (e && !t.__highlighted) { var i = t.__zr , n = t.useHoverLayer && i && "canvas" === i.painter.type; if (t.__highlighted = n ? "layer" : "plain", !(t.isGroup || !i && t.useHoverLayer)) { var o = t , a = t.style; n && (a = (o = i.addHover(t)).style), ll(a), n || function(t) { if (t.__hoverStlDirty) { t.__hoverStlDirty = !1; var e = t.__hoverStl; if (e) { var i = t.__cachedNormalStl = {}; t.__cachedNormalZ2 = t.z2; var n = t.style; for (var o in e) null != e[o] && (i[o] = n[o]); i.fill = n.fill, i.stroke = n.stroke } else t.__cachedNormalStl = t.__cachedNormalZ2 = null } }(o), a.extendFrom(e), Ws(a, e, "fill"), Ws(a, e, "stroke"), sl(a), n || (t.dirty(!1), t.z2 += bs) } } } function Ws(t, e, i) { !Bs(e[i]) && Bs(t[i]) && (t[i] = function(t) { if ("string" != typeof t) return t; var e = Vs.get(t); return e || (e = He(t, -.1), Gs < 1e4 && (Vs.set(t, e), Gs++)), e }(t[i])) } function Hs(t) { var e = t.__highlighted; if (e && (t.__highlighted = !1, !t.isGroup)) if ("layer" === e) t.__zr && t.__zr.removeHover(t); else { var i = t.style , n = t.__cachedNormalStl; n && (ll(i), t.setStyle(n), sl(i)); var o = t.__cachedNormalZ2; null != o && t.z2 - o === bs && (t.z2 = o) } } function Zs(t, e, i) { var n, o = Is, a = Is; t.__highlighted && (o = Ms, n = !0), e(t, i), t.__highlighted && (a = Ms, n = !0), t.isGroup && t.traverse(function(t) { t.isGroup || e(t, i) }), n && t.__highDownOnUpdate && t.__highDownOnUpdate(o, a) } function Us(t, e) { e = t.__hoverStl = !1 !== e && (t.hoverStyle || e || {}), t.__hoverStlDirty = !0, t.__highlighted && (t.__cachedNormalStl = null, Hs(t), Fs(t)) } function Xs(t) { Ks(this, t) || this.__highByOuter || Zs(this, Fs) } function Ys(t) { Ks(this, t) || this.__highByOuter || Zs(this, Hs) } function js(t) { this.__highByOuter |= 1 << (t || 0), Zs(this, Fs) } function qs(t) { (this.__highByOuter &= ~(1 << (t || 0))) || Zs(this, Hs) } function Ks(t, e) { return t.__highDownSilentOnTouch && e.zrByTouch } function $s(t, e) { Js(t, !0), Zs(t, Us, e) } function Js(t, e) { var i = !1 === e; if (t.__highDownSilentOnTouch = t.highDownSilentOnTouch, t.__highDownOnUpdate = t.highDownOnUpdate, !i || t.__highDownDispatcher) { var n = i ? "off" : "on"; t[n]("mouseover", Xs)[n]("mouseout", Ys), t[n]("emphasis", js)[n]("normal", qs), t.__highByOuter = t.__highByOuter || 0, t.__highDownDispatcher = !i } } function Qs(t) { return !(!t || !t.__highDownDispatcher) } function tl(t) { var e = As[t]; return null == e && Ts <= 32 && (e = As[t] = Ts++), e } function el(t, e, i, n, o, a, r) { var s, l = (o = o || ws).labelFetcher, u = o.labelDataIndex, h = o.labelDimIndex, c = o.labelProp, d = i.getShallow("show"), f = n.getShallow("show"); (d || f) && (l && (s = l.getFormattedLabel(u, "normal", null, h, c)), null == s && (s = C(o.defaultText) ? o.defaultText(u, o) : o.defaultText)); var p = d ? s : null , g = f ? H(l ? l.getFormattedLabel(u, "emphasis", null, h, c) : null, s) : null; null == p && null == g || (nl(t, i, a, o), nl(e, n, r, o, !0)), t.text = p, e.text = g } function il(t, e, i) { var n = t.style; e && (ll(n), t.setStyle(e), sl(n)), n = t.__hoverStl, i && n && (ll(n), P(n, i), sl(n)) } function nl(t, e, i, n, o) { return ol(t, e, n, o), i && P(t, i), t } function ol(t, e, i, n) { if ((i = i || ws).isRectText) { var o; i.getTextPosition ? o = i.getTextPosition(e, n) : "outside" === (o = e.getShallow("position") || (n ? null : "inside")) && (o = "top"), t.textPosition = o, t.textOffset = e.getShallow("offset"); var a = e.getShallow("rotate"); null != a && (a *= Math.PI / 180), t.textRotation = a, t.textDistance = H(e.getShallow("distance"), n ? null : 5) } var r, s = e.ecModel, l = s && s.option.textStyle, u = function(t) { var e; for (; t && t !== t.ecModel; ) { var i = (t.option || ws).rich; if (i) for (var n in e = e || {}, i) i.hasOwnProperty(n) && (e[n] = 1); t = t.parentModel } return e }(e); if (u) for (var h in r = {}, u) if (u.hasOwnProperty(h)) { var c = e.getModel(["rich", h]); al(r[h] = {}, c, l, i, n) } return t.rich = r, al(t, e, l, i, n, !0), i.forceRich && !i.textStyle && (i.textStyle = {}), t } function al(t, e, i, n, o, a) { i = !o && i || ws, t.textFill = rl(e.getShallow("color"), n) || i.color, t.textStroke = rl(e.getShallow("textBorderColor"), n) || i.textBorderColor, t.textStrokeWidth = H(e.getShallow("textBorderWidth"), i.textBorderWidth), o || (a && (t.insideRollbackOpt = n, sl(t)), null == t.textFill && (t.textFill = n.autoColor)), t.fontStyle = e.getShallow("fontStyle") || i.fontStyle, t.fontWeight = e.getShallow("fontWeight") || i.fontWeight, t.fontSize = e.getShallow("fontSize") || i.fontSize, t.fontFamily = e.getShallow("fontFamily") || i.fontFamily, t.textAlign = e.getShallow("align"), t.textVerticalAlign = e.getShallow("verticalAlign") || e.getShallow("baseline"), t.textLineHeight = e.getShallow("lineHeight"), t.textWidth = e.getShallow("width"), t.textHeight = e.getShallow("height"), t.textTag = e.getShallow("tag"), a && n.disableBox || (t.textBackgroundColor = rl(e.getShallow("backgroundColor"), n), t.textPadding = e.getShallow("padding"), t.textBorderColor = rl(e.getShallow("borderColor"), n), t.textBorderWidth = e.getShallow("borderWidth"), t.textBorderRadius = e.getShallow("borderRadius"), t.textBoxShadowColor = e.getShallow("shadowColor"), t.textBoxShadowBlur = e.getShallow("shadowBlur"), t.textBoxShadowOffsetX = e.getShallow("shadowOffsetX"), t.textBoxShadowOffsetY = e.getShallow("shadowOffsetY")), t.textShadowColor = e.getShallow("textShadowColor") || i.textShadowColor, t.textShadowBlur = e.getShallow("textShadowBlur") || i.textShadowBlur, t.textShadowOffsetX = e.getShallow("textShadowOffsetX") || i.textShadowOffsetX, t.textShadowOffsetY = e.getShallow("textShadowOffsetY") || i.textShadowOffsetY } function rl(t, e) { return "auto" !== t ? t : e && e.autoColor ? e.autoColor : null } function sl(t) { var e, i = t.textPosition, n = t.insideRollbackOpt; if (n && null == t.textFill) { var o = n.autoColor , a = n.isRectText , r = n.useInsideStyle , s = !1 !== r && (!0 === r || a && i && "string" == typeof i && 0 <= i.indexOf("inside")) , l = !s && null != o; (s || l) && (e = { textFill: t.textFill, textStroke: t.textStroke, textStrokeWidth: t.textStrokeWidth }), s && (t.textFill = "#fff", null == t.textStroke && (t.textStroke = o, null == t.textStrokeWidth && (t.textStrokeWidth = 2))), l && (t.textFill = o) } t.insideRollback = e } function ll(t) { var e = t.insideRollback; e && (t.textFill = e.textFill, t.textStroke = e.textStroke, t.textStrokeWidth = e.textStrokeWidth, t.insideRollback = null) } function ul(t, e) { var i = e && e.getModel("textStyle"); return j([t.fontStyle || i && i.getShallow("fontStyle") || "", t.fontWeight || i && i.getShallow("fontWeight") || "", (t.fontSize || i && i.getShallow("fontSize") || 12) + "px", t.fontFamily || i && i.getShallow("fontFamily") || "sans-serif"].join(" ")) } function hl(t, e, i, n, o, a) { if ("function" == typeof o && (a = o, o = null), n && n.isAnimationEnabled()) { var r = t ? "Update" : "" , s = n.getShallow("animationDuration" + r) , l = n.getShallow("animationEasing" + r) , u = n.getShallow("animationDelay" + r); "function" == typeof u && (u = u(o, n.getAnimationDelayParams ? n.getAnimationDelayParams(e, o) : null)), "function" == typeof s && (s = s(o)), 0 < s ? e.animateTo(i, s, u || 0, l, a, !!a) : (e.stopAnimation(), e.attr(i), a && a()) } else e.stopAnimation(), e.attr(i), a && a() } function cl(t, e, i, n, o) { hl(!0, t, e, i, n, o) } function dl(t, e, i, n, o) { hl(!1, t, e, i, n, o) } function fl(t, e) { for (var i = re([]); t && t !== e; ) le(i, t.getLocalTransform(), i), t = t.parent; return i } function pl(t, e, i) { return e && !N(e) && (e = ve.getLocalTransform(e)), i && (e = de([], e)), bt([], t, e) } function gl(t, e, i) { var n = 0 === e[4] || 0 === e[5] || 0 === e[0] ? 1 : Math.abs(2 * e[4] / e[0]) , o = 0 === e[4] || 0 === e[5] || 0 === e[2] ? 1 : Math.abs(2 * e[4] / e[2]) , a = ["left" === t ? -n : "right" === t ? n : 0, "top" === t ? -o : "bottom" === t ? o : 0]; return a = pl(a, e, i), Math.abs(a[0]) > Math.abs(a[1]) ? 0 < a[0] ? "right" : "left" : 0 < a[1] ? "bottom" : "top" } function ml(t, e, n, i) { if (t && e) { var o, a = (o = {}, t.traverse(function(t) { !t.isGroup && t.anid && (o[t.anid] = t) }), o); e.traverse(function(t) { if (!t.isGroup && t.anid) { var e = a[t.anid]; if (e) { var i = r(t); t.attr(r(e)), cl(t, i, n, t.dataIndex) } } }) } function r(t) { var e = { position: rt(t.position), rotation: t.rotation }; return t.shape && (e.shape = P({}, t.shape)), e } } function vl(t, n) { return O(t, function(t) { var e = t[0]; e = xs(e, n.x), e = _s(e, n.x + n.width); var i = t[1]; return i = xs(i, n.y), [e, i = _s(i, n.y + n.height)] }) } function yl(t, e, i) { var n = (e = P({ rectHover: !0 }, e)).style = { strokeNoScale: !0 }; if (i = i || { x: -1, y: -1, width: 2, height: 2 }, t) return 0 === t.indexOf("image://") ? (n.image = t.slice(8), D(n, i), new Qn(e)) : Ps(t.replace("path://", ""), e, i, "center") } function xl(t, e, i, n, o) { for (var a = 0, r = o[o.length - 1]; a < o.length; a++) { var s = o[a]; if (_l(t, e, i, n, s[0], s[1], r[0], r[1])) return !0; r = s } } function _l(t, e, i, n, o, a, r, s) { var l = i - t , u = n - e , h = r - o , c = s - a , d = wl(h, c, l, u); if (function(t) { return t <= 1e-6 && -1e-6 <= t }(d)) return !1; var f = t - o , p = e - a , g = wl(f, p, l, u) / d; if (g < 0 || 1 < g) return !1; var m = wl(f, p, h, c) / d; return !(m < 0 || 1 < m) } function wl(t, e, i, n) { return t * n - i * e } Ls("circle", Yr), Ls("sector", qr), Ls("ring", Kr), Ls("polygon", Qr), Ls("polyline", ts), Ls("rect", rs), Ls("line", ls), Ls("bezierCurve", ds), Ls("arc", fs); var bl = (Object.freeze || Object)({ Z2_EMPHASIS_LIFT: bs, CACHED_LABEL_STYLE_PROPERTIES: Ss, extendShape: Cs, extendPath: function(t, e) { return function(t, e) { return Ar.extend(Hr(t, e)) }(t, e) }, registerShape: Ls, getShapeClass: ks, makePath: Ps, makeImage: Ns, mergePath: Es, resizePath: Rs, subPixelOptimizeLine: function(t) { return is(t.shape, t.shape, t.style), t }, subPixelOptimizeRect: function(t) { return ns(t.shape, t.shape, t.style), t }, subPixelOptimize: zs, setElementHoverStyle: Us, setHoverStyle: $s, setAsHighDownDispatcher: Js, isHighDownDispatcher: Qs, getHighlightDigit: tl, setLabelStyle: el, modifyLabelStyle: il, setTextStyle: nl, setText: function(t, e, i) { var n, o = { isRectText: !0 }; !1 === i ? n = !0 : o.autoColor = i, ol(t, e, o, n) }, getFont: ul, updateProps: cl, initProps: dl, getTransform: fl, applyTransform: pl, transformDirection: gl, groupTransition: ml, clipPointsByRect: vl, clipRectByRect: function(t, e) { var i = xs(t.x, e.x) , n = _s(t.x + t.width, e.x + e.width) , o = xs(t.y, e.y) , a = _s(t.y + t.height, e.y + e.height); if (i <= n && o <= a) return { x: i, y: o, width: n - i, height: a - o } }, createIcon: yl, linePolygonIntersect: xl, lineLineIntersect: _l, Group: Ci, Image: Qn, Text: Ur, Circle: Yr, Sector: qr, Ring: Kr, Polygon: Qr, Polyline: ts, Rect: rs, Line: ls, BezierCurve: ds, Arc: fs, IncrementalDisplayable: vs, CompoundPath: ps, LinearGradient: gs, RadialGradient: ms, BoundingRect: Di }) , Sl = ["textStyle", "color"] , Ml = { getTextColor: function(t) { var e = this.ecModel; return this.getShallow("color") || (!t && e ? e.get(Sl) : null) }, getFont: function() { return ul({ fontStyle: this.getShallow("fontStyle"), fontWeight: this.getShallow("fontWeight"), fontSize: this.getShallow("fontSize"), fontFamily: this.getShallow("fontFamily") }, this.ecModel) }, getTextRect: function(t) { return gn(t, this.getFont(), this.getShallow("align"), this.getShallow("verticalAlign") || this.getShallow("baseline"), this.getShallow("padding"), this.getShallow("lineHeight"), this.getShallow("rich"), this.getShallow("truncateText")) } } , Il = ha([["fill", "color"], ["stroke", "borderColor"], ["lineWidth", "borderWidth"], ["opacity"], ["shadowBlur"], ["shadowOffsetX"], ["shadowOffsetY"], ["shadowColor"], ["textPosition"], ["textAlign"]]) , Tl = { getItemStyle: function(t, e) { var i = Il(this, t, e) , n = this.getBorderLineDash(); return n && (i.lineDash = n), i }, getBorderLineDash: function() { var t = this.get("borderType"); return "solid" === t || null == t ? null : "dashed" === t ? [5, 5] : [1, 1] } } , Al = b , Dl = jo(); function Cl(t, e, i) { this.parentModel = e, this.ecModel = i, this.option = t } function Ll(t, e, i) { for (var n = 0; n < e.length && (!e[n] || null != (t = t && "object" == typeof t ? t[e[n]] : null)); n++) ; return null == t && i && (t = i.get(e)), t } function kl(t, e) { var i = Dl(t).getParent; return i ? i.call(t, e) : t.parentModel } Cl.prototype = { constructor: Cl, init: null, mergeOption: function(t) { m(this.option, t, !0) }, get: function(t, e) { return null == t ? this.option : Ll(this.option, this.parsePath(t), !e && kl(this, t)) }, getShallow: function(t, e) { var i = this.option , n = null == i ? i : i[t] , o = !e && kl(this, t); return null == n && o && (n = o.getShallow(t)), n }, getModel: function(t, e) { var i; return new Cl(null == t ? this.option : Ll(this.option, t = this.parsePath(t)),e = e || (i = kl(this, t)) && i.getModel(t),this.ecModel) }, isEmpty: function() { return null == this.option }, restoreData: function() {}, clone: function() { return new this.constructor(k(this.option)) }, setReadOnly: function(t) {}, parsePath: function(t) { return "string" == typeof t && (t = t.split(".")), t }, customizeGetParent: function(t) { Dl(this).getParent = t }, isAnimationEnabled: function() { if (!v.node) { if (null != this.option.animation) return !!this.option.animation; if (this.parentModel) return this.parentModel.isAnimationEnabled() } } }, oa(Cl), ra(Cl), Al(Cl, da), Al(Cl, pa), Al(Cl, Ml), Al(Cl, Tl); var Pl = 0; function Nl(t) { return [t || "", Pl++, Math.random().toFixed(5)].join("_") } var Ol = 1e-4; function El(t, e, i, n) { var o = e[1] - e[0] , a = i[1] - i[0]; if (0 == o) return 0 == a ? i[0] : (i[0] + i[1]) / 2; if (n) if (0 < o) { if (t <= e[0]) return i[0]; if (t >= e[1]) return i[1] } else { if (t >= e[0]) return i[0]; if (t <= e[1]) return i[1] } else { if (t === e[0]) return i[0]; if (t === e[1]) return i[1] } return (t - e[0]) / o * a + i[0] } function Rl(t, e) { switch (t) { case "center": case "middle": t = "50%"; break; case "left": case "top": t = "0%"; break; case "right": case "bottom": t = "100%" } return "string" == typeof t ? function(t) { return t.replace(/^\s+|\s+$/g, "") }(t).match(/%$/) ? parseFloat(t) / 100 * e : parseFloat(t) : null == t ? NaN : +t } function zl(t, e, i) { return null == e && (e = 10), e = Math.min(Math.max(0, e), 20), t = (+t).toFixed(e), i ? t : +t } function Bl(t) { return t.sort(function(t, e) { return t - e }), t } function Vl(t) { if (t = +t, isNaN(t)) return 0; for (var e = 1, i = 0; Math.round(t * e) / e !== t; ) e *= 10, i++; return i } function Gl(t) { var e = t.toString() , i = e.indexOf("e"); if (0 < i) { var n = +e.slice(i + 1); return n < 0 ? -n : 0 } var o = e.indexOf("."); return o < 0 ? 0 : e.length - 1 - o } function Fl(t, e) { var i = Math.log , n = Math.LN10 , o = Math.floor(i(t[1] - t[0]) / n) , a = Math.round(i(Math.abs(e[1] - e[0])) / n) , r = Math.min(Math.max(-o + a, 0), 20); return isFinite(r) ? r : 20 } function Wl(t, e, i) { if (!t[e]) return 0; var n = S(t, function(t, e) { return t + (isNaN(e) ? 0 : e) }, 0); if (0 === n) return 0; for (var o = Math.pow(10, i), a = O(t, function(t) { return (isNaN(t) ? 0 : t) / n * o * 100 }), r = 100 * o, s = O(a, function(t) { return Math.floor(t) }), l = S(s, function(t, e) { return t + e }, 0), u = O(a, function(t, e) { return t - s[e] }); l < r; ) { for (var h = Number.NEGATIVE_INFINITY, c = null, d = 0, f = u.length; d < f; ++d) u[d] > h && (h = u[d], c = d); ++s[c], u[c] = 0, ++l } return s[e] / o } var Hl = 9007199254740991; function Zl(t) { var e = 2 * Math.PI; return (t % e + e) % e } function Ul(t) { return -Ol < t && t < Ol } var Xl = /^(?:(\d{4})(?:[-\/](\d{1,2})(?:[-\/](\d{1,2})(?:[T ](\d{1,2})(?::(\d\d)(?::(\d\d)(?:[.,](\d+))?)?)?(Z|[\+\-]\d\d:?\d\d)?)?)?)?)?$/; function Yl(t) { if (t instanceof Date) return t; if ("string" != typeof t) return null == t ? new Date(NaN) : new Date(Math.round(t)); var e = Xl.exec(t); if (!e) return new Date(NaN); if (e[8]) { var i = +e[4] || 0; return "Z" !== e[8].toUpperCase() && (i -= e[8].slice(0, 3)), new Date(Date.UTC(+e[1], +(e[2] || 1) - 1, +e[3] || 1, i, +(e[5] || 0), +e[6] || 0, +e[7] || 0)) } return new Date(+e[1],+(e[2] || 1) - 1,+e[3] || 1,+e[4] || 0,+(e[5] || 0),+e[6] || 0,+e[7] || 0) } function jl(t) { return Math.pow(10, ql(t)) } function ql(t) { if (0 === t) return 0; var e = Math.floor(Math.log(t) / Math.LN10); return 10 <= t / Math.pow(10, e) && e++, e } function Kl(t, e) { var i = ql(t) , n = Math.pow(10, i) , o = t / n; return t = (e ? o < 1.5 ? 1 : o < 2.5 ? 2 : o < 4 ? 3 : o < 7 ? 5 : 10 : o < 1 ? 1 : o < 2 ? 2 : o < 3 ? 3 : o < 5 ? 5 : 10) * n, -20 <= i ? +t.toFixed(i < 0 ? -i : 0) : t } function $l(t) { t.sort(function(t, e) { return function t(e, i, n) { return e.interval[n] < i.interval[n] || e.interval[n] === i.interval[n] && (e.close[n] - i.close[n] == (n ? -1 : 1) || !n && t(e, i, 1)) }(t, e, 0) ? -1 : 1 }); for (var e = -1 / 0, i = 1, n = 0; n < t.length; ) { for (var o = t[n].interval, a = t[n].close, r = 0; r < 2; r++) o[r] <= e && (o[r] = e, a[r] = r ? 1 : 1 - i), e = o[r], i = a[r]; o[0] === o[1] && a[0] * a[1] != 1 ? t.splice(n, 1) : n++ } return t } function Jl(t) { return 0 <= t - parseFloat(t) } var Ql = (Object.freeze || Object)({ linearMap: El, parsePercent: Rl, round: zl, asc: Bl, getPrecision: Vl, getPrecisionSafe: Gl, getPixelPrecision: Fl, getPercentWithPrecision: Wl, MAX_SAFE_INTEGER: Hl, remRadian: Zl, isRadianAroundZero: Ul, parseDate: Yl, quantity: jl, quantityExponent: ql, nice: Kl, quantile: function(t, e) { var i = (t.length - 1) * e + 1 , n = Math.floor(i) , o = +t[n - 1] , a = i - n; return a ? o + a * (t[n] - o) : o }, reformIntervals: $l, isNumeric: Jl }); function tu(t) { return isNaN(t) ? "-" : (t = (t + "").split("."))[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g, "$1,") + (1 < t.length ? "." + t[1] : "") } function eu(t, e) { return t = (t || "").toLowerCase().replace(/-(.)/g, function(t, e) { return e.toUpperCase() }), e && t && (t = t.charAt(0).toUpperCase() + t.slice(1)), t } var iu = X , nu = /([&<>"'])/g , ou = { "&": "&", "<": "<", ">": ">", '"': """, "'": "'" }; function au(t) { return null == t ? "" : (t + "").replace(nu, function(t, e) { return ou[e] }) } function ru(t, e) { return "{" + t + (null == e ? "" : e) + "}" } var su = ["a", "b", "c", "d", "e", "f", "g"]; function lu(t, e, i) { L(e) || (e = [e]); var n = e.length; if (!n) return ""; for (var o = e[0].$vars || [], a = 0; a < o.length; a++) { var r = su[a]; t = t.replace(ru(r), ru(r, 0)) } for (var s = 0; s < n; s++) for (var l = 0; l < o.length; l++) { var u = e[s][o[l]]; t = t.replace(ru(su[l], s), i ? au(u) : u) } return t } function uu(i, t, n) { return E(t, function(t, e) { i = i.replace("{" + e + "}", n ? au(t) : t) }), i } function hu(t, e) { var i = (t = R(t) ? { color: t, extraCssText: e } : t || {}).color , n = t.type , o = (e = t.extraCssText, t.renderMode || "html") , a = t.markerId || "X"; return i ? "html" === o ? "subItem" === n ? '' : '' : { renderMode: o, content: "{marker" + a + "|} ", style: { color: i } } : "" } function cu(t, e) { return "0000".substr(0, e - (t += "").length) + t } function du(t, e, i) { "week" !== t && "month" !== t && "quarter" !== t && "half-year" !== t && "year" !== t || (t = "MM-dd\nyyyy"); var n = Yl(e) , o = i ? "UTC" : "" , a = n["get" + o + "FullYear"]() , r = n["get" + o + "Month"]() + 1 , s = n["get" + o + "Date"]() , l = n["get" + o + "Hours"]() , u = n["get" + o + "Minutes"]() , h = n["get" + o + "Seconds"]() , c = n["get" + o + "Milliseconds"](); return t = t.replace("MM", cu(r, 2)).replace("M", r).replace("yyyy", a).replace("yy", a % 100).replace("dd", cu(s, 2)).replace("d", s).replace("hh", cu(l, 2)).replace("h", l).replace("mm", cu(u, 2)).replace("m", u).replace("ss", cu(h, 2)).replace("s", h).replace("SSS", cu(c, 3)) } function fu(t) { return t ? t.charAt(0).toUpperCase() + t.substr(1) : t } var pu = xn; function gu(t, e) { if ("_blank" === e || "blank" === e) { var i = window.open(); i.opener = null, i.location = t } else window.open(t, e) } var mu = (Object.freeze || Object)({ addCommas: tu, toCamelCase: eu, normalizeCssArray: iu, encodeHTML: au, formatTpl: lu, formatTplSimple: uu, getTooltipMarker: hu, formatTime: du, capitalFirst: fu, truncateText: pu, getTextBoundingRect: function(t) { return gn(t.text, t.font, t.textAlign, t.textVerticalAlign, t.textPadding, t.textLineHeight, t.rich, t.truncate) }, getTextRect: function(t, e, i, n, o, a, r, s) { return gn(t, e, i, n, o, s, a, r) }, windowOpen: gu }) , vu = E , yu = ["left", "right", "top", "bottom", "width", "height"] , xu = [["width", "left", "right"], ["height", "top", "bottom"]]; function _u(h, c, d, f, p) { var g = 0 , m = 0; null == f && (f = 1 / 0), null == p && (p = 1 / 0); var v = 0; c.eachChild(function(t, e) { var i, n, o = t.position, a = t.getBoundingRect(), r = c.childAt(e + 1), s = r && r.getBoundingRect(); if ("horizontal" === h) { var l = a.width + (s ? -s.x + a.x : 0); v = f < (i = g + l) || t.newline ? (g = 0, i = l, m += v + d, a.height) : Math.max(v, a.height) } else { var u = a.height + (s ? -s.y + a.y : 0); v = p < (n = m + u) || t.newline ? (g += v + d, m = 0, n = u, a.width) : Math.max(v, a.width) } t.newline || (o[0] = g, o[1] = m, "horizontal" === h ? g = i + d : m = n + d) }) } var wu = _u; T(_u, "vertical"), T(_u, "horizontal"); function bu(t, e, i) { i = iu(i || 0); var n = e.width , o = e.height , a = Rl(t.left, n) , r = Rl(t.top, o) , s = Rl(t.right, n) , l = Rl(t.bottom, o) , u = Rl(t.width, n) , h = Rl(t.height, o) , c = i[2] + i[0] , d = i[1] + i[3] , f = t.aspect; switch (isNaN(u) && (u = n - s - d - a), isNaN(h) && (h = o - l - c - r), null != f && (isNaN(u) && isNaN(h) && (n / o < f ? u = .8 * n : h = .8 * o), isNaN(u) && (u = f * h), isNaN(h) && (h = u / f)), isNaN(a) && (a = n - s - u - d), isNaN(r) && (r = o - l - h - c), t.left || t.right) { case "center": a = n / 2 - u / 2 - i[3]; break; case "right": a = n - u - d } switch (t.top || t.bottom) { case "middle": case "center": r = o / 2 - h / 2 - i[0]; break; case "bottom": r = o - h - c } a = a || 0, r = r || 0, isNaN(u) && (u = n - d - a - (s || 0)), isNaN(h) && (h = o - c - r - (l || 0)); var p = new Di(a + i[3],r + i[0],u,h); return p.margin = i, p } function Su(t, e, i, n, o) { var a = !o || !o.hv || o.hv[0] , r = !o || !o.hv || o.hv[1] , s = o && o.boundingMode || "all"; if (a || r) { var l; if ("raw" === s) l = "group" === t.type ? new Di(0,0,+e.width || 0,+e.height || 0) : t.getBoundingRect(); else if (l = t.getBoundingRect(), t.needLocalTransform()) { var u = t.getLocalTransform(); (l = l.clone()).applyTransform(u) } e = bu(D({ width: l.width, height: l.height }, e), i, n); var h = t.position , c = a ? e.x - l.x : 0 , d = r ? e.y - l.y : 0; t.attr("position", "raw" === s ? [c, d] : [h[0] + c, h[1] + d]) } } function Mu(l, u, t) { z(t) || (t = {}); var h = t.ignoreSize; L(h) || (h = [h, h]); var e = n(xu[0], 0) , i = n(xu[1], 1); function n(t, e) { var i = {} , n = 0 , o = {} , a = 0; if (vu(t, function(t) { o[t] = l[t] }), vu(t, function(t) { c(u, t) && (i[t] = o[t] = u[t]), d(i, t) && n++, d(o, t) && a++ }), h[e]) return d(u, t[1]) ? o[t[2]] = null : d(u, t[2]) && (o[t[1]] = null), o; if (2 !== a && n) { if (2 <= n) return i; for (var r = 0; r < t.length; r++) { var s = t[r]; if (!c(i, s) && c(l, s)) { i[s] = l[s]; break } } return i } return o } function c(t, e) { return t.hasOwnProperty(e) } function d(t, e) { return null != t[e] && "auto" !== t[e] } function o(t, e, i) { vu(t, function(t) { e[t] = i[t] }) } o(xu[0], l, e), o(xu[1], l, i) } function Iu(t) { return Tu({}, t) } function Tu(e, i) { return i && e && vu(yu, function(t) { i.hasOwnProperty(t) && (e[t] = i[t]) }), e } var Au, Du, Cu, Lu = jo(), ku = Cl.extend({ type: "component", id: "", name: "", mainType: "", subType: "", componentIndex: 0, defaultOption: null, ecModel: null, dependentModels: [], uid: null, layoutMode: null, $constructor: function(t, e, i, n) { Cl.call(this, t, e, i, n), this.uid = Nl("ec_cpt_model") }, init: function(t, e, i, n) { this.mergeDefaultAndTheme(t, i) }, mergeDefaultAndTheme: function(t, e) { var i = this.layoutMode , n = i ? Iu(t) : {}; m(t, e.getTheme().get(this.mainType)), m(t, this.getDefaultOption()), i && Mu(t, n, i) }, mergeOption: function(t, e) { m(this.option, t, !0); var i = this.layoutMode; i && Mu(this.option, t, i) }, optionUpdated: function(t, e) {}, getDefaultOption: function() { var t = Lu(this); if (!t.defaultOption) { for (var e = [], i = this.constructor; i; ) { var n = i.prototype.defaultOption; n && e.push(n), i = i.superClass } for (var o = {}, a = e.length - 1; 0 <= a; a--) o = m(o, e[a], !0); t.defaultOption = o } return t.defaultOption }, getReferringComponents: function(t) { return this.ecModel.queryComponents({ mainType: t, index: this.get(t + "Index", !0), id: this.get(t + "Id", !0) }) } }); function Pu(t, e) { return t[e] || (t[e] = { predecessor: [], successor: [] }), t[e] } ua(ku, { registerWhenExtend: !0 }), Du = {}, (Au = ku).registerSubTypeDefaulter = function(t, e) { t = na(t), Du[t.main] = e } , Au.determineSubType = function(t, e) { var i = e.type; if (!i) { var n = na(t).main; Au.hasSubTypes(t) && Du[n] && (i = Du[n](e)) } return i } , Cu = function(t) { var e = []; E(ku.getClassesByMainType(t), function(t) { e = e.concat(t.prototype.dependencies || []) }), e = O(e, function(t) { return na(t).main }), "dataset" !== t && _(e, "dataset") <= 0 && e.unshift("dataset"); return e } , ku.topologicalTravel = function(t, e, i, n) { if (t.length) { var o = function(e) { var o = {} , a = []; return E(e, function(i) { var n = Pu(o, i) , t = function(t, e) { var i = []; return E(t, function(t) { 0 <= _(e, t) && i.push(t) }), i }(n.originalDeps = Cu(i), e); n.entryCount = t.length, 0 === n.entryCount && a.push(i), E(t, function(t) { _(n.predecessor, t) < 0 && n.predecessor.push(t); var e = Pu(o, t); _(e.successor, t) < 0 && e.successor.push(i) }) }), { graph: o, noEntryList: a } }(e) , a = o.graph , r = o.noEntryList , s = {}; for (E(t, function(t) { s[t] = !0 }); r.length; ) { var l = r.pop() , u = a[l] , h = !!s[l]; h && (i.call(n, l, u.originalDeps.slice()), delete s[l]), E(u.successor, h ? d : c) } E(s, function() { throw new Error("Circle dependency may exists") }) } function c(t) { a[t].entryCount--, 0 === a[t].entryCount && r.push(t) } function d(t) { s[t] = !0, c(t) } } , b(ku, { getBoxLayoutParams: function() { return { left: this.get("left"), top: this.get("top"), right: this.get("right"), bottom: this.get("bottom"), width: this.get("width"), height: this.get("height") } } }); var Nu = ""; "undefined" != typeof navigator && (Nu = navigator.platform || ""); var Ou = { color: ["#c23531", "#2f4554", "#61a0a8", "#d48265", "#91c7ae", "#749f83", "#ca8622", "#bda29a", "#6e7074", "#546570", "#c4ccd3"], gradientColor: ["#f6efa6", "#d88273", "#bf444c"], textStyle: { fontFamily: Nu.match(/^Win/) ? "Microsoft YaHei" : "sans-serif", fontSize: 12, fontStyle: "normal", fontWeight: "normal" }, blendMode: null, animation: "auto", animationDuration: 1e3, animationDurationUpdate: 300, animationEasing: "exponentialOut", animationEasingUpdate: "cubicOut", animationThreshold: 2e3, progressiveThreshold: 3e3, progressive: 400, hoverLayerThreshold: 3e3, useUTC: !1 } , Eu = jo(); var Ru = { clearColorPalette: function() { Eu(this).colorIdx = 0, Eu(this).colorNameMap = {} }, getColorFromPalette: function(t, e, i) { var n = Eu(e = e || this) , o = n.colorIdx || 0 , a = n.colorNameMap = n.colorNameMap || {}; if (a.hasOwnProperty(t)) return a[t]; var r = Vo(this.get("color", !0)) , s = this.get("colorLayer", !0) , l = null != i && s ? function(t, e) { for (var i = t.length, n = 0; n < i; n++) if (t[n].length > e) return t[n]; return t[i - 1] }(s, i) : r; if ((l = l || r) && l.length) { var u = l[o]; return t && (a[t] = u), n.colorIdx = (o + 1) % l.length, u } } } , zu = "original" , Bu = "arrayRows" , Vu = "objectRows" , Gu = "keyedColumns" , Fu = "unknown" , Wu = "typedArray" , Hu = "column" , Zu = "row"; function Uu(t) { this.fromDataset = t.fromDataset, this.data = t.data || (t.sourceFormat === Gu ? {} : []), this.sourceFormat = t.sourceFormat || Fu, this.seriesLayoutBy = t.seriesLayoutBy || Hu, this.dimensionsDefine = t.dimensionsDefine, this.encodeDefine = t.encodeDefine && Q(t.encodeDefine), this.startIndex = t.startIndex || 0, this.dimensionsDetectCount = t.dimensionsDetectCount } Uu.seriesDataToSource = function(t) { return new Uu({ data: t, sourceFormat: V(t) ? Wu : zu, fromDataset: !1 }) } , ra(Uu); var Xu = { Must: 1, Might: 2, Not: 3 } , Yu = jo(); function ju(t) { var e = t.option , i = e.data , n = V(i) ? Wu : zu , o = !1 , a = e.seriesLayoutBy , r = e.sourceHeader , s = e.dimensions , l = Qu(t); if (l) { var u = l.option; i = u.source, n = Yu(l).sourceFormat, o = !0, a = a || u.seriesLayoutBy, null == r && (r = u.sourceHeader), s = s || u.dimensions } var h = function(t, e, i, n, o) { if (!t) return { dimensionsDefine: qu(o) }; var a, r; if (e === Bu) "auto" === n || null == n ? Ku(function(t) { null != t && "-" !== t && (R(t) ? null == r && (r = 1) : r = 0) }, i, t, 10) : r = n ? 1 : 0, o || 1 !== r || (o = [], Ku(function(t, e) { o[e] = null != t ? t : "" }, i, t)), a = o ? o.length : i === Zu ? t.length : t[0] ? t[0].length : null; else if (e === Vu) o = o || function(t) { var e, i = 0; for (; i < t.length && !(e = t[i++]); ) ; if (e) { var n = []; return E(e, function(t, e) { n.push(e) }), n } }(t); else if (e === Gu) o || (o = [], E(t, function(t, e) { o.push(e) })); else if (e === zu) { var s = Wo(t[0]); a = L(s) && s.length || 1 } return { startIndex: r, dimensionsDefine: qu(o), dimensionsDetectCount: a } }(i, n, a, r, s); Yu(t).source = new Uu({ data: i, fromDataset: o, seriesLayoutBy: a, sourceFormat: n, dimensionsDefine: h.dimensionsDefine, startIndex: h.startIndex, dimensionsDetectCount: h.dimensionsDetectCount, encodeDefine: e.encode }) } function qu(t) { if (t) { var n = Q(); return O(t, function(t, e) { if (null == (t = P({}, z(t) ? t : { name: t })).name) return t; t.name += "", null == t.displayName && (t.displayName = t.name); var i = n.get(t.name); return i ? t.name += "-" + i.count++ : n.set(t.name, { count: 1 }), t }) } } function Ku(t, e, i, n) { if (null == n && (n = 1 / 0), e === Zu) for (var o = 0; o < i.length && o < n; o++) t(i[o] ? i[o][0] : null, o); else { var a = i[0] || []; for (o = 0; o < a.length && o < n; o++) t(a[o], o) } } function $u(i, t, e) { var a = {} , n = Qu(t); if (!n || !i) return a; var r, o, s = [], l = [], u = t.ecModel, h = Yu(u).datasetMap, c = n.uid + "_" + e.seriesLayoutBy; E(i = i.slice(), function(t, e) { z(t) || (i[e] = { name: t }), "ordinal" === t.type && null == r && (o = p(i[r = e])), a[t.name] = [] }); var d = h.get(c) || h.set(c, { categoryWayDim: o, valueWayDim: 0 }); function f(t, e, i) { for (var n = 0; n < i; n++) t.push(e + n) } function p(t) { var e = t.dimsDef; return e ? e.length : 1 } return E(i, function(t, e) { var i = t.name , n = p(t); if (null == r) { var o = d.valueWayDim; f(a[i], o, n), f(l, o, n), d.valueWayDim += n } else if (r === e) f(a[i], 0, n), f(s, 0, n); else { o = d.categoryWayDim; f(a[i], o, n), f(l, o, n), d.categoryWayDim += n } }), s.length && (a.itemName = s), l.length && (a.seriesName = l), a } function Ju(t, l, u) { var e = {}; if (!Qu(t)) return e; var h, c = l.sourceFormat, d = l.dimensionsDefine; c !== Vu && c !== Gu || E(d, function(t, e) { "name" === (z(t) ? t.name : t) && (h = e) }); var i = function() { for (var t = {}, e = {}, i = [], n = 0, o = Math.min(5, u); n < o; n++) { var a = th(l.data, c, l.seriesLayoutBy, d, l.startIndex, n); i.push(a); var r = a === Xu.Not; if (r && null == t.v && n !== h && (t.v = n), null != t.n && t.n !== t.v && (r || i[t.n] !== Xu.Not) || (t.n = n), s(t) && i[t.n] !== Xu.Not) return t; r || (a === Xu.Might && null == e.v && n !== h && (e.v = n), null != e.n && e.n !== e.v || (e.n = n)) } function s(t) { return null != t.v && null != t.n } return s(t) ? t : s(e) ? e : null }(); if (i) { e.value = i.v; var n = null != h ? h : i.n; e.itemName = [n], e.seriesName = [n] } return e } function Qu(t) { var e = t.option; if (!e.data) return t.ecModel.getComponent("dataset", e.datasetIndex || 0) } function th(t, e, i, n, o, a) { var r, s, l; if (V(t)) return Xu.Not; if (n) { var u = n[a]; z(u) ? (s = u.name, l = u.type) : R(u) && (s = u) } if (null != l) return "ordinal" === l ? Xu.Must : Xu.Not; if (e === Bu) if (i === Zu) { for (var h = t[a], c = 0; c < (h || []).length && c < 5; c++) if (null != (r = g(h[o + c]))) return r } else for (c = 0; c < t.length && c < 5; c++) { var d = t[o + c]; if (d && null != (r = g(d[a]))) return r } else if (e === Vu) { if (!s) return Xu.Not; for (c = 0; c < t.length && c < 5; c++) { if ((f = t[c]) && null != (r = g(f[s]))) return r } } else if (e === Gu) { if (!s) return Xu.Not; if (!(h = t[s]) || V(h)) return Xu.Not; for (c = 0; c < h.length && c < 5; c++) if (null != (r = g(h[c]))) return r } else if (e === zu) for (c = 0; c < t.length && c < 5; c++) { var f, p = Wo(f = t[c]); if (!L(p)) return Xu.Not; if (null != (r = g(p[a]))) return r } function g(t) { var e = R(t); return null != t && isFinite(t) && "" !== t ? e ? Xu.Might : Xu.Not : e && "-" !== t ? Xu.Must : void 0 } return Xu.Not } var eh = "\0_ec_inner" , ih = Cl.extend({ init: function(t, e, i, n) { i = i || {}, this.option = null, this._theme = new Cl(i), this._optionManager = n }, setOption: function(t, e) { Y(!(eh in t), "please use chart.getOption()"), this._optionManager.setOption(t, e), this.resetOption(null) }, resetOption: function(t) { var e = !1 , i = this._optionManager; if (!t || "recreate" === t) { var n = i.mountOption("recreate" === t); this.option && "recreate" !== t ? (this.restoreData(), this.mergeOption(n)) : function(t) { t = t, this.option = {}, this.option[eh] = 1, this._componentsMap = Q({ series: [] }), this._seriesIndices, this._seriesIndicesMap, function(i, t) { var n = i.color && !i.colorLayer; E(t, function(t, e) { "colorLayer" === e && n || ku.hasClass(e) || ("object" == typeof t ? i[e] = i[e] ? m(i[e], t, !1) : k(t) : null == i[e] && (i[e] = t)) }) }(t, this._theme.option), m(t, Ou, !1), this.mergeOption(t) } .call(this, n), e = !0 } if ("timeline" !== t && "media" !== t || this.restoreData(), !t || "recreate" === t || "timeline" === t) { var o = i.getTimelineOption(this); o && (this.mergeOption(o), e = !0) } if (!t || "recreate" === t || "media" === t) { var a = i.getMediaOption(this, this._api); a.length && E(a, function(t) { this.mergeOption(t, e = !0) }, this) } return e }, mergeOption: function(n) { var l = this.option , u = this._componentsMap , i = []; !function(t) { Yu(t).datasetMap = Q() }(this), E(n, function(t, e) { null != t && (ku.hasClass(e) ? e && i.push(e) : l[e] = null == l[e] ? k(t) : m(l[e], t, !0)) }), ku.topologicalTravel(i, ku.getAllClassMainTypes(), function(r, t) { var e = Vo(n[r]) , i = Ho(u.get(r), e); Zo(i), E(i, function(t, e) { var i = t.option; z(i) && (t.keyInfo.mainType = r, t.keyInfo.subType = function(t, e, i) { return e.type ? e.type : i ? i.subType : ku.determineSubType(t, e) }(r, i, t.exist)) }); var s = function(e, t) { L(t) || (t = t ? [t] : []); var i = {}; return E(t, function(t) { i[t] = (e.get(t) || []).slice() }), i }(u, t); l[r] = [], u.set(r, []), E(i, function(t, e) { var i = t.exist , n = t.option; if (Y(z(n) || i, "Empty component definition"), n) { var o = ku.getClass(r, t.keyInfo.subType, !0); if (i && i.constructor === o) i.name = t.keyInfo.name, i.mergeOption(n, this), i.optionUpdated(n, !1); else { var a = P({ dependentModels: s, componentIndex: e }, t.keyInfo); P(i = new o(n,this,this,a), a), i.init(n, this, this, a), i.optionUpdated(null, !0) } } else i.mergeOption({}, this), i.optionUpdated({}, !1); u.get(r)[e] = i, l[r][e] = i.option }, this), "series" === r && nh(this, u.get("series")) }, this), this._seriesIndicesMap = Q(this._seriesIndices = this._seriesIndices || []) }, getOption: function() { var n = k(this.option); return E(n, function(t, e) { if (ku.hasClass(e)) { for (var i = (t = Vo(t)).length - 1; 0 <= i; i--) Xo(t[i]) && t.splice(i, 1); n[e] = t } }), delete n[eh], n }, getTheme: function() { return this._theme }, getComponent: function(t, e) { var i = this._componentsMap.get(t); if (i) return i[e || 0] }, queryComponents: function(t) { var e = t.mainType; if (!e) return []; var i, n = t.index, o = t.id, a = t.name, r = this._componentsMap.get(e); if (!r || !r.length) return []; if (null != n) L(n) || (n = [n]), i = M(O(n, function(t) { return r[t] }), function(t) { return !!t }); else if (null != o) { var s = L(o); i = M(r, function(t) { return s && 0 <= _(o, t.id) || !s && t.id === o }) } else if (null != a) { var l = L(a); i = M(r, function(t) { return l && 0 <= _(a, t.name) || !l && t.name === a }) } else i = r.slice(); return oh(i, t) }, findComponents: function(t) { var e, i, n, o, a, r = t.query, s = t.mainType, l = (i = s + "Index", n = s + "Id", o = s + "Name", !(e = r) || null == e[i] && null == e[n] && null == e[o] ? null : { mainType: s, index: e[i], id: e[n], name: e[o] }), u = l ? this.queryComponents(l) : this._componentsMap.get(s); return a = oh(u, t), t.filter ? M(a, t.filter) : a }, eachComponent: function(t, n, o) { var e = this._componentsMap; if ("function" == typeof t) o = n, n = t, e.each(function(t, i) { E(t, function(t, e) { n.call(o, i, t, e) }) }); else if (R(t)) E(e.get(t), n, o); else if (z(t)) { E(this.findComponents(t), n, o) } }, getSeriesByName: function(e) { return M(this._componentsMap.get("series"), function(t) { return t.name === e }) }, getSeriesByIndex: function(t) { return this._componentsMap.get("series")[t] }, getSeriesByType: function(e) { return M(this._componentsMap.get("series"), function(t) { return t.subType === e }) }, getSeries: function() { return this._componentsMap.get("series").slice() }, getSeriesCount: function() { return this._componentsMap.get("series").length }, eachSeries: function(i, n) { E(this._seriesIndices, function(t) { var e = this._componentsMap.get("series")[t]; i.call(n, e, t) }, this) }, eachRawSeries: function(t, e) { E(this._componentsMap.get("series"), t, e) }, eachSeriesByType: function(i, n, o) { E(this._seriesIndices, function(t) { var e = this._componentsMap.get("series")[t]; e.subType === i && n.call(o, e, t) }, this) }, eachRawSeriesByType: function(t, e, i) { return E(this.getSeriesByType(t), e, i) }, isSeriesFiltered: function(t) { return null == this._seriesIndicesMap.get(t.componentIndex) }, getCurrentSeriesIndices: function() { return (this._seriesIndices || []).slice() }, filterSeries: function(t, e) { var i = M(this._componentsMap.get("series"), t, e); nh(this, i) }, restoreData: function(i) { var n = this._componentsMap; nh(this, n.get("series")); var o = []; n.each(function(t, e) { o.push(e) }), ku.topologicalTravel(o, ku.getAllClassMainTypes(), function(e, t) { E(n.get(e), function(t) { "series" === e && function(t, e) { if (e) { var i = e.seiresIndex , n = e.seriesId , o = e.seriesName; return null != i && t.componentIndex !== i || null != n && t.id !== n || null != o && t.name !== o } }(t, i) || t.restoreData() }) }) } }); function nh(t, e) { t._seriesIndicesMap = Q(t._seriesIndices = O(e, function(t) { return t.componentIndex }) || []) } function oh(t, e) { return e.hasOwnProperty("subType") ? M(t, function(t) { return t.subType === e.subType }) : t } b(ih, Ru); var ah = ["getDom", "getZr", "getWidth", "getHeight", "getDevicePixelRatio", "dispatchAction", "isDisposed", "on", "off", "getDataURL", "getConnectedDataURL", "getModel", "getOption", "getViewOfComponentModel", "getViewOfSeriesModel"]; function rh(e) { E(ah, function(t) { this[t] = A(e[t], e) }, this) } var sh = {}; function lh() { this._coordinateSystems = [] } lh.prototype = { constructor: lh, create: function(n, o) { var a = []; E(sh, function(t, e) { var i = t.create(n, o); a = a.concat(i || []) }), this._coordinateSystems = a }, update: function(e, i) { E(this._coordinateSystems, function(t) { t.update && t.update(e, i) }) }, getCoordinateSystems: function() { return this._coordinateSystems.slice() } }, lh.register = function(t, e) { sh[t] = e } , lh.get = function(t) { return sh[t] } ; var uh = E , hh = k , ch = O , dh = m , fh = /^(min|max)?(.+)$/; function ph(t) { this._api = t, this._timelineOptions = [], this._mediaList = [], this._mediaDefault, this._currentMediaIndices = [], this._optionBackup, this._newBaseOption } function gh(t, e, i) { var a = { width: e, height: i, aspectratio: e / i } , r = !0; return E(t, function(t, e) { var i = e.match(fh); if (i && i[1] && i[2]) { var n = i[1] , o = i[2].toLowerCase(); !function(t, e, i) { return "min" === i ? e <= t : "max" === i ? t <= e : t === e }(a[o], t, n) && (r = !1) } }), r } ph.prototype = { constructor: ph, setOption: function(t, e) { t && E(Vo(t.series), function(t) { t && t.data && V(t.data) && K(t.data) }), t = hh(t); var i = this._optionBackup , n = function(t, i, n) { var e, o, a = [], r = [], s = t.timeline; t.baseOption && (o = t.baseOption); (s || t.options) && (o = o || {}, a = (t.options || []).slice()); if (t.media) { o = o || {}; var l = t.media; uh(l, function(t) { t && t.option && (t.query ? r.push(t) : e = e || t) }) } o = o || t; o.timeline || (o.timeline = s); return uh([o].concat(a).concat(O(r, function(t) { return t.option })), function(e) { uh(i, function(t) { t(e, n) }) }), { baseOption: o, timelineOptions: a, mediaDefault: e, mediaList: r } } .call(this, t, e, !i); this._newBaseOption = n.baseOption, i ? (function(o, t) { uh(t = t || {}, function(t, e) { if (null != t) { var i = o[e]; if (ku.hasClass(e)) { t = Vo(t); var n = Ho(i = Vo(i), t); o[e] = ch(n, function(t) { return t.option && t.exist ? dh(t.exist, t.option, !0) : t.exist || t.option }) } else o[e] = dh(i, t, !0) } }) }(i.baseOption, n.baseOption), n.timelineOptions.length && (i.timelineOptions = n.timelineOptions), n.mediaList.length && (i.mediaList = n.mediaList), n.mediaDefault && (i.mediaDefault = n.mediaDefault)) : this._optionBackup = n }, mountOption: function(t) { var e = this._optionBackup; return this._timelineOptions = ch(e.timelineOptions, hh), this._mediaList = ch(e.mediaList, hh), this._mediaDefault = hh(e.mediaDefault), this._currentMediaIndices = [], hh(t ? e.baseOption : this._newBaseOption) }, getTimelineOption: function(t) { var e, i = this._timelineOptions; if (i.length) { var n = t.getComponent("timeline"); n && (e = hh(i[n.getCurrentIndex()], !0)) } return e }, getMediaOption: function(t) { var e = this._api.getWidth() , i = this._api.getHeight() , n = this._mediaList , o = this._mediaDefault , a = [] , r = []; if (!n.length && !o) return r; for (var s = 0, l = n.length; s < l; s++) gh(n[s].query, e, i) && a.push(s); return !a.length && o && (a = [-1]), a.length && !function(t, e) { return t.join(",") === e.join(",") }(a, this._currentMediaIndices) && (r = ch(a, function(t) { return hh(-1 === t ? o.option : n[t].option) })), this._currentMediaIndices = a, r } }; var mh = E , vh = z , yh = ["areaStyle", "lineStyle", "nodeStyle", "linkStyle", "chordStyle", "label", "labelLine"]; function xh(t) { var e = t && t.itemStyle; if (e) for (var i = 0, n = yh.length; i < n; i++) { var o = yh[i] , a = e.normal , r = e.emphasis; a && a[o] && (t[o] = t[o] || {}, t[o].normal ? m(t[o].normal, a[o]) : t[o].normal = a[o], a[o] = null), r && r[o] && (t[o] = t[o] || {}, t[o].emphasis ? m(t[o].emphasis, r[o]) : t[o].emphasis = r[o], r[o] = null) } } function _h(t, e, i) { if (t && t[e] && (t[e].normal || t[e].emphasis)) { var n = t[e].normal , o = t[e].emphasis; n && (i ? (t[e].normal = t[e].emphasis = null, D(t[e], n)) : t[e] = n), o && (t.emphasis = t.emphasis || {}, t.emphasis[e] = o) } } function wh(t) { _h(t, "itemStyle"), _h(t, "lineStyle"), _h(t, "areaStyle"), _h(t, "label"), _h(t, "labelLine"), _h(t, "upperLabel"), _h(t, "edgeLabel") } function bh(t, e) { var i = vh(t) && t[e] , n = vh(i) && i.textStyle; if (n) for (var o = 0, a = Fo.length; o < a; o++) { e = Fo[o]; n.hasOwnProperty(e) && (i[e] = n[e]) } } function Sh(t) { t && (wh(t), bh(t, "label"), t.emphasis && bh(t.emphasis, "label")) } function Mh(t) { return L(t) ? t : t ? [t] : [] } function Ih(t) { return (L(t) ? t[0] : t) || {} } function Th(e, t) { mh(Mh(e.series), function(t) { vh(t) && function(t) { if (vh(t)) { xh(t), wh(t), bh(t, "label"), bh(t, "upperLabel"), bh(t, "edgeLabel"), t.emphasis && (bh(t.emphasis, "label"), bh(t.emphasis, "upperLabel"), bh(t.emphasis, "edgeLabel")), (i = t.markPoint) && (xh(i), Sh(i)), (n = t.markLine) && (xh(n), Sh(n)); var e = t.markArea; e && Sh(e); var i, n, o = t.data; if ("graph" === t.type) { o = o || t.nodes; var a = t.links || t.edges; if (a && !V(a)) for (var r = 0; r < a.length; r++) Sh(a[r]); E(t.categories, function(t) { wh(t) }) } if (o && !V(o)) for (r = 0; r < o.length; r++) Sh(o[r]); if ((i = t.markPoint) && i.data) { var s = i.data; for (r = 0; r < s.length; r++) Sh(s[r]) } if ((n = t.markLine) && n.data) { var l = n.data; for (r = 0; r < l.length; r++) L(l[r]) ? (Sh(l[r][0]), Sh(l[r][1])) : Sh(l[r]) } "gauge" === t.type ? (bh(t, "axisLabel"), bh(t, "title"), bh(t, "detail")) : "treemap" === t.type ? (_h(t.breadcrumb, "itemStyle"), E(t.levels, function(t) { wh(t) })) : "tree" === t.type && wh(t.leaves) } }(t) }); var i = ["xAxis", "yAxis", "radiusAxis", "angleAxis", "singleAxis", "parallelAxis", "radar"]; t && i.push("valueAxis", "categoryAxis", "logAxis", "timeAxis"), mh(i, function(t) { mh(Mh(e[t]), function(t) { t && (bh(t, "axisLabel"), bh(t.axisPointer, "label")) }) }), mh(Mh(e.parallel), function(t) { var e = t && t.parallelAxisDefault; bh(e, "axisLabel"), bh(e && e.axisPointer, "label") }), mh(Mh(e.calendar), function(t) { _h(t, "itemStyle"), bh(t, "dayLabel"), bh(t, "monthLabel"), bh(t, "yearLabel") }), mh(Mh(e.radar), function(t) { bh(t, "name") }), mh(Mh(e.geo), function(t) { vh(t) && (Sh(t), mh(Mh(t.regions), function(t) { Sh(t) })) }), mh(Mh(e.timeline), function(t) { Sh(t), _h(t, "label"), _h(t, "itemStyle"), _h(t, "controlStyle", !0); var e = t.data; L(e) && E(e, function(t) { z(t) && (_h(t, "label"), _h(t, "itemStyle")) }) }), mh(Mh(e.toolbox), function(t) { _h(t, "iconStyle"), mh(t.feature, function(t) { _h(t, "iconStyle") }) }), bh(Ih(e.axisPointer), "label"), bh(Ih(e.tooltip).axisPointer, "label") } function Ah(e) { E(Dh, function(t) { t[0]in e && !(t[1]in e) && (e[t[1]] = e[t[0]]) }) } var Dh = [["x", "left"], ["y", "top"], ["x2", "right"], ["y2", "bottom"]] , Ch = ["grid", "geo", "parallel", "legend", "toolbox", "title", "visualMap", "dataZoom", "timeline"] , Lh = function(i, t) { Th(i, t), i.series = Vo(i.series), E(i.series, function(t) { if (z(t)) { var e = t.type; if ("line" === e) null != t.clipOverflow && (t.clip = t.clipOverflow); else if ("pie" === e || "gauge" === e) null != t.clockWise && (t.clockwise = t.clockWise); else if ("gauge" === e) { var i = function(t, e) { e = e.split(","); for (var i = t, n = 0; n < e.length && null != (i = i && i[e[n]]); n++) ; return i }(t, "pointer.color"); null != i && function(t, e, i, n) { e = e.split(","); for (var o, a = t, r = 0; r < e.length - 1; r++) null == a[o = e[r]] && (a[o] = {}), a = a[o]; !n && null != a[e[r]] || (a[e[r]] = i) }(t, "itemStyle.color", i) } Ah(t) } }), i.dataRange && (i.visualMap = i.dataRange), E(Ch, function(t) { var e = i[t]; e && (L(e) || (e = [e]), E(e, function(t) { Ah(t) })) }) }; function kh(m) { E(m, function(h, c) { var d = [] , f = [NaN, NaN] , t = [h.stackResultDimension, h.stackedOverDimension] , p = h.data , g = h.isStackedByIndex , e = p.map(t, function(t, e, i) { var n, o, a = p.get(h.stackedDimension, i); if (isNaN(a)) return f; g ? o = p.getRawIndex(i) : n = p.get(h.stackedByDimension, i); for (var r = NaN, s = c - 1; 0 <= s; s--) { var l = m[s]; if (g || (o = l.data.rawIndexOf(l.stackedByDimension, n)), 0 <= o) { var u = l.data.getByRawIndex(l.stackResultDimension, o); if (0 <= a && 0 < u || a <= 0 && u < 0) { a += u, r = u; break } } } return d[0] = a, d[1] = r, d }); p.hostModel.setData(e), h.data = e }) } function Ph(t, e) { Uu.isInstance(t) || (t = Uu.seriesDataToSource(t)), this._source = t; var i = this._data = t.data , n = t.sourceFormat; n === Wu && (this._offset = 0, this._dimSize = e, this._data = i), P(this, Oh[n === Bu ? n + "_" + t.seriesLayoutBy : n]) } var Nh = Ph.prototype; Nh.pure = !1; var Oh = { arrayRows_column: { pure: Nh.persistent = !0, count: function() { return Math.max(0, this._data.length - this._source.startIndex) }, getItem: function(t) { return this._data[t + this._source.startIndex] }, appendData: zh }, arrayRows_row: { pure: !0, count: function() { var t = this._data[0]; return t ? Math.max(0, t.length - this._source.startIndex) : 0 }, getItem: function(t) { t += this._source.startIndex; for (var e = [], i = this._data, n = 0; n < i.length; n++) { var o = i[n]; e.push(o ? o[t] : null) } return e }, appendData: function() { throw new Error('Do not support appendData when set seriesLayoutBy: "row".') } }, objectRows: { pure: !0, count: Eh, getItem: Rh, appendData: zh }, keyedColumns: { pure: !0, count: function() { var t = this._source.dimensionsDefine[0].name , e = this._data[t]; return e ? e.length : 0 }, getItem: function(t) { for (var e = [], i = this._source.dimensionsDefine, n = 0; n < i.length; n++) { var o = this._data[i[n].name]; e.push(o ? o[t] : null) } return e }, appendData: function(t) { var o = this._data; E(t, function(t, e) { for (var i = o[e] || (o[e] = []), n = 0; n < (t || []).length; n++) i.push(t[n]) }) } }, original: { count: Eh, getItem: Rh, appendData: zh }, typedArray: { persistent: !(Nh.getSource = function() { return this._source } ), pure: !0, count: function() { return this._data ? this._data.length / this._dimSize : 0 }, getItem: function(t, e) { t -= this._offset, e = e || []; for (var i = this._dimSize * t, n = 0; n < this._dimSize; n++) e[n] = this._data[i + n]; return e }, appendData: function(t) { this._data = t }, clean: function() { this._offset += this.count(), this._data = null } } }; function Eh() { return this._data.length } function Rh(t) { return this._data[t] } function zh(t) { for (var e = 0; e < t.length; e++) this._data.push(t[e]) } var Bh = { arrayRows: Vh, objectRows: function(t, e, i, n) { return null != i ? t[n] : t }, keyedColumns: Vh, original: function(t, e, i, n) { var o = Wo(t); return null != i && o instanceof Array ? o[i] : o }, typedArray: Vh }; function Vh(t, e, i, n) { return null != i ? t[i] : t } var Gh = { arrayRows: Fh, objectRows: function(t, e, i, n) { return Wh(t[e], this._dimensionInfos[e]) }, keyedColumns: Fh, original: function(t, e, i, n) { var o = t && (null == t.value ? t : t.value); return !this._rawData.pure && function(t) { return Ro(t) && !(t instanceof Array) }(t) && (this.hasItemOption = !0), Wh(o instanceof Array ? o[n] : o, this._dimensionInfos[e]) }, typedArray: function(t, e, i, n) { return t[n] } }; function Fh(t, e, i, n) { return Wh(t[n], this._dimensionInfos[e]) } function Wh(t, e) { var i = e && e.type; if ("ordinal" !== i) return "time" === i && "number" != typeof t && null != t && "-" !== t && (t = +Yl(t)), null == t || "" === t ? NaN : +t; var n = e && e.ordinalMeta; return n ? n.parseAndCollect(t) : t } function Hh(t, e, i) { if (t) { var n = t.getRawDataItem(e); if (null != n) { var o, a, r = t.getProvider().getSource().sourceFormat, s = t.getDimensionInfo(i); return s && (o = s.name, a = s.index), Bh[r](n, e, a, o) } } } function Zh(t, e, i) { if (t) { var n = t.getProvider().getSource().sourceFormat; if (n === zu || n === Vu) { var o = t.getRawDataItem(e); return n !== zu || z(o) || (o = null), o ? o[i] : void 0 } } } var Uh = /\{@(.+?)\}/g , Xh = { getDataParams: function(t, e) { var i = this.getData(e) , n = this.getRawValue(t, e) , o = i.getRawIndex(t) , a = i.getName(t) , r = i.getRawDataItem(t) , s = i.getItemVisual(t, "color") , l = i.getItemVisual(t, "borderColor") , u = this.ecModel.getComponent("tooltip") , h = Qo(u && u.get("renderMode")) , c = this.mainType , d = "series" === c , f = i.userOutput; return { componentType: c, componentSubType: this.subType, componentIndex: this.componentIndex, seriesType: d ? this.subType : null, seriesIndex: this.seriesIndex, seriesId: d ? this.id : null, seriesName: d ? this.name : null, name: a, dataIndex: o, data: r, dataType: e, value: n, color: s, borderColor: l, dimensionNames: f ? f.dimensionNames : null, encode: f ? f.encode : null, marker: hu({ color: s, renderMode: h }), $vars: ["seriesName", "name", "value"] } }, getFormattedLabel: function(n, t, e, i, o) { t = t || "normal"; var a = this.getData(e) , r = a.getItemModel(n) , s = this.getDataParams(n, e); null != i && s.value instanceof Array && (s.value = s.value[i]); var l = r.get("normal" === t ? [o || "label", "formatter"] : [t, o || "label", "formatter"]); return "function" == typeof l ? (s.status = t, s.dimensionIndex = i, l(s)) : "string" == typeof l ? lu(l, s).replace(Uh, function(t, e) { var i = e.length; return "[" === e.charAt(0) && "]" === e.charAt(i - 1) && (e = +e.slice(1, i - 1)), Hh(a, n, e) }) : void 0 }, getRawValue: function(t, e) { return Hh(this.getData(e), t) }, formatTooltip: function() {} }; function Yh(t) { return new jh(t) } function jh(t) { t = t || {}, this._reset = t.reset, this._plan = t.plan, this._count = t.count, this._onDirty = t.onDirty, this._dirty = !0, this.context } var qh = jh.prototype; qh.perform = function(t) { var e, i = this._upstream, n = t && t.skip; if (this._dirty && i) { var o = this.context; o.data = o.outputData = i.context.outputData } this.__pipeline && (this.__pipeline.currentTask = this), this._plan && !n && (e = this._plan(this.context)); var a, r = h(this._modBy), s = this._modDataCount || 0, l = h(t && t.modBy), u = t && t.modDataCount || 0; function h(t) { return 1 <= t || (t = 1), t } r === l && s === u || (e = "reset"), !this._dirty && "reset" !== e || (this._dirty = !1, a = function(t, e) { var i, n; t._dueIndex = t._outputDueEnd = t._dueEnd = 0, t._settedOutputEnd = null, !e && t._reset && ((i = t._reset(t.context)) && i.progress && (n = i.forceFirstProgress, i = i.progress), L(i) && !i.length && (i = null)); t._progress = i, t._modBy = t._modDataCount = null; var o = t._downstream; return o && o.dirty(), n }(this, n)), this._modBy = l, this._modDataCount = u; var c = t && t.step; if (this._dueEnd = i ? i._outputDueEnd : this._count ? this._count(this.context) : 1 / 0, this._progress) { var d = this._dueIndex , f = Math.min(null != c ? this._dueIndex + c : 1 / 0, this._dueEnd); if (!n && (a || d < f)) { var p = this._progress; if (L(p)) for (var g = 0; g < p.length; g++) ac(this, p[g], d, f, l, u); else ac(this, p, d, f, l, u) } this._dueIndex = f; var m = null != this._settedOutputEnd ? this._settedOutputEnd : f; this._outputDueEnd = m } else this._dueIndex = this._outputDueEnd = null != this._settedOutputEnd ? this._settedOutputEnd : this._dueEnd; return this.unfinished() } ; var Kh, $h, Jh, Qh, tc, ec, ic = ec = { reset: function(t, e, i, n) { $h = t, Kh = e, Jh = i, Qh = n, tc = Math.ceil(Qh / Jh), ec.next = 1 < Jh && 0 < Qh ? oc : nc } }; function nc() { return $h < Kh ? $h++ : null } function oc() { var t = $h % tc * Jh + Math.ceil($h / tc) , e = Kh <= $h ? null : t < Qh ? t : $h; return $h++, e } function ac(t, e, i, n, o, a) { ic.reset(i, n, o, a), t._callingProgress = e, t._callingProgress({ start: i, end: n, count: n - i, next: ic.next }, t.context) } qh.dirty = function() { this._dirty = !0, this._onDirty && this._onDirty(this.context) } , qh.unfinished = function() { return this._progress && this._dueIndex < this._dueEnd } , qh.pipe = function(t) { this._downstream === t && !this._dirty || ((this._downstream = t)._upstream = this, t.dirty()) } , qh.dispose = function() { this._disposed || (this._upstream && (this._upstream._downstream = null), this._downstream && (this._downstream._upstream = null), this._dirty = !1, this._disposed = !0) } , qh.getUpstream = function() { return this._upstream } , qh.getDownstream = function() { return this._downstream } , qh.setOutputEnd = function(t) { this._outputDueEnd = this._settedOutputEnd = t } ; var rc = jo() , sc = ku.extend({ type: "series.__base__", seriesIndex: 0, coordinateSystem: null, defaultOption: null, legendVisualProvider: null, visualColorAccessPath: "itemStyle.color", visualBorderColorAccessPath: "itemStyle.borderColor", layoutMode: null, init: function(t, e, i, n) { this.seriesIndex = this.componentIndex, this.dataTask = Yh({ count: uc, reset: hc }), this.dataTask.context = { model: this }, this.mergeDefaultAndTheme(t, i), ju(this); var o = this.getInitialData(t, i); dc(o, this), this.dataTask.context.data = o, rc(this).dataBeforeProcessed = o, lc(this) }, mergeDefaultAndTheme: function(t, e) { var i = this.layoutMode , n = i ? Iu(t) : {} , o = this.subType; ku.hasClass(o) && (o += "Series"), m(t, e.getTheme().get(this.subType)), m(t, this.getDefaultOption()), Go(t, "label", ["show"]), this.fillDataTextStyle(t.data), i && Mu(t, n, i) }, mergeOption: function(t, e) { t = m(this.option, t, !0), this.fillDataTextStyle(t.data); var i = this.layoutMode; i && Mu(this.option, t, i), ju(this); var n = this.getInitialData(t, e); dc(n, this), this.dataTask.dirty(), this.dataTask.context.data = n, rc(this).dataBeforeProcessed = n, lc(this) }, fillDataTextStyle: function(t) { if (t && !V(t)) for (var e = ["show"], i = 0; i < t.length; i++) t[i] && t[i].label && Go(t[i], "label", e) }, getInitialData: function() {}, appendData: function(t) { this.getRawData().appendData(t.data) }, getData: function(t) { var e = pc(this); if (e) { var i = e.context.data; return null == t ? i : i.getLinkedData(t) } return rc(this).data }, setData: function(t) { var e = pc(this); if (e) { var i = e.context; i.data !== t && e.modifyOutputEnd && e.setOutputEnd(t.count()), i.outputData = t, e !== this.dataTask && (i.data = t) } rc(this).data = t }, getSource: function() { return function(t) { return Yu(t).source }(this) }, getRawData: function() { return rc(this).dataBeforeProcessed }, getBaseAxis: function() { var t = this.coordinateSystem; return t && t.getBaseAxis && t.getBaseAxis() }, formatTooltip: function(o, h, t, c) { var d = this , e = "html" === (c = c || "html") ? "
" : "\n" , f = "richText" === c , p = {} , g = 0; function i(t) { return { renderMode: c, content: au(tu(t)), style: p } } var m = this.getData() , a = m.mapDimension("defaultedTooltip", !0) , n = a.length , r = this.getRawValue(o) , s = L(r) , v = m.getItemVisual(o, "color"); z(v) && v.colorStops && (v = (v.colorStops[0] || {}).color), v = v || "transparent"; var l = (1 < n || s && !n ? function(t) { var l = S(t, function(t, e, i) { var n = m.getDimensionInfo(i); return t | (n && !1 !== n.tooltip && null != n.displayName) }, 0) , u = []; function e(t, e) { var i = m.getDimensionInfo(e); if (i && !1 !== i.otherDims.tooltip) { var n = i.type , o = "sub" + d.seriesIndex + "at" + g , a = hu({ color: v, type: "subItem", renderMode: c, markerId: o }) , r = "string" == typeof a ? a : a.content , s = (l ? r + au(i.displayName || "-") + ": " : "") + au("ordinal" === n ? t + "" : "time" === n ? h ? "" : du("yyyy/MM/dd hh:mm:ss", t) : tu(t)); s && u.push(s), f && (p[o] = v, ++g) } } a.length ? E(a, function(t) { e(Hh(m, o, t), t) }) : E(t, e); var i = l ? f ? "\n" : "
" : "" , n = i + u.join(i || ", "); return { renderMode: c, content: n, style: p } }(r) : i(n ? Hh(m, o, a[0]) : s ? r[0] : r)).content , u = d.seriesIndex + "at" + g , y = hu({ color: v, type: "item", renderMode: c, markerId: u }); p[u] = v, ++g; var x = m.getName(o) , _ = this.name; Uo(this) || (_ = ""), _ = _ ? au(_) + (h ? ": " : e) : ""; var w = "string" == typeof y ? y : y.content; return { html: h ? w + _ + l : _ + w + (x ? au(x) + ": " + l : l), markers: p } }, isAnimationEnabled: function() { if (v.node) return !1; var t = this.getShallow("animation"); return t && this.getData().count() > this.getShallow("animationThreshold") && (t = !1), t }, restoreData: function() { this.dataTask.dirty() }, getColorFromPalette: function(t, e, i) { var n = this.ecModel , o = Ru.getColorFromPalette.call(this, t, e, i); return o = o || n.getColorFromPalette(t, e, i) }, coordDimToDataDim: function(t) { return this.getRawData().mapDimension(t, !0) }, getProgressive: function() { return this.get("progressive") }, getProgressiveThreshold: function() { return this.get("progressiveThreshold") }, getAxisTooltipData: null, getTooltipPosition: null, pipeTask: null, preventIncremental: null, pipelineContext: null }); function lc(t) { var e = t.name; Uo(t) || (t.name = function(t) { var i = t.getRawData() , e = i.mapDimension("seriesName", !0) , n = []; return E(e, function(t) { var e = i.getDimensionInfo(t); e.displayName && n.push(e.displayName) }), n.join(" ") }(t) || e) } function uc(t) { return t.model.getRawData().count() } function hc(t) { var e = t.model; return e.setData(e.getRawData().cloneShallow()), cc } function cc(t, e) { e.outputData && t.end > e.outputData.count() && e.model.getRawData().cloneShallow(e.outputData) } function dc(e, i) { E(e.CHANGABLE_METHODS, function(t) { e.wrapMethod(t, T(fc, i)) }) } function fc(t) { var e = pc(t); e && e.setOutputEnd(this.count()) } function pc(t) { var e = (t.ecModel || {}).scheduler , i = e && e.getPipeline(t.uid); if (i) { var n = i.currentTask; if (n) { var o = n.agentStubMap; o && (n = o.get(t.uid)) } return n } } b(sc, Xh), b(sc, Ru); var gc = function() { this.group = new Ci, this.uid = Nl("viewComponent") }; gc.prototype = { constructor: gc, init: function(t, e) {}, render: function(t, e, i, n) {}, dispose: function() {}, filterForExposedEvent: null }; var mc = gc.prototype; mc.updateView = mc.updateLayout = mc.updateVisual = function(t, e, i, n) {} , oa(gc), ua(gc, { registerWhenExtend: !0 }); function vc() { var s = jo(); return function(t) { var e = s(t) , i = t.pipelineContext , n = e.large , o = e.progressiveRender , a = e.large = i && i.large , r = e.progressiveRender = i && i.progressiveRender; return !!(n ^ a || o ^ r) && "reset" } } var yc = jo() , xc = vc(); function _c() { this.group = new Ci, this.uid = Nl("viewChart"), this.renderTask = Yh({ plan: Mc, reset: Ic }), this.renderTask.context = { view: this } } var wc = _c.prototype = { type: "chart", init: function(t, e) {}, render: function(t, e, i, n) {}, highlight: function(t, e, i, n) { Sc(t.getData(), n, "emphasis") }, downplay: function(t, e, i, n) { Sc(t.getData(), n, "normal") }, remove: function(t, e) { this.group.removeAll() }, dispose: function() {}, incrementalPrepareRender: null, incrementalRender: null, updateTransform: null, filterForExposedEvent: null }; function bc(t, e, i) { if (t && (t.trigger(e, i), t.isGroup && !Qs(t))) for (var n = 0, o = t.childCount(); n < o; n++) bc(t.childAt(n), e, i) } function Sc(e, t, i) { var n = Yo(e, t) , o = t && null != t.highlightKey ? tl(t.highlightKey) : null; null != n ? E(Vo(n), function(t) { bc(e.getItemGraphicEl(t), i, o) }) : e.eachItemGraphicEl(function(t) { bc(t, i, o) }) } function Mc(t) { return xc(t.model) } function Ic(t) { var e = t.model , i = t.ecModel , n = t.api , o = t.payload , a = e.pipelineContext.progressiveRender , r = t.view , s = o && yc(o).updateMethod , l = a ? "incrementalPrepareRender" : s && r[s] ? s : "render"; return "render" !== l && r[l](e, i, n, o), Tc[l] } wc.updateView = wc.updateLayout = wc.updateVisual = function(t, e, i, n) { this.render(t, e, i, n) } , oa(_c), ua(_c, { registerWhenExtend: !0 }), _c.markUpdateMethod = function(t, e) { yc(t).updateMethod = e } ; var Tc = { incrementalPrepareRender: { progress: function(t, e) { e.view.incrementalRender(t, e.model, e.ecModel, e.api, e.payload) } }, render: { forceFirstProgress: !0, progress: function(t, e) { e.view.render(e.model, e.ecModel, e.api, e.payload) } } } , Ac = "\0__throttleOriginMethod" , Dc = "\0__throttleRate" , Cc = "\0__throttleType"; function Lc(t, i, n) { var o, a, r, s, l, u = 0, h = 0, c = null; function d() { h = (new Date).getTime(), c = null, t.apply(r, s || []) } i = i || 0; function e() { o = (new Date).getTime(), r = this, s = arguments; var t = l || i , e = l || n; l = null, a = o - (e ? u : h) - t, clearTimeout(c), e ? c = setTimeout(d, t) : 0 <= a ? d() : c = setTimeout(d, -a), u = o } return e.clear = function() { c && (clearTimeout(c), c = null) } , e.debounceNextCall = function(t) { l = t } , e } function kc(t, e, i, n) { var o = t[e]; if (o) { var a = o[Ac] || o , r = o[Cc]; if (o[Dc] !== i || r !== n) { if (null == i || !n) return t[e] = a; (o = t[e] = Lc(a, i, "debounce" === n))[Ac] = a, o[Cc] = n, o[Dc] = i } return o } } function Pc(t, e) { var i = t[e]; i && i[Ac] && (t[e] = i[Ac]) } var Nc = { createOnAllSeries: !0, performRawSeries: !0, reset: function(e, t) { var i = e.getData() , a = (e.visualColorAccessPath || "itemStyle.color").split(".") , n = e.get(a) , o = !C(n) || n instanceof cs ? null : n; n && !o || (n = e.getColorFromPalette(e.name, null, t.getSeriesCount())), i.setVisual("color", n); var r = (e.visualBorderColorAccessPath || "itemStyle.borderColor").split(".") , s = e.get(r); if (i.setVisual("borderColor", s), !t.isSeriesFiltered(e)) { o && i.each(function(t) { i.setItemVisual(t, "color", o(e.getDataParams(t))) }); return { dataEach: i.hasItemOption ? function(t, e) { var i = t.getItemModel(e) , n = i.get(a, !0) , o = i.get(r, !0); null != n && t.setItemVisual(e, "color", n), null != o && t.setItemVisual(e, "borderColor", o) } : null } } } } , Oc = { legend: { selector: { all: "全选", inverse: "反选" } }, toolbox: { brush: { title: { rect: "矩形选择", polygon: "圈选", lineX: "横向选择", lineY: "纵向选择", keep: "保持选择", clear: "清除选择" } }, dataView: { title: "数据视图", lang: ["数据视图", "关闭", "刷新"] }, dataZoom: { title: { zoom: "区域缩放", back: "区域缩放还原" } }, magicType: { title: { line: "切换为折线图", bar: "切换为柱状图", stack: "切换为堆叠", tiled: "切换为平铺" } }, restore: { title: "还原" }, saveAsImage: { title: "保存为图片", lang: ["右键另存为图片"] } }, series: { typeNames: { pie: "饼图", bar: "柱状图", line: "折线图", scatter: "散点图", effectScatter: "涟漪散点图", radar: "雷达图", tree: "树图", treemap: "矩形树图", boxplot: "箱型图", candlestick: "K线图", k: "K线图", heatmap: "热力图", map: "地图", parallel: "平行坐标图", lines: "线图", graph: "关系图", sankey: "桑基图", funnel: "漏斗图", gauge: "仪表盘图", pictorialBar: "象形柱图", themeRiver: "主题河流图", sunburst: "旭日图" } }, aria: { general: { withTitle: "这是一个关于“{title}”的图表。", withoutTitle: "这是一个图表," }, series: { single: { prefix: "", withName: "图表类型是{seriesType},表示{seriesName}。", withoutName: "图表类型是{seriesType}。" }, multiple: { prefix: "它由{seriesCount}个图表系列组成。", withName: "第{seriesId}个系列是一个表示{seriesName}的{seriesType},", withoutName: "第{seriesId}个系列是一个{seriesType},", separator: { middle: ";", end: "。" } } }, data: { allData: "其数据是——", partialData: "其中,前{displayCnt}项是——", withName: "{name}的数据是{value}", withoutName: "{value}", separator: { middle: ",", end: "" } } } } , Ec = function(t, e) { var a = e.getModel("aria"); if (a.get("show")) if (a.get("description")) t.setAttribute("aria-label", a.get("description")); else { var h = 0; e.eachSeries(function(t, e) { ++h }, this); var i, c = a.get("data.maxCount") || 10, n = a.get("series.maxCount") || 10, d = Math.min(h, n); if (!(h < 1)) { var o = function() { var t = e.getModel("title").option; t && t.length && (t = t[0]); return t && t.text }(); i = o ? p(g("general.withTitle"), { title: o }) : g("general.withoutTitle"); var f = []; i += p(g(1 < h ? "series.multiple.prefix" : "series.single.prefix"), { seriesCount: h }), e.eachSeries(function(t, e) { if (e < d) { var i, n = t.get("name"), o = "series." + (1 < h ? "multiple" : "single") + "."; i = p(i = g(n ? o + "withName" : o + "withoutName"), { seriesId: t.seriesIndex, seriesName: t.get("name"), seriesType: function(t) { return Oc.series.typeNames[t] || "自定义图" }(t.subType) }); var a = t.getData(); (window.data = a).count() > c ? i += p(g("data.partialData"), { displayCnt: c }) : i += g("data.allData"); for (var r = [], s = 0; s < a.count(); s++) if (s < c) { var l = a.getName(s) , u = Hh(a, s); r.push(p(g(l ? "data.withName" : "data.withoutName"), { name: l, value: u })) } i += r.join(g("data.separator.middle")) + g("data.separator.end"), f.push(i) } }), i += f.join(g("series.multiple.separator.middle")) + g("series.multiple.separator.end"), t.setAttribute("aria-label", i) } } function p(t, e) { if ("string" != typeof t) return t; var i = t; return E(e, function(t, e) { i = i.replace(new RegExp("\\{\\s*" + e + "\\s*\\}","g"), t) }), i } function g(t) { var e = a.get(t); if (null != e) return e; for (var i = t.split("."), n = Oc.aria, o = 0; o < i.length; ++o) n = n[i[o]]; return n } } , Rc = Math.PI; function zc(t, e, i, n) { this.ecInstance = t, this.api = e, this.unfinished; i = this._dataProcessorHandlers = i.slice(), n = this._visualHandlers = n.slice(); this._allHandlers = i.concat(n), this._stageTaskMap = Q() } var Bc = zc.prototype; function Vc(l, t, u, h, c) { var d; function f(t, e) { return t.setDirty && (!t.dirtyMap || t.dirtyMap.get(e.__pipeline.id)) } c = c || {}, E(t, function(n, t) { if (!c.visualType || c.visualType === n.visualType) { var e = l._stageTaskMap.get(n.uid) , i = e.seriesTaskMap , o = e.overallTask; if (o) { var a, r = o.agentStubMap; r.each(function(t) { f(c, t) && (t.dirty(), a = !0) }), a && o.dirty(), Gc(o, h); var s = l.getPerformArgs(o, c.block); r.each(function(t) { t.perform(s) }), d |= o.perform(s) } else i && i.each(function(t, e) { f(c, t) && t.dirty(); var i = l.getPerformArgs(t, c.block); i.skip = !n.performRawSeries && u.isSeriesFiltered(t.context.model), Gc(t, h), d |= t.perform(i) }) } }), l.unfinished |= d } Bc.restoreData = function(t, e) { t.restoreData(e), this._stageTaskMap.each(function(t) { var e = t.overallTask; e && e.dirty() }) } , Bc.getPerformArgs = function(t, e) { if (t.__pipeline) { var i = this._pipelineMap.get(t.__pipeline.id) , n = i.context , o = !e && i.progressiveEnabled && (!n || n.progressiveRender) && t.__idxInPipeline > i.blockIndex ? i.step : null , a = n && n.modDataCount; return { step: o, modBy: null != a ? Math.ceil(a / o) : null, modDataCount: a } } } , Bc.getPipeline = function(t) { return this._pipelineMap.get(t) } , Bc.updateStreamModes = function(t, e) { var i = this._pipelineMap.get(t.uid) , n = t.getData().count() , o = i.progressiveEnabled && e.incrementalPrepareRender && n >= i.threshold , a = t.get("large") && n >= t.get("largeThreshold") , r = "mod" === t.get("progressiveChunkMode") ? n : null; t.pipelineContext = i.context = { progressiveRender: o, modDataCount: r, large: a } } , Bc.restorePipelines = function(t) { var n = this , o = n._pipelineMap = Q(); t.eachSeries(function(t) { var e = t.getProgressive() , i = t.uid; o.set(i, { id: i, head: null, tail: null, threshold: t.getProgressiveThreshold(), progressiveEnabled: e && !(t.preventIncremental && t.preventIncremental()), blockIndex: -1, step: Math.round(e || 700), count: 0 }), Kc(n, t, t.dataTask) }) } , Bc.prepareStageTasks = function() { var i = this._stageTaskMap , n = this.ecInstance.getModel() , o = this.api; E(this._allHandlers, function(t) { var e = i.get(t.uid) || i.set(t.uid, []); t.reset && function(n, o, t, a, r) { var s = t.seriesTaskMap || (t.seriesTaskMap = Q()) , e = o.seriesType , i = o.getTargetSeries; o.createOnAllSeries ? a.eachRawSeries(l) : e ? a.eachRawSeriesByType(e, l) : i && i(a, r).each(l); function l(t) { var e = t.uid , i = s.get(e) || s.set(e, Yh({ plan: Uc, reset: Xc, count: qc })); i.context = { model: t, ecModel: a, api: r, useClearVisual: o.isVisual && !o.isLayout, plan: o.plan, reset: o.reset, scheduler: n }, Kc(n, t, i) } var u = n._pipelineMap; s.each(function(t, e) { u.get(e) || (t.dispose(), s.removeKey(e)) }) }(this, t, e, n, o), t.overallReset && function(n, t, e, i, o) { var a = e.overallTask = e.overallTask || Yh({ reset: Fc }); a.context = { ecModel: i, api: o, overallReset: t.overallReset, scheduler: n }; var r = a.agentStubMap = a.agentStubMap || Q() , s = t.seriesType , l = t.getTargetSeries , u = !0 , h = t.modifyOutputEnd; s ? i.eachRawSeriesByType(s, c) : l ? l(i, o).each(c) : (u = !1, E(i.getSeries(), c)); function c(t) { var e = t.uid , i = r.get(e); i || (i = r.set(e, Yh({ reset: Wc, onDirty: Zc })), a.dirty()), i.context = { model: t, overallProgress: u, modifyOutputEnd: h }, i.agent = a, i.__block = u, Kc(n, t, i) } var d = n._pipelineMap; r.each(function(t, e) { d.get(e) || (t.dispose(), a.dirty(), r.removeKey(e)) }) }(this, t, e, n, o) }, this) } , Bc.prepareView = function(t, e, i, n) { var o = t.renderTask , a = o.context; a.model = e, a.ecModel = i, a.api = n, o.__block = !t.incrementalPrepareRender, Kc(this, e, o) } , Bc.performDataProcessorTasks = function(t, e) { Vc(this, this._dataProcessorHandlers, t, e, { block: !0 }) } , Bc.performVisualTasks = function(t, e, i) { Vc(this, this._visualHandlers, t, e, i) } , Bc.performSeriesTasks = function(t) { var e; t.eachSeries(function(t) { e |= t.dataTask.perform() }), this.unfinished |= e } , Bc.plan = function() { this._pipelineMap.each(function(t) { var e = t.tail; do { if (e.__block) { t.blockIndex = e.__idxInPipeline; break } e = e.getUpstream() } while (e) }) } ; var Gc = Bc.updatePayload = function(t, e) { "remain" !== e && (t.context.payload = e) } ; function Fc(t) { t.overallReset(t.ecModel, t.api, t.payload) } function Wc(t, e) { return t.overallProgress && Hc } function Hc() { this.agent.dirty(), this.getDownstream().dirty() } function Zc() { this.agent && this.agent.dirty() } function Uc(t) { return t.plan && t.plan(t.model, t.ecModel, t.api, t.payload) } function Xc(t) { t.useClearVisual && t.data.clearAllVisual(); var e = t.resetDefines = Vo(t.reset(t.model, t.ecModel, t.api, t.payload)); return 1 < e.length ? O(e, function(t, e) { return jc(e) }) : Yc } var Yc = jc(0); function jc(a) { return function(t, e) { var i = e.data , n = e.resetDefines[a]; if (n && n.dataEach) for (var o = t.start; o < t.end; o++) n.dataEach(i, o); else n && n.progress && n.progress(t, i) } } function qc(t) { return t.data.count() } function Kc(t, e, i) { var n = e.uid , o = t._pipelineMap.get(n); o.head || (o.head = i), o.tail && o.tail.pipe(i), (o.tail = i).__idxInPipeline = o.count++, i.__pipeline = o } zc.wrapStageHandler = function(t, e) { return C(t) && (t = { overallReset: t, seriesType: function(t) { $c = null; try { t(Jc, Qc) } catch (t) {} return $c }(t) }), t.uid = Nl("stageHandler"), e && (t.visualType = e), t } ; var $c, Jc = {}, Qc = {}; function td(t, e) { for (var i in e.prototype) t[i] = et } td(Jc, ih), td(Qc, rh), Jc.eachSeriesByType = Jc.eachRawSeriesByType = function(t) { $c = t } , Jc.eachComponent = function(t) { "series" === t.mainType && t.subType && ($c = t.subType) } ; function ed() { return { axisLine: { lineStyle: { color: od } }, axisTick: { lineStyle: { color: od } }, axisLabel: { textStyle: { color: od } }, splitLine: { lineStyle: { type: "dashed", color: "#aaa" } }, splitArea: { areaStyle: { color: od } } } } var id = ["#37A2DA", "#32C5E9", "#67E0E3", "#9FE6B8", "#FFDB5C", "#ff9f7f", "#fb7293", "#E062AE", "#E690D1", "#e7bcf3", "#9d96f5", "#8378EA", "#96BFFF"] , nd = { color: id, colorLayer: [["#37A2DA", "#ffd85c", "#fd7b5f"], ["#37A2DA", "#67E0E3", "#FFDB5C", "#ff9f7f", "#E062AE", "#9d96f5"], ["#37A2DA", "#32C5E9", "#9FE6B8", "#FFDB5C", "#ff9f7f", "#fb7293", "#e7bcf3", "#8378EA", "#96BFFF"], id] } , od = "#eee" , ad = ["#dd6b66", "#759aa0", "#e69d87", "#8dc1a9", "#ea7e53", "#eedd78", "#73a373", "#73b9bc", "#7289ab", "#91ca8c", "#f49f42"] , rd = { color: ad, backgroundColor: "#333", tooltip: { axisPointer: { lineStyle: { color: od }, crossStyle: { color: od }, label: { color: "#000" } } }, legend: { textStyle: { color: od } }, textStyle: { color: od }, title: { textStyle: { color: od } }, toolbox: { iconStyle: { normal: { borderColor: od } } }, dataZoom: { textStyle: { color: od } }, visualMap: { textStyle: { color: od } }, timeline: { lineStyle: { color: od }, itemStyle: { normal: { color: ad[1] } }, label: { normal: { textStyle: { color: od } } }, controlStyle: { normal: { color: od, borderColor: od } } }, timeAxis: ed(), logAxis: ed(), valueAxis: ed(), categoryAxis: ed(), line: { symbol: "circle" }, graph: { color: ad }, gauge: { title: { textStyle: { color: od } } }, candlestick: { itemStyle: { normal: { color: "#FD1050", color0: "#0CF49B", borderColor: "#FD1050", borderColor0: "#0CF49B" } } } }; rd.categoryAxis.splitLine.show = !1, ku.extend({ type: "dataset", defaultOption: { seriesLayoutBy: Hu, sourceHeader: null, dimensions: null, source: null }, optionUpdated: function() { !function(t) { var e = t.option.source , i = Fu; if (V(e)) i = Wu; else if (L(e)) { 0 === e.length && (i = Bu); for (var n = 0, o = e.length; n < o; n++) { var a = e[n]; if (null != a) { if (L(a)) { i = Bu; break } if (z(a)) { i = Vu; break } } } } else if (z(e)) { for (var r in e) if (e.hasOwnProperty(r) && N(e[r])) { i = Gu; break } } else if (null != e) throw new Error("Invalid data"); Yu(t).sourceFormat = i }(this) } }), gc.extend({ type: "dataset" }); var sd = Ar.extend({ type: "ellipse", shape: { cx: 0, cy: 0, rx: 0, ry: 0 }, buildPath: function(t, e) { var i = e.cx , n = e.cy , o = e.rx , a = e.ry , r = .5522848 * o , s = .5522848 * a; t.moveTo(i - o, n), t.bezierCurveTo(i - o, n - s, i - r, n - a, i, n - a), t.bezierCurveTo(i + r, n - a, i + o, n - s, i + o, n), t.bezierCurveTo(i + o, n + s, i + r, n + a, i, n + a), t.bezierCurveTo(i - r, n + a, i - o, n + s, i - o, n), t.closePath() } }) , ld = /[\s,]+/; function ud(t) { R(t) && (t = (new DOMParser).parseFromString(t, "text/xml")); for (9 === t.nodeType && (t = t.firstChild); "svg" !== t.nodeName.toLowerCase() || 1 !== t.nodeType; ) t = t.nextSibling; return t } function hd() { this._defs = {}, this._root = null, this._isDefine = !1, this._isText = !1 } hd.prototype.parse = function(t, e) { e = e || {}; var i = ud(t); if (!i) throw new Error("Illegal svg"); var n = new Ci; this._root = n; var o = i.getAttribute("viewBox") || "" , a = parseFloat(i.getAttribute("width") || e.width) , r = parseFloat(i.getAttribute("height") || e.height); isNaN(a) && (a = null), isNaN(r) && (r = null), md(i, n, null, !0); for (var s, l, u = i.firstChild; u; ) this._parseNode(u, n), u = u.nextSibling; if (o) { var h = j(o).split(ld); 4 <= h.length && (s = { x: parseFloat(h[0] || 0), y: parseFloat(h[1] || 0), width: parseFloat(h[2]), height: parseFloat(h[3]) }) } if (s && null != a && null != r && (l = wd(s, a, r), !e.ignoreViewBox)) { var c = n; (n = new Ci).add(c), c.scale = l.scale.slice(), c.position = l.position.slice() } return e.ignoreRootClip || null == a || null == r || n.setClipPath(new rs({ shape: { x: 0, y: 0, width: a, height: r } })), { root: n, width: a, height: r, viewBoxRect: s, viewBoxTransform: l } } , hd.prototype._parseNode = function(t, e) { var i, n, o = t.nodeName.toLowerCase(); if ("defs" === o ? this._isDefine = !0 : "text" === o && (this._isText = !0), this._isDefine) { if (n = dd[o]) { var a = n.call(this, t) , r = t.getAttribute("id"); r && (this._defs[r] = a) } } else (n = cd[o]) && (i = n.call(this, t, e), e.add(i)); for (var s = t.firstChild; s; ) 1 === s.nodeType && this._parseNode(s, i), 3 === s.nodeType && this._isText && this._parseText(s, i), s = s.nextSibling; "defs" === o ? this._isDefine = !1 : "text" === o && (this._isText = !1) } , hd.prototype._parseText = function(t, e) { if (1 === t.nodeType) { var i = t.getAttribute("dx") || 0 , n = t.getAttribute("dy") || 0; this._textX += parseFloat(i), this._textY += parseFloat(n) } var o = new Ur({ style: { text: t.textContent, transformText: !0 }, position: [this._textX || 0, this._textY || 0] }); fd(e, o), md(t, o, this._defs); var a = o.style.fontSize; a && a < 9 && (o.style.fontSize = 9, o.scale = o.scale || [1, 1], o.scale[0] *= a / 9, o.scale[1] *= a / 9); var r = o.getBoundingRect(); return this._textX += r.width, e.add(o), o } ; var cd = { g: function(t, e) { var i = new Ci; return fd(e, i), md(t, i, this._defs), i }, rect: function(t, e) { var i = new rs; return fd(e, i), md(t, i, this._defs), i.setShape({ x: parseFloat(t.getAttribute("x") || 0), y: parseFloat(t.getAttribute("y") || 0), width: parseFloat(t.getAttribute("width") || 0), height: parseFloat(t.getAttribute("height") || 0) }), i }, circle: function(t, e) { var i = new Yr; return fd(e, i), md(t, i, this._defs), i.setShape({ cx: parseFloat(t.getAttribute("cx") || 0), cy: parseFloat(t.getAttribute("cy") || 0), r: parseFloat(t.getAttribute("r") || 0) }), i }, line: function(t, e) { var i = new ls; return fd(e, i), md(t, i, this._defs), i.setShape({ x1: parseFloat(t.getAttribute("x1") || 0), y1: parseFloat(t.getAttribute("y1") || 0), x2: parseFloat(t.getAttribute("x2") || 0), y2: parseFloat(t.getAttribute("y2") || 0) }), i }, ellipse: function(t, e) { var i = new sd; return fd(e, i), md(t, i, this._defs), i.setShape({ cx: parseFloat(t.getAttribute("cx") || 0), cy: parseFloat(t.getAttribute("cy") || 0), rx: parseFloat(t.getAttribute("rx") || 0), ry: parseFloat(t.getAttribute("ry") || 0) }), i }, polygon: function(t, e) { var i = t.getAttribute("points"); i = i && pd(i); var n = new Qr({ shape: { points: i || [] } }); return fd(e, n), md(t, n, this._defs), n }, polyline: function(t, e) { var i = new Ar; fd(e, i), md(t, i, this._defs); var n = t.getAttribute("points"); return n = n && pd(n), new ts({ shape: { points: n || [] } }) }, image: function(t, e) { var i = new Qn; return fd(e, i), md(t, i, this._defs), i.setStyle({ image: t.getAttribute("xlink:href"), x: t.getAttribute("x"), y: t.getAttribute("y"), width: t.getAttribute("width"), height: t.getAttribute("height") }), i }, text: function(t, e) { var i = t.getAttribute("x") || 0 , n = t.getAttribute("y") || 0 , o = t.getAttribute("dx") || 0 , a = t.getAttribute("dy") || 0; this._textX = parseFloat(i) + parseFloat(o), this._textY = parseFloat(n) + parseFloat(a); var r = new Ci; return fd(e, r), md(t, r, this._defs), r }, tspan: function(t, e) { var i = t.getAttribute("x") , n = t.getAttribute("y"); null != i && (this._textX = parseFloat(i)), null != n && (this._textY = parseFloat(n)); var o = t.getAttribute("dx") || 0 , a = t.getAttribute("dy") || 0 , r = new Ci; return fd(e, r), md(t, r, this._defs), this._textX += o, this._textY += a, r }, path: function(t, e) { var i = Zr(t.getAttribute("d") || ""); return fd(e, i), md(t, i, this._defs), i } } , dd = { lineargradient: function(t) { var e = parseInt(t.getAttribute("x1") || 0, 10) , i = parseInt(t.getAttribute("y1") || 0, 10) , n = parseInt(t.getAttribute("x2") || 10, 10) , o = parseInt(t.getAttribute("y2") || 0, 10) , a = new gs(e,i,n,o); return function(t, e) { var i = t.firstChild; for (; i; ) { if (1 === i.nodeType) { var n = i.getAttribute("offset"); n = 0 < n.indexOf("%") ? parseInt(n, 10) / 100 : n ? parseFloat(n) : 0; var o = i.getAttribute("stop-color") || "#000000"; e.addColorStop(n, o) } i = i.nextSibling } }(t, a), a }, radialgradient: function(t) {} }; function fd(t, e) { t && t.__inheritedStyle && (e.__inheritedStyle || (e.__inheritedStyle = {}), D(e.__inheritedStyle, t.__inheritedStyle)) } function pd(t) { for (var e = j(t).split(ld), i = [], n = 0; n < e.length; n += 2) { var o = parseFloat(e[n]) , a = parseFloat(e[n + 1]); i.push([o, a]) } return i } var gd = { fill: "fill", stroke: "stroke", "stroke-width": "lineWidth", opacity: "opacity", "fill-opacity": "fillOpacity", "stroke-opacity": "strokeOpacity", "stroke-dasharray": "lineDash", "stroke-dashoffset": "lineDashOffset", "stroke-linecap": "lineCap", "stroke-linejoin": "lineJoin", "stroke-miterlimit": "miterLimit", "font-family": "fontFamily", "font-size": "fontSize", "font-style": "fontStyle", "font-weight": "fontWeight", "text-align": "textAlign", "alignment-baseline": "textBaseline" }; function md(t, e, i, n) { var o = e.__inheritedStyle || {} , a = "text" === e.type; if (1 === t.nodeType && (function(t, e) { var i = t.getAttribute("transform"); if (i) { i = i.replace(/,/g, " "); var n = null , o = []; i.replace(xd, function(t, e, i) { o.push(e, i) }); for (var a = o.length - 1; 0 < a; a -= 2) { var r = o[a] , s = o[a - 1]; switch (n = n || ae(), s) { case "translate": r = j(r).split(ld), ue(n, n, [parseFloat(r[0]), parseFloat(r[1] || 0)]); break; case "scale": r = j(r).split(ld), ce(n, n, [parseFloat(r[0]), parseFloat(r[1] || r[0])]); break; case "rotate": r = j(r).split(ld), he(n, n, parseFloat(r[0])); break; case "skew": r = j(r).split(ld), console.warn("Skew transform is not supported yet"); break; case "matrix": r = j(r).split(ld); n[0] = parseFloat(r[0]), n[1] = parseFloat(r[1]), n[2] = parseFloat(r[2]), n[3] = parseFloat(r[3]), n[4] = parseFloat(r[4]), n[5] = parseFloat(r[5]) } } e.setLocalTransform(n) } }(t, e), P(o, function(t) { var e = t.getAttribute("style") , i = {}; if (!e) return i; var n, o = {}; _d.lastIndex = 0; for (; null != (n = _d.exec(e)); ) o[n[1]] = n[2]; for (var a in gd) gd.hasOwnProperty(a) && null != o[a] && (i[gd[a]] = o[a]); return i }(t)), !n)) for (var r in gd) if (gd.hasOwnProperty(r)) { var s = t.getAttribute(r); null != s && (o[gd[r]] = s) } var l = a ? "textFill" : "fill" , u = a ? "textStroke" : "stroke"; e.style = e.style || new Ui; var h = e.style; null != o.fill && h.set(l, yd(o.fill, i)), null != o.stroke && h.set(u, yd(o.stroke, i)), E(["lineWidth", "opacity", "fillOpacity", "strokeOpacity", "miterLimit", "fontSize"], function(t) { var e = "lineWidth" === t && a ? "textStrokeWidth" : t; null != o[t] && h.set(e, parseFloat(o[t])) }), o.textBaseline && "auto" !== o.textBaseline || (o.textBaseline = "alphabetic"), "alphabetic" === o.textBaseline && (o.textBaseline = "bottom"), "start" === o.textAlign && (o.textAlign = "left"), "end" === o.textAlign && (o.textAlign = "right"), E(["lineDashOffset", "lineCap", "lineJoin", "fontWeight", "fontFamily", "fontStyle", "textAlign", "textBaseline"], function(t) { null != o[t] && h.set(t, o[t]) }), o.lineDash && (e.style.lineDash = j(o.lineDash).split(ld)), h[u] && "none" !== h[u] && (e[u] = !0), e.__inheritedStyle = o } var vd = /url\(\s*#(.*?)\)/; function yd(t, e) { var i = e && t && t.match(vd); return i ? e[j(i[1])] : t } var xd = /(translate|scale|rotate|skewX|skewY|matrix)\(([\-\s0-9\.e,]*)\)/g; var _d = /([^\s:;]+)\s*:\s*([^:;]+)/g; function wd(t, e, i) { var n = e / t.width , o = i / t.height , a = Math.min(n, o); return { scale: [a, a], position: [-(t.x + t.width / 2) * a + e / 2, -(t.y + t.height / 2) * a + i / 2] } } var bd = Q() , Sd = { registerMap: function(t, e, i) { var n; return E(n = L(e) ? e : e.svg ? [{ type: "svg", source: e.svg, specialAreas: e.specialAreas }] : (e.geoJson && !e.features && (i = e.specialAreas, e = e.geoJson), [{ type: "geoJSON", source: e, specialAreas: i }]), function(t) { var e = t.type; "geoJson" === e && (e = t.type = "geoJSON"), (0, Md[e])(t) }), bd.set(t, n) }, retrieveMap: function(t) { return bd.get(t) } } , Md = { geoJSON: function(t) { var e = t.source; t.geoJSON = R(e) ? "undefined" != typeof JSON && JSON.parse ? JSON.parse(e) : new Function("return (" + e + ");")() : e }, svg: function(t) { t.svgXML = ud(t.source) } } , Id = Y , Td = E , Ad = C , Dd = z , Cd = ku.parseClassType , Ld = { PROCESSOR: { FILTER: 1e3, SERIES_FILTER: 800, STATISTIC: 5e3 }, VISUAL: { LAYOUT: 1e3, PROGRESSIVE_LAYOUT: 1100, GLOBAL: 2e3, CHART: 3e3, POST_CHART_LAYOUT: 3500, COMPONENT: 4e3, BRUSH: 5e3 } } , kd = "__flagInMainProcess" , Pd = "__optionUpdated" , Nd = /^[a-zA-Z0-9_]+$/; function Od(n, o) { return function(t, e, i) { !o && this._disposed || (t = t && t.toLowerCase(), Ct.prototype[n].call(this, t, e, i)) } } function Ed() { Ct.call(this) } function Rd(t, e, i) { i = i || {}, "string" == typeof e && (e = sf[e]), this.id, this.group, this._dom = t; var n = this._zr = ko(t, { renderer: i.renderer || "canvas", devicePixelRatio: i.devicePixelRatio, width: i.width, height: i.height }); this._throttledZrFlush = Lc(A(n.flush, n), 17), (e = k(e)) && Lh(e, !0), this._theme = e, this._chartsViews = [], this._chartsMap = {}, this._componentsViews = [], this._componentsMap = {}, this._coordSysMgr = new lh; var o = this._api = function(i) { var t = i._coordSysMgr; return P(new rh(i), { getCoordinateSystems: A(t.getCoordinateSystems, t), getComponentByElement: function(t) { for (; t; ) { var e = t.__ecComponentInfo; if (null != e) return i._model.getComponent(e.mainType, e.index); t = t.parent } } }) }(this); function a(t, e) { return t.__prio - e.__prio } zi(rf, a), zi(nf, a), this._scheduler = new zc(this,o,nf,rf), Ct.call(this, this._ecEventProcessor = new Qd), this._messageCenter = new Ed, this._initEvents(), this.resize = A(this.resize, this), this._pendingActions = [], n.animation.on("frame", this._onframe, this), function(t, e) { t.on("rendered", function() { e.trigger("rendered"), !t.animation.isFinished() || e[Pd] || e._scheduler.unfinished || e._pendingActions.length || e.trigger("finished") }) }(n, this), K(this) } Ed.prototype.on = Od("on", !0), Ed.prototype.off = Od("off", !0), Ed.prototype.one = Od("one", !0), b(Ed, Ct); var zd = Rd.prototype; function Bd(t, e, i) { if (!this._disposed) { var n, o = this._model, a = this._coordSysMgr.getCoordinateSystems(); e = Ko(o, e); for (var r = 0; r < a.length; r++) { var s = a[r]; if (s[t] && null != (n = s[t](o, e, i))) return n } } } zd._onframe = function() { if (!this._disposed) { var t = this._scheduler; if (this[Pd]) { var e = this[Pd].silent; this[kd] = !0, Gd(this), Vd.update.call(this), this[kd] = !1, this[Pd] = !1, Zd.call(this, e), Ud.call(this, e) } else if (t.unfinished) { var i = 1 , n = this._model , o = this._api; t.unfinished = !1; do { var a = +new Date; t.performSeriesTasks(n), t.performDataProcessorTasks(n), Wd(this, n), t.performVisualTasks(n), qd(this, this._model, o, "remain"), i -= +new Date - a } while (0 < i && t.unfinished); t.unfinished || this._zr.flush() } } } , zd.getDom = function() { return this._dom } , zd.getZr = function() { return this._zr } , zd.setOption = function(t, e, i) { if (!this._disposed) { var n; if (Dd(e) && (i = e.lazyUpdate, n = e.silent, e = e.notMerge), this[kd] = !0, !this._model || e) { var o = new ph(this._api) , a = this._theme , r = this._model = new ih; r.scheduler = this._scheduler, r.init(null, null, a, o) } this._model.setOption(t, of), i ? (this[Pd] = { silent: n }, this[kd] = !1) : (Gd(this), Vd.update.call(this), this._zr.flush(), this[Pd] = !1, this[kd] = !1, Zd.call(this, n), Ud.call(this, n)) } } , zd.setTheme = function() { console.error("ECharts#setTheme() is DEPRECATED in ECharts 3.0") } , zd.getModel = function() { return this._model } , zd.getOption = function() { return this._model && this._model.getOption() } , zd.getWidth = function() { return this._zr.getWidth() } , zd.getHeight = function() { return this._zr.getHeight() } , zd.getDevicePixelRatio = function() { return this._zr.painter.dpr || window.devicePixelRatio || 1 } , zd.getRenderedCanvas = function(t) { if (v.canvasSupported) return (t = t || {}).pixelRatio = t.pixelRatio || 1, t.backgroundColor = t.backgroundColor || this._model.get("backgroundColor"), this._zr.painter.getRenderedCanvas(t) } , zd.getSvgDataURL = function() { if (v.svgSupported) { var t = this._zr; return E(t.storage.getDisplayList(), function(t) { t.stopAnimation(!0) }), t.painter.toDataURL() } } , zd.getDataURL = function(t) { if (!this._disposed) { var e = (t = t || {}).excludeComponents , i = this._model , n = [] , o = this; Td(e, function(t) { i.eachComponent({ mainType: t }, function(t) { var e = o._componentsMap[t.__viewId]; e.group.ignore || (n.push(e), e.group.ignore = !0) }) }); var a = "svg" === this._zr.painter.getType() ? this.getSvgDataURL() : this.getRenderedCanvas(t).toDataURL("image/" + (t && t.type || "png")); return Td(n, function(t) { t.group.ignore = !1 }), a } } , zd.getConnectedDataURL = function(o) { if (!this._disposed && v.canvasSupported) { var a = "svg" === o.type , r = this.group , s = Math.min , l = Math.max; if (hf[r]) { var u = 1 / 0 , h = 1 / 0 , c = -1 / 0 , d = -1 / 0 , f = [] , i = o && o.pixelRatio || 1; E(uf, function(t, e) { if (t.group === r) { var i = a ? t.getZr().painter.getSvgDom().innerHTML : t.getRenderedCanvas(k(o)) , n = t.getDom().getBoundingClientRect(); u = s(n.left, u), h = s(n.top, h), c = l(n.right, c), d = l(n.bottom, d), f.push({ dom: i, left: n.left, top: n.top }) } }); var t = (c *= i) - (u *= i) , e = (d *= i) - (h *= i) , n = y() , p = ko(n, { renderer: a ? "svg" : "canvas" }); if (p.resize({ width: t, height: e }), a) { var g = ""; return Td(f, function(t) { var e = t.left - u , i = t.top - h; g += '' + t.dom + "" }), p.painter.getSvgRoot().innerHTML = g, o.connectedBackgroundColor && p.painter.setBackgroundColor(o.connectedBackgroundColor), p.refreshImmediately(), p.painter.toDataURL() } return o.connectedBackgroundColor && p.add(new rs({ shape: { x: 0, y: 0, width: t, height: e }, style: { fill: o.connectedBackgroundColor } })), Td(f, function(t) { var e = new Qn({ style: { x: t.left * i - u, y: t.top * i - h, image: t.dom } }); p.add(e) }), p.refreshImmediately(), n.toDataURL("image/" + (o && o.type || "png")) } return this.getDataURL(o) } } , zd.convertToPixel = T(Bd, "convertToPixel"), zd.convertFromPixel = T(Bd, "convertFromPixel"), zd.containPixel = function(t, o) { var a; if (!this._disposed) return E(t = Ko(this._model, t), function(t, n) { 0 <= n.indexOf("Models") && E(t, function(t) { var e = t.coordinateSystem; if (e && e.containPoint) a |= !!e.containPoint(o); else if ("seriesModels" === n) { var i = this._chartsMap[t.__viewId]; i && i.containPoint && (a |= i.containPoint(o, t)) } }, this) }, this), !!a } , zd.getVisual = function(t, e) { var i = (t = Ko(this._model, t, { defaultMainType: "series" })).seriesModel.getData() , n = t.hasOwnProperty("dataIndexInside") ? t.dataIndexInside : t.hasOwnProperty("dataIndex") ? i.indexOfRawIndex(t.dataIndex) : null; return null != n ? i.getItemVisual(n, e) : i.getVisual(e) } , zd.getViewOfComponentModel = function(t) { return this._componentsMap[t.__viewId] } , zd.getViewOfSeriesModel = function(t) { return this._chartsMap[t.__viewId] } ; var Vd = { prepareAndUpdate: function(t) { Gd(this), Vd.update.call(this, t) }, update: function(t) { var e = this._model , i = this._api , n = this._zr , o = this._coordSysMgr , a = this._scheduler; if (e) { a.restoreData(e, t), a.performSeriesTasks(e), o.create(e, i), a.performDataProcessorTasks(e, t), Wd(this, e), o.update(e, i), Yd(e), a.performVisualTasks(e, t), jd(this, e, i, t); var r = e.get("backgroundColor") || "transparent"; if (v.canvasSupported) n.setBackgroundColor(r); else { var s = Fe(r); r = $e(s, "rgb"), 0 === s[3] && (r = "transparent") } Kd(e, i) } }, updateTransform: function(o) { var a = this._model , r = this , s = this._api; if (a) { var l = []; a.eachComponent(function(t, e) { var i = r.getViewOfComponentModel(e); if (i && i.__alive) if (i.updateTransform) { var n = i.updateTransform(e, a, s, o); n && n.update && l.push(i) } else l.push(i) }); var n = Q(); a.eachSeries(function(t) { var e = r._chartsMap[t.__viewId]; if (e.updateTransform) { var i = e.updateTransform(t, a, s, o); i && i.update && n.set(t.uid, 1) } else n.set(t.uid, 1) }), Yd(a), this._scheduler.performVisualTasks(a, o, { setDirty: !0, dirtyMap: n }), qd(r, a, s, o, n), Kd(a, this._api) } }, updateView: function(t) { var e = this._model; e && (_c.markUpdateMethod(t, "updateView"), Yd(e), this._scheduler.performVisualTasks(e, t, { setDirty: !0 }), jd(this, this._model, this._api, t), Kd(e, this._api)) }, updateVisual: function(t) { Vd.update.call(this, t) }, updateLayout: function(t) { Vd.update.call(this, t) } }; function Gd(t) { var e = t._model , i = t._scheduler; i.restorePipelines(e), i.prepareStageTasks(), Xd(t, "component", e, i), Xd(t, "chart", e, i), i.plan() } function Fd(e, i, n, o, t) { var a = e._model; if (o) { var r = {}; r[o + "Id"] = n[o + "Id"], r[o + "Index"] = n[o + "Index"], r[o + "Name"] = n[o + "Name"]; var s = { mainType: o, query: r }; t && (s.subType = t); var l = n.excludeSeriesId; null != l && (l = Q(Vo(l))), a && a.eachComponent(s, function(t) { l && null != l.get(t.id) || u(e["series" === o ? "_chartsMap" : "_componentsMap"][t.__viewId]) }, e) } else Td(e._componentsViews.concat(e._chartsViews), u); function u(t) { t && t.__alive && t[i] && t[i](t.__model, a, e._api, n) } } function Wd(t, e) { var i = t._chartsMap , n = t._scheduler; e.eachSeries(function(t) { n.updateStreamModes(t, i[t.__viewId]) }) } function Hd(e, t) { var i = e.type , n = e.escapeConnect , o = tf[i] , a = o.actionInfo , r = (a.update || "update").split(":") , s = r.pop(); r = null != r[0] && Cd(r[0]), this[kd] = !0; var l = [e] , u = !1; e.batch && (u = !0, l = O(e.batch, function(t) { return (t = D(P({}, t), e)).batch = null, t })); var h, c = [], d = "highlight" === i || "downplay" === i; Td(l, function(t) { (h = (h = o.action(t, this._model, this._api)) || P({}, t)).type = a.event || h.type, c.push(h), d ? Fd(this, s, t, "series") : r && Fd(this, s, t, r.main, r.sub) }, this), "none" === s || d || r || (this[Pd] ? (Gd(this), Vd.update.call(this, e), this[Pd] = !1) : Vd[s].call(this, e)), h = u ? { type: a.event || i, escapeConnect: n, batch: c } : c[0], this[kd] = !1, t || this._messageCenter.trigger(h.type, h) } function Zd(t) { for (var e = this._pendingActions; e.length; ) { var i = e.shift(); Hd.call(this, i, t) } } function Ud(t) { t || this.trigger("updated") } function Xd(t, e, o, a) { for (var r = "component" === e, s = r ? t._componentsViews : t._chartsViews, l = r ? t._componentsMap : t._chartsMap, u = t._zr, h = t._api, i = 0; i < s.length; i++) s[i].__alive = !1; function n(t) { var e = "_ec_" + t.id + "_" + t.type , i = l[e]; if (!i) { var n = Cd(t.type); (i = new (r ? gc.getClass(n.main, n.sub) : _c.getClass(n.sub))).init(o, h), l[e] = i, s.push(i), u.add(i.group) } t.__viewId = i.__id = e, i.__alive = !0, i.__model = t, i.group.__ecComponentInfo = { mainType: t.mainType, index: t.componentIndex }, r || a.prepareView(i, t, o, h) } r ? o.eachComponent(function(t, e) { "series" !== t && n(e) }) : o.eachSeries(n); for (i = 0; i < s.length; ) { var c = s[i]; c.__alive ? i++ : (r || c.renderTask.dispose(), u.remove(c.group), c.dispose(o, h), s.splice(i, 1), delete l[c.__id], c.__id = c.group.__ecComponentInfo = null) } } function Yd(t) { t.clearColorPalette(), t.eachSeries(function(t) { t.clearColorPalette() }) } function jd(t, e, i, n) { !function(t, i, n, o, e) { Td(e || t._componentsViews, function(t) { var e = t.__model; t.render(e, i, n, o), Jd(e, t) }) }(t, e, i, n), Td(t._chartsViews, function(t) { t.__alive = !1 }), qd(t, e, i, n), Td(t._chartsViews, function(t) { t.__alive || t.remove(e, i) }) } function qd(n, t, e, o, a) { var r, s = n._scheduler; t.eachSeries(function(t) { var e = n._chartsMap[t.__viewId]; e.__alive = !0; var i = e.renderTask; s.updatePayload(i, o), a && a.get(t.uid) && i.dirty(), r |= i.perform(s.getPerformArgs(i)), e.group.silent = !!t.get("silent"), Jd(t, e), function(t, e) { var i = t.get("blendMode") || null; e.group.traverse(function(t) { t.isGroup || t.style.blend !== i && t.setStyle("blend", i), t.eachPendingDisplayable && t.eachPendingDisplayable(function(t) { t.setStyle("blend", i) }) }) }(t, e) }), s.unfinished |= r, function(i, t) { var e = i._zr.storage , n = 0; e.traverse(function(t) { n++ }), n > t.get("hoverLayerThreshold") && !v.node && t.eachSeries(function(t) { if (!t.preventUsingHoverLayer) { var e = i._chartsMap[t.__viewId]; e.__alive && e.group.traverse(function(t) { t.useHoverLayer = !0 }) } }) }(n, t), Ec(n._zr.dom, t) } function Kd(e, i) { Td(af, function(t) { t(e, i) }) } zd.resize = function(t) { if (!this._disposed) { this._zr.resize(t); var e = this._model; if (this._loadingFX && this._loadingFX.resize(), e) { var i = e.resetOption("media") , n = t && t.silent; this[kd] = !0, i && Gd(this), Vd.update.call(this), this[kd] = !1, Zd.call(this, n), Ud.call(this, n) } } } , zd.showLoading = function(t, e) { if (!this._disposed && (Dd(t) && (e = t, t = ""), t = t || "default", this.hideLoading(), lf[t])) { var i = lf[t](this._api, e) , n = this._zr; this._loadingFX = i, n.add(i) } } , zd.hideLoading = function() { this._disposed || (this._loadingFX && this._zr.remove(this._loadingFX), this._loadingFX = null) } , zd.makeActionFromEvent = function(t) { var e = P({}, t); return e.type = ef[t.type], e } , zd.dispatchAction = function(t, e) { this._disposed || (Dd(e) || (e = { silent: !!e }), tf[t.type] && this._model && (this[kd] ? this._pendingActions.push(t) : (Hd.call(this, t, e.silent), e.flush ? this._zr.flush(!0) : !1 !== e.flush && v.browser.weChat && this._throttledZrFlush(), Zd.call(this, e.silent), Ud.call(this, e.silent)))) } , zd.appendData = function(t) { if (!this._disposed) { var e = t.seriesIndex; this.getModel().getSeriesByIndex(e).appendData(t), this._scheduler.unfinished = !0 } } , zd.on = Od("on", !1), zd.off = Od("off", !1), zd.one = Od("one", !1); var $d = ["click", "dblclick", "mouseover", "mouseout", "mousemove", "mousedown", "mouseup", "globalout", "contextmenu"]; function Jd(t, e) { var i = t.get("z") , n = t.get("zlevel"); e.group.traverse(function(t) { "group" !== t.type && (null != i && (t.z = i), null != n && (t.zlevel = n)) }) } function Qd() { this.eventInfo } zd._initEvents = function() { Td($d, function(u) { function t(t) { var e, i = this.getModel(), n = t.target; if ("globalout" === u) e = {}; else if (n && null != n.dataIndex) { var o = n.dataModel || i.getSeriesByIndex(n.seriesIndex); e = o && o.getDataParams(n.dataIndex, n.dataType, n) || {} } else n && n.eventData && (e = P({}, n.eventData)); if (e) { var a = e.componentType , r = e.componentIndex; "markLine" !== a && "markPoint" !== a && "markArea" !== a || (a = "series", r = e.seriesIndex); var s = a && null != r && i.getComponent(a, r) , l = s && this["series" === s.mainType ? "_chartsMap" : "_componentsMap"][s.__viewId]; e.event = t, e.type = u, this._ecEventProcessor.eventInfo = { targetEl: n, packedEvent: e, model: s, view: l }, this.trigger(u, e) } } t.zrEventfulCallAtLast = !0, this._zr.on(u, t, this) }, this), Td(ef, function(t, e) { this._messageCenter.on(e, function(t) { this.trigger(e, t) }, this) }, this) } , zd.isDisposed = function() { return this._disposed } , zd.clear = function() { this._disposed || this.setOption({ series: [] }, !0) } , zd.dispose = function() { if (!this._disposed) { this._disposed = !0, Jo(this.getDom(), ff, ""); var e = this._api , i = this._model; Td(this._componentsViews, function(t) { t.dispose(i, e) }), Td(this._chartsViews, function(t) { t.dispose(i, e) }), this._zr.dispose(), delete uf[this.id] } } , b(Rd, Ct), Qd.prototype = { constructor: Qd, normalizeQuery: function(t) { var s = {} , l = {} , u = {}; if (R(t)) { var e = Cd(t); s.mainType = e.main || null, s.subType = e.sub || null } else { var h = ["Index", "Name", "Id"] , c = { name: 1, dataIndex: 1, dataType: 1 }; E(t, function(t, e) { for (var i = !1, n = 0; n < h.length; n++) { var o = h[n] , a = e.lastIndexOf(o); if (0 < a && a === e.length - o.length) { var r = e.slice(0, a); "data" !== r && (s.mainType = r, s[o.toLowerCase()] = t, i = !0) } } c.hasOwnProperty(e) && (l[e] = t, i = !0), i || (u[e] = t) }) } return { cptQuery: s, dataQuery: l, otherQuery: u } }, filter: function(t, e, i) { var n = this.eventInfo; if (!n) return !0; var o = n.targetEl , a = n.packedEvent , r = n.model , s = n.view; if (!r || !s) return !0; var l = e.cptQuery , u = e.dataQuery; return h(l, r, "mainType") && h(l, r, "subType") && h(l, r, "index", "componentIndex") && h(l, r, "name") && h(l, r, "id") && h(u, a, "name") && h(u, a, "dataIndex") && h(u, a, "dataType") && (!s.filterForExposedEvent || s.filterForExposedEvent(t, e.otherQuery, o, a)); function h(t, e, i, n) { return null == t[i] || e[n || i] === t[i] } }, afterTrigger: function() { this.eventInfo = null } }; var tf = {} , ef = {} , nf = [] , of = [] , af = [] , rf = [] , sf = {} , lf = {} , uf = {} , hf = {} , cf = new Date - 0 , df = new Date - 0 , ff = "_echarts_instance_"; function pf(t) { hf[t] = !1 } var gf = pf; function mf(t) { return uf[function(t, e) { return t.getAttribute ? t.getAttribute(e) : t[e] }(t, ff)] } function vf(t, e) { sf[t] = e } function yf(t) { of.push(t) } function xf(t, e) { Mf(nf, t, e, 1e3) } function _f(t, e, i) { "function" == typeof e && (i = e, e = ""); var n = Dd(t) ? t.type : [t, t = { event: e }][0]; t.event = (t.event || n).toLowerCase(), e = t.event, Id(Nd.test(n) && Nd.test(e)), tf[n] || (tf[n] = { action: i, actionInfo: t }), ef[e] = n } function wf(t, e) { lh.register(t, e) } function bf(t, e) { Mf(rf, t, e, 1e3, "layout") } function Sf(t, e) { Mf(rf, t, e, 3e3, "visual") } function Mf(t, e, i, n, o) { (Ad(e) || Dd(e)) && (i = e, e = n); var a = zc.wrapStageHandler(i, o); return a.__prio = e, a.__raw = i, t.push(a), a } function If(t, e) { lf[t] = e } function Tf(t) { return ku.extend(t) } function Af(t) { return gc.extend(t) } function Df(t) { return sc.extend(t) } function Cf(t) { return _c.extend(t) } Sf(2e3, Nc), yf(Lh), xf(900, function(t) { var a = Q(); t.eachSeries(function(t) { var e = t.get("stack"); if (e) { var i = a.get(e) || a.set(e, []) , n = t.getData() , o = { stackResultDimension: n.getCalculationInfo("stackResultDimension"), stackedOverDimension: n.getCalculationInfo("stackedOverDimension"), stackedDimension: n.getCalculationInfo("stackedDimension"), stackedByDimension: n.getCalculationInfo("stackedByDimension"), isStackedByIndex: n.getCalculationInfo("isStackedByIndex"), data: n, seriesModel: t }; if (!o.stackedDimension || !o.isStackedByIndex && !o.stackedByDimension) return; i.length && n.setCalculationInfo("stackedOnSeries", i[i.length - 1].seriesModel), i.push(o) } }), a.each(kh) }), If("default", function(o, a) { D(a = a || {}, { text: "loading", textColor: "#000", fontSize: "12px", maskColor: "rgba(255, 255, 255, 0.8)", showSpinner: !0, color: "#c23531", spinnerRadius: 10, lineWidth: 5, zlevel: 0 }); var t = new Ci , r = new rs({ style: { fill: a.maskColor }, zlevel: a.zlevel, z: 1e4 }); t.add(r); var s = a.fontSize + " sans-serif" , l = new rs({ style: { fill: "none", text: a.text, font: s, textPosition: "right", textDistance: 10, textFill: a.textColor }, zlevel: a.zlevel, z: 10001 }); if (t.add(l), a.showSpinner) { var u = new fs({ shape: { startAngle: -Rc / 2, endAngle: -Rc / 2 + .1, r: a.spinnerRadius }, style: { stroke: a.color, lineCap: "round", lineWidth: a.lineWidth }, zlevel: a.zlevel, z: 10001 }); u.animateShape(!0).when(1e3, { endAngle: 3 * Rc / 2 }).start("circularInOut"), u.animateShape(!0).when(1e3, { startAngle: 3 * Rc / 2 }).delay(300).start("circularInOut"), t.add(u) } return t.resize = function() { var t = pn(a.text, s) , e = a.showSpinner ? a.spinnerRadius : 0 , i = (o.getWidth() - 2 * e - (a.showSpinner && t ? 10 : 0) - t) / 2 - (a.showSpinner ? 0 : t / 2) , n = o.getHeight() / 2; a.showSpinner && u.setShape({ cx: i, cy: n }), l.setShape({ x: i - e, y: n - e, width: 2 * e, height: 2 * e }), r.setShape({ x: 0, y: 0, width: o.getWidth(), height: o.getHeight() }) } , t.resize(), t }), _f({ type: "highlight", event: "highlight", update: "highlight" }, et), _f({ type: "downplay", event: "downplay", update: "downplay" }, et), vf("light", nd), vf("dark", rd); function Lf(t) { return t } function kf(t, e, i, n, o) { this._old = t, this._new = e, this._oldKeyGetter = i || Lf, this._newKeyGetter = n || Lf, this.context = o } function Pf(t, e, i, n, o) { for (var a = 0; a < t.length; a++) { var r = "_ec_" + o[n](t[a], a) , s = e[r]; null == s ? (i.push(r), e[r] = a) : (s.length || (e[r] = s = [s]), s.push(a)) } } kf.prototype = { constructor: kf, add: function(t) { return this._add = t, this }, update: function(t) { return this._update = t, this }, remove: function(t) { return this._remove = t, this }, execute: function() { var t = this._old , e = this._new , i = {} , n = [] , o = []; for (Pf(t, {}, n, "_oldKeyGetter", this), Pf(e, i, o, "_newKeyGetter", this), a = 0; a < t.length; a++) { if (null != (s = i[r = n[a]])) (u = s.length) ? (1 === u && (i[r] = null), s = s.shift()) : i[r] = null, this._update && this._update(s, a); else this._remove && this._remove(a) } for (var a = 0; a < o.length; a++) { var r = o[a]; if (i.hasOwnProperty(r)) { var s; if (null == (s = i[r])) continue; if (s.length) for (var l = 0, u = s.length; l < u; l++) this._add && this._add(s[l]); else this._add && this._add(s) } } } }; var Nf = Q(["tooltip", "label", "itemName", "itemId", "seriesName"]); function Of(t, e) { return t.hasOwnProperty(e) || (t[e] = []), t[e] } function Ef(t) { return "category" === t ? "ordinal" : "time" === t ? "time" : "float" } function Rf(t) { null != t && P(this, t), this.otherDims = {} } var zf = z , Bf = "undefined" , Vf = { float: typeof Float64Array == Bf ? Array : Float64Array, int: typeof Int32Array == Bf ? Array : Int32Array, ordinal: Array, number: Array, time: Array } , Gf = typeof Uint32Array == Bf ? Array : Uint32Array , Ff = typeof Int32Array == Bf ? Array : Int32Array , Wf = typeof Uint16Array == Bf ? Array : Uint16Array; function Hf(t) { return 65535 < t._rawCount ? Gf : Wf } var Zf = ["hasItemOption", "_nameList", "_idList", "_invertedIndicesMap", "_rawData", "_chunkSize", "_chunkCount", "_dimValueGetter", "_count", "_rawCount", "_nameDimIdx", "_idDimIdx"] , Uf = ["_extent", "_approximateExtent", "_rawExtent"]; function Xf(e, i) { E(Zf.concat(i.__wrappedMethods || []), function(t) { i.hasOwnProperty(t) && (e[t] = i[t]) }), e.__wrappedMethods = i.__wrappedMethods, E(Uf, function(t) { e[t] = k(i[t]) }), e._calculationInfo = P(i._calculationInfo) } var Yf = function(t, e) { t = t || ["x", "y"]; for (var i = {}, n = [], o = {}, a = 0; a < t.length; a++) { var r = t[a]; R(r) ? r = new Rf({ name: r }) : r instanceof Rf || (r = new Rf(r)); var s = r.name; r.type = r.type || "float", r.coordDim || (r.coordDim = s, r.coordDimIndex = 0), r.otherDims = r.otherDims || {}, n.push(s), (i[s] = r).index = a, r.createInvertedIndices && (o[s] = []) } this.dimensions = n, this._dimensionInfos = i, this.hostModel = e, this.dataType, this._indices = null, this._count = 0, this._rawCount = 0, this._storage = {}, this._nameList = [], this._idList = [], this._optionModels = [], this._visual = {}, this._layout = {}, this._itemVisuals = [], this.hasItemVisual = {}, this._itemLayouts = [], this._graphicEls = [], this._chunkSize = 1e5, this._chunkCount = 0, this._rawData, this._rawExtent = {}, this._extent = {}, this._approximateExtent = {}, this._dimensionsSummary = function(n) { var t = {} , a = t.encode = {} , r = Q() , s = [] , l = [] , u = t.userOutput = { dimensionNames: n.dimensions.slice(), encode: {} }; E(n.dimensions, function(t) { var o = n.getDimensionInfo(t) , e = o.coordDim; if (e) { var i = o.coordDimIndex; Of(a, e)[i] = t, o.isExtraCoord || (r.set(e, 1), function(t) { return !("ordinal" === t || "time" === t) }(o.type) && (s[0] = t), Of(u.encode, e)[i] = o.index), o.defaultTooltip && l.push(t) } Nf.each(function(t, e) { var i = Of(a, e) , n = o.otherDims[e]; null != n && !1 !== n && (i[n] = o.name) }) }); var o = [] , h = {}; r.each(function(t, e) { var i = a[e]; h[e] = i[0], o = o.concat(i) }), t.dataDimsOnCoord = o, t.encodeFirstDimNotExtra = h; var e = a.label; e && e.length && (s = e.slice()); var i = a.tooltip; return i && i.length ? l = i.slice() : l.length || (l = s.slice()), a.defaultedLabel = s, a.defaultedTooltip = l, t }(this), this._invertedIndicesMap = o, this._calculationInfo = {}, this.userOutput = this._dimensionsSummary.userOutput } , jf = Yf.prototype; function qf(t, e, i, n, o) { var a = Vf[e.type] , r = n - 1 , s = e.name , l = t[s][r]; if (l && l.length < i) { for (var u = new a(Math.min(o - r * i, i)), h = 0; h < l.length; h++) u[h] = l[h]; t[s][r] = u } for (var c = n * i; c < o; c += i) t[s].push(new a(Math.min(o - c, i))) } function Kf(o) { var a = o._invertedIndicesMap; E(a, function(t, e) { var i = o._dimensionInfos[e].ordinalMeta; if (i) { t = a[e] = new Ff(i.categories.length); for (var n = 0; n < t.length; n++) t[n] = -1; for (n = 0; n < o._count; n++) t[o.get(e, n)] = n } }) } function $f(t, e, i) { var n; if (null != e) { var o = t._chunkSize , a = Math.floor(i / o) , r = i % o , s = t.dimensions[e] , l = t._storage[s][a]; if (l) { n = l[r]; var u = t._dimensionInfos[s].ordinalMeta; u && u.categories.length && (n = u.categories[n]) } } return n } function Jf(t) { return t } function Qf(t) { return t < this._count && 0 <= t ? this._indices[t] : -1 } function tp(t, e) { var i = t._idList[e]; return null == i && (i = $f(t, t._idDimIdx, e)), null == i && (i = "e\0\0" + e), i } function ep(t) { return L(t) || (t = [t]), t } function ip(t, e) { var i = t.dimensions , n = new Yf(O(i, t.getDimensionInfo, t),t.hostModel); Xf(n, t); for (var o = n._storage = {}, a = t._storage, r = 0; r < i.length; r++) { var s = i[r]; a[s] && (0 <= _(e, s) ? (o[s] = np(a[s]), n._rawExtent[s] = op(), n._extent[s] = null) : o[s] = a[s]) } return n } function np(t) { for (var e, i, n = new Array(t.length), o = 0; o < t.length; o++) n[o] = (e = t[o], i = void 0, (i = e.constructor) === Array ? e.slice() : new i(e)); return n } function op() { return [1 / 0, -1 / 0] } jf.type = "list", jf.hasItemOption = !0, jf.getDimension = function(t) { return "number" != typeof t && (isNaN(t) || this._dimensionInfos.hasOwnProperty(t)) || (t = this.dimensions[t]), t } , jf.getDimensionInfo = function(t) { return this._dimensionInfos[this.getDimension(t)] } , jf.getDimensionsOnCoord = function() { return this._dimensionsSummary.dataDimsOnCoord.slice() } , jf.mapDimension = function(t, e) { var i = this._dimensionsSummary; if (null == e) return i.encodeFirstDimNotExtra[t]; var n = i.encode[t]; return !0 === e ? (n || []).slice() : n && n[e] } , jf.initData = function(t, e, i) { (Uu.isInstance(t) || N(t)) && (t = new Ph(t,this.dimensions.length)), this._rawData = t, this._storage = {}, this._indices = null, this._nameList = e || [], this._idList = [], this._nameRepeatCount = {}, i || (this.hasItemOption = !1), this.defaultDimValueGetter = Gh[this._rawData.getSource().sourceFormat], this._dimValueGetter = i = i || this.defaultDimValueGetter, this._dimValueGetterArrayRows = Gh.arrayRows, this._rawExtent = {}, this._initDataFromProvider(0, t.count()), t.pure && (this.hasItemOption = !1) } , jf.getProvider = function() { return this._rawData } , jf.appendData = function(t) { var e = this._rawData , i = this.count(); e.appendData(t); var n = e.count(); e.persistent || (n += i), this._initDataFromProvider(i, n) } , jf.appendValues = function(t, e) { for (var i = this._chunkSize, n = this._storage, o = this.dimensions, a = o.length, r = this._rawExtent, s = this.count(), l = s + Math.max(t.length, e ? e.length : 0), u = this._chunkCount, h = 0; h < a; h++) { r[v = o[h]] || (r[v] = op()), n[v] || (n[v] = []), qf(n, this._dimensionInfos[v], i, u, l), this._chunkCount = n[v].length } for (var c = new Array(a), d = s; d < l; d++) { for (var f = d - s, p = Math.floor(d / i), g = d % i, m = 0; m < a; m++) { var v = o[m] , y = this._dimValueGetterArrayRows(t[f] || c, v, f, m); n[v][p][g] = y; var x = r[v]; y < x[0] && (x[0] = y), y > x[1] && (x[1] = y) } e && (this._nameList[d] = e[f]) } this._rawCount = this._count = l, this._extent = {}, Kf(this) } , jf._initDataFromProvider = function(t, e) { if (!(e <= t)) { for (var i, n = this._chunkSize, o = this._rawData, a = this._storage, r = this.dimensions, s = r.length, l = this._dimensionInfos, u = this._nameList, h = this._idList, c = this._rawExtent, d = this._nameRepeatCount = {}, f = this._chunkCount, p = 0; p < s; p++) { c[w = r[p]] || (c[w] = op()); var g = l[w]; 0 === g.otherDims.itemName && (i = this._nameDimIdx = p), 0 === g.otherDims.itemId && (this._idDimIdx = p), a[w] || (a[w] = []), qf(a, g, n, f, e), this._chunkCount = a[w].length } for (var m = new Array(s), v = t; v < e; v++) { m = o.getItem(v, m); for (var y = Math.floor(v / n), x = v % n, _ = 0; _ < s; _++) { var w, b = a[w = r[_]][y], S = this._dimValueGetter(m, w, v, _); b[x] = S; var M = c[w]; S < M[0] && (M[0] = S), S > M[1] && (M[1] = S) } if (!o.pure) { var I = u[v]; if (m && null == I) if (null != m.name) u[v] = I = m.name; else if (null != i) { var T = r[i] , A = a[T][y]; if (A) { I = A[x]; var D = l[T].ordinalMeta; D && D.categories.length && (I = D.categories[I]) } } var C = null == m ? null : m.id; null == C && null != I && (d[I] = d[I] || 0, 0 < d[C = I] && (C += "__ec__" + d[I]), d[I]++), null != C && (h[v] = C) } } !o.persistent && o.clean && o.clean(), this._rawCount = this._count = e, this._extent = {}, Kf(this) } } , jf.count = function() { return this._count } , jf.getIndices = function() { var t = this._indices; if (t) { var e = t.constructor , i = this._count; if (e === Array) { o = new e(i); for (var n = 0; n < i; n++) o[n] = t[n] } else o = new e(t.buffer,0,i) } else { var o = new (e = Hf(this))(this.count()); for (n = 0; n < o.length; n++) o[n] = n } return o } , jf.get = function(t, e) { if (!(0 <= e && e < this._count)) return NaN; var i = this._storage; if (!i[t]) return NaN; e = this.getRawIndex(e); var n = Math.floor(e / this._chunkSize) , o = e % this._chunkSize; return i[t][n][o] } , jf.getByRawIndex = function(t, e) { if (!(0 <= e && e < this._rawCount)) return NaN; var i = this._storage[t]; if (!i) return NaN; var n = Math.floor(e / this._chunkSize) , o = e % this._chunkSize; return i[n][o] } , jf._getFast = function(t, e) { var i = Math.floor(e / this._chunkSize) , n = e % this._chunkSize; return this._storage[t][i][n] } , jf.getValues = function(t, e) { var i = []; L(t) || (e = t, t = this.dimensions); for (var n = 0, o = t.length; n < o; n++) i.push(this.get(t[n], e)); return i } , jf.hasValue = function(t) { for (var e = this._dimensionsSummary.dataDimsOnCoord, i = 0, n = e.length; i < n; i++) if (isNaN(this.get(e[i], t))) return !1; return !0 } , jf.getDataExtent = function(t) { t = this.getDimension(t); var e = this._storage[t] , i = op(); if (!e) return i; var n, o = this.count(); if (!this._indices) return this._rawExtent[t].slice(); if (n = this._extent[t]) return n.slice(); for (var a = (n = i)[0], r = n[1], s = 0; s < o; s++) { var l = this._getFast(t, this.getRawIndex(s)); l < a && (a = l), r < l && (r = l) } return n = [a, r], this._extent[t] = n } , jf.getApproximateExtent = function(t) { return t = this.getDimension(t), this._approximateExtent[t] || this.getDataExtent(t) } , jf.setApproximateExtent = function(t, e) { e = this.getDimension(e), this._approximateExtent[e] = t.slice() } , jf.getCalculationInfo = function(t) { return this._calculationInfo[t] } , jf.setCalculationInfo = function(t, e) { zf(t) ? P(this._calculationInfo, t) : this._calculationInfo[t] = e } , jf.getSum = function(t) { var e = 0; if (this._storage[t]) for (var i = 0, n = this.count(); i < n; i++) { var o = this.get(t, i); isNaN(o) || (e += o) } return e } , jf.getMedian = function(t) { var i = []; this.each(t, function(t, e) { isNaN(t) || i.push(t) }); var e = [].concat(i).sort(function(t, e) { return t - e }) , n = this.count(); return 0 === n ? 0 : n % 2 == 1 ? e[(n - 1) / 2] : (e[n / 2] + e[n / 2 - 1]) / 2 } , jf.rawIndexOf = function(t, e) { var i = (t && this._invertedIndicesMap[t])[e]; return null == i || isNaN(i) ? -1 : i } , jf.indexOfName = function(t) { for (var e = 0, i = this.count(); e < i; e++) if (this.getName(e) === t) return e; return -1 } , jf.indexOfRawIndex = function(t) { if (t >= this._rawCount || t < 0) return -1; if (!this._indices) return t; var e = this._indices , i = e[t]; if (null != i && i < this._count && i === t) return t; for (var n = 0, o = this._count - 1; n <= o; ) { var a = (n + o) / 2 | 0; if (e[a] < t) n = 1 + a; else { if (!(e[a] > t)) return a; o = a - 1 } } return -1 } , jf.indicesOfNearest = function(t, e, i) { var n = []; if (!this._storage[t]) return n; null == i && (i = 1 / 0); for (var o = 1 / 0, a = -1, r = 0, s = 0, l = this.count(); s < l; s++) { var u = e - this.get(t, s) , h = Math.abs(u); h <= i && ((h < o || h === o && 0 <= u && a < 0) && (o = h, a = u, r = 0), u === a && (n[r++] = s)) } return n.length = r, n } , jf.getRawIndex = Jf, jf.getRawDataItem = function(t) { if (this._rawData.persistent) return this._rawData.getItem(this.getRawIndex(t)); for (var e = [], i = 0; i < this.dimensions.length; i++) { var n = this.dimensions[i]; e.push(this.get(n, t)) } return e } , jf.getName = function(t) { var e = this.getRawIndex(t); return this._nameList[e] || $f(this, this._nameDimIdx, e) || "" } , jf.getId = function(t) { return tp(this, this.getRawIndex(t)) } , jf.each = function(t, e, i, n) { if (this._count) { "function" == typeof t && (n = i, i = e, e = t, t = []), i = i || n || this; for (var o = (t = O(ep(t), this.getDimension, this)).length, a = 0; a < this.count(); a++) switch (o) { case 0: e.call(i, a); break; case 1: e.call(i, this.get(t[0], a), a); break; case 2: e.call(i, this.get(t[0], a), this.get(t[1], a), a); break; default: for (var r = 0, s = []; r < o; r++) s[r] = this.get(t[r], a); s[r] = a, e.apply(i, s) } } } , jf.filterSelf = function(t, e, i, n) { if (this._count) { "function" == typeof t && (n = i, i = e, e = t, t = []), i = i || n || this, t = O(ep(t), this.getDimension, this); for (var o = this.count(), a = new (Hf(this))(o), r = [], s = t.length, l = 0, u = t[0], h = 0; h < o; h++) { var c, d = this.getRawIndex(h); if (0 === s) c = e.call(i, h); else if (1 === s) { var f = this._getFast(u, d); c = e.call(i, f, h) } else { for (var p = 0; p < s; p++) r[p] = this._getFast(u, d); r[p] = h, c = e.apply(i, r) } c && (a[l++] = d) } return l < o && (this._indices = a), this._count = l, this._extent = {}, this.getRawIndex = this._indices ? Qf : Jf, this } } , jf.selectRange = function(t) { if (this._count) { var e = []; for (var i in t) t.hasOwnProperty(i) && e.push(i); var n = e.length; if (n) { var o = this.count() , a = new (Hf(this))(o) , r = 0 , s = e[0] , l = t[s][0] , u = t[s][1] , h = !1; if (!this._indices) { var c = 0; if (1 === n) { for (var d = this._storage[e[0]], f = 0; f < this._chunkCount; f++) for (var p = d[f], g = Math.min(this._count - f * this._chunkSize, this._chunkSize), m = 0; m < g; m++) { (l <= (w = p[m]) && w <= u || isNaN(w)) && (a[r++] = c), c++ } h = !0 } else if (2 === n) { d = this._storage[s]; var v = this._storage[e[1]] , y = t[e[1]][0] , x = t[e[1]][1]; for (f = 0; f < this._chunkCount; f++) { p = d[f]; var _ = v[f]; for (g = Math.min(this._count - f * this._chunkSize, this._chunkSize), m = 0; m < g; m++) { var w = p[m] , b = _[m]; (l <= w && w <= u || isNaN(w)) && (y <= b && b <= x || isNaN(b)) && (a[r++] = c), c++ } } h = !0 } } if (!h) if (1 === n) for (m = 0; m < o; m++) { var S = this.getRawIndex(m); (l <= (w = this._getFast(s, S)) && w <= u || isNaN(w)) && (a[r++] = S) } else for (m = 0; m < o; m++) { var M = !0; for (S = this.getRawIndex(m), f = 0; f < n; f++) { var I = e[f]; ((w = this._getFast(i, S)) < t[I][0] || w > t[I][1]) && (M = !1) } M && (a[r++] = this.getRawIndex(m)) } return r < o && (this._indices = a), this._count = r, this._extent = {}, this.getRawIndex = this._indices ? Qf : Jf, this } } } , jf.mapArray = function(t, e, i, n) { "function" == typeof t && (n = i, i = e, e = t, t = []), i = i || n || this; var o = []; return this.each(t, function() { o.push(e && e.apply(this, arguments)) }, i), o } , jf.map = function(t, e, i, n) { i = i || n || this; var o = ip(this, t = O(ep(t), this.getDimension, this)); o._indices = this._indices, o.getRawIndex = o._indices ? Qf : Jf; for (var a = o._storage, r = [], s = this._chunkSize, l = t.length, u = this.count(), h = [], c = o._rawExtent, d = 0; d < u; d++) { for (var f = 0; f < l; f++) h[f] = this.get(t[f], d); h[l] = d; var p = e && e.apply(i, h); if (null != p) { "object" != typeof p && (r[0] = p, p = r); for (var g = this.getRawIndex(d), m = Math.floor(g / s), v = g % s, y = 0; y < p.length; y++) { var x = t[y] , _ = p[y] , w = c[x] , b = a[x]; b && (b[m][v] = _), _ < w[0] && (w[0] = _), _ > w[1] && (w[1] = _) } } } return o } , jf.downSample = function(t, e, i, n) { for (var o = ip(this, [t]), a = o._storage, r = [], s = Math.floor(1 / e), l = a[t], u = this.count(), h = this._chunkSize, c = o._rawExtent[t], d = new (Hf(this))(u), f = 0, p = 0; p < u; p += s) { u - p < s && (s = u - p, r.length = s); for (var g = 0; g < s; g++) { var m = this.getRawIndex(p + g) , v = Math.floor(m / h) , y = m % h; r[g] = l[v][y] } var x = i(r) , _ = this.getRawIndex(Math.min(p + n(r, x) || 0, u - 1)) , w = _ % h; (l[Math.floor(_ / h)][w] = x) < c[0] && (c[0] = x), x > c[1] && (c[1] = x), d[f++] = _ } return o._count = f, o._indices = d, o.getRawIndex = Qf, o } , jf.getItemModel = function(t) { var e = this.hostModel; return new Cl(this.getRawDataItem(t),e,e && e.ecModel) } , jf.diff = function(e) { var i = this; return new kf(e ? e.getIndices() : [],this.getIndices(),function(t) { return tp(e, t) } ,function(t) { return tp(i, t) } ) } , jf.getVisual = function(t) { var e = this._visual; return e && e[t] } , jf.setVisual = function(t, e) { if (zf(t)) for (var i in t) t.hasOwnProperty(i) && this.setVisual(i, t[i]); else this._visual = this._visual || {}, this._visual[t] = e } , jf.setLayout = function(t, e) { if (zf(t)) for (var i in t) t.hasOwnProperty(i) && this.setLayout(i, t[i]); else this._layout[t] = e } , jf.getLayout = function(t) { return this._layout[t] } , jf.getItemLayout = function(t) { return this._itemLayouts[t] } , jf.setItemLayout = function(t, e, i) { this._itemLayouts[t] = i ? P(this._itemLayouts[t] || {}, e) : e } , jf.clearItemLayouts = function() { this._itemLayouts.length = 0 } , jf.getItemVisual = function(t, e, i) { var n = this._itemVisuals[t] , o = n && n[e]; return null != o || i ? o : this.getVisual(e) } , jf.setItemVisual = function(t, e, i) { var n = this._itemVisuals[t] || {} , o = this.hasItemVisual; if (this._itemVisuals[t] = n, zf(e)) for (var a in e) e.hasOwnProperty(a) && (n[a] = e[a], o[a] = !0); else n[e] = i, o[e] = !0 } , jf.clearAllVisual = function() { this._visual = {}, this._itemVisuals = [], this.hasItemVisual = {} } ; function ap(t) { t.seriesIndex = this.seriesIndex, t.dataIndex = this.dataIndex, t.dataType = this.dataType } function rp(t, e, i) { Uu.isInstance(e) || (e = Uu.seriesDataToSource(e)), i = i || {}, t = (t || []).slice(); for (var n = (i.dimsDef || []).slice(), o = Q(), a = Q(), l = [], r = function(t, e, i, n) { var o = Math.max(t.dimensionsDetectCount || 1, e.length, i.length, n || 0); return E(e, function(t) { var e = t.dimsDef; e && (o = Math.max(o, e.length)) }), o }(e, t, n, i.dimCount), s = 0; s < r; s++) { var u = n[s] = P({}, z(n[s]) ? n[s] : { name: n[s] }) , h = u.name , c = l[s] = new Rf; null != h && null == o.get(h) && (c.name = c.displayName = h, o.set(h, s)), null != u.type && (c.type = u.type), null != u.displayName && (c.displayName = u.displayName) } var d = i.encodeDef; !d && i.encodeDefaulter && (d = i.encodeDefaulter(e, r)), (d = Q(d)).each(function(t, i) { if (1 === (t = Vo(t).slice()).length && !R(t[0]) && t[0] < 0) d.set(i, !1); else { var n = d.set(i, []); E(t, function(t, e) { R(t) && (t = o.get(t)), null != t && t < r && (n[e] = t, p(l[t], i, e)) }) } }); var f = 0; function p(t, e, i) { null != Nf.get(e) ? t.otherDims[e] = i : (t.coordDim = e, t.coordDimIndex = i, a.set(e, !0)) } E(t, function(o, t) { var a, r, s; if (R(o)) a = o, o = {}; else { a = o.name; var e = o.ordinalMeta; o.ordinalMeta = null, (o = k(o)).ordinalMeta = e, r = o.dimsDef, s = o.otherDims, o.name = o.coordDim = o.coordDimIndex = o.dimsDef = o.otherDims = null } if (!1 !== (i = d.get(a))) { var i; if (!(i = Vo(i)).length) for (var n = 0; n < (r && r.length || 1); n++) { for (; f < l.length && null != l[f].coordDim; ) f++; f < l.length && i.push(f++) } E(i, function(t, e) { var i = l[t]; if (p(D(i, o), a, e), null == i.name && r) { var n = r[e]; z(n) || (n = { name: n }), i.name = i.displayName = n.name, i.defaultTooltip = n.defaultTooltip } s && D(i.otherDims, s) }) } }); var g = i.generateCoord , m = i.generateCoordCount , v = null != m; m = g ? m || 1 : 0; for (var y, x, _ = g || "value", w = 0; w < r; w++) { null == (c = l[w] = l[w] || new Rf).coordDim && (c.coordDim = sp(_, a, v), c.coordDimIndex = 0, (!g || m <= 0) && (c.isExtraCoord = !0), m--), null == c.name && (c.name = sp(c.coordDim, o)), null == c.type && (y = e, x = w, c.name, th(y.data, y.sourceFormat, y.seriesLayoutBy, y.dimensionsDefine, y.startIndex, x) === Xu.Must || c.isExtraCoord && (null != c.otherDims.itemName || null != c.otherDims.seriesName)) && (c.type = "ordinal") } return l } function sp(t, e, i) { if (i || null != e.get(t)) { for (var n = 0; null != e.get(t + n); ) n++; t += n } return e.set(t, !0), t } jf.setItemGraphicEl = function(t, e) { var i = this.hostModel; e && (e.dataIndex = t, e.dataType = this.dataType, e.seriesIndex = i && i.seriesIndex, "group" === e.type && e.traverse(ap, e)), this._graphicEls[t] = e } , jf.getItemGraphicEl = function(t) { return this._graphicEls[t] } , jf.eachItemGraphicEl = function(i, n) { E(this._graphicEls, function(t, e) { t && i && i.call(n, t, e) }) } , jf.cloneShallow = function(t) { if (!t) { var e = O(this.dimensions, this.getDimensionInfo, this); t = new Yf(e,this.hostModel) } if (t._storage = this._storage, Xf(t, this), this._indices) { var i = this._indices.constructor; t._indices = new i(this._indices) } else t._indices = null; return t.getRawIndex = t._indices ? Qf : Jf, t } , jf.wrapMethod = function(t, e) { var i = this[t]; "function" == typeof i && (this.__wrappedMethods = this.__wrappedMethods || [], this.__wrappedMethods.push(t), this[t] = function() { var t = i.apply(this, arguments); return e.apply(this, [t].concat(U(arguments))) } ) } , jf.TRANSFERABLE_METHODS = ["cloneShallow", "downSample", "map"], jf.CHANGABLE_METHODS = ["filterSelf", "selectRange"]; var lp = function(t, e) { return rp((e = e || {}).coordDimensions || [], t, { dimsDef: e.dimensionsDefine || t.dimensionsDefine, encodeDef: e.encodeDefine || t.encodeDefine, dimCount: e.dimensionsCount, encodeDefaulter: e.encodeDefaulter, generateCoord: e.generateCoord, generateCoordCount: e.generateCoordCount }) }; function up(t) { this.coordSysName = t, this.coordSysDims = [], this.axisMap = Q(), this.categoryAxisMap = Q(), this.firstCategoryDimIndex = null } var hp = { cartesian2d: function(t, e, i, n) { var o = t.getReferringComponents("xAxis")[0] , a = t.getReferringComponents("yAxis")[0]; e.coordSysDims = ["x", "y"], i.set("x", o), i.set("y", a), cp(o) && (n.set("x", o), e.firstCategoryDimIndex = 0), cp(a) && (n.set("y", a), e.firstCategoryDimIndex, e.firstCategoryDimIndex = 1) }, singleAxis: function(t, e, i, n) { var o = t.getReferringComponents("singleAxis")[0]; e.coordSysDims = ["single"], i.set("single", o), cp(o) && (n.set("single", o), e.firstCategoryDimIndex = 0) }, polar: function(t, e, i, n) { var o = t.getReferringComponents("polar")[0] , a = o.findAxisModel("radiusAxis") , r = o.findAxisModel("angleAxis"); e.coordSysDims = ["radius", "angle"], i.set("radius", a), i.set("angle", r), cp(a) && (n.set("radius", a), e.firstCategoryDimIndex = 0), cp(r) && (n.set("angle", r), null == e.firstCategoryDimIndex && (e.firstCategoryDimIndex = 1)) }, geo: function(t, e, i, n) { e.coordSysDims = ["lng", "lat"] }, parallel: function(t, o, a, r) { var s = t.ecModel , e = s.getComponent("parallel", t.get("parallelIndex")) , l = o.coordSysDims = e.dimensions.slice(); E(e.parallelAxisIndex, function(t, e) { var i = s.getComponent("parallelAxis", t) , n = l[e]; a.set(n, i), cp(i) && null == o.firstCategoryDimIndex && (r.set(n, i), o.firstCategoryDimIndex = e) }) } }; function cp(t) { return "category" === t.get("type") } function dp(t, i, e) { var n, o, a, r, s = (e = e || {}).byIndex, l = e.stackedCoordDimension, u = !(!t || !t.get("stack")); if (E(i, function(t, e) { R(t) && (i[e] = t = { name: t }), u && !t.isExtraCoord && (s || n || !t.ordinalMeta || (n = t), o || "ordinal" === t.type || "time" === t.type || l && l !== t.coordDim || (o = t)) }), !o || s || n || (s = !0), o) { a = "__\0ecstackresult", r = "__\0ecstackedover", n && (n.createInvertedIndices = !0); var h = o.coordDim , c = o.type , d = 0; E(i, function(t) { t.coordDim === h && d++ }), i.push({ name: a, coordDim: h, coordDimIndex: d, type: c, isExtraCoord: !0, isCalculationCoord: !0 }), d++, i.push({ name: r, coordDim: r, coordDimIndex: d, type: c, isExtraCoord: !0, isCalculationCoord: !0 }) } return { stackedDimension: o && o.name, stackedByDimension: n && n.name, isStackedByIndex: s, stackedOverDimension: r, stackResultDimension: a } } function fp(t, e) { return !!e && e === t.getCalculationInfo("stackedDimension") } function pp(t, e) { return fp(t, e) ? t.getCalculationInfo("stackResultDimension") : e } function gp(t, e, i) { i = i || {}, Uu.isInstance(t) || (t = Uu.seriesDataToSource(t)); var n, o = e.get("coordinateSystem"), a = lh.get(o), r = function(t) { var e = t.get("coordinateSystem") , i = new up(e) , n = hp[e]; if (n) return n(t, i, i.axisMap, i.categoryAxisMap), i }(e); r && (n = O(r.coordSysDims, function(t) { var e = { name: t } , i = r.axisMap.get(t); if (i) { var n = i.get("type"); e.type = Ef(n) } return e })), n = n || (a && (a.getDimensionsInfo ? a.getDimensionsInfo() : a.dimensions.slice()) || ["x", "y"]); var s, l, u = lp(t, { coordDimensions: n, generateCoord: i.generateCoord, encodeDefaulter: i.useEncodeDefaulter ? T($u, n, e) : null }); r && E(u, function(t, e) { var i = t.coordDim , n = r.categoryAxisMap.get(i); n && (null == s && (s = e), t.ordinalMeta = n.getOrdinalMeta()), null != t.otherDims.itemName && (l = !0) }), l || null == s || (u[s].otherDims.itemName = 0); var h = dp(e, u) , c = new Yf(u,e); c.setCalculationInfo(h); var d = null != s && function(t) { if (t.sourceFormat === zu) { var e = function(t) { var e = 0; for (; e < t.length && null == t[e]; ) e++; return t[e] }(t.data || []); return null != e && !L(Wo(e)) } }(t) ? function(t, e, i, n) { return n === s ? i : this.defaultDimValueGetter(t, e, i, n) } : null; return c.hasItemOption = !1, c.initData(t, null, d), c } function mp(t) { this._setting = t || {}, this._extent = [1 / 0, -1 / 0], this._interval = 0, this.init && this.init.apply(this, arguments) } function vp(t) { this.categories = t.categories || [], this._needCollect = t.needCollect, this._deduplication = t.deduplication, this._map } mp.prototype.parse = function(t) { return t } , mp.prototype.getSetting = function(t) { return this._setting[t] } , mp.prototype.contain = function(t) { var e = this._extent; return t >= e[0] && t <= e[1] } , mp.prototype.normalize = function(t) { var e = this._extent; return e[1] === e[0] ? .5 : (t - e[0]) / (e[1] - e[0]) } , mp.prototype.scale = function(t) { var e = this._extent; return t * (e[1] - e[0]) + e[0] } , mp.prototype.unionExtent = function(t) { var e = this._extent; t[0] < e[0] && (e[0] = t[0]), t[1] > e[1] && (e[1] = t[1]) } , mp.prototype.unionExtentFromData = function(t, e) { this.unionExtent(t.getApproximateExtent(e)) } , mp.prototype.getExtent = function() { return this._extent.slice() } , mp.prototype.setExtent = function(t, e) { var i = this._extent; isNaN(t) || (i[0] = t), isNaN(e) || (i[1] = e) } , mp.prototype.isBlank = function() { return this._isBlank } , mp.prototype.setBlank = function(t) { this._isBlank = t } , mp.prototype.getLabel = null, oa(mp), ua(mp, { registerWhenExtend: !0 }), vp.createByAxisModel = function(t) { var e = t.option , i = e.data , n = i && O(i, _p); return new vp({ categories: n, needCollect: !n, deduplication: !1 !== e.dedplication }) } ; var yp = vp.prototype; function xp(t) { return t._map || (t._map = Q(t.categories)) } function _p(t) { return z(t) && null != t.value ? t.value : t + "" } yp.getOrdinal = function(t) { return xp(this).get(t) } , yp.parseAndCollect = function(t) { var e, i = this._needCollect; if ("string" != typeof t && !i) return t; if (i && !this._deduplication) return e = this.categories.length, this.categories[e] = t, e; var n = xp(this); return null == (e = n.get(t)) && (i ? (e = this.categories.length, this.categories[e] = t, n.set(t, e)) : e = NaN), e } ; var wp = mp.prototype , bp = mp.extend({ type: "ordinal", init: function(t, e) { t && !L(t) || (t = new vp({ categories: t })), this._ordinalMeta = t, this._extent = e || [0, t.categories.length - 1] }, parse: function(t) { return "string" == typeof t ? this._ordinalMeta.getOrdinal(t) : Math.round(t) }, contain: function(t) { return t = this.parse(t), wp.contain.call(this, t) && null != this._ordinalMeta.categories[t] }, normalize: function(t) { return wp.normalize.call(this, this.parse(t)) }, scale: function(t) { return Math.round(wp.scale.call(this, t)) }, getTicks: function() { for (var t = [], e = this._extent, i = e[0]; i <= e[1]; ) t.push(i), i++; return t }, getLabel: function(t) { if (!this.isBlank()) return this._ordinalMeta.categories[t] }, count: function() { return this._extent[1] - this._extent[0] + 1 }, unionExtentFromData: function(t, e) { this.unionExtent(t.getApproximateExtent(e)) }, getOrdinalMeta: function() { return this._ordinalMeta }, niceTicks: et, niceExtent: et }); bp.create = function() { return new bp } ; var Sp = zl; function Mp(t) { return Gl(t) + 2 } function Ip(t, e, i) { t[e] = Math.max(Math.min(t[e], i[1]), i[0]) } function Tp(t, e) { isFinite(t[0]) || (t[0] = e[0]), isFinite(t[1]) || (t[1] = e[1]), Ip(t, 0, e), Ip(t, 1, e), t[0] > t[1] && (t[0] = t[1]) } var Ap = zl , Dp = mp.extend({ type: "interval", _interval: 0, _intervalPrecision: 2, setExtent: function(t, e) { var i = this._extent; isNaN(t) || (i[0] = parseFloat(t)), isNaN(e) || (i[1] = parseFloat(e)) }, unionExtent: function(t) { var e = this._extent; t[0] < e[0] && (e[0] = t[0]), t[1] > e[1] && (e[1] = t[1]), Dp.prototype.setExtent.call(this, e[0], e[1]) }, getInterval: function() { return this._interval }, setInterval: function(t) { this._interval = t, this._niceExtent = this._extent.slice(), this._intervalPrecision = Mp(t) }, getTicks: function(t) { var e = this._interval , i = this._extent , n = this._niceExtent , o = this._intervalPrecision , a = []; if (!e) return a; i[0] < n[0] && (t ? a.push(Ap(n[0] - e, o)) : a.push(i[0])); for (var r = n[0]; r <= n[1] && (a.push(r), (r = Ap(r + e, o)) !== a[a.length - 1]); ) if (1e4 < a.length) return []; var s = a.length ? a[a.length - 1] : n[1]; return i[1] > s && (t ? a.push(Ap(s + e, o)) : a.push(i[1])), a }, getMinorTicks: function(t) { for (var e = this.getTicks(!0), i = [], n = this.getExtent(), o = 1; o < e.length; o++) { for (var a = e[o], r = e[o - 1], s = 0, l = [], u = (a - r) / t; s < t - 1; ) { var h = zl(r + (s + 1) * u); h > n[0] && h < n[1] && l.push(h), s++ } i.push(l) } return i }, getLabel: function(t, e) { if (null == t) return ""; var i = e && e.precision; return null == i ? i = Gl(t) || 0 : "auto" === i && (i = this._intervalPrecision), tu(t = Ap(t, i, !0)) }, niceTicks: function(t, e, i) { t = t || 5; var n = this._extent , o = n[1] - n[0]; if (isFinite(o)) { o < 0 && (o = -o, n.reverse()); var a = function(t, e, i, n) { var o = {} , a = t[1] - t[0] , r = o.interval = Kl(a / e, !0); null != i && r < i && (r = o.interval = i), null != n && n < r && (r = o.interval = n); var s = o.intervalPrecision = Mp(r); return Tp(o.niceTickExtent = [Sp(Math.ceil(t[0] / r) * r, s), Sp(Math.floor(t[1] / r) * r, s)], t), o }(n, t, e, i); this._intervalPrecision = a.intervalPrecision, this._interval = a.interval, this._niceExtent = a.niceTickExtent } }, niceExtent: function(t) { var e = this._extent; if (e[0] === e[1]) if (0 !== e[0]) { var i = e[0]; t.fixMax || (e[1] += i / 2), e[0] -= i / 2 } else e[1] = 1; var n = e[1] - e[0]; isFinite(n) || (e[0] = 0, e[1] = 1), this.niceTicks(t.splitNumber, t.minInterval, t.maxInterval); var o = this._interval; t.fixMin || (e[0] = Ap(Math.floor(e[0] / o) * o)), t.fixMax || (e[1] = Ap(Math.ceil(e[1] / o) * o)) } }); Dp.create = function() { return new Dp } ; var Cp = "__ec_stack_" , Lp = "undefined" != typeof Float32Array ? Float32Array : Array; function kp(t) { return t.get("stack") || Cp + t.seriesIndex } function Pp(t) { return t.dim + t.index } function Np(t, e) { var i = []; return e.eachSeriesByType(t, function(t) { Vp(t) && !Gp(t) && i.push(t) }), i } function Op(t) { var g = function(t) { var l = {}; E(t, function(t) { var e = t.coordinateSystem.getBaseAxis(); if ("time" === e.type || "value" === e.type) for (var i = t.getData(), n = e.dim + "_" + e.index, o = i.mapDimension(e.dim), a = 0, r = i.count(); a < r; ++a) { var s = i.get(o, a); l[n] ? l[n].push(s) : l[n] = [s] } }); var e = []; for (var i in l) if (l.hasOwnProperty(i)) { var n = l[i]; if (n) { n.sort(function(t, e) { return t - e }); for (var o = null, a = 1; a < n.length; ++a) { var r = n[a] - n[a - 1]; 0 < r && (o = null === o ? r : Math.min(o, r)) } e[i] = o } } return e }(t) , m = []; return E(t, function(t) { var e, i = t.coordinateSystem.getBaseAxis(), n = i.getExtent(); if ("category" === i.type) e = i.getBandWidth(); else if ("value" === i.type || "time" === i.type) { var o = i.dim + "_" + i.index , a = g[o] , r = Math.abs(n[1] - n[0]) , s = i.scale.getExtent() , l = Math.abs(s[1] - s[0]); e = a ? r / l * a : r } else { var u = t.getData(); e = Math.abs(n[1] - n[0]) / u.count() } var h = Rl(t.get("barWidth"), e) , c = Rl(t.get("barMaxWidth"), e) , d = Rl(t.get("barMinWidth") || 1, e) , f = t.get("barGap") , p = t.get("barCategoryGap"); m.push({ bandWidth: e, barWidth: h, barMaxWidth: c, barMinWidth: d, barGap: f, barCategoryGap: p, axisKey: Pp(i), stackId: kp(t) }) }), Ep(m) } function Ep(t) { var d = {}; E(t, function(t, e) { var i = t.axisKey , n = t.bandWidth , o = d[i] || { bandWidth: n, remainedWidth: n, autoWidthCount: 0, categoryGap: "20%", gap: "30%", stacks: {} } , a = o.stacks; d[i] = o; var r = t.stackId; a[r] || o.autoWidthCount++, a[r] = a[r] || { width: 0, maxWidth: 0 }; var s = t.barWidth; s && !a[r].width && (a[r].width = s, s = Math.min(o.remainedWidth, s), o.remainedWidth -= s); var l = t.barMaxWidth; l && (a[r].maxWidth = l); var u = t.barMinWidth; u && (a[r].minWidth = u); var h = t.barGap; null != h && (o.gap = h); var c = t.barCategoryGap; null != c && (o.categoryGap = c) }); var f = {}; return E(d, function(t, i) { f[i] = {}; var e = t.stacks , n = t.bandWidth , o = Rl(t.categoryGap, n) , a = Rl(t.gap, 1) , r = t.remainedWidth , s = t.autoWidthCount , l = (r - o) / (s + (s - 1) * a); l = Math.max(l, 0), E(e, function(t) { var e = t.maxWidth , i = t.minWidth; if (t.width) { n = t.width; e && (n = Math.min(n, e)), i && (n = Math.max(n, i)), t.width = n, r -= n + a * n, s-- } else { var n = l; e && e < n && (n = Math.min(e, r)), i && n < i && (n = i), n !== l && (t.width = n, r -= n + a * n, s--) } }), l = (r - o) / (s + (s - 1) * a), l = Math.max(l, 0); var u, h = 0; E(e, function(t, e) { t.width || (t.width = l), h += (u = t).width * (1 + a) }), u && (h -= u.width * a); var c = -h / 2; E(e, function(t, e) { f[i][e] = f[i][e] || { bandWidth: n, offset: c, width: t.width }, c += t.width * (1 + a) }) }), f } function Rp(t, e, i) { if (t && e) { var n = t[Pp(e)]; return null != n && null != i && (n = n[kp(i)]), n } } function zp(t, e) { var i = Np(t, e) , T = Op(i) , A = {}; E(i, function(t) { var e = t.getData() , i = t.coordinateSystem , n = i.getBaseAxis() , o = kp(t) , a = T[Pp(n)][o] , r = a.offset , s = a.width , l = i.getOtherAxis(n) , u = t.get("barMinHeight") || 0; A[o] = A[o] || [], e.setLayout({ bandWidth: a.bandWidth, offset: r, size: s }); for (var h = e.mapDimension(l.dim), c = e.mapDimension(n.dim), d = fp(e, h), f = l.isHorizontal(), p = Fp(n, l, d), g = 0, m = e.count(); g < m; g++) { var v, y, x, _, w, b = e.get(h, g), S = e.get(c, g), M = 0 <= b ? "p" : "n", I = p; if (d && (A[o][S] || (A[o][S] = { p: p, n: p }), I = A[o][S][M]), f) v = I, y = (w = i.dataToPoint([b, S]))[1] + r, x = w[0] - p, _ = s, Math.abs(x) < u && (x = (x < 0 ? -1 : 1) * u), isNaN(x) || d && (A[o][S][M] += x); else v = (w = i.dataToPoint([S, b]))[0] + r, y = I, x = s, _ = w[1] - p, Math.abs(_) < u && (_ = (_ <= 0 ? -1 : 1) * u), isNaN(_) || d && (A[o][S][M] += _); e.setItemLayout(g, { x: v, y: y, width: x, height: _ }) } }, this) } var Bp = { seriesType: "bar", plan: vc(), reset: function(t) { if (Vp(t) && Gp(t)) { var e = t.getData() , c = t.coordinateSystem , d = c.grid.getRect() , f = c.getBaseAxis() , p = c.getOtherAxis(f) , g = e.mapDimension(p.dim) , m = e.mapDimension(f.dim) , v = p.isHorizontal() , y = v ? 0 : 1 , x = Rp(Op([t]), f, t).width; return .5 < x || (x = .5), { progress: function(t, e) { var i, n = t.count, o = new Lp(2 * n), a = new Lp(2 * n), r = new Lp(n), s = [], l = [], u = 0, h = 0; for (; null != (i = t.next()); ) l[y] = e.get(g, i), l[1 - y] = e.get(m, i), s = c.dataToPoint(l, null, s), a[u] = v ? d.x + d.width : s[0], o[u++] = s[0], a[u] = v ? s[1] : d.y + d.height, o[u++] = s[1], r[h++] = i; e.setLayout({ largePoints: o, largeDataIndices: r, largeBackgroundPoints: a, barWidth: x, valueAxisStart: Fp(f, p, !1), backgroundStart: v ? d.x : d.y, valueAxisHorizontal: v }) } } } } }; function Vp(t) { return t.coordinateSystem && "cartesian2d" === t.coordinateSystem.type } function Gp(t) { return t.pipelineContext && t.pipelineContext.large } function Fp(t, e) { return e.toGlobalCoord(e.dataToCoord("log" === e.type ? 1 : 0)) } var Wp = Dp.prototype , Hp = Math.ceil , Zp = Math.floor , Up = 36e5 , Xp = 864e5 , Yp = Dp.extend({ type: "time", getLabel: function(t) { var e = this._stepLvl , i = new Date(t); return du(e[0], i, this.getSetting("useUTC")) }, niceExtent: function(t) { var e = this._extent; if (e[0] === e[1] && (e[0] -= Xp, e[1] += Xp), e[1] === -1 / 0 && e[0] === 1 / 0) { var i = new Date; e[1] = +new Date(i.getFullYear(),i.getMonth(),i.getDate()), e[0] = e[1] - Xp } this.niceTicks(t.splitNumber, t.minInterval, t.maxInterval); var n = this._interval; t.fixMin || (e[0] = zl(Zp(e[0] / n) * n)), t.fixMax || (e[1] = zl(Hp(e[1] / n) * n)) }, niceTicks: function(t, e, i) { t = t || 10; var n = this._extent , o = n[1] - n[0] , a = o / t; null != e && a < e && (a = e), null != i && i < a && (a = i); var r = jp.length , s = function(t, e, i, n) { for (; i < n; ) { var o = i + n >>> 1; t[o][1] < e ? i = 1 + o : n = o } return i }(jp, a, 0, r) , l = jp[Math.min(s, r - 1)] , u = l[1]; "year" === l[0] && (u *= Kl(o / u / t, !0)); var h = this.getSetting("useUTC") ? 0 : 60 * new Date(+n[0] || +n[1]).getTimezoneOffset() * 1e3 , c = [Math.round(Hp((n[0] - h) / u) * u + h), Math.round(Zp((n[1] - h) / u) * u + h)]; Tp(c, n), this._stepLvl = l, this._interval = u, this._niceExtent = c }, parse: function(t) { return +Yl(t) } }); E(["contain", "normalize"], function(e) { Yp.prototype[e] = function(t) { return Wp[e].call(this, this.parse(t)) } }); var jp = [["hh:mm:ss", 1e3], ["hh:mm:ss", 5e3], ["hh:mm:ss", 1e4], ["hh:mm:ss", 15e3], ["hh:mm:ss", 3e4], ["hh:mm\nMM-dd", 6e4], ["hh:mm\nMM-dd", 3e5], ["hh:mm\nMM-dd", 6e5], ["hh:mm\nMM-dd", 9e5], ["hh:mm\nMM-dd", 18e5], ["hh:mm\nMM-dd", Up], ["hh:mm\nMM-dd", 72e5], ["hh:mm\nMM-dd", 6 * Up], ["hh:mm\nMM-dd", 432e5], ["MM-dd\nyyyy", Xp], ["MM-dd\nyyyy", 2 * Xp], ["MM-dd\nyyyy", 3 * Xp], ["MM-dd\nyyyy", 4 * Xp], ["MM-dd\nyyyy", 5 * Xp], ["MM-dd\nyyyy", 6 * Xp], ["week", 7 * Xp], ["MM-dd\nyyyy", 864e6], ["week", 14 * Xp], ["week", 21 * Xp], ["month", 31 * Xp], ["week", 42 * Xp], ["month", 62 * Xp], ["week", 70 * Xp], ["quarter", 95 * Xp], ["month", 31 * Xp * 4], ["month", 13392e6], ["half-year", 16416e6], ["month", 31 * Xp * 8], ["month", 26784e6], ["year", 380 * Xp]]; Yp.create = function(t) { return new Yp({ useUTC: t.ecModel.get("useUTC") }) } ; var qp = mp.prototype , Kp = Dp.prototype , $p = Gl , Jp = zl , Qp = Math.floor , tg = Math.ceil , eg = Math.pow , ig = Math.log , ng = mp.extend({ type: "log", base: 10, $constructor: function() { mp.apply(this, arguments), this._originalScale = new Dp }, getTicks: function(t) { var i = this._originalScale , n = this._extent , o = i.getExtent(); return O(Kp.getTicks.call(this, t), function(t) { var e = zl(eg(this.base, t)); return e = t === n[0] && i.__fixMin ? og(e, o[0]) : e, e = t === n[1] && i.__fixMax ? og(e, o[1]) : e }, this) }, getMinorTicks: Kp.getMinorTicks, getLabel: Kp.getLabel, scale: function(t) { return t = qp.scale.call(this, t), eg(this.base, t) }, setExtent: function(t, e) { var i = this.base; t = ig(t) / ig(i), e = ig(e) / ig(i), Kp.setExtent.call(this, t, e) }, getExtent: function() { var t = this.base , e = qp.getExtent.call(this); e[0] = eg(t, e[0]), e[1] = eg(t, e[1]); var i = this._originalScale , n = i.getExtent(); return i.__fixMin && (e[0] = og(e[0], n[0])), i.__fixMax && (e[1] = og(e[1], n[1])), e }, unionExtent: function(t) { this._originalScale.unionExtent(t); var e = this.base; t[0] = ig(t[0]) / ig(e), t[1] = ig(t[1]) / ig(e), qp.unionExtent.call(this, t) }, unionExtentFromData: function(t, e) { this.unionExtent(t.getApproximateExtent(e)) }, niceTicks: function(t) { t = t || 10; var e = this._extent , i = e[1] - e[0]; if (!(i == 1 / 0 || i <= 0)) { var n = jl(i); for (t / i * n <= .5 && (n *= 10); !isNaN(n) && Math.abs(n) < 1 && 0 < Math.abs(n); ) n *= 10; var o = [zl(tg(e[0] / n) * n), zl(Qp(e[1] / n) * n)]; this._interval = n, this._niceExtent = o } }, niceExtent: function(t) { Kp.niceExtent.call(this, t); var e = this._originalScale; e.__fixMin = t.fixMin, e.__fixMax = t.fixMax } }); function og(t, e) { return Jp(t, $p(e)) } function ag(t, e) { var i, n, o, a = t.type, r = e.getMin(), s = e.getMax(), l = t.getExtent(); "ordinal" === a ? i = e.getCategories().length : (L(n = e.get("boundaryGap")) || (n = [n || 0, n || 0]), "boolean" == typeof n[0] && (n = [0, 0]), n[0] = Rl(n[0], 1), n[1] = Rl(n[1], 1), o = l[1] - l[0] || Math.abs(l[0])), "dataMin" === r ? r = l[0] : "function" == typeof r && (r = r({ min: l[0], max: l[1] })), "dataMax" === s ? s = l[1] : "function" == typeof s && (s = s({ min: l[0], max: l[1] })); var u = null != r , h = null != s; null == r && (r = "ordinal" === a ? i ? 0 : NaN : l[0] - n[0] * o), null == s && (s = "ordinal" === a ? i ? i - 1 : NaN : l[1] + n[1] * o), null != r && isFinite(r) || (r = NaN), null != s && isFinite(s) || (s = NaN), t.setBlank(F(r) || F(s) || "ordinal" === a && !t.getOrdinalMeta().categories.length), e.getNeedCrossZero() && (0 < r && 0 < s && !u && (r = 0), r < 0 && s < 0 && !h && (s = 0)); var c = e.ecModel; if (c && "time" === a) { var d, f = Np("bar", c); if (E(f, function(t) { d |= t.getBaseAxis() === e.axis }), d) { var p = Op(f) , g = function(t, e, i, n) { var o = i.axis.getExtent() , a = o[1] - o[0] , r = Rp(n, i.axis); if (void 0 === r) return { min: t, max: e }; var s = 1 / 0; E(r, function(t) { s = Math.min(t.offset, s) }); var l = -1 / 0; E(r, function(t) { l = Math.max(t.offset + t.width, l) }), s = Math.abs(s), l = Math.abs(l); var u = s + l , h = e - t , c = h / (1 - (s + l) / a) - h; return { min: t -= s / u * c, max: e += l / u * c } }(r, s, e, p); r = g.min, s = g.max } } return { extent: [r, s], fixMin: u, fixMax: h } } function rg(t, e) { var i = ag(t, e) , n = i.extent , o = e.get("splitNumber"); "log" === t.type && (t.base = e.get("logBase")); var a = t.type; t.setExtent(n[0], n[1]), t.niceExtent({ splitNumber: o, fixMin: i.fixMin, fixMax: i.fixMax, minInterval: "interval" === a || "time" === a ? e.get("minInterval") : null, maxInterval: "interval" === a || "time" === a ? e.get("maxInterval") : null }); var r = e.get("interval"); null != r && t.setInterval && t.setInterval(r) } function sg(t, e) { if (e = e || t.get("type")) switch (e) { case "category": return new bp(t.getOrdinalMeta ? t.getOrdinalMeta() : t.getCategories(),[1 / 0, -1 / 0]); case "value": return new Dp; default: return (mp.getClass(e) || Dp).create(t) } } function lg(i) { var e, n = i.getLabelModel().get("formatter"), o = "category" === i.type ? i.scale.getExtent()[0] : null; return "string" == typeof n ? (e = n, n = function(t) { return t = i.scale.getLabel(t), e.replace("{value}", null != t ? t : "") } ) : "function" == typeof n ? function(t, e) { return null != o && (e = t - o), n(ug(i, t), e) } : function(t) { return i.scale.getLabel(t) } } function ug(t, e) { return "category" === t.type ? t.scale.getLabel(e) : e } function hg(t) { var e = t.get("interval"); return null == e ? "auto" : e } function cg(t) { return "category" === t.type && 0 === hg(t.getLabelModel()) } E(["contain", "normalize"], function(e) { ng.prototype[e] = function(t) { return t = ig(t) / ig(this.base), qp[e].call(this, t) } }), ng.create = function() { return new ng } ; var dg = { getMin: function(t) { var e = this.option , i = t || null == e.rangeStart ? e.min : e.rangeStart; return this.axis && null != i && "dataMin" !== i && "function" != typeof i && !F(i) && (i = this.axis.scale.parse(i)), i }, getMax: function(t) { var e = this.option , i = t || null == e.rangeEnd ? e.max : e.rangeEnd; return this.axis && null != i && "dataMax" !== i && "function" != typeof i && !F(i) && (i = this.axis.scale.parse(i)), i }, getNeedCrossZero: function() { var t = this.option; return null == t.rangeStart && null == t.rangeEnd && !t.scale }, getCoordSysModel: et, setRange: function(t, e) { this.option.rangeStart = t, this.option.rangeEnd = e }, resetRange: function() { this.option.rangeStart = this.option.rangeEnd = null } } , fg = Cs({ type: "triangle", shape: { cx: 0, cy: 0, width: 0, height: 0 }, buildPath: function(t, e) { var i = e.cx , n = e.cy , o = e.width / 2 , a = e.height / 2; t.moveTo(i, n - a), t.lineTo(i + o, n + a), t.lineTo(i - o, n + a), t.closePath() } }) , pg = Cs({ type: "diamond", shape: { cx: 0, cy: 0, width: 0, height: 0 }, buildPath: function(t, e) { var i = e.cx , n = e.cy , o = e.width / 2 , a = e.height / 2; t.moveTo(i, n - a), t.lineTo(i + o, n), t.lineTo(i, n + a), t.lineTo(i - o, n), t.closePath() } }) , gg = Cs({ type: "pin", shape: { x: 0, y: 0, width: 0, height: 0 }, buildPath: function(t, e) { var i = e.x , n = e.y , o = e.width / 5 * 3 , a = Math.max(o, e.height) , r = o / 2 , s = r * r / (a - r) , l = n - a + r + s , u = Math.asin(s / r) , h = Math.cos(u) * r , c = Math.sin(u) , d = Math.cos(u) , f = .6 * r , p = .7 * r; t.moveTo(i - h, l + s), t.arc(i, l, r, Math.PI - u, 2 * Math.PI + u), t.bezierCurveTo(i + h - c * f, l + s + d * f, i, n - p, i, n), t.bezierCurveTo(i, n - p, i - h + c * f, l + s + d * f, i - h, l + s), t.closePath() } }) , mg = Cs({ type: "arrow", shape: { x: 0, y: 0, width: 0, height: 0 }, buildPath: function(t, e) { var i = e.height , n = e.width , o = e.x , a = e.y , r = n / 3 * 2; t.moveTo(o, a), t.lineTo(o + r, a + i), t.lineTo(o, a + i / 4 * 3), t.lineTo(o - r, a + i), t.lineTo(o, a), t.closePath() } }) , vg = { line: function(t, e, i, n, o) { o.x1 = t, o.y1 = e + n / 2, o.x2 = t + i, o.y2 = e + n / 2 }, rect: function(t, e, i, n, o) { o.x = t, o.y = e, o.width = i, o.height = n }, roundRect: function(t, e, i, n, o) { o.x = t, o.y = e, o.width = i, o.height = n, o.r = Math.min(i, n) / 4 }, square: function(t, e, i, n, o) { var a = Math.min(i, n); o.x = t, o.y = e, o.width = a, o.height = a }, circle: function(t, e, i, n, o) { o.cx = t + i / 2, o.cy = e + n / 2, o.r = Math.min(i, n) / 2 }, diamond: function(t, e, i, n, o) { o.cx = t + i / 2, o.cy = e + n / 2, o.width = i, o.height = n }, pin: function(t, e, i, n, o) { o.x = t + i / 2, o.y = e + n / 2, o.width = i, o.height = n }, arrow: function(t, e, i, n, o) { o.x = t + i / 2, o.y = e + n / 2, o.width = i, o.height = n }, triangle: function(t, e, i, n, o) { o.cx = t + i / 2, o.cy = e + n / 2, o.width = i, o.height = n } } , yg = {}; E({ line: ls, rect: rs, roundRect: rs, square: rs, circle: Yr, diamond: pg, pin: gg, arrow: mg, triangle: fg }, function(t, e) { yg[e] = new t }); var xg = Cs({ type: "symbol", shape: { symbolType: "", x: 0, y: 0, width: 0, height: 0 }, calculateTextPosition: function(t, e, i) { var n = yn(t, e, i) , o = this.shape; return o && "pin" === o.symbolType && "inside" === e.textPosition && (n.y = i.y + .4 * i.height), n }, buildPath: function(t, e, i) { var n = e.symbolType; if ("none" !== n) { var o = yg[n]; o = o || yg[n = "rect"], vg[n](e.x, e.y, e.width, e.height, o.shape), o.buildPath(t, o.shape, i) } } }); function _g(t, e) { if ("image" !== this.type) { var i = this.style , n = this.shape; n && "line" === n.symbolType ? i.stroke = t : this.__isEmptyBrush ? (i.stroke = t, i.fill = e || "#fff") : (i.fill && (i.fill = t), i.stroke && (i.stroke = t)), this.dirty(!1) } } function wg(t, e, i, n, o, a, r) { var s, l = 0 === t.indexOf("empty"); return l && (t = t.substr(5, 1).toLowerCase() + t.substr(6)), (s = 0 === t.indexOf("image://") ? Ns(t.slice(8), new Di(e,i,n,o), r ? "center" : "cover") : 0 === t.indexOf("path://") ? Ps(t.slice(7), {}, new Di(e,i,n,o), r ? "center" : "cover") : new xg({ shape: { symbolType: t, x: e, y: i, width: n, height: o } })).__isEmptyBrush = l, s.setColor = _g, s.setColor(a), s } var bg = { isDimensionStacked: fp, enableDataStack: dp, getStackedDimension: pp }; var Sg = (Object.freeze || Object)({ createList: function(t) { return gp(t.getSource(), t) }, getLayoutRect: bu, dataStack: bg, createScale: function(t, e) { var i = e; Cl.isInstance(e) || b(i = new Cl(e), dg); var n = sg(i); return n.setExtent(t[0], t[1]), rg(n, i), n }, mixinAxisModelCommonMethods: function(t) { b(t, dg) }, completeDimensions: rp, createDimensions: lp, createSymbol: wg }) , Mg = 1e-8; function Ig(t, e) { return Math.abs(t - e) < Mg } function Tg(t, e, i) { var n = 0 , o = t[0]; if (!o) return !1; for (var a = 1; a < t.length; a++) { var r = t[a]; n += pr(o[0], o[1], r[0], r[1], e, i), o = r } var s = t[0]; return Ig(o[0], s[0]) && Ig(o[1], s[1]) || (n += pr(o[0], o[1], s[0], s[1], e, i)), 0 !== n } function Ag(t, e, i) { if (this.name = t, this.geometries = e, i) i = [i[0], i[1]]; else { var n = this.getBoundingRect(); i = [n.x + n.width / 2, n.y + n.height / 2] } this.center = i } function Dg(t, e, i) { for (var n = [], o = e[0], a = e[1], r = 0; r < t.length; r += 2) { var s = t.charCodeAt(r) - 64 , l = t.charCodeAt(r + 1) - 64; s = s >> 1 ^ -(1 & s), l = l >> 1 ^ -(1 & l), o = s += o, a = l += a, n.push([s / i, l / i]) } return n } Ag.prototype = { constructor: Ag, properties: null, getBoundingRect: function() { var t = this._rect; if (t) return t; for (var e = Number.MAX_VALUE, i = [e, e], n = [-e, -e], o = [], a = [], r = this.geometries, s = 0; s < r.length; s++) { if ("polygon" === r[s].type) Wa(r[s].exterior, o, a), St(i, i, o), Mt(n, n, a) } return 0 === s && (i[0] = i[1] = n[0] = n[1] = 0), this._rect = new Di(i[0],i[1],n[0] - i[0],n[1] - i[1]) }, contain: function(t) { var e = this.getBoundingRect() , i = this.geometries; if (!e.contain(t[0], t[1])) return !1; t: for (var n = 0, o = i.length; n < o; n++) if ("polygon" === i[n].type) { var a = i[n].exterior , r = i[n].interiors; if (Tg(a, t[0], t[1])) { for (var s = 0; s < (r ? r.length : 0); s++) if (Tg(r[s])) continue t; return !0 } } return !1 }, transformTo: function(t, e, i, n) { var o = this.getBoundingRect() , a = o.width / o.height; i ? n = n || i / a : i = a * n; for (var r = new Di(t,e,i,n), s = o.calculateTransform(r), l = this.geometries, u = 0; u < l.length; u++) if ("polygon" === l[u].type) { for (var h = l[u].exterior, c = l[u].interiors, d = 0; d < h.length; d++) bt(h[d], h[d], s); for (var f = 0; f < (c ? c.length : 0); f++) for (d = 0; d < c[f].length; d++) bt(c[f][d], c[f][d], s) } (o = this._rect).copy(r), this.center = [o.x + o.width / 2, o.y + o.height / 2] }, cloneShallow: function(t) { null == t && (t = this.name); var e = new Ag(t,this.geometries,this.center); return e._rect = this._rect, e.transformTo = null, e } }; function Cg(t, r) { return function(t) { if (!t.UTF8Encoding) return; var e = t.UTF8Scale; null == e && (e = 1024); for (var i = t.features, n = 0; n < i.length; n++) for (var o = i[n].geometry, a = o.coordinates, r = o.encodeOffsets, s = 0; s < a.length; s++) { var l = a[s]; if ("Polygon" === o.type) a[s] = Dg(l, r[s], e); else if ("MultiPolygon" === o.type) for (var u = 0; u < l.length; u++) { var h = l[u]; l[u] = Dg(h, r[s][u], e) } } t.UTF8Encoding = !1 }(t), O(M(t.features, function(t) { return t.geometry && t.properties && 0 < t.geometry.coordinates.length }), function(t) { var e = t.properties , i = t.geometry , n = i.coordinates , o = []; "Polygon" === i.type && o.push({ type: "polygon", exterior: n[0], interiors: n.slice(1) }), "MultiPolygon" === i.type && E(n, function(t) { t[0] && o.push({ type: "polygon", exterior: t[0], interiors: t.slice(1) }) }); var a = new Ag(e[r || "name"],o,e.cp); return a.properties = e, a }) } var Lg = jo(); function kg(t) { return "category" === t.type ? function(t) { var e = t.getLabelModel() , i = Ng(t, e); return !e.get("show") || t.scale.isBlank() ? { labels: [], labelCategoryInterval: i.labelCategoryInterval } : i }(t) : function(i) { var t = i.scale.getTicks() , n = lg(i); return { labels: O(t, function(t, e) { return { formattedLabel: n(t, e), rawLabel: i.scale.getLabel(t), tickValue: t } }) } }(t) } function Pg(t, e) { return "category" === t.type ? function(t, e) { var i, n, o = Og(t, "ticks"), a = hg(e), r = Eg(o, a); if (r) return r; e.get("show") && !t.scale.isBlank() || (i = []); if (C(a)) i = Bg(t, a, !0); else if ("auto" === a) { var s = Ng(t, t.getLabelModel()); n = s.labelCategoryInterval, i = O(s.labels, function(t) { return t.tickValue }) } else i = zg(t, n = a, !0); return Rg(o, a, { ticks: i, tickCategoryInterval: n }) }(t, e) : { ticks: t.scale.getTicks() } } function Ng(t, e) { var i, n = Og(t, "labels"), o = hg(e), a = Eg(n, o); return a || Rg(n, o, { labels: C(o) ? Bg(t, o) : zg(t, i = "auto" === o ? function(t) { var e = Lg(t).autoInterval; return null != e ? e : Lg(t).autoInterval = t.calculateCategoryInterval() }(t) : o), labelCategoryInterval: i }) } function Og(t, e) { return Lg(t)[e] || (Lg(t)[e] = []) } function Eg(t, e) { for (var i = 0; i < t.length; i++) if (t[i].key === e) return t[i].value } function Rg(t, e, i) { return t.push({ key: e, value: i }), i } function zg(t, e, i) { var n = lg(t) , o = t.scale , a = o.getExtent() , r = t.getLabelModel() , s = [] , l = Math.max((e || 0) + 1, 1) , u = a[0] , h = o.count(); 0 !== u && 1 < l && 2 < h / l && (u = Math.round(Math.ceil(u / l) * l)); var c = cg(t) , d = r.get("showMinLabel") || c , f = r.get("showMaxLabel") || c; d && u !== a[0] && g(a[0]); for (var p = u; p <= a[1]; p += l) g(p); function g(t) { s.push(i ? t : { formattedLabel: n(t), rawLabel: o.getLabel(t), tickValue: t }) } return f && p - l !== a[1] && g(a[1]), s } function Bg(t, i, n) { var o = t.scale , a = lg(t) , r = []; return E(o.getTicks(), function(t) { var e = o.getLabel(t); i(t, e) && r.push(n ? t : { formattedLabel: a(t), rawLabel: e, tickValue: t }) }), r } var Vg = [0, 1] , Gg = function(t, e, i) { this.dim = t, this.scale = e, this._extent = i || [0, 0], this.inverse = !1, this.onBand = !1 }; function Fg(t, e) { var i = (t[1] - t[0]) / e / 2; t[0] += i, t[1] -= i } Gg.prototype = { constructor: Gg, contain: function(t) { var e = this._extent , i = Math.min(e[0], e[1]) , n = Math.max(e[0], e[1]); return i <= t && t <= n }, containData: function(t) { return this.scale.contain(t) }, getExtent: function() { return this._extent.slice() }, getPixelPrecision: function(t) { return Fl(t || this.scale.getExtent(), this._extent) }, setExtent: function(t, e) { var i = this._extent; i[0] = t, i[1] = e }, dataToCoord: function(t, e) { var i = this._extent , n = this.scale; return t = n.normalize(t), this.onBand && "ordinal" === n.type && Fg(i = i.slice(), n.count()), El(t, Vg, i, e) }, coordToData: function(t, e) { var i = this._extent , n = this.scale; this.onBand && "ordinal" === n.type && Fg(i = i.slice(), n.count()); var o = El(t, i, Vg, e); return this.scale.scale(o) }, pointToData: function(t, e) {}, getTicksCoords: function(t) { var e = (t = t || {}).tickModel || this.getTickModel() , i = O(Pg(this, e).ticks, function(t) { return { coord: this.dataToCoord(t), tickValue: t } }, this); return function(t, e, i, n) { var o = e.length; if (!t.onBand || i || !o) return; var a, r, s = t.getExtent(); if (1 === o) e[0].coord = s[0], a = e[1] = { coord: s[0] }; else { var l = e[o - 1].tickValue - e[0].tickValue , u = (e[o - 1].coord - e[0].coord) / l; E(e, function(t) { t.coord -= u / 2 }); var h = t.scale.getExtent(); r = 1 + h[1] - e[o - 1].tickValue, a = { coord: e[o - 1].coord + u * r }, e.push(a) } var c = s[0] > s[1]; d(e[0].coord, s[0]) && (n ? e[0].coord = s[0] : e.shift()); n && d(s[0], e[0].coord) && e.unshift({ coord: s[0] }); d(s[1], a.coord) && (n ? a.coord = s[1] : e.pop()); n && d(a.coord, s[1]) && e.push({ coord: s[1] }); function d(t, e) { return t = zl(t), e = zl(e), c ? e < t : t < e } }(this, i, e.get("alignWithLabel"), t.clamp), i }, getMinorTicksCoords: function() { if ("ordinal" === this.scale.type) return []; var t = this.model.getModel("minorTick").get("splitNumber"); return 0 < t && t < 100 || (t = 5), O(this.scale.getMinorTicks(t), function(t) { return O(t, function(t) { return { coord: this.dataToCoord(t), tickValue: t } }, this) }, this) }, getViewLabels: function() { return kg(this).labels }, getLabelModel: function() { return this.model.getModel("axisLabel") }, getTickModel: function() { return this.model.getModel("axisTick") }, getBandWidth: function() { var t = this._extent , e = this.scale.getExtent() , i = e[1] - e[0] + (this.onBand ? 1 : 0); 0 === i && (i = 1); var n = Math.abs(t[1] - t[0]); return Math.abs(n) / i }, isHorizontal: null, getRotate: null, calculateCategoryInterval: function() { return function(t) { var e = function(t) { var e = t.getLabelModel(); return { axisRotate: t.getRotate ? t.getRotate() : t.isHorizontal && !t.isHorizontal() ? 90 : 0, labelRotate: e.get("rotate") || 0, font: e.getFont() } }(t) , i = lg(t) , n = (e.axisRotate - e.labelRotate) / 180 * Math.PI , o = t.scale , a = o.getExtent() , r = o.count(); if (a[1] - a[0] < 1) return 0; var s = 1; 40 < r && (s = Math.max(1, Math.floor(r / 40))); for (var l = a[0], u = t.dataToCoord(l + 1) - t.dataToCoord(l), h = Math.abs(u * Math.cos(n)), c = Math.abs(u * Math.sin(n)), d = 0, f = 0; l <= a[1]; l += s) { var p, g, m = gn(i(l), e.font, "center", "top"); p = 1.3 * m.width, g = 1.3 * m.height, d = Math.max(d, p, 7), f = Math.max(f, g, 7) } var v = d / h , y = f / c; isNaN(v) && (v = 1 / 0), isNaN(y) && (y = 1 / 0); var x = Math.max(0, Math.floor(Math.min(v, y))) , _ = Lg(t.model) , w = t.getExtent() , b = _.lastAutoInterval , S = _.lastTickCount; return null != b && null != S && Math.abs(b - x) <= 1 && Math.abs(S - r) <= 1 && x < b && _.axisExtend0 === w[0] && _.axisExtend1 === w[1] ? x = b : (_.lastTickCount = r, _.lastAutoInterval = x, _.axisExtend0 = w[0], _.axisExtend1 = w[1]), x }(this) } }; var Wg = Cg , Hg = {}; E(["map", "each", "filter", "indexOf", "inherits", "reduce", "filter", "bind", "curry", "isArray", "isString", "isObject", "isFunction", "extend", "defaults", "clone", "merge"], function(t) { Hg[t] = it[t] }); var Zg = {}; function Ug(t, e) { var i = t.mapDimension("defaultedLabel", !0) , n = i.length; if (1 === n) return Hh(t, e, i[0]); if (n) { for (var o = [], a = 0; a < i.length; a++) { var r = Hh(t, e, i[a]); o.push(r) } return o.join(" ") } } function Xg(t, e, i) { Ci.call(this), this.updateData(t, e, i) } E(["extendShape", "extendPath", "makePath", "makeImage", "mergePath", "resizePath", "createIcon", "setHoverStyle", "setLabelStyle", "setTextStyle", "setText", "getFont", "updateProps", "initProps", "getTransform", "clipPointsByRect", "clipRectByRect", "registerShape", "getShapeClass", "Group", "Image", "Text", "Circle", "Sector", "Ring", "Polygon", "Polyline", "Rect", "Line", "BezierCurve", "Arc", "IncrementalDisplayable", "CompoundPath", "LinearGradient", "RadialGradient", "BoundingRect"], function(t) { Zg[t] = bl[t] }), sc.extend({ type: "series.line", dependencies: ["grid", "polar"], getInitialData: function(t, e) { return gp(this.getSource(), this, { useEncodeDefaulter: !0 }) }, defaultOption: { zlevel: 0, z: 2, coordinateSystem: "cartesian2d", legendHoverLink: !0, hoverAnimation: !0, clip: !0, label: { position: "top" }, lineStyle: { width: 2, type: "solid" }, step: !1, smooth: !1, smoothMonotone: null, symbol: "emptyCircle", symbolSize: 4, symbolRotate: null, showSymbol: !0, showAllSymbol: "auto", connectNulls: !1, sampling: "none", animationEasing: "linear", progressive: 0, hoverLayerThreshold: 1 / 0 } }); var Yg = Xg.prototype , jg = Xg.getSymbolSize = function(t, e) { var i = t.getItemVisual(e, "symbolSize"); return i instanceof Array ? i.slice() : [+i, +i] } ; function qg(t) { return [t[0] / 2, t[1] / 2] } function Kg(t, e) { this.parent.drift(t, e) } Yg._createSymbol = function(t, e, i, n, o) { this.removeAll(); var a = wg(t, -1, -1, 2, 2, e.getItemVisual(i, "color"), o); a.attr({ z2: 100, culling: !0, scale: qg(n) }), a.drift = Kg, this._symbolType = t, this.add(a) } , Yg.stopSymbolAnimation = function(t) { this.childAt(0).stopAnimation(t) } , Yg.getSymbolPath = function() { return this.childAt(0) } , Yg.getScale = function() { return this.childAt(0).scale } , Yg.highlight = function() { this.childAt(0).trigger("emphasis") } , Yg.downplay = function() { this.childAt(0).trigger("normal") } , Yg.setZ = function(t, e) { var i = this.childAt(0); i.zlevel = t, i.z = e } , Yg.setDraggable = function(t) { var e = this.childAt(0); e.draggable = t, e.cursor = t ? "move" : e.cursor } , Yg.updateData = function(t, e, i) { this.silent = !1; var n = t.getItemVisual(e, "symbol") || "circle" , o = t.hostModel , a = jg(t, e) , r = n !== this._symbolType; if (r) { var s = t.getItemVisual(e, "symbolKeepAspect"); this._createSymbol(n, t, e, a, s) } else { (l = this.childAt(0)).silent = !1, cl(l, { scale: qg(a) }, o, e) } if (this._updateCommon(t, e, a, i), r) { var l = this.childAt(0) , u = i && i.fadeIn , h = { scale: l.scale.slice() }; u && (h.style = { opacity: l.style.opacity }), l.scale = [0, 0], u && (l.style.opacity = 0), dl(l, h, o, e) } this._seriesModel = o } ; var $g = ["itemStyle"] , Jg = ["emphasis", "itemStyle"] , Qg = ["label"] , tm = ["emphasis", "label"]; function em(t, e) { if (!this.incremental && !this.useHoverLayer) if ("emphasis" === e) { var i = this.__symbolOriginalScale , n = i[1] / i[0] , o = { scale: [Math.max(1.1 * i[0], i[0] + 3), Math.max(1.1 * i[1], i[1] + 3 * n)] }; this.animateTo(o, 400, "elasticOut") } else "normal" === e && this.animateTo({ scale: this.__symbolOriginalScale }, 400, "elasticOut") } function im(t) { this.group = new Ci, this._symbolCtor = t || Xg } Yg._updateCommon = function(i, t, e, n) { var o = this.childAt(0) , a = i.hostModel , r = i.getItemVisual(t, "color"); "image" !== o.type ? o.useStyle({ strokeNoScale: !0 }) : o.setStyle({ opacity: null, shadowBlur: null, shadowOffsetX: null, shadowOffsetY: null, shadowColor: null }); var s = n && n.itemStyle , l = n && n.hoverItemStyle , u = n && n.symbolOffset , h = n && n.labelModel , c = n && n.hoverLabelModel , d = n && n.hoverAnimation , f = n && n.cursorStyle; if (!n || i.hasItemOption) { var p = n && n.itemModel ? n.itemModel : i.getItemModel(t); s = p.getModel($g).getItemStyle(["color"]), l = p.getModel(Jg).getItemStyle(), u = p.getShallow("symbolOffset"), h = p.getModel(Qg), c = p.getModel(tm), d = p.getShallow("hoverAnimation"), f = p.getShallow("cursor") } else l = P({}, l); var g = o.style , m = i.getItemVisual(t, "symbolRotate"); o.attr("rotation", (m || 0) * Math.PI / 180 || 0), u && o.attr("position", [Rl(u[0], e[0]), Rl(u[1], e[1])]), f && o.attr("cursor", f), o.setColor(r, n && n.symbolInnerColor), o.setStyle(s); var v = i.getItemVisual(t, "opacity"); null != v && (g.opacity = v); var y = i.getItemVisual(t, "liftZ") , x = o.__z2Origin; null != y ? null == x && (o.__z2Origin = o.z2, o.z2 += y) : null != x && (o.z2 = x, o.__z2Origin = null); var _ = n && n.useNameLabel; el(g, l, h, c, { labelFetcher: a, labelDataIndex: t, defaultText: function(t, e) { return _ ? i.getName(t) : Ug(i, t) }, isRectText: !0, autoColor: r }), o.__symbolOriginalScale = qg(e), o.hoverStyle = l, o.highDownOnUpdate = d && a.isAnimationEnabled() ? em : null, $s(o) } , Yg.fadeOut = function(t, e) { var i = this.childAt(0); this.silent = i.silent = !0, e && e.keepLabel || (i.style.text = null), cl(i, { style: { opacity: 0 }, scale: [0, 0] }, this._seriesModel, this.dataIndex, t) } , w(Xg, Ci); var nm = im.prototype; function om(t, e, i, n) { return e && !isNaN(e[0]) && !isNaN(e[1]) && !(n.isIgnore && n.isIgnore(i)) && !(n.clipShape && !n.clipShape.contain(e[0], e[1])) && "none" !== t.getItemVisual(i, "symbol") } function am(t) { return null == t || z(t) || (t = { isIgnore: t }), t || {} } function rm(t) { var e = t.hostModel; return { itemStyle: e.getModel("itemStyle").getItemStyle(["color"]), hoverItemStyle: e.getModel("emphasis.itemStyle").getItemStyle(), symbolRotate: e.get("symbolRotate"), symbolOffset: e.get("symbolOffset"), hoverAnimation: e.get("hoverAnimation"), labelModel: e.getModel("label"), hoverLabelModel: e.getModel("emphasis.label"), cursorStyle: e.get("cursor") } } function sm(t, e, i) { var n, o = t.getBaseAxis(), a = t.getOtherAxis(o), r = function(t, e) { var i = 0 , n = t.scale.getExtent(); "start" === e ? i = n[0] : "end" === e ? i = n[1] : 0 < n[0] ? i = n[0] : n[1] < 0 && (i = n[1]); return i }(a, i), s = o.dim, l = a.dim, u = e.mapDimension(l), h = e.mapDimension(s), c = "x" === l || "radius" === l ? 1 : 0, d = O(t.dimensions, function(t) { return e.mapDimension(t) }), f = e.getCalculationInfo("stackResultDimension"); return (n |= fp(e, d[0])) && (d[0] = f), (n |= fp(e, d[1])) && (d[1] = f), { dataDimsForPoint: d, valueStart: r, valueAxisDim: l, baseAxisDim: s, stacked: !!n, valueDim: u, baseDim: h, baseDataOffset: c, stackedOverDimension: e.getCalculationInfo("stackedOverDimension") } } function lm(t, e, i, n) { var o = NaN; t.stacked && (o = i.get(i.getCalculationInfo("stackedOverDimension"), n)), isNaN(o) && (o = t.valueStart); var a = t.baseDataOffset , r = []; return r[a] = i.get(t.baseDim, n), r[1 - a] = o, e.dataToPoint(r) } nm.updateData = function(o, a) { a = am(a); var r = this.group , s = o.hostModel , l = this._data , u = this._symbolCtor , h = rm(o); l || r.removeAll(), o.diff(l).add(function(t) { var e = o.getItemLayout(t); if (om(o, e, t, a)) { var i = new u(o,t,h); i.attr("position", e), o.setItemGraphicEl(t, i), r.add(i) } }).update(function(t, e) { var i = l.getItemGraphicEl(e) , n = o.getItemLayout(t); om(o, n, t, a) ? (i ? (i.updateData(o, t, h), cl(i, { position: n }, s)) : (i = new u(o,t)).attr("position", n), r.add(i), o.setItemGraphicEl(t, i)) : r.remove(i) }).remove(function(t) { var e = l.getItemGraphicEl(t); e && e.fadeOut(function() { r.remove(e) }) }).execute(), this._data = o } , nm.isPersistent = function() { return !0 } , nm.updateLayout = function() { var n = this._data; n && n.eachItemGraphicEl(function(t, e) { var i = n.getItemLayout(e); t.attr("position", i) }) } , nm.incrementalPrepareUpdate = function(t) { this._seriesScope = rm(t), this._data = null, this.group.removeAll() } , nm.incrementalUpdate = function(t, e, i) { function n(t) { t.isGroup || (t.incremental = t.useHoverLayer = !0) } i = am(i); for (var o = t.start; o < t.end; o++) { var a = e.getItemLayout(o); if (om(e, a, o, i)) { var r = new this._symbolCtor(e,o,this._seriesScope); r.traverse(n), r.attr("position", a), this.group.add(r), e.setItemGraphicEl(o, r) } } } , nm.remove = function(t) { var e = this.group , i = this._data; i && t ? i.eachItemGraphicEl(function(t) { t.fadeOut(function() { e.remove(t) }) }) : e.removeAll() } ; var um = St , hm = Mt , cm = ut , dm = at , fm = [] , pm = [] , gm = []; function mm(t) { return isNaN(t[0]) || isNaN(t[1]) } function vm(t, e, i, n, o, a, r, s, l, u) { return "none" !== u && u ? function(t, e, i, n, o, a, r, s, l, u, h) { for (var c = 0, d = i, f = 0; f < n; f++) { var p = e[d]; if (o <= d || d < 0) break; if (mm(p)) { if (h) { d += a; continue } break } if (d === i) t[0 < a ? "moveTo" : "lineTo"](p[0], p[1]); else if (0 < l) { var g = e[c] , m = "y" === u ? 1 : 0 , v = (p[m] - g[m]) * l; dm(pm, g), pm[m] = g[m] + v, dm(gm, p), gm[m] = p[m] - v, t.bezierCurveTo(pm[0], pm[1], gm[0], gm[1], p[0], p[1]) } else t.lineTo(p[0], p[1]); c = d, d += a } return f } .apply(this, arguments) : function(t, e, i, n, o, a, r, s, l, u, h) { for (var c = 0, d = i, f = 0; f < n; f++) { var p = e[d]; if (o <= d || d < 0) break; if (mm(p)) { if (h) { d += a; continue } break } if (d === i) t[0 < a ? "moveTo" : "lineTo"](p[0], p[1]), dm(pm, p); else if (0 < l) { var g = d + a , m = e[g]; if (h) for (; m && mm(e[g]); ) m = e[g += a]; var v = .5 , y = e[c]; if (!(m = e[g]) || mm(m)) dm(gm, p); else { var x, _; if (mm(m) && !h && (m = p), ht(fm, m, y), "x" === u || "y" === u) { var w = "x" === u ? 0 : 1; x = Math.abs(p[w] - y[w]), _ = Math.abs(p[w] - m[w]) } else x = yt(p, y), _ = yt(p, m); cm(gm, p, fm, -l * (1 - (v = _ / (_ + x)))) } um(pm, pm, s), hm(pm, pm, r), um(gm, gm, s), hm(gm, gm, r), t.bezierCurveTo(pm[0], pm[1], gm[0], gm[1], p[0], p[1]), cm(pm, p, fm, l * v) } else t.lineTo(p[0], p[1]); c = d, d += a } return f } .apply(this, arguments) } function ym(t, e) { var i = [1 / 0, 1 / 0] , n = [-1 / 0, -1 / 0]; if (e) for (var o = 0; o < t.length; o++) { var a = t[o]; a[0] < i[0] && (i[0] = a[0]), a[1] < i[1] && (i[1] = a[1]), a[0] > n[0] && (n[0] = a[0]), a[1] > n[1] && (n[1] = a[1]) } return { min: e ? i : n, max: e ? n : i } } var xm = Ar.extend({ type: "ec-polyline", shape: { points: [], smooth: 0, smoothConstraint: !0, smoothMonotone: null, connectNulls: !1 }, style: { fill: null, stroke: "#000" }, brush: Xr(Ar.prototype.brush), buildPath: function(t, e) { var i = e.points , n = 0 , o = i.length , a = ym(i, e.smoothConstraint); if (e.connectNulls) { for (; 0 < o && mm(i[o - 1]); o--) ; for (; n < o && mm(i[n]); n++) ; } for (; n < o; ) n += vm(t, i, n, o, o, 1, a.min, a.max, e.smooth, e.smoothMonotone, e.connectNulls) + 1 } }) , _m = Ar.extend({ type: "ec-polygon", shape: { points: [], stackedOnPoints: [], smooth: 0, stackedOnSmooth: 0, smoothConstraint: !0, smoothMonotone: null, connectNulls: !1 }, brush: Xr(Ar.prototype.brush), buildPath: function(t, e) { var i = e.points , n = e.stackedOnPoints , o = 0 , a = i.length , r = e.smoothMonotone , s = ym(i, e.smoothConstraint) , l = ym(n, e.smoothConstraint); if (e.connectNulls) { for (; 0 < a && mm(i[a - 1]); a--) ; for (; o < a && mm(i[o]); o++) ; } for (; o < a; ) { var u = vm(t, i, o, a, a, 1, s.min, s.max, e.smooth, r, e.connectNulls); vm(t, n, o + u - 1, u, a, -1, l.min, l.max, e.stackedOnSmooth, r, e.connectNulls), o += u + 1, t.closePath() } } }); function wm(t, e, i) { var n = t.getArea() , o = t.getBaseAxis().isHorizontal() , a = n.x , r = n.y , s = n.width , l = n.height , u = i.get("lineStyle.width") || 2; a -= u / 2, r -= u / 2, s += u, l += u, a = Math.floor(a), s = Math.round(s); var h = new rs({ shape: { x: a, y: r, width: s, height: l } }); return e && (h.shape[o ? "width" : "height"] = 0, dl(h, { shape: { width: s, height: l } }, i)), h } function bm(t, e, i) { var n = t.getArea() , o = new qr({ shape: { cx: zl(t.cx, 1), cy: zl(t.cy, 1), r0: zl(n.r0, 1), r: zl(n.r, 1), startAngle: n.startAngle, endAngle: n.endAngle, clockwise: n.clockwise } }); return e && (o.shape.endAngle = n.startAngle, dl(o, { shape: { endAngle: n.endAngle } }, i)), o } function Sm(t, e, i) { return t ? "polar" === t.type ? bm(t, e, i) : "cartesian2d" === t.type ? wm(t, e, i) : null : null } function Mm(t, e) { if (t.length === e.length) { for (var i = 0; i < t.length; i++) { var n = t[i] , o = e[i]; if (n[0] !== o[0] || n[1] !== o[1]) return } return !0 } } function Im(t, e) { var i = [] , n = [] , o = [] , a = []; return Wa(t, i, n), Wa(e, o, a), Math.max(Math.abs(i[0] - o[0]), Math.abs(i[1] - o[1]), Math.abs(n[0] - a[0]), Math.abs(n[1] - a[1])) } function Tm(t) { return "number" == typeof t ? t : t ? .5 : 0 } function Am(t, e, i) { for (var n = e.getBaseAxis(), o = "x" === n.dim || "radius" === n.dim ? 0 : 1, a = [], r = 0; r < t.length - 1; r++) { var s = t[r + 1] , l = t[r]; a.push(l); var u = []; switch (i) { case "end": u[o] = s[o], u[1 - o] = l[1 - o], a.push(u); break; case "middle": var h = (l[o] + s[o]) / 2 , c = []; u[o] = c[o] = h, u[1 - o] = l[1 - o], c[1 - o] = s[1 - o], a.push(u), a.push(c); break; default: u[o] = l[o], u[1 - o] = s[1 - o], a.push(u) } } return t[r] && a.push(t[r]), a } function Dm(t, e, i) { var n = t.get("showAllSymbol") , o = "auto" === n; if (!n || o) { var a = i.getAxesByScale("ordinal")[0]; if (a && (!o || !function(t, e) { var i = t.getExtent() , n = Math.abs(i[1] - i[0]) / t.scale.count(); isNaN(n) && (n = 0); for (var o = e.count(), a = Math.max(1, Math.round(o / 5)), r = 0; r < o; r += a) if (1.5 * Xg.getSymbolSize(e, r)[t.isHorizontal() ? 1 : 0] > n) return !1; return !0 }(a, e))) { var r = e.mapDimension(a.dim) , s = {}; return E(a.getViewLabels(), function(t) { s[t.tickValue] = 1 }), function(t) { return !s.hasOwnProperty(e.get(r, t)) } } } } function Cm(t, e, i) { if ("cartesian2d" !== t.type) return bm(t, e, i); var n = t.getBaseAxis().isHorizontal() , o = wm(t, e, i); if (!i.get("clip", !0)) { var a = o.shape , r = Math.max(a.width, a.height); n ? (a.y -= r, a.height += 2 * r) : (a.x -= r, a.width += 2 * r) } return o } _c.extend({ type: "line", init: function() { var t = new Ci , e = new im; this.group.add(e.group), this._symbolDraw = e, this._lineGroup = t }, render: function(t, e, i) { var n = t.coordinateSystem , o = this.group , a = t.getData() , r = t.getModel("lineStyle") , s = t.getModel("areaStyle") , l = a.mapArray(a.getItemLayout) , u = "polar" === n.type , h = this._coordSys , c = this._symbolDraw , d = this._polyline , f = this._polygon , p = this._lineGroup , g = t.get("animation") , m = !s.isEmpty() , v = s.get("origin") , y = function(t, e, i) { if (!i.valueDim) return []; for (var n = [], o = 0, a = e.count(); o < a; o++) n.push(lm(i, t, e, o)); return n }(n, a, sm(n, a, v)) , x = t.get("showSymbol") , _ = x && !u && Dm(t, a, n) , w = this._data; w && w.eachItemGraphicEl(function(t, e) { t.__temp && (o.remove(t), w.setItemGraphicEl(e, null)) }), x || c.remove(), o.add(p); var b, S = !u && t.get("step"); n && n.getArea && t.get("clip", !0) && (null != (b = n.getArea()).width ? (b.x -= .1, b.y -= .1, b.width += .2, b.height += .2) : b.r0 && (b.r0 -= .5, b.r1 += .5)), this._clipShapeForSymbol = b, d && h.type === n.type && S === this._step ? (m && !f ? f = this._newPolygon(l, y, n, g) : f && !m && (p.remove(f), f = this._polygon = null), p.setClipPath(Cm(n, !1, t)), x && c.updateData(a, { isIgnore: _, clipShape: b }), a.eachItemGraphicEl(function(t) { t.stopAnimation(!0) }), Mm(this._stackedOnPoints, y) && Mm(this._points, l) || (g ? this._updateAnimation(a, y, n, i, S, v) : (S && (l = Am(l, n, S), y = Am(y, n, S)), d.setShape({ points: l }), f && f.setShape({ points: l, stackedOnPoints: y })))) : (x && c.updateData(a, { isIgnore: _, clipShape: b }), S && (l = Am(l, n, S), y = Am(y, n, S)), d = this._newPolyline(l, n, g), m && (f = this._newPolygon(l, y, n, g)), p.setClipPath(Cm(n, !0, t))); var M = function(t, e) { var i = t.getVisual("visualMeta"); if (i && i.length && t.count() && "cartesian2d" === e.type) { for (var n, o, a = i.length - 1; 0 <= a; a--) { var r = i[a].dimension , s = t.dimensions[r] , l = t.getDimensionInfo(s); if ("x" === (n = l && l.coordDim) || "y" === n) { o = i[a]; break } } if (o) { var u = e.getAxis(n) , h = O(o.stops, function(t) { return { coord: u.toGlobalCoord(u.dataToCoord(t.value)), color: t.color } }) , c = h.length , d = o.outerColors.slice(); c && h[0].coord > h[c - 1].coord && (h.reverse(), d.reverse()); var f = h[0].coord - 10 , p = h[c - 1].coord + 10 , g = p - f; if (g < .001) return "transparent"; E(h, function(t) { t.offset = (t.coord - f) / g }), h.push({ offset: c ? h[c - 1].offset : .5, color: d[1] || "transparent" }), h.unshift({ offset: c ? h[0].offset : .5, color: d[0] || "transparent" }); var m = new gs(0,0,0,0,h,!0); return m[n] = f, m[n + "2"] = p, m } } }(a, n) || a.getVisual("color"); d.useStyle(D(r.getLineStyle(), { fill: "none", stroke: M, lineJoin: "bevel" })); var I = t.get("smooth"); if (I = Tm(t.get("smooth")), d.setShape({ smooth: I, smoothMonotone: t.get("smoothMonotone"), connectNulls: t.get("connectNulls") }), f) { var T = a.getCalculationInfo("stackedOnSeries") , A = 0; f.useStyle(D(s.getAreaStyle(), { fill: M, opacity: .7, lineJoin: "bevel" })), T && (A = Tm(T.get("smooth"))), f.setShape({ smooth: I, stackedOnSmooth: A, smoothMonotone: t.get("smoothMonotone"), connectNulls: t.get("connectNulls") }) } this._data = a, this._coordSys = n, this._stackedOnPoints = y, this._points = l, this._step = S, this._valueOrigin = v }, dispose: function() {}, highlight: function(t, e, i, n) { var o = t.getData() , a = Yo(o, n); if (!(a instanceof Array) && null != a && 0 <= a) { var r = o.getItemGraphicEl(a); if (!r) { var s = o.getItemLayout(a); if (!s) return; if (this._clipShapeForSymbol && !this._clipShapeForSymbol.contain(s[0], s[1])) return; (r = new Xg(o,a)).position = s, r.setZ(t.get("zlevel"), t.get("z")), r.ignore = isNaN(s[0]) || isNaN(s[1]), r.__temp = !0, o.setItemGraphicEl(a, r), r.stopSymbolAnimation(!0), this.group.add(r) } r.highlight() } else _c.prototype.highlight.call(this, t, e, i, n) }, downplay: function(t, e, i, n) { var o = t.getData() , a = Yo(o, n); if (null != a && 0 <= a) { var r = o.getItemGraphicEl(a); r && (r.__temp ? (o.setItemGraphicEl(a, null), this.group.remove(r)) : r.downplay()) } else _c.prototype.downplay.call(this, t, e, i, n) }, _newPolyline: function(t) { var e = this._polyline; return e && this._lineGroup.remove(e), e = new xm({ shape: { points: t }, silent: !0, z2: 10 }), this._lineGroup.add(e), this._polyline = e }, _newPolygon: function(t, e) { var i = this._polygon; return i && this._lineGroup.remove(i), i = new _m({ shape: { points: t, stackedOnPoints: e }, silent: !0 }), this._lineGroup.add(i), this._polygon = i }, _updateAnimation: function(t, e, i, n, o, a) { var r = this._polyline , s = this._polygon , l = t.hostModel , u = function(t, e, i, n, o, a, r, s) { for (var l = function(t, e) { var i = []; return e.diff(t).add(function(t) { i.push({ cmd: "+", idx: t }) }).update(function(t, e) { i.push({ cmd: "=", idx: e, idx1: t }) }).remove(function(t) { i.push({ cmd: "-", idx: t }) }).execute(), i }(t, e), u = [], h = [], c = [], d = [], f = [], p = [], g = [], m = sm(o, e, r), v = sm(a, t, s), y = 0; y < l.length; y++) { var x = l[y] , _ = !0; switch (x.cmd) { case "=": var w = t.getItemLayout(x.idx) , b = e.getItemLayout(x.idx1); (isNaN(w[0]) || isNaN(w[1])) && (w = b.slice()), u.push(w), h.push(b), c.push(i[x.idx]), d.push(n[x.idx1]), g.push(e.getRawIndex(x.idx1)); break; case "+": var S = x.idx; u.push(o.dataToPoint([e.get(m.dataDimsForPoint[0], S), e.get(m.dataDimsForPoint[1], S)])), h.push(e.getItemLayout(S).slice()), c.push(lm(m, o, e, S)), d.push(n[S]), g.push(e.getRawIndex(S)); break; case "-": S = x.idx; var M = t.getRawIndex(S); M !== S ? (u.push(t.getItemLayout(S)), h.push(a.dataToPoint([t.get(v.dataDimsForPoint[0], S), t.get(v.dataDimsForPoint[1], S)])), c.push(i[S]), d.push(lm(v, a, t, S)), g.push(M)) : _ = !1 } _ && (f.push(x), p.push(p.length)) } p.sort(function(t, e) { return g[t] - g[e] }); var I = [] , T = [] , A = [] , D = [] , C = []; for (y = 0; y < p.length; y++) { S = p[y]; I[y] = u[S], T[y] = h[S], A[y] = c[S], D[y] = d[S], C[y] = f[S] } return { current: I, next: T, stackedOnCurrent: A, stackedOnNext: D, status: C } }(this._data, t, this._stackedOnPoints, e, this._coordSys, i, this._valueOrigin, a) , h = u.current , c = u.stackedOnCurrent , d = u.next , f = u.stackedOnNext; if (o && (h = Am(u.current, i, o), c = Am(u.stackedOnCurrent, i, o), d = Am(u.next, i, o), f = Am(u.stackedOnNext, i, o)), 3e3 < Im(h, d) || s && 3e3 < Im(c, f)) return r.setShape({ points: d }), void (s && s.setShape({ points: d, stackedOnPoints: f })); r.shape.__points = u.current, r.shape.points = h, cl(r, { shape: { points: d } }, l), s && (s.setShape({ points: h, stackedOnPoints: c }), cl(s, { shape: { points: d, stackedOnPoints: f } }, l)); for (var p = [], g = u.status, m = 0; m < g.length; m++) { if ("=" === g[m].cmd) { var v = t.getItemGraphicEl(g[m].idx1); v && p.push({ el: v, ptIdx: m }) } } r.animators && r.animators.length && r.animators[0].during(function() { for (var t = 0; t < p.length; t++) { p[t].el.attr("position", r.shape.__points[p[t].ptIdx]) } }) }, remove: function(t) { var i = this.group , n = this._data; this._lineGroup.removeAll(), this._symbolDraw.remove(!0), n && n.eachItemGraphicEl(function(t, e) { t.__temp && (i.remove(t), n.setItemGraphicEl(e, null)) }), this._polyline = this._polygon = this._coordSys = this._points = this._stackedOnPoints = this._data = null } }); function Lm(t, r, s) { return { seriesType: t, performRawSeries: !0, reset: function(u, t, e) { var i = u.getData() , h = u.get("symbol") , c = u.get("symbolSize") , n = u.get("symbolKeepAspect") , d = u.get("symbolRotate") , f = C(h) , p = C(c) , g = C(d) , m = f || p || g , o = !f && h ? h : r , a = p ? null : c; if (i.setVisual({ legendSymbol: s || o, symbol: o, symbolSize: a, symbolKeepAspect: n, symbolRotate: d }), !t.isSeriesFiltered(u)) return { dataEach: i.hasItemOption || m ? function(t, e) { if (m) { var i = u.getRawValue(e) , n = u.getDataParams(e); f && t.setItemVisual(e, "symbol", h(i, n)), p && t.setItemVisual(e, "symbolSize", c(i, n)), g && t.setItemVisual(e, "symbolRotate", d(i, n)) } if (t.hasItemOption) { var o = t.getItemModel(e) , a = o.getShallow("symbol", !0) , r = o.getShallow("symbolSize", !0) , s = o.getShallow("symbolRotate", !0) , l = o.getShallow("symbolKeepAspect", !0); null != a && t.setItemVisual(e, "symbol", a), null != r && t.setItemVisual(e, "symbolSize", r), null != s && t.setItemVisual(e, "symbolRotate", s), null != l && t.setItemVisual(e, "symbolKeepAspect", l) } } : null } } } } function km(t) { return { seriesType: t, plan: vc(), reset: function(t) { var e = t.getData() , c = t.coordinateSystem , d = t.pipelineContext.large; if (c) { var f = O(c.dimensions, function(t) { return e.mapDimension(t) }).slice(0, 2) , p = f.length , i = e.getCalculationInfo("stackResultDimension"); return fp(e, f[0]) && (f[0] = i), fp(e, f[1]) && (f[1] = i), p && { progress: function(t, e) { for (var i = t.end - t.start, n = d && new Float32Array(i * p), o = t.start, a = 0, r = [], s = []; o < t.end; o++) { var l; if (1 === p) { var u = e.get(f[0], o); l = !isNaN(u) && c.dataToPoint(u, null, s) } else { u = r[0] = e.get(f[0], o); var h = r[1] = e.get(f[1], o); l = !isNaN(u) && !isNaN(h) && c.dataToPoint(r, null, s) } d ? (n[a++] = l ? l[0] : NaN, n[a++] = l ? l[1] : NaN) : e.setItemLayout(o, l && l.slice() || [NaN, NaN]) } d && e.setLayout("symbolPoints", n) } } } } } } function Pm(t, e) { return Math.round(t.length / 2) } var Nm = { average: function(t) { for (var e = 0, i = 0, n = 0; n < t.length; n++) isNaN(t[n]) || (e += t[n], i++); return 0 === i ? NaN : e / i }, sum: function(t) { for (var e = 0, i = 0; i < t.length; i++) e += t[i] || 0; return e }, max: function(t) { for (var e = -1 / 0, i = 0; i < t.length; i++) t[i] > e && (e = t[i]); return isFinite(e) ? e : NaN }, min: function(t) { for (var e = 1 / 0, i = 0; i < t.length; i++) t[i] < e && (e = t[i]); return isFinite(e) ? e : NaN }, nearest: function(t) { return t[0] } }; function Om(t) { return this._axes[t] } function Em(t) { this._axes = {}, this._dimList = [], this.name = t || "" } function Rm(t) { Em.call(this, t) } Em.prototype = { constructor: Em, type: "cartesian", getAxis: function(t) { return this._axes[t] }, getAxes: function() { return O(this._dimList, Om, this) }, getAxesByScale: function(e) { return e = e.toLowerCase(), M(this.getAxes(), function(t) { return t.scale.type === e }) }, addAxis: function(t) { var e = t.dim; this._axes[e] = t, this._dimList.push(e) }, dataToCoord: function(t) { return this._dataCoordConvert(t, "dataToCoord") }, coordToData: function(t) { return this._dataCoordConvert(t, "coordToData") }, _dataCoordConvert: function(t, e) { for (var i = this._dimList, n = t instanceof Array ? [] : {}, o = 0; o < i.length; o++) { var a = i[o] , r = this._axes[a]; n[a] = r[e](t[a]) } return n } }, Rm.prototype = { constructor: Rm, type: "cartesian2d", dimensions: ["x", "y"], getBaseAxis: function() { return this.getAxesByScale("ordinal")[0] || this.getAxesByScale("time")[0] || this.getAxis("x") }, containPoint: function(t) { var e = this.getAxis("x") , i = this.getAxis("y"); return e.contain(e.toLocalCoord(t[0])) && i.contain(i.toLocalCoord(t[1])) }, containData: function(t) { return this.getAxis("x").containData(t[0]) && this.getAxis("y").containData(t[1]) }, dataToPoint: function(t, e, i) { var n = this.getAxis("x") , o = this.getAxis("y"); return (i = i || [])[0] = n.toGlobalCoord(n.dataToCoord(t[0])), i[1] = o.toGlobalCoord(o.dataToCoord(t[1])), i }, clampData: function(t, e) { var i = this.getAxis("x").scale , n = this.getAxis("y").scale , o = i.getExtent() , a = n.getExtent() , r = i.parse(t[0]) , s = n.parse(t[1]); return (e = e || [])[0] = Math.min(Math.max(Math.min(o[0], o[1]), r), Math.max(o[0], o[1])), e[1] = Math.min(Math.max(Math.min(a[0], a[1]), s), Math.max(a[0], a[1])), e }, pointToData: function(t, e) { var i = this.getAxis("x") , n = this.getAxis("y"); return (e = e || [])[0] = i.coordToData(i.toLocalCoord(t[0])), e[1] = n.coordToData(n.toLocalCoord(t[1])), e }, getOtherAxis: function(t) { return this.getAxis("x" === t.dim ? "y" : "x") }, getArea: function() { var t = this.getAxis("x").getGlobalExtent() , e = this.getAxis("y").getGlobalExtent() , i = Math.min(t[0], t[1]) , n = Math.min(e[0], e[1]); return new Di(i,n,Math.max(t[0], t[1]) - i,Math.max(e[0], e[1]) - n) } }, w(Rm, Em); function zm(t, e, i, n, o) { Gg.call(this, t, e, i), this.type = n || "value", this.position = o || "bottom" } zm.prototype = { constructor: zm, index: 0, getAxesOnZeroOf: null, model: null, isHorizontal: function() { var t = this.position; return "top" === t || "bottom" === t }, getGlobalExtent: function(t) { var e = this.getExtent(); return e[0] = this.toGlobalCoord(e[0]), e[1] = this.toGlobalCoord(e[1]), t && e[0] > e[1] && e.reverse(), e }, getOtherAxis: function() { this.grid.getOtherAxis() }, pointToData: function(t, e) { return this.coordToData(this.toLocalCoord(t["x" === this.dim ? 0 : 1]), e) }, toLocalCoord: null, toGlobalCoord: null }, w(zm, Gg); var Bm = { show: !0, zlevel: 0, z: 0, inverse: !1, name: "", nameLocation: "end", nameRotate: null, nameTruncate: { maxWidth: null, ellipsis: "...", placeholder: "." }, nameTextStyle: {}, nameGap: 15, silent: !1, triggerEvent: !1, tooltip: { show: !1 }, axisPointer: {}, axisLine: { show: !0, onZero: !0, onZeroAxisIndex: null, lineStyle: { color: "#333", width: 1, type: "solid" }, symbol: ["none", "none"], symbolSize: [10, 15] }, axisTick: { show: !0, inside: !1, length: 5, lineStyle: { width: 1 } }, axisLabel: { show: !0, inside: !1, rotate: 0, showMinLabel: null, showMaxLabel: null, margin: 8, fontSize: 12 }, splitLine: { show: !0, lineStyle: { color: ["#ccc"], width: 1, type: "solid" } }, splitArea: { show: !1, areaStyle: { color: ["rgba(250,250,250,0.3)", "rgba(200,200,200,0.3)"] } } } , Vm = {}; Vm.categoryAxis = m({ boundaryGap: !0, deduplication: null, splitLine: { show: !1 }, axisTick: { alignWithLabel: !1, interval: "auto" }, axisLabel: { interval: "auto" } }, Bm), Vm.valueAxis = m({ boundaryGap: [0, 0], splitNumber: 5, minorTick: { show: !1, splitNumber: 5, length: 3, lineStyle: {} }, minorSplitLine: { show: !1, lineStyle: { color: "#eee", width: 1 } } }, Bm), Vm.timeAxis = D({ scale: !0, min: "dataMin", max: "dataMax" }, Vm.valueAxis), Vm.logAxis = D({ scale: !0, logBase: 10 }, Vm.valueAxis); function Gm(a, t, r, e) { E(Fm, function(o) { t.extend({ type: a + "Axis." + o, mergeDefaultAndTheme: function(t, e) { var i = this.layoutMode , n = i ? Iu(t) : {}; m(t, e.getTheme().get(o + "Axis")), m(t, this.getDefaultOption()), t.type = r(a, t), i && Mu(t, n, i) }, optionUpdated: function() { "category" === this.option.type && (this.__ordinalMeta = vp.createByAxisModel(this)) }, getCategories: function(t) { var e = this.option; if ("category" === e.type) return t ? e.data : this.__ordinalMeta.categories }, getOrdinalMeta: function() { return this.__ordinalMeta }, defaultOption: p([{}, Vm[o + "Axis"], e], !0) }) }), ku.registerSubTypeDefaulter(a + "Axis", T(r, a)) } var Fm = ["value", "category", "time", "log"] , Wm = ku.extend({ type: "cartesian2dAxis", axis: null, init: function() { Wm.superApply(this, "init", arguments), this.resetRange() }, mergeOption: function() { Wm.superApply(this, "mergeOption", arguments), this.resetRange() }, restoreData: function() { Wm.superApply(this, "restoreData", arguments), this.resetRange() }, getCoordSysModel: function() { return this.ecModel.queryComponents({ mainType: "grid", index: this.option.gridIndex, id: this.option.gridId })[0] } }); function Hm(t, e) { return e.type || (e.data ? "category" : "value") } m(Wm.prototype, dg); var Zm = { offset: 0 }; function Um(t, e) { return t.getCoordSysModel() === e } function Xm(t, e, i) { this._coordsMap = {}, this._coordsList = [], this._axesMap = {}, this._axesList = [], this._initCartesian(t, e, i), this.model = t } Gm("x", Wm, Hm, Zm), Gm("y", Wm, Hm, Zm), ku.extend({ type: "grid", dependencies: ["xAxis", "yAxis"], layoutMode: "box", coordinateSystem: null, defaultOption: { show: !1, zlevel: 0, z: 0, left: "10%", top: 60, right: "10%", bottom: 60, containLabel: !1, backgroundColor: "rgba(0,0,0,0)", borderWidth: 1, borderColor: "#ccc" } }); var Ym = Xm.prototype; function jm(t, e, i, n) { i.getAxesOnZeroOf = function() { return o ? [o] : [] } ; var o, a = t[e], r = i.model, s = r.get("axisLine.onZero"), l = r.get("axisLine.onZeroAxisIndex"); if (s) { if (null != l) qm(a[l]) && (o = a[l]); else for (var u in a) if (a.hasOwnProperty(u) && qm(a[u]) && !n[h(a[u])]) { o = a[u]; break } o && (n[h(o)] = !0) } function h(t) { return t.dim + "_" + t.index } } function qm(t) { return t && "category" !== t.type && "time" !== t.type && function(t) { var e = t.scale.getExtent() , i = e[0] , n = e[1]; return !(0 < i && 0 < n || i < 0 && n < 0) }(t) } Ym.type = "grid", Ym.axisPointerEnabled = !0, Ym.getRect = function() { return this._rect } , Ym.update = function(t, e) { var i = this._axesMap; this._updateScale(t, this.model), E(i.x, function(t) { rg(t.scale, t.model) }), E(i.y, function(t) { rg(t.scale, t.model) }); var n = {}; E(i.x, function(t) { jm(i, "y", t, n) }), E(i.y, function(t) { jm(i, "x", t, n) }), this.resize(this.model, e) } , Ym.resize = function(t, e, i) { var o = bu(t.getBoxLayoutParams(), { width: e.getWidth(), height: e.getHeight() }); this._rect = o; var n = this._axesList; function a() { E(n, function(t) { var e = t.isHorizontal() , i = e ? [0, o.width] : [0, o.height] , n = t.inverse ? 1 : 0; t.setExtent(i[n], i[1 - n]), function(t, e) { var i = t.getExtent() , n = i[0] + i[1]; t.toGlobalCoord = "x" === t.dim ? function(t) { return t + e } : function(t) { return n - t + e } , t.toLocalCoord = "x" === t.dim ? function(t) { return t - e } : function(t) { return n - t + e } }(t, e ? o.x : o.y) }) } a(), !i && t.get("containLabel") && (E(n, function(t) { if (!t.model.get("axisLabel.inside")) { var e = function(t) { var e = t.model , i = t.scale; if (e.get("axisLabel.show") && !i.isBlank()) { var n, o, a = "category" === t.type, r = i.getExtent(); o = a ? i.count() : (n = i.getTicks()).length; var s, l, u, h, c, d, f, p, g, m = t.getLabelModel(), v = lg(t), y = 1; 40 < o && (y = Math.ceil(o / 40)); for (var x = 0; x < o; x += y) { var _ = v(n ? n[x] : r[0] + x) , w = m.getTextRect(_) , b = (l = w, u = m.get("rotate") || 0, void 0, h = u * Math.PI / 180, c = l.plain(), d = c.width, f = c.height, p = d * Math.cos(h) + f * Math.sin(h), g = d * Math.sin(h) + f * Math.cos(h), new Di(c.x,c.y,p,g)); s ? s.union(b) : s = b } return s } }(t); if (e) { var i = t.isHorizontal() ? "height" : "width" , n = t.model.get("axisLabel.margin"); o[i] -= e[i] + n, "top" === t.position ? o.y += e.height + n : "left" === t.position && (o.x += e.width + n) } } }), a()) } , Ym.getAxis = function(t, e) { var i = this._axesMap[t]; if (null != i) { if (null == e) for (var n in i) if (i.hasOwnProperty(n)) return i[n]; return i[e] } } , Ym.getAxes = function() { return this._axesList.slice() } , Ym.getCartesian = function(t, e) { if (null != t && null != e) { var i = "x" + t + "y" + e; return this._coordsMap[i] } z(t) && (e = t.yAxisIndex, t = t.xAxisIndex); for (var n = 0, o = this._coordsList; n < o.length; n++) if (o[n].getAxis("x").index === t || o[n].getAxis("y").index === e) return o[n] } , Ym.getCartesians = function() { return this._coordsList.slice() } , Ym.convertToPixel = function(t, e, i) { var n = this._findConvertTarget(t, e); return n.cartesian ? n.cartesian.dataToPoint(i) : n.axis ? n.axis.toGlobalCoord(n.axis.dataToCoord(i)) : null } , Ym.convertFromPixel = function(t, e, i) { var n = this._findConvertTarget(t, e); return n.cartesian ? n.cartesian.pointToData(i) : n.axis ? n.axis.coordToData(n.axis.toLocalCoord(i)) : null } , Ym._findConvertTarget = function(t, e) { var i, n, o = e.seriesModel, a = e.xAxisModel || o && o.getReferringComponents("xAxis")[0], r = e.yAxisModel || o && o.getReferringComponents("yAxis")[0], s = e.gridModel, l = this._coordsList; if (o) _(l, i = o.coordinateSystem) < 0 && (i = null); else if (a && r) i = this.getCartesian(a.componentIndex, r.componentIndex); else if (a) n = this.getAxis("x", a.componentIndex); else if (r) n = this.getAxis("y", r.componentIndex); else if (s) { s.coordinateSystem === this && (i = this._coordsList[0]) } return { cartesian: i, axis: n } } , Ym.containPoint = function(t) { var e = this._coordsList[0]; if (e) return e.containPoint(t) } , Ym._initCartesian = function(r, t, e) { var s = { left: !1, right: !1, top: !1, bottom: !1 } , l = { x: {}, y: {} } , u = { x: 0, y: 0 }; if (t.eachComponent("xAxis", i("x"), this), t.eachComponent("yAxis", i("y"), this), !u.x || !u.y) return this._axesMap = {}, void (this._axesList = []); function i(a) { return function(t, e) { if (Um(t, r)) { var i = t.get("position"); "x" === a ? "top" !== i && "bottom" !== i && (i = s.bottom ? "top" : "bottom") : "left" !== i && "right" !== i && (i = s.left ? "right" : "left"), s[i] = !0; var n = new zm(a,sg(t),[0, 0],t.get("type"),i) , o = "category" === n.type; n.onBand = o && t.get("boundaryGap"), n.inverse = t.get("inverse"), (t.axis = n).model = t, n.grid = this, n.index = e, this._axesList.push(n), l[a][e] = n, u[a]++ } } } E((this._axesMap = l).x, function(o, a) { E(l.y, function(t, e) { var i = "x" + a + "y" + e , n = new Rm(i); n.grid = this, n.model = r, this._coordsMap[i] = n, this._coordsList.push(n), n.addAxis(o), n.addAxis(t) }, this) }, this) } , Ym._updateScale = function(l, u) { function h(e, i) { E(e.mapDimension(i.dim, !0), function(t) { i.scale.unionExtentFromData(e, pp(e, t)) }) } E(this._axesList, function(t) { t.scale.setExtent(1 / 0, -1 / 0) }), l.eachSeries(function(t) { if (Jm(t)) { var e = $m(t, l) , i = e[0] , n = e[1]; if (!Um(i, u) || !Um(n, u)) return; var o = this.getCartesian(i.componentIndex, n.componentIndex) , a = t.getData() , r = o.getAxis("x") , s = o.getAxis("y"); "list" === a.type && (h(a, r, t), h(a, s, t)) } }, this) } , Ym.getTooltipAxes = function(n) { var o = [] , a = []; return E(this.getCartesians(), function(t) { var e = null != n && "auto" !== n ? t.getAxis(n) : t.getBaseAxis() , i = t.getOtherAxis(e); _(o, e) < 0 && o.push(e), _(a, i) < 0 && a.push(i) }), { baseAxes: o, otherAxes: a } } ; var Km = ["xAxis", "yAxis"]; function $m(e) { return O(Km, function(t) { return e.getReferringComponents(t)[0] }) } function Jm(t) { return "cartesian2d" === t.get("coordinateSystem") } Xm.create = function(n, o) { var a = []; return n.eachComponent("grid", function(t, e) { var i = new Xm(t,n,o); i.name = "grid_" + e, i.resize(t, o, !0), t.coordinateSystem = i, a.push(i) }), n.eachSeries(function(t) { if (Jm(t)) { var e = $m(t) , i = e[0] , n = e[1] , o = i.getCoordSysModel().coordinateSystem; t.coordinateSystem = o.getCartesian(i.componentIndex, n.componentIndex) } }), a } , Xm.dimensions = Xm.prototype.dimensions = Rm.prototype.dimensions, lh.register("cartesian2d", Xm); function Qm(t, e) { this.opt = e, this.axisModel = t, D(e, { labelOffset: 0, nameDirection: 1, tickDirection: 1, labelDirection: 1, silent: !0 }), this.group = new Ci; var i = new Ci({ position: e.position.slice(), rotation: e.rotation }); i.updateTransform(), this._transform = i.transform, this._dumbGroup = i } var tv = Math.PI; Qm.prototype = { constructor: Qm, hasBuilder: function(t) { return !!ev[t] }, add: function(t) { ev[t].call(this) }, getGroup: function() { return this.group } }; var ev = { axisLine: function() { var a = this.opt , t = this.axisModel; if (t.get("axisLine.show")) { var e = this.axisModel.axis.getExtent() , i = this._transform , r = [e[0], 0] , n = [e[1], 0]; i && (bt(r, r, i), bt(n, n, i)); var s = P({ lineCap: "round" }, t.getModel("axisLine.lineStyle").getLineStyle()); this.group.add(new ls({ anid: "line", subPixelOptimize: !0, shape: { x1: r[0], y1: r[1], x2: n[0], y2: n[1] }, style: s, strokeContainThreshold: a.strokeContainThreshold || 5, silent: !0, z2: 1 })); var l = t.get("axisLine.symbol") , o = t.get("axisLine.symbolSize") , u = t.get("axisLine.symbolOffset") || 0; if ("number" == typeof u && (u = [u, u]), null != l) { "string" == typeof l && (l = [l, l]), "string" != typeof o && "number" != typeof o || (o = [o, o]); var h = o[0] , c = o[1]; E([{ rotate: a.rotation + Math.PI / 2, offset: u[0], r: 0 }, { rotate: a.rotation - Math.PI / 2, offset: u[1], r: Math.sqrt((r[0] - n[0]) * (r[0] - n[0]) + (r[1] - n[1]) * (r[1] - n[1])) }], function(t, e) { if ("none" !== l[e] && null != l[e]) { var i = wg(l[e], -h / 2, -c / 2, h, c, s.stroke, !0) , n = t.r + t.offset , o = [r[0] + n * Math.cos(a.rotation), r[1] - n * Math.sin(a.rotation)]; i.attr({ rotation: t.rotate, position: o, silent: !0, z2: 11 }), this.group.add(i) } }, this) } } }, axisTickLabel: function() { var t = this.axisModel , e = this.opt , i = function(t, e, i) { var n = e.axis , o = e.getModel("axisTick"); if (!o.get("show") || n.scale.isBlank()) return; for (var a = o.getModel("lineStyle"), r = i.tickDirection * o.get("length"), s = lv(n.getTicksCoords(), t._transform, r, D(a.getLineStyle(), { stroke: e.get("axisLine.lineStyle.color") }), "ticks"), l = 0; l < s.length; l++) t.group.add(s[l]); return s }(this, t, e); !function(t, e, i) { if (cg(t.axis)) return; var n = t.get("axisLabel.showMinLabel") , o = t.get("axisLabel.showMaxLabel"); i = i || []; var a = (e = e || [])[0] , r = e[1] , s = e[e.length - 1] , l = e[e.length - 2] , u = i[0] , h = i[1] , c = i[i.length - 1] , d = i[i.length - 2]; !1 === n ? (av(a), av(u)) : rv(a, r) && (n ? (av(r), av(h)) : (av(a), av(u))); !1 === o ? (av(s), av(c)) : rv(l, s) && (o ? (av(l), av(d)) : (av(s), av(c))) }(t, function(u, h, c) { var d = h.axis; if (!W(c.axisLabelShow, h.get("axisLabel.show")) || d.scale.isBlank()) return; var f = h.getModel("axisLabel") , p = f.get("margin") , t = d.getViewLabels() , e = (W(c.labelRotate, f.get("rotate")) || 0) * tv / 180 , g = nv(c.rotation, e, c.labelDirection) , m = h.getCategories && h.getCategories(!0) , v = [] , y = ov(h) , x = h.get("triggerEvent"); return E(t, function(t, e) { var i = t.tickValue , n = t.formattedLabel , o = t.rawLabel , a = f; m && m[i] && m[i].textStyle && (a = new Cl(m[i].textStyle,f,h.ecModel)); var r = a.getTextColor() || h.get("axisLine.lineStyle.color") , s = [d.dataToCoord(i), c.labelOffset + c.labelDirection * p] , l = new Ur({ anid: "label_" + i, position: s, rotation: g.rotation, silent: y, z2: 10 }); nl(l.style, a, { text: n, textAlign: a.getShallow("align", !0) || g.textAlign, textVerticalAlign: a.getShallow("verticalAlign", !0) || a.getShallow("baseline", !0) || g.textVerticalAlign, textFill: "function" == typeof r ? r("category" === d.type ? o : "value" === d.type ? i + "" : i, e) : r }), x && (l.eventData = iv(h), l.eventData.targetType = "axisLabel", l.eventData.value = o), u._dumbGroup.add(l), l.updateTransform(), v.push(l), u.group.add(l), l.decomposeTransform() }), v }(this, t, e), i), function(t, e, i) { var n = e.axis , o = e.getModel("minorTick"); if (!o.get("show") || n.scale.isBlank()) return; var a = n.getMinorTicksCoords(); if (!a.length) return; for (var r = o.getModel("lineStyle"), s = i.tickDirection * o.get("length"), l = D(r.getLineStyle(), D(e.getModel("axisTick").getLineStyle(), { stroke: e.get("axisLine.lineStyle.color") })), u = 0; u < a.length; u++) for (var h = lv(a[u], t._transform, s, l, "minorticks_" + u), c = 0; c < h.length; c++) t.group.add(h[c]) }(this, t, e) }, axisName: function() { var t = this.opt , e = this.axisModel , i = W(t.axisName, e.get("name")); if (i) { var n, o, a = e.get("nameLocation"), r = t.nameDirection, s = e.getModel("nameTextStyle"), l = e.get("nameGap") || 0, u = this.axisModel.axis.getExtent(), h = u[0] > u[1] ? -1 : 1, c = ["start" === a ? u[0] - h * l : "end" === a ? u[1] + h * l : (u[0] + u[1]) / 2, sv(a) ? t.labelOffset + r * l : 0], d = e.get("nameRotate"); null != d && (d = d * tv / 180), sv(a) ? n = nv(t.rotation, null != d ? d : t.rotation, r) : (n = function(t, e, i, n) { var o, a, r = Zl(i - t.rotation), s = n[0] > n[1], l = "start" === e && !s || "start" !== e && s; o = Ul(r - tv / 2) ? (a = l ? "bottom" : "top", "center") : Ul(r - 1.5 * tv) ? (a = l ? "top" : "bottom", "center") : (a = "middle", r < 1.5 * tv && tv / 2 < r ? l ? "left" : "right" : l ? "right" : "left"); return { rotation: r, textAlign: o, textVerticalAlign: a } }(t, a, d || 0, u), null != (o = t.axisNameAvailableWidth) && (o = Math.abs(o / Math.sin(n.rotation)), isFinite(o) || (o = null))); var f = s.getFont() , p = e.get("nameTruncate", !0) || {} , g = p.ellipsis , m = W(t.nameTruncateMaxWidth, p.maxWidth, o) , v = null != g && null != m ? pu(i, m, f, g, { minChar: 2, placeholder: p.placeholder }) : i , y = e.get("tooltip", !0) , x = e.mainType , _ = { componentType: x, name: i, $vars: ["name"] }; _[x + "Index"] = e.componentIndex; var w = new Ur({ anid: "name", __fullText: i, __truncatedText: v, position: c, rotation: n.rotation, silent: ov(e), z2: 1, tooltip: y && y.show ? P({ content: i, formatter: function() { return i }, formatterParams: _ }, y) : null }); nl(w.style, s, { text: v, textFont: f, textFill: s.getTextColor() || e.get("axisLine.lineStyle.color"), textAlign: s.get("align") || n.textAlign, textVerticalAlign: s.get("verticalAlign") || n.textVerticalAlign }), e.get("triggerEvent") && (w.eventData = iv(e), w.eventData.targetType = "axisName", w.eventData.name = i), this._dumbGroup.add(w), w.updateTransform(), this.group.add(w), w.decomposeTransform() } } } , iv = Qm.makeAxisEventDataBase = function(t) { var e = { componentType: t.mainType, componentIndex: t.componentIndex }; return e[t.mainType + "Index"] = t.componentIndex, e } , nv = Qm.innerTextLayout = function(t, e, i) { var n, o = Zl(e - t); return { rotation: o, textAlign: Ul(o) ? (n = 0 < i ? "top" : "bottom", "center") : Ul(o - tv) ? (n = 0 < i ? "bottom" : "top", "center") : (n = "middle", 0 < o && o < tv ? 0 < i ? "right" : "left" : 0 < i ? "left" : "right"), textVerticalAlign: n } } ; var ov = Qm.isLabelSilent = function(t) { var e = t.get("tooltip"); return t.get("silent") || !(t.get("triggerEvent") || e && e.show) } ; function av(t) { t && (t.ignore = !0) } function rv(t, e) { var i = t && t.getBoundingRect().clone() , n = e && e.getBoundingRect().clone(); if (i && n) { var o = re([]); return he(o, o, -t.rotation), i.applyTransform(le([], o, t.getLocalTransform())), n.applyTransform(le([], o, e.getLocalTransform())), i.intersect(n) } } function sv(t) { return "middle" === t || "center" === t } function lv(t, e, i, n, o) { for (var a = [], r = [], s = [], l = 0; l < t.length; l++) { var u = t[l].coord; r[0] = u, s[r[1] = 0] = u, s[1] = i, e && (bt(r, r, e), bt(s, s, e)); var h = new ls({ anid: o + "_" + t[l].tickValue, subPixelOptimize: !0, shape: { x1: r[0], y1: r[1], x2: s[0], y2: s[1] }, style: n, z2: 2, silent: !0 }); a.push(h) } return a } var uv = E , hv = T; function cv(t, e) { var i = { axesInfo: {}, seriesInvolved: !1, coordSysAxesInfo: {}, coordSysMap: {} }; return function(p, g, t) { var a = g.getComponent("tooltip") , m = g.getComponent("axisPointer") , v = m.get("link", !0) || [] , y = []; uv(t.getCoordinateSystems(), function(c) { if (c.axisPointerEnabled) { var t = gv(c.model) , d = p.coordSysAxesInfo[t] = {} , f = (p.coordSysMap[t] = c).model.getModel("tooltip", a); if (uv(c.getAxes(), hv(o, !1, null)), c.getTooltipAxes && a && f.get("show")) { var e = "axis" === f.get("trigger") , i = "cross" === f.get("axisPointer.type") , n = c.getTooltipAxes(f.get("axisPointer.axis")); (e || i) && uv(n.baseAxes, hv(o, !i || "cross", e)), i && uv(n.otherAxes, hv(o, "cross", !1)) } } function o(t, e, i) { var n = i.model.getModel("axisPointer", m) , o = n.get("show"); if (o && ("auto" !== o || t || pv(n))) { null == e && (e = n.get("triggerTooltip")); var a = (n = t ? function(t, e, i, n, o, a) { var r = e.getModel("axisPointer") , s = {}; uv(["type", "snap", "lineStyle", "shadowStyle", "label", "animation", "animationDurationUpdate", "animationEasingUpdate", "z"], function(t) { s[t] = k(r.get(t)) }), s.snap = "category" !== t.type && !!a, "cross" === r.get("type") && (s.type = "line"); var l = s.label || (s.label = {}); if (null == l.show && (l.show = !1), "cross" === o) { var u = r.get("label.show"); if (l.show = null == u || u, !a) { var h = s.lineStyle = r.get("crossStyle"); h && D(l, h.textStyle) } } return t.model.getModel("axisPointer", new Cl(s,i,n)) }(i, f, m, g, t, e) : n).get("snap") , r = gv(i.model) , s = e || a || "category" === i.type , l = p.axesInfo[r] = { key: r, axis: i, coordSys: c, axisPointerModel: n, triggerTooltip: e, involveSeries: s, snap: a, useHandle: pv(n), seriesModels: [] }; d[r] = l, p.seriesInvolved |= s; var u = function(t, e) { for (var i = e.model, n = e.dim, o = 0; o < t.length; o++) { var a = t[o] || {}; if (dv(a[n + "AxisId"], i.id) || dv(a[n + "AxisIndex"], i.componentIndex) || dv(a[n + "AxisName"], i.name)) return o } }(v, i); if (null != u) { var h = y[u] || (y[u] = { axesInfo: {} }); h.axesInfo[r] = l, h.mapper = v[u].mapper, l.linkGroup = h } } } }) }(i, t, e), i.seriesInvolved && function(o, t) { t.eachSeries(function(i) { var n = i.coordinateSystem , t = i.get("tooltip.trigger", !0) , e = i.get("tooltip.show", !0); n && "none" !== t && !1 !== t && "item" !== t && !1 !== e && !1 !== i.get("axisPointer.show", !0) && uv(o.coordSysAxesInfo[gv(n.model)], function(t) { var e = t.axis; n.getAxis(e.dim) === e && (t.seriesModels.push(i), null == t.seriesDataCount && (t.seriesDataCount = 0), t.seriesDataCount += i.getData().count()) }) }, this) }(i, t), i } function dv(t, e) { return "all" === t || L(t) && 0 <= _(t, e) || t === e } function fv(t) { var e = (t.ecModel.getComponent("axisPointer") || {}).coordSysAxesInfo; return e && e.axesInfo[gv(t)] } function pv(t) { return !!t.get("handle.show") } function gv(t) { return t.type + "||" + t.id } var mv = Af({ type: "axis", _axisPointer: null, axisPointerClass: null, render: function(t, e, i, n) { this.axisPointerClass && function(t) { var e = fv(t); if (e) { var i = e.axisPointerModel , n = e.axis.scale , o = i.option , a = i.get("status") , r = i.get("value"); null != r && (r = n.parse(r)); var s = pv(i); null == a && (o.status = s ? "show" : "hide"); var l = n.getExtent().slice(); l[0] > l[1] && l.reverse(), (null == r || r > l[1]) && (r = l[1]), r < l[0] && (r = l[0]), o.value = r, s && (o.status = e.axis.scale.isBlank() ? "hide" : "show") } }(t), mv.superApply(this, "render", arguments), vv(this, t, e, i, n, !0) }, updateAxisPointer: function(t, e, i, n, o) { vv(this, t, e, i, n, !1) }, remove: function(t, e) { var i = this._axisPointer; i && i.remove(e), mv.superApply(this, "remove", arguments) }, dispose: function(t, e) { yv(this, e), mv.superApply(this, "dispose", arguments) } }); function vv(t, e, i, n, o, a) { var r = mv.getAxisPointerClass(t.axisPointerClass); if (r) { var s = function(t) { var e = fv(t); return e && e.axisPointerModel }(e); s ? (t._axisPointer || (t._axisPointer = new r)).render(e, s, n, a) : yv(t, n) } } function yv(t, e, i) { var n = t._axisPointer; n && n.dispose(e, i), t._axisPointer = null } var xv = []; function _v(t, e, i) { i = i || {}; var n = t.coordinateSystem , o = e.axis , a = {} , r = o.getAxesOnZeroOf()[0] , s = o.position , l = r ? "onZero" : s , u = o.dim , h = n.getRect() , c = [h.x, h.x + h.width, h.y, h.y + h.height] , d = { left: 0, right: 1, top: 0, bottom: 1, onZero: 2 } , f = e.get("offset") || 0 , p = "x" === u ? [c[2] - f, c[3] + f] : [c[0] - f, c[1] + f]; if (r) { var g = r.toGlobalCoord(r.dataToCoord(0)); p[d.onZero] = Math.max(Math.min(g, p[1]), p[0]) } a.position = ["y" === u ? p[d[l]] : c[0], "x" === u ? p[d[l]] : c[3]], a.rotation = Math.PI / 2 * ("x" === u ? 0 : 1); a.labelDirection = a.tickDirection = a.nameDirection = { top: -1, bottom: 1, left: -1, right: 1 }[s], a.labelOffset = r ? p[d[s]] - p[d.onZero] : 0, e.get("axisTick.inside") && (a.tickDirection = -a.tickDirection), W(i.labelInside, e.get("axisLabel.inside")) && (a.labelDirection = -a.labelDirection); var m = e.get("axisLabel.rotate"); return a.labelRotate = "top" === l ? -m : m, a.z2 = 1, a } function wv(t, e, i, n) { var o = i.axis; if (!o.scale.isBlank()) { var a = i.getModel("splitArea") , r = a.getModel("areaStyle") , s = r.get("color") , l = n.coordinateSystem.getRect() , u = o.getTicksCoords({ tickModel: a, clamp: !0 }); if (u.length) { var h = s.length , c = t.__splitAreaColors , d = Q() , f = 0; if (c) for (var p = 0; p < u.length; p++) { var g = c.get(u[p].tickValue); if (null != g) { f = (g + (h - 1) * p) % h; break } } var m = o.toGlobalCoord(u[0].coord) , v = r.getAreaStyle(); s = L(s) ? s : [s]; for (p = 1; p < u.length; p++) { var y, x, _, w, b = o.toGlobalCoord(u[p].coord); m = o.isHorizontal() ? (y = m, x = l.y, _ = b - y, w = l.height, y + _) : (y = l.x, x = m, _ = l.width, x + (w = b - x)); var S = u[p - 1].tickValue; null != S && d.set(S, f), e.add(new rs({ anid: null != S ? "area_" + S : null, shape: { x: y, y: x, width: _, height: w }, style: D({ fill: s[f] }, v), silent: !0 })), f = (f + 1) % h } t.__splitAreaColors = d } } } function bv(t) { t.__splitAreaColors = null } mv.registerAxisPointerClass = function(t, e) { xv[t] = e } , mv.getAxisPointerClass = function(t) { return t && xv[t] } ; var Sv = ["axisLine", "axisTickLabel", "axisName"] , Mv = ["splitArea", "splitLine", "minorSplitLine"] , Iv = mv.extend({ type: "cartesianAxis", axisPointerClass: "CartesianAxisPointer", render: function(e, t, i, n) { this.group.removeAll(); var o = this._axisGroup; if (this._axisGroup = new Ci, this.group.add(this._axisGroup), e.get("show")) { var a = e.getCoordSysModel() , r = _v(a, e) , s = new Qm(e,r); E(Sv, s.add, s), this._axisGroup.add(s.getGroup()), E(Mv, function(t) { e.get(t + ".show") && this["_" + t](e, a) }, this), ml(o, this._axisGroup, e), Iv.superCall(this, "render", e, t, i, n) } }, remove: function() { bv(this) }, _splitLine: function(t, e) { var i = t.axis; if (!i.scale.isBlank()) { var n = t.getModel("splitLine") , o = n.getModel("lineStyle") , a = o.get("color"); a = L(a) ? a : [a]; for (var r = e.coordinateSystem.getRect(), s = i.isHorizontal(), l = 0, u = i.getTicksCoords({ tickModel: n }), h = [], c = [], d = o.getLineStyle(), f = 0; f < u.length; f++) { var p = i.toGlobalCoord(u[f].coord); s ? (h[0] = p, h[1] = r.y, c[0] = p, c[1] = r.y + r.height) : (h[0] = r.x, h[1] = p, c[0] = r.x + r.width, c[1] = p); var g = l++ % a.length , m = u[f].tickValue; this._axisGroup.add(new ls({ anid: null != m ? "line_" + u[f].tickValue : null, subPixelOptimize: !0, shape: { x1: h[0], y1: h[1], x2: c[0], y2: c[1] }, style: D({ stroke: a[g] }, d), silent: !0 })) } } }, _minorSplitLine: function(t, e) { var i = t.axis , n = t.getModel("minorSplitLine").getModel("lineStyle") , o = e.coordinateSystem.getRect() , a = i.isHorizontal() , r = i.getMinorTicksCoords(); if (r.length) for (var s = [], l = [], u = n.getLineStyle(), h = 0; h < r.length; h++) for (var c = 0; c < r[h].length; c++) { var d = i.toGlobalCoord(r[h][c].coord); a ? (s[0] = d, s[1] = o.y, l[0] = d, l[1] = o.y + o.height) : (s[0] = o.x, s[1] = d, l[0] = o.x + o.width, l[1] = d), this._axisGroup.add(new ls({ anid: "minor_line_" + r[h][c].tickValue, subPixelOptimize: !0, shape: { x1: s[0], y1: s[1], x2: l[0], y2: l[1] }, style: u, silent: !0 })) } }, _splitArea: function(t, e) { wv(this, this._axisGroup, t, e) } }); Iv.extend({ type: "xAxis" }), Iv.extend({ type: "yAxis" }), Af({ type: "grid", render: function(t, e) { this.group.removeAll(), t.get("show") && this.group.add(new rs({ shape: t.coordinateSystem.getRect(), style: D({ fill: t.get("backgroundColor") }, t.getItemStyle()), silent: !0, z2: -1 })) } }), yf(function(t) { t.xAxis && t.yAxis && !t.grid && (t.grid = {}) }), Sf(Lm("line", "circle", "line")), bf(km("line")), xf(Ld.PROCESSOR.STATISTIC, { seriesType: "line", modifyOutputEnd: !0, reset: function(t, e, i) { var n = t.getData() , o = t.get("sampling") , a = t.coordinateSystem; if ("cartesian2d" === a.type && o) { var r, s = a.getBaseAxis(), l = a.getOtherAxis(s), u = s.getExtent(), h = u[1] - u[0], c = Math.round(n.count() / h); 1 < c && ("string" == typeof o ? r = Nm[o] : "function" == typeof o && (r = o), r && t.setData(n.downSample(n.mapDimension(l.dim), 1 / c, r, Pm))) } } }); var Tv = sc.extend({ type: "series.__base_bar__", getInitialData: function(t, e) { return gp(this.getSource(), this, { useEncodeDefaulter: !0 }) }, getMarkerPosition: function(t) { var e = this.coordinateSystem; if (e) { var i = e.dataToPoint(e.clampData(t)) , n = this.getData() , o = n.getLayout("offset") , a = n.getLayout("size"); return i[e.getBaseAxis().isHorizontal() ? 0 : 1] += o + a / 2, i } return [NaN, NaN] }, defaultOption: { zlevel: 0, z: 2, coordinateSystem: "cartesian2d", legendHoverLink: !0, barMinHeight: 0, barMinAngle: 0, large: !1, largeThreshold: 400, progressive: 3e3, progressiveChunkMode: "mod", itemStyle: {}, emphasis: {} } }); function Av(t, e, i, n, o, a) { el(t, e, i.getModel("label"), i.getModel("emphasis.label"), { labelFetcher: o, labelDataIndex: a, defaultText: Ug(o.getData(), a), isRectText: !0, autoColor: n }), Dv(t), Dv(e) } function Dv(t, e) { "outside" === t.textPosition && (t.textPosition = e) } Tv.extend({ type: "series.bar", dependencies: ["grid", "polar"], brushSelector: "rect", getProgressive: function() { return !!this.get("large") && this.get("progressive") }, getProgressiveThreshold: function() { var t = this.get("progressiveThreshold") , e = this.get("largeThreshold"); return t < e && (t = e), t }, defaultOption: { clip: !0, roundCap: !1, showBackground: !1, backgroundStyle: { color: "rgba(180, 180, 180, 0.2)", borderColor: null, borderWidth: 0, borderType: "solid", borderRadius: 0, shadowBlur: 0, shadowColor: null, shadowOffsetX: 0, shadowOffsetY: 0, opacity: 1 } } }); var Cv = ha([["fill", "color"], ["stroke", "borderColor"], ["lineWidth", "borderWidth"], ["stroke", "barBorderColor"], ["lineWidth", "barBorderWidth"], ["opacity"], ["shadowBlur"], ["shadowOffsetX"], ["shadowOffsetY"], ["shadowColor"]]) , Lv = { getBarItemStyle: function(t) { var e = Cv(this, t); if (this.getBorderLineDash) { var i = this.getBorderLineDash(); i && (e.lineDash = i) } return e } } , kv = Cs({ type: "sausage", shape: { cx: 0, cy: 0, r0: 0, r: 0, startAngle: 0, endAngle: 2 * Math.PI, clockwise: !0 }, buildPath: function(t, e) { var i = e.cx , n = e.cy , o = Math.max(e.r0 || 0, 0) , a = Math.max(e.r, 0) , r = .5 * (a - o) , s = o + r , l = e.startAngle , u = e.endAngle , h = e.clockwise , c = Math.cos(l) , d = Math.sin(l) , f = Math.cos(u) , p = Math.sin(u); (h ? u - l < 2 * Math.PI : l - u < 2 * Math.PI) && (t.moveTo(c * o + i, d * o + n), t.arc(c * s + i, d * s + n, r, -Math.PI + l, l, !h)), t.arc(i, n, a, l, u, !h), t.moveTo(f * a + i, p * a + n), t.arc(f * s + i, p * s + n, r, u - 2 * Math.PI, u - Math.PI, !h), 0 !== o && (t.arc(i, n, o, u, l, h), t.moveTo(c * o + i, p * o + n)), t.closePath() } }) , Pv = ["itemStyle", "barBorderWidth"] , Nv = [0, 0]; P(Cl.prototype, Lv), Cf({ type: "bar", render: function(t, e, i) { this._updateDrawMode(t); var n = t.get("coordinateSystem"); return "cartesian2d" !== n && "polar" !== n || (this._isLargeDraw ? this._renderLarge(t, e, i) : this._renderNormal(t, e, i)), this.group }, incrementalPrepareRender: function(t, e, i) { this._clear(), this._updateDrawMode(t) }, incrementalRender: function(t, e, i, n) { this._incrementalRenderLarge(t, e) }, _updateDrawMode: function(t) { var e = t.pipelineContext.large; (null == this._isLargeDraw || e ^ this._isLargeDraw) && (this._isLargeDraw = e, this._clear()) }, _renderNormal: function(s, t, e) { var l, u = this.group, h = s.getData(), c = this._data, d = s.coordinateSystem, i = d.getBaseAxis(); "cartesian2d" === d.type ? l = i.isHorizontal() : "polar" === d.type && (l = "angle" === i.dim); var f = s.isAnimationEnabled() ? s : null , p = s.get("clip", !0) , g = function(t, e) { var i = t.getArea && t.getArea(); if ("cartesian2d" === t.type) { var n = t.getBaseAxis(); if ("category" !== n.type || !n.onBand) { var o = e.getLayout("bandWidth"); n.isHorizontal() ? (i.x -= o, i.width += 2 * o) : (i.y -= o, i.height += 2 * o) } } return i }(d, h); u.removeClipPath(); var m = s.get("roundCap", !0) , v = s.get("showBackground", !0) , y = s.getModel("backgroundStyle") , x = y.get("barBorderRadius") || 0 , _ = [] , w = this._backgroundEls || []; h.diff(c).add(function(t) { var e = h.getItemModel(t) , i = Gv[d.type](h, t, e); if (v) { var n = Gv[d.type](h, t) , o = function(t, e, i) { return new ("polar" === t.type ? qr : rs)({ shape: Xv(e, i, t), silent: !0, z2: 0 }) }(d, l, n); o.useStyle(y.getBarItemStyle()), "cartesian2d" === d.type && o.setShape("r", x), _[t] = o } if (h.hasValue(t)) { if (p) if (Rv[d.type](g, i)) return void u.remove(a); var a = zv[d.type](t, i, l, f, !1, m); h.setItemGraphicEl(t, a), u.add(a), Wv(a, h, t, e, i, s, l, "polar" === d.type) } }).update(function(t, e) { var i = h.getItemModel(t) , n = Gv[d.type](h, t, i); if (v) { var o = w[e]; o.useStyle(y.getBarItemStyle()), "cartesian2d" === d.type && o.setShape("r", x), _[t] = o; var a = Gv[d.type](h, t); cl(o, { shape: Xv(l, a, d) }, f, t) } var r = c.getItemGraphicEl(e); if (h.hasValue(t)) { if (p) if (Rv[d.type](g, n)) return void u.remove(r); r ? cl(r, { shape: n }, f, t) : r = zv[d.type](t, n, l, f, !0, m), h.setItemGraphicEl(t, r), u.add(r), Wv(r, h, t, i, n, s, l, "polar" === d.type) } else u.remove(r) }).remove(function(t) { var e = c.getItemGraphicEl(t); "cartesian2d" === d.type ? e && Bv(t, f, e) : e && Vv(t, f, e) }).execute(); var n = this._backgroundGroup || (this._backgroundGroup = new Ci); n.removeAll(); for (var o = 0; o < _.length; ++o) n.add(_[o]); u.add(n), this._backgroundEls = _, this._data = h }, _renderLarge: function(t, e, i) { this._clear(), Zv(t, this.group); var n = t.get("clip", !0) ? Sm(t.coordinateSystem, !1, t) : null; n ? this.group.setClipPath(n) : this.group.removeClipPath() }, _incrementalRenderLarge: function(t, e) { this._removeBackground(), Zv(e, this.group, !0) }, dispose: et, remove: function(t) { this._clear(t) }, _clear: function(e) { var t = this.group , i = this._data; e && e.get("animation") && i && !this._isLargeDraw ? (this._removeBackground(), this._backgroundEls = [], i.eachItemGraphicEl(function(t) { "sector" === t.type ? Vv(t.dataIndex, e, t) : Bv(t.dataIndex, e, t) })) : t.removeAll(), this._data = null }, _removeBackground: function() { this.group.remove(this._backgroundGroup), this._backgroundGroup = null } }); var Ov = Math.max , Ev = Math.min , Rv = { cartesian2d: function(t, e) { var i = e.width < 0 ? -1 : 1 , n = e.height < 0 ? -1 : 1; i < 0 && (e.x += e.width, e.width = -e.width), n < 0 && (e.y += e.height, e.height = -e.height); var o = Ov(e.x, t.x) , a = Ev(e.x + e.width, t.x + t.width) , r = Ov(e.y, t.y) , s = Ev(e.y + e.height, t.y + t.height); e.x = o, e.y = r, e.width = a - o, e.height = s - r; var l = e.width < 0 || e.height < 0; return i < 0 && (e.x += e.width, e.width = -e.width), n < 0 && (e.y += e.height, e.height = -e.height), l }, polar: function(t) { return !1 } } , zv = { cartesian2d: function(t, e, i, n, o) { var a = new rs({ shape: P({}, e), z2: 1 }); if (a.name = "item", n) { var r = i ? "height" : "width" , s = {}; a.shape[r] = 0, s[r] = e[r], bl[o ? "updateProps" : "initProps"](a, { shape: s }, n, t) } return a }, polar: function(t, e, i, n, o, a) { var r = e.startAngle < e.endAngle , s = new (!i && a ? kv : qr)({ shape: D({ clockwise: r }, e), z2: 1 }); if (s.name = "item", n) { var l = i ? "r" : "endAngle" , u = {}; s.shape[l] = i ? 0 : e.startAngle, u[l] = e[l], bl[o ? "updateProps" : "initProps"](s, { shape: u }, n, t) } return s } }; function Bv(t, e, i) { i.style.text = null, cl(i, { shape: { width: 0 } }, e, t, function() { i.parent && i.parent.remove(i) }) } function Vv(t, e, i) { i.style.text = null, cl(i, { shape: { r: i.shape.r0 } }, e, t, function() { i.parent && i.parent.remove(i) }) } var Gv = { cartesian2d: function(t, e, i) { var n = t.getItemLayout(e) , o = i ? function(t, e) { var i = t.get(Pv) || 0 , n = isNaN(e.width) ? Number.MAX_VALUE : Math.abs(e.width) , o = isNaN(e.height) ? Number.MAX_VALUE : Math.abs(e.height); return Math.min(i, n, o) }(i, n) : 0 , a = 0 < n.width ? 1 : -1 , r = 0 < n.height ? 1 : -1; return { x: n.x + a * o / 2, y: n.y + r * o / 2, width: n.width - a * o, height: n.height - r * o } }, polar: function(t, e, i) { var n = t.getItemLayout(e); return { cx: n.cx, cy: n.cy, r0: n.r0, r: n.r, startAngle: n.startAngle, endAngle: n.endAngle } } }; function Fv(t) { return null != t.startAngle && null != t.endAngle && t.startAngle === t.endAngle } function Wv(t, e, i, n, o, a, r, s) { var l = e.getItemVisual(i, "color") , u = e.getItemVisual(i, "opacity") , h = e.getVisual("borderColor") , c = n.getModel("itemStyle") , d = n.getModel("emphasis.itemStyle").getBarItemStyle(); s || t.setShape("r", c.get("barBorderRadius") || 0), t.useStyle(D({ stroke: Fv(o) ? "none" : h, fill: Fv(o) ? "none" : l, opacity: u }, c.getBarItemStyle())); var f = n.getShallow("cursor"); f && t.attr("cursor", f); r ? o.height : o.width; s || Av(t.style, d, n, l, a, i), Fv(o) && (d.fill = d.stroke = "none"), $s(t, d) } var Hv = Ar.extend({ type: "largeBar", shape: { points: [] }, buildPath: function(t, e) { for (var i = e.points, n = this.__startPoint, o = this.__baseDimIdx, a = 0; a < i.length; a += 2) n[o] = i[a + o], t.moveTo(n[0], n[1]), t.lineTo(i[a], i[a + 1]) } }); function Zv(t, e, i) { var n = t.getData() , o = [] , a = n.getLayout("valueAxisHorizontal") ? 1 : 0; o[1 - a] = n.getLayout("valueAxisStart"); var r = n.getLayout("largeDataIndices") , s = n.getLayout("barWidth") , l = t.getModel("backgroundStyle"); if (t.get("showBackground", !0)) { var u = n.getLayout("largeBackgroundPoints") , h = []; h[1 - a] = n.getLayout("backgroundStart"); var c = new Hv({ shape: { points: u }, incremental: !!i, __startPoint: h, __baseDimIdx: a, __largeDataIndices: r, __barWidth: s, silent: !0, z2: 0 }); !function(t, e, i) { var n = e.get("borderColor") || e.get("color") , o = e.getItemStyle(["color", "borderColor"]); t.useStyle(o), t.style.fill = null, t.style.stroke = n, t.style.lineWidth = i.getLayout("barWidth") }(c, l, n), e.add(c) } var d = new Hv({ shape: { points: n.getLayout("largePoints") }, incremental: !!i, __startPoint: o, __baseDimIdx: a, __largeDataIndices: r, __barWidth: s }); e.add(d), function(t, e, i) { var n = i.getVisual("borderColor") || i.getVisual("color") , o = e.getModel("itemStyle").getItemStyle(["color", "borderColor"]); t.useStyle(o), t.style.fill = null, t.style.stroke = n, t.style.lineWidth = i.getLayout("barWidth") }(d, t, n), d.seriesIndex = t.seriesIndex, t.get("silent") || (d.on("mousedown", Uv), d.on("mousemove", Uv)) } var Uv = Lc(function(t) { var e = function(t, e, i) { var n = t.__baseDimIdx , o = 1 - n , a = t.shape.points , r = t.__largeDataIndices , s = Math.abs(t.__barWidth / 2) , l = t.__startPoint[o]; Nv[0] = e, Nv[1] = i; for (var u = Nv[n], h = Nv[1 - n], c = u - s, d = u + s, f = 0, p = a.length / 2; f < p; f++) { var g = 2 * f , m = a[g + n] , v = a[g + o]; if (c <= m && m <= d && (l <= v ? l <= h && h <= v : v <= h && h <= l)) return r[f] } return -1 }(this, t.offsetX, t.offsetY); this.dataIndex = 0 <= e ? e : null }, 30, !1); function Xv(t, e, i) { var n, o = "polar" === i.type; return n = o ? i.getArea() : i.grid.getRect(), o ? { cx: n.cx, cy: n.cy, r0: t ? n.r0 : e.r0, r: t ? n.r : e.r, startAngle: t ? e.startAngle : 0, endAngle: t ? e.endAngle : 2 * Math.PI } : { x: t ? e.x : n.x, y: t ? n.y : e.y, width: t ? e.width : n.width, height: t ? n.height : e.height } } bf(Ld.VISUAL.LAYOUT, T(zp, "bar")), bf(Ld.VISUAL.PROGRESSIVE_LAYOUT, Bp), Sf({ seriesType: "bar", reset: function(t) { t.getData().setVisual("legendSymbol", "roundRect") } }); function Yv(t, e, i) { e = L(e) && { coordDimensions: e } || P({}, e); var n = t.getSource() , o = lp(n, e) , a = new Yf(o,t); return a.initData(n, i), a } var jv = { updateSelectedMap: function(t) { this._targetList = L(t) ? t.slice() : [], this._selectTargetMap = S(t || [], function(t, e) { return t.set(e.name, e), t }, Q()) }, select: function(t, e) { var i = null != e ? this._targetList[e] : this._selectTargetMap.get(t); "single" === this.get("selectedMode") && this._selectTargetMap.each(function(t) { t.selected = !1 }), i && (i.selected = !0) }, unSelect: function(t, e) { var i = null != e ? this._targetList[e] : this._selectTargetMap.get(t); i && (i.selected = !1) }, toggleSelected: function(t, e) { var i = null != e ? this._targetList[e] : this._selectTargetMap.get(t); if (null != i) return this[i.selected ? "unSelect" : "select"](t, e), i.selected }, isSelected: function(t, e) { var i = null != e ? this._targetList[e] : this._selectTargetMap.get(t); return i && i.selected } }; function qv(i, e) { this.getAllNames = function() { var t = e(); return t.mapArray(t.getName) } , this.containName = function(t) { return 0 <= e().indexOfName(t) } , this.indexOfName = function(t) { return i().indexOfName(t) } , this.getItemVisual = function(t, e) { return i().getItemVisual(t, e) } } var Kv = Df({ type: "series.pie", init: function(t) { Kv.superApply(this, "init", arguments), this.legendVisualProvider = new qv(A(this.getData, this),A(this.getRawData, this)), this.updateSelectedMap(this._createSelectableList()), this._defaultLabelLine(t) }, mergeOption: function(t) { Kv.superCall(this, "mergeOption", t), this.updateSelectedMap(this._createSelectableList()) }, getInitialData: function(t, e) { return Yv(this, { coordDimensions: ["value"], encodeDefaulter: T(Ju, this) }) }, _createSelectableList: function() { for (var t = this.getRawData(), e = t.mapDimension("value"), i = [], n = 0, o = t.count(); n < o; n++) i.push({ name: t.getName(n), value: t.get(e, n), selected: Zh(t, n, "selected") }); return i }, getDataParams: function(t) { var e = this.getData() , i = Kv.superCall(this, "getDataParams", t) , n = []; return e.each(e.mapDimension("value"), function(t) { n.push(t) }), i.percent = Wl(n, t, e.hostModel.get("percentPrecision")), i.$vars.push("percent"), i }, _defaultLabelLine: function(t) { Go(t, "labelLine", ["show"]); var e = t.labelLine , i = t.emphasis.labelLine; e.show = e.show && t.label.show, i.show = i.show && t.emphasis.label.show }, defaultOption: { zlevel: 0, z: 2, legendHoverLink: !0, hoverAnimation: !0, center: ["50%", "50%"], radius: [0, "75%"], clockwise: !0, startAngle: 90, minAngle: 0, minShowLabelAngle: 0, selectedOffset: 10, hoverOffset: 10, avoidLabelOverlap: !0, percentPrecision: 2, stillShowZeroSum: !0, left: 0, top: 0, right: 0, bottom: 0, width: null, height: null, label: { rotate: !1, show: !0, position: "outer", alignTo: "none", margin: "25%", bleedMargin: 10, distanceToLabelLine: 5 }, labelLine: { show: !0, length: 15, length2: 15, smooth: !1, lineStyle: { width: 1, type: "solid" } }, itemStyle: { borderWidth: 1 }, animationType: "expansion", animationTypeUpdate: "transition", animationEasing: "cubicOut" } }); function $v(t, e, i, n) { var o = e.getData() , a = this.dataIndex , r = o.getName(a) , s = e.get("selectedOffset"); n.dispatchAction({ type: "pieToggleSelect", from: t, name: r, seriesId: e.id }), o.each(function(t) { Jv(o.getItemGraphicEl(t), o.getItemLayout(t), e.isSelected(o.getName(t)), s, i) }) } function Jv(t, e, i, n, o) { var a = (e.startAngle + e.endAngle) / 2 , r = i ? n : 0 , s = [Math.cos(a) * r, Math.sin(a) * r]; o ? t.animate().when(200, { position: s }).start("bounceOut") : t.attr("position", s) } function Qv(t, e) { Ci.call(this); var i = new qr({ z2: 2 }) , n = new ts , o = new Ur; this.add(i), this.add(n), this.add(o), this.updateData(t, e, !0) } b(Kv, jv); var ty = Qv.prototype; ty.updateData = function(t, e, i) { var n = this.childAt(0) , o = this.childAt(1) , a = this.childAt(2) , r = t.hostModel , s = t.getItemModel(e) , l = t.getItemLayout(e) , u = P({}, l); u.label = null; var h = r.getShallow("animationTypeUpdate"); i ? (n.setShape(u), "scale" === r.getShallow("animationType") ? (n.shape.r = l.r0, dl(n, { shape: { r: l.r } }, r, e)) : (n.shape.endAngle = l.startAngle, cl(n, { shape: { endAngle: l.endAngle } }, r, e))) : "expansion" === h ? n.setShape(u) : cl(n, { shape: u }, r, e); var c = t.getItemVisual(e, "color"); n.useStyle(D({ lineJoin: "bevel", fill: c }, s.getModel("itemStyle").getItemStyle())), n.hoverStyle = s.getModel("emphasis.itemStyle").getItemStyle(); var d = s.getShallow("cursor"); d && n.attr("cursor", d), Jv(this, t.getItemLayout(e), r.isSelected(t.getName(e)), r.get("selectedOffset"), r.get("animation")); var f = !i && "transition" === h; this._updateLabel(t, e, f), this.highDownOnUpdate = r.get("silent") ? null : function(t, e) { var i = r.isAnimationEnabled() && s.get("hoverAnimation"); "emphasis" === e ? (o.ignore = o.hoverIgnore, a.ignore = a.hoverIgnore, i && (n.stopAnimation(!0), n.animateTo({ shape: { r: l.r + r.get("hoverOffset") } }, 300, "elasticOut"))) : (o.ignore = o.normalIgnore, a.ignore = a.normalIgnore, i && (n.stopAnimation(!0), n.animateTo({ shape: { r: l.r } }, 300, "elasticOut"))) } , $s(this) } , ty._updateLabel = function(t, e, i) { var n = this.childAt(1) , o = this.childAt(2) , a = t.hostModel , r = t.getItemModel(e) , s = t.getItemLayout(e).label , l = t.getItemVisual(e, "color"); if (!s || isNaN(s.x) || isNaN(s.y)) o.ignore = o.normalIgnore = o.hoverIgnore = n.ignore = n.normalIgnore = n.hoverIgnore = !0; else { var u = { points: s.linePoints || [[s.x, s.y], [s.x, s.y], [s.x, s.y]] } , h = { x: s.x, y: s.y }; i ? (cl(n, { shape: u }, a, e), cl(o, { style: h }, a, e)) : (n.attr({ shape: u }), o.attr({ style: h })), o.attr({ rotation: s.rotation, origin: [s.x, s.y], z2: 10 }); var c = r.getModel("label") , d = r.getModel("emphasis.label") , f = r.getModel("labelLine") , p = r.getModel("emphasis.labelLine"); l = t.getItemVisual(e, "color"); el(o.style, o.hoverStyle = {}, c, d, { labelFetcher: t.hostModel, labelDataIndex: e, defaultText: s.text, autoColor: l, useInsideStyle: !!s.inside }, { textAlign: s.textAlign, textVerticalAlign: s.verticalAlign, opacity: t.getItemVisual(e, "opacity") }), o.ignore = o.normalIgnore = !c.get("show"), o.hoverIgnore = !d.get("show"), n.ignore = n.normalIgnore = !f.get("show"), n.hoverIgnore = !p.get("show"), n.setStyle({ stroke: l, opacity: t.getItemVisual(e, "opacity") }), n.setStyle(f.getModel("lineStyle").getLineStyle()), n.hoverStyle = p.getModel("lineStyle").getLineStyle(); var g = f.get("smooth"); g && !0 === g && (g = .4), n.setShape({ smooth: g }) } } , w(Qv, Ci); function ey(i, t) { E(t, function(a) { a.update = "updateView", _f(a, function(t, e) { var o = {}; return e.eachComponent({ mainType: "series", subType: i, query: t }, function(i) { i[a.method] && i[a.method](t.name, t.dataIndex); var n = i.getData(); n.each(function(t) { var e = n.getName(t); o[e] = i.isSelected(e) || !1 }) }), { name: t.name, selected: o, seriesId: t.seriesId } }) }) } function iy(n) { return { getTargetSeries: function(t) { var e = {} , i = Q(); return t.eachSeriesByType(n, function(t) { t.__paletteScope = e, i.set(t.uid, t) }), i }, reset: function(s, t) { var l = s.getRawData() , u = {} , h = s.getData(); h.each(function(t) { var e = h.getRawIndex(t); u[e] = t }), l.each(function(t) { var e, i = u[t], n = null != i && h.getItemVisual(i, "color", !0), o = null != i && h.getItemVisual(i, "borderColor", !0); if (n && o || (e = l.getItemModel(t)), !n) { var a = e.get("itemStyle.color") || s.getColorFromPalette(l.getName(t) || t + "", s.__paletteScope, l.count()); null != i && h.setItemVisual(i, "color", a) } if (!o) { var r = e.get("itemStyle.borderColor"); null != i && h.setItemVisual(i, "borderColor", r) } }) } } } _c.extend({ type: "pie", init: function() { var t = new Ci; this._sectorGroup = t }, render: function(t, e, i, n) { if (!n || n.from !== this.uid) { var o = t.getData() , a = this._data , r = this.group , s = e.get("animation") , l = !a , u = t.get("animationType") , h = t.get("animationTypeUpdate") , c = T($v, this.uid, t, s, i) , d = t.get("selectedMode"); if (o.diff(a).add(function(t) { var e = new Qv(o,t); l && "scale" !== u && e.eachChild(function(t) { t.stopAnimation(!0) }), d && e.on("click", c), o.setItemGraphicEl(t, e), r.add(e) }).update(function(t, e) { var i = a.getItemGraphicEl(e); l || "transition" === h || i.eachChild(function(t) { t.stopAnimation(!0) }), i.updateData(o, t), i.off("click"), d && i.on("click", c), r.add(i), o.setItemGraphicEl(t, i) }).remove(function(t) { var e = a.getItemGraphicEl(t); r.remove(e) }).execute(), s && 0 < o.count() && (l ? "scale" !== u : "transition" !== h)) { for (var f = o.getItemLayout(0), p = 1; isNaN(f.startAngle) && p < o.count(); ++p) f = o.getItemLayout(p); var g = Math.max(i.getWidth(), i.getHeight()) / 2 , m = A(r.removeClipPath, r); r.setClipPath(this._createClipPath(f.cx, f.cy, g, f.startAngle, f.clockwise, m, t, l)) } else r.removeClipPath(); this._data = o } }, dispose: function() {}, _createClipPath: function(t, e, i, n, o, a, r, s) { var l = new qr({ shape: { cx: t, cy: e, r0: 0, r: i, startAngle: n, endAngle: n, clockwise: o } }); return (s ? dl : cl)(l, { shape: { endAngle: n + (o ? 1 : -1) * Math.PI * 2 } }, r, a), l }, containPoint: function(t, e) { var i = e.getData().getItemLayout(0); if (i) { var n = t[0] - i.cx , o = t[1] - i.cy , a = Math.sqrt(n * n + o * o); return a <= i.r && a >= i.r0 } } }); var ny = Math.PI / 180; function oy(o, t, e, i, n, a, r, s, l, u) { function h(t, e, i) { for (var n = t; n < e && !(o[n].y + i > l + r); n++) if (o[n].y += i, t < n && n + 1 < e && o[n + 1].y > o[n].y + o[n].height) return void c(n, i / 2); c(e - 1, i / 2) } function c(t, e) { for (var i = t; 0 <= i && !(o[i].y - e < l) && (o[i].y -= e, !(0 < i && o[i].y > o[i - 1].y + o[i - 1].height)); i--) ; } function d(t, e, i, n, o, a) { for (var r = e ? Number.MAX_VALUE : 0, s = 0, l = t.length; s < l; s++) if ("none" === t[s].labelAlignTo) { var u = Math.abs(t[s].y - n) , h = t[s].len , c = t[s].len2 , d = u < o + h ? Math.sqrt((o + h + c) * (o + h + c) - u * u) : Math.abs(t[s].x - i); e && r <= d && (d = r - 10), !e && d <= r && (d = r + 10), t[s].x = i + d * a, r = d } } o.sort(function(t, e) { return t.y - e.y }); for (var f, p = 0, g = o.length, m = [], v = [], y = 0; y < g; y++) { if ("outer" === o[y].position && "labelLine" === o[y].labelAlignTo) { var x = o[y].x - u; o[y].linePoints[1][0] += x, o[y].x = u } (f = o[y].y - p) < 0 && h(y, g, -f), p = o[y].y + o[y].height } r - p < 0 && c(g - 1, p - r); for (y = 0; y < g; y++) o[y].y >= e ? v.push(o[y]) : m.push(o[y]); d(m, !1, t, e, i, n), d(v, !0, t, e, i, n) } function ay(t) { return "center" === t.position } function ry(L, k, P, t, N, e) { var O, E, R = L.getData(), z = [], B = !1, V = (L.get("minShowLabelAngle") || 0) * ny; R.each(function(t) { var e = R.getItemLayout(t) , i = R.getItemModel(t) , n = i.getModel("label") , o = n.get("position") || i.get("emphasis.label.position") , a = n.get("distanceToLabelLine") , r = n.get("alignTo") , s = Rl(n.get("margin"), P) , l = n.get("bleedMargin") , u = n.getFont() , h = i.getModel("labelLine") , c = h.get("length"); c = Rl(c, P); var d = h.get("length2"); if (d = Rl(d, P), !(e.angle < V)) { var f, p, g, m, v = (e.startAngle + e.endAngle) / 2, y = Math.cos(v), x = Math.sin(v); O = e.cx, E = e.cy; var _, w = L.getFormattedLabel(t, "normal") || R.getName(t), b = gn(w, u, m, "top"), S = "inside" === o || "inner" === o; if ("center" === o) f = e.cx, p = e.cy, m = "center"; else { var M = (S ? (e.r + e.r0) / 2 * y : e.r * y) + O , I = (S ? (e.r + e.r0) / 2 * x : e.r * x) + E; if (f = M + 3 * y, p = I + 3 * x, !S) { var T = M + y * (c + k - e.r) , A = I + x * (c + k - e.r) , D = T + (y < 0 ? -1 : 1) * d; f = "edge" === r ? y < 0 ? N + s : N + P - s : D + (y < 0 ? -a : a), g = [[M, I], [T, A], [D, p = A]] } m = S ? "center" : "edge" === r ? 0 < y ? "right" : "left" : 0 < y ? "left" : "right" } var C = n.get("rotate"); _ = "number" == typeof C ? C * (Math.PI / 180) : C ? y < 0 ? -v + Math.PI : -v : 0, B = !!_, e.label = { x: f, y: p, position: o, height: b.height, len: c, len2: d, linePoints: g, textAlign: m, verticalAlign: "middle", rotation: _, inside: S, labelDistance: a, labelAlignTo: r, labelMargin: s, bleedMargin: l, textRect: b, text: w, font: u }, S || z.push(e.label) } }), !B && L.get("avoidLabelOverlap") && function(t, e, i, n, o, a, r, s) { for (var l = [], u = [], h = Number.MAX_VALUE, c = -Number.MAX_VALUE, d = 0; d < t.length; d++) ay(t[d]) || (t[d].x < e ? (h = Math.min(h, t[d].x), l.push(t[d])) : (c = Math.max(c, t[d].x), u.push(t[d]))); for (oy(u, e, i, n, 1, 0, a, 0, s, c), oy(l, e, i, n, -1, 0, a, 0, s, h), d = 0; d < t.length; d++) { var f = t[d]; if (!ay(f)) { var p = f.linePoints; if (p) { var g, m = "edge" === f.labelAlignTo, v = f.textRect.width; (g = m ? f.x < e ? p[2][0] - f.labelDistance - r - f.labelMargin : r + o - f.labelMargin - p[2][0] - f.labelDistance : f.x < e ? f.x - r - f.bleedMargin : r + o - f.x - f.bleedMargin) < f.textRect.width && (f.text = xn(f.text, g, f.font), "edge" === f.labelAlignTo && (v = pn(f.text, f.font))); var y = p[1][0] - p[2][0]; m ? f.x < e ? p[2][0] = r + f.labelMargin + v + f.labelDistance : p[2][0] = r + o - f.labelMargin - v - f.labelDistance : (f.x < e ? p[2][0] = f.x + f.labelDistance : p[2][0] = f.x - f.labelDistance, p[1][0] = p[2][0] + y), p[1][1] = p[2][1] = f.y } } } }(z, O, E, k, P, t, N, e) } var sy = 2 * Math.PI , ly = Math.PI / 180; function uy(t) { return { seriesType: t, reset: function(t, e) { var n = e.findComponents({ mainType: "legend" }); if (n && n.length) { var o = t.getData(); o.filterSelf(function(t) { for (var e = o.getName(t), i = 0; i < n.length; i++) if (!n[i].isSelected(e)) return !1; return !0 }) } } } } ey("pie", [{ type: "pieToggleSelect", event: "pieselectchanged", method: "toggleSelected" }, { type: "pieSelect", event: "pieselected", method: "select" }, { type: "pieUnSelect", event: "pieunselected", method: "unSelect" }]), Sf(iy("pie")), bf(T(function(t, e, A, i) { e.eachSeriesByType(t, function(t) { var o = t.getData() , e = o.mapDimension("value") , a = function(t, e) { return bu(t.getBoxLayoutParams(), { width: e.getWidth(), height: e.getHeight() }) }(t, A) , i = t.get("center") , n = t.get("radius"); L(n) || (n = [0, n]), L(i) || (i = [i, i]); var r = Rl(a.width, A.getWidth()) , s = Rl(a.height, A.getHeight()) , l = Math.min(r, s) , u = Rl(i[0], r) + a.x , h = Rl(i[1], s) + a.y , c = Rl(n[0], l / 2) , d = Rl(n[1], l / 2) , f = -t.get("startAngle") * ly , p = t.get("minAngle") * ly , g = 0; o.each(e, function(t) { isNaN(t) || g++ }); var m = o.getSum(e) , v = Math.PI / (m || g) * 2 , y = t.get("clockwise") , x = t.get("roseType") , _ = t.get("stillShowZeroSum") , w = o.getDataExtent(e); w[0] = 0; var b = sy , S = 0 , M = f , I = y ? 1 : -1; if (o.each(e, function(t, e) { var i; if (isNaN(t)) o.setItemLayout(e, { angle: NaN, startAngle: NaN, endAngle: NaN, clockwise: y, cx: u, cy: h, r0: c, r: x ? NaN : d, viewRect: a }); else { (i = "area" !== x ? 0 === m && _ ? v : t * v : sy / g) < p ? b -= i = p : S += t; var n = M + I * i; o.setItemLayout(e, { angle: i, startAngle: M, endAngle: n, clockwise: y, cx: u, cy: h, r0: c, r: x ? El(t, w, [c, d]) : d, viewRect: a }), M = n } }), b < sy && g) if (b <= .001) { var T = sy / g; o.each(e, function(t, e) { if (!isNaN(t)) { var i = o.getItemLayout(e); i.angle = T, i.startAngle = f + I * e * T, i.endAngle = f + I * (e + 1) * T } }) } else v = b / S, M = f, o.each(e, function(t, e) { if (!isNaN(t)) { var i = o.getItemLayout(e) , n = i.angle === p ? p : t * v; i.startAngle = M, i.endAngle = M + I * n, M += I * n } }); ry(t, d, a.width, a.height, a.x, a.y) }) }, "pie")), xf(uy("pie")), sc.extend({ type: "series.scatter", dependencies: ["grid", "polar", "geo", "singleAxis", "calendar"], getInitialData: function(t, e) { return gp(this.getSource(), this, { useEncodeDefaulter: !0 }) }, brushSelector: "point", getProgressive: function() { var t = this.option.progressive; return null == t ? this.option.large ? 5e3 : this.get("progressive") : t }, getProgressiveThreshold: function() { var t = this.option.progressiveThreshold; return null == t ? this.option.large ? 1e4 : this.get("progressiveThreshold") : t }, defaultOption: { coordinateSystem: "cartesian2d", zlevel: 0, z: 2, legendHoverLink: !0, hoverAnimation: !0, symbolSize: 10, large: !1, largeThreshold: 2e3, itemStyle: { opacity: .8 }, clip: !0 } }); var hy = Cs({ shape: { points: null }, symbolProxy: null, softClipShape: null, buildPath: function(t, e) { var i = e.points , n = e.size , o = this.symbolProxy , a = o.shape; if (!((t.getContext ? t.getContext() : t) && n[0] < 4)) for (var r = 0; r < i.length; ) { var s = i[r++] , l = i[r++]; isNaN(s) || isNaN(l) || this.softClipShape && !this.softClipShape.contain(s, l) || (a.x = s - n[0] / 2, a.y = l - n[1] / 2, a.width = n[0], a.height = n[1], o.buildPath(t, a, !0)) } }, afterBrush: function(t) { var e = this.shape , i = e.points , n = e.size; if (n[0] < 4) { this.setTransform(t); for (var o = 0; o < i.length; ) { var a = i[o++] , r = i[o++]; isNaN(a) || isNaN(r) || this.softClipShape && !this.softClipShape.contain(a, r) || t.fillRect(a - n[0] / 2, r - n[1] / 2, n[0], n[1]) } this.restoreTransform(t) } }, findDataIndex: function(t, e) { for (var i = this.shape, n = i.points, o = i.size, a = Math.max(o[0], 4), r = Math.max(o[1], 4), s = n.length / 2 - 1; 0 <= s; s--) { var l = 2 * s , u = n[l] - a / 2 , h = n[1 + l] - r / 2; if (u <= t && h <= e && t <= u + a && e <= h + r) return s } return -1 } }); function cy() { this.group = new Ci } var dy = cy.prototype; function fy(t, e, i) { Gg.call(this, t, e, i), this.type = "value", this.angle = 0, this.name = "", this.model } function py(t, e, i) { this._model = t, this.dimensions = [], this._indicatorAxes = O(t.getIndicatorModels(), function(t, e) { var i = "indicator_" + e , n = new fy(i,"log" === t.get("axisType") ? new ng : new Dp); return n.name = t.get("name"), (n.model = t).axis = n, this.dimensions.push(i), n }, this), this.resize(t, i), this.cx, this.cy, this.r, this.r0, this.startAngle } dy.isPersistent = function() { return !this._incremental } , dy.updateData = function(t, e) { this.group.removeAll(); var i = new hy({ rectHover: !0, cursor: "default" }); i.setShape({ points: t.getLayout("symbolPoints") }), this._setCommon(i, t, !1, e), this.group.add(i), this._incremental = null } , dy.updateLayout = function(t) { if (!this._incremental) { var n = t.getLayout("symbolPoints"); this.group.eachChild(function(t) { if (null != t.startIndex) { var e = 2 * (t.endIndex - t.startIndex) , i = 4 * t.startIndex * 2; n = new Float32Array(n.buffer,i,e) } t.setShape("points", n) }) } } , dy.incrementalPrepareUpdate = function(t) { this.group.removeAll(), this._clearIncremental(), 2e6 < t.count() ? (this._incremental || (this._incremental = new vs({ silent: !0 })), this.group.add(this._incremental)) : this._incremental = null } , dy.incrementalUpdate = function(t, e, i) { var n; this._incremental ? (n = new hy, this._incremental.addDisplayable(n, !0)) : ((n = new hy({ rectHover: !0, cursor: "default", startIndex: t.start, endIndex: t.end })).incremental = !0, this.group.add(n)), n.setShape({ points: e.getLayout("symbolPoints") }), this._setCommon(n, e, !!this._incremental, i) } , dy._setCommon = function(i, t, e, n) { var o = t.hostModel; n = n || {}; var a = t.getVisual("symbolSize"); i.setShape("size", a instanceof Array ? a : [a, a]), i.softClipShape = n.clipShape || null, i.symbolProxy = wg(t.getVisual("symbol"), 0, 0, 0, 0), i.setColor = i.symbolProxy.setColor; var r = i.shape.size[0] < 4; i.useStyle(o.getModel("itemStyle").getItemStyle(r ? ["color", "shadowBlur", "shadowColor"] : ["color"])); var s = t.getVisual("color"); s && i.setColor(s), e || (i.seriesIndex = o.seriesIndex, i.on("mousemove", function(t) { i.dataIndex = null; var e = i.findDataIndex(t.offsetX, t.offsetY); 0 <= e && (i.dataIndex = e + (i.startIndex || 0)) })) } , dy.remove = function() { this._clearIncremental(), this._incremental = null, this.group.removeAll() } , dy._clearIncremental = function() { var t = this._incremental; t && t.clearDisplaybles() } , Cf({ type: "scatter", render: function(t, e, i) { var n = t.getData(); this._updateSymbolDraw(n, t).updateData(n, { clipShape: this._getClipShape(t) }), this._finished = !0 }, incrementalPrepareRender: function(t, e, i) { var n = t.getData(); this._updateSymbolDraw(n, t).incrementalPrepareUpdate(n), this._finished = !1 }, incrementalRender: function(t, e, i) { this._symbolDraw.incrementalUpdate(t, e.getData(), { clipShape: this._getClipShape(e) }), this._finished = t.end === e.getData().count() }, updateTransform: function(t, e, i) { var n = t.getData(); if (this.group.dirty(), !this._finished || 1e4 < n.count() || !this._symbolDraw.isPersistent()) return { update: !0 }; var o = km().reset(t); o.progress && o.progress({ start: 0, end: n.count() }, n), this._symbolDraw.updateLayout(n) }, _getClipShape: function(t) { var e = t.coordinateSystem , i = e && e.getArea && e.getArea(); return t.get("clip", !0) ? i : null }, _updateSymbolDraw: function(t, e) { var i = this._symbolDraw , n = e.pipelineContext.large; return i && n === this._isLargeDraw || (i && i.remove(), i = this._symbolDraw = n ? new cy : new im, this._isLargeDraw = n, this.group.removeAll()), this.group.add(i.group), i }, remove: function(t, e) { this._symbolDraw && this._symbolDraw.remove(!0), this._symbolDraw = null }, dispose: function() {} }), Sf(Lm("scatter", "circle")), bf(km("scatter")), w(fy, Gg), py.prototype.getIndicatorAxes = function() { return this._indicatorAxes } , py.prototype.dataToPoint = function(t, e) { var i = this._indicatorAxes[e]; return this.coordToPoint(i.dataToCoord(t), e) } , py.prototype.coordToPoint = function(t, e) { var i = this._indicatorAxes[e].angle; return [this.cx + t * Math.cos(i), this.cy - t * Math.sin(i)] } , py.prototype.pointToData = function(t) { var e = t[0] - this.cx , i = t[1] - this.cy , n = Math.sqrt(e * e + i * i); e /= n, i /= n; for (var o, a = Math.atan2(-i, e), r = 1 / 0, s = -1, l = 0; l < this._indicatorAxes.length; l++) { var u = this._indicatorAxes[l] , h = Math.abs(a - u.angle); h < r && (o = u, s = l, r = h) } return [s, +(o && o.coordToData(n))] } , py.prototype.resize = function(t, e) { var i = t.get("center") , n = e.getWidth() , o = e.getHeight() , a = Math.min(n, o) / 2; this.cx = Rl(i[0], n), this.cy = Rl(i[1], o), this.startAngle = t.get("startAngle") * Math.PI / 180; var r = t.get("radius"); "string" != typeof r && "number" != typeof r || (r = [0, r]), this.r0 = Rl(r[0], a), this.r = Rl(r[1], a), E(this._indicatorAxes, function(t, e) { t.setExtent(this.r0, this.r); var i = this.startAngle + e * Math.PI * 2 / this._indicatorAxes.length; i = Math.atan2(Math.sin(i), Math.cos(i)), t.angle = i }, this) } , py.prototype.update = function(n, t) { var o = this._indicatorAxes , a = this._model; E(o, function(t) { t.scale.setExtent(1 / 0, -1 / 0) }), n.eachSeriesByType("radar", function(t, e) { if ("radar" === t.get("coordinateSystem") && n.getComponent("radar", t.get("radarIndex")) === a) { var i = t.getData(); E(o, function(t) { t.scale.unionExtentFromData(i, i.mapDimension(t.dim)) }) } }, this); var c = a.get("splitNumber"); function d(t) { var e = Math.pow(10, Math.floor(Math.log(t) / Math.LN10)) , i = t / e; return 2 === i ? i = 5 : i *= 2, i * e } E(o, function(t, e) { var i = ag(t.scale, t.model).extent; rg(t.scale, t.model); var n = t.model , o = t.scale , a = n.getMin() , r = n.getMax() , s = o.getInterval(); if (null != a && null != r) o.setExtent(+a, +r), o.setInterval((r - a) / c); else if (null != a) for (; u = a + s * c, o.setExtent(+a, u), o.setInterval(s), s = d(s), u < i[1] && isFinite(u) && isFinite(i[1]); ) ; else if (null != r) for (; h = r - s * c, o.setExtent(h, +r), o.setInterval(s), s = d(s), h > i[0] && isFinite(h) && isFinite(i[0]); ) ; else { var l = o.getTicks().length - 1; c < l && (s = d(s)); var u, h = zl((u = Math.ceil(i[1] / s) * s) - s * c); o.setExtent(h, u), o.setInterval(s) } }) } , py.dimensions = [], py.create = function(i, n) { var o = []; return i.eachComponent("radar", function(t) { var e = new py(t,i,n); o.push(e), t.coordinateSystem = e }), i.eachSeriesByType("radar", function(t) { "radar" === t.get("coordinateSystem") && (t.coordinateSystem = o[t.get("radarIndex") || 0]) }), o } , lh.register("radar", py); var gy = Vm.valueAxis; function my(t, e) { return D({ show: e }, t) } Tf({ type: "radar", optionUpdated: function() { var o = this.get("boundaryGap") , a = this.get("splitNumber") , r = this.get("scale") , s = this.get("axisLine") , l = this.get("axisTick") , u = this.get("axisType") , h = this.get("axisLabel") , c = this.get("name") , d = this.get("name.show") , f = this.get("name.formatter") , p = this.get("nameGap") , g = this.get("triggerEvent") , t = O(this.get("indicator") || [], function(t) { null != t.max && 0 < t.max && !t.min ? t.min = 0 : null != t.min && t.min < 0 && !t.max && (t.max = 0); var e = c; if (null != t.color && (e = D({ color: t.color }, c)), t = m(k(t), { boundaryGap: o, splitNumber: a, scale: r, axisLine: s, axisTick: l, axisType: u, axisLabel: h, name: t.text, nameLocation: "end", nameGap: p, nameTextStyle: e, triggerEvent: g }, !1), d || (t.name = ""), "string" == typeof f) { var i = t.name; t.name = f.replace("{value}", null != i ? i : "") } else "function" == typeof f && (t.name = f(t.name, t)); var n = P(new Cl(t,null,this.ecModel), dg); return n.mainType = "radar", n.componentIndex = this.componentIndex, n }, this); this.getIndicatorModels = function() { return t } }, defaultOption: { zlevel: 0, z: 0, center: ["50%", "50%"], radius: "75%", startAngle: 90, name: { show: !0 }, boundaryGap: [0, 0], splitNumber: 5, nameGap: 15, scale: !1, shape: "polygon", axisLine: m({ lineStyle: { color: "#bbb" } }, gy.axisLine), axisLabel: my(gy.axisLabel, !1), axisTick: my(gy.axisTick, !1), axisType: "interval", splitLine: my(gy.splitLine, !0), splitArea: my(gy.splitArea, !0), indicator: [] } }); var vy = ["axisLine", "axisTickLabel", "axisName"]; Af({ type: "radar", render: function(t, e, i) { this.group.removeAll(), this._buildAxes(t), this._buildSplitLineAndArea(t) }, _buildAxes: function(t) { var e = t.coordinateSystem; E(O(e.getIndicatorAxes(), function(t) { return new Qm(t.model,{ position: [e.cx, e.cy], rotation: t.angle, labelDirection: -1, tickDirection: -1, nameDirection: 1 }) }), function(t) { E(vy, t.add, t), this.group.add(t.getGroup()) }, this) }, _buildSplitLineAndArea: function(t) { var n = t.coordinateSystem , e = n.getIndicatorAxes(); if (e.length) { var i = t.get("shape") , o = t.getModel("splitLine") , a = t.getModel("splitArea") , r = o.getModel("lineStyle") , s = a.getModel("areaStyle") , l = o.get("show") , u = a.get("show") , h = r.get("color") , c = s.get("color"); h = L(h) ? h : [h], c = L(c) ? c : [c]; var d = [] , f = []; if ("circle" === i) for (var p = e[0].getTicksCoords(), g = n.cx, m = n.cy, v = 0; v < p.length; v++) { if (l) d[I(d, h, v)].push(new Yr({ shape: { cx: g, cy: m, r: p[v].coord } })); if (u && v < p.length - 1) f[I(f, c, v)].push(new Kr({ shape: { cx: g, cy: m, r0: p[v].coord, r: p[v + 1].coord } })) } else { var y, x = O(e, function(t, e) { var i = t.getTicksCoords(); return y = null == y ? i.length - 1 : Math.min(i.length - 1, y), O(i, function(t) { return n.coordToPoint(t.coord, e) }) }), _ = []; for (v = 0; v <= y; v++) { for (var w = [], b = 0; b < e.length; b++) w.push(x[b][v]); if (w[0] && w.push(w[0].slice()), l) d[I(d, h, v)].push(new ts({ shape: { points: w } })); if (u && _) f[I(f, c, v - 1)].push(new Qr({ shape: { points: w.concat(_) } })); _ = w.slice().reverse() } } var S = r.getLineStyle() , M = s.getAreaStyle(); E(f, function(t, e) { this.group.add(Es(t, { style: D({ stroke: "none", fill: c[e % c.length] }, M), silent: !0 })) }, this), E(d, function(t, e) { this.group.add(Es(t, { style: D({ fill: "none", stroke: h[e % h.length] }, S), silent: !0 })) }, this) } function I(t, e, i) { var n = i % e.length; return t[n] = t[n] || [], n } } }); var yy = sc.extend({ type: "series.radar", dependencies: ["radar"], init: function(t) { yy.superApply(this, "init", arguments), this.legendVisualProvider = new qv(A(this.getData, this),A(this.getRawData, this)) }, getInitialData: function(t, e) { return Yv(this, { generateCoord: "indicator_", generateCoordCount: 1 / 0 }) }, formatTooltip: function(n) { var o = this.getData() , t = this.coordinateSystem.getIndicatorAxes() , e = this.getData().getName(n); return au("" === e ? this.name : e) + "
" + O(t, function(t, e) { var i = o.get(o.mapDimension(t.dim), n); return au(t.name + " : " + i) }).join("
") }, getTooltipPosition: function(t) { if (null != t) for (var e = this.getData(), i = this.coordinateSystem, n = e.getValues(O(i.dimensions, function(t) { return e.mapDimension(t) }), t, !0), o = 0, a = n.length; o < a; o++) if (!isNaN(n[o])) { var r = i.getIndicatorAxes(); return i.coordToPoint(r[o].dataToCoord(n[o]), o) } }, defaultOption: { zlevel: 0, z: 2, coordinateSystem: "radar", legendHoverLink: !0, radarIndex: 0, lineStyle: { width: 2, type: "solid" }, label: { position: "top" }, symbol: "emptyCircle", symbolSize: 4 } }); Cf({ type: "radar", render: function(l, t, e) { var i = l.coordinateSystem , g = this.group , m = l.getData() , s = this._data; function u(t, e) { var i = t.getItemVisual(e, "symbol") || "circle" , n = t.getItemVisual(e, "color"); if ("none" !== i) { var o = function(t) { return L(t) || (t = [+t, +t]), t }(t.getItemVisual(e, "symbolSize")) , a = wg(i, -1, -1, 2, 2, n); return a.attr({ style: { strokeNoScale: !0 }, z2: 100, scale: [o[0] / 2, o[1] / 2] }), a } } function h(t, e, i, n, o, a) { i.removeAll(); for (var r = 0; r < e.length - 1; r++) { var s = u(n, o); s && (t[s.__dimIdx = r] ? (s.attr("position", t[r]), bl[a ? "initProps" : "updateProps"](s, { position: e[r] }, l, o)) : s.attr("position", e[r]), i.add(s)) } } function c(t) { return O(t, function(t) { return [i.cx, i.cy] }) } m.diff(s).add(function(t) { var e = m.getItemLayout(t); if (e) { var i = new Qr , n = new ts , o = { shape: { points: e } }; i.shape.points = c(e), n.shape.points = c(e), dl(i, o, l, t), dl(n, o, l, t); var a = new Ci , r = new Ci; a.add(n), a.add(i), a.add(r), h(n.shape.points, e, r, m, t, !0), m.setItemGraphicEl(t, a) } }).update(function(t, e) { var i = s.getItemGraphicEl(e) , n = i.childAt(0) , o = i.childAt(1) , a = i.childAt(2) , r = { shape: { points: m.getItemLayout(t) } }; r.shape.points && (h(n.shape.points, r.shape.points, a, m, t, !1), cl(n, r, l), cl(o, r, l), m.setItemGraphicEl(t, i)) }).remove(function(t) { g.remove(s.getItemGraphicEl(t)) }).execute(), m.eachItemGraphicEl(function(t, i) { var e = m.getItemModel(i) , n = t.childAt(0) , o = t.childAt(1) , a = t.childAt(2) , r = m.getItemVisual(i, "color"); g.add(t), n.useStyle(D(e.getModel("lineStyle").getLineStyle(), { fill: "none", stroke: r })), n.hoverStyle = e.getModel("emphasis.lineStyle").getLineStyle(); var s = e.getModel("areaStyle") , l = e.getModel("emphasis.areaStyle") , u = s.isEmpty() && s.parentModel.isEmpty() , h = l.isEmpty() && l.parentModel.isEmpty(); h = h && u, o.ignore = u, o.useStyle(D(s.getAreaStyle(), { fill: r, opacity: .7 })), o.hoverStyle = l.getAreaStyle(); var c = e.getModel("itemStyle").getItemStyle(["color"]) , d = e.getModel("emphasis.itemStyle").getItemStyle() , f = e.getModel("label") , p = e.getModel("emphasis.label"); a.eachChild(function(t) { t.setStyle(c), t.hoverStyle = k(d); var e = m.get(m.dimensions[t.__dimIdx], i); null != e && !isNaN(e) || (e = ""), el(t.style, t.hoverStyle, f, p, { labelFetcher: m.hostModel, labelDataIndex: i, labelDimIndex: t.__dimIdx, defaultText: e, autoColor: r, isRectText: !0 }) }), t.highDownOnUpdate = function(t, e) { o.attr("ignore", "emphasis" === e ? h : u) } , $s(t) }), this._data = m }, remove: function() { this.group.removeAll(), this._data = null }, dispose: function() {} }); function xy(t) { return !isNaN(t[0]) && !isNaN(t[1]) } function _y(t) { return [t.cx, t.cy] } Sf(iy("radar")), Sf(Lm("radar", "circle")), bf(function(t) { t.eachSeriesByType("radar", function(t) { var i = t.getData() , o = [] , a = t.coordinateSystem; if (a) { var e = a.getIndicatorAxes(); E(e, function(t, n) { i.each(i.mapDimension(e[n].dim), function(t, e) { o[e] = o[e] || []; var i = a.dataToPoint(t, n); o[e][n] = xy(i) ? i : _y(a) }) }), i.each(function(t) { var e = I(o[t], function(t) { return xy(t) }) || _y(a); o[t].push(e.slice()), i.setItemLayout(t, o[t]) }) } }) }), xf(uy("radar")), yf(function(i) { var t = i.polar; if (t) { L(t) || (t = [t]); var n = []; E(t, function(t, e) { t.indicator ? (t.type && !t.shape && (t.shape = t.type), i.radar = i.radar || [], L(i.radar) || (i.radar = [i.radar]), i.radar.push(t)) : n.push(t) }), i.polar = n } E(i.series, function(t) { t && "radar" === t.type && t.polarIndex && (t.radarIndex = t.polarIndex) }) }); for (var wy = [126, 25], by = [[[0, 3.5], [7, 11.2], [15, 11.9], [30, 7], [42, .7], [52, .7], [56, 7.7], [59, .7], [64, .7], [64, 0], [5, 0], [0, 3.5]], [[13, 16.1], [19, 14.7], [16, 21.7], [11, 23.1], [13, 16.1]], [[12, 32.2], [14, 38.5], [15, 38.5], [13, 32.2], [12, 32.2]], [[16, 47.6], [12, 53.2], [13, 53.2], [18, 47.6], [16, 47.6]], [[6, 64.4], [8, 70], [9, 70], [8, 64.4], [6, 64.4]], [[23, 82.6], [29, 79.8], [30, 79.8], [25, 82.6], [23, 82.6]], [[37, 70.7], [43, 62.3], [44, 62.3], [39, 70.7], [37, 70.7]], [[48, 51.1], [51, 45.5], [53, 45.5], [50, 51.1], [48, 51.1]], [[51, 35], [51, 28.7], [53, 28.7], [53, 35], [51, 35]], [[52, 22.4], [55, 17.5], [56, 17.5], [53, 22.4], [52, 22.4]], [[58, 12.6], [62, 7], [63, 7], [60, 12.6], [58, 12.6]], [[0, 3.5], [0, 93.1], [64, 93.1], [64, 0], [63, 0], [63, 92.4], [1, 92.4], [1, 3.5], [0, 3.5]]], Sy = 0; Sy < by.length; Sy++) for (var My = 0; My < by[Sy].length; My++) by[Sy][My][0] /= 10.5, by[Sy][My][1] /= -14, by[Sy][My][0] += wy[0], by[Sy][My][1] += wy[1]; var Iy = { "南海诸岛": [32, 80], "广东": [0, -10], "香港": [10, 5], "澳门": [-10, 10], "天津": [5, 5] } , Ty = { Russia: [100, 60], "United States": [-99, 38], "United States of America": [-99, 38] } , Ay = [[[123.45165252685547, 25.73527164402261], [123.49731445312499, 25.73527164402261], [123.49731445312499, 25.750734064600884], [123.45165252685547, 25.750734064600884], [123.45165252685547, 25.73527164402261]]] , Dy = jo() , Cy = { load: function(n, t, e) { var i = Dy(t).parsed; if (i) return i; var o, a = t.specialAreas || {}, r = t.geoJSON; try { o = r ? Cg(r, e) : [] } catch (t) { throw new Error("Invalid geoJson format\n" + t.message) } return function(t, e) { "china" === t && e.push(new Ag("南海诸岛",O(by, function(t) { return { type: "polygon", exterior: t } }),wy)) }(n, o), E(o, function(t) { var e = t.name; !function(t, e) { if ("china" === t) { var i = Iy[e.name]; if (i) { var n = e.center; n[0] += i[0] / 10.5, n[1] += -i[1] / 14 } } }(n, t), function(t, e) { if ("world" === t) { var i = Ty[e.name]; if (i) { var n = e.center; n[0] = i[0], n[1] = i[1] } } }(n, t), function(t, e) { "china" === t && "台湾" === e.name && e.geometries.push({ type: "polygon", exterior: Ay[0] }) }(n, t); var i = a[e]; i && t.transformTo(i.left, i.top, i.width, i.height) }), Dy(t).parsed = { regions: o, boundingRect: function(t) { for (var e, i = 0; i < t.length; i++) { var n = t[i].getBoundingRect(); (e = e || n.clone()).union(n) } return e }(o) } } }; var Ly = jo(); function ky(t, e) { var i, n, o = t.svgXML; try { Y(null != (n = (i = o && function(t, e) { return (new hd).parse(t, e) }(o, { ignoreViewBox: !0, ignoreRootClip: !0 }) || {}).root)) } catch (t) { throw new Error("Invalid svg format\n" + t.message) } var a = i.width , r = i.height , s = i.viewBoxRect; if (e || (e = null == a || null == r ? n.getBoundingRect() : new Di(0,0,0,0), null != a && (e.width = a), null != r && (e.height = r)), s) { var l = wd(s, e.width, e.height) , u = n; (n = new Ci).add(u), u.scale = l.scale, u.position = l.position } return n.setClipPath(new rs({ shape: e.plain() })), { root: n, boundingRect: e } } var Py = { geoJSON: Cy, svg: { load: function(t, e) { var i = Ly(e).originRoot; if (i) return { root: i, boundingRect: Ly(e).boundingRect }; var n = ky(e); return Ly(e).originRoot = n.root, Ly(e).boundingRect = n.boundingRect, n }, makeGraphic: function(t, e, i) { var n = Ly(e) , o = n.rootMap || (n.rootMap = Q()) , a = o.get(i); if (a) return a; var r = n.originRoot , s = n.boundingRect; return a = n.originRootHostKey ? ky(e, s).root : (n.originRootHostKey = i, r), o.set(i, a) }, removeGraphic: function(t, e, i) { var n = Ly(e) , o = n.rootMap; o && o.removeKey(i), i === n.originRootHostKey && (n.originRootHostKey = null) } } } , Ny = { load: function(n, o, a) { var r, s = [], l = Q(), u = Q(); return E(Ey(n), function(t) { var e = Py[t.type].load(n, t, a); E(e.regions, function(t) { var e = t.name; o && o.hasOwnProperty(e) && (t = t.cloneShallow(e = o[e])), s.push(t), l.set(e, t), u.set(e, t.center) }); var i = e.boundingRect; i && (r ? r.union(i) : r = i.clone()) }), { regions: s, regionsMap: l, nameCoordMap: u, boundingRect: r || new Di(0,0,0,0) } }, makeGraphic: Oy("makeGraphic"), removeGraphic: Oy("removeGraphic") }; function Oy(a) { return function(i, n) { var t = Ey(i) , o = []; return E(t, function(t) { var e = Py[t.type][a]; e && o.push(e(i, t, n)) }), o } } function Ey(t) { return Sd.retrieveMap(t) || [] } b(sc.extend({ type: "series.map", dependencies: ["geo"], layoutMode: "box", needsDrawMap: !1, seriesGroup: [], getInitialData: function(t) { for (var e = Yv(this, { coordDimensions: ["value"], encodeDefaulter: T(Ju, this) }), i = e.mapDimension("value"), n = Q(), o = [], a = [], r = 0, s = e.count(); r < s; r++) { var l = e.getName(r); n.set(l, !0), o.push({ name: l, value: e.get(i, r), selected: Zh(e, r, "selected") }) } return E(Ny.load(this.getMapType(), this.option.nameMap, this.option.nameProperty).regions, function(t) { var e = t.name; n.get(e) || (o.push({ name: e }), a.push(e)) }), this.updateSelectedMap(o), e.appendValues([], a), e }, getHostGeoModel: function() { var t = this.option.geoIndex; return null != t ? this.dependentModels.geo[t] : null }, getMapType: function() { return (this.getHostGeoModel() || this).option.map }, getRawValue: function(t) { var e = this.getData(); return e.get(e.mapDimension("value"), t) }, getRegionModel: function(t) { var e = this.getData(); return e.getItemModel(e.indexOfName(t)) }, formatTooltip: function(t) { for (var e = this.getData(), i = tu(this.getRawValue(t)), n = e.getName(t), o = this.seriesGroup, a = [], r = 0; r < o.length; r++) { var s = o[r].originalData.indexOfName(n) , l = e.mapDimension("value"); isNaN(o[r].originalData.get(l, s)) || a.push(au(o[r].name)) } return a.join(", ") + "
" + au(n + " : " + i) }, getTooltipPosition: function(t) { if (null != t) { var e = this.getData().getName(t) , i = this.coordinateSystem , n = i.getRegion(e); return n && i.dataToPoint(n.center) } }, setZoom: function(t) { this.option.zoom = t }, setCenter: function(t) { this.option.center = t }, defaultOption: { zlevel: 0, z: 2, coordinateSystem: "geo", map: "", left: "center", top: "center", aspectScale: .75, showLegendSymbol: !0, dataRangeHoverLink: !0, boundingCoords: null, center: null, zoom: 1, scaleLimit: null, label: { show: !1, color: "#000" }, itemStyle: { borderWidth: .5, borderColor: "#444", areaColor: "#eee" }, emphasis: { label: { show: !0, color: "rgb(100,0,0)" }, itemStyle: { areaColor: "rgba(255,215,0,0.8)" } }, nameProperty: "name" } }), jv); var Ry = "\0_ec_interaction_mutex"; function zy(t, e) { return !!By(t)[e] } function By(t) { return t[Ry] || (t[Ry] = {}) } function Vy(i) { this.pointerChecker, this._zr = i, this._opt = {}; var t = A , n = t(Gy, this) , o = t(Fy, this) , a = t(Wy, this) , r = t(Hy, this) , s = t(Zy, this); Ct.call(this), this.setPointerChecker = function(t) { this.pointerChecker = t } , this.enable = function(t, e) { this.disable(), this._opt = D(k(e) || {}, { zoomOnMouseWheel: !0, moveOnMouseMove: !0, moveOnMouseWheel: !1, preventDefaultMouseMove: !0 }), null == t && (t = !0), !0 !== t && "move" !== t && "pan" !== t || (i.on("mousedown", n), i.on("mousemove", o), i.on("mouseup", a)), !0 !== t && "scale" !== t && "zoom" !== t || (i.on("mousewheel", r), i.on("pinch", s)) } , this.disable = function() { i.off("mousedown", n), i.off("mousemove", o), i.off("mouseup", a), i.off("mousewheel", r), i.off("pinch", s) } , this.dispose = this.disable, this.isDragging = function() { return this._dragging } , this.isPinching = function() { return this._pinching } } function Gy(t) { if (!(Yt(t) || t.target && t.target.draggable)) { var e = t.offsetX , i = t.offsetY; this.pointerChecker && this.pointerChecker(t, e, i) && (this._x = e, this._y = i, this._dragging = !0) } } function Fy(t) { if (this._dragging && Yy("moveOnMouseMove", t, this._opt) && "pinch" !== t.gestureEvent && !zy(this._zr, "globalPan")) { var e = t.offsetX , i = t.offsetY , n = this._x , o = this._y , a = e - n , r = i - o; this._x = e, this._y = i, this._opt.preventDefaultMouseMove && Xt(t.event), Xy(this, "pan", "moveOnMouseMove", t, { dx: a, dy: r, oldX: n, oldY: o, newX: e, newY: i }) } } function Wy(t) { Yt(t) || (this._dragging = !1) } function Hy(t) { var e = Yy("zoomOnMouseWheel", t, this._opt) , i = Yy("moveOnMouseWheel", t, this._opt) , n = t.wheelDelta , o = Math.abs(n) , a = t.offsetX , r = t.offsetY; if (0 !== n && (e || i)) { if (e) { var s = 3 < o ? 1.4 : 1 < o ? 1.2 : 1.1; Uy(this, "zoom", "zoomOnMouseWheel", t, { scale: 0 < n ? s : 1 / s, originX: a, originY: r }) } if (i) { var l = Math.abs(n); Uy(this, "scrollMove", "moveOnMouseWheel", t, { scrollDelta: (0 < n ? 1 : -1) * (3 < l ? .4 : 1 < l ? .15 : .05), originX: a, originY: r }) } } } function Zy(t) { zy(this._zr, "globalPan") || Uy(this, "zoom", null, t, { scale: 1 < t.pinchScale ? 1.1 : 1 / 1.1, originX: t.pinchX, originY: t.pinchY }) } function Uy(t, e, i, n, o) { t.pointerChecker && t.pointerChecker(n, o.originX, o.originY) && (Xt(n.event), Xy(t, e, i, n, o)) } function Xy(t, e, i, n, o) { o.isAvailableBehavior = A(Yy, null, i, n), t.trigger(e, o) } function Yy(t, e, i) { var n = i[t]; return !t || n && (!R(n) || e.event[n + "Key"]) } function jy(t, e, i) { var n = t.target , o = n.position; o[0] += e, o[1] += i, n.dirty() } function qy(t, e, i, n) { var o = t.target , a = t.zoomLimit , r = o.position , s = o.scale , l = t.zoom = t.zoom || 1; if (l *= e, a) { var u = a.min || 0 , h = a.max || 1 / 0; l = Math.max(Math.min(h, l), u) } var c = l / t.zoom; t.zoom = l, r[0] -= (i - r[0]) * (c - 1), r[1] -= (n - r[1]) * (c - 1), s[0] *= c, s[1] *= c, o.dirty() } _f({ type: "takeGlobalCursor", event: "globalCursorTaken", update: "update" }, function() {}), b(Vy, Ct); var Ky = { axisPointer: 1, tooltip: 1, brush: 1 }; function $y(t, e, i) { var n = e.getComponentByElement(t.topTarget) , o = n && n.coordinateSystem; return n && n !== i && !Ky[n.mainType] && o && o.model !== i } function Jy(t) { var e = t.getItemStyle() , i = t.get("areaColor"); return null != i && (e.fill = i), e } function Qy(i, t) { t.eachChild(function(e) { E(e.__regions, function(t) { e.trigger(i.isSelected(t.name) ? "emphasis" : "normal") }) }) } function tx(t, e) { var i = new Ci; this.uid = Nl("ec_map_draw"), this._controller = new Vy(t.getZr()), this._controllerHost = { target: e ? i : null }, this.group = i, this._updateGroup = e, this._mouseDownFlag, this._mapName, this._initialized, i.add(this._regionsGroup = new Ci), i.add(this._backgroundGroup = new Ci) } tx.prototype = { constructor: tx, draw: function(_, t, e, i, n) { var w = "geo" === _.mainType , b = _.getData && _.getData(); w && t.eachComponent({ mainType: "series", subType: "map" }, function(t) { b || t.getHostGeoModel() !== _ || (b = t.getData()) }); var o = _.coordinateSystem; this._updateBackground(o); var S, M = this._regionsGroup, I = this.group, a = o.getTransformInfo(), T = !M.childAt(0) || n; if (T) I.transform = a.roamTransform, I.decomposeTransform(), I.dirty(); else { var r = new ve; r.transform = a.roamTransform, r.decomposeTransform(); var s = { scale: r.scale, position: r.position }; S = r.scale, cl(I, s, _) } var A = a.rawScale , D = a.rawPosition; M.removeAll(); var C = ["itemStyle"] , L = ["emphasis", "itemStyle"] , k = ["label"] , P = ["emphasis", "label"] , N = Q(); E(o.regions, function(t) { var e = N.get(t.name) || N.set(t.name, new Ci) , a = new ps({ segmentIgnoreThreshold: 1, shape: { paths: [] } }); e.add(a); var i, n = (x = _.getRegionModel(t.name) || _).getModel(C), o = x.getModel(L), r = Jy(n), s = Jy(o), l = x.getModel(k), u = x.getModel(P); if (b) { i = b.indexOfName(t.name); var h = b.getItemVisual(i, "color", !0); h && (r.fill = h) } function c(t) { return [t[0] * A[0] + D[0], t[1] * A[1] + D[1]] } E(t.geometries, function(t) { if ("polygon" === t.type) { for (var e = [], i = 0; i < t.exterior.length; ++i) e.push(c(t.exterior[i])); a.shape.paths.push(new Qr({ segmentIgnoreThreshold: 1, shape: { points: e } })); for (i = 0; i < (t.interiors ? t.interiors.length : 0); ++i) { for (var n = t.interiors[i], o = (e = [], 0); o < n.length; ++o) e.push(c(n[o])); a.shape.paths.push(new Qr({ segmentIgnoreThreshold: 1, shape: { points: e } })) } } }), a.setStyle(r), a.style.strokeNoScale = !0, a.culling = !0; var d = l.get("show") , f = u.get("show") , p = b && isNaN(b.get(b.mapDimension("value"), i)) , g = b && b.getItemLayout(i); if (w || p && (d || f) || g && g.showLabel) { var m, v = w ? t.name : i; (!b || 0 <= i) && (m = _); var y = new Ur({ position: c(t.center.slice()), scale: [1 / I.scale[0], 1 / I.scale[1]], z2: 10, silent: !0 }); if (el(y.style, y.hoverStyle = {}, l, u, { labelFetcher: m, labelDataIndex: v, defaultText: t.name, useInsideStyle: !1 }, { textAlign: "center", textVerticalAlign: "middle" }), !T) cl(y, { scale: [1 / S[0], 1 / S[1]] }, _); e.add(y) } if (b) b.setItemGraphicEl(i, e); else { var x = _.getRegionModel(t.name); a.eventData = { componentType: "geo", componentIndex: _.componentIndex, geoIndex: _.componentIndex, name: t.name, region: x && x.option || {} } } (e.__regions || (e.__regions = [])).push(t), e.highDownSilentOnTouch = !!_.get("selectedMode"), $s(e, s), M.add(e) }), this._updateController(_, t, e), function(n, o, a, r, s) { a.off("click"), a.off("mousedown"), o.get("selectedMode") && (a.on("mousedown", function() { n._mouseDownFlag = !0 }), a.on("click", function(t) { if (n._mouseDownFlag) { n._mouseDownFlag = !1; for (var e = t.target; !e.__regions; ) e = e.parent; if (e) { var i = { type: ("geo" === o.mainType ? "geo" : "map") + "ToggleSelect", batch: O(e.__regions, function(t) { return { name: t.name, from: s.uid } }) }; i[o.mainType + "Id"] = o.id, r.dispatchAction(i), Qy(o, a) } } })) }(this, _, M, e, i), Qy(_, M) }, remove: function() { this._regionsGroup.removeAll(), this._backgroundGroup.removeAll(), this._controller.dispose(), this._mapName && Ny.removeGraphic(this._mapName, this.uid), this._mapName = null, this._controllerHost = {} }, _updateBackground: function(t) { var e = t.map; this._mapName !== e && E(Ny.makeGraphic(e, this.uid), function(t) { this._backgroundGroup.add(t) }, this), this._mapName = e }, _updateController: function(n, t, o) { var a = n.coordinateSystem , e = this._controller , i = this._controllerHost; i.zoomLimit = n.get("scaleLimit"), i.zoom = a.getZoom(), e.enable(n.get("roam") || !1); var r = n.mainType; function s() { var t = { type: "geoRoam", componentType: r }; return t[r + "Id"] = n.id, t } e.off("pan").on("pan", function(t) { this._mouseDownFlag = !1, jy(i, t.dx, t.dy), o.dispatchAction(P(s(), { dx: t.dx, dy: t.dy })) }, this), e.off("zoom").on("zoom", function(t) { if (this._mouseDownFlag = !1, qy(i, t.scale, t.originX, t.originY), o.dispatchAction(P(s(), { zoom: t.scale, originX: t.originX, originY: t.originY })), this._updateGroup) { var e = this.group.scale; this._regionsGroup.traverse(function(t) { "text" === t.type && t.attr("scale", [1 / e[0], 1 / e[1]]) }) } }, this), e.setPointerChecker(function(t, e, i) { return a.getViewRectAfterRoam().contain(e, i) && !$y(t, o, n) }) } }; var ex = "__seriesMapHighDown" , ix = "__seriesMapCallKey"; function nx(t) { var e = this[ex]; e && e.recordVersion === this[ix] && ox(e, t) } function ox(t, e) { var i = t.circle , n = t.labelModel , o = t.hoverLabelModel , a = t.emphasisText , r = t.normalText; e ? (i.style.extendFrom(nl({}, o, { text: o.get("show") ? a : null }, { isRectText: !0, useInsideStyle: !1 }, !0)), i.__mapOriginalZ2 = i.z2, i.z2 += bs) : (nl(i.style, n, { text: n.get("show") ? r : null, textPosition: n.getShallow("position") || "bottom" }, { isRectText: !0, useInsideStyle: !1 }), i.dirty(!1), null != i.__mapOriginalZ2 && (i.z2 = i.__mapOriginalZ2, i.__mapOriginalZ2 = null)) } function ax(t, e, i) { var n = t.getZoom() , o = t.getCenter() , a = e.zoom , r = t.dataToPoint(o); if (null != e.dx && null != e.dy) { r[0] -= e.dx, r[1] -= e.dy; o = t.pointToData(r); t.setCenter(o) } if (null != a) { if (i) { var s = i.min || 0 , l = i.max || 1 / 0; a = Math.max(Math.min(n * a, l), s) / n } t.scale[0] *= a, t.scale[1] *= a; var u = t.position , h = (e.originX - u[0]) * (a - 1) , c = (e.originY - u[1]) * (a - 1); u[0] -= h, u[1] -= c, t.updateTransform(); o = t.pointToData(r); t.setCenter(o), t.setZoom(a * n) } return { center: t.getCenter(), zoom: t.getZoom() } } Cf({ type: "map", render: function(t, e, i, n) { if (!n || "mapToggleSelect" !== n.type || n.from !== this.uid) { var o = this.group; if (o.removeAll(), !t.getHostGeoModel()) { if (n && "geoRoam" === n.type && "series" === n.componentType && n.seriesId === t.id) (a = this._mapDraw) && o.add(a.group); else if (t.needsDrawMap) { var a = this._mapDraw || new tx(i,!0); o.add(a.group), a.draw(t, e, i, this, n), this._mapDraw = a } else this._mapDraw && this._mapDraw.remove(), this._mapDraw = null; t.get("showLegendSymbol") && e.getComponent("legend") && this._renderSymbols(t, e, i) } } }, remove: function() { this._mapDraw && this._mapDraw.remove(), this._mapDraw = null, this.group.removeAll() }, dispose: function() { this._mapDraw && this._mapDraw.remove(), this._mapDraw = null }, _renderSymbols: function(x, t, e) { var _ = x.originalData , w = this.group; _.each(_.mapDimension("value"), function(t, e) { if (!isNaN(t)) { var i = _.getItemLayout(e); if (i && i.point) { var n = i.point , o = i.offset , a = new Yr({ style: { fill: x.getData().getVisual("color") }, shape: { cx: n[0] + 9 * o, cy: n[1], r: 3 }, silent: !0, z2: 8 + (o ? 0 : bs + 1) }); if (!o) { var r = x.mainSeries.getData() , s = _.getName(e) , l = r.indexOfName(s) , u = _.getItemModel(e) , h = u.getModel("label") , c = u.getModel("emphasis.label") , d = r.getItemGraphicEl(l) , f = H(x.getFormattedLabel(l, "normal"), s) , p = H(x.getFormattedLabel(l, "emphasis"), f) , g = d[ex] , m = Math.random(); if (!g) { g = d[ex] = {}; var v = T(nx, !0) , y = T(nx, !1); d.on("mouseover", v).on("mouseout", y).on("emphasis", v).on("normal", y) } P(g, { recordVersion: d[ix] = m, circle: a, labelModel: h, hoverLabelModel: c, emphasisText: p, normalText: f }), ox(g, !1) } w.add(a) } } }) } }), _f({ type: "geoRoam", event: "geoRoam", update: "updateTransform" }, function(n, t) { var o = n.componentType || "series"; t.eachComponent({ mainType: o, query: n }, function(t) { var e = t.coordinateSystem; if ("geo" === e.type) { var i = ax(e, n, t.get("scaleLimit")); t.setCenter && t.setCenter(i.center), t.setZoom && t.setZoom(i.zoom), "series" === o && E(t.seriesGroup, function(t) { t.setCenter(i.center), t.setZoom(i.zoom) }) } }) }); var rx = bt; function sx() { ve.call(this) } function lx(t) { this.name = t, this.zoomLimit, ve.call(this), this._roamTransformable = new sx, this._rawTransformable = new sx, this._center, this._zoom } function ux(t, e, i, n) { var o = i.seriesModel , a = o ? o.coordinateSystem : null; return a === this ? a[t](n) : null } function hx(t, e, i, n) { lx.call(this, t), this.map = e; var o = Ny.load(e, i); this._nameCoordMap = o.nameCoordMap, this._regionsMap = o.regionsMap, this._invertLongitute = null == n || n, this.regions = o.regions, this._rect = o.boundingRect } function cx(t, e, i, n) { var o = i.geoModel , a = i.seriesModel , r = o ? o.coordinateSystem : a ? a.coordinateSystem || (a.getReferringComponents("geo")[0] || {}).coordinateSystem : null; return r === this ? r[t](n) : null } function dx(t, e) { var i = t.get("boundingCoords"); if (null != i) { var n = i[0] , o = i[1]; isNaN(n[0]) || isNaN(n[1]) || isNaN(o[0]) || isNaN(o[1]) || this.setBoundingRect(n[0], n[1], o[0] - n[0], o[1] - n[1]) } var a, r = this.getBoundingRect(), s = t.get("layoutCenter"), l = t.get("layoutSize"), u = e.getWidth(), h = e.getHeight(), c = r.width / r.height * this.aspectScale, d = !1; if (s && l && (s = [Rl(s[0], u), Rl(s[1], h)], l = Rl(l, Math.min(u, h)), isNaN(s[0]) || isNaN(s[1]) || isNaN(l) || (d = !0)), d) { var f = {}; 1 < c ? (f.width = l, f.height = l / c) : (f.height = l, f.width = l * c), f.y = s[1] - f.height / 2, f.x = s[0] - f.width / 2 } else (a = t.getBoxLayoutParams()).aspect = c, f = bu(a, { width: u, height: h }); this.setViewRect(f.x, f.y, f.width, f.height), this.setCenter(t.get("center")), this.setZoom(t.get("zoom")) } function fx(i, t) { E(t.get("geoCoord"), function(t, e) { i.addGeoCoord(e, t) }) } b(sx, ve), lx.prototype = { constructor: lx, type: "view", dimensions: ["x", "y"], setBoundingRect: function(t, e, i, n) { return this._rect = new Di(t,e,i,n), this._rect }, getBoundingRect: function() { return this._rect }, setViewRect: function(t, e, i, n) { this.transformTo(t, e, i, n), this._viewRect = new Di(t,e,i,n) }, transformTo: function(t, e, i, n) { var o = this.getBoundingRect() , a = this._rawTransformable; a.transform = o.calculateTransform(new Di(t,e,i,n)), a.decomposeTransform(), this._updateTransform() }, setCenter: function(t) { t && (this._center = t, this._updateCenterAndZoom()) }, setZoom: function(t) { t = t || 1; var e = this.zoomLimit; e && (null != e.max && (t = Math.min(e.max, t)), null != e.min && (t = Math.max(e.min, t))), this._zoom = t, this._updateCenterAndZoom() }, getDefaultCenter: function() { var t = this.getBoundingRect(); return [t.x + t.width / 2, t.y + t.height / 2] }, getCenter: function() { return this._center || this.getDefaultCenter() }, getZoom: function() { return this._zoom || 1 }, getRoamTransform: function() { return this._roamTransformable.getLocalTransform() }, _updateCenterAndZoom: function() { var t = this._rawTransformable.getLocalTransform() , e = this._roamTransformable , i = this.getDefaultCenter() , n = this.getCenter() , o = this.getZoom(); n = bt([], n, t), i = bt([], i, t), e.origin = n, e.position = [i[0] - n[0], i[1] - n[1]], e.scale = [o, o], this._updateTransform() }, _updateTransform: function() { var t = this._roamTransformable , e = this._rawTransformable; (e.parent = t).updateTransform(), e.updateTransform(), se(this.transform || (this.transform = []), e.transform || ae()), this._rawTransform = e.getLocalTransform(), this.invTransform = this.invTransform || [], de(this.invTransform, this.transform), this.decomposeTransform() }, getTransformInfo: function() { var t = this._roamTransformable.transform , e = this._rawTransformable; return { roamTransform: t ? U(t) : ae(), rawScale: U(e.scale), rawPosition: U(e.position) } }, getViewRect: function() { return this._viewRect }, getViewRectAfterRoam: function() { var t = this.getBoundingRect().clone(); return t.applyTransform(this.transform), t }, dataToPoint: function(t, e, i) { var n = e ? this._rawTransform : this.transform; return i = i || [], n ? rx(i, t, n) : at(i, t) }, pointToData: function(t) { var e = this.invTransform; return e ? rx([], t, e) : [t[0], t[1]] }, convertToPixel: T(ux, "dataToPoint"), convertFromPixel: T(ux, "pointToData"), containPoint: function(t) { return this.getViewRectAfterRoam().contain(t[0], t[1]) } }, b(lx, ve), hx.prototype = { constructor: hx, type: "geo", dimensions: ["lng", "lat"], containCoord: function(t) { for (var e = this.regions, i = 0; i < e.length; i++) if (e[i].contain(t)) return !0; return !1 }, transformTo: function(t, e, i, n) { var o = this.getBoundingRect() , a = this._invertLongitute; o = o.clone(), a && (o.y = -o.y - o.height); var r = this._rawTransformable; if (r.transform = o.calculateTransform(new Di(t,e,i,n)), r.decomposeTransform(), a) { var s = r.scale; s[1] = -s[1] } r.updateTransform(), this._updateTransform() }, getRegion: function(t) { return this._regionsMap.get(t) }, getRegionByCoord: function(t) { for (var e = this.regions, i = 0; i < e.length; i++) if (e[i].contain(t)) return e[i] }, addGeoCoord: function(t, e) { this._nameCoordMap.set(t, e) }, getGeoCoord: function(t) { return this._nameCoordMap.get(t) }, getBoundingRect: function() { return this._rect }, dataToPoint: function(t, e, i) { if ("string" == typeof t && (t = this.getGeoCoord(t)), t) return lx.prototype.dataToPoint.call(this, t, e, i) }, convertToPixel: T(cx, "dataToPoint"), convertFromPixel: T(cx, "pointToData") }, b(hx, lx); var px = { dimensions: hx.prototype.dimensions, create: function(t, s) { var l = []; t.eachComponent("geo", function(t, e) { var i = t.get("map") , n = t.get("aspectScale") , o = !0 , a = Sd.retrieveMap(i); a && a[0] && "svg" === a[0].type ? (null == n && (n = 1), o = !1) : null == n && (n = .75); var r = new hx(i + e,i,t.get("nameMap"),o); r.aspectScale = n, r.zoomLimit = t.get("scaleLimit"), l.push(r), fx(r, t), (t.coordinateSystem = r).model = t, r.resize = dx, r.resize(t, s) }), t.eachSeries(function(t) { if ("geo" === t.get("coordinateSystem")) { var e = t.get("geoIndex") || 0; t.coordinateSystem = l[e] } }); var i = {}; return t.eachSeriesByType("map", function(t) { if (!t.getHostGeoModel()) { var e = t.getMapType(); i[e] = i[e] || [], i[e].push(t) } }), E(i, function(t, e) { var i = new hx(e,e,p(O(t, function(t) { return t.get("nameMap") }))); i.zoomLimit = W.apply(null, O(t, function(t) { return t.get("scaleLimit") })), l.push(i), i.resize = dx, i.aspectScale = t[0].get("aspectScale"), i.resize(t[0], s), E(t, function(t) { fx(t.coordinateSystem = i, t) }) }), l }, getFilledRegions: function(t, e, i) { for (var n = (t || []).slice(), o = Q(), a = 0; a < n.length; a++) o.set(n[a].name, n[a]); return E(Ny.load(e, i).regions, function(t) { var e = t.name; o.get(e) || n.push({ name: e }) }), n } }; wf("geo", px); bf(function(i) { var o = {}; i.eachSeriesByType("map", function(t) { var e = t.getMapType(); if (!t.getHostGeoModel() && !o[e]) { var l = {}; E(t.seriesGroup, function(t) { var r = t.coordinateSystem , s = t.originalData; t.get("showLegendSymbol") && i.getComponent("legend") && s.each(s.mapDimension("value"), function(t, e) { var i = s.getName(e) , n = r.getRegion(i); if (n && !isNaN(t)) { var o = l[i] || 0 , a = r.dataToPoint(n.center); l[i] = o + 1, s.setItemLayout(e, { point: a, offset: o }) } }) }); var n = t.getData(); n.each(function(t) { var e = n.getName(t) , i = n.getItemLayout(t) || {}; i.showLabel = !l[e], n.setItemLayout(t, i) }), o[e] = !0 } }) }), Sf(function(t) { t.eachSeriesByType("map", function(t) { var e = t.get("color") , i = t.getModel("itemStyle") , n = i.get("areaColor") , o = i.get("color") || e[t.seriesIndex % e.length]; t.getData().setVisual({ areaColor: n, color: o }) }) }), xf(Ld.PROCESSOR.STATISTIC, function(t) { var n = {}; t.eachSeriesByType("map", function(t) { var e = t.getHostGeoModel() , i = e ? "o" + e.id : "i" + t.getMapType(); (n[i] = n[i] || []).push(t) }), E(n, function(t, e) { for (var i = function(u, h) { var c = {}; return E(u, function(n) { n.each(n.mapDimension("value"), function(t, e) { var i = "ec-" + n.getName(e); c[i] = c[i] || [], isNaN(t) || c[i].push(t) }) }), u[0].map(u[0].mapDimension("value"), function(t, e) { for (var i, n = "ec-" + u[0].getName(e), o = 0, a = 1 / 0, r = -1 / 0, s = c[n].length, l = 0; l < s; l++) a = Math.min(a, c[n][l]), r = Math.max(r, c[n][l]), o += c[n][l]; return i = "min" === h ? a : "max" === h ? r : "average" === h ? o / s : o, 0 === s ? NaN : i }) }(O(t, function(t) { return t.getData() }), t[0].get("mapValueCalculation")), n = 0; n < t.length; n++) t[n].originalData = t[n].getData(); for (n = 0; n < t.length; n++) (t[n].seriesGroup = t)[n].needsDrawMap = 0 === n && !t[n].getHostGeoModel(), t[n].setData(i.cloneShallow()), t[n].mainSeries = t[0] }) }), yf(function(t) { var e = []; E(t.series, function(t) { t && "map" === t.type && (e.push(t), t.map = t.map || t.mapType, D(t, t.mapLocation)) }) }), ey("map", [{ type: "mapToggleSelect", event: "mapselectchanged", method: "toggleSelected" }, { type: "mapSelect", event: "mapselected", method: "select" }, { type: "mapUnSelect", event: "mapunselected", method: "unSelect" }]); var gx = E , mx = "\0__link_datas" , vx = "\0__link_mainData"; function yx(i) { var n = i.mainData , t = i.datas; t || (t = { main: n }, i.datasAttr = { main: "data" }), i.datas = i.mainData = null, Mx(n, t, i), gx(t, function(e) { gx(n.TRANSFERABLE_METHODS, function(t) { e.wrapMethod(t, T(xx, i)) }) }), n.wrapMethod("cloneShallow", T(bx, i)), gx(n.CHANGABLE_METHODS, function(t) { n.wrapMethod(t, T(_x, i)) }), Y(t[n.dataType] === n) } function xx(t, e) { if (function(t) { return t[vx] === t }(this)) { var i = P({}, this[mx]); Mx(i[this.dataType] = e, i, t) } else Ix(e, this.dataType, this[vx], t); return e } function _x(t, e) { return t.struct && t.struct.update(this), e } function bx(i, n) { return gx(n[mx], function(t, e) { t !== n && Ix(t.cloneShallow(), e, n, i) }), n } function Sx(t) { var e = this[vx]; return null == t || null == e ? e : e[mx][t] } function Mx(i, t, n) { i[mx] = {}, gx(t, function(t, e) { Ix(t, e, i, n) }) } function Ix(t, e, i, n) { (i[mx][e] = t)[vx] = i, t.dataType = e, n.struct && (t[n.structAttr] = n.struct, n.struct[n.datasAttr[e]] = t), t.getLinkedData = Sx } function Tx(t, e) { this.name = t || "", this.depth = 0, this.height = 0, this.parentNode = null, this.dataIndex = -1, this.children = [], this.viewChildren = [], this.hostTree = e } function Ax(e, t) { this.root, this.data, this._nodes = [], this.hostModel = e, this.levelModels = O(t || [], function(t) { return new Cl(t,e,e.ecModel) }) } function Dx(t, e) { var i = e.children; t.parentNode !== e && (i.push(t), t.parentNode = e) } function Cx(t, e) { var i = t.isExpand ? t.children : [] , n = t.parentNode.children , o = t.hierNode.i ? n[t.hierNode.i - 1] : null; if (i.length) { !function(t) { var e = t.children , i = e.length , n = 0 , o = 0; for (; 0 <= --i; ) { var a = e[i]; a.hierNode.prelim += n, a.hierNode.modifier += n, o += a.hierNode.change, n += a.hierNode.shift + o } }(t); var a = (i[0].hierNode.prelim + i[i.length - 1].hierNode.prelim) / 2; o ? (t.hierNode.prelim = o.hierNode.prelim + e(t, o), t.hierNode.modifier = t.hierNode.prelim - a) : t.hierNode.prelim = a } else o && (t.hierNode.prelim = o.hierNode.prelim + e(t, o)); t.parentNode.hierNode.defaultAncestor = function(t, e, i, n) { if (e) { for (var o = t, a = t, r = a.parentNode.children[0], s = e, l = o.hierNode.modifier, u = a.hierNode.modifier, h = r.hierNode.modifier, c = s.hierNode.modifier; s = Nx(s), a = Ox(a), s && a; ) { o = Nx(o), r = Ox(r), o.hierNode.ancestor = t; var d = s.hierNode.prelim + c - a.hierNode.prelim - u + n(s, a); 0 < d && (Ex((p = t, g = i, (f = s).hierNode.ancestor.parentNode === p.parentNode ? f.hierNode.ancestor : g), t, d), u += d, l += d), c += s.hierNode.modifier, u += a.hierNode.modifier, l += o.hierNode.modifier, h += r.hierNode.modifier } s && !Nx(o) && (o.hierNode.thread = s, o.hierNode.modifier += c - l), a && !Ox(r) && (r.hierNode.thread = a, r.hierNode.modifier += u - h, i = t) } var f, p, g; return i }(t, o, t.parentNode.hierNode.defaultAncestor || n[0], e) } function Lx(t) { var e = t.hierNode.prelim + t.parentNode.hierNode.modifier; t.setLayout({ x: e }, !0), t.hierNode.modifier += t.parentNode.hierNode.modifier } function kx(t) { return arguments.length ? t : Rx } function Px(t, e) { var i = {}; return t -= Math.PI / 2, i.x = e * Math.cos(t), i.y = e * Math.sin(t), i } function Nx(t) { var e = t.children; return e.length && t.isExpand ? e[e.length - 1] : t.hierNode.thread } function Ox(t) { var e = t.children; return e.length && t.isExpand ? e[0] : t.hierNode.thread } function Ex(t, e, i) { var n = i / (e.hierNode.i - t.hierNode.i); e.hierNode.change -= n, e.hierNode.shift += i, e.hierNode.modifier += i, e.hierNode.prelim += i, t.hierNode.change += n } function Rx(t, e) { return t.parentNode === e.parentNode ? 1 : 2 } Tx.prototype = { constructor: Tx, isRemoved: function() { return this.dataIndex < 0 }, eachNode: function(t, e, i) { "function" == typeof t && (i = e, e = t, t = null), R(t = t || {}) && (t = { order: t }); var n, o = t.order || "preorder", a = this[t.attr || "children"]; "preorder" === o && (n = e.call(i, this)); for (var r = 0; !n && r < a.length; r++) a[r].eachNode(t, e, i); "postorder" === o && e.call(i, this) }, updateDepthAndHeight: function(t) { var e = 0; this.depth = t; for (var i = 0; i < this.children.length; i++) { var n = this.children[i]; n.updateDepthAndHeight(t + 1), n.height > e && (e = n.height) } this.height = e + 1 }, getNodeById: function(t) { if (this.getId() === t) return this; for (var e = 0, i = this.children, n = i.length; e < n; e++) { var o = i[e].getNodeById(t); if (o) return o } }, contains: function(t) { if (t === this) return !0; for (var e = 0, i = this.children, n = i.length; e < n; e++) { var o = i[e].contains(t); if (o) return o } }, getAncestors: function(t) { for (var e = [], i = t ? this : this.parentNode; i; ) e.push(i), i = i.parentNode; return e.reverse(), e }, getValue: function(t) { var e = this.hostTree.data; return e.get(e.getDimension(t || "value"), this.dataIndex) }, setLayout: function(t, e) { 0 <= this.dataIndex && this.hostTree.data.setItemLayout(this.dataIndex, t, e) }, getLayout: function() { return this.hostTree.data.getItemLayout(this.dataIndex) }, getModel: function(t) { if (!(this.dataIndex < 0)) { var e = this.hostTree.data.getItemModel(this.dataIndex) , i = this.getLevelModel(); return i ? e.getModel(t, i.getModel(t)) : e.getModel(t) } }, getLevelModel: function() { return (this.hostTree.levelModels || [])[this.depth] }, setVisual: function(t, e) { 0 <= this.dataIndex && this.hostTree.data.setItemVisual(this.dataIndex, t, e) }, getVisual: function(t, e) { return this.hostTree.data.getItemVisual(this.dataIndex, t, e) }, getRawIndex: function() { return this.hostTree.data.getRawIndex(this.dataIndex) }, getId: function() { return this.hostTree.data.getId(this.dataIndex) }, isAncestorOf: function(t) { for (var e = t.parentNode; e; ) { if (e === this) return !0; e = e.parentNode } return !1 }, isDescendantOf: function(t) { return t !== this && t.isAncestorOf(this) } }, Ax.prototype = { constructor: Ax, type: "tree", eachNode: function(t, e, i) { this.root.eachNode(t, e, i) }, getNodeByDataIndex: function(t) { var e = this.data.getRawIndex(t); return this._nodes[e] }, getNodeByName: function(t) { return this.root.getNodeByName(t) }, update: function() { for (var t = this.data, e = this._nodes, i = 0, n = e.length; i < n; i++) e[i].dataIndex = -1; for (i = 0, n = t.count(); i < n; i++) e[t.getRawIndex(i)].dataIndex = i }, clearLayouts: function() { this.data.clearItemLayouts() } }, Ax.createTree = function(t, e, i, n) { var s = new Ax(e,i && i.levels) , l = [] , u = 1; !function t(e, i) { var n = e.value; u = Math.max(u, L(n) ? n.length : 1); l.push(e); var o = new Tx(e.name,s); i ? Dx(o, i) : s.root = o; s._nodes.push(o); var a = e.children; if (a) for (var r = 0; r < a.length; r++) t(a[r], o) }(t), s.root.updateDepthAndHeight(0); var o = lp(l, { coordDimensions: ["value"], dimensionsCount: u }) , a = new Yf(o,e); return a.initData(l), n && n(a), yx({ mainData: a, struct: s, structAttr: "tree" }), s.update(), s } , sc.extend({ type: "series.tree", layoutInfo: null, layoutMode: "box", getInitialData: function(t) { var e = { name: t.name, children: t.data } , n = new Cl(t.leaves || {},this,this.ecModel) , o = Ax.createTree(e, this, {}, function(t) { t.wrapMethod("getItemModel", function(t, e) { var i = o.getNodeByDataIndex(e); return i.children.length && i.isExpand || (t.parentModel = n), t }) }); var i = 0; o.eachNode("preorder", function(t) { t.depth > i && (i = t.depth) }); var a = t.expandAndCollapse && 0 <= t.initialTreeDepth ? t.initialTreeDepth : i; return o.root.eachNode("preorder", function(t) { var e = t.hostTree.data.getRawDataItem(t.dataIndex); t.isExpand = e && null != e.collapsed ? !e.collapsed : t.depth <= a }), o.data }, getOrient: function() { var t = this.get("orient"); return "horizontal" === t ? t = "LR" : "vertical" === t && (t = "TB"), t }, setZoom: function(t) { this.option.zoom = t }, setCenter: function(t) { this.option.center = t }, formatTooltip: function(t) { for (var e = this.getData().tree, i = e.root.children[0], n = e.getNodeByDataIndex(t), o = n.getValue(), a = n.name; n && n !== i; ) a = n.parentNode.name + "." + a, n = n.parentNode; return au(a + (isNaN(o) || null == o ? "" : " : " + o)) }, defaultOption: { zlevel: 0, z: 2, coordinateSystem: "view", left: "12%", top: "12%", right: "12%", bottom: "12%", layout: "orthogonal", edgeShape: "curve", edgeForkPosition: "50%", roam: !1, nodeScaleRatio: .4, center: null, zoom: 1, orient: "LR", symbol: "emptyCircle", symbolSize: 7, expandAndCollapse: !0, initialTreeDepth: 2, lineStyle: { color: "#ccc", width: 1.5, curveness: .5 }, itemStyle: { color: "lightsteelblue", borderColor: "#c23531", borderWidth: 1.5 }, label: { show: !0, color: "#555" }, leaves: { label: { show: !0 } }, animationEasing: "linear", animationDuration: 700, animationDurationUpdate: 1e3 } }); var zx = Cs({ shape: { parentPoint: [], childPoints: [], orient: "", forkPosition: "" }, style: { stroke: "#000", fill: null }, buildPath: function(t, e) { var i = e.childPoints , n = i.length , o = e.parentPoint , a = i[0] , r = i[n - 1]; if (1 === n) return t.moveTo(o[0], o[1]), void t.lineTo(a[0], a[1]); var s = e.orient , l = "TB" === s || "BT" === s ? 0 : 1 , u = 1 - l , h = Rl(e.forkPosition, 1) , c = []; c[l] = o[l], c[u] = o[u] + (r[u] - o[u]) * h, t.moveTo(o[0], o[1]), t.lineTo(c[0], c[1]), t.moveTo(a[0], a[1]), c[l] = a[l], t.lineTo(c[0], c[1]), c[l] = r[l], t.lineTo(c[0], c[1]), t.lineTo(r[0], r[1]); for (var d = 1; d < n - 1; d++) { var f = i[d]; t.moveTo(f[0], f[1]), c[l] = f[l], t.lineTo(c[0], c[1]) } } }); function Bx(t, e) { var i = t.getItemLayout(e); return i && !isNaN(i.x) && !isNaN(i.y) && "none" !== t.getItemVisual(e, "symbol") } function Vx(t, e, i) { return i.itemModel = e, i.itemStyle = e.getModel("itemStyle").getItemStyle(), i.hoverItemStyle = e.getModel("emphasis.itemStyle").getItemStyle(), i.lineStyle = e.getModel("lineStyle").getLineStyle(), i.labelModel = e.getModel("label"), i.hoverLabelModel = e.getModel("emphasis.label"), !1 === t.isExpand && 0 !== t.children.length ? i.symbolInnerColor = i.itemStyle.fill : i.symbolInnerColor = "#fff", i } function Gx(t, e, i, n, o, a) { var r = !i , s = t.tree.getNodeByDataIndex(e) , l = s.getModel() , u = (a = Vx(s, l, a), t.tree.root) , h = s.parentNode === u ? s : s.parentNode || s , c = t.getItemGraphicEl(h.dataIndex) , d = h.getLayout() , f = c ? { x: c.position[0], y: c.position[1], rawX: c.__radialOldRawX, rawY: c.__radialOldRawY } : d , p = s.getLayout(); r ? (i = new Xg(t,e,a)).attr("position", [f.x, f.y]) : i.updateData(t, e, a), i.__radialOldRawX = i.__radialRawX, i.__radialOldRawY = i.__radialRawY, i.__radialRawX = p.rawX, i.__radialRawY = p.rawY, n.add(i), t.setItemGraphicEl(e, i), cl(i, { position: [p.x, p.y] }, o); var g = i.getSymbolPath(); if ("radial" === a.layout) { var m, v, y = u.children[0], x = y.getLayout(), _ = y.children.length; if (p.x === x.x && !0 === s.isExpand) { var w = {}; w.x = (y.children[0].getLayout().x + y.children[_ - 1].getLayout().x) / 2, w.y = (y.children[0].getLayout().y + y.children[_ - 1].getLayout().y) / 2, (m = Math.atan2(w.y - x.y, w.x - x.x)) < 0 && (m = 2 * Math.PI + m), (v = w.x < x.x) && (m -= Math.PI) } else (m = Math.atan2(p.y - x.y, p.x - x.x)) < 0 && (m = 2 * Math.PI + m), 0 === s.children.length || 0 !== s.children.length && !1 === s.isExpand ? (v = p.x < x.x) && (m -= Math.PI) : (v = p.x > x.x) || (m -= Math.PI); var b = v ? "left" : "right" , S = a.labelModel.get("rotate") , M = S * (Math.PI / 180); g.setStyle({ textPosition: a.labelModel.get("position") || b, textRotation: null == S ? -m : M, textOrigin: "center", verticalAlign: "middle" }) } !function(t, e, i, n, o, a, r, s, l) { var u = l.edgeShape , h = n.__edge; if ("curve" === u) e.parentNode && e.parentNode !== i && cl(h = h || (n.__edge = new ds({ shape: Wx(l, o, o), style: D({ opacity: 0, strokeNoScale: !0 }, l.lineStyle) })), { shape: Wx(l, a, r), style: { opacity: 1 } }, t); else if ("polyline" === u && "orthogonal" === l.layout && e !== i && e.children && 0 !== e.children.length && !0 === e.isExpand) { for (var c = e.children, d = [], f = 0; f < c.length; f++) { var p = c[f].getLayout(); d.push([p.x, p.y]) } cl(h = h || (n.__edge = new zx({ shape: { parentPoint: [r.x, r.y], childPoints: [[r.x, r.y]], orient: l.orient, forkPosition: l.edgeForkPosition }, style: D({ opacity: 0, strokeNoScale: !0 }, l.lineStyle) })), { shape: { parentPoint: [r.x, r.y], childPoints: d }, style: { opacity: 1 } }, t) } s.add(h) }(o, s, u, i, f, d, p, n, a) } function Fx(t, e, i, n, o, a) { for (var r, s = t.tree.getNodeByDataIndex(e), l = t.tree.root, u = s.getModel(), h = (a = Vx(s, u, a), s.parentNode === l ? s : s.parentNode || s), c = a.edgeShape; null == (r = h.getLayout()); ) h = h.parentNode === l ? h : h.parentNode || h; cl(i, { position: [r.x + 1, r.y + 1] }, o, function() { n.remove(i), t.setItemGraphicEl(e, null) }), i.fadeOut(null, { keepLabel: !0 }); var d = t.getItemGraphicEl(h.dataIndex).__edge , f = i.__edge || (!1 === h.isExpand || 1 === h.children.length ? d : void 0); c = a.edgeShape; f && ("curve" === c ? cl(f, { shape: Wx(a, r, r), style: { opacity: 0 } }, o, function() { n.remove(f) }) : "polyline" === c && "orthogonal" === a.layout && cl(f, { shape: { parentPoint: [r.x, r.y], childPoints: [[r.x, r.y]] }, style: { opacity: 0 } }, o, function() { n.remove(f) })) } function Wx(t, e, i) { var n, o, a, r, s, l, u, h, c = t.orient; if ("radial" !== t.layout) return s = e.x, u = e.y, l = i.x, h = i.y, "LR" !== c && "RL" !== c || (n = s + (l - s) * t.curvature, o = u, a = l + (s - l) * t.curvature, r = h), "TB" !== c && "BT" !== c || (n = s, o = u + (h - u) * t.curvature, a = l, r = h + (u - h) * t.curvature), { x1: s, y1: u, x2: l, y2: h, cpx1: n, cpy1: o, cpx2: a, cpy2: r }; s = e.rawX, u = e.rawY, l = i.rawX, h = i.rawY; var d = Px(s, u) , f = Px(s, u + (h - u) * t.curvature) , p = Px(l, h + (u - h) * t.curvature) , g = Px(l, h); return { x1: d.x, y1: d.y, x2: g.x, y2: g.y, cpx1: f.x, cpy1: f.y, cpx2: p.x, cpy2: p.y } } function Hx(t, e) { for (var i, n = [t]; i = n.pop(); ) if (e(i), i.isExpand) { var o = i.children; if (o.length) for (var a = o.length - 1; 0 <= a; a--) n.push(o[a]) } } Cf({ type: "tree", init: function(t, e) { this._oldTree, this._mainGroup = new Ci, this._controller = new Vy(e.getZr()), this._controllerHost = { target: this.group }, this.group.add(this._mainGroup) }, render: function(n, t, i, e) { var o = n.getData() , a = n.layoutInfo , r = this._mainGroup , s = n.get("layout"); "radial" === s ? r.attr("position", [a.x + a.width / 2, a.y + a.height / 2]) : r.attr("position", [a.x, a.y]), this._updateViewCoordSys(n, a, s), this._updateController(n, t, i); var l = this._data , u = { expandAndCollapse: n.get("expandAndCollapse"), layout: s, edgeShape: n.get("edgeShape"), edgeForkPosition: n.get("edgeForkPosition"), orient: n.getOrient(), curvature: n.get("lineStyle.curveness"), symbolRotate: n.get("symbolRotate"), symbolOffset: n.get("symbolOffset"), hoverAnimation: n.get("hoverAnimation"), useNameLabel: !0, fadeIn: !0 }; o.diff(l).add(function(t) { Bx(o, t) && Gx(o, t, null, r, n, u) }).update(function(t, e) { var i = l.getItemGraphicEl(e); Bx(o, t) ? Gx(o, t, i, r, n, u) : i && Fx(l, e, i, r, n, u) }).remove(function(t) { var e = l.getItemGraphicEl(t); e && Fx(l, t, e, r, n, u) }).execute(), this._nodeScaleRatio = n.get("nodeScaleRatio"), this._updateNodeAndLinkScale(n), !0 === u.expandAndCollapse && o.eachItemGraphicEl(function(t, e) { t.off("click").on("click", function() { i.dispatchAction({ type: "treeExpandAndCollapse", seriesId: n.id, dataIndex: e }) }) }), this._data = o }, _updateViewCoordSys: function(t) { var i = t.getData() , n = []; i.each(function(t) { var e = i.getItemLayout(t); !e || isNaN(e.x) || isNaN(e.y) || n.push([+e.x, +e.y]) }); var e = [] , o = []; Wa(n, e, o); var a = this._min , r = this._max; o[0] - e[0] == 0 && (e[0] = a ? a[0] : e[0] - 1, o[0] = r ? r[0] : o[0] + 1), o[1] - e[1] == 0 && (e[1] = a ? a[1] : e[1] - 1, o[1] = r ? r[1] : o[1] + 1); var s = t.coordinateSystem = new lx; s.zoomLimit = t.get("scaleLimit"), s.setBoundingRect(e[0], e[1], o[0] - e[0], o[1] - e[1]), s.setCenter(t.get("center")), s.setZoom(t.get("zoom")), this.group.attr({ position: s.position, scale: s.scale }), this._viewCoordSys = s, this._min = e, this._max = o }, _updateController: function(o, t, a) { var e = this._controller , i = this._controllerHost , r = this.group; e.setPointerChecker(function(t, e, i) { var n = r.getBoundingRect(); return n.applyTransform(r.transform), n.contain(e, i) && !$y(t, a, o) }), e.enable(o.get("roam")), i.zoomLimit = o.get("scaleLimit"), i.zoom = o.coordinateSystem.getZoom(), e.off("pan").off("zoom").on("pan", function(t) { jy(i, t.dx, t.dy), a.dispatchAction({ seriesId: o.id, type: "treeRoam", dx: t.dx, dy: t.dy }) }, this).on("zoom", function(t) { qy(i, t.scale, t.originX, t.originY), a.dispatchAction({ seriesId: o.id, type: "treeRoam", zoom: t.scale, originX: t.originX, originY: t.originY }), this._updateNodeAndLinkScale(o) }, this) }, _updateNodeAndLinkScale: function(t) { var e = t.getData() , i = this._getNodeGlobalScale(t) , n = [i, i]; e.eachItemGraphicEl(function(t, e) { t.attr("scale", n) }) }, _getNodeGlobalScale: function(t) { var e = t.coordinateSystem; if ("view" !== e.type) return 1; var i = this._nodeScaleRatio , n = e.scale , o = n && n[0] || 1; return ((e.getZoom() - 1) * i + 1) / o }, dispose: function() { this._controller && this._controller.dispose(), this._controllerHost = {} }, remove: function() { this._mainGroup.removeAll(), this._data = null } }), _f({ type: "treeExpandAndCollapse", event: "treeExpandAndCollapse", update: "update" }, function(n, t) { t.eachComponent({ mainType: "series", subType: "tree", query: n }, function(t) { var e = n.dataIndex , i = t.getData().tree.getNodeByDataIndex(e); i.isExpand = !i.isExpand }) }), _f({ type: "treeRoam", event: "treeRoam", update: "none" }, function(i, t) { t.eachComponent({ mainType: "series", subType: "tree", query: i }, function(t) { var e = ax(t.coordinateSystem, i); t.setCenter && t.setCenter(e.center), t.setZoom && t.setZoom(e.zoom) }) }); function Zx(t, e, i) { if (t && 0 <= _(e, t.type)) { var n = i.getData().tree.root , o = t.targetNode; if ("string" == typeof o && (o = n.getNodeById(o)), o && n.contains(o)) return { node: o }; var a = t.targetNodeId; if (null != a && (o = n.getNodeById(a))) return { node: o } } } function Ux(t) { for (var e = []; t; ) (t = t.parentNode) && e.push(t); return e.reverse() } function Xx(t, e) { return 0 <= _(Ux(t), e) } function Yx(t, e) { for (var i = []; t; ) { var n = t.dataIndex; i.push({ name: t.name, dataIndex: n, value: e.getRawValue(n) }), t = t.parentNode } return i.reverse(), i } Sf(Lm("tree", "circle")), bf(function(t, e) { t.eachSeriesByType("tree", function(t) { !function(t, e) { var i = function(t, e) { return bu(t.getBoxLayoutParams(), { width: e.getWidth(), height: e.getHeight() }) }(t, e); t.layoutInfo = i; var n = t.get("layout") , o = 0 , a = 0 , r = null; r = "radial" === n ? (o = 2 * Math.PI, a = Math.min(i.height, i.width) / 2, kx(function(t, e) { return (t.parentNode === e.parentNode ? 1 : 2) / t.depth })) : (o = i.width, a = i.height, kx()); var s = t.getData().tree.root , l = s.children[0]; if (l) { !function(t) { t.hierNode = { defaultAncestor: null, ancestor: t, prelim: 0, modifier: 0, change: 0, shift: 0, i: 0, thread: null }; for (var e, i, n = [t]; e = n.pop(); ) if (i = e.children, e.isExpand && i.length) for (var o = i.length - 1; 0 <= o; o--) { var a = i[o]; a.hierNode = { defaultAncestor: null, ancestor: a, prelim: 0, modifier: 0, change: 0, shift: 0, i: o, thread: null }, n.push(a) } }(s), function(t, e, i) { for (var n, o = [t], a = []; n = o.pop(); ) if (a.push(n), n.isExpand) { var r = n.children; if (r.length) for (var s = 0; s < r.length; s++) o.push(r[s]) } for (; n = a.pop(); ) e(n, i) }(l, Cx, r), s.hierNode.modifier = -l.hierNode.prelim, Hx(l, Lx); var u = l , h = l , c = l; Hx(l, function(t) { var e = t.getLayout().x; e < u.getLayout().x && (u = t), e > h.getLayout().x && (h = t), t.depth > c.depth && (c = t) }); var d = u === h ? 1 : r(u, h) / 2 , f = d - u.getLayout().x , p = 0 , g = 0 , m = 0 , v = 0; if ("radial" === n) p = o / (h.getLayout().x + d + f), g = a / (c.depth - 1 || 1), Hx(l, function(t) { m = (t.getLayout().x + f) * p, v = (t.depth - 1) * g; var e = Px(m, v); t.setLayout({ x: e.x, y: e.y, rawX: m, rawY: v }, !0) }); else { var y = t.getOrient(); "RL" === y || "LR" === y ? (g = a / (h.getLayout().x + d + f), p = o / (c.depth - 1 || 1), Hx(l, function(t) { v = (t.getLayout().x + f) * g, m = "LR" === y ? (t.depth - 1) * p : o - (t.depth - 1) * p, t.setLayout({ x: m, y: v }, !0) })) : "TB" !== y && "BT" !== y || (p = o / (h.getLayout().x + d + f), g = a / (c.depth - 1 || 1), Hx(l, function(t) { m = (t.getLayout().x + f) * p, v = "TB" === y ? (t.depth - 1) * g : a - (t.depth - 1) * g, t.setLayout({ x: m, y: v }, !0) })) } } }(t, e) }) }), sc.extend({ type: "series.treemap", layoutMode: "box", dependencies: ["grid", "polar"], preventUsingHoverLayer: !0, _viewRoot: null, defaultOption: { progressive: 0, left: "center", top: "middle", right: null, bottom: null, width: "80%", height: "80%", sort: !0, clipWindow: "origin", squareRatio: .5 * (1 + Math.sqrt(5)), leafDepth: null, drillDownIcon: "▶", zoomToNodeRatio: .1024, roam: !0, nodeClick: "zoomToNode", animation: !0, animationDurationUpdate: 900, animationEasing: "quinticInOut", breadcrumb: { show: !0, height: 22, left: "center", top: "bottom", emptyItemWidth: 25, itemStyle: { color: "rgba(0,0,0,0.7)", borderColor: "rgba(255,255,255,0.7)", borderWidth: 1, shadowColor: "rgba(150,150,150,1)", shadowBlur: 3, shadowOffsetX: 0, shadowOffsetY: 0, textStyle: { color: "#fff" } }, emphasis: { textStyle: {} } }, label: { show: !0, distance: 0, padding: 5, position: "inside", color: "#fff", ellipsis: !0 }, upperLabel: { show: !1, position: [0, "50%"], height: 20, color: "#fff", ellipsis: !0, verticalAlign: "middle" }, itemStyle: { color: null, colorAlpha: null, colorSaturation: null, borderWidth: 0, gapWidth: 0, borderColor: "#fff", borderColorSaturation: null }, emphasis: { upperLabel: { show: !0, position: [0, "50%"], color: "#fff", ellipsis: !0, verticalAlign: "middle" } }, visualDimension: 0, visualMin: null, visualMax: null, color: [], colorAlpha: null, colorSaturation: null, colorMappingBy: "index", visibleMin: 10, childrenVisibleMin: null, levels: [] }, getInitialData: function(t, e) { var i = { name: t.name, children: t.data }; !function i(t) { var n = 0; E(t.children, function(t) { i(t); var e = t.value; L(e) && (e = e[0]), n += e }); var e = t.value; L(e) && (e = e[0]); null != e && !isNaN(e) || (e = n); e < 0 && (e = 0); L(t.value) ? t.value[0] = e : t.value = e }(i); var n = t.levels || [] , o = O((n = t.levels = function(t, e) { var n, i = e.get("color"); if (!i) return; if (E(t = t || [], function(t) { var e = new Cl(t) , i = e.get("color"); (e.get("itemStyle.color") || i && "none" !== i) && (n = !0) }), !n) { (t[0] || (t[0] = {})).color = i.slice() } return t }(n, e)) || [], function(t) { return new Cl(t,this,e) }, this) , a = Ax.createTree(i, this, null, function(t) { t.wrapMethod("getItemModel", function(t, e) { var i = a.getNodeByDataIndex(e) , n = o[i.depth]; return n && (t.parentModel = n), t }) }); return a.data }, optionUpdated: function() { this.resetViewRoot() }, formatTooltip: function(t) { var e = this.getData() , i = this.getRawValue(t) , n = L(i) ? tu(i[0]) : tu(i); return au(e.getName(t) + ": " + n) }, getDataParams: function(t) { var e = sc.prototype.getDataParams.apply(this, arguments) , i = this.getData().tree.getNodeByDataIndex(t); return e.treePathInfo = Yx(i, this), e }, setLayoutInfo: function(t) { this.layoutInfo = this.layoutInfo || {}, P(this.layoutInfo, t) }, mapIdToIndex: function(t) { var e = this._idIndexMap; e || (e = this._idIndexMap = Q(), this._idIndexMapCount = 0); var i = e.get(t); return null == i && e.set(t, i = this._idIndexMapCount++), i }, getViewRoot: function() { return this._viewRoot }, resetViewRoot: function(t) { t ? this._viewRoot = t : t = this._viewRoot; var e = this.getRawData().tree.root; t && (t === e || e.contains(t)) || (this._viewRoot = e) } }); var jx = 5; function qx(t) { this.group = new Ci, t.add(this.group) } function Kx(t, e, i, n, o, a) { var r = [[o ? t : t - jx, e], [t + i, e], [t + i, e + n], [o ? t : t - jx, e + n]]; return a || r.splice(2, 0, [t + i + jx, e + n / 2]), o || r.push([t, e + n / 2]), r } qx.prototype = { constructor: qx, render: function(t, e, i, n) { var o = t.getModel("breadcrumb") , a = this.group; if (a.removeAll(), o.get("show") && i) { var r = o.getModel("itemStyle") , s = r.getModel("textStyle") , l = { pos: { left: o.get("left"), right: o.get("right"), top: o.get("top"), bottom: o.get("bottom") }, box: { width: e.getWidth(), height: e.getHeight() }, emptyItemWidth: o.get("emptyItemWidth"), totalWidth: 0, renderList: [] }; this._prepare(i, l, s), this._renderContent(t, l, r, s, n), Su(a, l.pos, l.box) } }, _prepare: function(t, e, i) { for (var n = t; n; n = n.parentNode) { var o = n.getModel().get("name") , a = i.getTextRect(o) , r = Math.max(a.width + 16, e.emptyItemWidth); e.totalWidth += r + 8, e.renderList.push({ node: n, text: o, width: r }) } }, _renderContent: function(t, e, i, n, o) { for (var a, r, s = 0, l = e.emptyItemWidth, u = t.get("breadcrumb.height"), h = function(t, e, i) { var n = e.width , o = e.height , a = Rl(t.x, n) , r = Rl(t.y, o) , s = Rl(t.x2, n) , l = Rl(t.y2, o); return (isNaN(a) || isNaN(parseFloat(t.x))) && (a = 0), (isNaN(s) || isNaN(parseFloat(t.x2))) && (s = n), (isNaN(r) || isNaN(parseFloat(t.y))) && (r = 0), (isNaN(l) || isNaN(parseFloat(t.y2))) && (l = o), i = iu(i || 0), { width: Math.max(s - a - i[1] - i[3], 0), height: Math.max(l - r - i[0] - i[2], 0) } }(e.pos, e.box), c = e.totalWidth, d = e.renderList, f = d.length - 1; 0 <= f; f--) { var p = d[f] , g = p.node , m = p.width , v = p.text; c > h.width && (c -= m - l, m = l, v = null); var y = new Qr({ shape: { points: Kx(s, 0, m, u, f === d.length - 1, 0 === f) }, style: D(i.getItemStyle(), { lineJoin: "bevel", text: v, textFill: n.getTextColor(), textFont: n.getFont() }), z: 10, onclick: T(o, g) }); this.group.add(y), a = t, r = g, y.eventData = { componentType: "series", componentSubType: "treemap", componentIndex: a.componentIndex, seriesIndex: a.componentIndex, seriesName: a.name, seriesType: "treemap", selfType: "breadcrumb", nodeData: { dataIndex: r && r.dataIndex, name: r && r.name }, treePathInfo: r && Yx(r, a) }, s += m + 8 } }, remove: function() { this.group.removeAll() } }; function $x(t) { var e = s_(t); return e.stroke = e.fill = e.lineWidth = null, e } var Jx = A , Qx = Ci , t_ = rs , e_ = E , i_ = ["label"] , n_ = ["emphasis", "label"] , o_ = ["upperLabel"] , a_ = ["emphasis", "upperLabel"] , r_ = 10 , s_ = ha([["fill", "color"], ["stroke", "strokeColor"], ["lineWidth", "strokeWidth"], ["shadowBlur"], ["shadowOffsetX"], ["shadowOffsetY"], ["shadowColor"]]); function l_(h, r, s, l, u, e, c, t, i, n) { if (c) { var d = c.getLayout() , o = h.getData(); if (o.setItemGraphicEl(c.dataIndex, null), d && d.isInView) { var f = d.width , p = d.height , g = d.borderWidth , m = d.invisible , v = c.getRawIndex() , y = t && t.getRawIndex() , a = c.viewChildren , x = d.upperHeight , _ = a && a.length , w = c.getModel("itemStyle") , b = c.getModel("emphasis.itemStyle") , S = L("nodeGroup", Qx); if (S) { if (i.add(S), S.attr("position", [d.x || 0, d.y || 0]), S.__tmNodeWidth = f, S.__tmNodeHeight = p, d.isAboveViewRoot) return S; var M = c.getModel() , I = L("background", t_, n, 1); if (I && function(t, e, i) { if (e.dataIndex = c.dataIndex, e.seriesIndex = h.seriesIndex, e.setShape({ x: 0, y: 0, width: f, height: p }), m) A(e); else { e.invisible = !1; var n = c.getVisual("borderColor", !0) , o = b.get("borderColor") , a = $x(w); a.fill = n; var r = s_(b); if (r.fill = o, i) { var s = f - 2 * g; D(a, r, n, s, x, { x: g, y: 0, width: s, height: x }) } else a.text = r.text = null; e.setStyle(a), Us(e, r) } t.add(e) }(S, I, _ && d.upperLabelHeight), _) Qs(S) && Js(S, !1), I && (Js(I, !0), o.setItemGraphicEl(c.dataIndex, I)); else { var T = L("content", t_, n, 2); T && function(t, e) { e.dataIndex = c.dataIndex, e.seriesIndex = h.seriesIndex; var i = Math.max(f - 2 * g, 0) , n = Math.max(p - 2 * g, 0); if (e.culling = !0, e.setShape({ x: g, y: g, width: i, height: n }), m) A(e); else { e.invisible = !1; var o = c.getVisual("color", !0) , a = $x(w); a.fill = o; var r = s_(b); D(a, r, o, i, n), e.setStyle(a), Us(e, r) } t.add(e) }(S, T), I && Qs(I) && Js(I, !1), Js(S, !0), o.setItemGraphicEl(c.dataIndex, S) } return S } } } function A(t) { t.invisible || e.push(t) } function D(t, e, i, n, o, a) { var r = M.get("name") , s = M.getModel(a ? o_ : i_) , l = M.getModel(a ? a_ : n_) , u = s.getShallow("show"); el(t, e, s, l, { defaultText: u ? r : null, autoColor: i, isRectText: !0, labelFetcher: h, labelDataIndex: c.dataIndex, labelProp: a ? "upperLabel" : "label" }), C(t, a, d), C(e, a, d), a && (t.textRect = k(a)), t.truncate = u && s.get("ellipsis") ? { outerWidth: n, outerHeight: o, minChar: 2 } : null } function C(t, e, i) { var n = t.text; if (!e && i.isLeafRoot && null != n) { var o = h.get("drillDownIcon", !0); t.text = o ? o + " " + n : n } } function L(t, e, i, n) { var o = null != y && s[t][y] , a = u[t]; return o ? (s[t][y] = null, function(t, e, i) { (t[v] = {}).old = "nodeGroup" === i ? e.position.slice() : P({}, e.shape) }(a, o, t)) : m || ((o = new e({ z: function(t, e) { var i = t * r_ + e; return (i - 1) / i }(i, n) })).__tmDepth = i, function(t, e, i) { var n = t[v] = {} , o = c.parentNode; if (o && (!l || "drillDown" === l.direction)) { var a = 0 , r = 0 , s = u.background[o.getRawIndex()]; !l && s && s.old && (a = s.old.width, r = s.old.height), n.old = "nodeGroup" === i ? [0, r] : { x: a, y: r, width: 0, height: 0 } } n.fadein = "nodeGroup" !== i }(a, 0, o.__tmStorageName = t)), r[t][v] = o } } Cf({ type: "treemap", init: function(t, e) { this._containerGroup, this._storage = { nodeGroup: [], background: [], content: [] }, this._oldTree, this._breadcrumb, this._controller, this._state = "ready" }, render: function(t, e, i, n) { if (!(_(e.findComponents({ mainType: "series", subType: "treemap", query: n }), t) < 0)) { this.seriesModel = t, this.api = i, this.ecModel = e; var o = Zx(n, ["treemapZoomToNode", "treemapRootToNode"], t) , a = n && n.type , r = t.layoutInfo , s = !this._oldTree , l = this._storage , u = "treemapRootToNode" === a && o && l ? { rootNodeGroup: l.nodeGroup[o.node.getRawIndex()], direction: n.direction } : null , h = this._giveContainerGroup(r) , c = this._doRender(h, t, u); s || a && "treemapZoomToNode" !== a && "treemapRootToNode" !== a ? c.renderFinally() : this._doAnimation(h, c, t, u), this._resetController(i), this._renderBreadcrumb(t, i, o) } }, _giveContainerGroup: function(t) { var e = this._containerGroup; return e || (e = this._containerGroup = new Qx, this._initEvents(e), this.group.add(e)), e.attr("position", [t.x, t.y]), e }, _doRender: function(t, e, i) { var n = e.getData().tree , o = this._oldTree , a = { nodeGroup: [], background: [], content: [] } , r = { nodeGroup: [], background: [], content: [] } , s = this._storage , l = [] , c = T(l_, e, r, s, i, a, l); !function a(r, s, l, u, h) { u ? e_(s = r, function(t, e) { t.isRemoved() || i(e, e) }) : new kf(s,r,t,t).add(i).update(i).remove(T(i, null)).execute(); function t(t) { return t.getId() } function i(t, e) { var i = null != t ? r[t] : null , n = null != e ? s[e] : null , o = c(i, n, l, h); o && a(i && i.viewChildren || [], n && n.viewChildren || [], o, u, h + 1) } }(n.root ? [n.root] : [], o && o.root ? [o.root] : [], t, n === o || !o, 0); var u, h, d = (h = { nodeGroup: [], background: [], content: [] }, (u = s) && e_(u, function(t, e) { var i = h[e]; e_(t, function(t) { t && (i.push(t), t.__tmWillDelete = 1) }) }), h); return this._oldTree = n, this._storage = r, { lastsForAnimation: a, willDeleteEls: d, renderFinally: function() { e_(d, function(t) { e_(t, function(t) { t.parent && t.parent.remove(t) }) }), e_(l, function(t) { t.invisible = !0, t.dirty() }) } } }, _doAnimation: function(t, a, e, s) { if (e.get("animation")) { var l = e.get("animationDurationUpdate") , u = e.get("animationEasing") , h = function() { var a, r = [], s = {}; return { add: function(t, e, i, n, o) { return R(n) && (o = n, n = 0), !s[t.id] && (s[t.id] = 1, r.push({ el: t, target: e, time: i, delay: n, easing: o }), !0) }, done: function(t) { return a = t, this }, start: function() { for (var t = r.length, e = 0, i = r.length; e < i; e++) { var n = r[e]; n.el.animateTo(n.target, n.time, n.delay, n.easing, o) } return this; function o() { --t || (r.length = 0, s = {}, a && a()) } } } }(); e_(a.willDeleteEls, function(t, r) { e_(t, function(t, e) { if (!t.invisible) { var i, n = t.parent; if (s && "drillDown" === s.direction) i = n === s.rootNodeGroup ? { shape: { x: 0, y: 0, width: n.__tmNodeWidth, height: n.__tmNodeHeight }, style: { opacity: 0 } } : { style: { opacity: 0 } }; else { var o = 0 , a = 0; n.__tmWillDelete || (o = n.__tmNodeWidth / 2, a = n.__tmNodeHeight / 2), i = "nodeGroup" === r ? { position: [o, a], style: { opacity: 0 } } : { shape: { x: o, y: a, width: 0, height: 0 }, style: { opacity: 0 } } } i && h.add(t, i, l, u) } }) }), e_(this._storage, function(t, o) { e_(t, function(t, e) { var i = a.lastsForAnimation[o][e] , n = {}; i && ("nodeGroup" === o ? i.old && (n.position = t.position.slice(), t.attr("position", i.old)) : (i.old && (n.shape = P({}, t.shape), t.setShape(i.old)), i.fadein ? (t.setStyle("opacity", 0), n.style = { opacity: 1 }) : 1 !== t.style.opacity && (n.style = { opacity: 1 })), h.add(t, n, l, u)) }) }, this), this._state = "animating", h.done(Jx(function() { this._state = "ready", a.renderFinally() }, this)).start() } }, _resetController: function(t) { var e = this._controller; e || ((e = this._controller = new Vy(t.getZr())).enable(this.seriesModel.get("roam")), e.on("pan", Jx(this._onPan, this)), e.on("zoom", Jx(this._onZoom, this))); var n = new Di(0,0,t.getWidth(),t.getHeight()); e.setPointerChecker(function(t, e, i) { return n.contain(e, i) }) }, _clearController: function() { var t = this._controller; t && (t.dispose(), t = null) }, _onPan: function(t) { if ("animating" !== this._state && (3 < Math.abs(t.dx) || 3 < Math.abs(t.dy))) { var e = this.seriesModel.getData().tree.root; if (!e) return; var i = e.getLayout(); if (!i) return; this.api.dispatchAction({ type: "treemapMove", from: this.uid, seriesId: this.seriesModel.id, rootRect: { x: i.x + t.dx, y: i.y + t.dy, width: i.width, height: i.height } }) } }, _onZoom: function(t) { var e = t.originX , i = t.originY; if ("animating" !== this._state) { var n = this.seriesModel.getData().tree.root; if (!n) return; var o = n.getLayout(); if (!o) return; var a = new Di(o.x,o.y,o.width,o.height) , r = this.seriesModel.layoutInfo; e -= r.x, i -= r.y; var s = ae(); ue(s, s, [-e, -i]), ce(s, s, [t.scale, t.scale]), ue(s, s, [e, i]), a.applyTransform(s), this.api.dispatchAction({ type: "treemapRender", from: this.uid, seriesId: this.seriesModel.id, rootRect: { x: a.x, y: a.y, width: a.width, height: a.height } }) } }, _initEvents: function(t) { t.on("click", function(t) { if ("ready" === this._state) { var e = this.seriesModel.get("nodeClick", !0); if (e) { var i = this.findTarget(t.offsetX, t.offsetY); if (i) { var n = i.node; if (n.getLayout().isLeafRoot) this._rootToNode(i); else if ("zoomToNode" === e) this._zoomToNode(i); else if ("link" === e) { var o = n.hostTree.data.getItemModel(n.dataIndex) , a = o.get("link", !0) , r = o.get("target", !0) || "blank"; a && gu(a, r) } } } } }, this) }, _renderBreadcrumb: function(e, t, i) { i = i || ((i = null != e.get("leafDepth", !0) ? { node: e.getViewRoot() } : this.findTarget(t.getWidth() / 2, t.getHeight() / 2)) || { node: e.getData().tree.root }), (this._breadcrumb || (this._breadcrumb = new qx(this.group))).render(e, t, i.node, Jx(function(t) { "animating" !== this._state && (Xx(e.getViewRoot(), t) ? this._rootToNode({ node: t }) : this._zoomToNode({ node: t })) }, this)) }, remove: function() { this._clearController(), this._containerGroup && this._containerGroup.removeAll(), this._storage = { nodeGroup: [], background: [], content: [] }, this._state = "ready", this._breadcrumb && this._breadcrumb.remove() }, dispose: function() { this._clearController() }, _zoomToNode: function(t) { this.api.dispatchAction({ type: "treemapZoomToNode", from: this.uid, seriesId: this.seriesModel.id, targetNode: t.node }) }, _rootToNode: function(t) { this.api.dispatchAction({ type: "treemapRootToNode", from: this.uid, seriesId: this.seriesModel.id, targetNode: t.node }) }, findTarget: function(o, a) { var r; return this.seriesModel.getViewRoot().eachNode({ attr: "viewChildren", order: "preorder" }, function(t) { var e = this._storage.background[t.getRawIndex()]; if (e) { var i = e.transformCoordToLocal(o, a) , n = e.shape; if (!(n.x <= i[0] && i[0] <= n.x + n.width && n.y <= i[1] && i[1] <= n.y + n.height)) return !1; r = { node: t, offsetX: i[0], offsetY: i[1] } } }, this), r } }); for (var u_ = function() {}, h_ = ["treemapZoomToNode", "treemapRender", "treemapMove"], c_ = 0; c_ < h_.length; c_++) _f({ type: h_[c_], update: "updateView" }, u_); _f({ type: "treemapRootToNode", update: "updateView" }, function(o, t) { t.eachComponent({ mainType: "series", subType: "treemap", query: o }, function(t, e) { var i = Zx(o, ["treemapZoomToNode", "treemapRootToNode"], t); if (i) { var n = t.getViewRoot(); n && (o.direction = Xx(n, i.node) ? "rollUp" : "drillDown"), t.resetViewRoot(i.node) } }) }); var d_ = E , f_ = z , p_ = -1 , g_ = function(t) { var e = t.mappingMethod , i = t.type , n = this.option = k(t); this.type = i, this.mappingMethod = e, this._normalizeData = T_[e]; var o = m_[i]; this.applyVisual = o.applyVisual, this.getColorMapper = o.getColorMapper, this._doMap = o._doMap[e], "piecewise" === e ? (v_(n), function(i) { var t = i.pieceList; i.hasSpecialVisual = !1, E(t, function(t, e) { t.originIndex = e, null != t.visual && (i.hasSpecialVisual = !0) }) }(n)) : "category" === e ? n.categories ? function(t) { var e = t.categories , i = t.visual , n = t.categoryMap = {}; if (d_(e, function(t, e) { n[t] = e }), !L(i)) { var o = []; z(i) ? d_(i, function(t, e) { var i = n[e]; o[null != i ? i : p_] = t }) : o[p_] = i, i = I_(t, o) } for (var a = e.length - 1; 0 <= a; a--) null == i[a] && (delete n[e[a]], e.pop()) }(n) : v_(n, !0) : (Y("linear" !== e || n.dataExtent), v_(n)) }; g_.prototype = { constructor: g_, mapValueToVisual: function(t) { var e = this._normalizeData(t); return this._doMap(e, t) }, getNormalizer: function() { return A(this._normalizeData, this) } }; var m_ = g_.visualHandlers = { color: { applyVisual: __("color"), getColorMapper: function() { var o = this.option; return A("category" === o.mappingMethod ? function(t, e) { return e || (t = this._normalizeData(t)), w_.call(this, t) } : function(t, e, i) { var n = !!i; return e || (t = this._normalizeData(t)), i = Ue(t, o.parsedVisual, i), n ? i : $e(i, "rgba") } , this) }, _doMap: { linear: function(t) { return $e(Ue(t, this.option.parsedVisual), "rgba") }, category: w_, piecewise: function(t, e) { var i = M_.call(this, e); return null == i && (i = $e(Ue(t, this.option.parsedVisual), "rgba")), i }, fixed: b_ } }, colorHue: y_(function(t, e) { return qe(t, e) }), colorSaturation: y_(function(t, e) { return qe(t, null, e) }), colorLightness: y_(function(t, e) { return qe(t, null, null, e) }), colorAlpha: y_(function(t, e) { return Ke(t, e) }), opacity: { applyVisual: __("opacity"), _doMap: S_([0, 1]) }, liftZ: { applyVisual: __("liftZ"), _doMap: { linear: b_, category: b_, piecewise: b_, fixed: b_ } }, symbol: { applyVisual: function(t, e, i) { var n = this.mapValueToVisual(t); if (R(n)) i("symbol", n); else if (f_(n)) for (var o in n) n.hasOwnProperty(o) && i(o, n[o]) }, _doMap: { linear: x_, category: w_, piecewise: function(t, e) { var i = M_.call(this, e); return null == i && (i = x_.call(this, t)), i }, fixed: b_ } }, symbolSize: { applyVisual: __("symbolSize"), _doMap: S_([0, 1]) } }; function v_(t, e) { var i = t.visual , n = []; z(i) ? d_(i, function(t) { n.push(t) }) : null != i && n.push(i); e || 1 !== n.length || { color: 1, symbol: 1 }.hasOwnProperty(t.type) || (n[1] = n[0]), I_(t, n) } function y_(n) { return { applyVisual: function(t, e, i) { t = this.mapValueToVisual(t), i("color", n(e("color"), t)) }, _doMap: S_([0, 1]) } } function x_(t) { var e = this.option.visual; return e[Math.round(El(t, [0, 1], [0, e.length - 1], !0))] || {} } function __(n) { return function(t, e, i) { i(n, this.mapValueToVisual(t)) } } function w_(t) { var e = this.option.visual; return e[this.option.loop && t !== p_ ? t % e.length : t] } function b_() { return this.option.visual[0] } function S_(n) { return { linear: function(t) { return El(t, n, this.option.visual, !0) }, category: w_, piecewise: function(t, e) { var i = M_.call(this, e); return null == i && (i = El(t, n, this.option.visual, !0)), i }, fixed: b_ } } function M_(t) { var e = this.option , i = e.pieceList; if (e.hasSpecialVisual) { var n = i[g_.findPieceIndex(t, i)]; if (n && n.visual) return n.visual[this.type] } } function I_(t, e) { return t.visual = e, "color" === t.type && (t.parsedVisual = O(e, function(t) { return Fe(t) })), e } var T_ = { linear: function(t) { return El(t, this.option.dataExtent, [0, 1], !0) }, piecewise: function(t) { var e = this.option.pieceList , i = g_.findPieceIndex(t, e, !0); if (null != i) return El(i, [0, e.length - 1], [0, 1], !0) }, category: function(t) { var e = this.option.categories ? this.option.categoryMap[t] : t; return null == e ? p_ : e }, fixed: et }; function A_(t, e, i) { return t ? e <= i : e < i } g_.listVisualTypes = function() { var i = []; return E(m_, function(t, e) { i.push(e) }), i } , g_.addVisualHandler = function(t, e) { m_[t] = e } , g_.isValidType = function(t) { return m_.hasOwnProperty(t) } , g_.eachVisual = function(t, e, i) { z(t) ? E(t, e, i) : e.call(i, t) } , g_.mapVisual = function(t, n, o) { var a, r = L(t) ? [] : z(t) ? {} : (a = !0, null); return g_.eachVisual(t, function(t, e) { var i = n.call(o, t, e); a ? r = i : r[e] = i }), r } , g_.retrieveVisuals = function(i) { var n, o = {}; return i && d_(m_, function(t, e) { i.hasOwnProperty(e) && (o[e] = i[e], n = !0) }), n ? o : null } , g_.prepareVisualTypes = function(t) { if (f_(t)) { var i = []; d_(t, function(t, e) { i.push(e) }), t = i } else { if (!L(t)) return []; t = t.slice() } return t.sort(function(t, e) { return "color" === e && "color" !== t && 0 === t.indexOf("color") ? 1 : -1 }), t } , g_.dependsOn = function(t, e) { return "color" === e ? !(!t || 0 !== t.indexOf(e)) : t === e } , g_.findPieceIndex = function(n, t, e) { for (var o, a = 1 / 0, i = 0, r = t.length; i < r; i++) { var s = t[i].value; if (null != s) { if (s === n || "string" == typeof s && s === n + "") return i; e && c(s, i) } } for (i = 0, r = t.length; i < r; i++) { var l = t[i] , u = l.interval , h = l.close; if (u) { if (u[0] === -1 / 0) { if (A_(h[1], n, u[1])) return i } else if (u[1] === 1 / 0) { if (A_(h[0], u[0], n)) return i } else if (A_(h[0], u[0], n) && A_(h[1], n, u[1])) return i; e && c(u[0], i), e && c(u[1], i) } } if (e) return n === 1 / 0 ? t.length - 1 : n === -1 / 0 ? 0 : o; function c(t, e) { var i = Math.abs(t - n); i < a && (a = i, o = e) } } ; var D_ = L , C_ = "itemStyle" , L_ = { seriesType: "treemap", reset: function(t, e, i, n) { var o = t.getData().tree , a = o.root , r = t.getModel(C_); a.isRemoved() || !function n(t, e, o, a, r, s) { var l = t.getModel(); var i = t.getLayout(); if (!i || i.invisible || !i.isInView) return; var u = t.getModel(C_); var h = o[t.depth]; var c = k_(u, e, h, a); var d = u.get("borderColor"); var f = u.get("borderColorSaturation"); var p; null != f && (p = P_(c), g = f, d = null != (m = p) ? qe(m, null, null, g) : null); var g, m; t.setVisual("borderColor", d); var v = t.viewChildren; if (v && v.length) { var y = O_(t, l, i, u, c, v); E(v, function(t, e) { if (t.depth >= r.length || t === r[t.depth]) { var i = R_(l, c, t, e, y, s); n(t, i, o, a, r, s) } }) } else p = P_(c), t.setVisual("color", p) }(a, {}, O(o.levelModels, function(t) { return t ? t.get(C_) : null }), r, t.getViewRoot().getAncestors(), t) } }; function k_(i, n, o, a) { var r = P({}, n); return E(["color", "colorAlpha", "colorSaturation"], function(t) { var e = i.get(t, !0); null == e && o && (e = o[t]), null == e && (e = n[t]), null == e && (e = a.get(t)), null != e && (r[t] = e) }), r } function P_(t) { var e = N_(t, "color"); if (e) { var i = N_(t, "colorAlpha") , n = N_(t, "colorSaturation"); return n && (e = qe(e, null, null, n)), i && (e = Ke(e, i)), e } } function N_(t, e) { var i = t[e]; if (null != i && "none" !== i) return i } function O_(t, e, i, n, o, a) { if (a && a.length) { var r = E_(e, "color") || null != o.color && "none" !== o.color && (E_(e, "colorAlpha") || E_(e, "colorSaturation")); if (r) { var s = e.get("visualMin") , l = e.get("visualMax") , u = i.dataExtent.slice(); null != s && s < u[0] && (u[0] = s), null != l && l > u[1] && (u[1] = l); var h = e.get("colorMappingBy") , c = { type: r.name, dataExtent: u, visual: r.range }; "color" !== c.type || "index" !== h && "id" !== h ? c.mappingMethod = "linear" : (c.mappingMethod = "category", c.loop = !0); var d = new g_(c); return d.__drColorMappingBy = h, d } } } function E_(t, e) { var i = t.get(e); return D_(i) && i.length ? { name: e, range: i } : null } function R_(t, e, i, n, o, a) { var r = P({}, e); if (o) { var s = o.type , l = "color" === s && o.__drColorMappingBy , u = "index" === l ? n : "id" === l ? a.mapIdToIndex(i.getId()) : i.getValue(t.get("visualDimension")); r[s] = o.mapValueToVisual(u) } return r } var z_ = Math.max , B_ = Math.min , V_ = W , G_ = E , F_ = ["itemStyle", "borderWidth"] , W_ = ["itemStyle", "gapWidth"] , H_ = ["upperLabel", "show"] , Z_ = ["upperLabel", "height"] , U_ = { seriesType: "treemap", reset: function(t, e, i, n) { var o = i.getWidth() , a = i.getHeight() , r = t.option , s = bu(t.getBoxLayoutParams(), { width: i.getWidth(), height: i.getHeight() }) , l = r.size || [] , u = Rl(V_(s.width, l[0]), o) , h = Rl(V_(s.height, l[1]), a) , c = n && n.type , d = Zx(n, ["treemapZoomToNode", "treemapRootToNode"], t) , f = "treemapRender" === c || "treemapMove" === c ? n.rootRect : null , p = t.getViewRoot() , g = Ux(p); if ("treemapMove" !== c) { var m = "treemapZoomToNode" === c ? function(t, e, i, n, o) { var a, r = (e || {}).node, s = [n, o]; if (!r || r === i) return s; var l = n * o , u = l * t.option.zoomToNodeRatio; for (; a = r.parentNode; ) { for (var h = 0, c = a.children, d = 0, f = c.length; d < f; d++) h += c[d].getValue(); var p = r.getValue(); if (0 === p) return s; u *= h / p; var g = a.getModel() , m = g.get(F_) , v = Math.max(m, q_(g)); u += 4 * m * m + (3 * m + v) * Math.pow(u, .5), Hl < u && (u = Hl), r = a } u < l && (u = l); var y = Math.pow(u / l, .5); return [n * y, o * y] }(t, d, p, u, h) : f ? [f.width, f.height] : [u, h] , v = r.sort; v && "asc" !== v && "desc" !== v && (v = "desc"); var y = { squareRatio: r.squareRatio, sort: v, leafDepth: r.leafDepth }; p.hostTree.clearLayouts(); var x = { x: 0, y: 0, width: m[0], height: m[1], area: m[0] * m[1] }; p.setLayout(x), function t(e, i, n, o) { var a; var r; if (e.isRemoved()) return; var s = e.getLayout(); a = s.width; r = s.height; var l = e.getModel(); var u = l.get(F_); var h = l.get(W_) / 2; var c = q_(l); var d = Math.max(u, c); var f = u - h; var p = d - h; var l = e.getModel(); e.setLayout({ borderWidth: u, upperHeight: d, upperLabelHeight: c }, !0); a = z_(a - 2 * f, 0); r = z_(r - f - p, 0); var g = a * r; var m = X_(e, l, g, i, n, o); if (!m.length) return; var v = { x: f, y: p, width: a, height: r }; var y = B_(a, r); var x = 1 / 0; var _ = []; _.area = 0; for (var w = 0, b = m.length; w < b; ) { var S = m[w]; _.push(S), _.area += S.getLayout().area; var M = Y_(_, y, i.squareRatio); x = M <= x ? (w++, M) : (_.area -= _.pop().getLayout().area, j_(_, y, v, h, !1), y = B_(v.width, v.height), _.length = _.area = 0, 1 / 0) } _.length && j_(_, y, v, h, !0); if (!n) { var I = l.get("childrenVisibleMin"); null != I && g < I && (n = !0) } for (var w = 0, b = m.length; w < b; w++) t(m[w], i, n, o + 1) }(p, y, !1, 0); x = p.getLayout(); G_(g, function(t, e) { var i = (g[e + 1] || p).getValue(); t.setLayout(P({ dataExtent: [i, i], borderWidth: 0, upperHeight: 0 }, x)) }) } var _ = t.getData().tree.root; _.setLayout(function(t, e, i) { if (e) return { x: e.x, y: e.y }; var n = { x: 0, y: 0 }; if (!i) return n; var o = i.node , a = o.getLayout(); if (!a) return n; var r = [a.width / 2, a.height / 2] , s = o; for (; s; ) { var l = s.getLayout(); r[0] += l.x, r[1] += l.y, s = s.parentNode } return { x: t.width / 2 - r[0], y: t.height / 2 - r[1] } }(s, f, d), !0), t.setLayoutInfo(s), function e(t, i, n, o, a) { var r = t.getLayout(); var s = n[a]; var l = s && s === t; if (s && !l || a === n.length && t !== o) return; t.setLayout({ isInView: !0, invisible: !l && !i.intersect(r), isAboveViewRoot: l }, !0); var u = new Di(i.x - r.x,i.y - r.y,i.width,i.height); G_(t.viewChildren || [], function(t) { e(t, u, n, o, a + 1) }) }(_, new Di(-s.x,-s.y,o,a), g, p, 0) } }; function X_(t, e, i, n, o, a) { var r = t.children || [] , s = n.sort; "asc" !== s && "desc" !== s && (s = null); var l = null != n.leafDepth && n.leafDepth <= a; if (o && !l) return t.viewChildren = []; !function(t, n) { n && t.sort(function(t, e) { var i = "asc" === n ? t.getValue() - e.getValue() : e.getValue() - t.getValue(); return 0 == i ? "asc" === n ? t.dataIndex - e.dataIndex : e.dataIndex - t.dataIndex : i }) }(r = M(r, function(t) { return !t.isRemoved() }), s); var u = function(t, e, i) { for (var n = 0, o = 0, a = e.length; o < a; o++) n += e[o].getValue(); var r = t.get("visualDimension"); if (e && e.length) if ("value" === r && i) s = [e[e.length - 1].getValue(), e[0].getValue()], "asc" === i && s.reverse(); else { var s = [1 / 0, -1 / 0]; G_(e, function(t) { var e = t.getValue(r); e < s[0] && (s[0] = e), e > s[1] && (s[1] = e) }) } else s = [NaN, NaN]; return { sum: n, dataExtent: s } }(e, r, s); if (0 === u.sum) return t.viewChildren = []; if (u.sum = function(t, e, i, n, o) { if (!n) return i; for (var a = t.get("visibleMin"), r = o.length, s = r, l = r - 1; 0 <= l; l--) { var u = o["asc" === n ? r - l - 1 : l].getValue(); u / i * e < a && (s = l, i -= u) } return "asc" === n ? o.splice(0, r - s) : o.splice(s, r - s), i }(e, i, u.sum, s, r), 0 === u.sum) return t.viewChildren = []; for (var h = 0, c = r.length; h < c; h++) { var d = r[h].getValue() / u.sum * i; r[h].setLayout({ area: d }) } return l && (r.length && t.setLayout({ isLeafRoot: !0 }, !0), r.length = 0), t.viewChildren = r, t.setLayout({ dataExtent: u.dataExtent }, !0), r } function Y_(t, e, i) { for (var n, o = 0, a = 1 / 0, r = 0, s = t.length; r < s; r++) (n = t[r].getLayout().area) && (n < a && (a = n), o < n && (o = n)); var l = t.area * t.area , u = e * e * i; return l ? z_(u * o / l, l / (u * a)) : 1 / 0 } function j_(t, e, i, n, o) { var a = e === i.width ? 0 : 1 , r = 1 - a , s = ["x", "y"] , l = ["width", "height"] , u = i[s[a]] , h = e ? t.area / e : 0; (o || h > i[l[r]]) && (h = i[l[r]]); for (var c = 0, d = t.length; c < d; c++) { var f = t[c] , p = {} , g = h ? f.getLayout().area / h : 0 , m = p[l[r]] = z_(h - 2 * n, 0) , v = i[s[a]] + i[l[a]] - u , y = c === d - 1 || v < g ? v : g , x = p[l[a]] = z_(y - 2 * n, 0); p[s[r]] = i[s[r]] + B_(n, m / 2), p[s[a]] = u + B_(n, x / 2), u += y, f.setLayout(p, !0) } i[s[r]] += h, i[l[r]] -= h } function q_(t) { return t.get(H_) ? t.get(Z_) : 0 } function K_(t) { return "_EC_" + t } Sf(L_), bf(U_); function $_(t) { this._directed = t || !1, this.nodes = [], this.edges = [], this._nodesMap = {}, this._edgesMap = {}, this.data, this.edgeData } var J_ = $_.prototype; function Q_(t, e) { this.id = null == t ? "" : t, this.inEdges = [], this.outEdges = [], this.edges = [], this.hostGraph, this.dataIndex = null == e ? -1 : e } function tw(t, e, i) { this.node1 = t, this.node2 = e, this.dataIndex = null == i ? -1 : i } J_.type = "graph", J_.isDirected = function() { return this._directed } , J_.addNode = function(t, e) { t = null == t ? "" + e : "" + t; var i = this._nodesMap; if (!i[K_(t)]) { var n = new Q_(t,e); return (n.hostGraph = this).nodes.push(n), i[K_(t)] = n } } , J_.getNodeByIndex = function(t) { var e = this.data.getRawIndex(t); return this.nodes[e] } , J_.getNodeById = function(t) { return this._nodesMap[K_(t)] } , J_.addEdge = function(t, e, i) { var n = this._nodesMap , o = this._edgesMap; if ("number" == typeof t && (t = this.nodes[t]), "number" == typeof e && (e = this.nodes[e]), Q_.isInstance(t) || (t = n[K_(t)]), Q_.isInstance(e) || (e = n[K_(e)]), t && e) { var a = t.id + "-" + e.id; if (!o[a]) { var r = new tw(t,e,i); return (r.hostGraph = this)._directed && (t.outEdges.push(r), e.inEdges.push(r)), t.edges.push(r), t !== e && e.edges.push(r), this.edges.push(r), o[a] = r } } } , J_.getEdgeByIndex = function(t) { var e = this.edgeData.getRawIndex(t); return this.edges[e] } , J_.getEdge = function(t, e) { Q_.isInstance(t) && (t = t.id), Q_.isInstance(e) && (e = e.id); var i = this._edgesMap; return this._directed ? i[t + "-" + e] : i[t + "-" + e] || i[e + "-" + t] } , J_.eachNode = function(t, e) { for (var i = this.nodes, n = i.length, o = 0; o < n; o++) 0 <= i[o].dataIndex && t.call(e, i[o], o) } , J_.eachEdge = function(t, e) { for (var i = this.edges, n = i.length, o = 0; o < n; o++) 0 <= i[o].dataIndex && 0 <= i[o].node1.dataIndex && 0 <= i[o].node2.dataIndex && t.call(e, i[o], o) } , J_.breadthFirstTraverse = function(t, e, i, n) { if (Q_.isInstance(e) || (e = this._nodesMap[K_(e)]), e) { for (var o = "out" === i ? "outEdges" : "in" === i ? "inEdges" : "edges", a = 0; a < this.nodes.length; a++) this.nodes[a].__visited = !1; if (!t.call(n, e, null)) for (var r = [e]; r.length; ) { var s = r.shift() , l = s[o]; for (a = 0; a < l.length; a++) { var u = l[a] , h = u.node1 === s ? u.node2 : u.node1; if (!h.__visited) { if (t.call(n, h, s)) return; r.push(h), h.__visited = !0 } } } } } , J_.update = function() { for (var t = this.data, i = this.edgeData, e = this.nodes, n = this.edges, o = 0, a = e.length; o < a; o++) e[o].dataIndex = -1; for (o = 0, a = t.count(); o < a; o++) e[t.getRawIndex(o)].dataIndex = o; i.filterSelf(function(t) { var e = n[i.getRawIndex(t)]; return 0 <= e.node1.dataIndex && 0 <= e.node2.dataIndex }); for (o = 0, a = n.length; o < a; o++) n[o].dataIndex = -1; for (o = 0, a = i.count(); o < a; o++) n[i.getRawIndex(o)].dataIndex = o } , J_.clone = function() { for (var t = new $_(this._directed), e = this.nodes, i = this.edges, n = 0; n < e.length; n++) t.addNode(e[n].id, e[n].dataIndex); for (n = 0; n < i.length; n++) { var o = i[n]; t.addEdge(o.node1.id, o.node2.id, o.dataIndex) } return t } , Q_.prototype = { constructor: Q_, degree: function() { return this.edges.length }, inDegree: function() { return this.inEdges.length }, outDegree: function() { return this.outEdges.length }, getModel: function(t) { if (!(this.dataIndex < 0)) return this.hostGraph.data.getItemModel(this.dataIndex).getModel(t) } }, tw.prototype.getModel = function(t) { if (!(this.dataIndex < 0)) return this.hostGraph.edgeData.getItemModel(this.dataIndex).getModel(t) } ; function ew(i, n) { return { getValue: function(t) { var e = this[i][n]; return e.get(e.getDimension(t || "value"), this.dataIndex) }, setVisual: function(t, e) { 0 <= this.dataIndex && this[i][n].setItemVisual(this.dataIndex, t, e) }, getVisual: function(t, e) { return this[i][n].getItemVisual(this.dataIndex, t, e) }, setLayout: function(t, e) { 0 <= this.dataIndex && this[i][n].setItemLayout(this.dataIndex, t, e) }, getLayout: function() { return this[i][n].getItemLayout(this.dataIndex) }, getGraphicEl: function() { return this[i][n].getItemGraphicEl(this.dataIndex) }, getRawIndex: function() { return this[i][n].getRawIndex(this.dataIndex) } } } b(Q_, ew("hostGraph", "data")), b(tw, ew("hostGraph", "edgeData")), $_.Node = Q_, $_.Edge = tw, ra(Q_), ra(tw); function iw(t, e, i, n, o) { for (var a = new $_(n), r = 0; r < t.length; r++) a.addNode(W(t[r].id, t[r].name, r), r); var s = [] , l = [] , u = 0; for (r = 0; r < e.length; r++) { var h = e[r] , c = h.source , d = h.target; a.addEdge(c, d, u) && (l.push(h), s.push(W(h.id, c + " > " + d)), u++) } var f, p = i.get("coordinateSystem"); if ("cartesian2d" === p || "polar" === p) f = gp(t, i); else { var g = lh.get(p) , m = g && "view" !== g.type && g.dimensions || []; _(m, "value") < 0 && m.concat(["value"]); var v = lp(t, { coordDimensions: m }); (f = new Yf(v,i)).initData(t) } var y = new Yf(["value"],i); return y.initData(l, s), o && o(f, y), yx({ mainData: f, struct: a, structAttr: "graph", datas: { node: f, edge: y }, datasAttr: { node: "data", edge: "edgeData" } }), a.update(), a } var nw = Df({ type: "series.graph", init: function(t) { nw.superApply(this, "init", arguments); var e = this; function i() { return e._categoriesData } this.legendVisualProvider = new qv(i,i), this.fillDataTextStyle(t.edges || t.links), this._updateCategoriesData() }, mergeOption: function(t) { nw.superApply(this, "mergeOption", arguments), this.fillDataTextStyle(t.edges || t.links), this._updateCategoriesData() }, mergeDefaultAndTheme: function(t) { nw.superApply(this, "mergeDefaultAndTheme", arguments), Go(t, ["edgeLabel"], ["show"]) }, getInitialData: function(t, s) { var e = t.edges || t.links || [] , i = t.data || t.nodes || [] , l = this; if (i && e) return iw(i, e, this, !0, function(t, e) { t.wrapMethod("getItemModel", function(t) { var e = l._categoriesModels[t.getShallow("category")]; return e && (e.parentModel = t.parentModel, t.parentModel = e), t }); var i = l.getModel("edgeLabel") , n = new Cl({ label: i.option },i.parentModel,s) , o = l.getModel("emphasis.edgeLabel") , a = new Cl({ emphasis: { label: o.option } },o.parentModel,s); function r(t) { return (t = this.parsePath(t)) && "label" === t[0] ? n : t && "emphasis" === t[0] && "label" === t[1] ? a : this.parentModel } e.wrapMethod("getItemModel", function(t) { return t.customizeGetParent(r), t }) }).data }, getGraph: function() { return this.getData().graph }, getEdgeData: function() { return this.getGraph().edgeData }, getCategoriesData: function() { return this._categoriesData }, formatTooltip: function(t, e, i) { if ("edge" !== i) return nw.superApply(this, "formatTooltip", arguments); var n = this.getData() , o = this.getDataParams(t, i) , a = n.graph.getEdgeByIndex(t) , r = n.getName(a.node1.dataIndex) , s = n.getName(a.node2.dataIndex) , l = []; return null != r && l.push(r), null != s && l.push(s), l = au(l.join(" > ")), o.value && (l += " : " + au(o.value)), l }, _updateCategoriesData: function() { var t = O(this.option.categories || [], function(t) { return null != t.value ? t : P({ value: 0 }, t) }) , e = new Yf(["value"],this); e.initData(t), this._categoriesData = e, this._categoriesModels = e.mapArray(function(t) { return e.getItemModel(t, !0) }) }, setZoom: function(t) { this.option.zoom = t }, setCenter: function(t) { this.option.center = t }, isAnimationEnabled: function() { return nw.superCall(this, "isAnimationEnabled") && !("force" === this.get("layout") && this.get("force.layoutAnimation")) }, defaultOption: { zlevel: 0, z: 2, coordinateSystem: "view", legendHoverLink: !0, hoverAnimation: !0, layout: null, focusNodeAdjacency: !1, circular: { rotateLabel: !1 }, force: { initLayout: null, repulsion: [0, 50], gravity: .1, friction: .6, edgeLength: 30, layoutAnimation: !0 }, left: "center", top: "center", symbol: "circle", symbolSize: 10, edgeSymbol: ["none", "none"], edgeSymbolSize: 10, edgeLabel: { position: "middle", distance: 5 }, draggable: !1, roam: !1, center: null, zoom: 1, nodeScaleRatio: .6, label: { show: !1, formatter: "{b}" }, itemStyle: {}, lineStyle: { color: "#aaa", width: 1, curveness: 0, opacity: .5 }, emphasis: { label: { show: !0 } } } }) , ow = ls.prototype , aw = ds.prototype; function rw(t) { return isNaN(+t.cpx1) || isNaN(+t.cpy1) } var sw = Cs({ type: "ec-line", style: { stroke: "#000", fill: null }, shape: { x1: 0, y1: 0, x2: 0, y2: 0, percent: 1, cpx1: null, cpy1: null }, buildPath: function(t, e) { this[rw(e) ? "_buildPathLine" : "_buildPathCurve"](t, e) }, _buildPathLine: ow.buildPath, _buildPathCurve: aw.buildPath, pointAt: function(t) { return this[rw(this.shape) ? "_pointAtLine" : "_pointAtCurve"](t) }, _pointAtLine: ow.pointAt, _pointAtCurve: aw.pointAt, tangentAt: function(t) { var e = this.shape , i = rw(e) ? [e.x2 - e.x1, e.y2 - e.y1] : this._tangentAtCurve(t); return mt(i, i) }, _tangentAtCurve: aw.tangentAt }) , lw = ["fromSymbol", "toSymbol"]; function uw(t) { return "_" + t + "Type" } function hw(t, e, i) { var n = e.getItemVisual(i, "color") , o = e.getItemVisual(i, t) , a = e.getItemVisual(i, t + "Size"); if (o && "none" !== o) { L(a) || (a = [a, a]); var r = wg(o, -a[0] / 2, -a[1] / 2, a[0], a[1], n); return r.name = t, r } } function cw(t, e) { t.x1 = e[0][0], t.y1 = e[0][1], t.x2 = e[1][0], t.y2 = e[1][1], t.percent = 1; var i = e[2]; i ? (t.cpx1 = i[0], t.cpy1 = i[1]) : (t.cpx1 = NaN, t.cpy1 = NaN) } function dw(t, e, i) { Ci.call(this), this._createLine(t, e, i) } var fw = dw.prototype; function pw(t) { this._ctor = t || dw, this.group = new Ci } fw.beforeUpdate = function() { var t = this.childOfName("fromSymbol") , e = this.childOfName("toSymbol") , i = this.childOfName("label"); if (t || e || !i.ignore) { for (var n = 1, o = this.parent; o; ) o.scale && (n /= o.scale[0]), o = o.parent; var a = this.childOfName("line"); if (this.__dirty || a.__dirty) { var r = a.shape.percent , s = a.pointAt(0) , l = a.pointAt(r) , u = ht([], l, s); if (mt(u, u), t) { t.attr("position", s); var h = a.tangentAt(0); t.attr("rotation", Math.PI / 2 - Math.atan2(h[1], h[0])), t.attr("scale", [n * r, n * r]) } if (e) { e.attr("position", l); h = a.tangentAt(1); e.attr("rotation", -Math.PI / 2 - Math.atan2(h[1], h[0])), e.attr("scale", [n * r, n * r]) } if (!i.ignore) { var c, d, f, p; i.attr("position", l); var g = i.__labelDistance , m = g[0] * n , v = g[1] * n , y = r / 2 , x = [(h = a.tangentAt(y))[1], -h[0]] , _ = a.pointAt(y); 0 < x[1] && (x[0] = -x[0], x[1] = -x[1]); var w, b = h[0] < 0 ? -1 : 1; if ("start" !== i.__position && "end" !== i.__position) { var S = -Math.atan2(h[1], h[0]); l[0] < s[0] && (S = Math.PI + S), i.attr("rotation", S) } switch (i.__position) { case "insideStartTop": case "insideMiddleTop": case "insideEndTop": case "middle": w = -v, f = "bottom"; break; case "insideStartBottom": case "insideMiddleBottom": case "insideEndBottom": w = v, f = "top"; break; default: w = 0, f = "middle" } switch (i.__position) { case "end": c = [u[0] * m + l[0], u[1] * v + l[1]], d = .8 < u[0] ? "left" : u[0] < -.8 ? "right" : "center", f = .8 < u[1] ? "top" : u[1] < -.8 ? "bottom" : "middle"; break; case "start": c = [-u[0] * m + s[0], -u[1] * v + s[1]], d = .8 < u[0] ? "right" : u[0] < -.8 ? "left" : "center", f = .8 < u[1] ? "bottom" : u[1] < -.8 ? "top" : "middle"; break; case "insideStartTop": case "insideStart": case "insideStartBottom": c = [m * b + s[0], s[1] + w], d = h[0] < 0 ? "right" : "left", p = [-m * b, -w]; break; case "insideMiddleTop": case "insideMiddle": case "insideMiddleBottom": case "middle": c = [_[0], _[1] + w], d = "center", p = [0, -w]; break; case "insideEndTop": case "insideEnd": case "insideEndBottom": c = [-m * b + l[0], l[1] + w], d = 0 <= h[0] ? "right" : "left", p = [m * b, -w] } i.attr({ style: { textVerticalAlign: i.__verticalAlign || f, textAlign: i.__textAlign || d }, position: c, scale: [n, n], origin: p }) } } } } , fw._createLine = function(i, n, t) { var e = i.hostModel , o = function(t) { var e = new sw({ name: "line", subPixelOptimize: !0 }); return cw(e.shape, t), e }(i.getItemLayout(n)); o.shape.percent = 0, dl(o, { shape: { percent: 1 } }, e, n), this.add(o); var a = new Ur({ name: "label", lineLabelOriginalOpacity: 1 }); this.add(a), E(lw, function(t) { var e = hw(t, i, n); this.add(e), this[uw(t)] = i.getItemVisual(n, t) }, this), this._updateCommonStl(i, n, t) } , fw.updateData = function(o, a, t) { var e = o.hostModel , i = this.childOfName("line") , n = o.getItemLayout(a) , r = { shape: {} }; cw(r.shape, n), cl(i, r, e, a), E(lw, function(t) { var e = o.getItemVisual(a, t) , i = uw(t); if (this[i] !== e) { this.remove(this.childOfName(t)); var n = hw(t, o, a); this.add(n) } this[i] = e }, this), this._updateCommonStl(o, a, t) } , fw._updateCommonStl = function(t, e, i) { var n = t.hostModel , o = this.childOfName("line") , a = i && i.lineStyle , r = i && i.hoverLineStyle , s = i && i.labelModel , l = i && i.hoverLabelModel; if (!i || t.hasItemOption) { var u = t.getItemModel(e); a = u.getModel("lineStyle").getLineStyle(), r = u.getModel("emphasis.lineStyle").getLineStyle(), s = u.getModel("label"), l = u.getModel("emphasis.label") } var h = t.getItemVisual(e, "color") , c = Z(t.getItemVisual(e, "opacity"), a.opacity, 1); o.useStyle(D({ strokeNoScale: !0, fill: "none", stroke: h, opacity: c }, a)), o.hoverStyle = r, E(lw, function(t) { var e = this.childOfName(t); e && (e.setColor(h), e.setStyle({ opacity: c })) }, this); var d, f, p = s.getShallow("show"), g = l.getShallow("show"), m = this.childOfName("label"); if ((p || g) && (d = h || "#000", null == (f = n.getFormattedLabel(e, "normal", t.dataType)))) { var v = n.getRawValue(e); f = null == v ? t.getName(e) : isFinite(v) ? zl(v) : v } var y = p ? f : null , x = g ? H(n.getFormattedLabel(e, "emphasis", t.dataType), f) : null , _ = m.style; if (null != y || null != x) { nl(m.style, s, { text: y }, { autoColor: d }), m.__textAlign = _.textAlign, m.__verticalAlign = _.textVerticalAlign, m.__position = s.get("position") || "middle"; var w = s.get("distance"); L(w) || (w = [w, w]), m.__labelDistance = w } m.hoverStyle = null != x ? { text: x, textFill: l.getTextColor(!0), fontStyle: l.getShallow("fontStyle"), fontWeight: l.getShallow("fontWeight"), fontSize: l.getShallow("fontSize"), fontFamily: l.getShallow("fontFamily") } : { text: null }, m.ignore = !p && !g, $s(this) } , fw.highlight = function() { this.trigger("emphasis") } , fw.downplay = function() { this.trigger("normal") } , fw.updateLayout = function(t, e) { this.setLinePoints(t.getItemLayout(e)) } , fw.setLinePoints = function(t) { var e = this.childOfName("line"); cw(e.shape, t), e.dirty() } , w(dw, Ci); var gw = pw.prototype; function mw(t) { var e = t.hostModel; return { lineStyle: e.getModel("lineStyle").getLineStyle(), hoverLineStyle: e.getModel("emphasis.lineStyle").getLineStyle(), labelModel: e.getModel("label"), hoverLabelModel: e.getModel("emphasis.label") } } function vw(t) { return isNaN(t[0]) || isNaN(t[1]) } function yw(t) { return !vw(t[0]) && !vw(t[1]) } function xw(t) { var e = t.coordinateSystem; if ("view" !== e.type) return 1; var i = t.option.nodeScaleRatio , n = e.scale , o = n && n[0] || 1; return ((e.getZoom() - 1) * i + 1) / o } function _w(t) { var e = t.getVisual("symbolSize"); return e instanceof Array && (e = (e[0] + e[1]) / 2), +e } gw.isPersistent = function() { return !0 } , gw.updateData = function(i) { var n = this , e = n.group , o = n._lineData; n._lineData = i, o || e.removeAll(); var a = mw(i); i.diff(o).add(function(t) { !function(t, e, i, n) { if (!yw(e.getItemLayout(i))) return; var o = new t._ctor(e,i,n); e.setItemGraphicEl(i, o), t.group.add(o) }(n, i, t, a) }).update(function(t, e) { !function(t, e, i, n, o, a) { var r = e.getItemGraphicEl(n); if (!yw(i.getItemLayout(o))) return t.group.remove(r); r ? r.updateData(i, o, a) : r = new t._ctor(i,o,a); i.setItemGraphicEl(o, r), t.group.add(r) }(n, o, i, e, t, a) }).remove(function(t) { e.remove(o.getItemGraphicEl(t)) }).execute() } , gw.updateLayout = function() { var i = this._lineData; i && i.eachItemGraphicEl(function(t, e) { t.updateLayout(i, e) }, this) } , gw.incrementalPrepareUpdate = function(t) { this._seriesScope = mw(t), this._lineData = null, this.group.removeAll() } , gw.incrementalUpdate = function(t, e) { function i(t) { t.isGroup || function(t) { return t.animators && 0 < t.animators.length }(t) || (t.incremental = t.useHoverLayer = !0) } for (var n = t.start; n < t.end; n++) { if (yw(e.getItemLayout(n))) { var o = new this._ctor(e,n,this._seriesScope); o.traverse(i), this.group.add(o), e.setItemGraphicEl(n, o) } } } , gw.remove = function() { this._clearIncremental(), this._incremental = null, this.group.removeAll() } , gw._clearIncremental = function() { var t = this._incremental; t && t.clearDisplaybles() } ; var ww = [] , bw = [] , Sw = [] , Mw = La , Iw = _t , Tw = Math.abs; function Aw(t, e, i) { for (var n, o = t[0], a = t[1], r = t[2], s = 1 / 0, l = i * i, u = .1, h = .1; h <= .9; h += .1) { ww[0] = Mw(o[0], a[0], r[0], h), ww[1] = Mw(o[1], a[1], r[1], h), (f = Tw(Iw(ww, e) - l)) < s && (s = f, n = h) } for (var c = 0; c < 32; c++) { var d = n + u; bw[0] = Mw(o[0], a[0], r[0], n), bw[1] = Mw(o[1], a[1], r[1], n), Sw[0] = Mw(o[0], a[0], r[0], d), Sw[1] = Mw(o[1], a[1], r[1], d); var f = Iw(bw, e) - l; if (Tw(f) < .01) break; var p = Iw(Sw, e) - l; u /= 2, f < 0 ? 0 <= p ? n += u : n -= u : 0 <= p ? n -= u : n += u } return n } function Dw(t, l) { var u = [] , h = Na , c = [[], [], []] , d = [[], []] , f = []; l /= 2, t.eachEdge(function(t, e) { var i = t.getLayout() , n = t.getVisual("fromSymbol") , o = t.getVisual("toSymbol"); i.__original || (i.__original = [rt(i[0]), rt(i[1])], i[2] && i.__original.push(rt(i[2]))); var a = i.__original; if (null != i[2]) { if (at(c[0], a[0]), at(c[1], a[2]), at(c[2], a[1]), n && "none" !== n) { var r = _w(t.node1) , s = Aw(c, a[0], r * l); h(c[0][0], c[1][0], c[2][0], s, u), c[0][0] = u[3], c[1][0] = u[4], h(c[0][1], c[1][1], c[2][1], s, u), c[0][1] = u[3], c[1][1] = u[4] } if (o && "none" !== o) { r = _w(t.node2), s = Aw(c, a[1], r * l); h(c[0][0], c[1][0], c[2][0], s, u), c[1][0] = u[1], c[2][0] = u[2], h(c[0][1], c[1][1], c[2][1], s, u), c[1][1] = u[1], c[2][1] = u[2] } at(i[0], c[0]), at(i[1], c[2]), at(i[2], c[1]) } else { if (at(d[0], a[0]), at(d[1], a[1]), ht(f, d[1], d[0]), mt(f, f), n && "none" !== n) { r = _w(t.node1); ut(d[0], d[0], f, r * l) } if (o && "none" !== o) { r = _w(t.node2); ut(d[1], d[1], f, -r * l) } at(i[0], d[0]), at(i[1], d[1]) } }) } var Cw = "__focusNodeAdjacency" , Lw = "__unfocusNodeAdjacency" , kw = ["itemStyle", "opacity"] , Pw = ["lineStyle", "opacity"]; function Nw(t, e) { var i = t.getVisual("opacity"); return null != i ? i : t.getModel().get(e) } function Ow(t, e, i) { var n = t.getGraphicEl() , o = Nw(t, e); null != i && (null == o && (o = 1), o *= i), n.downplay && n.downplay(), n.traverse(function(t) { if (!t.isGroup) { var e = t.lineLabelOriginalOpacity; null != e && null == i || (e = o), t.setStyle("opacity", e) } }) } function Ew(t, e) { var i = Nw(t, e) , n = t.getGraphicEl(); n.traverse(function(t) { t.isGroup || t.setStyle("opacity", i) }), n.highlight && n.highlight() } Cf({ type: "graph", init: function(t, e) { var i = new im , n = new pw , o = this.group; this._controller = new Vy(e.getZr()), this._controllerHost = { target: o }, o.add(i.group), o.add(n.group), this._symbolDraw = i, this._lineDraw = n, this._firstRender = !0 }, render: function(o, t, a) { var r = this , e = o.coordinateSystem; this._model = o; var i = this._symbolDraw , n = this._lineDraw , s = this.group; if ("view" === e.type) { var l = { position: e.position, scale: e.scale }; this._firstRender ? s.attr(l) : cl(s, l, o) } Dw(o.getGraph(), xw(o)); var u = o.getData(); i.updateData(u); var h = o.getEdgeData(); n.updateData(h), this._updateNodeAndLinkScale(), this._updateController(o, t, a), clearTimeout(this._layoutTimeout); var c = o.forceLayout , d = o.get("force.layoutAnimation"); c && this._startForceLayoutIteration(c, d), u.eachItemGraphicEl(function(t, e) { var i = u.getItemModel(e); t.off("drag").off("dragend"); var n = i.get("draggable"); n && t.on("drag", function() { c && (c.warmUp(), this._layouting || this._startForceLayoutIteration(c, d), c.setFixed(e), u.setItemLayout(e, t.position)) }, this).on("dragend", function() { c && c.setUnfixed(e) }, this), t.setDraggable(n && c), t[Cw] && t.off("mouseover", t[Cw]), t[Lw] && t.off("mouseout", t[Lw]), i.get("focusNodeAdjacency") && (t.on("mouseover", t[Cw] = function() { r._clearTimer(), a.dispatchAction({ type: "focusNodeAdjacency", seriesId: o.id, dataIndex: t.dataIndex }) } ), t.on("mouseout", t[Lw] = function() { r._dispatchUnfocus(a) } )) }, this), u.graph.eachEdge(function(t) { var e = t.getGraphicEl(); e[Cw] && e.off("mouseover", e[Cw]), e[Lw] && e.off("mouseout", e[Lw]), t.getModel().get("focusNodeAdjacency") && (e.on("mouseover", e[Cw] = function() { r._clearTimer(), a.dispatchAction({ type: "focusNodeAdjacency", seriesId: o.id, edgeDataIndex: t.dataIndex }) } ), e.on("mouseout", e[Lw] = function() { r._dispatchUnfocus(a) } )) }); var f = "circular" === o.get("layout") && o.get("circular.rotateLabel") , p = u.getLayout("cx") , g = u.getLayout("cy"); u.eachItemGraphicEl(function(t, e) { var i = u.getItemModel(e).get("label.rotate") || 0 , n = t.getSymbolPath(); if (f) { var o = u.getItemLayout(e) , a = Math.atan2(o[1] - g, o[0] - p); a < 0 && (a = 2 * Math.PI + a); var r = o[0] < p; r && (a -= Math.PI); var s = r ? "left" : "right"; il(n, { textRotation: -a, textPosition: s, textOrigin: "center" }, { textPosition: s }) } else il(n, { textRotation: i *= Math.PI / 180 }) }), this._firstRender = !1 }, dispose: function() { this._controller && this._controller.dispose(), this._controllerHost = {}, this._clearTimer() }, _dispatchUnfocus: function(t, e) { var i = this; this._clearTimer(), this._unfocusDelayTimer = setTimeout(function() { i._unfocusDelayTimer = null, t.dispatchAction({ type: "unfocusNodeAdjacency", seriesId: i._model.id }) }, 500) }, _clearTimer: function() { this._unfocusDelayTimer && (clearTimeout(this._unfocusDelayTimer), this._unfocusDelayTimer = null) }, focusNodeAdjacency: function(t, e, i, n) { var o = t.getData().graph , a = n.dataIndex , r = n.edgeDataIndex , s = o.getNodeByIndex(a) , l = o.getEdgeByIndex(r); (s || l) && (o.eachNode(function(t) { Ow(t, kw, .1) }), o.eachEdge(function(t) { Ow(t, Pw, .1) }), s && (Ew(s, kw), E(s.edges, function(t) { t.dataIndex < 0 || (Ew(t, Pw), Ew(t.node1, kw), Ew(t.node2, kw)) })), l && (Ew(l, Pw), Ew(l.node1, kw), Ew(l.node2, kw))) }, unfocusNodeAdjacency: function(t, e, i, n) { var o = t.getData().graph; o.eachNode(function(t) { Ow(t, kw) }), o.eachEdge(function(t) { Ow(t, Pw) }) }, _startForceLayoutIteration: function(t, i) { var n = this; !function e() { t.step(function(t) { n.updateLayout(n._model), (n._layouting = !t) && (i ? n._layoutTimeout = setTimeout(e, 16) : e()) }) }() }, _updateController: function(o, t, a) { var e = this._controller , i = this._controllerHost , r = this.group; e.setPointerChecker(function(t, e, i) { var n = r.getBoundingRect(); return n.applyTransform(r.transform), n.contain(e, i) && !$y(t, a, o) }), "view" === o.coordinateSystem.type ? (e.enable(o.get("roam")), i.zoomLimit = o.get("scaleLimit"), i.zoom = o.coordinateSystem.getZoom(), e.off("pan").off("zoom").on("pan", function(t) { jy(i, t.dx, t.dy), a.dispatchAction({ seriesId: o.id, type: "graphRoam", dx: t.dx, dy: t.dy }) }).on("zoom", function(t) { qy(i, t.scale, t.originX, t.originY), a.dispatchAction({ seriesId: o.id, type: "graphRoam", zoom: t.scale, originX: t.originX, originY: t.originY }), this._updateNodeAndLinkScale(), Dw(o.getGraph(), xw(o)), this._lineDraw.updateLayout() }, this)) : e.disable() }, _updateNodeAndLinkScale: function() { var t = this._model , e = t.getData() , i = xw(t) , n = [i, i]; e.eachItemGraphicEl(function(t, e) { t.attr("scale", n) }) }, updateLayout: function(t) { Dw(t.getGraph(), xw(t)), this._symbolDraw.updateLayout(), this._lineDraw.updateLayout() }, remove: function(t, e) { this._symbolDraw && this._symbolDraw.remove(), this._lineDraw && this._lineDraw.remove() } }), _f({ type: "focusNodeAdjacency", event: "focusNodeAdjacency", update: "series:focusNodeAdjacency" }, function() {}), _f({ type: "unfocusNodeAdjacency", event: "unfocusNodeAdjacency", update: "series:unfocusNodeAdjacency" }, function() {}); _f({ type: "graphRoam", event: "graphRoam", update: "none" }, function(i, t) { t.eachComponent({ mainType: "series", query: i }, function(t) { var e = ax(t.coordinateSystem, i); t.setCenter && t.setCenter(e.center), t.setZoom && t.setZoom(e.zoom) }) }); function Rw(t) { return t instanceof Array || (t = [t, t]), t } function zw(t) { var e = t.coordinateSystem; if (!e || "view" === e.type) { var i = t.getGraph(); i.eachNode(function(t) { var e = t.getModel(); t.setLayout([+e.get("x"), +e.get("y")]) }), Bw(i) } } function Bw(t) { t.eachEdge(function(t) { var e = t.getModel().get("lineStyle.curveness") || 0 , i = rt(t.node1.getLayout()) , n = rt(t.node2.getLayout()) , o = [i, n]; +e && o.push([(i[0] + n[0]) / 2 - (i[1] - n[1]) * e, (i[1] + n[1]) / 2 - (n[0] - i[0]) * e]), t.setLayout(o) }) } var Vw = Math.PI , Gw = []; function Fw(t, e) { var i = t.coordinateSystem; if (!i || "view" === i.type) { var n = i.getBoundingRect() , o = t.getData() , a = o.graph , s = n.width / 2 + n.x , l = n.height / 2 + n.y , r = Math.min(n.width, n.height) / 2 , u = o.count(); o.setLayout({ cx: s, cy: l }), u && (Ww[e](t, i, a, o, r, s, l, u), a.eachEdge(function(t) { var e, i = t.getModel().get("lineStyle.curveness") || 0, n = rt(t.node1.getLayout()), o = rt(t.node2.getLayout()), a = (n[0] + o[0]) / 2, r = (n[1] + o[1]) / 2; +i && (e = [s * (i *= 3) + a * (1 - i), l * i + r * (1 - i)]), t.setLayout([n, o, e]) })) } } var Ww = { value: function(t, e, i, n, o, a, r, s) { var l = 0 , u = n.getSum("value") , h = 2 * Math.PI / (u || s); i.eachNode(function(t) { var e = t.getValue("value") , i = h * (u ? e : 1) / 2; l += i, t.setLayout([o * Math.cos(l) + a, o * Math.sin(l) + r]), l += i }) }, symbolSize: function(t, e, i, n, o, a, r, s) { var l = 0; Gw.length = s; var u = xw(t); i.eachNode(function(t) { var e = _w(t); isNaN(e) && (e = 2), e < 0 && (e = 0), e *= u; var i = Math.asin(e / 2 / o); isNaN(i) && (i = Vw / 2), Gw[t.dataIndex] = i, l += 2 * i }); var h = (2 * Vw - l) / s / 2 , c = 0; i.eachNode(function(t) { var e = h + Gw[t.dataIndex]; c += e, t.setLayout([o * Math.cos(c) + a, o * Math.sin(c) + r]), c += e }) } } , Hw = ut; xf(function(t) { var a = t.findComponents({ mainType: "legend" }); a && a.length && t.eachSeriesByType("graph", function(t) { var e = t.getCategoriesData() , n = t.getGraph().data , o = e.mapArray(e.getName); n.filterSelf(function(t) { var e = n.getItemModel(t).getShallow("category"); if (null != e) { "number" == typeof e && (e = o[e]); for (var i = 0; i < a.length; i++) if (!a[i].isSelected(e)) return !1 } return !0 }) }, this) }), Sf(Lm("graph", "circle", null)), Sf(function(t) { var h = {}; t.eachSeriesByType("graph", function(s) { var l = s.getCategoriesData() , o = s.getData() , u = {}; l.each(function(t) { var e = l.getName(t); u["ec-" + e] = t; var i = l.getItemModel(t) , n = i.get("itemStyle.color") || s.getColorFromPalette(e, h); l.setItemVisual(t, "color", n); for (var o = ["opacity", "symbol", "symbolSize", "symbolKeepAspect"], a = 0; a < o.length; a++) { var r = i.getShallow(o[a], !0); null != r && l.setItemVisual(t, o[a], r) } }), l.count() && o.each(function(t) { var e = o.getItemModel(t).getShallow("category"); if (null != e) { "string" == typeof e && (e = u["ec-" + e]); for (var i = ["color", "opacity", "symbol", "symbolSize", "symbolKeepAspect"], n = 0; n < i.length; n++) null == o.getItemVisual(t, i[n], !0) && o.setItemVisual(t, i[n], l.getItemVisual(e, i[n])) } }) }) }), Sf(function(t) { t.eachSeriesByType("graph", function(t) { var s = t.getGraph() , l = t.getEdgeData() , e = Rw(t.get("edgeSymbol")) , i = Rw(t.get("edgeSymbolSize")) , u = "lineStyle.color".split(".") , h = "lineStyle.opacity".split("."); l.setVisual("fromSymbol", e && e[0]), l.setVisual("toSymbol", e && e[1]), l.setVisual("fromSymbolSize", i && i[0]), l.setVisual("toSymbolSize", i && i[1]), l.setVisual("color", t.get(u)), l.setVisual("opacity", t.get(h)), l.each(function(t) { var e = l.getItemModel(t) , i = s.getEdgeByIndex(t) , n = Rw(e.getShallow("symbol", !0)) , o = Rw(e.getShallow("symbolSize", !0)) , a = e.get(u) , r = e.get(h); switch (a) { case "source": a = i.node1.getVisual("color"); break; case "target": a = i.node2.getVisual("color") } n[0] && i.setVisual("fromSymbol", n[0]), n[1] && i.setVisual("toSymbol", n[1]), o[0] && i.setVisual("fromSymbolSize", o[0]), o[1] && i.setVisual("toSymbolSize", o[1]), i.setVisual("color", a), i.setVisual("opacity", r) }) }) }), bf(function(t, e) { t.eachSeriesByType("graph", function(t) { var e = t.get("layout") , i = t.coordinateSystem; if (i && "view" !== i.type) { var n = t.getData() , o = []; E(i.dimensions, function(t) { o = o.concat(n.mapDimension(t, !0)) }); for (var a = 0; a < n.count(); a++) { for (var r = [], s = !1, l = 0; l < o.length; l++) { var u = n.get(o[l], a); isNaN(u) || (s = !0), r.push(u) } s ? n.setItemLayout(a, i.dataToPoint(r)) : n.setItemLayout(a, [NaN, NaN]) } Bw(n.graph) } else e && "none" !== e || zw(t) }) }), bf(Ld.VISUAL.POST_CHART_LAYOUT, function(t) { t.eachSeriesByType("graph", function(t) { "circular" === t.get("layout") && Fw(t, "symbolSize") }) }), bf(function(t) { t.eachSeriesByType("graph", function(t) { if (!(l = t.coordinateSystem) || "view" === l.type) if ("force" === t.get("layout")) { var c = t.preservedPoints || {} , d = t.getGraph() , f = d.data , e = d.edgeData , i = t.getModel("force") , n = i.get("initLayout"); t.preservedPoints ? f.each(function(t) { var e = f.getId(t); f.setItemLayout(t, c[e] || [NaN, NaN]) }) : n && "none" !== n ? "circular" === n && Fw(t, "value") : zw(t); var o = f.getDataExtent("value") , a = e.getDataExtent("value") , r = i.get("repulsion") , s = i.get("edgeLength"); L(r) || (r = [r, r]), L(s) || (s = [s, s]), s = [s[1], s[0]]; var l, u = f.mapArray("value", function(t, e) { var i = f.getItemLayout(e) , n = El(t, o, r); return isNaN(n) && (n = (r[0] + r[1]) / 2), { w: n, rep: n, fixed: f.getItemModel(e).get("fixed"), p: !i || isNaN(i[0]) || isNaN(i[1]) ? null : i } }), h = e.mapArray("value", function(t, e) { var i = d.getEdgeByIndex(e) , n = El(t, a, s); isNaN(n) && (n = (s[0] + s[1]) / 2); var o = i.getModel(); return { n1: u[i.node1.dataIndex], n2: u[i.node2.dataIndex], d: n, curveness: o.get("lineStyle.curveness") || 0, ignoreForceLayout: o.get("ignoreForceLayout") } }), p = (l = t.coordinateSystem).getBoundingRect(), g = function(f, p, t) { for (var e = t.rect, i = e.width, n = e.height, g = [e.x + i / 2, e.y + n / 2], m = null == t.gravity ? .1 : t.gravity, o = 0; o < f.length; o++) { var a = f[o]; a.p || (a.p = ot(i * (Math.random() - .5) + g[0], n * (Math.random() - .5) + g[1])), a.pp = rt(a.p), a.edges = null } var r = null == t.friction ? .6 : t.friction , v = r; return { warmUp: function() { v = .8 * r }, setFixed: function(t) { f[t].fixed = !0 }, setUnfixed: function(t) { f[t].fixed = !1 }, step: function(t) { for (var e = [], i = f.length, n = 0; n < p.length; n++) { var o = p[n]; if (!o.ignoreForceLayout) { var a = o.n1; ht(e, (u = o.n2).p, a.p); var r = ct(e) - o.d , s = u.w / (a.w + u.w); isNaN(s) && (s = 0), mt(e, e), a.fixed || Hw(a.p, a.p, e, s * r * v), u.fixed || Hw(u.p, u.p, e, -(1 - s) * r * v) } } for (n = 0; n < i; n++) { (d = f[n]).fixed || (ht(e, g, d.p), Hw(d.p, d.p, e, m * v)) } for (n = 0; n < i; n++) { a = f[n]; for (var l = n + 1; l < i; l++) { var u; ht(e, (u = f[l]).p, a.p), 0 === (r = ct(e)) && (st(e, Math.random() - .5, Math.random() - .5), r = 1); var h = (a.rep + u.rep) / r / r; a.fixed || Hw(a.pp, a.pp, e, h), u.fixed || Hw(u.pp, u.pp, e, -h) } } var c = []; for (n = 0; n < i; n++) { var d; (d = f[n]).fixed || (ht(c, d.p, d.pp), Hw(d.p, d.p, c, v), at(d.pp, d.p)) } v *= .992, t && t(f, p, v < .01) } } }(u, h, { rect: p, gravity: i.get("gravity"), friction: i.get("friction") }), m = g.step; g.step = function(h) { for (var t = 0, e = u.length; t < e; t++) u[t].fixed && at(u[t].p, d.getNodeByIndex(t).getLayout()); m(function(t, e, i) { for (var n = 0, o = t.length; n < o; n++) t[n].fixed || d.getNodeByIndex(n).setLayout(t[n].p), c[f.getId(n)] = t[n].p; for (n = 0, o = e.length; n < o; n++) { var a = e[n] , r = d.getEdgeByIndex(n) , s = a.n1.p , l = a.n2.p , u = r.getLayout(); (u = u ? u.slice() : [])[0] = u[0] || [], u[1] = u[1] || [], at(u[0], s), at(u[1], l), +a.curveness && (u[2] = [(s[0] + l[0]) / 2 - (s[1] - l[1]) * a.curveness, (s[1] + l[1]) / 2 - (l[0] - s[0]) * a.curveness]), r.setLayout(u) } h && h(i) }) } , t.forceLayout = g, t.preservedPoints = c, g.step() } else t.forceLayout = null }) }), wf("graphView", { create: function(t, d) { var f = []; return t.eachSeriesByType("graph", function(t) { var e = t.get("coordinateSystem"); if (!e || "view" === e) { var i = t.getData() , n = [] , o = []; Wa(i.mapArray(function(t) { var e = i.getItemModel(t); return [+e.get("x"), +e.get("y")] }), n, o), o[0] - n[0] == 0 && (o[0] += 1, n[0] -= 1), o[1] - n[1] == 0 && (o[1] += 1, n[1] -= 1); var a = (o[0] - n[0]) / (o[1] - n[1]) , r = function(t, e, i) { var n = t.getBoxLayoutParams(); return n.aspect = i, bu(n, { width: e.getWidth(), height: e.getHeight() }) }(t, d, a); isNaN(a) && (n = [r.x, r.y], o = [r.x + r.width, r.y + r.height]); var s = o[0] - n[0] , l = o[1] - n[1] , u = r.width , h = r.height , c = t.coordinateSystem = new lx; c.zoomLimit = t.get("scaleLimit"), c.setBoundingRect(n[0], n[1], s, l), c.setViewRect(r.x, r.y, u, h), c.setCenter(t.get("center")), c.setZoom(t.get("zoom")), f.push(c) } }), f } }); sc.extend({ type: "series.gauge", getInitialData: function(t, e) { return Yv(this, ["value"]) }, defaultOption: { zlevel: 0, z: 2, center: ["50%", "50%"], legendHoverLink: !0, radius: "75%", startAngle: 225, endAngle: -45, clockwise: !0, min: 0, max: 100, splitNumber: 10, axisLine: { show: !0, lineStyle: { color: [[.2, "#91c7ae"], [.8, "#63869e"], [1, "#c23531"]], width: 30 } }, splitLine: { show: !0, length: 30, lineStyle: { color: "#eee", width: 2, type: "solid" } }, axisTick: { show: !0, splitNumber: 5, length: 8, lineStyle: { color: "#eee", width: 1, type: "solid" } }, axisLabel: { show: !0, distance: 5, color: "auto" }, pointer: { show: !0, length: "80%", width: 8 }, itemStyle: { color: "auto" }, title: { show: !0, offsetCenter: [0, "-40%"], color: "#333", fontSize: 15 }, detail: { show: !0, backgroundColor: "rgba(0,0,0,0)", borderWidth: 0, borderColor: "#ccc", width: 100, height: null, padding: [5, 10], offsetCenter: [0, "40%"], color: "auto", fontSize: 30 } } }); var Zw = Ar.extend({ type: "echartsGaugePointer", shape: { angle: 0, width: 10, r: 10, x: 0, y: 0 }, buildPath: function(t, e) { var i = Math.cos , n = Math.sin , o = e.r , a = e.width , r = e.angle , s = e.x - i(r) * a * (o / 3 <= a ? 1 : 2) , l = e.y - n(r) * a * (o / 3 <= a ? 1 : 2); r = e.angle - Math.PI / 2, t.moveTo(s, l), t.lineTo(e.x + i(r) * a, e.y + n(r) * a), t.lineTo(e.x + i(e.angle) * o, e.y + n(e.angle) * o), t.lineTo(e.x - i(r) * a, e.y - n(r) * a), t.lineTo(s, l) } }); function Uw(t, e) { return e && ("string" == typeof e ? t = e.replace("{value}", null != t ? t : "") : "function" == typeof e && (t = e(t))), t } var Xw = 2 * Math.PI , Yw = (_c.extend({ type: "gauge", render: function(t, e, i) { this.group.removeAll(); var n = t.get("axisLine.lineStyle.color") , o = function(t, e) { var i = t.get("center") , n = e.getWidth() , o = e.getHeight() , a = Math.min(n, o); return { cx: Rl(i[0], e.getWidth()), cy: Rl(i[1], e.getHeight()), r: Rl(t.get("radius"), a / 2) } }(t, i); this._renderMain(t, e, i, n, o) }, dispose: function() {}, _renderMain: function(t, e, i, n, o) { for (var a = this.group, r = t.getModel("axisLine"), s = r.getModel("lineStyle"), l = t.get("clockwise"), u = -t.get("startAngle") / 180 * Math.PI, h = ((g = -t.get("endAngle") / 180 * Math.PI) - u) % Xw, c = u, d = s.get("width"), f = r.get("show"), p = 0; f && p < n.length; p++) { var g, m = Math.min(Math.max(n[p][0], 0), 1), v = new qr({ shape: { startAngle: c, endAngle: g = u + h * m, cx: o.cx, cy: o.cy, clockwise: l, r0: o.r - d, r: o.r }, silent: !0 }); v.setStyle({ fill: n[p][1] }), v.setStyle(s.getLineStyle(["color", "borderWidth", "borderColor"])), a.add(v), c = g } function y(t) { if (t <= 0) return n[0][1]; for (var e = 0; e < n.length; e++) if (n[e][0] >= t && (0 === e ? 0 : n[e - 1][0]) < t) return n[e][1]; return n[e - 1][1] } if (!l) { var x = u; u = g, g = x } this._renderTicks(t, e, i, y, o, u, g, l), this._renderPointer(t, e, i, y, o, u, g, l), this._renderTitle(t, e, i, y, o), this._renderDetail(t, e, i, y, o) }, _renderTicks: function(t, e, i, n, o, a, r, s) { for (var l = this.group, u = o.cx, h = o.cy, c = o.r, d = +t.get("min"), f = +t.get("max"), p = t.getModel("splitLine"), g = t.getModel("axisTick"), m = t.getModel("axisLabel"), v = t.get("splitNumber"), y = g.get("splitNumber"), x = Rl(p.get("length"), c), _ = Rl(g.get("length"), c), w = a, b = (r - a) / v, S = b / y, M = p.getModel("lineStyle").getLineStyle(), I = g.getModel("lineStyle").getLineStyle(), T = 0; T <= v; T++) { var A = Math.cos(w) , D = Math.sin(w); if (p.get("show")) { var C = new ls({ shape: { x1: A * c + u, y1: D * c + h, x2: A * (c - x) + u, y2: D * (c - x) + h }, style: M, silent: !0 }); "auto" === M.stroke && C.setStyle({ stroke: n(T / v) }), l.add(C) } if (m.get("show")) { var L = Uw(zl(T / v * (f - d) + d), m.get("formatter")) , k = m.get("distance") , P = n(T / v); l.add(new Ur({ style: nl({}, m, { text: L, x: A * (c - x - k) + u, y: D * (c - x - k) + h, textVerticalAlign: D < -.4 ? "top" : .4 < D ? "bottom" : "middle", textAlign: A < -.4 ? "left" : .4 < A ? "right" : "center" }, { autoColor: P }), silent: !0 })) } if (g.get("show") && T !== v) { for (var N = 0; N <= y; N++) { A = Math.cos(w), D = Math.sin(w); var O = new ls({ shape: { x1: A * c + u, y1: D * c + h, x2: A * (c - _) + u, y2: D * (c - _) + h }, silent: !0, style: I }); "auto" === I.stroke && O.setStyle({ stroke: n((T + N / y) / v) }), l.add(O), w += S } w -= S } else w += b } }, _renderPointer: function(n, t, e, o, a, i, r, s) { var l = this.group , u = this._data; if (n.get("pointer.show")) { var h = [+n.get("min"), +n.get("max")] , c = [i, r] , d = n.getData() , f = d.mapDimension("value"); d.diff(u).add(function(t) { var e = new Zw({ shape: { angle: i } }); dl(e, { shape: { angle: El(d.get(f, t), h, c, !0) } }, n), l.add(e), d.setItemGraphicEl(t, e) }).update(function(t, e) { var i = u.getItemGraphicEl(e); cl(i, { shape: { angle: El(d.get(f, t), h, c, !0) } }, n), l.add(i), d.setItemGraphicEl(t, i) }).remove(function(t) { var e = u.getItemGraphicEl(t); l.remove(e) }).execute(), d.eachItemGraphicEl(function(t, e) { var i = d.getItemModel(e) , n = i.getModel("pointer"); t.setShape({ x: a.cx, y: a.cy, width: Rl(n.get("width"), a.r), r: Rl(n.get("length"), a.r) }), t.useStyle(i.getModel("itemStyle").getItemStyle()), "auto" === t.style.fill && t.setStyle("fill", o(El(d.get(f, e), h, [0, 1], !0))), $s(t, i.getModel("emphasis.itemStyle").getItemStyle()) }), this._data = d } else u && u.eachItemGraphicEl(function(t) { l.remove(t) }) }, _renderTitle: function(t, e, i, n, o) { var a = t.getData() , r = a.mapDimension("value") , s = t.getModel("title"); if (s.get("show")) { var l = s.get("offsetCenter") , u = o.cx + Rl(l[0], o.r) , h = o.cy + Rl(l[1], o.r) , c = +t.get("min") , d = +t.get("max") , f = n(El(t.getData().get(r, 0), [c, d], [0, 1], !0)); this.group.add(new Ur({ silent: !0, style: nl({}, s, { x: u, y: h, text: a.getName(0), textAlign: "center", textVerticalAlign: "middle" }, { autoColor: f, forceRich: !0 }) })) } }, _renderDetail: function(t, e, i, n, o) { var a = t.getModel("detail") , r = +t.get("min") , s = +t.get("max"); if (a.get("show")) { var l = a.get("offsetCenter") , u = o.cx + Rl(l[0], o.r) , h = o.cy + Rl(l[1], o.r) , c = Rl(a.get("width"), o.r) , d = Rl(a.get("height"), o.r) , f = t.getData() , p = f.get(f.mapDimension("value"), 0) , g = n(El(p, [r, s], [0, 1], !0)); this.group.add(new Ur({ silent: !0, style: nl({}, a, { x: u, y: h, text: Uw(p, a.get("formatter")), textWidth: isNaN(c) ? null : c, textHeight: isNaN(d) ? null : d, textAlign: "center", textVerticalAlign: "middle" }, { autoColor: g, forceRich: !0 }) })) } } }), Df({ type: "series.funnel", init: function(t) { Yw.superApply(this, "init", arguments), this.legendVisualProvider = new qv(A(this.getData, this),A(this.getRawData, this)), this._defaultLabelLine(t) }, getInitialData: function(t, e) { return Yv(this, { coordDimensions: ["value"], encodeDefaulter: T(Ju, this) }) }, _defaultLabelLine: function(t) { Go(t, "labelLine", ["show"]); var e = t.labelLine , i = t.emphasis.labelLine; e.show = e.show && t.label.show, i.show = i.show && t.emphasis.label.show }, getDataParams: function(t) { var e = this.getData() , i = Yw.superCall(this, "getDataParams", t) , n = e.mapDimension("value") , o = e.getSum(n); return i.percent = o ? +(e.get(n, t) / o * 100).toFixed(2) : 0, i.$vars.push("percent"), i }, defaultOption: { zlevel: 0, z: 2, legendHoverLink: !0, left: 80, top: 60, right: 80, bottom: 60, minSize: "0%", maxSize: "100%", sort: "descending", gap: 0, funnelAlign: "center", label: { show: !0, position: "outer" }, labelLine: { show: !0, length: 20, lineStyle: { width: 1, type: "solid" } }, itemStyle: { borderColor: "#fff", borderWidth: 1 }, emphasis: { label: { show: !0 } } } })); function jw(t, e) { Ci.call(this); var i = new Qr , n = new ts , o = new Ur; this.add(i), this.add(n), this.add(o), this.highDownOnUpdate = function(t, e) { "emphasis" === e ? (n.ignore = n.hoverIgnore, o.ignore = o.hoverIgnore) : (n.ignore = n.normalIgnore, o.ignore = o.normalIgnore) } , this.updateData(t, e, !0) } var qw = jw.prototype , Kw = ["itemStyle", "opacity"]; qw.updateData = function(t, e, i) { var n = this.childAt(0) , o = t.hostModel , a = t.getItemModel(e) , r = t.getItemLayout(e) , s = t.getItemModel(e).get(Kw); s = null == s ? 1 : s, n.useStyle({}), i ? (n.setShape({ points: r.points }), n.setStyle({ opacity: 0 }), dl(n, { style: { opacity: s } }, o, e)) : cl(n, { style: { opacity: s }, shape: { points: r.points } }, o, e); var l = a.getModel("itemStyle") , u = t.getItemVisual(e, "color"); n.setStyle(D({ lineJoin: "round", fill: u }, l.getItemStyle(["opacity"]))), n.hoverStyle = l.getModel("emphasis").getItemStyle(), this._updateLabel(t, e), $s(this) } , qw._updateLabel = function(t, e) { var i = this.childAt(1) , n = this.childAt(2) , o = t.hostModel , a = t.getItemModel(e) , r = t.getItemLayout(e).label , s = t.getItemVisual(e, "color"); cl(i, { shape: { points: r.linePoints || r.linePoints } }, o, e), cl(n, { style: { x: r.x, y: r.y } }, o, e), n.attr({ rotation: r.rotation, origin: [r.x, r.y], z2: 10 }); var l = a.getModel("label") , u = a.getModel("emphasis.label") , h = a.getModel("labelLine") , c = a.getModel("emphasis.labelLine"); s = t.getItemVisual(e, "color"); el(n.style, n.hoverStyle = {}, l, u, { labelFetcher: t.hostModel, labelDataIndex: e, defaultText: t.getName(e), autoColor: s, useInsideStyle: !!r.inside }, { textAlign: r.textAlign, textVerticalAlign: r.verticalAlign }), n.ignore = n.normalIgnore = !l.get("show"), n.hoverIgnore = !u.get("show"), i.ignore = i.normalIgnore = !h.get("show"), i.hoverIgnore = !c.get("show"), i.setStyle({ stroke: s }), i.setStyle(h.getModel("lineStyle").getLineStyle()), i.hoverStyle = c.getModel("lineStyle").getLineStyle() } , w(jw, Ci); _c.extend({ type: "funnel", render: function(t, e, i) { var n = t.getData() , o = this._data , a = this.group; n.diff(o).add(function(t) { var e = new jw(n,t); n.setItemGraphicEl(t, e), a.add(e) }).update(function(t, e) { var i = o.getItemGraphicEl(e); i.updateData(n, t), a.add(i), n.setItemGraphicEl(t, i) }).remove(function(t) { var e = o.getItemGraphicEl(t); a.remove(e) }).execute(), this._data = n }, remove: function() { this.group.removeAll(), this._data = null }, dispose: function() {} }); Sf(iy("funnel")), bf(function(t, w, e) { t.eachSeriesByType("funnel", function(t) { var o = t.getData() , a = o.mapDimension("value") , e = t.get("sort") , r = function(t, e) { return bu(t.getBoxLayoutParams(), { width: e.getWidth(), height: e.getHeight() }) }(t, w) , i = function(t, e) { for (var i = t.mapDimension("value"), n = t.mapArray(i, function(t) { return t }), o = [], a = "ascending" === e, r = 0, s = t.count(); r < s; r++) o[r] = r; return "function" == typeof e ? o.sort(e) : "none" !== e && o.sort(function(t, e) { return a ? n[t] - n[e] : n[e] - n[t] }), o }(o, e) , s = [Rl(t.get("minSize"), r.width), Rl(t.get("maxSize"), r.width)] , n = o.getDataExtent(a) , l = t.get("min") , u = t.get("max"); null == l && (l = Math.min(n[0], 0)), null == u && (u = n[1]); function h(t, e) { var i, n = El(o.get(a, t) || 0, [l, u], s, !0); switch (c) { case "left": i = r.x; break; case "center": i = r.x + (r.width - n) / 2; break; case "right": i = r.x + r.width - n } return [[i, e], [i + n, e]] } var c = t.get("funnelAlign") , d = t.get("gap") , f = (r.height - d * (o.count() - 1)) / o.count() , p = r.y; "ascending" === e && (f = -f, d = -d, p += r.height, i = i.reverse()); for (var g = 0; g < i.length; g++) { var m = i[g] , v = i[g + 1] , y = o.getItemModel(m).get("itemStyle.height"); null == y ? y = f : (y = Rl(y, r.height), "ascending" === e && (y = -y)); var x = h(m, p) , _ = h(v, p + y); p += y + d, o.setItemLayout(m, { points: x.concat(_.slice().reverse()) }) } !function(g) { g.each(function(t) { var e, i, n, o, a = g.getItemModel(t), r = a.getModel("label").get("position"), s = a.getModel("labelLine"), l = g.getItemLayout(t), u = l.points, h = "inner" === r || "inside" === r || "center" === r || "insideLeft" === r || "insideRight" === r; if (h) e = "insideLeft" === r ? (i = (u[0][0] + u[3][0]) / 2 + 5, n = (u[0][1] + u[3][1]) / 2, "left") : "insideRight" === r ? (i = (u[1][0] + u[2][0]) / 2 - 5, n = (u[1][1] + u[2][1]) / 2, "right") : (i = (u[0][0] + u[1][0] + u[2][0] + u[3][0]) / 4, n = (u[0][1] + u[1][1] + u[2][1] + u[3][1]) / 4, "center"), o = [[i, n], [i, n]]; else { var c, d, f, p = s.get("length"); e = "left" === r ? (c = (u[3][0] + u[0][0]) / 2, d = (u[3][1] + u[0][1]) / 2, i = (f = c - p) - 5, "right") : "right" === r ? (c = (u[1][0] + u[2][0]) / 2, d = (u[1][1] + u[2][1]) / 2, i = (f = c + p) + 5, "left") : "rightTop" === r ? (c = u[1][0], d = u[1][1], i = (f = c + p) + 5, "top") : "rightBottom" === r ? (c = u[2][0], d = u[2][1], i = (f = c + p) + 5, "bottom") : "leftTop" === r ? (c = u[0][0], d = u[1][1], i = (f = c - p) - 5, "right") : "leftBottom" === r ? (c = u[3][0], d = u[2][1], i = (f = c - p) - 5, "right") : (c = (u[1][0] + u[2][0]) / 2, d = (u[1][1] + u[2][1]) / 2, i = (f = c + p) + 5, "left"); o = [[c, d], [f, d]], n = d } l.label = { linePoints: o, x: i, y: n, verticalAlign: "middle", textAlign: e, inside: h } }) }(o) }) }), xf(uy("funnel")); function $w(t, e, i, n, o) { Gg.call(this, t, e, i), this.type = n || "value", this.axisIndex = o } $w.prototype = { constructor: $w, model: null, isHorizontal: function() { return "horizontal" !== this.coordinateSystem.getModel().get("layout") } }, w($w, Gg); function Jw(t, e, i, n, o, a) { t = t || 0; var r = i[1] - i[0]; if (null != o && (o = tb(o, [0, r])), null != a && (a = Math.max(a, null != o ? o : 0)), "all" === n) { var s = Math.abs(e[1] - e[0]); o = a = tb(s = tb(s, [0, r]), [o, a]), n = 0 } e[0] = tb(e[0], i), e[1] = tb(e[1], i); var l = Qw(e, n); e[n] += t; var u = o || 0 , h = i.slice(); l.sign < 0 ? h[0] += u : h[1] -= u, e[n] = tb(e[n], h); var c = Qw(e, n); return null != o && (c.sign !== l.sign || c.span < o) && (e[1 - n] = e[n] + l.sign * o), c = Qw(e, n), null != a && c.span > a && (e[1 - n] = e[n] + c.sign * a), e } function Qw(t, e) { var i = t[e] - t[1 - e]; return { span: Math.abs(i), sign: 0 < i ? -1 : i < 0 ? 1 : e ? -1 : 1 } } function tb(t, e) { return Math.min(null != e[1] ? e[1] : 1 / 0, Math.max(null != e[0] ? e[0] : -1 / 0, t)) } var eb = E , ib = Math.min , nb = Math.max , ob = Math.floor , ab = Math.ceil , rb = zl , sb = Math.PI; function lb(t, e, i) { this._axesMap = Q(), this._axesLayout = {}, this.dimensions = t.dimensions, this._rect, this._model = t, this._init(t, e, i) } function ub(t, e) { return ib(nb(t, e[0]), e[1]) } lb.prototype = { type: "parallel", constructor: lb, _init: function(t, r, e) { var i = t.dimensions , s = t.parallelAxisIndex; eb(i, function(t, e) { var i = s[e] , n = r.getComponent("parallelAxis", i) , o = this._axesMap.set(t, new $w(t,sg(n),[0, 0],n.get("type"),i)) , a = "category" === o.type; o.onBand = a && n.get("boundaryGap"), o.inverse = n.get("inverse"), (n.axis = o).model = n, o.coordinateSystem = n.coordinateSystem = this }, this) }, update: function(t, e) { this._updateAxesFromSeries(this._model, t) }, containPoint: function(t) { var e = this._makeLayoutInfo() , i = e.axisBase , n = e.layoutBase , o = e.pixelDimIndex , a = t[1 - o] , r = t[o]; return i <= a && a <= i + e.axisLength && n <= r && r <= n + e.layoutLength }, getModel: function() { return this._model }, _updateAxesFromSeries: function(e, n) { n.eachSeries(function(t) { if (e.contains(t, n)) { var i = t.getData(); eb(this.dimensions, function(t) { var e = this._axesMap.get(t); e.scale.unionExtentFromData(i, i.mapDimension(t)), rg(e.scale, e.model) }, this) } }, this) }, resize: function(t, e) { this._rect = bu(t.getBoxLayoutParams(), { width: e.getWidth(), height: e.getHeight() }), this._layoutAxes() }, getRect: function() { return this._rect }, _makeLayoutInfo: function() { var t, e = this._model, i = this._rect, n = ["x", "y"], o = ["width", "height"], a = e.get("layout"), r = "horizontal" === a ? 0 : 1, s = i[o[r]], l = [0, s], u = this.dimensions.length, h = ub(e.get("axisExpandWidth"), l), c = ub(e.get("axisExpandCount") || 0, [0, u]), d = e.get("axisExpandable") && 3 < u && c < u && 1 < c && 0 < h && 0 < s, f = e.get("axisExpandWindow"); f ? (t = ub(f[1] - f[0], l), f[1] = f[0] + t) : (t = ub(h * (c - 1), l), (f = [h * (e.get("axisExpandCenter") || ob(u / 2)) - t / 2])[1] = f[0] + t); var p = (s - t) / (u - c); p < 3 && (p = 0); var g = [ob(rb(f[0] / h, 1)) + 1, ab(rb(f[1] / h, 1)) - 1] , m = p / h * f[0]; return { layout: a, pixelDimIndex: r, layoutBase: i[n[r]], layoutLength: s, axisBase: i[n[1 - r]], axisLength: i[o[1 - r]], axisExpandable: d, axisExpandWidth: h, axisCollapseWidth: p, axisExpandWindow: f, axisCount: u, winInnerIndices: g, axisExpandWindow0Pos: m } }, _layoutAxes: function() { var l = this._rect , t = this._axesMap , e = this.dimensions , u = this._makeLayoutInfo() , h = u.layout; t.each(function(t) { var e = [0, u.axisLength] , i = t.inverse ? 1 : 0; t.setExtent(e[i], e[1 - i]) }), eb(e, function(t, e) { var i = (u.axisExpandable ? function(t, e) { var i, n, o = e.layoutLength, a = e.axisExpandWidth, r = e.axisCount, s = e.axisCollapseWidth, l = e.winInnerIndices, u = s, h = !1; t < l[0] ? (i = t * s, n = s) : t <= l[1] ? (i = e.axisExpandWindow0Pos + t * a - e.axisExpandWindow[0], u = a, h = !0) : (i = o - (r - 1 - t) * s, n = s); return { position: i, axisNameAvailableWidth: u, axisLabelShow: h, nameTruncateMaxWidth: n } } : function(t, e) { var i = e.layoutLength / (e.axisCount - 1); return { position: i * t, axisNameAvailableWidth: i, axisLabelShow: !0 } } )(e, u) , n = { horizontal: { x: i.position, y: u.axisLength }, vertical: { x: 0, y: i.position } } , o = { horizontal: sb / 2, vertical: 0 } , a = [n[h].x + l.x, n[h].y + l.y] , r = o[h] , s = ae(); he(s, s, r), ue(s, s, a), this._axesLayout[t] = { position: a, rotation: r, transform: s, axisNameAvailableWidth: i.axisNameAvailableWidth, axisLabelShow: i.axisLabelShow, nameTruncateMaxWidth: i.nameTruncateMaxWidth, tickDirection: 1, labelDirection: 1 } }, this) }, getAxis: function(t) { return this._axesMap.get(t) }, dataToPoint: function(t, e) { return this.axisCoordToPoint(this._axesMap.get(e).dataToCoord(t), e) }, eachActiveState: function(e, t, i, n) { null == i && (i = 0), null == n && (n = e.count()); var o = this._axesMap , a = this.dimensions , r = [] , s = []; E(a, function(t) { r.push(e.mapDimension(t)), s.push(o.get(t).model) }); for (var l = this.hasAxisBrushed(), u = i; u < n; u++) { var h; if (l) { h = "active"; for (var c = e.getValues(r, u), d = 0, f = a.length; d < f; d++) { if ("inactive" === s[d].getActiveState(c[d])) { h = "inactive"; break } } } else h = "normal"; t(h, u) } }, hasAxisBrushed: function() { for (var t = this.dimensions, e = this._axesMap, i = !1, n = 0, o = t.length; n < o; n++) "normal" !== e.get(t[n]).model.getActiveState() && (i = !0); return i }, axisCoordToPoint: function(t, e) { return pl([t, 0], this._axesLayout[e].transform) }, getAxisLayout: function(t) { return k(this._axesLayout[t]) }, getSlidedAxisExpandWindow: function(t) { var e = this._makeLayoutInfo() , i = e.pixelDimIndex , n = e.axisExpandWindow.slice() , o = n[1] - n[0] , a = [0, e.axisExpandWidth * (e.axisCount - 1)]; if (!this.containPoint(t)) return { behavior: "none", axisExpandWindow: n }; var r, s = t[i] - e.layoutBase - e.axisExpandWindow0Pos, l = "slide", u = e.axisCollapseWidth, h = this._model.get("axisExpandSlideTriggerArea"), c = null != h[0]; if (u) c && u && s < o * h[0] ? (l = "jump", r = s - o * h[2]) : c && u && s > o * (1 - h[0]) ? (l = "jump", r = s - o * (1 - h[2])) : 0 <= (r = s - o * h[1]) && (r = s - o * (1 - h[1])) <= 0 && (r = 0), (r *= e.axisExpandWidth / u) ? Jw(r, n, a, "all") : l = "none"; else { o = n[1] - n[0]; (n = [nb(0, a[1] * s / o - o / 2)])[1] = ib(a[1], n[0] + o), n[0] = n[1] - o } return { axisExpandWindow: n, behavior: l } } }, lh.register("parallel", { create: function(n, o) { var a = []; return n.eachComponent("parallel", function(t, e) { var i = new lb(t,n,o); i.name = "parallel_" + e, i.resize(t, o), (t.coordinateSystem = i).model = t, a.push(i) }), n.eachSeries(function(t) { if ("parallel" === t.get("coordinateSystem")) { var e = n.queryComponents({ mainType: "parallel", index: t.get("parallelIndex"), id: t.get("parallelId") })[0]; t.coordinateSystem = e.coordinateSystem } }), a } }); var hb = ku.extend({ type: "baseParallelAxis", axis: null, activeIntervals: [], getAreaSelectStyle: function() { return ha([["fill", "color"], ["lineWidth", "borderWidth"], ["stroke", "borderColor"], ["width", "width"], ["opacity", "opacity"]])(this.getModel("areaSelectStyle")) }, setActiveIntervals: function(t) { var e = this.activeIntervals = k(t); if (e) for (var i = e.length - 1; 0 <= i; i--) Bl(e[i]) }, getActiveState: function(t) { var e = this.activeIntervals; if (!e.length) return "normal"; if (null == t || isNaN(t)) return "inactive"; if (1 === e.length) { var i = e[0]; if (i[0] <= t && t <= i[1]) return "active" } else for (var n = 0, o = e.length; n < o; n++) if (e[n][0] <= t && t <= e[n][1]) return "active"; return "inactive" } }); m(hb.prototype, dg), Gm("parallel", hb, function(t, e) { return e.type || (e.data ? "category" : "value") }, { type: "value", dim: null, areaSelectStyle: { width: 20, borderWidth: 1, borderColor: "rgba(160,197,232)", color: "rgba(160,197,232)", opacity: .3 }, realtime: !0, z: 10 }), ku.extend({ type: "parallel", dependencies: ["parallelAxis"], coordinateSystem: null, dimensions: null, parallelAxisIndex: null, layoutMode: "box", defaultOption: { zlevel: 0, z: 0, left: 80, top: 60, right: 80, bottom: 60, layout: "horizontal", axisExpandable: !1, axisExpandCenter: null, axisExpandCount: 0, axisExpandWidth: 50, axisExpandRate: 17, axisExpandDebounce: 50, axisExpandSlideTriggerArea: [-.15, .05, .4], axisExpandTriggerOn: "click", parallelAxisDefault: null }, init: function() { ku.prototype.init.apply(this, arguments), this.mergeOption({}) }, mergeOption: function(t) { var e = this.option; t && m(e, t, !0), this._initDimensions() }, contains: function(t, e) { var i = t.get("parallelIndex"); return null != i && e.getComponent("parallel", i) === this }, setAxisExpand: function(e) { E(["axisExpandable", "axisExpandCenter", "axisExpandCount", "axisExpandWidth", "axisExpandWindow"], function(t) { e.hasOwnProperty(t) && (this.option[t] = e[t]) }, this) }, _initDimensions: function() { var e = this.dimensions = [] , i = this.parallelAxisIndex = []; E(M(this.dependentModels.parallelAxis, function(t) { return (t.get("parallelIndex") || 0) === this.componentIndex }, this), function(t) { e.push("dim" + t.get("dim")), i.push(t.componentIndex) }) } }); _f({ type: "axisAreaSelect", event: "axisAreaSelected" }, function(e, t) { t.eachComponent({ mainType: "parallelAxis", query: e }, function(t) { t.axis.model.setActiveIntervals(e.intervals) }) }), _f("parallelAxisExpand", function(e, t) { t.eachComponent({ mainType: "parallel", query: e }, function(t) { t.setAxisExpand(e) }) }); var cb = T , db = E , fb = O , pb = Math.min , gb = Math.max , mb = Math.pow , vb = 1e4 , yb = 6 , xb = 6 , _b = "globalPan" , wb = { w: [0, 0], e: [0, 1], n: [1, 0], s: [1, 1] } , bb = { w: "ew", e: "ew", n: "ns", s: "ns", ne: "nesw", sw: "nesw", nw: "nwse", se: "nwse" } , Sb = { brushStyle: { lineWidth: 2, stroke: "rgba(0,0,0,0.3)", fill: "rgba(0,0,0,0.1)" }, transformable: !0, brushMode: "single", removeOnClick: !1 } , Mb = 0; function Ib(t) { Ct.call(this), this._zr = t, this.group = new Ci, this._brushType, this._brushOption, this._panels, this._track = [], this._dragging, this._covers = [], this._creatingCover, this._creatingPanel, this._enableGlobalPan, this._uid = "brushController_" + Mb++, this._handlers = {}, db($b, function(t, e) { this._handlers[e] = A(t, this) }, this) } function Tb(t, e) { var i = Qb[e.brushType].createCover(t, e); return i.__brushOption = e, Cb(i, e), t.group.add(i), i } function Ab(t, e) { var i = kb(e); return i.endCreating && (i.endCreating(t, e), Cb(e, e.__brushOption)), e } function Db(t, e) { var i = e.__brushOption; kb(e).updateCoverShape(t, e, i.range, i) } function Cb(t, e) { var i = e.z; null == i && (i = vb), t.traverse(function(t) { t.z = i, t.z2 = i }) } function Lb(t, e) { kb(e).updateCommon(t, e), Db(t, e) } function kb(t) { return Qb[t.__brushOption.brushType] } function Pb(t, e, i) { var n, o = t._panels; if (!o) return !0; var a = t._transform; return db(o, function(t) { t.isTargetByCursor(e, i, a) && (n = t) }), n } function Nb(t, e) { var i = t._panels; if (!i) return !0; var n = e.__brushOption.panelId; return null == n || i[n] } function Ob(e) { var t = e._covers , i = t.length; return db(t, function(t) { e.group.remove(t) }, e), t.length = 0, !!i } function Eb(t, e) { var i = fb(t._covers, function(t) { var e = t.__brushOption , i = k(e.range); return { brushType: e.brushType, panelId: e.panelId, range: i } }); t.trigger("brush", i, { isEnd: !!e.isEnd, removeOnClick: !!e.removeOnClick }) } function Rb(t) { var e = t.length - 1; return e < 0 && (e = 0), [t[0], t[e]] } function zb(e, i, t, n) { var o = new Ci; return o.add(new rs({ name: "main", style: Fb(t), silent: !0, draggable: !0, cursor: "move", drift: cb(e, i, o, "nswe"), ondragend: cb(Eb, i, { isEnd: !0 }) })), db(n, function(t) { o.add(new rs({ name: t, style: { opacity: 0 }, draggable: !0, silent: !0, invisible: !0, drift: cb(e, i, o, t), ondragend: cb(Eb, i, { isEnd: !0 }) })) }), o } function Bb(t, e, i, n) { var o = n.brushStyle.lineWidth || 0 , a = gb(o, xb) , r = i[0][0] , s = i[1][0] , l = r - o / 2 , u = s - o / 2 , h = i[0][1] , c = i[1][1] , d = h - a + o / 2 , f = c - a + o / 2 , p = h - r , g = c - s , m = p + o , v = g + o; Gb(t, e, "main", r, s, p, g), n.transformable && (Gb(t, e, "w", l, u, a, v), Gb(t, e, "e", d, u, a, v), Gb(t, e, "n", l, u, m, a), Gb(t, e, "s", l, f, m, a), Gb(t, e, "nw", l, u, a, a), Gb(t, e, "ne", d, u, a, a), Gb(t, e, "sw", l, f, a, a), Gb(t, e, "se", d, f, a, a)) } function Vb(n, o) { var t = o.__brushOption , a = t.transformable , e = o.childAt(0); e.useStyle(Fb(t)), e.attr({ silent: !a, cursor: a ? "move" : "default" }), db(["w", "e", "n", "s", "se", "sw", "ne", "nw"], function(t) { var e = o.childOfName(t) , i = function t(e, i) { { if (1 < i.length) { i = i.split(""); var n = [t(e, i[0]), t(e, i[1])]; return "e" !== n[0] && "w" !== n[0] || n.reverse(), n.join("") } var o = { w: "left", e: "right", n: "top", s: "bottom" } , a = { left: "w", right: "e", top: "n", bottom: "s" } , n = gl(o[i], fl(e.group)); return a[n] } }(n, t); e && e.attr({ silent: !a, invisible: !a, cursor: a ? bb[i] + "-resize" : null }) }) } function Gb(t, e, i, n, o, a, r) { var s = e.childOfName(i); s && s.setShape(function(t) { var e = pb(t[0][0], t[1][0]) , i = pb(t[0][1], t[1][1]) , n = gb(t[0][0], t[1][0]) , o = gb(t[0][1], t[1][1]); return { x: e, y: i, width: n - e, height: o - i } }(Xb(t, e, [[n, o], [n + a, o + r]]))) } function Fb(t) { return D({ strokeNoScale: !0 }, t.brushStyle) } function Wb(t, e, i, n) { var o = [pb(t, i), pb(e, n)] , a = [gb(t, i), gb(e, n)]; return [[o[0], a[0]], [o[1], a[1]]] } function Hb(t, e, i, n, o, a, r, s) { var l = n.__brushOption , u = t(l.range) , h = Ub(i, a, r); db(o.split(""), function(t) { var e = wb[t]; u[e[0]][e[1]] += h[e[0]] }), l.range = e(Wb(u[0][0], u[1][0], u[0][1], u[1][1])), Lb(i, n), Eb(i, { isEnd: !1 }) } function Zb(t, e, i, n, o) { var a = e.__brushOption.range , r = Ub(t, i, n); db(a, function(t) { t[0] += r[0], t[1] += r[1] }), Lb(t, e), Eb(t, { isEnd: !1 }) } function Ub(t, e, i) { var n = t.group , o = n.transformCoordToLocal(e, i) , a = n.transformCoordToLocal(0, 0); return [o[0] - a[0], o[1] - a[1]] } function Xb(t, e, i) { var n = Nb(t, e); return n && !0 !== n ? n.clipPath(i, t._transform) : k(i) } function Yb(t) { var e = t.event; e.preventDefault && e.preventDefault() } function jb(t, e, i) { return t.childOfName("main").contain(e, i) } function qb(t, e, i, n) { var o, a = t._creatingCover, r = t._creatingPanel, s = t._brushOption; if (t._track.push(i.slice()), function(t) { var e = t._track; if (!e.length) return !1; var i = e[e.length - 1] , n = e[0] , o = i[0] - n[0] , a = i[1] - n[1] , r = mb(o * o + a * a, .5); return yb < r }(t) || a) { if (r && !a) { "single" === s.brushMode && Ob(t); var l = k(s); l.brushType = Kb(l.brushType, r), l.panelId = !0 === r ? null : r.panelId, a = t._creatingCover = Tb(t, l), t._covers.push(a) } if (a) { var u = Qb[Kb(t._brushType, r)]; a.__brushOption.range = u.getCreatingRange(Xb(t, a, t._track)), n && (Ab(t, a), u.updateCommon(t, a)), Db(t, a), o = { isEnd: n } } } else n && "single" === s.brushMode && s.removeOnClick && Pb(t, e, i) && Ob(t) && (o = { isEnd: n, removeOnClick: !0 }); return o } function Kb(t, e) { return "auto" === t ? e.defaultBrushType : t } Ib.prototype = { constructor: Ib, enableBrush: function(t) { return this._brushType && function(t) { var e = t._zr; (function(t, e, i) { var n = By(t); n[e] === i && (n[e] = null) } )(e, _b, t._uid), function(i, t) { db(t, function(t, e) { i.off(e, t) }) }(e, t._handlers), t._brushType = t._brushOption = null }(this), t.brushType && function(t, e) { var i = t._zr; t._enableGlobalPan || function(t, e, i) { By(t)[e] = i }(i, _b, t._uid); (function(i, t) { db(t, function(t, e) { i.on(e, t) }) } )(i, t._handlers), t._brushType = e.brushType, t._brushOption = m(k(Sb), e, !0) }(this, t), this }, setPanels: function(t) { if (t && t.length) { var e = this._panels = {}; E(t, function(t) { e[t.panelId] = k(t) }) } else this._panels = null; return this }, mount: function(t) { t = t || {}, this._enableGlobalPan = t.enableGlobalPan; var e = this.group; return this._zr.add(e), e.attr({ position: t.position || [0, 0], rotation: t.rotation || 0, scale: t.scale || [1, 1] }), this._transform = e.getLocalTransform(), this }, eachCover: function(t, e) { db(this._covers, t, e) }, updateCovers: function(o) { o = O(o, function(t) { return m(k(Sb), t, !0) }); var i = "\0-brush-index-" , a = this._covers , r = this._covers = [] , s = this , l = this._creatingCover; return new kf(a,o,function(t, e) { return n(t.__brushOption, e) } ,n).add(t).update(t).remove(function(t) { a[t] !== l && s.group.remove(a[t]) }).execute(), this; function n(t, e) { return (null != t.id ? t.id : i + e) + "-" + t.brushType } function t(t, e) { var i = o[t]; if (null != e && a[e] === l) r[t] = a[e]; else { var n = r[t] = null != e ? (a[e].__brushOption = i, a[e]) : Ab(s, Tb(s, i)); Lb(s, n) } } }, unmount: function() { return this.enableBrush(!1), Ob(this), this._zr.remove(this.group), this }, dispose: function() { this.unmount(), this.off() } }, b(Ib, Ct); var $b = { mousedown: function(t) { if (this._dragging) Jb(this, t); else if (!t.target || !t.target.draggable) { Yb(t); var e = this.group.transformCoordToLocal(t.offsetX, t.offsetY); this._creatingCover = null, (this._creatingPanel = Pb(this, t, e)) && (this._dragging = !0, this._track = [e.slice()]) } }, mousemove: function(t) { var e = t.offsetX , i = t.offsetY , n = this.group.transformCoordToLocal(e, i); if (function(t, e, i) { if (t._brushType && !function(t, e, i) { var n = t._zr; return e < 0 || e > n.getWidth() || i < 0 || i > n.getHeight() }(t, e)) { var n = t._zr , o = t._covers , a = Pb(t, e, i); if (!t._dragging) for (var r = 0; r < o.length; r++) { var s = o[r].__brushOption; if (a && (!0 === a || s.panelId === a.panelId) && Qb[s.brushType].contain(o[r], i[0], i[1])) return } a && n.setCursorStyle("crosshair") } }(this, t, n), this._dragging) { Yb(t); var o = qb(this, t, n, !1); o && Eb(this, o) } }, mouseup: function(t) { Jb(this, t) } }; function Jb(t, e) { if (t._dragging) { Yb(e); var i = e.offsetX , n = e.offsetY , o = t.group.transformCoordToLocal(i, n) , a = qb(t, e, o, !0); t._dragging = !1, t._track = [], t._creatingCover = null, a && Eb(t, a) } } var Qb = { lineX: tS(0), lineY: tS(1), rect: { createCover: function(t, e) { return zb(cb(Hb, function(t) { return t }, function(t) { return t }), t, e, ["w", "e", "n", "s", "se", "sw", "ne", "nw"]) }, getCreatingRange: function(t) { var e = Rb(t); return Wb(e[1][0], e[1][1], e[0][0], e[0][1]) }, updateCoverShape: function(t, e, i, n) { Bb(t, e, i, n) }, updateCommon: Vb, contain: jb }, polygon: { createCover: function(t, e) { var i = new Ci; return i.add(new ts({ name: "main", style: Fb(e), silent: !0 })), i }, getCreatingRange: function(t) { return t }, endCreating: function(t, e) { e.remove(e.childAt(0)), e.add(new Qr({ name: "main", draggable: !0, drift: cb(Zb, t, e), ondragend: cb(Eb, t, { isEnd: !0 }) })) }, updateCoverShape: function(t, e, i, n) { e.childAt(0).setShape({ points: Xb(t, e, i) }) }, updateCommon: Vb, contain: jb } }; function tS(l) { return { createCover: function(t, e) { return zb(cb(Hb, function(t) { var e = [t, [0, 100]]; return l && e.reverse(), e }, function(t) { return t[l] }), t, e, [["w", "e"], ["n", "s"]][l]) }, getCreatingRange: function(t) { var e = Rb(t); return [pb(e[0][l], e[1][l]), gb(e[0][l], e[1][l])] }, updateCoverShape: function(t, e, i, n) { var o, a = Nb(t, e); if (!0 !== a && a.getLinearBrushOtherExtent) o = a.getLinearBrushOtherExtent(l, t._transform); else { var r = t._zr; o = [0, [r.getWidth(), r.getHeight()][1 - l]] } var s = [i, o]; l && s.reverse(), Bb(t, e, s, n) }, updateCommon: Vb, contain: jb } } function eS(i) { return i = oS(i), function(t, e) { return vl(t, i) } } function iS(o, a) { return o = oS(o), function(t) { var e = null != a ? a : t , i = e ? o.width : o.height , n = e ? o.x : o.y; return [n, n + (i || 0)] } } function nS(n, o, a) { return n = oS(n), function(t, e, i) { return n.contain(e[0], e[1]) && !$y(t, o, a) } } function oS(t) { return Di.create(t) } var aS = ["axisLine", "axisTickLabel", "axisName"] , rS = Af({ type: "parallelAxis", init: function(t, e) { rS.superApply(this, "init", arguments), (this._brushController = new Ib(e.getZr())).on("brush", A(this._onBrush, this)) }, render: function(t, e, i, n) { if (!function(t, e, i) { return i && "axisAreaSelect" === i.type && e.findComponents({ mainType: "parallelAxis", query: i })[0] === t }(t, e, n)) { this.axisModel = t, this.api = i, this.group.removeAll(); var o = this._axisGroup; if (this._axisGroup = new Ci, this.group.add(this._axisGroup), t.get("show")) { var a = function(t, e) { return e.getComponent("parallel", t.get("parallelIndex")) }(t, e) , r = a.coordinateSystem , s = t.getAreaSelectStyle() , l = s.width , u = t.axis.dim , h = P({ strokeContainThreshold: l }, r.getAxisLayout(u)) , c = new Qm(t,h); E(aS, c.add, c), this._axisGroup.add(c.getGroup()), this._refreshBrushController(h, s, t, a, l, i); var d = n && !1 === n.animation ? null : t; ml(o, this._axisGroup, d) } } }, _refreshBrushController: function(t, e, i, n, o, a) { var r = i.axis.getExtent() , s = r[1] - r[0] , l = Math.min(30, .1 * Math.abs(s)) , u = Di.create({ x: r[0], y: -o / 2, width: s, height: o }); u.x -= l, u.width += 2 * l, this._brushController.mount({ enableGlobalPan: !0, rotation: t.rotation, position: t.position }).setPanels([{ panelId: "pl", clipPath: eS(u), isTargetByCursor: nS(u, a, n), getLinearBrushOtherExtent: iS(u, 0) }]).enableBrush({ brushType: "lineX", brushStyle: e, removeOnClick: !0 }).updateCovers(function(t) { var e = t.axis; return O(t.activeIntervals, function(t) { return { brushType: "lineX", panelId: "pl", range: [e.dataToCoord(t[0], !0), e.dataToCoord(t[1], !0)] } }) }(i)) }, _onBrush: function(t, e) { var i = this.axisModel , n = i.axis , o = O(t, function(t) { return [n.coordToData(t.range[0], !0), n.coordToData(t.range[1], !0)] }); !i.option.realtime !== e.isEnd && !e.removeOnClick || this.api.dispatchAction({ type: "axisAreaSelect", parallelAxisId: i.id, intervals: o }) }, dispose: function() { this._brushController.dispose() } }); Af({ type: "parallel", render: function(t, e, i) { this._model = t, this._api = i, this._handlers || (this._handlers = {}, E(sS, function(t, e) { i.getZr().on(e, this._handlers[e] = A(t, this)) }, this)), kc(this, "_throttledDispatchExpand", t.get("axisExpandRate"), "fixRate") }, dispose: function(t, i) { E(this._handlers, function(t, e) { i.getZr().off(e, t) }), this._handlers = null }, _throttledDispatchExpand: function(t) { this._dispatchExpand(t) }, _dispatchExpand: function(t) { t && this._api.dispatchAction(P({ type: "parallelAxisExpand" }, t)) } }); var sS = { mousedown: function(t) { lS(this, "click") && (this._mouseDownPoint = [t.offsetX, t.offsetY]) }, mouseup: function(t) { var e = this._mouseDownPoint; if (lS(this, "click") && e) { var i = [t.offsetX, t.offsetY]; if (5 < Math.pow(e[0] - i[0], 2) + Math.pow(e[1] - i[1], 2)) return; var n = this._model.coordinateSystem.getSlidedAxisExpandWindow([t.offsetX, t.offsetY]); "none" !== n.behavior && this._dispatchExpand({ axisExpandWindow: n.axisExpandWindow }) } this._mouseDownPoint = null }, mousemove: function(t) { if (!this._mouseDownPoint && lS(this, "mousemove")) { var e = this._model , i = e.coordinateSystem.getSlidedAxisExpandWindow([t.offsetX, t.offsetY]) , n = i.behavior; "jump" === n && this._throttledDispatchExpand.debounceNextCall(e.get("axisExpandDebounce")), this._throttledDispatchExpand("none" === n ? null : { axisExpandWindow: i.axisExpandWindow, animation: "jump" === n && null }) } } }; function lS(t, e) { var i = t._model; return i.get("axisExpandable") && i.get("axisExpandTriggerOn") === e } yf(function(t) { !function(t) { if (t.parallel) return; var e = !1; E(t.series, function(t) { t && "parallel" === t.type && (e = !0) }), e && (t.parallel = [{}]) }(t), function(n) { E(Vo(n.parallelAxis), function(t) { if (z(t)) { var e = t.parallelIndex || 0 , i = Vo(n.parallel)[e]; i && i.parallelAxisDefault && m(t, i.parallelAxisDefault, !1) } }) }(t) }), sc.extend({ type: "series.parallel", dependencies: ["parallel"], visualColorAccessPath: "lineStyle.color", getInitialData: function(t, e) { var i = this.getSource(); return function(t, e) { if (t.encodeDefine) return; var i = e.ecModel.getComponent("parallel", e.get("parallelIndex")); if (!i) return; var n = t.encodeDefine = Q(); E(i.dimensions, function(t) { var e = function(t) { return +t.replace("dim", "") }(t); n.set(t, e) }) }(i, this), gp(i, this) }, getRawIndicesByActiveState: function(i) { var t = this.coordinateSystem , n = this.getData() , o = []; return t.eachActiveState(n, function(t, e) { i === t && o.push(n.getRawIndex(e)) }), o }, defaultOption: { zlevel: 0, z: 2, coordinateSystem: "parallel", parallelIndex: 0, label: { show: !1 }, inactiveOpacity: .05, activeOpacity: 1, lineStyle: { width: 1, opacity: .45, type: "solid" }, emphasis: { label: { show: !1 } }, progressive: 500, smooth: !1, animationEasing: "linear" } }); _c.extend({ type: "parallel", init: function() { this._dataGroup = new Ci, this.group.add(this._dataGroup), this._data, this._initialized }, render: function(a, t, e, r) { var i = this._dataGroup , s = a.getData() , l = this._data , u = a.coordinateSystem , h = u.dimensions , c = cS(a); if (s.diff(l).add(function(t) { dS(hS(s, i, t, h, u), s, t, c) }).update(function(t, e) { var i = l.getItemGraphicEl(e) , n = uS(s, t, h, u); s.setItemGraphicEl(t, i); var o = r && !1 === r.animation ? null : a; cl(i, { shape: { points: n } }, o, t), dS(i, s, t, c) }).remove(function(t) { var e = l.getItemGraphicEl(t); i.remove(e) }).execute(), !this._initialized) { this._initialized = !0; var n = function(t, e, i) { var n = t.model , o = t.getRect() , a = new rs({ shape: { x: o.x, y: o.y, width: o.width, height: o.height } }) , r = "horizontal" === n.get("layout") ? "width" : "height"; return a.setShape(r, 0), dl(a, { shape: { width: o.width, height: o.height } }, e, i), a }(u, a, function() { setTimeout(function() { i.removeClipPath() }) }); i.setClipPath(n) } this._data = s }, incrementalPrepareRender: function(t, e, i) { this._initialized = !0, this._data = null, this._dataGroup.removeAll() }, incrementalRender: function(t, e, i) { for (var n = e.getData(), o = e.coordinateSystem, a = o.dimensions, r = cS(e), s = t.start; s < t.end; s++) { var l = hS(n, this._dataGroup, s, a, o); l.incremental = !0, dS(l, n, s, r) } }, dispose: function() {}, remove: function() { this._dataGroup && this._dataGroup.removeAll(), this._data = null } }); function uS(t, e, i, n) { for (var o, a = [], r = 0; r < i.length; r++) { var s = i[r] , l = t.get(t.mapDimension(s), e); o = l, ("category" === n.getAxis(s).type ? null == o : null == o || isNaN(o)) || a.push(n.dataToPoint(l, s)) } return a } function hS(t, e, i, n, o) { var a = uS(t, i, n, o) , r = new ts({ shape: { points: a }, silent: !0, z2: 10 }); return e.add(r), t.setItemGraphicEl(i, r), r } function cS(t) { var e = t.get("smooth", !0); return !0 === e && (e = .3), { lineStyle: t.getModel("lineStyle").getLineStyle(), smooth: null != e ? e : .3 } } function dS(t, e, i, n) { var o = n.lineStyle; e.hasItemOption && (o = e.getItemModel(i).getModel("lineStyle").getLineStyle()); t.useStyle(o); var a = t.style; a.fill = null, a.stroke = e.getItemVisual(i, "color"), a.opacity = e.getItemVisual(i, "opacity"), n.smooth && (t.shape.smooth = n.smooth) } var fS = ["lineStyle", "normal", "opacity"]; Sf({ seriesType: "parallel", reset: function(t, e, i) { var n = t.getModel("itemStyle") , o = t.getModel("lineStyle") , a = e.get("color") , r = o.get("color") || n.get("color") || a[t.seriesIndex % a.length] , s = t.get("inactiveOpacity") , l = t.get("activeOpacity") , u = t.getModel("lineStyle").getLineStyle() , h = t.coordinateSystem , c = t.getData() , d = { normal: u.opacity, active: l, inactive: s }; return c.setVisual("color", r), { progress: function(t, o) { h.eachActiveState(o, function(t, e) { var i = d[t]; if ("normal" === t && o.hasItemOption) { var n = o.getItemModel(e).get(fS, !0); null != n && (i = n) } o.setItemVisual(e, "opacity", i) }, t.start, t.end) } } } }); var pS = sc.extend({ type: "series.sankey", layoutInfo: null, levelModels: null, getInitialData: function(t, e) { for (var i = t.edges || t.links, n = t.data || t.nodes, o = t.levels, a = this.levelModels = {}, r = 0; r < o.length; r++) null != o[r].depth && 0 <= o[r].depth && (a[o[r].depth] = new Cl(o[r],this,e)); if (n && i) return iw(n, i, this, !0, function(t, e) { t.wrapMethod("getItemModel", function(t, n) { return t.customizeGetParent(function(t) { var e = this.parentModel , i = e.getData().getItemLayout(n).depth; return e.levelModels[i] || this.parentModel }), t }), e.wrapMethod("getItemModel", function(t, n) { return t.customizeGetParent(function(t) { var e = this.parentModel , i = e.getGraph().getEdgeByIndex(n).node1.getLayout().depth; return e.levelModels[i] || this.parentModel }), t }) }).data }, setNodePosition: function(t, e) { var i = this.option.data[t]; i.localX = e[0], i.localY = e[1] }, getGraph: function() { return this.getData().graph }, getEdgeData: function() { return this.getGraph().edgeData }, formatTooltip: function(t, e, i) { if ("edge" === i) { var n = this.getDataParams(t, i) , o = n.data , a = o.source + " -- " + o.target; return n.value && (a += " : " + n.value), au(a) } if ("node" !== i) return pS.superCall(this, "formatTooltip", t, e); var r = this.getGraph().getNodeByIndex(t).getLayout().value , s = this.getDataParams(t, i).data.name; if (r) a = s + " : " + r; return au(a) }, optionUpdated: function() { var t = this.option; !0 === t.focusNodeAdjacency && (t.focusNodeAdjacency = "allEdges") }, getDataParams: function(t, e) { var i = pS.superCall(this, "getDataParams", t, e); if (null == i.value && "node" === e) { var n = this.getGraph().getNodeByIndex(t).getLayout().value; i.value = n } return i }, defaultOption: { zlevel: 0, z: 2, coordinateSystem: "view", layout: null, left: "5%", top: "5%", right: "20%", bottom: "5%", orient: "horizontal", nodeWidth: 20, nodeGap: 8, draggable: !0, focusNodeAdjacency: !1, layoutIterations: 32, label: { show: !0, position: "right", color: "#000", fontSize: 12 }, levels: [], nodeAlign: "justify", itemStyle: { borderWidth: 1, borderColor: "#333" }, lineStyle: { color: "#314656", opacity: .2, curveness: .5 }, emphasis: { label: { show: !0 }, lineStyle: { opacity: .5 } }, animationEasing: "linear", animationDuration: 1e3 } }) , gS = ["itemStyle", "opacity"] , mS = ["emphasis", "itemStyle", "opacity"] , vS = ["lineStyle", "opacity"] , yS = ["emphasis", "lineStyle", "opacity"]; function xS(t, e) { return t.getVisual("opacity") || t.getModel().get(e) } function _S(t, e, i) { var n = t.getGraphicEl() , o = xS(t, e); null != i && (null == o && (o = 1), o *= i), n.downplay && n.downplay(), n.traverse(function(t) { "group" !== t.type && t.setStyle("opacity", o) }) } function wS(t, e) { var i = xS(t, e) , n = t.getGraphicEl(); n.traverse(function(t) { "group" !== t.type && t.setStyle("opacity", i) }), n.highlight && n.highlight() } var bS = Cs({ shape: { x1: 0, y1: 0, x2: 0, y2: 0, cpx1: 0, cpy1: 0, cpx2: 0, cpy2: 0, extent: 0, orient: "" }, buildPath: function(t, e) { var i = e.extent; t.moveTo(e.x1, e.y1), t.bezierCurveTo(e.cpx1, e.cpy1, e.cpx2, e.cpy2, e.x2, e.y2), "vertical" === e.orient ? (t.lineTo(e.x2 + i, e.y2), t.bezierCurveTo(e.cpx2 + i, e.cpy2, e.cpx1 + i, e.cpy1, e.x1 + i, e.y1)) : (t.lineTo(e.x2, e.y2 + i), t.bezierCurveTo(e.cpx2, e.cpy2 + i, e.cpx1, e.cpy1 + i, e.x1, e.y1 + i)), t.closePath() }, highlight: function() { this.trigger("emphasis") }, downplay: function() { this.trigger("normal") } }); Cf({ type: "sankey", _model: null, _focusAdjacencyDisabled: !1, render: function(w, t, n) { var o = this , e = w.getGraph() , b = this.group , i = w.layoutInfo , S = i.width , M = i.height , u = w.getData() , I = w.getData("edge") , T = w.get("orient"); this._model = w, b.removeAll(), b.attr("position", [i.x, i.y]), e.eachEdge(function(t) { var e = new bS; e.dataIndex = t.dataIndex, e.seriesIndex = w.seriesIndex, e.dataType = "edge"; var i, n, o, a, r, s, l, u, h = t.getModel("lineStyle"), c = h.get("curveness"), d = t.node1.getLayout(), f = t.node1.getModel(), p = f.get("localX"), g = f.get("localY"), m = t.node2.getLayout(), v = t.node2.getModel(), y = v.get("localX"), x = v.get("localY"), _ = t.getLayout(); switch (e.shape.extent = Math.max(1, _.dy), u = "vertical" === (e.shape.orient = T) ? (i = (null != p ? p * S : d.x) + _.sy, n = (null != g ? g * M : d.y) + d.dy, o = (null != y ? y * S : m.x) + _.ty, r = i, s = n * (1 - c) + (a = null != x ? x * M : m.y) * c, l = o, n * c + a * (1 - c)) : (i = (null != p ? p * S : d.x) + d.dx, n = (null != g ? g * M : d.y) + _.sy, r = i * (1 - c) + (o = null != y ? y * S : m.x) * c, s = n, l = i * c + o * (1 - c), a = (null != x ? x * M : m.y) + _.ty), e.setShape({ x1: i, y1: n, x2: o, y2: a, cpx1: r, cpy1: s, cpx2: l, cpy2: u }), e.setStyle(h.getItemStyle()), e.style.fill) { case "source": e.style.fill = t.node1.getVisual("color"); break; case "target": e.style.fill = t.node2.getVisual("color") } $s(e, t.getModel("emphasis.lineStyle").getItemStyle()), b.add(e), I.setItemGraphicEl(t.dataIndex, e) }), e.eachNode(function(t) { var e = t.getLayout() , i = t.getModel() , n = i.get("localX") , o = i.get("localY") , a = i.getModel("label") , r = i.getModel("emphasis.label") , s = new rs({ shape: { x: null != n ? n * S : e.x, y: null != o ? o * M : e.y, width: e.dx, height: e.dy }, style: i.getModel("itemStyle").getItemStyle() }) , l = t.getModel("emphasis.itemStyle").getItemStyle(); el(s.style, l, a, r, { labelFetcher: w, labelDataIndex: t.dataIndex, defaultText: t.id, isRectText: !0 }), s.setStyle("fill", t.getVisual("color")), $s(s, l), b.add(s), u.setItemGraphicEl(t.dataIndex, s), s.dataType = "node" }), u.eachItemGraphicEl(function(t, i) { var e = u.getItemModel(i); e.get("draggable") && (t.drift = function(t, e) { o._focusAdjacencyDisabled = !0, this.shape.x += t, this.shape.y += e, this.dirty(), n.dispatchAction({ type: "dragNode", seriesId: w.id, dataIndex: u.getRawIndex(i), localX: this.shape.x / S, localY: this.shape.y / M }) } , t.ondragend = function() { o._focusAdjacencyDisabled = !1 } , t.draggable = !0, t.cursor = "move"), t.highlight = function() { this.trigger("emphasis") } , t.downplay = function() { this.trigger("normal") } , t.focusNodeAdjHandler && t.off("mouseover", t.focusNodeAdjHandler), t.unfocusNodeAdjHandler && t.off("mouseout", t.unfocusNodeAdjHandler), e.get("focusNodeAdjacency") && (t.on("mouseover", t.focusNodeAdjHandler = function() { o._focusAdjacencyDisabled || (o._clearTimer(), n.dispatchAction({ type: "focusNodeAdjacency", seriesId: w.id, dataIndex: t.dataIndex })) } ), t.on("mouseout", t.unfocusNodeAdjHandler = function() { o._focusAdjacencyDisabled || o._dispatchUnfocus(n) } )) }), I.eachItemGraphicEl(function(t, e) { var i = I.getItemModel(e); t.focusNodeAdjHandler && t.off("mouseover", t.focusNodeAdjHandler), t.unfocusNodeAdjHandler && t.off("mouseout", t.unfocusNodeAdjHandler), i.get("focusNodeAdjacency") && (t.on("mouseover", t.focusNodeAdjHandler = function() { o._focusAdjacencyDisabled || (o._clearTimer(), n.dispatchAction({ type: "focusNodeAdjacency", seriesId: w.id, edgeDataIndex: t.dataIndex })) } ), t.on("mouseout", t.unfocusNodeAdjHandler = function() { o._focusAdjacencyDisabled || o._dispatchUnfocus(n) } )) }), !this._data && w.get("animation") && b.setClipPath(function(t, e, i) { var n = new rs({ shape: { x: t.x - 10, y: t.y - 10, width: 0, height: t.height + 20 } }); return dl(n, { shape: { width: t.width + 20 } }, e, i), n }(b.getBoundingRect(), w, function() { b.removeClipPath() })), this._data = w.getData() }, dispose: function() { this._clearTimer() }, _dispatchUnfocus: function(t) { var e = this; this._clearTimer(), this._unfocusDelayTimer = setTimeout(function() { e._unfocusDelayTimer = null, t.dispatchAction({ type: "unfocusNodeAdjacency", seriesId: e._model.id }) }, 500) }, _clearTimer: function() { this._unfocusDelayTimer && (clearTimeout(this._unfocusDelayTimer), this._unfocusDelayTimer = null) }, focusNodeAdjacency: function(t, e, i, n) { var o = t.getData() , a = o.graph , r = n.dataIndex , s = o.getItemModel(r) , l = n.edgeDataIndex; if (null != r || null != l) { var u = a.getNodeByIndex(r) , h = a.getEdgeByIndex(l); if (a.eachNode(function(t) { _S(t, gS, .1) }), a.eachEdge(function(t) { _S(t, vS, .1) }), u) { wS(u, mS); var c = s.get("focusNodeAdjacency"); "outEdges" === c ? E(u.outEdges, function(t) { t.dataIndex < 0 || (wS(t, yS), wS(t.node2, mS)) }) : "inEdges" === c ? E(u.inEdges, function(t) { t.dataIndex < 0 || (wS(t, yS), wS(t.node1, mS)) }) : "allEdges" === c && E(u.edges, function(t) { t.dataIndex < 0 || (wS(t, yS), t.node1 !== u && wS(t.node1, mS), t.node2 !== u && wS(t.node2, mS)) }) } h && (wS(h, yS), wS(h.node1, mS), wS(h.node2, mS)) } }, unfocusNodeAdjacency: function(t, e, i, n) { var o = t.getGraph(); o.eachNode(function(t) { _S(t, gS) }), o.eachEdge(function(t) { _S(t, vS) }) } }), _f({ type: "dragNode", event: "dragnode", update: "update" }, function(e, t) { t.eachComponent({ mainType: "series", subType: "sankey", query: e }, function(t) { t.setNodePosition(e.dataIndex, [e.localX, e.localY]) }) }); function SS(t) { var e = t.hostGraph.data.getRawDataItem(t.dataIndex); return null != e.depth && 0 <= e.depth } function MS(t, l, u, h, c) { var d = "vertical" === c ? "x" : "y"; E(t, function(t) { var e, i, n; t.sort(function(t, e) { return t.getLayout()[d] - e.getLayout()[d] }); for (var o = 0, a = t.length, r = "vertical" === c ? "dx" : "dy", s = 0; s < a; s++) 0 < (n = o - (i = t[s]).getLayout()[d]) && (e = i.getLayout()[d] + n, "vertical" === c ? i.setLayout({ x: e }, !0) : i.setLayout({ y: e }, !0)), o = i.getLayout()[d] + i.getLayout()[r] + l; if (0 < (n = o - l - ("vertical" === c ? h : u))) for (e = i.getLayout()[d] - n, "vertical" === c ? i.setLayout({ x: e }, !0) : i.setLayout({ y: e }, !0), o = e, s = a - 2; 0 <= s; --s) 0 < (n = (i = t[s]).getLayout()[d] + i.getLayout()[r] + l - o) && (e = i.getLayout()[d] - n, "vertical" === c ? i.setLayout({ x: e }, !0) : i.setLayout({ y: e }, !0)), o = i.getLayout()[d] }) } function IS(t, a, r) { E(t.slice().reverse(), function(t) { E(t, function(t) { if (t.outEdges.length) { var e = PS(t.outEdges, TS, r) / PS(t.outEdges, kS, r); if (isNaN(e)) { var i = t.outEdges.length; e = i ? PS(t.outEdges, AS, r) / i : 0 } if ("vertical" === r) { var n = t.getLayout().x + (e - LS(t, r)) * a; t.setLayout({ x: n }, !0) } else { var o = t.getLayout().y + (e - LS(t, r)) * a; t.setLayout({ y: o }, !0) } } }) }) } function TS(t, e) { return LS(t.node2, e) * t.getValue() } function AS(t, e) { return LS(t.node2, e) } function DS(t, e) { return LS(t.node1, e) * t.getValue() } function CS(t, e) { return LS(t.node1, e) } function LS(t, e) { return "vertical" === e ? t.getLayout().x + t.getLayout().dx / 2 : t.getLayout().y + t.getLayout().dy / 2 } function kS(t) { return t.getValue() } function PS(t, e, i) { for (var n = 0, o = t.length, a = -1; ++a < o; ) { var r = +e.call(t, t[a], i); isNaN(r) || (n += r) } return n } function NS(t, a, r) { E(t, function(t) { E(t, function(t) { if (t.inEdges.length) { var e = PS(t.inEdges, DS, r) / PS(t.inEdges, kS, r); if (isNaN(e)) { var i = t.inEdges.length; e = i ? PS(t.inEdges, CS, r) / i : 0 } if ("vertical" === r) { var n = t.getLayout().x + (e - LS(t, r)) * a; t.setLayout({ x: n }, !0) } else { var o = t.getLayout().y + (e - LS(t, r)) * a; t.setLayout({ y: o }, !0) } } }) }) } bf(function(t, u, e) { t.eachSeriesByType("sankey", function(t) { var e = t.get("nodeWidth") , i = t.get("nodeGap") , n = function(t, e) { return bu(t.getBoxLayoutParams(), { width: e.getWidth(), height: e.getHeight() }) }(t, u) , o = (t.layoutInfo = n).width , a = n.height , r = t.getGraph() , s = r.nodes , l = r.edges; !function(t) { E(t, function(t) { var e = PS(t.outEdges, kS) , i = PS(t.inEdges, kS) , n = t.getValue() || 0 , o = Math.max(e, i, n); t.setLayout({ value: o }, !0) }) }(s), function(t, e, i, n, o, a, r, s, l) { (function(t, e, i, n, o, a, r) { for (var s = [], l = [], u = [], h = [], c = 0, d = 0; d < e.length; d++) s[d] = 1; for (d = 0; d < t.length; d++) l[d] = t[d].inEdges.length, 0 === l[d] && u.push(t[d]); var f = -1; for (; u.length; ) { for (var p = 0; p < u.length; p++) { var g = u[p] , m = g.hostGraph.data.getRawDataItem(g.dataIndex) , v = null != m.depth && 0 <= m.depth; v && m.depth > f && (f = m.depth), g.setLayout({ depth: v ? m.depth : c }, !0), "vertical" === a ? g.setLayout({ dy: i }, !0) : g.setLayout({ dx: i }, !0); for (var y = 0; y < g.outEdges.length; y++) { var x = g.outEdges[y] , _ = e.indexOf(x); s[_] = 0; var w = x.node2 , b = t.indexOf(w); 0 == --l[b] && h.indexOf(w) < 0 && h.push(w) } } ++c, u = h, h = [] } for (d = 0; d < s.length; d++) if (1 === s[d]) throw new Error("Sankey is a DAG, the original data has cycle!"); var S = c - 1 < f ? f : c - 1; r && "left" !== r && function(t, e, i, n) { if ("right" === e) { for (var o = [], a = t, r = 0; a.length; ) { for (var s = 0; s < a.length; s++) { var l = a[s]; l.setLayout({ skNodeHeight: r }, !0); for (var u = 0; u < l.inEdges.length; u++) { var h = l.inEdges[u]; o.indexOf(h.node1) < 0 && o.push(h.node1) } } a = o, o = [], ++r } E(t, function(t) { SS(t) || t.setLayout({ depth: Math.max(0, n - t.getLayout().skNodeHeight) }, !0) }) } else "justify" === e && function(t, e) { E(t, function(t) { SS(t) || t.outEdges.length || t.setLayout({ depth: e }, !0) }) }(t, n) }(t, r, 0, S); !function(t, i, n) { E(t, function(t) { var e = t.getLayout().depth * i; "vertical" === n ? t.setLayout({ y: e }, !0) : t.setLayout({ x: e }, !0) }) }(t, "vertical" === a ? (o - i) / S : (n - i) / S, a) } )(t, e, i, o, a, s, l), function(t, e, i, n, o, a, r) { var s = function(t, e) { var i = [] , n = "vertical" === e ? "y" : "x" , o = ta(t, function(t) { return t.getLayout()[n] }); return o.keys.sort(function(t, e) { return t - e }), E(o.keys, function(t) { i.push(o.buckets.get(t)) }), i }(t, r); (function(t, e, o, a, r, s) { var l = 1 / 0; E(t, function(t) { var e = t.length , i = 0; E(t, function(t) { i += t.getLayout().value }); var n = "vertical" === s ? (a - (e - 1) * r) / i : (o - (e - 1) * r) / i; n < l && (l = n) }), E(t, function(t) { E(t, function(t, e) { var i = t.getLayout().value * l; "vertical" === s ? (t.setLayout({ x: e }, !0), t.setLayout({ dx: i }, !0)) : (t.setLayout({ y: e }, !0), t.setLayout({ dy: i }, !0)) }) }), E(e, function(t) { var e = +t.getValue() * l; t.setLayout({ dy: e }, !0) }) } )(s, e, i, n, o, r), MS(s, o, i, n, r); for (var l = 1; 0 < a; a--) IS(s, l *= .99, r), MS(s, o, i, n, r), NS(s, l, r), MS(s, o, i, n, r) }(t, e, a, o, n, r, s), function(t, e) { var i = "vertical" === e ? "x" : "y"; E(t, function(t) { t.outEdges.sort(function(t, e) { return t.node2.getLayout()[i] - e.node2.getLayout()[i] }), t.inEdges.sort(function(t, e) { return t.node1.getLayout()[i] - e.node1.getLayout()[i] }) }), E(t, function(t) { var e = 0 , i = 0; E(t.outEdges, function(t) { t.setLayout({ sy: e }, !0), e += t.getLayout().dy }), E(t.inEdges, function(t) { t.setLayout({ ty: i }, !0), i += t.getLayout().dy }) }) }(t, s) }(s, l, e, i, o, a, 0 !== M(s, function(t) { return 0 === t.getLayout().value }).length ? 0 : t.get("layoutIterations"), t.get("orient"), t.get("nodeAlign")) }) }), Sf(function(t, e) { t.eachSeriesByType("sankey", function(n) { var t = n.getGraph().nodes; if (t.length) { var o = 1 / 0 , a = -1 / 0; E(t, function(t) { var e = t.getLayout().value; e < o && (o = e), a < e && (a = e) }), E(t, function(t) { var e = new g_({ type: "color", mappingMethod: "linear", dataExtent: [o, a], visual: n.get("color") }).mapValueToVisual(t.getLayout().value) , i = t.getModel().get("itemStyle.color"); null != i ? t.setVisual("color", i) : t.setVisual("color", e) }) } }) }); var OS = { _baseAxisDim: null, getInitialData: function(t, e) { var i, n, o = e.getComponent("xAxis", this.get("xAxisIndex")), a = e.getComponent("yAxis", this.get("yAxisIndex")), r = o.get("type"), s = a.get("type"); "category" === r ? (t.layout = "horizontal", i = o.getOrdinalMeta(), n = !0) : "category" === s ? (t.layout = "vertical", i = a.getOrdinalMeta(), n = !0) : t.layout = t.layout || "horizontal"; var l = ["x", "y"] , u = "horizontal" === t.layout ? 0 : 1 , h = this._baseAxisDim = l[u] , c = l[1 - u] , d = [o, a] , f = d[u].get("type") , p = d[1 - u].get("type") , g = t.data; if (g && n) { var m = []; E(g, function(t, e) { var i; t.value && L(t.value) ? (i = t.value.slice(), t.value.unshift(e)) : L(t) ? (i = t.slice(), t.unshift(e)) : i = t, m.push(i) }), t.data = m } var v = this.defaultValueDimensions , y = [{ name: h, type: Ef(f), ordinalMeta: i, otherDims: { tooltip: !1, itemName: 0 }, dimsDef: ["base"] }, { name: c, type: Ef(p), dimsDef: v.slice() }]; return Yv(this, { coordDimensions: y, dimensionsCount: v.length + 1, encodeDefaulter: T($u, y, this) }) }, getBaseAxis: function() { var t = this._baseAxisDim; return this.ecModel.getComponent(t + "Axis", this.get(t + "AxisIndex")).axis } }; b(sc.extend({ type: "series.boxplot", dependencies: ["xAxis", "yAxis", "grid"], defaultValueDimensions: [{ name: "min", defaultTooltip: !0 }, { name: "Q1", defaultTooltip: !0 }, { name: "median", defaultTooltip: !0 }, { name: "Q3", defaultTooltip: !0 }, { name: "max", defaultTooltip: !0 }], dimensions: null, defaultOption: { zlevel: 0, z: 2, coordinateSystem: "cartesian2d", legendHoverLink: !0, hoverAnimation: !0, layout: null, boxWidth: [7, 50], itemStyle: { color: "#fff", borderWidth: 1 }, emphasis: { itemStyle: { borderWidth: 2, shadowBlur: 5, shadowOffsetX: 2, shadowOffsetY: 2, shadowColor: "rgba(0,0,0,0.4)" } }, animationEasing: "elasticOut", animationDuration: 800 } }), OS, !0); var ES = ["itemStyle"] , RS = ["emphasis", "itemStyle"] , zS = (_c.extend({ type: "boxplot", render: function(t, e, i) { var o = t.getData() , a = this.group , r = this._data; this._data || a.removeAll(); var s = "horizontal" === t.get("layout") ? 1 : 0; o.diff(r).add(function(t) { if (o.hasValue(t)) { var e = BS(o.getItemLayout(t), o, t, s, !0); o.setItemGraphicEl(t, e), a.add(e) } }).update(function(t, e) { var i = r.getItemGraphicEl(e); if (o.hasValue(t)) { var n = o.getItemLayout(t); i ? VS(n, i, o, t) : i = BS(n, o, t, s), a.add(i), o.setItemGraphicEl(t, i) } else a.remove(i) }).remove(function(t) { var e = r.getItemGraphicEl(t); e && a.remove(e) }).execute(), this._data = o }, remove: function(t) { var e = this.group , i = this._data; this._data = null, i && i.eachItemGraphicEl(function(t) { t && e.remove(t) }) }, dispose: et }), Ar.extend({ type: "boxplotBoxPath", shape: {}, buildPath: function(t, e) { var i = e.points , n = 0; for (t.moveTo(i[n][0], i[n][1]), n++; n < 4; n++) t.lineTo(i[n][0], i[n][1]); for (t.closePath(); n < i.length; n++) t.moveTo(i[n][0], i[n][1]), n++, t.lineTo(i[n][0], i[n][1]) } })); function BS(t, e, i, n, o) { var a = t.ends , r = new zS({ shape: { points: o ? function(t, e, i) { return O(t, function(t) { return (t = t.slice())[e] = i.initBaseline, t }) }(a, n, t) : a } }); return VS(t, r, e, i, o), r } function VS(t, e, i, n, o) { var a = i.hostModel; (0, bl[o ? "initProps" : "updateProps"])(e, { shape: { points: t.ends } }, a, n); var r = i.getItemModel(n) , s = r.getModel(ES) , l = i.getItemVisual(n, "color") , u = s.getItemStyle(["borderColor"]); u.stroke = l, u.strokeNoScale = !0, e.useStyle(u), e.z2 = 100, $s(e, r.getModel(RS).getItemStyle()) } var GS = ["itemStyle", "borderColor"] , FS = E; Sf(function(n, t) { var o = n.get("color"); n.eachRawSeriesByType("boxplot", function(t) { var e = o[t.seriesIndex % o.length] , i = t.getData(); i.setVisual({ legendSymbol: "roundRect", color: t.get(GS) || e }), n.isSeriesFiltered(t) || i.each(function(t) { var e = i.getItemModel(t); i.setItemVisual(t, { color: e.get(GS, !0) }) }) }) }), bf(function(t) { var e = function(t) { var n = [] , o = []; return t.eachSeriesByType("boxplot", function(t) { var e = t.getBaseAxis() , i = _(o, e); i < 0 && (i = o.length, o[i] = e, n[i] = { axis: e, seriesModels: [] }), n[i].seriesModels.push(t) }), n }(t); FS(e, function(i) { var t = i.seriesModels; t.length && (function(t) { var e, i, n = t.axis, o = t.seriesModels, a = o.length, r = t.boxWidthList = [], s = t.boxOffsetList = [], l = []; if ("category" === n.type) i = n.getBandWidth(); else { var u = 0; FS(o, function(t) { u = Math.max(u, t.getData().count()) }), e = n.getExtent(), Math.abs(e[1] - e[0]) } FS(o, function(t) { var e = t.get("boxWidth"); L(e) || (e = [e, e]), l.push([Rl(e[0], i) || 0, Rl(e[1], i) || 0]) }); var h = .8 * i - 2 , c = h / a * .3 , d = (h - c * (a - 1)) / a , f = d / 2 - h / 2; FS(o, function(t, e) { s.push(f), f += c + d, r.push(Math.min(Math.max(d, l[e][0]), l[e][1])) }) }(i), FS(t, function(t, e) { !function(t, r, e) { var s = t.coordinateSystem , l = t.getData() , a = e / 2 , u = "horizontal" === t.get("layout") ? 0 : 1 , h = 1 - u , i = ["x", "y"] , n = l.mapDimension(i[u]) , o = l.mapDimension(i[h], !0); if (null == n || o.length < 5) return; for (var c = 0; c < l.count(); c++) { var d = l.get(n, c) , f = x(d, o[2], c) , p = x(d, o[0], c) , g = x(d, o[1], c) , m = x(d, o[3], c) , v = x(d, o[4], c) , y = []; _(y, g, 0), _(y, m, 1), y.push(p, g, v, m), w(y, p), w(y, v), w(y, f), l.setItemLayout(c, { initBaseline: f[h], ends: y }) } function x(t, e, i) { var n, o = l.get(e, i), a = []; return a[u] = t, a[h] = o, isNaN(t) || isNaN(o) ? n = [NaN, NaN] : (n = s.dataToPoint(a))[u] += r, n } function _(t, e, i) { var n = e.slice() , o = e.slice(); n[u] += a, o[u] -= a, i ? t.push(n, o) : t.push(o, n) } function w(t, e) { var i = e.slice() , n = e.slice(); i[u] -= a, n[u] += a, t.push(i, n) } }(t, i.boxOffsetList[e], i.boxWidthList[e]) })) }) }), b(sc.extend({ type: "series.candlestick", dependencies: ["xAxis", "yAxis", "grid"], defaultValueDimensions: [{ name: "open", defaultTooltip: !0 }, { name: "close", defaultTooltip: !0 }, { name: "lowest", defaultTooltip: !0 }, { name: "highest", defaultTooltip: !0 }], dimensions: null, defaultOption: { zlevel: 0, z: 2, coordinateSystem: "cartesian2d", legendHoverLink: !0, hoverAnimation: !0, layout: null, clip: !0, itemStyle: { color: "#c23531", color0: "#314656", borderWidth: 1, borderColor: "#c23531", borderColor0: "#314656" }, emphasis: { itemStyle: { borderWidth: 2 } }, barMaxWidth: null, barMinWidth: null, barWidth: null, large: !0, largeThreshold: 600, progressive: 3e3, progressiveThreshold: 1e4, progressiveChunkMode: "mod", animationUpdate: !1, animationEasing: "linear", animationDuration: 300 }, getShadowDim: function() { return "open" }, brushSelector: function(t, e, i) { var n = e.getItemLayout(t); return n && i.rect(n.brushRect) } }), OS, !0); var WS = ["itemStyle"] , HS = ["emphasis", "itemStyle"] , ZS = ["color", "color0", "borderColor", "borderColor0"] , US = (_c.extend({ type: "candlestick", render: function(t, e, i) { this.group.removeClipPath(), this._updateDrawMode(t), this._isLargeDraw ? this._renderLarge(t) : this._renderNormal(t) }, incrementalPrepareRender: function(t, e, i) { this._clear(), this._updateDrawMode(t) }, incrementalRender: function(t, e, i, n) { this._isLargeDraw ? this._incrementalRenderLarge(t, e) : this._incrementalRenderNormal(t, e) }, _updateDrawMode: function(t) { var e = t.pipelineContext.large; (null == this._isLargeDraw || e ^ this._isLargeDraw) && (this._isLargeDraw = e, this._clear()) }, _renderNormal: function(o) { var a = o.getData() , r = this._data , s = this.group , l = a.getLayout("isSimpleBox") , u = o.get("clip", !0) , t = o.coordinateSystem , h = t.getArea && t.getArea(); this._data || s.removeAll(), a.diff(r).add(function(t) { if (a.hasValue(t)) { var e, i = a.getItemLayout(t); if (u && YS(h, i)) return; dl(e = XS(i, t, !0), { shape: { points: i.ends } }, o, t), jS(e, a, t, l), s.add(e), a.setItemGraphicEl(t, e) } }).update(function(t, e) { var i = r.getItemGraphicEl(e); if (a.hasValue(t)) { var n = a.getItemLayout(t); u && YS(h, n) ? s.remove(i) : (i ? cl(i, { shape: { points: n.ends } }, o, t) : i = XS(n, t), jS(i, a, t, l), s.add(i), a.setItemGraphicEl(t, i)) } else s.remove(i) }).remove(function(t) { var e = r.getItemGraphicEl(t); e && s.remove(e) }).execute(), this._data = a }, _renderLarge: function(t) { this._clear(), KS(t, this.group); var e = t.get("clip", !0) ? Sm(t.coordinateSystem, !1, t) : null; e ? this.group.setClipPath(e) : this.group.removeClipPath() }, _incrementalRenderNormal: function(t, e) { for (var i, n = e.getData(), o = n.getLayout("isSimpleBox"); null != (i = t.next()); ) { var a; jS(a = XS(n.getItemLayout(i), i), n, i, o), a.incremental = !0, this.group.add(a) } }, _incrementalRenderLarge: function(t, e) { KS(e, this.group, !0) }, remove: function(t) { this._clear() }, _clear: function() { this.group.removeAll(), this._data = null }, dispose: et }), Ar.extend({ type: "normalCandlestickBox", shape: {}, buildPath: function(t, e) { var i = e.points; this.__simpleBox ? (t.moveTo(i[4][0], i[4][1]), t.lineTo(i[6][0], i[6][1])) : (t.moveTo(i[0][0], i[0][1]), t.lineTo(i[1][0], i[1][1]), t.lineTo(i[2][0], i[2][1]), t.lineTo(i[3][0], i[3][1]), t.closePath(), t.moveTo(i[4][0], i[4][1]), t.lineTo(i[5][0], i[5][1]), t.moveTo(i[6][0], i[6][1]), t.lineTo(i[7][0], i[7][1])) } })); function XS(t, e, i) { var n = t.ends; return new US({ shape: { points: i ? function(t, e) { return O(t, function(t) { return (t = t.slice())[1] = e.initBaseline, t }) }(n, t) : n }, z2: 100 }) } function YS(t, e) { for (var i = !0, n = 0; n < e.ends.length; n++) if (t.contain(e.ends[n][0], e.ends[n][1])) { i = !1; break } return i } function jS(t, e, i, n) { var o = e.getItemModel(i) , a = o.getModel(WS) , r = e.getItemVisual(i, "color") , s = e.getItemVisual(i, "borderColor") || r , l = a.getItemStyle(ZS); t.useStyle(l), t.style.strokeNoScale = !0, t.style.fill = r, t.style.stroke = s, t.__simpleBox = n, $s(t, o.getModel(HS).getItemStyle()) } var qS = Ar.extend({ type: "largeCandlestickBox", shape: {}, buildPath: function(t, e) { for (var i = e.points, n = 0; n < i.length; ) if (this.__sign === i[n++]) { var o = i[n++]; t.moveTo(o, i[n++]), t.lineTo(o, i[n++]) } else n += 3 } }); function KS(t, e, i) { var n = t.getData() , o = n.getLayout("largePoints") , a = new qS({ shape: { points: o }, __sign: 1 }); e.add(a); var r = new qS({ shape: { points: o }, __sign: -1 }); e.add(r), $S(1, a, t, n), $S(-1, r, t, n), i && (a.incremental = !0, r.incremental = !0) } function $S(t, e, i, n) { var o = 0 < t ? "P" : "N" , a = n.getVisual("borderColor" + o) || n.getVisual("color" + o) , r = i.getModel(WS).getItemStyle(ZS); e.useStyle(r), e.style.fill = null, e.style.stroke = a } var JS = ["itemStyle", "borderColor"] , QS = ["itemStyle", "borderColor0"] , tM = ["itemStyle", "color"] , eM = ["itemStyle", "color0"] , iM = { seriesType: "candlestick", plan: vc(), performRawSeries: !0, reset: function(t, e) { if (t.getData().setVisual({ legendSymbol: "roundRect", colorP: a(1, t), colorN: a(-1, t), borderColorP: r(1, t), borderColorN: r(-1, t) }), !e.isSeriesFiltered(t)) return !t.pipelineContext.large && { progress: function(t, e) { var i; for (; null != (i = t.next()); ) { var n = e.getItemModel(i) , o = e.getItemLayout(i).sign; e.setItemVisual(i, { color: a(o, n), borderColor: r(o, n) }) } } }; function a(t, e) { return e.get(0 < t ? tM : eM) } function r(t, e) { return e.get(0 < t ? JS : QS) } } } , nM = "undefined" != typeof Float32Array ? Float32Array : Array , oM = { seriesType: "candlestick", plan: vc(), reset: function(t) { var x = t.coordinateSystem , e = t.getData() , _ = function(t, e) { var i, n = t.getBaseAxis(), o = "category" === n.type ? n.getBandWidth() : (i = n.getExtent(), Math.abs(i[1] - i[0]) / e.count()), a = Rl(H(t.get("barMaxWidth"), o), o), r = Rl(H(t.get("barMinWidth"), 1), o), s = t.get("barWidth"); return null != s ? Rl(s, o) : Math.max(Math.min(o / 2, a), r) }(t, e) , i = ["x", "y"] , w = e.mapDimension(i[0]) , n = e.mapDimension(i[1], !0) , b = n[0] , S = n[1] , M = n[2] , I = n[3]; if (e.setLayout({ candleWidth: _, isSimpleBox: _ <= 1.3 }), !(null == w || n.length < 4)) return { progress: t.pipelineContext.large ? function(t, e) { var i, n, o = new nM(4 * t.count), a = 0, r = [], s = []; for (; null != (n = t.next()); ) { var l = e.get(w, n) , u = e.get(b, n) , h = e.get(S, n) , c = e.get(M, n) , d = e.get(I, n); isNaN(l) || isNaN(c) || isNaN(d) ? (o[a++] = NaN, a += 3) : (o[a++] = aM(e, n, u, h, S), r[0] = l, r[1] = c, i = x.dataToPoint(r, null, s), o[a++] = i ? i[0] : NaN, o[a++] = i ? i[1] : NaN, r[1] = d, i = x.dataToPoint(r, null, s), o[a++] = i ? i[1] : NaN) } e.setLayout("largePoints", o) } : function(t, e) { var i; for (; null != (i = t.next()); ) { var n = e.get(w, i) , o = e.get(b, i) , a = e.get(S, i) , r = e.get(M, i) , s = e.get(I, i) , l = Math.min(o, a) , u = Math.max(o, a) , h = g(l, n) , c = g(u, n) , d = g(r, n) , f = g(s, n) , p = []; m(p, c, 0), m(p, h, 1), p.push(y(f), y(c), y(d), y(h)), e.setItemLayout(i, { sign: aM(e, i, o, a, S), initBaseline: a < o ? c[1] : h[1], ends: p, brushRect: v(r, s, n) }) } function g(t, e) { var i = []; return i[0] = e, i[1] = t, isNaN(e) || isNaN(t) ? [NaN, NaN] : x.dataToPoint(i) } function m(t, e, i) { var n = e.slice() , o = e.slice(); n[0] = zs(n[0] + _ / 2, 1, !1), o[0] = zs(o[0] - _ / 2, 1, !0), i ? t.push(n, o) : t.push(o, n) } function v(t, e, i) { var n = g(t, i) , o = g(e, i); return n[0] -= _ / 2, o[0] -= _ / 2, { x: n[0], y: n[1], width: _, height: o[1] - n[1] } } function y(t) { return t[0] = zs(t[0], 1), t } } } } }; function aM(t, e, i, n, o) { return n < i ? -1 : i < n ? 1 : 0 < e ? t.get(o, e - 1) <= n ? 1 : -1 : 1 } yf(function(t) { t && L(t.series) && E(t.series, function(t) { z(t) && "k" === t.type && (t.type = "candlestick") }) }), Sf(iM), bf(oM), sc.extend({ type: "series.effectScatter", dependencies: ["grid", "polar"], getInitialData: function(t, e) { return gp(this.getSource(), this, { useEncodeDefaulter: !0 }) }, brushSelector: "point", defaultOption: { coordinateSystem: "cartesian2d", zlevel: 0, z: 2, legendHoverLink: !0, effectType: "ripple", progressive: 0, showEffectOn: "render", rippleEffect: { period: 4, scale: 2.5, brushType: "fill" }, symbolSize: 10 } }); function rM(t, e) { var i = e.rippleEffectColor || e.color; t.eachChild(function(t) { t.attr({ z: e.z, zlevel: e.zlevel, style: { stroke: "stroke" === e.brushType ? i : null, fill: "fill" === e.brushType ? i : null } }) }) } function sM(t, e) { Ci.call(this); var i = new Xg(t,e) , n = new Ci; this.add(i), this.add(n), n.beforeUpdate = function() { this.attr(i.getScale()) } , this.updateData(t, e) } var lM = sM.prototype; lM.stopEffectAnimation = function() { this.childAt(1).removeAll() } , lM.startEffectAnimation = function(t) { for (var e = t.symbolType, i = t.color, n = this.childAt(1), o = 0; o < 3; o++) { var a = wg(e, -1, -1, 2, 2, i); a.attr({ style: { strokeNoScale: !0 }, z2: 99, silent: !0, scale: [.5, .5] }); var r = -o / 3 * t.period + t.effectOffset; a.animate("", !0).when(t.period, { scale: [t.rippleScale / 2, t.rippleScale / 2] }).delay(r).start(), a.animateStyle(!0).when(t.period, { opacity: 0 }).delay(r).start(), n.add(a) } rM(n, t) } , lM.updateEffectAnimation = function(t) { for (var e = this._effectCfg, i = this.childAt(1), n = ["symbolType", "period", "rippleScale"], o = 0; o < n.length; o++) { var a = n[o]; if (e[a] !== t[a]) return this.stopEffectAnimation(), void this.startEffectAnimation(t) } rM(i, t) } , lM.highlight = function() { this.trigger("emphasis") } , lM.downplay = function() { this.trigger("normal") } , lM.updateData = function(t, e) { var i = t.hostModel; this.childAt(0).updateData(t, e); var n = this.childAt(1) , o = t.getItemModel(e) , a = t.getItemVisual(e, "symbol") , r = function(t) { return L(t) || (t = [+t, +t]), t }(t.getItemVisual(e, "symbolSize")) , s = t.getItemVisual(e, "color"); n.attr("scale", r), n.traverse(function(t) { t.attr({ fill: s }) }); var l = o.getShallow("symbolOffset"); if (l) { var u = n.position; u[0] = Rl(l[0], r[0]), u[1] = Rl(l[1], r[1]) } var h = t.getItemVisual(e, "symbolRotate"); n.rotation = (h || 0) * Math.PI / 180 || 0; var c = {}; if (c.showEffectOn = i.get("showEffectOn"), c.rippleScale = o.get("rippleEffect.scale"), c.brushType = o.get("rippleEffect.brushType"), c.period = 1e3 * o.get("rippleEffect.period"), c.effectOffset = e / t.count(), c.z = o.getShallow("z") || 0, c.zlevel = o.getShallow("zlevel") || 0, c.symbolType = a, c.color = s, c.rippleEffectColor = o.get("rippleEffect.color"), this.off("mouseover").off("mouseout").off("emphasis").off("normal"), "render" === c.showEffectOn) this._effectCfg ? this.updateEffectAnimation(c) : this.startEffectAnimation(c), this._effectCfg = c; else { this._effectCfg = null, this.stopEffectAnimation(); var d = this.childAt(0) , f = function() { d.highlight(), "render" !== c.showEffectOn && this.startEffectAnimation(c) } , p = function() { d.downplay(), "render" !== c.showEffectOn && this.stopEffectAnimation() }; this.on("mouseover", f, this).on("mouseout", p, this).on("emphasis", f, this).on("normal", p, this) } this._effectCfg = c } , lM.fadeOut = function(t) { this.off("mouseover").off("mouseout").off("emphasis").off("normal"), t && t() } , w(sM, Ci), Cf({ type: "effectScatter", init: function() { this._symbolDraw = new im(sM) }, render: function(t, e, i) { var n = t.getData() , o = this._symbolDraw; o.updateData(n), this.group.add(o.group) }, updateTransform: function(t, e, i) { var n = t.getData(); this.group.dirty(); var o = km().reset(t); o.progress && o.progress({ start: 0, end: n.count() }, n), this._symbolDraw.updateLayout(n) }, _updateGroupTransform: function(t) { var e = t.coordinateSystem; e && e.getRoamTransform && (this.group.transform = fe(e.getRoamTransform()), this.group.decomposeTransform()) }, remove: function(t, e) { this._symbolDraw && this._symbolDraw.remove(e) }, dispose: function() {} }), Sf(Lm("effectScatter", "circle")), bf(km("effectScatter")); var uM = "undefined" == typeof Uint32Array ? Array : Uint32Array , hM = "undefined" == typeof Float64Array ? Array : Float64Array; function cM(t) { var e = t.data; e && e[0] && e[0][0] && e[0][0].coord && (t.data = O(e, function(t) { var e = { coords: [t[0].coord, t[1].coord] }; return t[0].name && (e.fromName = t[0].name), t[1].name && (e.toName = t[1].name), p([e, t[0], t[1]]) })) } var dM = sc.extend({ type: "series.lines", dependencies: ["grid", "polar"], visualColorAccessPath: "lineStyle.color", init: function(t) { t.data = t.data || [], cM(t); var e = this._processFlatCoordsArray(t.data); this._flatCoords = e.flatCoords, this._flatCoordsOffset = e.flatCoordsOffset, e.flatCoords && (t.data = new Float32Array(e.count)), dM.superApply(this, "init", arguments) }, mergeOption: function(t) { if (t.data = t.data || [], cM(t), t.data) { var e = this._processFlatCoordsArray(t.data); this._flatCoords = e.flatCoords, this._flatCoordsOffset = e.flatCoordsOffset, e.flatCoords && (t.data = new Float32Array(e.count)) } dM.superApply(this, "mergeOption", arguments) }, appendData: function(t) { var e = this._processFlatCoordsArray(t.data); e.flatCoords && (this._flatCoords ? (this._flatCoords = tt(this._flatCoords, e.flatCoords), this._flatCoordsOffset = tt(this._flatCoordsOffset, e.flatCoordsOffset)) : (this._flatCoords = e.flatCoords, this._flatCoordsOffset = e.flatCoordsOffset), t.data = new Float32Array(e.count)), this.getRawData().appendData(t.data) }, _getCoordsFromItemModel: function(t) { var e = this.getData().getItemModel(t); return e.option instanceof Array ? e.option : e.getShallow("coords") }, getLineCoordsCount: function(t) { return this._flatCoordsOffset ? this._flatCoordsOffset[2 * t + 1] : this._getCoordsFromItemModel(t).length }, getLineCoords: function(t, e) { if (this._flatCoordsOffset) { for (var i = this._flatCoordsOffset[2 * t], n = this._flatCoordsOffset[2 * t + 1], o = 0; o < n; o++) e[o] = e[o] || [], e[o][0] = this._flatCoords[i + 2 * o], e[o][1] = this._flatCoords[i + 2 * o + 1]; return n } var a = this._getCoordsFromItemModel(t); for (o = 0; o < a.length; o++) e[o] = e[o] || [], e[o][0] = a[o][0], e[o][1] = a[o][1]; return a.length }, _processFlatCoordsArray: function(t) { var e = 0; if (this._flatCoords && (e = this._flatCoords.length), "number" != typeof t[0]) return { flatCoordsOffset: null, flatCoords: null, count: t.length }; for (var i = t.length, n = new uM(i), o = new hM(i), a = 0, r = 0, s = 0, l = 0; l < i; ) { s++; var u = t[l++]; n[r++] = a + e, n[r++] = u; for (var h = 0; h < u; h++) { var c = t[l++] , d = t[l++]; o[a++] = c, o[a++] = d } } return { flatCoordsOffset: new Uint32Array(n.buffer,0,r), flatCoords: o, count: s } }, getInitialData: function(t, e) { var a = new Yf(["value"],this); return a.hasItemOption = !1, a.initData(t.data, [], function(t, e, i, n) { if (t instanceof Array) return NaN; a.hasItemOption = !0; var o = t.value; return null != o ? o instanceof Array ? o[n] : o : void 0 }), a }, formatTooltip: function(t) { var e = this.getData().getItemModel(t) , i = e.get("name"); if (i) return i; var n = e.get("fromName") , o = e.get("toName") , a = []; return null != n && a.push(n), null != o && a.push(o), au(a.join(" > ")) }, preventIncremental: function() { return !!this.get("effect.show") }, getProgressive: function() { var t = this.option.progressive; return null == t ? this.option.large ? 1e4 : this.get("progressive") : t }, getProgressiveThreshold: function() { var t = this.option.progressiveThreshold; return null == t ? this.option.large ? 2e4 : this.get("progressiveThreshold") : t }, defaultOption: { coordinateSystem: "geo", zlevel: 0, z: 2, legendHoverLink: !0, hoverAnimation: !0, xAxisIndex: 0, yAxisIndex: 0, symbol: ["none", "none"], symbolSize: [10, 10], geoIndex: 0, effect: { show: !1, period: 4, constantSpeed: 0, symbol: "circle", symbolSize: 3, loop: !0, trailLength: .2 }, large: !1, largeThreshold: 2e3, polyline: !1, clip: !0, label: { show: !1, position: "end" }, lineStyle: { opacity: .5 } } }); function fM(t, e, i) { Ci.call(this), this.add(this.createLine(t, e, i)), this._updateEffectSymbol(t, e) } var pM = fM.prototype; function gM(t, e, i) { Ci.call(this), this._createPolyline(t, e, i) } pM.createLine = function(t, e, i) { return new dw(t,e,i) } , pM._updateEffectSymbol = function(t, e) { var i = t.getItemModel(e).getModel("effect") , n = i.get("symbolSize") , o = i.get("symbol"); L(n) || (n = [n, n]); var a = i.get("color") || t.getItemVisual(e, "color") , r = this.childAt(1); this._symbolType !== o && (this.remove(r), (r = wg(o, -.5, -.5, 1, 1, a)).z2 = 100, r.culling = !0, this.add(r)), r && (r.setStyle("shadowColor", a), r.setStyle(i.getItemStyle(["color"])), r.attr("scale", n), r.setColor(a), r.attr("scale", n), this._symbolType = o, this._symbolScale = n, this._updateEffectAnimation(t, i, e)) } , pM._updateEffectAnimation = function(e, t, i) { var n = this.childAt(1); if (n) { var o = this , a = e.getItemLayout(i) , r = 1e3 * t.get("period") , s = t.get("loop") , l = t.get("constantSpeed") , u = W(t.get("delay"), function(t) { return t / e.count() * r / 3 }) , h = "function" == typeof u; if (n.ignore = !0, this.updateAnimationPoints(n, a), 0 < l && (r = this.getLineLength(n) / l * 1e3), r !== this._period || s !== this._loop) { n.stopAnimation(); var c = u; h && (c = u(i)), 0 < n.__t && (c = -r * n.__t), n.__t = 0; var d = n.animate("", s).when(r, { __t: 1 }).delay(c).during(function() { o.updateSymbolPosition(n) }); s || d.done(function() { o.remove(n) }), d.start() } this._period = r, this._loop = s } } , pM.getLineLength = function(t) { return yt(t.__p1, t.__cp1) + yt(t.__cp1, t.__p2) } , pM.updateAnimationPoints = function(t, e) { t.__p1 = e[0], t.__p2 = e[1], t.__cp1 = e[2] || [(e[0][0] + e[1][0]) / 2, (e[0][1] + e[1][1]) / 2] } , pM.updateData = function(t, e, i) { this.childAt(0).updateData(t, e, i), this._updateEffectSymbol(t, e) } , pM.updateSymbolPosition = function(t) { var e = t.__p1 , i = t.__p2 , n = t.__cp1 , o = t.__t , a = t.position , r = [a[0], a[1]] , s = La , l = ka; a[0] = s(e[0], n[0], i[0], o), a[1] = s(e[1], n[1], i[1], o); var u = l(e[0], n[0], i[0], o) , h = l(e[1], n[1], i[1], o); if (t.rotation = -Math.atan2(h, u) - Math.PI / 2, "line" === this._symbolType || "rect" === this._symbolType || "roundRect" === this._symbolType) if (void 0 !== t.__lastT && t.__lastT < t.__t) { var c = 1.05 * yt(r, a); t.attr("scale", [t.scale[0], c]), 1 === o && (a[0] = r[0] + (a[0] - r[0]) / 2, a[1] = r[1] + (a[1] - r[1]) / 2) } else if (1 === t.__lastT) { c = 2 * yt(e, a); t.attr("scale", [t.scale[0], c]) } else t.attr("scale", this._symbolScale); t.__lastT = t.__t, t.ignore = !1 } , pM.updateLayout = function(t, e) { this.childAt(0).updateLayout(t, e); var i = t.getItemModel(e).getModel("effect"); this._updateEffectAnimation(t, i, e) } , w(fM, Ci); var mM = gM.prototype; function vM(t, e, i) { fM.call(this, t, e, i), this._lastFrame = 0, this._lastFramePercent = 0 } mM._createPolyline = function(t, e, i) { var n = t.getItemLayout(e) , o = new ts({ shape: { points: n } }); this.add(o), this._updateCommonStl(t, e, i) } , mM.updateData = function(t, e, i) { var n = t.hostModel; cl(this.childAt(0), { shape: { points: t.getItemLayout(e) } }, n, e), this._updateCommonStl(t, e, i) } , mM._updateCommonStl = function(t, e, i) { var n = this.childAt(0) , o = t.getItemModel(e) , a = t.getItemVisual(e, "color") , r = i && i.lineStyle , s = i && i.hoverLineStyle; i && !t.hasItemOption || (r = o.getModel("lineStyle").getLineStyle(), s = o.getModel("emphasis.lineStyle").getLineStyle()), n.useStyle(D({ strokeNoScale: !0, fill: "none", stroke: a }, r)), n.hoverStyle = s, $s(this) } , mM.updateLayout = function(t, e) { this.childAt(0).setShape("points", t.getItemLayout(e)) } , w(gM, Ci); var yM = vM.prototype; yM.createLine = function(t, e, i) { return new gM(t,e,i) } , yM.updateAnimationPoints = function(t, e) { this._points = e; for (var i = [0], n = 0, o = 1; o < e.length; o++) { var a = e[o - 1] , r = e[o]; n += yt(a, r), i.push(n) } if (0 !== n) { for (o = 0; o < i.length; o++) i[o] /= n; this._offsets = i, this._length = n } } , yM.getLineLength = function(t) { return this._length } , yM.updateSymbolPosition = function(t) { var e = t.__t , i = this._points , n = this._offsets , o = i.length; if (n) { var a = this._lastFrame; if (e < this._lastFramePercent) { for (r = Math.min(a + 1, o - 1); 0 <= r && !(n[r] <= e); r--) ; r = Math.min(r, o - 2) } else { for (var r = a; r < o && !(n[r] > e); r++) ; r = Math.min(r - 1, o - 2) } wt(t.position, i[r], i[r + 1], (e - n[r]) / (n[r + 1] - n[r])); var s = i[r + 1][0] - i[r][0] , l = i[r + 1][1] - i[r][1]; t.rotation = -Math.atan2(l, s) - Math.PI / 2, this._lastFrame = r, this._lastFramePercent = e, t.ignore = !1 } } , w(vM, fM); var xM = Cs({ shape: { polyline: !1, curveness: 0, segs: [] }, buildPath: function(t, e) { var i = e.segs , n = e.curveness; if (e.polyline) for (var o = 0; o < i.length; ) { var a = i[o++]; if (0 < a) { t.moveTo(i[o++], i[o++]); for (var r = 1; r < a; r++) t.lineTo(i[o++], i[o++]) } } else for (o = 0; o < i.length; ) { var s = i[o++] , l = i[o++] , u = i[o++] , h = i[o++]; if (t.moveTo(s, l), 0 < n) { var c = (s + u) / 2 - (l - h) * n , d = (l + h) / 2 - (u - s) * n; t.quadraticCurveTo(c, d, u, h) } else t.lineTo(u, h) } }, findDataIndex: function(t, e) { var i = this.shape , n = i.segs , o = i.curveness; if (i.polyline) for (var a = 0, r = 0; r < n.length; ) { var s = n[r++]; if (0 < s) for (var l = n[r++], u = n[r++], h = 1; h < s; h++) { if (sr(l, u, c = n[r++], d = n[r++])) return a } a++ } else for (a = 0, r = 0; r < n.length; ) { l = n[r++], u = n[r++]; var c = n[r++] , d = n[r++]; if (0 < o) { if (ur(l, u, (l + c) / 2 - (u - d) * o, (u + d) / 2 - (c - l) * o, c, d)) return a } else if (sr(l, u, c, d)) return a; a++ } return -1 } }); function _M() { this.group = new Ci } var wM = _M.prototype; wM.isPersistent = function() { return !this._incremental } , wM.updateData = function(t) { this.group.removeAll(); var e = new xM({ rectHover: !0, cursor: "default" }); e.setShape({ segs: t.getLayout("linesPoints") }), this._setCommon(e, t), this.group.add(e), this._incremental = null } , wM.incrementalPrepareUpdate = function(t) { this.group.removeAll(), this._clearIncremental(), 5e5 < t.count() ? (this._incremental || (this._incremental = new vs({ silent: !0 })), this.group.add(this._incremental)) : this._incremental = null } , wM.incrementalUpdate = function(t, e) { var i = new xM; i.setShape({ segs: e.getLayout("linesPoints") }), this._setCommon(i, e, !!this._incremental), this._incremental ? this._incremental.addDisplayable(i, !0) : (i.rectHover = !0, i.cursor = "default", i.__startIndex = t.start, this.group.add(i)) } , wM.remove = function() { this._clearIncremental(), this._incremental = null, this.group.removeAll() } , wM._setCommon = function(i, t, e) { var n = t.hostModel; i.setShape({ polyline: n.get("polyline"), curveness: n.get("lineStyle.curveness") }), i.useStyle(n.getModel("lineStyle").getLineStyle()), i.style.strokeNoScale = !0; var o = t.getVisual("color"); o && i.setStyle("stroke", o), i.setStyle("fill"), e || (i.seriesIndex = n.seriesIndex, i.on("mousemove", function(t) { i.dataIndex = null; var e = i.findDataIndex(t.offsetX, t.offsetY); 0 < e && (i.dataIndex = e + i.__startIndex) })) } , wM._clearIncremental = function() { var t = this._incremental; t && t.clearDisplaybles() } ; var bM = { seriesType: "lines", plan: vc(), reset: function(g) { var m = g.coordinateSystem , v = g.get("polyline") , y = g.pipelineContext.large; return { progress: function(t, e) { var i = []; if (y) { var n, o = t.end - t.start; if (v) { for (var a = 0, r = t.start; r < t.end; r++) a += g.getLineCoordsCount(r); n = new Float32Array(o + 2 * a) } else n = new Float32Array(4 * o); var s = 0 , l = []; for (r = t.start; r < t.end; r++) { var u = g.getLineCoords(r, i); v && (n[s++] = u); for (var h = 0; h < u; h++) l = m.dataToPoint(i[h], !1, l), n[s++] = l[0], n[s++] = l[1] } e.setLayout("linesPoints", n) } else for (r = t.start; r < t.end; r++) { var c = e.getItemModel(r) , d = (u = g.getLineCoords(r, i), []); if (v) for (var f = 0; f < u; f++) d.push(m.dataToPoint(i[f])); else { d[0] = m.dataToPoint(i[0]), d[1] = m.dataToPoint(i[1]); var p = c.get("lineStyle.curveness"); +p && (d[2] = [(d[0][0] + d[1][0]) / 2 - (d[0][1] - d[1][1]) * p, (d[0][1] + d[1][1]) / 2 - (d[1][0] - d[0][0]) * p]) } e.setItemLayout(r, d) } } } } }; function SM(t) { return t instanceof Array || (t = [t, t]), t } Cf({ type: "lines", init: function() {}, render: function(t, e, i) { var n = t.getData() , o = this._updateLineDraw(n, t) , a = t.get("zlevel") , r = t.get("effect.trailLength") , s = i.getZr() , l = "svg" === s.painter.getType(); l || s.painter.getLayer(a).clear(!0), null == this._lastZlevel || l || s.configLayer(this._lastZlevel, { motionBlur: !1 }), this._showEffect(t) && r && (l || s.configLayer(a, { motionBlur: !0, lastFrameAlpha: Math.max(Math.min(r / 10 + .9, 1), 0) })), o.updateData(n); var u = t.get("clip", !0) && Sm(t.coordinateSystem, !1, t); u ? this.group.setClipPath(u) : this.group.removeClipPath(), this._lastZlevel = a, this._finished = !0 }, incrementalPrepareRender: function(t, e, i) { var n = t.getData(); this._updateLineDraw(n, t).incrementalPrepareUpdate(n), this._clearLayer(i), this._finished = !1 }, incrementalRender: function(t, e, i) { this._lineDraw.incrementalUpdate(t, e.getData()), this._finished = t.end === e.getData().count() }, updateTransform: function(t, e, i) { var n = t.getData() , o = t.pipelineContext; if (!this._finished || o.large || o.progressiveRender) return { update: !0 }; var a = bM.reset(t); a.progress && a.progress({ start: 0, end: n.count() }, n), this._lineDraw.updateLayout(), this._clearLayer(i) }, _updateLineDraw: function(t, e) { var i = this._lineDraw , n = this._showEffect(e) , o = !!e.get("polyline") , a = e.pipelineContext.large; return i && n === this._hasEffet && o === this._isPolyline && a === this._isLargeDraw || (i && i.remove(), i = this._lineDraw = a ? new _M : new pw(o ? n ? vM : gM : n ? fM : dw), this._hasEffet = n, this._isPolyline = o, this._isLargeDraw = a, this.group.removeAll()), this.group.add(i.group), i }, _showEffect: function(t) { return !!t.get("effect.show") }, _clearLayer: function(t) { var e = t.getZr(); "svg" === e.painter.getType() || null == this._lastZlevel || e.painter.getLayer(this._lastZlevel).clear(!0) }, remove: function(t, e) { this._lineDraw && this._lineDraw.remove(), this._lineDraw = null, this._clearLayer(e) }, dispose: function() {} }); var MM = "lineStyle.opacity".split(".") , IM = { seriesType: "lines", reset: function(t, e, i) { var n = SM(t.get("symbol")) , o = SM(t.get("symbolSize")) , a = t.getData(); return a.setVisual("fromSymbol", n && n[0]), a.setVisual("toSymbol", n && n[1]), a.setVisual("fromSymbolSize", o && o[0]), a.setVisual("toSymbolSize", o && o[1]), a.setVisual("opacity", t.get(MM)), { dataEach: a.hasItemOption ? function(t, e) { var i = t.getItemModel(e) , n = SM(i.getShallow("symbol", !0)) , o = SM(i.getShallow("symbolSize", !0)) , a = i.get(MM); n[0] && t.setItemVisual(e, "fromSymbol", n[0]), n[1] && t.setItemVisual(e, "toSymbol", n[1]), o[0] && t.setItemVisual(e, "fromSymbolSize", o[0]), o[1] && t.setItemVisual(e, "toSymbolSize", o[1]), t.setItemVisual(e, "opacity", a) } : null } } }; bf(bM), Sf(IM), sc.extend({ type: "series.heatmap", getInitialData: function(t, e) { return gp(this.getSource(), this, { generateCoord: "value" }) }, preventIncremental: function() { var t = lh.get(this.get("coordinateSystem")); if (t && t.dimensions) return "lng" === t.dimensions[0] && "lat" === t.dimensions[1] }, defaultOption: { coordinateSystem: "cartesian2d", zlevel: 0, z: 2, geoIndex: 0, blurSize: 30, pointSize: 20, maxOpacity: 1, minOpacity: 0 } }); function TM() { var t = y(); this.canvas = t, this.blurSize = 30, this.pointSize = 20, this.maxOpacity = 1, this.minOpacity = 0, this._gradientPixels = {} } TM.prototype = { update: function(t, e, i, n, o, a) { var r = this._getBrush() , s = this._getGradient(t, o, "inRange") , l = this._getGradient(t, o, "outOfRange") , u = this.pointSize + this.blurSize , h = this.canvas , c = h.getContext("2d") , d = t.length; h.width = e, h.height = i; for (var f = 0; f < d; ++f) { var p = t[f] , g = p[0] , m = p[1] , v = n(p[2]); c.globalAlpha = v, c.drawImage(r, g - u, m - u) } if (!h.width || !h.height) return h; for (var y = c.getImageData(0, 0, h.width, h.height), x = y.data, _ = 0, w = x.length, b = this.minOpacity, S = this.maxOpacity - b; _ < w; ) { v = x[_ + 3] / 256; var M = 4 * Math.floor(255 * v); if (0 < v) { var I = a(v) ? s : l; 0 < v && (v = v * S + b), x[_++] = I[M], x[_++] = I[1 + M], x[_++] = I[2 + M], x[_++] = I[3 + M] * v * 256 } else _ += 4 } return c.putImageData(y, 0, 0), h }, _getBrush: function() { var t = this._brushCanvas || (this._brushCanvas = y()) , e = this.pointSize + this.blurSize , i = 2 * e; t.width = i, t.height = i; var n = t.getContext("2d"); return n.clearRect(0, 0, i, i), n.shadowOffsetX = i, n.shadowBlur = this.blurSize, n.shadowColor = "#000", n.beginPath(), n.arc(-e, e, this.pointSize, 0, 2 * Math.PI, !0), n.closePath(), n.fill(), t }, _getGradient: function(t, e, i) { for (var n = this._gradientPixels, o = n[i] || (n[i] = new Uint8ClampedArray(1024)), a = [0, 0, 0, 0], r = 0, s = 0; s < 256; s++) e[i](s / 255, !0, a), o[r++] = a[0], o[r++] = a[1], o[r++] = a[2], o[r++] = a[3]; return o } }, Cf({ type: "heatmap", render: function(i, t, e) { var n; t.eachComponent("visualMap", function(e) { e.eachTargetSeries(function(t) { t === i && (n = e) }) }), this.group.removeAll(), this._incrementalDisplayable = null; var o = i.coordinateSystem; "cartesian2d" === o.type || "calendar" === o.type ? this._renderOnCartesianAndCalendar(i, e, 0, i.getData().count()) : function(t) { var e = t.dimensions; return "lng" === e[0] && "lat" === e[1] }(o) && this._renderOnGeo(o, i, n, e) }, incrementalPrepareRender: function(t, e, i) { this.group.removeAll() }, incrementalRender: function(t, e, i, n) { e.coordinateSystem && this._renderOnCartesianAndCalendar(e, n, t.start, t.end, !0) }, _renderOnCartesianAndCalendar: function(t, e, i, n, o) { var a, r, s = t.coordinateSystem; if ("cartesian2d" === s.type) { var l = s.getAxis("x") , u = s.getAxis("y"); a = l.getBandWidth(), r = u.getBandWidth() } for (var h = this.group, c = t.getData(), d = "emphasis.itemStyle", f = "emphasis.label", p = t.getModel("itemStyle").getItemStyle(["color"]), g = t.getModel(d).getItemStyle(), m = t.getModel("label"), v = t.getModel(f), y = s.type, x = "cartesian2d" === y ? [c.mapDimension("x"), c.mapDimension("y"), c.mapDimension("value")] : [c.mapDimension("time"), c.mapDimension("value")], _ = i; _ < n; _++) { var w; if ("cartesian2d" === y) { if (isNaN(c.get(x[2], _))) continue; var b = s.dataToPoint([c.get(x[0], _), c.get(x[1], _)]); w = new rs({ shape: { x: Math.floor(Math.round(b[0]) - a / 2), y: Math.floor(Math.round(b[1]) - r / 2), width: Math.ceil(a), height: Math.ceil(r) }, style: { fill: c.getItemVisual(_, "color"), opacity: c.getItemVisual(_, "opacity") } }) } else { if (isNaN(c.get(x[1], _))) continue; w = new rs({ z2: 1, shape: s.dataToRect([c.get(x[0], _)]).contentShape, style: { fill: c.getItemVisual(_, "color"), opacity: c.getItemVisual(_, "opacity") } }) } var S = c.getItemModel(_); c.hasItemOption && (p = S.getModel("itemStyle").getItemStyle(["color"]), g = S.getModel(d).getItemStyle(), m = S.getModel("label"), v = S.getModel(f)); var M = t.getRawValue(_) , I = "-"; M && null != M[2] && (I = M[2]), el(p, g, m, v, { labelFetcher: t, labelDataIndex: _, defaultText: I, isRectText: !0 }), w.setStyle(p), $s(w, c.hasItemOption ? g : P({}, g)), (w.incremental = o) && (w.useHoverLayer = !0), h.add(w), c.setItemGraphicEl(_, w) } }, _renderOnGeo: function(o, t, e, i) { var n = e.targetVisuals.inRange , a = e.targetVisuals.outOfRange , r = t.getData() , s = this._hmLayer || this._hmLayer || new TM; s.blurSize = t.get("blurSize"), s.pointSize = t.get("pointSize"), s.minOpacity = t.get("minOpacity"), s.maxOpacity = t.get("maxOpacity"); var l = o.getViewRect().clone() , u = o.getRoamTransform(); l.applyTransform(u); var h = Math.max(l.x, 0) , c = Math.max(l.y, 0) , d = Math.min(l.width + l.x, i.getWidth()) , f = Math.min(l.height + l.y, i.getHeight()) , p = d - h , g = f - c , m = [r.mapDimension("lng"), r.mapDimension("lat"), r.mapDimension("value")] , v = r.mapArray(m, function(t, e, i) { var n = o.dataToPoint([t, e]); return n[0] -= h, n[1] -= c, n.push(i), n }) , y = e.getExtent() , x = "visualMap.continuous" === e.type ? function(t, e) { var i = t[1] - t[0]; return e = [(e[0] - t[0]) / i, (e[1] - t[0]) / i], function(t) { return t >= e[0] && t <= e[1] } }(y, e.option.range) : function(e, n, o) { var i = e[1] - e[0] , a = (n = O(n, function(t) { return { interval: [(t.interval[0] - e[0]) / i, (t.interval[1] - e[0]) / i] } })).length , r = 0; return function(t) { for (var e = r; e < a; e++) { if ((i = n[e].interval)[0] <= t && t <= i[1]) { r = e; break } } if (e === a) for (e = r - 1; 0 <= e; e--) { var i; if ((i = n[e].interval)[0] <= t && t <= i[1]) { r = e; break } } return 0 <= e && e < a && o[e] } }(y, e.getPieceList(), e.option.selected); s.update(v, p, g, n.color.getNormalizer(), { inRange: n.color.getColorMapper(), outOfRange: a.color.getColorMapper() }, x); var _ = new Qn({ style: { width: p, height: g, x: h, y: c, image: s.canvas }, silent: !0 }); this.group.add(_) }, dispose: function() {} }); var AM = Tv.extend({ type: "series.pictorialBar", dependencies: ["grid"], defaultOption: { symbol: "circle", symbolSize: null, symbolRotate: null, symbolPosition: null, symbolOffset: null, symbolMargin: null, symbolRepeat: !1, symbolRepeatDirection: "end", symbolClip: !1, symbolBoundingData: null, symbolPatternSize: 400, barGap: "-100%", progressive: 0, hoverAnimation: !1 }, getInitialData: function(t) { return t.stack = null, AM.superApply(this, "getInitialData", arguments) } }) , DM = ["itemStyle", "borderWidth"] , CM = [{ xy: "x", wh: "width", index: 0, posDesc: ["left", "right"] }, { xy: "y", wh: "height", index: 1, posDesc: ["top", "bottom"] }] , LM = new Yr; Cf({ type: "pictorialBar", render: function(t, e, i) { var r = this.group , s = t.getData() , l = this._data , n = t.coordinateSystem , o = !!n.getBaseAxis().isHorizontal() , a = n.grid.getRect() , u = { ecSize: { width: i.getWidth(), height: i.getHeight() }, seriesModel: t, coordSys: n, coordSysExtent: [[a.x, a.x + a.width], [a.y, a.y + a.height]], isHorizontal: o, valueDim: CM[+o], categoryDim: CM[1 - o] }; return s.diff(l).add(function(t) { if (s.hasValue(t)) { var e = BM(s, t) , i = kM(s, t, e, u) , n = WM(s, u, i); s.setItemGraphicEl(t, n), r.add(n), YM(n, u, i) } }).update(function(t, e) { var i = l.getItemGraphicEl(e); if (s.hasValue(t)) { var n = BM(s, t) , o = kM(s, t, n, u) , a = ZM(s, o); i && a !== i.__pictorialShapeStr && (r.remove(i), s.setItemGraphicEl(t, null), i = null), i ? function(t, e, i) { var n = i.animationModel , o = i.dataIndex; cl(t.__pictorialBundle, { position: i.bundlePosition.slice() }, n, o), i.symbolRepeat ? OM(t, e, i, !0) : EM(t, e, i, !0); RM(t, i, !0), zM(t, e, i, !0) }(i, u, o) : i = WM(s, u, o, !0), s.setItemGraphicEl(t, i), i.__pictorialSymbolMeta = o, r.add(i), YM(i, u, o) } else r.remove(i) }).remove(function(t) { var e = l.getItemGraphicEl(t); e && HM(l, t, e.__pictorialSymbolMeta.animationModel, e) }).execute(), this._data = s, this.group }, dispose: et, remove: function(e, t) { var i = this.group , n = this._data; e.get("animation") ? n && n.eachItemGraphicEl(function(t) { HM(n, t.dataIndex, e, t) }) : i.removeAll() } }); function kM(t, e, i, n) { var o = t.getItemLayout(e) , a = i.get("symbolRepeat") , r = i.get("symbolClip") , s = i.get("symbolPosition") || "start" , l = (i.get("symbolRotate") || 0) * Math.PI / 180 || 0 , u = i.get("symbolPatternSize") || 2 , h = i.isAnimationEnabled() , c = { dataIndex: e, layout: o, itemModel: i, symbolType: t.getItemVisual(e, "symbol") || "circle", color: t.getItemVisual(e, "color"), symbolClip: r, symbolRepeat: a, symbolRepeatDirection: i.get("symbolRepeatDirection"), symbolPatternSize: u, rotation: l, animationModel: h ? i : null, hoverAnimation: h && i.get("hoverAnimation"), z2: i.getShallow("z", !0) || 0 }; !function(t, e, i, n, o) { var a, r = n.valueDim, s = t.get("symbolBoundingData"), l = n.coordSys.getOtherAxis(n.coordSys.getBaseAxis()), u = l.toGlobalCoord(l.dataToCoord(0)), h = 1 - +(i[r.wh] <= 0); if (L(s)) { var c = [PM(l, s[0]) - u, PM(l, s[1]) - u]; c[1] < c[0] && c.reverse(), a = c[h] } else a = null != s ? PM(l, s) - u : e ? n.coordSysExtent[r.index][h] - u : i[r.wh]; o.boundingLength = a, e && (o.repeatCutLength = i[r.wh]); o.pxSign = 0 < a ? 1 : a < 0 ? -1 : 0 }(i, a, o, n, c), function(t, e, i, n, o, a, r, s, l, u) { var h = l.valueDim , c = l.categoryDim , d = Math.abs(i[c.wh]) , f = t.getItemVisual(e, "symbolSize"); f = L(f) ? f.slice() : (null == f && (f = "100%"), [f, f]); f[c.index] = Rl(f[c.index], d), f[h.index] = Rl(f[h.index], n ? d : Math.abs(a)), u.symbolSize = f, (u.symbolScale = [f[0] / s, f[1] / s])[h.index] *= (l.isHorizontal ? -1 : 1) * r }(t, e, o, a, 0, c.boundingLength, c.pxSign, u, n, c), function(t, e, i, n, o) { var a = t.get(DM) || 0; a && (LM.attr({ scale: e.slice(), rotation: i }), LM.updateTransform(), a /= LM.getLineScale(), a *= e[n.valueDim.index]); o.valueLineWidth = a }(i, c.symbolScale, l, n, c); var d = c.symbolSize , f = i.get("symbolOffset"); return L(f) && (f = [Rl(f[0], d[0]), Rl(f[1], d[1])]), function(t, e, i, n, o, a, r, s, l, u, h, c) { var d = h.categoryDim , f = h.valueDim , p = c.pxSign , g = Math.max(e[f.index] + s, 0) , m = g; if (n) { var v = Math.abs(l) , y = W(t.get("symbolMargin"), "15%") + "" , x = !1; y.lastIndexOf("!") === y.length - 1 && (x = !0, y = y.slice(0, y.length - 1)), y = Rl(y, e[f.index]); var _ = Math.max(g + 2 * y, 0) , w = x ? 0 : 2 * y , b = Jl(n) , S = b ? n : jM((v + w) / _); _ = g + 2 * (y = (v - S * g) / 2 / (x ? S : S - 1)), w = x ? 0 : 2 * y, b || "fixed" === n || (S = u ? jM((Math.abs(u) + w) / _) : 0), m = S * _ - w, c.repeatTimes = S, c.symbolMargin = y } var M = p * (m / 2) , I = c.pathPosition = []; I[d.index] = i[d.wh] / 2, I[f.index] = "start" === r ? M : "end" === r ? l - M : l / 2, a && (I[0] += a[0], I[1] += a[1]); var T = c.bundlePosition = []; T[d.index] = i[d.xy], T[f.index] = i[f.xy]; var A = c.barRectShape = P({}, i); A[f.wh] = p * Math.max(Math.abs(i[f.wh]), Math.abs(I[f.index] + M)), A[d.wh] = i[d.wh]; var D = c.clipShape = {}; D[d.xy] = -i[d.xy], D[d.wh] = h.ecSize[d.wh], D[f.xy] = 0, D[f.wh] = i[f.wh] }(i, d, o, a, 0, f, s, c.valueLineWidth, c.boundingLength, c.repeatCutLength, n, c), c } function PM(t, e) { return t.toGlobalCoord(t.dataToCoord(t.scale.parse(e))) } function NM(t) { var e = t.symbolPatternSize , i = wg(t.symbolType, -e / 2, -e / 2, e, e, t.color); return i.attr({ culling: !0 }), "image" !== i.type && i.setStyle({ strokeNoScale: !0 }), i } function OM(t, e, o, i) { var n = t.__pictorialBundle , a = o.symbolSize , r = o.valueLineWidth , s = o.pathPosition , l = e.valueDim , u = o.repeatTimes || 0 , h = 0 , c = a[e.valueDim.index] + r + 2 * o.symbolMargin; for (UM(t, function(t) { t.__pictorialAnimationIndex = h, t.__pictorialRepeatTimes = u, h < u ? XM(t, null, p(h), o, i) : XM(t, null, { scale: [0, 0] }, o, i, function() { n.remove(t) }), FM(t, o), h++ }); h < u; h++) { var d = NM(o); d.__pictorialAnimationIndex = h, d.__pictorialRepeatTimes = u, n.add(d); var f = p(h); XM(d, { position: f.position, scale: [0, 0] }, { scale: f.scale, rotation: f.rotation }, o, i), d.on("mouseover", g).on("mouseout", m), FM(d, o) } function p(t) { var e = s.slice() , i = o.pxSign , n = t; return ("start" === o.symbolRepeatDirection ? 0 < i : i < 0) && (n = u - 1 - t), e[l.index] = c * (n - u / 2 + .5) + s[l.index], { position: e, scale: o.symbolScale.slice(), rotation: o.rotation } } function g() { UM(t, function(t) { t.trigger("emphasis") }) } function m() { UM(t, function(t) { t.trigger("normal") }) } } function EM(t, e, i, n) { var o = t.__pictorialBundle , a = t.__pictorialMainPath; a ? XM(a, null, { position: i.pathPosition.slice(), scale: i.symbolScale.slice(), rotation: i.rotation }, i, n) : (a = t.__pictorialMainPath = NM(i), o.add(a), XM(a, { position: i.pathPosition.slice(), scale: [0, 0], rotation: i.rotation }, { scale: i.symbolScale.slice() }, i, n), a.on("mouseover", function() { this.trigger("emphasis") }).on("mouseout", function() { this.trigger("normal") })), FM(a, i) } function RM(t, e, i) { var n = P({}, e.barRectShape) , o = t.__pictorialBarRect; o ? XM(o, null, { shape: n }, e, i) : (o = t.__pictorialBarRect = new rs({ z2: 2, shape: n, silent: !0, style: { stroke: "transparent", fill: "transparent", lineWidth: 0 } }), t.add(o)) } function zM(t, e, i, n) { if (i.symbolClip) { var o = t.__pictorialClipPath , a = P({}, i.clipShape) , r = e.valueDim , s = i.animationModel , l = i.dataIndex; if (o) cl(o, { shape: a }, s, l); else { a[r.wh] = 0, o = new rs({ shape: a }), t.__pictorialBundle.setClipPath(o), t.__pictorialClipPath = o; var u = {}; u[r.wh] = i.clipShape[r.wh], bl[n ? "updateProps" : "initProps"](o, { shape: u }, s, l) } } } function BM(t, e) { var i = t.getItemModel(e); return i.getAnimationDelayParams = VM, i.isAnimationEnabled = GM, i } function VM(t) { return { index: t.__pictorialAnimationIndex, count: t.__pictorialRepeatTimes } } function GM() { return this.parentModel.isAnimationEnabled() && !!this.getShallow("animation") } function FM(t, e) { t.off("emphasis").off("normal"); var i = e.symbolScale.slice(); e.hoverAnimation && t.on("emphasis", function() { this.animateTo({ scale: [1.1 * i[0], 1.1 * i[1]] }, 400, "elasticOut") }).on("normal", function() { this.animateTo({ scale: i.slice() }, 400, "elasticOut") }) } function WM(t, e, i, n) { var o = new Ci , a = new Ci; return o.add(a), (o.__pictorialBundle = a).attr("position", i.bundlePosition.slice()), i.symbolRepeat ? OM(o, e, i) : EM(o, 0, i), RM(o, i, n), zM(o, e, i, n), o.__pictorialShapeStr = ZM(t, i), o.__pictorialSymbolMeta = i, o } function HM(t, e, i, n) { var o = n.__pictorialBarRect; o && (o.style.text = null); var a = []; UM(n, function(t) { a.push(t) }), n.__pictorialMainPath && a.push(n.__pictorialMainPath), n.__pictorialClipPath && (i = null), E(a, function(t) { cl(t, { scale: [0, 0] }, i, e, function() { n.parent && n.parent.remove(n) }) }), t.setItemGraphicEl(e, null) } function ZM(t, e) { return [t.getItemVisual(e.dataIndex, "symbol") || "none", !!e.symbolRepeat, !!e.symbolClip].join(":") } function UM(e, i, n) { E(e.__pictorialBundle.children(), function(t) { t !== e.__pictorialBarRect && i.call(n, t) }) } function XM(t, e, i, n, o, a) { e && t.attr(e), n.symbolClip && !o ? i && t.attr(i) : i && bl[o ? "updateProps" : "initProps"](t, i, n.animationModel, n.dataIndex, a) } function YM(t, e, i) { var n = i.color , o = i.dataIndex , a = i.itemModel , r = a.getModel("itemStyle").getItemStyle(["color"]) , s = a.getModel("emphasis.itemStyle").getItemStyle() , l = a.getShallow("cursor"); UM(t, function(t) { t.setColor(n), t.setStyle(D({ fill: n, opacity: i.opacity }, r)), $s(t, s), l && (t.cursor = l), t.z2 = i.z2 }); var u = {} , h = (e.valueDim.posDesc[+(0 < i.boundingLength)], t.__pictorialBarRect); Av(h.style, u, a, n, e.seriesModel, o), $s(h, u) } function jM(t) { var e = Math.round(t); return Math.abs(t - e) < 1e-4 ? e : Math.ceil(t) } bf(T(zp, "pictorialBar")), Sf(Lm("pictorialBar", "roundRect")); function qM(t, e, i, n, o) { Gg.call(this, t, e, i), this.type = n || "value", this.position = o || "bottom", this.orient = null } function KM(t, e, i) { this.dimension = "single", this.dimensions = ["single"], this._axis = null, this._rect, this._init(t, e, i), this.model = t } function $M(t, e) { e = e || {}; var i = t.coordinateSystem , n = t.axis , o = {} , a = n.position , r = n.orient , s = i.getRect() , l = [s.x, s.x + s.width, s.y, s.y + s.height] , u = { horizontal: { top: l[2], bottom: l[3] }, vertical: { left: l[0], right: l[1] } }; o.position = ["vertical" === r ? u.vertical[a] : l[0], "horizontal" === r ? u.horizontal[a] : l[3]]; o.rotation = Math.PI / 2 * { horizontal: 0, vertical: 1 }[r]; o.labelDirection = o.tickDirection = o.nameDirection = { top: -1, bottom: 1, right: 1, left: -1 }[a], t.get("axisTick.inside") && (o.tickDirection = -o.tickDirection), W(e.labelInside, t.get("axisLabel.inside")) && (o.labelDirection = -o.labelDirection); var h = e.rotate; return null == h && (h = t.get("axisLabel.rotate")), o.labelRotation = "top" === a ? -h : h, o.z2 = 1, o } qM.prototype = { constructor: qM, model: null, isHorizontal: function() { var t = this.position; return "top" === t || "bottom" === t }, pointToData: function(t, e) { return this.coordinateSystem.pointToData(t, e)[0] }, toGlobalCoord: null, toLocalCoord: null }, w(qM, Gg), lh.register("single", { create: function(n, o) { var a = []; return n.eachComponent("singleAxis", function(t, e) { var i = new KM(t,n,o); i.name = "single_" + e, i.resize(t, o), t.coordinateSystem = i, a.push(i) }), n.eachSeries(function(t) { if ("singleAxis" === t.get("coordinateSystem")) { var e = n.queryComponents({ mainType: "singleAxis", index: t.get("singleAxisIndex"), id: t.get("singleAxisId") })[0]; t.coordinateSystem = e && e.coordinateSystem } }), a }, dimensions: (KM.prototype = { type: "singleAxis", axisPointerEnabled: !0, constructor: KM, _init: function(t, e, i) { var n = this.dimension , o = new qM(n,sg(t),[0, 0],t.get("type"),t.get("position")) , a = "category" === o.type; o.onBand = a && t.get("boundaryGap"), o.inverse = t.get("inverse"), o.orient = t.get("orient"), (t.axis = o).model = t, (o.coordinateSystem = this)._axis = o }, update: function(t, e) { t.eachSeries(function(t) { if (t.coordinateSystem === this) { var e = t.getData(); E(e.mapDimension(this.dimension, !0), function(t) { this._axis.scale.unionExtentFromData(e, t) }, this), rg(this._axis.scale, this._axis.model) } }, this) }, resize: function(t, e) { this._rect = bu({ left: t.get("left"), top: t.get("top"), right: t.get("right"), bottom: t.get("bottom"), width: t.get("width"), height: t.get("height") }, { width: e.getWidth(), height: e.getHeight() }), this._adjustAxis() }, getRect: function() { return this._rect }, _adjustAxis: function() { var t = this._rect , e = this._axis , i = e.isHorizontal() , n = i ? [0, t.width] : [0, t.height] , o = e.reverse ? 1 : 0; e.setExtent(n[o], n[1 - o]), this._updateAxisTransform(e, i ? t.x : t.y) }, _updateAxisTransform: function(t, e) { var i = t.getExtent() , n = i[0] + i[1] , o = t.isHorizontal(); t.toGlobalCoord = o ? function(t) { return t + e } : function(t) { return n - t + e } , t.toLocalCoord = o ? function(t) { return t - e } : function(t) { return n - t + e } }, getAxis: function() { return this._axis }, getBaseAxis: function() { return this._axis }, getAxes: function() { return [this._axis] }, getTooltipAxes: function() { return { baseAxes: [this.getAxis()] } }, containPoint: function(t) { var e = this.getRect() , i = this.getAxis(); return "horizontal" === i.orient ? i.contain(i.toLocalCoord(t[0])) && t[1] >= e.y && t[1] <= e.y + e.height : i.contain(i.toLocalCoord(t[1])) && t[0] >= e.y && t[0] <= e.y + e.height }, pointToData: function(t) { var e = this.getAxis(); return [e.coordToData(e.toLocalCoord(t["horizontal" === e.orient ? 0 : 1]))] }, dataToPoint: function(t) { var e = this.getAxis() , i = this.getRect() , n = [] , o = "horizontal" === e.orient ? 0 : 1; return t instanceof Array && (t = t[0]), n[o] = e.toGlobalCoord(e.dataToCoord(+t)), n[1 - o] = 0 == o ? i.y + i.height / 2 : i.x + i.width / 2, n } }).dimensions }); var JM = ["axisLine", "axisTickLabel", "axisName"] , QM = ["splitArea", "splitLine"] , tI = mv.extend({ type: "singleAxis", axisPointerClass: "SingleAxisPointer", render: function(e, t, i, n) { var o = this.group; o.removeAll(); var a = this._axisGroup; this._axisGroup = new Ci; var r = $M(e) , s = new Qm(e,r); E(JM, s.add, s), o.add(this._axisGroup), o.add(s.getGroup()), E(QM, function(t) { e.get(t + ".show") && this["_" + t](e) }, this), ml(a, this._axisGroup, e), tI.superCall(this, "render", e, t, i, n) }, remove: function() { bv(this) }, _splitLine: function(t) { var e = t.axis; if (!e.scale.isBlank()) { var i = t.getModel("splitLine") , n = i.getModel("lineStyle") , o = n.get("width") , a = n.get("color"); a = a instanceof Array ? a : [a]; for (var r = t.coordinateSystem.getRect(), s = e.isHorizontal(), l = [], u = 0, h = e.getTicksCoords({ tickModel: i }), c = [], d = [], f = 0; f < h.length; ++f) { var p = e.toGlobalCoord(h[f].coord); s ? (c[0] = p, c[1] = r.y, d[0] = p, d[1] = r.y + r.height) : (c[0] = r.x, c[1] = p, d[0] = r.x + r.width, d[1] = p); var g = u++ % a.length; l[g] = l[g] || [], l[g].push(new ls({ subPixelOptimize: !0, shape: { x1: c[0], y1: c[1], x2: d[0], y2: d[1] }, style: { lineWidth: o }, silent: !0 })) } for (f = 0; f < l.length; ++f) this.group.add(Es(l[f], { style: { stroke: a[f % a.length], lineDash: n.getLineDash(o), lineWidth: o }, silent: !0 })) } }, _splitArea: function(t) { wv(this, this._axisGroup, t, t) } }) , eI = ku.extend({ type: "singleAxis", layoutMode: "box", axis: null, coordinateSystem: null, getCoordSysModel: function() { return this } }); m(eI.prototype, dg), Gm("single", eI, function(t, e) { return e.type || (e.data ? "category" : "value") }, { left: "5%", top: "5%", right: "5%", bottom: "5%", type: "value", position: "bottom", orient: "horizontal", axisLine: { show: !0, lineStyle: { width: 1, type: "solid" } }, tooltip: { show: !0 }, axisTick: { show: !0, length: 6, lineStyle: { width: 1 } }, axisLabel: { show: !0, interval: "auto" }, splitLine: { show: !0, lineStyle: { type: "dashed", opacity: .2 } } }); function iI(t, e) { var i, n = [], o = t.seriesIndex; if (null == o || !(i = e.getSeriesByIndex(o))) return { point: [] }; var a = i.getData() , r = Yo(a, t); if (null == r || r < 0 || L(r)) return { point: [] }; var s = a.getItemGraphicEl(r) , l = i.coordinateSystem; if (i.getTooltipPosition) n = i.getTooltipPosition(r) || []; else if (l && l.dataToPoint) n = l.dataToPoint(a.getValues(O(l.dimensions, function(t) { return a.mapDimension(t) }), r, !0)) || []; else if (s) { var u = s.getBoundingRect().clone(); u.applyTransform(s.transform), n = [u.x + u.width / 2, u.y + u.height / 2] } return { point: n, el: s } } var nI = E , oI = T , aI = jo(); function rI(t, e, i, n, o) { var a = t.axis; if (!a.scale.isBlank() && a.containData(e)) if (t.involveSeries) { var r = function(l, t) { var u = t.axis , h = u.dim , c = l , d = [] , f = Number.MAX_VALUE , p = -1; return nI(t.seriesModels, function(e, t) { var i, n, o = e.getData().mapDimension(h, !0); if (e.getAxisTooltipData) { var a = e.getAxisTooltipData(o, l, u); n = a.dataIndices, i = a.nestestValue } else { if (!(n = e.getData().indicesOfNearest(o[0], l, "category" === u.type ? .5 : null)).length) return; i = e.getData().get(o[0], n[0]) } if (null != i && isFinite(i)) { var r = l - i , s = Math.abs(r); s <= f && ((s < f || 0 <= r && p < 0) && (f = s, p = r, c = i, d.length = 0), nI(n, function(t) { d.push({ seriesIndex: e.seriesIndex, dataIndexInside: t, dataIndex: e.getData().getRawIndex(t) }) })) } }), { payloadBatch: d, snapToValue: c } }(e, t) , s = r.payloadBatch , l = r.snapToValue; s[0] && null == o.seriesIndex && P(o, s[0]), !n && t.snap && a.containData(l) && null != l && (e = l), i.showPointer(t, e, s, o), i.showTooltip(t, r, l) } else i.showPointer(t, e) } function sI(t, e, i, n) { t[e.key] = { value: i, payloadBatch: n } } function lI(t, e, i, n) { var o = i.payloadBatch , a = e.axis , r = a.model , s = e.axisPointerModel; if (e.triggerTooltip && o.length) { var l = e.coordSys.model , u = gv(l) , h = t.map[u]; h || (h = t.map[u] = { coordSysId: l.id, coordSysIndex: l.componentIndex, coordSysType: l.type, coordSysMainType: l.mainType, dataByAxis: [] }, t.list.push(h)), h.dataByAxis.push({ axisDim: a.dim, axisIndex: r.componentIndex, axisType: r.type, axisId: r.id, value: n, valueLabelOpt: { precision: s.get("label.precision"), formatter: s.get("label.formatter") }, seriesDataIndices: o.slice() }) } } function uI(t) { var e = t.axis.model , i = {} , n = i.axisDim = t.axis.dim; return i.axisIndex = i[n + "AxisIndex"] = e.componentIndex, i.axisName = i[n + "AxisName"] = e.name, i.axisId = i[n + "AxisId"] = e.id, i } function hI(t) { return !t || null == t[0] || isNaN(t[0]) || null == t[1] || isNaN(t[1]) } Tf({ type: "axisPointer", coordSysAxesInfo: null, defaultOption: { show: "auto", triggerOn: null, zlevel: 0, z: 50, type: "line", snap: !1, triggerTooltip: !0, value: null, status: null, link: [], animation: null, animationDurationUpdate: 200, lineStyle: { color: "#aaa", width: 1, type: "solid" }, shadowStyle: { color: "rgba(150,150,150,0.3)" }, label: { show: !0, formatter: null, precision: "auto", margin: 3, color: "#fff", padding: [5, 7, 5, 7], backgroundColor: "auto", borderColor: null, borderWidth: 0, shadowBlur: 3, shadowColor: "#aaa" }, handle: { show: !1, icon: "M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4h1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7v-1.2h6.6z M13.3,22H6.7v-1.2h6.6z M13.3,19.6H6.7v-1.2h6.6z", size: 45, margin: 50, color: "#333", shadowBlur: 3, shadowColor: "#aaa", shadowOffsetX: 0, shadowOffsetY: 2, throttle: 40 } } }); var cI = jo() , dI = E; function fI(t, e, i) { if (!v.node) { var n = e.getZr(); cI(n).records || (cI(n).records = {}), function(o, a) { if (cI(o).initialized) return; function t(t, n) { o.on(t, function(e) { var i = function(i) { var n = { showTip: [], hideTip: [] } , o = function(t) { var e = n[t.type]; e ? e.push(t) : (t.dispatchAction = o, i.dispatchAction(t)) }; return { dispatchAction: o, pendings: n } }(a); dI(cI(o).records, function(t) { t && n(t, e, i.dispatchAction) }), function(t, e) { var i, n = t.showTip.length, o = t.hideTip.length; n ? i = t.showTip[n - 1] : o && (i = t.hideTip[o - 1]); i && (i.dispatchAction = null, e.dispatchAction(i)) }(i.pendings, a) }) } cI(o).initialized = !0, t("click", T(gI, "click")), t("mousemove", T(gI, "mousemove")), t("globalout", pI) }(n, e), (cI(n).records[t] || (cI(n).records[t] = {})).handler = i } } function pI(t, e, i) { t.handler("leave", null, i) } function gI(t, e, i, n) { e.handler(t, i, n) } function mI(t, e) { if (!v.node) { var i = e.getZr(); (cI(i).records || {})[t] && (cI(i).records[t] = null) } } var vI = Af({ type: "axisPointer", render: function(t, e, i) { var n = e.getComponent("tooltip") , o = t.get("triggerOn") || n && n.get("triggerOn") || "mousemove|click"; fI("axisPointer", i, function(t, e, i) { "none" !== o && ("leave" === t || 0 <= o.indexOf(t)) && i({ type: "updateAxisPointer", currTrigger: t, x: e && e.offsetX, y: e && e.offsetY }) }) }, remove: function(t, e) { mI(e.getZr(), "axisPointer"), vI.superApply(this._model, "remove", arguments) }, dispose: function(t, e) { mI("axisPointer", e), vI.superApply(this._model, "dispose", arguments) } }) , yI = jo() , xI = k , _I = A; function wI() {} function bI(t, e, i, n) { !function i(n, t) { { if (z(n) && z(t)) { var o = !0; return E(t, function(t, e) { o = o && i(n[e], t) }), !!o } return n === t } }(yI(i).lastProp, n) && (yI(i).lastProp = n, e ? cl(i, n, t) : (i.stopAnimation(), i.attr(n))) } function SI(t, e) { t[e.get("label.show") ? "show" : "hide"]() } function MI(t) { return { position: t.position.slice(), rotation: t.rotation || 0 } } function II(t, e, i) { var n = e.get("z") , o = e.get("zlevel"); t && t.traverse(function(t) { "group" !== t.type && (null != n && (t.z = n), null != o && (t.zlevel = o), t.silent = i) }) } function TI(t) { var e, i = t.get("type"), n = t.getModel(i + "Style"); return "line" === i ? (e = n.getLineStyle()).fill = null : "shadow" === i && ((e = n.getAreaStyle()).stroke = null), e } function AI(t, e, i, n, o) { var a = DI(i.get("value"), e.axis, e.ecModel, i.get("seriesDataIndices"), { precision: i.get("label.precision"), formatter: i.get("label.formatter") }) , r = i.getModel("label") , s = iu(r.get("padding") || 0) , l = r.getFont() , u = gn(a, l) , h = o.position , c = u.width + s[1] + s[3] , d = u.height + s[0] + s[2] , f = o.align; "right" === f && (h[0] -= c), "center" === f && (h[0] -= c / 2); var p = o.verticalAlign; "bottom" === p && (h[1] -= d), "middle" === p && (h[1] -= d / 2), function(t, e, i, n) { var o = n.getWidth() , a = n.getHeight(); t[0] = Math.min(t[0] + e, o) - e, t[1] = Math.min(t[1] + i, a) - i, t[0] = Math.max(t[0], 0), t[1] = Math.max(t[1], 0) }(h, c, d, n); var g = r.get("backgroundColor"); g && "auto" !== g || (g = e.get("axisLine.lineStyle.color")), t.label = { shape: { x: 0, y: 0, width: c, height: d, r: r.get("borderRadius") }, position: h.slice(), style: { text: a, textFont: l, textFill: r.getTextColor(), textPosition: "inside", textPadding: s, fill: g, stroke: r.get("borderColor") || "transparent", lineWidth: r.get("borderWidth") || 0, shadowBlur: r.get("shadowBlur"), shadowColor: r.get("shadowColor"), shadowOffsetX: r.get("shadowOffsetX"), shadowOffsetY: r.get("shadowOffsetY") }, z2: 10 } } function DI(t, e, o, i, n) { t = e.scale.parse(t); var a = e.scale.getLabel(t, { precision: n.precision }) , r = n.formatter; if (r) { var s = { value: ug(e, t), axisDimension: e.dim, axisIndex: e.index, seriesData: [] }; E(i, function(t) { var e = o.getSeriesByIndex(t.seriesIndex) , i = t.dataIndexInside , n = e && e.getDataParams(i); n && s.seriesData.push(n) }), R(r) ? a = r.replace("{value}", a) : C(r) && (a = r(s)) } return a } function CI(t, e, i) { var n = ae(); return he(n, n, i.rotation), ue(n, n, i.position), pl([t.dataToCoord(e), (i.labelOffset || 0) + (i.labelDirection || 1) * (i.labelMargin || 0)], n) } function LI(t, e, i, n, o, a) { var r = Qm.innerTextLayout(i.rotation, 0, i.labelDirection); i.labelMargin = o.get("label.margin"), AI(e, n, o, a, { position: CI(n.axis, t, i), align: r.textAlign, verticalAlign: r.textVerticalAlign }) } function kI(t, e, i) { return { x1: t[i = i || 0], y1: t[1 - i], x2: e[i], y2: e[1 - i] } } function PI(t, e, i) { return { x: t[i = i || 0], y: t[1 - i], width: e[i], height: e[1 - i] } } function NI(t, e, i, n, o, a) { return { cx: t, cy: e, r0: i, r: n, startAngle: o, endAngle: a, clockwise: !0 } } oa((wI.prototype = { _group: null, _lastGraphicKey: null, _handle: null, _dragging: !1, _lastValue: null, _lastStatus: null, _payloadInfo: null, animationThreshold: 15, render: function(t, e, i, n) { var o = e.get("value") , a = e.get("status"); if (this._axisModel = t, this._axisPointerModel = e, this._api = i, n || this._lastValue !== o || this._lastStatus !== a) { this._lastValue = o, this._lastStatus = a; var r = this._group , s = this._handle; if (!a || "hide" === a) return r && r.hide(), void (s && s.hide()); r && r.show(), s && s.show(); var l = {}; this.makeElOption(l, o, t, e, i); var u = l.graphicKey; u !== this._lastGraphicKey && this.clear(i), this._lastGraphicKey = u; var h = this._moveAnimation = this.determineAnimation(t, e); if (r) { var c = T(bI, e, h); this.updatePointerEl(r, l, c, e), this.updateLabelEl(r, l, c, e) } else r = this._group = new Ci, this.createPointerEl(r, l, t, e), this.createLabelEl(r, l, t, e), i.getZr().add(r); II(r, e, !0), this._renderHandle(o) } }, remove: function(t) { this.clear(t) }, dispose: function(t) { this.clear(t) }, determineAnimation: function(t, e) { var i = e.get("animation") , n = t.axis , o = "category" === n.type , a = e.get("snap"); if (!a && !o) return !1; if ("auto" !== i && null != i) return !0 === i; var r = this.animationThreshold; if (o && n.getBandWidth() > r) return !0; if (a) { var s = fv(t).seriesDataCount , l = n.getExtent(); return Math.abs(l[0] - l[1]) / s > r } return !1 }, makeElOption: function(t, e, i, n, o) {}, createPointerEl: function(t, e, i, n) { var o = e.pointer; if (o) { var a = yI(t).pointerEl = new bl[o.type](xI(e.pointer)); t.add(a) } }, createLabelEl: function(t, e, i, n) { if (e.label) { var o = yI(t).labelEl = new rs(xI(e.label)); t.add(o), SI(o, n) } }, updatePointerEl: function(t, e, i) { var n = yI(t).pointerEl; n && e.pointer && (n.setStyle(e.pointer.style), i(n, { shape: e.pointer.shape })) }, updateLabelEl: function(t, e, i, n) { var o = yI(t).labelEl; o && (o.setStyle(e.label.style), i(o, { shape: e.label.shape, position: e.label.position }), SI(o, n)) }, _renderHandle: function(t) { if (!this._dragging && this.updateHandleTransform) { var e, i = this._axisPointerModel, n = this._api.getZr(), o = this._handle, a = i.getModel("handle"), r = i.get("status"); if (!a.get("show") || !r || "hide" === r) return o && n.remove(o), void (this._handle = null); this._handle || (e = !0, o = this._handle = yl(a.get("icon"), { cursor: "move", draggable: !0, onmousemove: function(t) { Xt(t.event) }, onmousedown: _I(this._onHandleDragMove, this, 0, 0), drift: _I(this._onHandleDragMove, this), ondragend: _I(this._onHandleDragEnd, this) }), n.add(o)), II(o, i, !1); o.setStyle(a.getItemStyle(null, ["color", "borderColor", "borderWidth", "opacity", "shadowColor", "shadowBlur", "shadowOffsetX", "shadowOffsetY"])); var s = a.get("size"); L(s) || (s = [s, s]), o.attr("scale", [s[0] / 2, s[1] / 2]), kc(this, "_doDispatchAxisPointer", a.get("throttle") || 0, "fixRate"), this._moveHandleToValue(t, e) } }, _moveHandleToValue: function(t, e) { bI(this._axisPointerModel, !e && this._moveAnimation, this._handle, MI(this.getHandleTransform(t, this._axisModel, this._axisPointerModel))) }, _onHandleDragMove: function(t, e) { var i = this._handle; if (i) { this._dragging = !0; var n = this.updateHandleTransform(MI(i), [t, e], this._axisModel, this._axisPointerModel); this._payloadInfo = n, i.stopAnimation(), i.attr(MI(n)), yI(i).lastProp = null, this._doDispatchAxisPointer() } }, _doDispatchAxisPointer: function() { if (this._handle) { var t = this._payloadInfo , e = this._axisModel; this._api.dispatchAction({ type: "updateAxisPointer", x: t.cursorPoint[0], y: t.cursorPoint[1], tooltipOption: t.tooltipOption, axesInfo: [{ axisDim: e.axis.dim, axisIndex: e.componentIndex }] }) } }, _onHandleDragEnd: function(t) { if (this._dragging = !1, this._handle) { var e = this._axisPointerModel.get("value"); this._moveHandleToValue(e), this._api.dispatchAction({ type: "hideTip" }) } }, getHandleTransform: null, updateHandleTransform: null, clear: function(t) { this._lastValue = null, this._lastStatus = null; var e = t.getZr() , i = this._group , n = this._handle; e && i && (this._lastGraphicKey = null, i && e.remove(i), n && e.remove(n), this._group = null, this._handle = null, this._payloadInfo = null) }, doClear: function() {}, buildLabel: function(t, e, i) { return { x: t[i = i || 0], y: t[1 - i], width: e[i], height: e[1 - i] } } }).constructor = wI); var OI = wI.extend({ makeElOption: function(t, e, i, n, o) { var a = i.axis , r = a.grid , s = n.get("type") , l = EI(r, a).getOtherAxis(a).getGlobalExtent() , u = a.toGlobalCoord(a.dataToCoord(e, !0)); if (s && "none" !== s) { var h = TI(n) , c = RI[s](a, u, l); c.style = h, t.graphicKey = c.type, t.pointer = c } LI(e, t, _v(r.model, i), i, n, o) }, getHandleTransform: function(t, e, i) { var n = _v(e.axis.grid.model, e, { labelInside: !1 }); return n.labelMargin = i.get("handle.margin"), { position: CI(e.axis, t, n), rotation: n.rotation + (n.labelDirection < 0 ? Math.PI : 0) } }, updateHandleTransform: function(t, e, i, n) { var o = i.axis , a = o.grid , r = o.getGlobalExtent(!0) , s = EI(a, o).getOtherAxis(o).getGlobalExtent() , l = "x" === o.dim ? 0 : 1 , u = t.position; u[l] += e[l], u[l] = Math.min(r[1], u[l]), u[l] = Math.max(r[0], u[l]); var h = (s[1] + s[0]) / 2 , c = [h, h]; c[l] = u[l]; return { position: u, rotation: t.rotation, cursorPoint: c, tooltipOption: [{ verticalAlign: "middle" }, { align: "center" }][l] } } }); function EI(t, e) { var i = {}; return i[e.dim + "AxisIndex"] = e.index, t.getCartesian(i) } var RI = { line: function(t, e, i) { return { type: "Line", subPixelOptimize: !0, shape: kI([e, i[0]], [e, i[1]], zI(t)) } }, shadow: function(t, e, i) { var n = Math.max(1, t.getBandWidth()) , o = i[1] - i[0]; return { type: "Rect", shape: PI([e - n / 2, i[0]], [n, o], zI(t)) } } }; function zI(t) { return "x" === t.dim ? 0 : 1 } mv.registerAxisPointerClass("CartesianAxisPointer", OI), yf(function(t) { if (t) { t.axisPointer && 0 !== t.axisPointer.length || (t.axisPointer = {}); var e = t.axisPointer.link; e && !L(e) && (t.axisPointer.link = [e]) } }), xf(Ld.PROCESSOR.STATISTIC, function(t, e) { t.getComponent("axisPointer").coordSysAxesInfo = cv(t, e) }), _f({ type: "updateAxisPointer", event: "updateAxisPointer", update: ":updateAxisPointer" }, function(t, e, i) { var n = t.currTrigger , r = [t.x, t.y] , o = t , a = t.dispatchAction || A(i.dispatchAction, i) , s = e.getComponent("axisPointer").coordSysAxesInfo; if (s) { hI(r) && (r = iI({ seriesIndex: o.seriesIndex, dataIndex: o.dataIndex }, e).point); var l = hI(r) , u = o.axesInfo , h = s.axesInfo , c = "leave" === n || hI(r) , d = {} , f = {} , p = { list: [], map: {} } , g = { showPointer: oI(sI, f), showTooltip: oI(lI, p) }; nI(s.coordSysMap, function(t, e) { var a = l || t.containPoint(r); nI(s.coordSysAxesInfo[e], function(t, e) { var i = t.axis , n = function(t, e) { for (var i = 0; i < (t || []).length; i++) { var n = t[i]; if (e.axis.dim === n.axisDim && e.axis.model.componentIndex === n.axisIndex) return n } }(u, t); if (!c && a && (!u || n)) { var o = n && n.value; null != o || l || (o = i.pointToData(r)), null != o && rI(t, o, g, !1, d) } }) }); var m = {}; return nI(h, function(o, t) { var a = o.linkGroup; a && !f[t] && nI(a.axesInfo, function(t, e) { var i = f[e]; if (t !== o && i) { var n = i.value; a.mapper && (n = o.axis.scale.parse(a.mapper(n, uI(t), uI(o)))), m[o.key] = n } }) }), nI(m, function(t, e) { rI(h[e], t, g, !0, d) }), function(o, t, e) { var a = e.axesInfo = []; nI(t, function(t, e) { var i = t.axisPointerModel.option , n = o[e]; n ? (t.useHandle || (i.status = "show"), i.value = n.value, i.seriesDataIndices = (n.payloadBatch || []).slice()) : t.useHandle || (i.status = "hide"), "show" === i.status && a.push({ axisDim: t.axis.dim, axisIndex: t.axis.model.componentIndex, value: i.value }) }) }(f, h, d), function(t, e, i, n) { if (hI(e) || !t.list.length) return n({ type: "hideTip" }); var o = ((t.list[0].dataByAxis[0] || {}).seriesDataIndices || [])[0] || {}; n({ type: "showTip", escapeConnect: !0, x: e[0], y: e[1], tooltipOption: i.tooltipOption, position: i.position, dataIndexInside: o.dataIndexInside, dataIndex: o.dataIndex, seriesIndex: o.seriesIndex, dataByCoordSys: t.list }) }(p, r, t, a), function(t, e, i) { var n = i.getZr() , o = "axisPointerLastHighlights" , a = aI(n)[o] || {} , r = aI(n)[o] = {}; nI(t, function(t, e) { var i = t.axisPointerModel.option; "show" === i.status && nI(i.seriesDataIndices, function(t) { var e = t.seriesIndex + " | " + t.dataIndex; r[e] = t }) }); var s = [] , l = []; E(a, function(t, e) { r[e] || l.push(t) }), E(r, function(t, e) { a[e] || s.push(t) }), l.length && i.dispatchAction({ type: "downplay", escapeConnect: !0, batch: l }), s.length && i.dispatchAction({ type: "highlight", escapeConnect: !0, batch: s }) }(h, 0, i), d } }); var BI = ["x", "y"] , VI = ["width", "height"] , GI = wI.extend({ makeElOption: function(t, e, i, n, o) { var a = i.axis , r = a.coordinateSystem , s = HI(r, 1 - WI(a)) , l = r.dataToPoint(e)[0] , u = n.get("type"); if (u && "none" !== u) { var h = TI(n) , c = FI[u](a, l, s); c.style = h, t.graphicKey = c.type, t.pointer = c } LI(e, t, $M(i), i, n, o) }, getHandleTransform: function(t, e, i) { var n = $M(e, { labelInside: !1 }); return n.labelMargin = i.get("handle.margin"), { position: CI(e.axis, t, n), rotation: n.rotation + (n.labelDirection < 0 ? Math.PI : 0) } }, updateHandleTransform: function(t, e, i, n) { var o = i.axis , a = o.coordinateSystem , r = WI(o) , s = HI(a, r) , l = t.position; l[r] += e[r], l[r] = Math.min(s[1], l[r]), l[r] = Math.max(s[0], l[r]); var u = HI(a, 1 - r) , h = (u[1] + u[0]) / 2 , c = [h, h]; return c[r] = l[r], { position: l, rotation: t.rotation, cursorPoint: c, tooltipOption: { verticalAlign: "middle" } } } }) , FI = { line: function(t, e, i) { return { type: "Line", subPixelOptimize: !0, shape: kI([e, i[0]], [e, i[1]], WI(t)) } }, shadow: function(t, e, i) { var n = t.getBandWidth() , o = i[1] - i[0]; return { type: "Rect", shape: PI([e - n / 2, i[0]], [n, o], WI(t)) } } }; function WI(t) { return t.isHorizontal() ? 0 : 1 } function HI(t, e) { var i = t.getRect(); return [i[BI[e]], i[BI[e]] + i[VI[e]]] } mv.registerAxisPointerClass("SingleAxisPointer", GI), Af({ type: "single" }); var ZI = sc.extend({ type: "series.themeRiver", dependencies: ["singleAxis"], nameMap: null, init: function(t) { ZI.superApply(this, "init", arguments), this.legendVisualProvider = new qv(A(this.getData, this),A(this.getRawData, this)) }, fixData: function(t) { var e = t.length , i = ta(t, function(t) { return t[2] }) , n = []; i.buckets.each(function(t, e) { n.push({ name: e, dataList: t }) }); for (var o = n.length, a = -1, r = -1, s = 0; s < o; ++s) { var l = n[s].dataList.length; a < l && (a = l, r = s) } for (var u = 0; u < o; ++u) if (u !== r) for (var h = n[u].name, c = 0; c < a; ++c) { for (var d = n[r].dataList[c][0], f = n[u].dataList.length, p = -1, g = 0; g < f; ++g) { if (n[u].dataList[g][0] === d) { p = g; break } } -1 === p && (t[e] = [], t[e][0] = d, t[e][1] = 0, t[e][2] = h, e++) } return t }, getInitialData: function(t, e) { for (var i = e.queryComponents({ mainType: "singleAxis", index: this.get("singleAxisIndex"), id: this.get("singleAxisId") })[0].get("type"), n = M(t.data, function(t) { return void 0 !== t[2] }), o = this.fixData(n || []), a = [], r = this.nameMap = Q(), s = 0, l = 0; l < o.length; ++l) a.push(o[l][2]), r.get(o[l][2]) || (r.set(o[l][2], s), s++); var u = lp(o, { coordDimensions: ["single"], dimensionsDefine: [{ name: "time", type: Ef(i) }, { name: "value", type: "float" }, { name: "name", type: "ordinal" }], encodeDefine: { single: 0, value: 1, itemName: 2 } }) , h = new Yf(u,this); return h.initData(o), h }, getLayerSeries: function() { for (var i = this.getData(), t = i.count(), e = [], n = 0; n < t; ++n) e[n] = n; var o = i.mapDimension("single") , a = ta(e, function(t) { return i.get("name", t) }) , r = []; return a.buckets.each(function(t, e) { t.sort(function(t, e) { return i.get(o, t) - i.get(o, e) }), r.push({ name: e, indices: t }) }), r }, getAxisTooltipData: function(t, e, i) { L(t) || (t = t ? [t] : []); for (var n, o = this.getData(), a = this.getLayerSeries(), r = [], s = a.length, l = 0; l < s; ++l) { for (var u = Number.MAX_VALUE, h = -1, c = a[l].indices.length, d = 0; d < c; ++d) { var f = o.get(t[0], a[l].indices[d]) , p = Math.abs(f - e); p <= u && (n = f, u = p, h = a[l].indices[d]) } r.push(h) } return { dataIndices: r, nestestValue: n } }, formatTooltip: function(t) { var e = this.getData() , i = e.getName(t) , n = e.get(e.mapDimension("value"), t); return !isNaN(n) && null != n || (n = "-"), au(i + " : " + n) }, defaultOption: { zlevel: 0, z: 2, coordinateSystem: "singleAxis", boundaryGap: ["10%", "10%"], singleAxisIndex: 0, animationEasing: "linear", label: { margin: 4, show: !0, position: "left", color: "#000", fontSize: 11 }, emphasis: { label: { show: !0 } } } }); Cf({ type: "themeRiver", init: function() { this._layers = [] }, render: function(b, t, e) { var S = b.getData() , M = this.group , I = b.getLayerSeries() , i = S.getLayout("layoutInfo") , n = i.rect , o = i.boundaryGap; function a(t) { return t.name } M.attr("position", [0, n.y + o[0]]); var r = new kf(this._layersSeries || [],I,a,a) , T = {}; function s(t, e, i) { var n = this._layers; if ("remove" !== t) { for (var o, a, r, s = [], l = [], u = I[e].indices, h = 0; h < u.length; h++) { var c = S.getItemLayout(u[h]) , d = c.x , f = c.y0 , p = c.y; s.push([d, f]), l.push([d, f + p]), o = S.getItemVisual(u[h], "color") } var g = S.getItemLayout(u[0]) , m = S.getItemModel(u[h - 1]) , v = m.getModel("label") , y = v.get("margin"); if ("add" === t) { var x = T[e] = new Ci; a = new _m({ shape: { points: s, stackedOnPoints: l, smooth: .4, stackedOnSmooth: .4, smoothConstraint: !1 }, z2: 0 }), r = new Ur({ style: { x: g.x - y, y: g.y0 + g.y / 2 } }), x.add(a), x.add(r), M.add(x), a.setClipPath(function(t, e, i) { var n = new rs({ shape: { x: t.x - 10, y: t.y - 10, width: 0, height: t.height + 20 } }); return dl(n, { shape: { width: t.width + 20, height: t.height + 20 } }, e, i), n }(a.getBoundingRect(), b, function() { a.removeClipPath() })) } else { x = n[i]; a = x.childAt(0), r = x.childAt(1), M.add(x), T[e] = x, cl(a, { shape: { points: s, stackedOnPoints: l } }, b), cl(r, { style: { x: g.x - y, y: g.y0 + g.y / 2 } }, b) } var _ = m.getModel("emphasis.itemStyle") , w = m.getModel("itemStyle"); nl(r.style, v, { text: v.get("show") ? b.getFormattedLabel(u[h - 1], "normal") || S.getName(u[h - 1]) : null, textVerticalAlign: "middle" }), a.setStyle(P({ fill: o }, w.getItemStyle(["color"]))), $s(a, _.getItemStyle()) } else M.remove(n[e]) } r.add(A(s, this, "add")).update(A(s, this, "update")).remove(A(s, this, "remove")).execute(), this._layersSeries = I, this._layers = T }, dispose: function() {} }); function UI(i, t, e) { if (i.count()) for (var n, o = t.coordinateSystem, a = t.getLayerSeries(), r = i.mapDimension("single"), s = i.mapDimension("value"), l = O(a, function(t) { return O(t.indices, function(t) { var e = o.dataToPoint(i.get(r, t)); return e[1] = i.get(s, t), e }) }), u = function(t) { for (var e = t.length, i = t[0].length, n = [], o = [], a = 0, r = {}, s = 0; s < i; ++s) { for (var l = 0, u = 0; l < e; ++l) u += t[l][s][1]; a < u && (a = u), n.push(u) } for (var h = 0; h < i; ++h) o[h] = (a - n[h]) / 2; for (var c = a = 0; c < i; ++c) { var d = n[c] + o[c]; a < d && (a = d) } return r.y0 = o, r.max = a, r }(l), h = u.y0, c = e / u.max, d = a.length, f = a[0].indices.length, p = 0; p < f; ++p) { n = h[p] * c, i.setItemLayout(a[0].indices[p], { layerIndex: 0, x: l[0][p][0], y0: n, y: l[0][p][1] * c }); for (var g = 1; g < d; ++g) n += l[g - 1][p][1] * c, i.setItemLayout(a[g].indices[p], { layerIndex: g, x: l[g][p][0], y0: n, y: l[g][p][1] * c }) } } bf(function(t, e) { t.eachSeriesByType("themeRiver", function(t) { var e = t.getData() , i = t.coordinateSystem , n = {} , o = i.getRect(); n.rect = o; var a = t.get("boundaryGap") , r = i.getAxis(); (n.boundaryGap = a, "horizontal" === r.orient) ? (a[0] = Rl(a[0], o.height), a[1] = Rl(a[1], o.height), UI(e, t, o.height - a[0] - a[1])) : (a[0] = Rl(a[0], o.width), a[1] = Rl(a[1], o.width), UI(e, t, o.width - a[0] - a[1])); e.setLayout("layoutInfo", n) }) }), Sf(function(t) { t.eachSeriesByType("themeRiver", function(o) { var a = o.getData() , r = o.getRawData() , s = o.get("color") , l = Q(); a.each(function(t) { l.set(a.getRawIndex(t), t) }), r.each(function(t) { var e = r.getName(t) , i = s[(o.nameMap.get(e) - 1) % s.length]; r.setItemVisual(t, "color", i); var n = l.get(t); null != n && a.setItemVisual(n, "color", i) }) }) }), xf(uy("themeRiver")), sc.extend({ type: "series.sunburst", _viewRoot: null, getInitialData: function(t, e) { var i = { name: t.name, children: t.data }; !function i(t) { var n = 0; E(t.children, function(t) { i(t); var e = t.value; L(e) && (e = e[0]), n += e }); var e = t.value; L(e) && (e = e[0]); null != e && !isNaN(e) || (e = n); e < 0 && (e = 0); L(t.value) ? t.value[0] = e : t.value = e }(i); var n = t.levels || [] , o = {}; return o.levels = n, Ax.createTree(i, this, o).data }, optionUpdated: function() { this.resetViewRoot() }, getDataParams: function(t) { var e = sc.prototype.getDataParams.apply(this, arguments) , i = this.getData().tree.getNodeByDataIndex(t); return e.treePathInfo = Yx(i, this), e }, defaultOption: { zlevel: 0, z: 2, center: ["50%", "50%"], radius: [0, "75%"], clockwise: !0, startAngle: 90, minAngle: 0, percentPrecision: 2, stillShowZeroSum: !0, highlightPolicy: "descendant", nodeClick: "rootToNode", renderLabelForZeroData: !1, label: { rotate: "radial", show: !0, opacity: 1, align: "center", position: "inside", distance: 5, silent: !0 }, itemStyle: { borderWidth: 1, borderColor: "white", borderType: "solid", shadowBlur: 0, shadowColor: "rgba(0, 0, 0, 0.2)", shadowOffsetX: 0, shadowOffsetY: 0, opacity: 1 }, highlight: { itemStyle: { opacity: 1 } }, downplay: { itemStyle: { opacity: .5 }, label: { opacity: .6 } }, animationType: "expansion", animationDuration: 1e3, animationDurationUpdate: 500, animationEasing: "cubicOut", data: [], levels: [], sort: "desc" }, getViewRoot: function() { return this._viewRoot }, resetViewRoot: function(t) { t ? this._viewRoot = t : t = this._viewRoot; var e = this.getRawData().tree.root; t && (t === e || e.contains(t)) || (this._viewRoot = e) } }); var XI = "none" , YI = "ancestor" , jI = "self" , qI = 2 , KI = 4; function $I(t, e, i) { Ci.call(this); var n = new qr({ z2: qI }); n.seriesIndex = e.seriesIndex; var o = new Ur({ z2: KI, silent: t.getModel("label").get("silent") }); function a() { o.ignore = o.hoverIgnore } function r() { o.ignore = o.normalIgnore } this.add(n), this.add(o), this.updateData(!0, t, "normal", e, i), this.on("emphasis", a).on("normal", r).on("mouseover", a).on("mouseout", r) } var JI = $I.prototype; JI.updateData = function(t, e, i, n, o) { (this.node = e).piece = this, n = n || this._seriesModel, o = o || this._ecModel; var a = this.childAt(0); a.dataIndex = e.dataIndex; var r = e.getModel() , s = e.getLayout() , l = P({}, s); l.label = null; var u = function(t, e, i) { var n = t.getVisual("color") , o = t.getVisual("visualMeta"); o && 0 !== o.length || (n = null); var a = t.getModel("itemStyle").get("color"); { if (a) return a; if (n) return n; if (0 === t.depth) return i.option.color[0]; var r = i.option.color.length; a = i.option.color[function(t) { var e = t; for (; 1 < e.depth; ) e = e.parentNode; return _(t.getAncestors()[0].children, e) }(t) % r] } return a }(e, 0, o); !function(t, e, i) { e.getData().setItemVisual(t.dataIndex, "color", i) }(e, n, u); var h, c = r.getModel("itemStyle").getItemStyle(); "normal" === i ? h = c : h = m(r.getModel(i + ".itemStyle").getItemStyle(), c); h = D({ lineJoin: "bevel", fill: h.fill || u }, h), t ? (a.setShape(l), a.shape.r = s.r0, cl(a, { shape: { r: s.r } }, n, e.dataIndex), a.useStyle(h)) : "object" == typeof h.fill && h.fill.type || "object" == typeof a.style.fill && a.style.fill.type ? (cl(a, { shape: l }, n), a.useStyle(h)) : cl(a, { shape: l, style: h }, n), this._updateLabel(n, u, i); var d = r.getShallow("cursor"); if (d && a.attr("cursor", d), t) { var f = n.getShallow("highlightPolicy"); this._initEvents(a, e, n, f) } this._seriesModel = n || this._seriesModel, this._ecModel = o || this._ecModel, $s(this) } , JI.onEmphasis = function(e) { var i = this; this.node.hostTree.root.eachNode(function(t) { t.piece && (i.node === t ? t.piece.updateData(!1, t, "emphasis") : !function(t, e, i) { return i !== XI && (i === jI ? t === e : i === YI ? t === e || t.isAncestorOf(e) : t === e || t.isDescendantOf(e)) }(t, i.node, e) ? e !== XI && t.piece.childAt(0).trigger("downplay") : t.piece.childAt(0).trigger("highlight")) }) } , JI.onNormal = function() { this.node.hostTree.root.eachNode(function(t) { t.piece && t.piece.updateData(!1, t, "normal") }) } , JI.onHighlight = function() { this.updateData(!1, this.node, "highlight") } , JI.onDownplay = function() { this.updateData(!1, this.node, "downplay") } , JI._updateLabel = function(t, e, i) { var n = this.node.getModel() , o = n.getModel("label") , a = "normal" === i || "emphasis" === i ? o : n.getModel(i + ".label") , r = n.getModel("emphasis.label") , s = W(t.getFormattedLabel(this.node.dataIndex, i, null, null, "label"), this.node.name); !1 === S("show") && (s = ""); var l = this.node.getLayout() , u = a.get("minAngle"); null == u && (u = o.get("minAngle")), u = u / 180 * Math.PI; var h = l.endAngle - l.startAngle; null != u && Math.abs(h) < u && (s = ""); var c = this.childAt(1); el(c.style, c.hoverStyle || {}, o, r, { defaultText: a.getShallow("show") ? s : null, autoColor: e, useInsideStyle: !0 }); var d, f = (l.startAngle + l.endAngle) / 2, p = Math.cos(f), g = Math.sin(f), m = S("position"), v = S("distance") || 0, y = S("align"); "outside" === m ? (d = l.r + v, y = f > Math.PI / 2 ? "right" : "left") : y && "center" !== y ? "left" === y ? (d = l.r0 + v, f > Math.PI / 2 && (y = "right")) : "right" === y && (d = l.r - v, f > Math.PI / 2 && (y = "left")) : (d = (l.r + l.r0) / 2, y = "center"), c.attr("style", { text: s, textAlign: y, textVerticalAlign: S("verticalAlign") || "middle", opacity: S("opacity") }); var x = d * p + l.cx , _ = d * g + l.cy; c.attr("position", [x, _]); var w = S("rotate") , b = 0; function S(t) { var e = a.get(t); return null == e ? o.get(t) : e } "radial" === w ? (b = -f) < -Math.PI / 2 && (b += Math.PI) : "tangential" === w ? (b = Math.PI / 2 - f) > Math.PI / 2 ? b -= Math.PI : b < -Math.PI / 2 && (b += Math.PI) : "number" == typeof w && (b = w * Math.PI / 180), c.attr("rotation", b) } , JI._initEvents = function(t, e, i, n) { t.off("mouseover").off("mouseout").off("emphasis").off("normal"); function o() { r.onEmphasis(n) } function a() { r.onNormal() } var r = this; i.isAnimationEnabled() && t.on("mouseover", o).on("mouseout", a).on("emphasis", o).on("normal", a).on("downplay", function() { r.onDownplay() }).on("highlight", function() { r.onHighlight() }) } , w($I, Ci); _c.extend({ type: "sunburst", init: function() {}, render: function(o, a, t, e) { var n = this; this.seriesModel = o, this.api = t, this.ecModel = a; var r = o.getData() , s = r.tree.root , i = o.getViewRoot() , l = this.group , u = o.get("renderLabelForZeroData") , h = []; i.eachNode(function(t) { h.push(t) }); var c = this._oldChildren || []; if (function(i, n) { if (0 === i.length && 0 === n.length) return; function t(t) { return t.getId() } function e(t, e) { !function(t, e) { u || !t || t.getValue() || (t = null); if (t !== s && e !== s) if (e && e.piece) t ? (e.piece.updateData(!1, t, "normal", o, a), r.setItemGraphicEl(t.dataIndex, e.piece)) : function(t) { if (!t) return; t.piece && (l.remove(t.piece), t.piece = null) }(e); else if (t) { var i = new $I(t,o,a); l.add(i), r.setItemGraphicEl(t.dataIndex, i) } }(null == t ? null : i[t], null == e ? null : n[e]) } new kf(n,i,t,t).add(e).update(e).remove(T(e, null)).execute() }(h, c), function(t, e) { if (0 < e.depth) { n.virtualPiece ? n.virtualPiece.updateData(!1, t, "normal", o, a) : (n.virtualPiece = new $I(t,o,a), l.add(n.virtualPiece)), e.piece._onclickEvent && e.piece.off("click", e.piece._onclickEvent); var i = function(t) { n._rootToNode(e.parentNode) }; e.piece._onclickEvent = i, n.virtualPiece.on("click", i) } else n.virtualPiece && (l.remove(n.virtualPiece), n.virtualPiece = null) }(s, i), e && e.highlight && e.highlight.piece) { var d = o.getShallow("highlightPolicy"); e.highlight.piece.onEmphasis(d) } else if (e && e.unhighlight) { var f = this.virtualPiece; !f && s.children.length && (f = s.children[0].piece), f && f.onNormal() } this._initEvents(), this._oldChildren = h }, dispose: function() {}, _initEvents: function() { function t(o) { var a = !1; r.seriesModel.getViewRoot().eachNode(function(t) { if (!a && t.piece && t.piece.childAt(0) === o.target) { var e = t.getModel().get("nodeClick"); if ("rootToNode" === e) r._rootToNode(t); else if ("link" === e) { var i = t.getModel() , n = i.get("link"); if (n) gu(n, i.get("target", !0) || "_blank") } a = !0 } }) } var r = this; this.group._onclickEvent && this.group.off("click", this.group._onclickEvent), this.group.on("click", t), this.group._onclickEvent = t }, _rootToNode: function(t) { t !== this.seriesModel.getViewRoot() && this.api.dispatchAction({ type: "sunburstRootToNode", from: this.uid, seriesId: this.seriesModel.id, targetNode: t }) }, containPoint: function(t, e) { var i = e.getData().getItemLayout(0); if (i) { var n = t[0] - i.cx , o = t[1] - i.cy , a = Math.sqrt(n * n + o * o); return a <= i.r && a >= i.r0 } } }); var QI = "sunburstRootToNode"; _f({ type: QI, update: "updateView" }, function(o, t) { t.eachComponent({ mainType: "series", subType: "sunburst", query: o }, function(t, e) { var i = Zx(o, [QI], t); if (i) { var n = t.getViewRoot(); n && (o.direction = Xx(n, i.node) ? "rollUp" : "drillDown"), t.resetViewRoot(i.node) } }) }); var tT = "sunburstHighlight"; _f({ type: tT, update: "updateView" }, function(n, t) { t.eachComponent({ mainType: "series", subType: "sunburst", query: n }, function(t, e) { var i = Zx(n, [tT], t); i && (n.highlight = i.node) }) }); _f({ type: "sunburstUnhighlight", update: "updateView" }, function(i, t) { t.eachComponent({ mainType: "series", subType: "sunburst", query: i }, function(t, e) { i.unhighlight = !0 }) }); var eT = Math.PI / 180; function iT(t, e) { if ("function" == typeof e) return t.sort(e); var n = "asc" === e; return t.sort(function(t, e) { var i = (t.getValue() - e.getValue()) * (n ? 1 : -1); return 0 == i ? (t.dataIndex - e.dataIndex) * (n ? -1 : 1) : i }) } function nT(a, r) { return r = r || [0, 0], O(["x", "y"], function(t, e) { var i = this.getAxis(t) , n = r[e] , o = a[e] / 2; return "category" === i.type ? i.getBandWidth() : Math.abs(i.dataToCoord(n - o) - i.dataToCoord(n + o)) }, this) } Sf(T(iy, "sunburst")), bf(T(function(t, e, C, i) { e.eachSeriesByType(t, function(t) { var e = t.get("center") , i = t.get("radius"); L(i) || (i = [0, i]), L(e) || (e = [e, e]); var n = C.getWidth() , o = C.getHeight() , h = Math.min(n, o) , c = Rl(e[0], n) , d = Rl(e[1], o) , f = Rl(i[0], h / 2) , a = Rl(i[1], h / 2) , r = -t.get("startAngle") * eT , p = t.get("minAngle") * eT , g = t.getData().tree.root , s = t.getViewRoot() , m = s.depth , l = t.get("sort"); null != l && !function e(t, i) { var n = t.children || []; t.children = iT(n, i); n.length && E(t.children, function(t) { e(t, i) }) }(s, l); var u = 0; E(s.children, function(t) { isNaN(t.getValue()) || u++ }); var v = s.getValue() , y = Math.PI / (v || u) * 2 , x = 0 < s.depth , _ = s.height - (x ? -1 : 1) , w = (a - f) / (_ || 1) , b = t.get("clockwise") , S = t.get("stillShowZeroSum") , M = b ? 1 : -1 , I = function(t, e) { if (t) { var i = e; if (t !== g) { var n = t.getValue() , o = 0 === v && S ? y : n * y; o < p && (o = p), i = e + M * o; var a = t.depth - m - (x ? -1 : 1) , r = f + w * a , s = f + w * (1 + a) , l = t.getModel(); null != l.get("r0") && (r = Rl(l.get("r0"), h / 2)), null != l.get("r") && (s = Rl(l.get("r"), h / 2)), t.setLayout({ angle: o, startAngle: e, endAngle: i, clockwise: b, cx: c, cy: d, r0: r, r: s }) } if (t.children && t.children.length) { var u = 0; E(t.children, function(t) { u += I(t, e + u) }) } return i - e } }; if (x) { var T = f , A = f + w , D = 2 * Math.PI; g.setLayout({ angle: D, startAngle: r, endAngle: r + D, clockwise: b, cx: c, cy: d, r0: T, r: A }) } I(s, r) }) }, "sunburst")), xf(T(uy, "sunburst")); function oT(a, r) { return r = r || [0, 0], O([0, 1], function(t) { var e = r[t] , i = a[t] / 2 , n = [] , o = []; return n[t] = e - i, o[t] = e + i, n[1 - t] = o[1 - t] = r[1 - t], Math.abs(this.dataToPoint(n)[t] - this.dataToPoint(o)[t]) }, this) } function aT(t, e) { var i = this.getAxis() , n = e instanceof Array ? e[0] : e , o = (t instanceof Array ? t[0] : t) / 2; return "category" === i.type ? i.getBandWidth() : Math.abs(i.dataToCoord(n - o) - i.dataToCoord(n + o)) } function rT(s, l) { return O(["Radius", "Angle"], function(t, e) { var i = this["get" + t + "Axis"]() , n = l[e] , o = s[e] / 2 , a = "dataTo" + t , r = "category" === i.type ? i.getBandWidth() : Math.abs(i[a](n - o) - i[a](n + o)); return "Angle" === t && (r = r * Math.PI / 180), r }, this) } var sT = Ss , lT = ["itemStyle"] , uT = ["emphasis", "itemStyle"] , hT = ["label"] , cT = ["emphasis", "label"] , dT = "e\0\0" , fT = { cartesian2d: function(e) { var t = e.grid.getRect(); return { coordSys: { type: "cartesian2d", x: t.x, y: t.y, width: t.width, height: t.height }, api: { coord: function(t) { return e.dataToPoint(t) }, size: A(nT, e) } } }, geo: function(e) { var t = e.getBoundingRect(); return { coordSys: { type: "geo", x: t.x, y: t.y, width: t.width, height: t.height, zoom: e.getZoom() }, api: { coord: function(t) { return e.dataToPoint(t) }, size: A(oT, e) } } }, singleAxis: function(e) { var t = e.getRect(); return { coordSys: { type: "singleAxis", x: t.x, y: t.y, width: t.width, height: t.height }, api: { coord: function(t) { return e.dataToPoint(t) }, size: A(aT, e) } } }, polar: function(o) { var a = o.getRadiusAxis() , r = o.getAngleAxis() , t = a.getExtent(); return t[0] > t[1] && t.reverse(), { coordSys: { type: "polar", cx: o.cx, cy: o.cy, r: t[1], r0: t[0] }, api: { coord: A(function(t) { var e = a.dataToRadius(t[0]) , i = r.dataToAngle(t[1]) , n = o.coordToPoint([e, i]); return n.push(e, i * Math.PI / 180), n }), size: A(rT, o) } } }, calendar: function(i) { var t = i.getRect() , e = i.getRangeInfo(); return { coordSys: { type: "calendar", x: t.x, y: t.y, width: t.width, height: t.height, cellWidth: i.getCellWidth(), cellHeight: i.getCellHeight(), rangeInfo: { start: e.start, end: e.end, weeks: e.weeks, dayCount: e.allDay } }, api: { coord: function(t, e) { return i.dataToPoint(t, e) } } } } }; function pT(t, e, i, n, o) { null == i[t] || o || (e[t] = i[t], i[t] = n[t]) } function gT(a, r, e, t) { var i = a.get("renderItem") , n = a.coordinateSystem , o = {}; n && (o = n.prepareCustoms ? n.prepareCustoms() : fT[n.type](n)); var s, l, u, h, c, d = D({ getWidth: t.getWidth, getHeight: t.getHeight, getZr: t.getZr, getDevicePixelRatio: t.getDevicePixelRatio, value: function(t, e) { return null == e && (e = s), r.get(r.getDimension(t || 0), e) }, style: function(t, e) { null == e && (e = s), g(e); var i = l.getModel(lT).getItemStyle(); null != c && (i.fill = c); var n = r.getItemVisual(e, "opacity"); null != n && (i.opacity = n); var o = t ? _T(t, u) : u; return nl(i, o, null, { autoColor: c, isRectText: !0 }), i.text = o.getShallow("show") ? H(a.getFormattedLabel(e, "normal"), Ug(r, e)) : null, t && wT(i, t), i }, styleEmphasis: function(t, e) { null == e && (e = s), g(e); var i = l.getModel(uT).getItemStyle() , n = t ? _T(t, h) : h; return nl(i, n, null, { isRectText: !0 }, !0), i.text = n.getShallow("show") ? Z(a.getFormattedLabel(e, "emphasis"), a.getFormattedLabel(e, "normal"), Ug(r, e)) : null, t && wT(i, t), i }, visual: function(t, e) { return null == e && (e = s), r.getItemVisual(e, t) }, barLayout: function(t) { if (n.getBaseAxis) { return function(t) { var e = [] , i = t.axis; if ("category" === i.type) { for (var n = i.getBandWidth(), o = 0; o < t.count; o++) e.push(D({ bandWidth: n, axisKey: "axis0", stackId: Cp + o }, t)); var a = Ep(e) , r = []; for (o = 0; o < t.count; o++) { var s = a.axis0[Cp + o]; s.offsetCenter = s.offset + s.width / 2, r.push(s) } return r } }(D({ axis: n.getBaseAxis() }, t)) } }, currentSeriesIndices: function() { return e.getCurrentSeriesIndices() }, font: function(t) { return ul(t, e) } }, o.api || {}), f = { context: {}, seriesId: a.id, seriesName: a.name, seriesIndex: a.seriesIndex, coordSys: o.coordSys, dataInsideLength: r.count(), encode: function(o) { var a = {}; return E(o.dimensions, function(t, e) { var i = o.getDimensionInfo(t); if (!i.isExtraCoord) { var n = i.coordDim; (a[n] = a[n] || [])[i.coordDimIndex] = e } }), a }(a.getData()) }, p = !0; return function(t, e) { return s = t, p = !0, i && i(D({ dataIndexInside: t, dataIndex: r.getRawIndex(t), actionType: e ? e.type : null }, f), d) } ; function g(t) { null == t && (t = s), p && (l = r.getItemModel(t), u = l.getModel(hT), h = l.getModel(cT), c = r.getItemVisual(t, "color"), p = !1) } } function mT(t, e, i, n, o, a) { return (t = vT(t, e, i, n, o, a, !0)) && a.setItemGraphicEl(e, t), t } function vT(t, e, i, n, o, a, r) { var s = !i , l = (i = i || {}).type , u = i.shape , h = i.style; if (t && (s || null != l && l !== t.__customGraphicType || "path" === l && function(t) { return t && (t.hasOwnProperty("pathData") || t.hasOwnProperty("d")) }(u) && ST(u) !== t.__customPathData || "image" === l && MT(h, "image") && h.image !== t.__customImagePath || "text" === l && MT(u, "text") && h.text !== t.__customText) && (o.remove(t), t = null), !s) { var c = !t; return function(e, t, i, n, o, a, r) { var s = {} , l = i.style || {}; if (i.shape && (s.shape = k(i.shape)), i.position && (s.position = i.position.slice()), i.scale && (s.scale = i.scale.slice()), i.origin && (s.origin = i.origin.slice()), i.rotation && (s.rotation = i.rotation), "image" === e.type && i.style) { var u = s.style = {}; E(["x", "y", "width", "height"], function(t) { pT(t, u, l, e.style, a) }) } if ("text" === e.type && i.style) { u = s.style = {}; E(["x", "y"], function(t) { pT(t, u, l, e.style, a) }), !l.hasOwnProperty("textFill") && l.fill && (l.textFill = l.fill), !l.hasOwnProperty("textStroke") && l.stroke && (l.textStroke = l.stroke) } if ("group" !== e.type && (e.useStyle(l), a)) { e.style.opacity = 0; var h = l.opacity; null == h && (h = 1), dl(e, { style: { opacity: h } }, n, t) } a ? e.attr(s) : cl(e, s, n, t), i.hasOwnProperty("z2") && e.attr("z2", i.z2 || 0), i.hasOwnProperty("silent") && e.attr("silent", i.silent), i.hasOwnProperty("invisible") && e.attr("invisible", i.invisible), i.hasOwnProperty("ignore") && e.attr("ignore", i.ignore), i.hasOwnProperty("info") && e.attr("info", i.info); var c = i.styleEmphasis; Us(e, c), r && Js(e, !1 !== c) }(t = t || function(t) { var e, i = t.type; if ("path" === i) { var n = t.shape , o = null != n.width && null != n.height ? { x: n.x || 0, y: n.y || 0, width: n.width, height: n.height } : null , a = ST(n); (e = Ps(a, null, o, n.layout || "center")).__customPathData = a } else if ("image" === i) (e = new Qn({})).__customImagePath = t.style.image; else if ("text" === i) (e = new Ur({})).__customText = t.style.text; else if ("group" === i) e = new Ci; else { if ("compoundPath" === i) throw new Error('"compoundPath" is not supported yet.'); e = new (ks(i)) } return e.__customGraphicType = i, e.name = t.name, e }(i), e, i, n, 0, c, r), "group" === l && function(t, e, i, n, o) { var a = i.children , r = a ? a.length : 0 , s = i.$mergeChildren , l = "byName" === s || i.diffChildrenByName , u = !1 === s; if (!r && !l && !u) return; if (l) return function(t) { new kf(t.oldChildren,t.newChildren,yT,yT,t).add(xT).update(xT).remove(bT).execute() }({ oldChildren: t.children() || [], newChildren: a || [], dataIndex: e, animatableModel: n, group: t, data: o }); u && t.removeAll(); for (var h = 0; h < r; h++) a[h] && vT(t.childAt(h), e, a[h], n, t, o) }(t, e, i, n, a), o.add(t), t } } function yT(t, e) { var i = t && t.name; return null != i ? i : dT + e } function xT(t, e) { var i = this.context , n = null != t ? i.newChildren[t] : null; vT(null != e ? i.oldChildren[e] : null, i.dataIndex, n, i.animatableModel, i.group, i.data) } function _T(i, t) { var n = new Cl({},t); return E(sT, function(t, e) { i.hasOwnProperty(t) && (n.option[e] = i[t]) }), n } function wT(t, e) { for (var i in e) !e.hasOwnProperty(i) && sT.hasOwnProperty(i) || (t[i] = e[i]) } function bT(t) { var e = this.context , i = e.oldChildren[t]; i && e.group.remove(i) } function ST(t) { return t && (t.pathData || t.d) } function MT(t, e) { return t && t.hasOwnProperty(e) } function IT(t) { return t.get("stack") || "__ec_stack_" + t.seriesIndex } function TT(t, e) { return e.dim + t.model.componentIndex } function AT(t, e) { Gg.call(this, "radius", t, e), this.type = "category" } sc.extend({ type: "series.custom", dependencies: ["grid", "polar", "geo", "singleAxis", "calendar"], defaultOption: { coordinateSystem: "cartesian2d", zlevel: 0, z: 2, legendHoverLink: !0, useTransform: !0, clip: !1 }, getInitialData: function(t, e) { return gp(this.getSource(), this) }, getDataParams: function(t, e, i) { var n = sc.prototype.getDataParams.apply(this, arguments); return i && (n.info = i.info), n } }), _c.extend({ type: "custom", _data: null, render: function(i, t, e, n) { var o = this._data , a = i.getData() , r = this.group , s = gT(i, a, t, e); a.diff(o).add(function(t) { mT(null, t, s(t, n), i, r, a) }).update(function(t, e) { mT(o.getItemGraphicEl(e), t, s(t, n), i, r, a) }).remove(function(t) { var e = o.getItemGraphicEl(t); e && r.remove(e) }).execute(); var l = i.get("clip", !0) ? Sm(i.coordinateSystem, !1, i) : null; l ? r.setClipPath(l) : r.removeClipPath(), this._data = a }, incrementalPrepareRender: function(t, e, i) { this.group.removeAll(), this._data = null }, incrementalRender: function(t, e, i, n, o) { var a = e.getData() , r = gT(e, a, i, n); function s(t) { t.isGroup || (t.incremental = !0, t.useHoverLayer = !0) } for (var l = t.start; l < t.end; l++) { mT(null, l, r(l, o), e, this.group, a).traverse(s) } }, dispose: et, filterForExposedEvent: function(t, e, i, n) { var o = e.element; if (null == o || i.name === o) return !0; for (; (i = i.parent) && i !== this.group; ) if (i.name === o) return !0; return !1 } }), AT.prototype = { constructor: AT, pointToData: function(t, e) { return this.polar.pointToData(t, e)["radius" === this.dim ? 0 : 1] }, dataToRadius: Gg.prototype.dataToCoord, radiusToData: Gg.prototype.coordToData }, w(AT, Gg); var DT = jo(); function CT(t, e) { e = e || [0, 360], Gg.call(this, "angle", t, e), this.type = "category" } CT.prototype = { constructor: CT, pointToData: function(t, e) { return this.polar.pointToData(t, e)["radius" === this.dim ? 0 : 1] }, dataToAngle: Gg.prototype.dataToCoord, angleToData: Gg.prototype.coordToData, calculateCategoryInterval: function() { var t = this.getLabelModel() , e = this.scale , i = e.getExtent() , n = e.count(); if (i[1] - i[0] < 1) return 0; var o = i[0] , a = this.dataToCoord(o + 1) - this.dataToCoord(o) , r = Math.abs(a) , s = gn(o, t.getFont(), "center", "top") , l = Math.max(s.height, 7) / r; isNaN(l) && (l = 1 / 0); var u = Math.max(0, Math.floor(l)) , h = DT(this.model) , c = h.lastAutoInterval , d = h.lastTickCount; return null != c && null != d && Math.abs(c - u) <= 1 && Math.abs(d - n) <= 1 && u < c ? u = c : (h.lastTickCount = n, h.lastAutoInterval = u), u } }, w(CT, Gg); function LT(t) { this.name = t || "", this.cx = 0, this.cy = 0, this._radiusAxis = new AT, this._angleAxis = new CT, this._radiusAxis.polar = this._angleAxis.polar = this } LT.prototype = { type: "polar", axisPointerEnabled: !0, constructor: LT, dimensions: ["radius", "angle"], model: null, containPoint: function(t) { var e = this.pointToCoord(t); return this._radiusAxis.contain(e[0]) && this._angleAxis.contain(e[1]) }, containData: function(t) { return this._radiusAxis.containData(t[0]) && this._angleAxis.containData(t[1]) }, getAxis: function(t) { return this["_" + t + "Axis"] }, getAxes: function() { return [this._radiusAxis, this._angleAxis] }, getAxesByScale: function(t) { var e = [] , i = this._angleAxis , n = this._radiusAxis; return i.scale.type === t && e.push(i), n.scale.type === t && e.push(n), e }, getAngleAxis: function() { return this._angleAxis }, getRadiusAxis: function() { return this._radiusAxis }, getOtherAxis: function(t) { var e = this._angleAxis; return t === e ? this._radiusAxis : e }, getBaseAxis: function() { return this.getAxesByScale("ordinal")[0] || this.getAxesByScale("time")[0] || this.getAngleAxis() }, getTooltipAxes: function(t) { var e = null != t && "auto" !== t ? this.getAxis(t) : this.getBaseAxis(); return { baseAxes: [e], otherAxes: [this.getOtherAxis(e)] } }, dataToPoint: function(t, e) { return this.coordToPoint([this._radiusAxis.dataToRadius(t[0], e), this._angleAxis.dataToAngle(t[1], e)]) }, pointToData: function(t, e) { var i = this.pointToCoord(t); return [this._radiusAxis.radiusToData(i[0], e), this._angleAxis.angleToData(i[1], e)] }, pointToCoord: function(t) { var e = t[0] - this.cx , i = t[1] - this.cy , n = this.getAngleAxis() , o = n.getExtent() , a = Math.min(o[0], o[1]) , r = Math.max(o[0], o[1]); n.inverse ? a = r - 360 : r = a + 360; var s = Math.sqrt(e * e + i * i); e /= s, i /= s; for (var l = Math.atan2(-i, e) / Math.PI * 180, u = l < a ? 1 : -1; l < a || r < l; ) l += 360 * u; return [s, l] }, coordToPoint: function(t) { var e = t[0] , i = t[1] / 180 * Math.PI; return [Math.cos(i) * e + this.cx, -Math.sin(i) * e + this.cy] }, getArea: function() { var t = this.getAngleAxis() , e = this.getRadiusAxis().getExtent().slice(); e[0] > e[1] && e.reverse(); var i = t.getExtent() , n = Math.PI / 180; return { cx: this.cx, cy: this.cy, r0: e[0], r: e[1], startAngle: -i[0] * n, endAngle: -i[1] * n, clockwise: t.inverse, contain: function(t, e) { var i = t - this.cx , n = e - this.cy , o = i * i + n * n , a = this.r , r = this.r0; return o <= a * a && r * r <= o } } } }; var kT = ku.extend({ type: "polarAxis", axis: null, getCoordSysModel: function() { return this.ecModel.queryComponents({ mainType: "polar", index: this.option.polarIndex, id: this.option.polarId })[0] } }); m(kT.prototype, dg); var PT = { splitNumber: 5 }; function NT(t, e) { return e.type || (e.data ? "category" : "value") } function OT(t, e) { var i = this , n = i.getAngleAxis() , o = i.getRadiusAxis(); if (n.scale.setExtent(1 / 0, -1 / 0), o.scale.setExtent(1 / 0, -1 / 0), t.eachSeries(function(t) { if (t.coordinateSystem === i) { var e = t.getData(); E(e.mapDimension("radius", !0), function(t) { o.scale.unionExtentFromData(e, pp(e, t)) }), E(e.mapDimension("angle", !0), function(t) { n.scale.unionExtentFromData(e, pp(e, t)) }) } }), rg(n.scale, n.model), rg(o.scale, o.model), "category" === n.type && !n.onBand) { var a = n.getExtent() , r = 360 / n.scale.count(); n.inverse ? a[1] += r : a[1] -= r, n.setExtent(a[0], a[1]) } } function ET(t, e) { if (t.type = e.get("type"), t.scale = sg(e), t.onBand = e.get("boundaryGap") && "category" === t.type, t.inverse = e.get("inverse"), "angleAxis" === e.mainType) { t.inverse ^= e.get("clockwise"); var i = e.get("startAngle"); t.setExtent(i, i + (t.inverse ? -360 : 360)) } (e.axis = t).model = e } Gm("angle", kT, NT, { startAngle: 90, clockwise: !0, splitNumber: 12, axisLabel: { rotate: !1 } }), Gm("radius", kT, NT, PT), Tf({ type: "polar", dependencies: ["polarAxis", "angleAxis"], coordinateSystem: null, findAxisModel: function(t) { var e; return this.ecModel.eachComponent(t, function(t) { t.getCoordSysModel() === this && (e = t) }, this), e }, defaultOption: { zlevel: 0, z: 0, center: ["50%", "50%"], radius: "80%" } }), lh.register("polar", { dimensions: LT.prototype.dimensions, create: function(i, s) { var l = []; return i.eachComponent("polar", function(t, e) { var i = new LT(e); i.update = OT; var n = i.getRadiusAxis() , o = i.getAngleAxis() , a = t.findAxisModel("radiusAxis") , r = t.findAxisModel("angleAxis"); ET(n, a), ET(o, r), function(t, e, i) { var n = e.get("center") , o = i.getWidth() , a = i.getHeight(); t.cx = Rl(n[0], o), t.cy = Rl(n[1], a); var r = t.getRadiusAxis() , s = Math.min(o, a) / 2 , l = e.get("radius"); null == l ? l = [0, "100%"] : L(l) || (l = [0, l]), l = [Rl(l[0], s), Rl(l[1], s)], r.inverse ? r.setExtent(l[1], l[0]) : r.setExtent(l[0], l[1]) }(i, t, s), l.push(i), (t.coordinateSystem = i).model = t }), i.eachSeries(function(t) { if ("polar" === t.get("coordinateSystem")) { var e = i.queryComponents({ mainType: "polar", index: t.get("polarIndex"), id: t.get("polarId") })[0]; t.coordinateSystem = e.coordinateSystem } }), l } }); var RT = ["axisLine", "axisLabel", "axisTick", "minorTick", "splitLine", "minorSplitLine", "splitArea"]; function zT(t, e, i) { e[1] > e[0] && (e = e.slice().reverse()); var n = t.coordToPoint([e[0], i]) , o = t.coordToPoint([e[1], i]); return { x1: n[0], y1: n[1], x2: o[0], y2: o[1] } } function BT(t) { return t.getRadiusAxis().inverse ? 0 : 1 } function VT(t) { var e = t[0] , i = t[t.length - 1]; e && i && Math.abs(Math.abs(e.coord - i.coord) - 360) < 1e-4 && t.pop() } mv.extend({ type: "angleAxis", axisPointerClass: "PolarAxisPointer", render: function(e, t) { if (this.group.removeAll(), e.get("show")) { var i = e.axis , n = i.polar , o = n.getRadiusAxis().getExtent() , a = i.getTicksCoords() , r = i.getMinorTicksCoords() , s = O(i.getViewLabels(), function(t) { return (t = k(t)).coord = i.dataToCoord(t.tickValue), t }); VT(s), VT(a), E(RT, function(t) { !e.get(t + ".show") || i.scale.isBlank() && "axisLine" !== t || this["_" + t](e, n, a, r, o, s) }, this) } }, _axisLine: function(t, e, i, n, o) { var a, r = t.getModel("axisLine.lineStyle"), s = BT(e), l = s ? 0 : 1; (a = 0 === o[l] ? new Yr({ shape: { cx: e.cx, cy: e.cy, r: o[s] }, style: r.getLineStyle(), z2: 1, silent: !0 }) : new Kr({ shape: { cx: e.cx, cy: e.cy, r: o[s], r0: o[l] }, style: r.getLineStyle(), z2: 1, silent: !0 })).style.fill = null, this.group.add(a) }, _axisTick: function(t, e, i, n, o) { var a = t.getModel("axisTick") , r = (a.get("inside") ? -1 : 1) * a.get("length") , s = o[BT(e)] , l = O(i, function(t) { return new ls({ shape: zT(e, [s, s + r], t.coord) }) }); this.group.add(Es(l, { style: D(a.getModel("lineStyle").getLineStyle(), { stroke: t.get("axisLine.lineStyle.color") }) })) }, _minorTick: function(t, e, i, n, o) { if (n.length) { for (var a = t.getModel("axisTick"), r = t.getModel("minorTick"), s = (a.get("inside") ? -1 : 1) * r.get("length"), l = o[BT(e)], u = [], h = 0; h < n.length; h++) for (var c = 0; c < n[h].length; c++) u.push(new ls({ shape: zT(e, [l, l + s], n[h][c].coord) })); this.group.add(Es(u, { style: D(r.getModel("lineStyle").getLineStyle(), D(a.getLineStyle(), { stroke: t.get("axisLine.lineStyle.color") })) })) } }, _axisLabel: function(c, d, t, e, f, i) { var p = c.getCategories(!0) , g = c.getModel("axisLabel") , m = g.get("margin") , v = c.get("triggerEvent"); E(i, function(t, e) { var i = g , n = t.tickValue , o = f[BT(d)] , a = d.coordToPoint([o + m, t.coord]) , r = d.cx , s = d.cy , l = Math.abs(a[0] - r) / o < .3 ? "center" : a[0] > r ? "left" : "right" , u = Math.abs(a[1] - s) / o < .3 ? "middle" : a[1] > s ? "top" : "bottom"; p && p[n] && p[n].textStyle && (i = new Cl(p[n].textStyle,g,g.ecModel)); var h = new Ur({ silent: Qm.isLabelSilent(c) }); this.group.add(h), nl(h.style, i, { x: a[0], y: a[1], textFill: i.getTextColor() || c.get("axisLine.lineStyle.color"), text: t.formattedLabel, textAlign: l, textVerticalAlign: u }), v && (h.eventData = Qm.makeAxisEventDataBase(c), h.eventData.targetType = "axisLabel", h.eventData.value = t.rawLabel) }, this) }, _splitLine: function(t, e, i, n, o) { var a = t.getModel("splitLine").getModel("lineStyle") , r = a.get("color") , s = 0; r = r instanceof Array ? r : [r]; for (var l = [], u = 0; u < i.length; u++) { var h = s++ % r.length; l[h] = l[h] || [], l[h].push(new ls({ shape: zT(e, o, i[u].coord) })) } for (u = 0; u < l.length; u++) this.group.add(Es(l[u], { style: D({ stroke: r[u % r.length] }, a.getLineStyle()), silent: !0, z: t.get("z") })) }, _minorSplitLine: function(t, e, i, n, o) { if (n.length) { for (var a = t.getModel("minorSplitLine").getModel("lineStyle"), r = [], s = 0; s < n.length; s++) for (var l = 0; l < n[s].length; l++) r.push(new ls({ shape: zT(e, o, n[s][l].coord) })); this.group.add(Es(r, { style: a.getLineStyle(), silent: !0, z: t.get("z") })) } }, _splitArea: function(t, e, i, n, o) { if (i.length) { var a = t.getModel("splitArea").getModel("areaStyle") , r = a.get("color") , s = 0; r = r instanceof Array ? r : [r]; for (var l = [], u = Math.PI / 180, h = -i[0].coord * u, c = Math.min(o[0], o[1]), d = Math.max(o[0], o[1]), f = t.get("clockwise"), p = 1; p < i.length; p++) { var g = s++ % r.length; l[g] = l[g] || [], l[g].push(new qr({ shape: { cx: e.cx, cy: e.cy, r0: c, r: d, startAngle: h, endAngle: -i[p].coord * u, clockwise: f }, silent: !0 })), h = -i[p].coord * u } for (p = 0; p < l.length; p++) this.group.add(Es(l[p], { style: D({ fill: r[p % r.length] }, a.getAreaStyle()), silent: !0 })) } } }); var GT = ["axisLine", "axisTickLabel", "axisName"] , FT = ["splitLine", "splitArea", "minorSplitLine"]; mv.extend({ type: "radiusAxis", axisPointerClass: "PolarAxisPointer", render: function(e, t) { if (this.group.removeAll(), e.get("show")) { var i = e.axis , n = i.polar , o = n.getAngleAxis() , a = i.getTicksCoords() , r = i.getMinorTicksCoords() , s = o.getExtent()[0] , l = i.getExtent() , u = function(t, e, i) { return { position: [t.cx, t.cy], rotation: i / 180 * Math.PI, labelDirection: -1, tickDirection: -1, nameDirection: 1, labelRotate: e.getModel("axisLabel").get("rotate"), z2: 1 } }(n, e, s) , h = new Qm(e,u); E(GT, h.add, h), this.group.add(h.getGroup()), E(FT, function(t) { e.get(t + ".show") && !i.scale.isBlank() && this["_" + t](e, n, s, l, a, r) }, this) } }, _splitLine: function(t, e, i, n, o) { var a = t.getModel("splitLine").getModel("lineStyle") , r = a.get("color") , s = 0; r = r instanceof Array ? r : [r]; for (var l = [], u = 0; u < o.length; u++) { var h = s++ % r.length; l[h] = l[h] || [], l[h].push(new Yr({ shape: { cx: e.cx, cy: e.cy, r: o[u].coord } })) } for (u = 0; u < l.length; u++) this.group.add(Es(l[u], { style: D({ stroke: r[u % r.length], fill: null }, a.getLineStyle()), silent: !0 })) }, _minorSplitLine: function(t, e, i, n, o, a) { if (a.length) { for (var r = t.getModel("minorSplitLine").getModel("lineStyle"), s = [], l = 0; l < a.length; l++) for (var u = 0; u < a[l].length; u++) s.push(new Yr({ shape: { cx: e.cx, cy: e.cy, r: a[l][u].coord } })); this.group.add(Es(s, { style: D({ fill: null }, r.getLineStyle()), silent: !0 })) } }, _splitArea: function(t, e, i, n, o) { if (o.length) { var a = t.getModel("splitArea").getModel("areaStyle") , r = a.get("color") , s = 0; r = r instanceof Array ? r : [r]; for (var l = [], u = o[0].coord, h = 1; h < o.length; h++) { var c = s++ % r.length; l[c] = l[c] || [], l[c].push(new qr({ shape: { cx: e.cx, cy: e.cy, r0: u, r: o[h].coord, startAngle: 0, endAngle: 2 * Math.PI }, silent: !0 })), u = o[h].coord } for (h = 0; h < l.length; h++) this.group.add(Es(l[h], { style: D({ fill: r[h % r.length] }, a.getAreaStyle()), silent: !0 })) } } }); var WT = wI.extend({ makeElOption: function(t, e, i, n, o) { var a = i.axis; "angle" === a.dim && (this.animationThreshold = Math.PI / 18); var r, s = a.polar, l = s.getOtherAxis(a).getExtent(); r = a["dataTo" + fu(a.dim)](e); var u = n.get("type"); if (u && "none" !== u) { var h = TI(n) , c = HT[u](a, s, r, l, h); c.style = h, t.graphicKey = c.type, t.pointer = c } var d = n.get("label.margin"); AI(t, i, n, o, function(t, e, i, n, o) { var a = e.axis , r = a.dataToCoord(t) , s = n.getAngleAxis().getExtent()[0]; s = s / 180 * Math.PI; var l, u, h, c = n.getRadiusAxis().getExtent(); if ("radius" === a.dim) { var d = ae(); he(d, d, s), ue(d, d, [n.cx, n.cy]), l = pl([r, -o], d); var f = e.getModel("axisLabel").get("rotate") || 0 , p = Qm.innerTextLayout(s, f * Math.PI / 180, -1); u = p.textAlign, h = p.textVerticalAlign } else { var g = c[1]; l = n.coordToPoint([g + o, r]); var m = n.cx , v = n.cy; u = Math.abs(l[0] - m) / g < .3 ? "center" : l[0] > m ? "left" : "right", h = Math.abs(l[1] - v) / g < .3 ? "middle" : l[1] > v ? "top" : "bottom" } return { position: l, align: u, verticalAlign: h } }(e, i, 0, s, d)) } }); var HT = { line: function(t, e, i, n, o) { return "angle" === t.dim ? { type: "Line", shape: kI(e.coordToPoint([n[0], i]), e.coordToPoint([n[1], i])) } : { type: "Circle", shape: { cx: e.cx, cy: e.cy, r: i } } }, shadow: function(t, e, i, n, o) { var a = Math.max(1, t.getBandWidth()) , r = Math.PI / 180; return "angle" === t.dim ? { type: "Sector", shape: NI(e.cx, e.cy, n[0], n[1], (-i - a / 2) * r, (a / 2 - i) * r) } : { type: "Sector", shape: NI(e.cx, e.cy, i - a / 2, i + a / 2, 0, 2 * Math.PI) } } }; function ZT(n, t) { t.update = "updateView", _f(t, function(t, e) { var i = {}; return e.eachComponent({ mainType: "geo", query: t }, function(e) { e[n](t.name), E(e.coordinateSystem.regions, function(t) { i[t.name] = e.isSelected(t.name) || !1 }) }), { selected: i, name: t.name } }) } mv.registerAxisPointerClass("PolarAxisPointer", WT), bf(T(function(t, e, i) { var N = {} , O = function(t) { var g = {}; E(t, function(t, e) { var i = t.getData() , n = t.coordinateSystem , o = n.getBaseAxis() , a = TT(n, o) , r = o.getExtent() , s = "category" === o.type ? o.getBandWidth() : Math.abs(r[1] - r[0]) / i.count() , l = g[a] || { bandWidth: s, remainedWidth: s, autoWidthCount: 0, categoryGap: "20%", gap: "30%", stacks: {} } , u = l.stacks; g[a] = l; var h = IT(t); u[h] || l.autoWidthCount++, u[h] = u[h] || { width: 0, maxWidth: 0 }; var c = Rl(t.get("barWidth"), s) , d = Rl(t.get("barMaxWidth"), s) , f = t.get("barGap") , p = t.get("barCategoryGap"); c && !u[h].width && (c = Math.min(l.remainedWidth, c), u[h].width = c, l.remainedWidth -= c), d && (u[h].maxWidth = d), null != f && (l.gap = f), null != p && (l.categoryGap = p) }); var d = {}; return E(g, function(t, i) { d[i] = {}; var e = t.stacks , n = t.bandWidth , o = Rl(t.categoryGap, n) , a = Rl(t.gap, 1) , r = t.remainedWidth , s = t.autoWidthCount , l = (r - o) / (s + (s - 1) * a); l = Math.max(l, 0), E(e, function(t, e) { var i = t.maxWidth; i && i < l && (i = Math.min(i, r), t.width && (i = Math.min(i, t.width)), r -= i, t.width = i, s--) }), l = (r - o) / (s + (s - 1) * a), l = Math.max(l, 0); var u, h = 0; E(e, function(t, e) { t.width || (t.width = l), h += (u = t).width * (1 + a) }), u && (h -= u.width * a); var c = -h / 2; E(e, function(t, e) { d[i][e] = d[i][e] || { offset: c, width: t.width }, c += t.width * (1 + a) }) }), d }(M(e.getSeriesByType(t), function(t) { return !e.isSeriesFiltered(t) && t.coordinateSystem && "polar" === t.coordinateSystem.type })); e.eachSeriesByType(t, function(t) { if ("polar" === t.coordinateSystem.type) { var e = t.getData() , i = t.coordinateSystem , n = i.getBaseAxis() , o = TT(i, n) , a = IT(t) , r = O[o][a] , s = r.offset , l = r.width , u = i.getOtherAxis(n) , h = t.coordinateSystem.cx , c = t.coordinateSystem.cy , d = t.get("barMinHeight") || 0 , f = t.get("barMinAngle") || 0; N[a] = N[a] || []; for (var p = e.mapDimension(u.dim), g = e.mapDimension(n.dim), m = fp(e, p), v = "radius" !== n.dim || !t.get("roundCap", !0), y = u.getExtent()[0], x = 0, _ = e.count(); x < _; x++) { var w, b, S, M, I = e.get(p, x), T = e.get(g, x), A = 0 <= I ? "p" : "n", D = y; if (m && (N[a][T] || (N[a][T] = { p: y, n: y }), D = N[a][T][A]), "radius" === u.dim) { var C = u.dataToRadius(I) - y , L = n.dataToAngle(T); Math.abs(C) < d && (C = (C < 0 ? -1 : 1) * d), b = (w = D) + C, M = (S = L - s) - l, m && (N[a][T][A] = b) } else { var k = u.dataToAngle(I, v) - y , P = n.dataToRadius(T); Math.abs(k) < f && (k = (k < 0 ? -1 : 1) * f), b = (w = P + s) + l, M = (S = D) + k, m && (N[a][T][A] = M) } e.setItemLayout(x, { cx: h, cy: c, r0: w, r: b, startAngle: -S * Math.PI / 180, endAngle: -M * Math.PI / 180 }) } } }, this) }, "bar")), Af({ type: "polar" }), b(ku.extend({ type: "geo", coordinateSystem: null, layoutMode: "box", init: function(t) { ku.prototype.init.apply(this, arguments), Go(t, "label", ["show"]) }, optionUpdated: function() { var t = this.option , i = this; t.regions = px.getFilledRegions(t.regions, t.map, t.nameMap), this._optionModelMap = S(t.regions || [], function(t, e) { return e.name && t.set(e.name, new Cl(e,i)), t }, Q()), this.updateSelectedMap(t.regions) }, defaultOption: { zlevel: 0, z: 0, show: !0, left: "center", top: "center", aspectScale: null, silent: !1, map: "", boundingCoords: null, center: null, zoom: 1, scaleLimit: null, label: { show: !1, color: "#000" }, itemStyle: { borderWidth: .5, borderColor: "#444", color: "#eee" }, emphasis: { label: { show: !0, color: "rgb(100,0,0)" }, itemStyle: { color: "rgba(255,215,0,0.8)" } }, regions: [] }, getRegionModel: function(t) { return this._optionModelMap.get(t) || new Cl(null,this,this.ecModel) }, getFormattedLabel: function(t, e) { var i = this.getRegionModel(t).get("label" + ("normal" === e ? "." : e + ".") + "formatter") , n = { name: t }; return "function" == typeof i ? (n.status = e, i(n)) : "string" == typeof i ? i.replace("{a}", null != t ? t : "") : void 0 }, setZoom: function(t) { this.option.zoom = t }, setCenter: function(t) { this.option.center = t } }), jv), Af({ type: "geo", init: function(t, e) { var i = new tx(e,!0); this._mapDraw = i, this.group.add(i.group) }, render: function(t, e, i, n) { if (!n || "geoToggleSelect" !== n.type || n.from !== this.uid) { var o = this._mapDraw; t.get("show") ? o.draw(t, e, i, this, n) : this._mapDraw.group.removeAll(), this.group.silent = t.get("silent") } }, dispose: function() { this._mapDraw && this._mapDraw.remove() } }), ZT("toggleSelected", { type: "geoToggleSelect", event: "geoselectchanged" }), ZT("select", { type: "geoSelect", event: "geoselected" }), ZT("unSelect", { type: "geoUnSelect", event: "geounselected" }); function UT(t, e, i) { this._model = t } function XT(t, e, i, n) { var o = i.calendarModel , a = i.seriesModel , r = o ? o.coordinateSystem : a ? a.coordinateSystem : null; return r === this ? r[t](n) : null } UT.prototype = { constructor: UT, type: "calendar", dimensions: ["time", "value"], getDimensionsInfo: function() { return [{ name: "time", type: "time" }, "value"] }, getRangeInfo: function() { return this._rangeInfo }, getModel: function() { return this._model }, getRect: function() { return this._rect }, getCellWidth: function() { return this._sw }, getCellHeight: function() { return this._sh }, getOrient: function() { return this._orient }, getFirstDayOfWeek: function() { return this._firstDayOfWeek }, getDateInfo: function(t) { var e = (t = Yl(t)).getFullYear() , i = t.getMonth() + 1; i = i < 10 ? "0" + i : i; var n = t.getDate(); n = n < 10 ? "0" + n : n; var o = t.getDay(); return { y: e, m: i, d: n, day: o = Math.abs((o + 7 - this.getFirstDayOfWeek()) % 7), time: t.getTime(), formatedDate: e + "-" + i + "-" + n, date: t } }, getNextNDay: function(t, e) { return 0 === (e = e || 0) || (t = new Date(this.getDateInfo(t).time)).setDate(t.getDate() + e), this.getDateInfo(t) }, update: function(t, e) { this._firstDayOfWeek = +this._model.getModel("dayLabel").get("firstDay"), this._orient = this._model.get("orient"), this._lineWidth = this._model.getModel("itemStyle").getItemStyle().lineWidth || 0, this._rangeInfo = this._getRangeInfo(this._initRangeOption()); var i = this._rangeInfo.weeks || 1 , n = ["width", "height"] , o = this._model.get("cellSize").slice() , a = this._model.getBoxLayoutParams() , r = "horizontal" === this._orient ? [i, 7] : [7, i]; E([0, 1], function(t) { u(o, t) && (a[n[t]] = o[t] * r[t]) }); var s = { width: e.getWidth(), height: e.getHeight() } , l = this._rect = bu(a, s); function u(t, e) { return null != t[e] && "auto" !== t[e] } E([0, 1], function(t) { u(o, t) || (o[t] = l[n[t]] / r[t]) }), this._sw = o[0], this._sh = o[1] }, dataToPoint: function(t, e) { L(t) && (t = t[0]), null == e && (e = !0); var i = this.getDateInfo(t) , n = this._rangeInfo , o = i.formatedDate; if (e && !(i.time >= n.start.time && i.time < n.end.time + 864e5)) return [NaN, NaN]; var a = i.day , r = this._getRangeInfo([n.start.time, o]).nthWeek; return "vertical" === this._orient ? [this._rect.x + a * this._sw + this._sw / 2, this._rect.y + r * this._sh + this._sh / 2] : [this._rect.x + r * this._sw + this._sw / 2, this._rect.y + a * this._sh + this._sh / 2] }, pointToData: function(t) { var e = this.pointToDate(t); return e && e.time }, dataToRect: function(t, e) { var i = this.dataToPoint(t, e); return { contentShape: { x: i[0] - (this._sw - this._lineWidth) / 2, y: i[1] - (this._sh - this._lineWidth) / 2, width: this._sw - this._lineWidth, height: this._sh - this._lineWidth }, center: i, tl: [i[0] - this._sw / 2, i[1] - this._sh / 2], tr: [i[0] + this._sw / 2, i[1] - this._sh / 2], br: [i[0] + this._sw / 2, i[1] + this._sh / 2], bl: [i[0] - this._sw / 2, i[1] + this._sh / 2] } }, pointToDate: function(t) { var e = Math.floor((t[0] - this._rect.x) / this._sw) + 1 , i = Math.floor((t[1] - this._rect.y) / this._sh) + 1 , n = this._rangeInfo.range; return "vertical" === this._orient ? this._getDateByWeeksAndDay(i, e - 1, n) : this._getDateByWeeksAndDay(e, i - 1, n) }, convertToPixel: T(XT, "dataToPoint"), convertFromPixel: T(XT, "pointToData"), _initRangeOption: function() { var t = this._model.get("range") , e = t; if (L(e) && 1 === e.length && (e = e[0]), /^\d{4}$/.test(e) && (t = [e + "-01-01", e + "-12-31"]), /^\d{4}[\/|-]\d{1,2}$/.test(e)) { var i = this.getDateInfo(e) , n = i.date; n.setMonth(n.getMonth() + 1); var o = this.getNextNDay(n, -1); t = [i.formatedDate, o.formatedDate] } /^\d{4}[\/|-]\d{1,2}[\/|-]\d{1,2}$/.test(e) && (t = [e, e]); var a = this._getRangeInfo(t); return a.start.time > a.end.time && t.reverse(), t }, _getRangeInfo: function(t) { var e; (t = [this.getDateInfo(t[0]), this.getDateInfo(t[1])])[0].time > t[1].time && (e = !0, t.reverse()); var i = Math.floor(t[1].time / 864e5) - Math.floor(t[0].time / 864e5) + 1 , n = new Date(t[0].time) , o = n.getDate() , a = t[1].date.getDate(); n.setDate(o + i - 1); var r = n.getDate(); if (r !== a) for (var s = 0 < n.getTime() - t[1].time ? 1 : -1; (r = n.getDate()) !== a && 0 < (n.getTime() - t[1].time) * s; ) i -= s, n.setDate(r - s); var l = Math.floor((i + t[0].day + 6) / 7) , u = e ? 1 - l : l - 1; return e && t.reverse(), { range: [t[0].formatedDate, t[1].formatedDate], start: t[0], end: t[1], allDay: i, weeks: l, nthWeek: u, fweek: t[0].day, lweek: t[1].day } }, _getDateByWeeksAndDay: function(t, e, i) { var n = this._getRangeInfo(i); if (t > n.weeks || 0 === t && e < n.fweek || t === n.weeks && e > n.lweek) return !1; var o = 7 * (t - 1) - n.fweek + e , a = new Date(n.start.time); return a.setDate(n.start.d + o), this.getDateInfo(a) } }, UT.dimensions = UT.prototype.dimensions, UT.getDimensionsInfo = UT.prototype.getDimensionsInfo, UT.create = function(i, n) { var o = []; return i.eachComponent("calendar", function(t) { var e = new UT(t,i,n); o.push(e), t.coordinateSystem = e }), i.eachSeries(function(t) { "calendar" === t.get("coordinateSystem") && (t.coordinateSystem = o[t.get("calendarIndex") || 0]) }), o } , lh.register("calendar", UT); var YT = ku.extend({ type: "calendar", coordinateSystem: null, defaultOption: { zlevel: 0, z: 2, left: 80, top: 60, cellSize: 20, orient: "horizontal", splitLine: { show: !0, lineStyle: { color: "#000", width: 1, type: "solid" } }, itemStyle: { color: "#fff", borderWidth: 1, borderColor: "#ccc" }, dayLabel: { show: !0, firstDay: 0, position: "start", margin: "50%", nameMap: "en", color: "#000" }, monthLabel: { show: !0, position: "start", margin: 5, align: "center", nameMap: "en", formatter: null, color: "#000" }, yearLabel: { show: !0, position: null, margin: 30, formatter: null, color: "#ccc", fontFamily: "sans-serif", fontWeight: "bolder", fontSize: 20 } }, init: function(t, e, i, n) { var o = Iu(t); YT.superApply(this, "init", arguments), jT(t, o) }, mergeOption: function(t, e) { YT.superApply(this, "mergeOption", arguments), jT(this.option, t) } }); function jT(t, e) { var i = t.cellSize; L(i) ? 1 === i.length && (i[1] = i[0]) : i = t.cellSize = [i, i]; var n = O([0, 1], function(t) { return function(t, e) { return null != t[xu[e][0]] || null != t[xu[e][1]] && null != t[xu[e][2]] }(e, t) && (i[t] = "auto"), null != i[t] && "auto" !== i[t] }); Mu(t, e, { type: "box", ignoreSize: n }) } var qT = { EN: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], CN: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"] } , KT = { EN: ["S", "M", "T", "W", "T", "F", "S"], CN: ["日", "一", "二", "三", "四", "五", "六"] }; Af({ type: "calendar", _tlpoints: null, _blpoints: null, _firstDayOfMonth: null, _firstDayPoints: null, render: function(t, e, i) { var n = this.group; n.removeAll(); var o = t.coordinateSystem , a = o.getRangeInfo() , r = o.getOrient(); this._renderDayRect(t, a, n), this._renderLines(t, a, r, n), this._renderYearText(t, a, r, n), this._renderMonthText(t, r, n), this._renderWeekText(t, a, r, n) }, _renderDayRect: function(t, e, i) { for (var n = t.coordinateSystem, o = t.getModel("itemStyle").getItemStyle(), a = n.getCellWidth(), r = n.getCellHeight(), s = e.start.time; s <= e.end.time; s = n.getNextNDay(s, 1).time) { var l = n.dataToRect([s], !1).tl , u = new rs({ shape: { x: l[0], y: l[1], width: a, height: r }, cursor: "default", style: o }); i.add(u) } }, _renderLines: function(i, t, n, o) { var a = this , r = i.coordinateSystem , s = i.getModel("splitLine.lineStyle").getLineStyle() , l = i.get("splitLine.show") , e = s.lineWidth; this._tlpoints = [], this._blpoints = [], this._firstDayOfMonth = [], this._firstDayPoints = []; for (var u = t.start, h = 0; u.time <= t.end.time; h++) { d(u.formatedDate), 0 === h && (u = r.getDateInfo(t.start.y + "-" + t.start.m)); var c = u.date; c.setMonth(c.getMonth() + 1), u = r.getDateInfo(c) } function d(t) { a._firstDayOfMonth.push(r.getDateInfo(t)), a._firstDayPoints.push(r.dataToRect([t], !1).tl); var e = a._getLinePointsOfOneWeek(i, t, n); a._tlpoints.push(e[0]), a._blpoints.push(e[e.length - 1]), l && a._drawSplitline(e, s, o) } d(r.getNextNDay(t.end.time, 1).formatedDate), l && this._drawSplitline(a._getEdgesPoints(a._tlpoints, e, n), s, o), l && this._drawSplitline(a._getEdgesPoints(a._blpoints, e, n), s, o) }, _getEdgesPoints: function(t, e, i) { var n = [t[0].slice(), t[t.length - 1].slice()] , o = "horizontal" === i ? 0 : 1; return n[0][o] = n[0][o] - e / 2, n[1][o] = n[1][o] + e / 2, n }, _drawSplitline: function(t, e, i) { var n = new ts({ z2: 20, shape: { points: t }, style: e }); i.add(n) }, _getLinePointsOfOneWeek: function(t, e, i) { var n = t.coordinateSystem; e = n.getDateInfo(e); for (var o = [], a = 0; a < 7; a++) { var r = n.getNextNDay(e.time, a) , s = n.dataToRect([r.time], !1); o[2 * r.day] = s.tl, o[2 * r.day + 1] = s["horizontal" === i ? "bl" : "tr"] } return o }, _formatterLabel: function(t, e) { return "string" == typeof t && t ? uu(t, e) : "function" == typeof t ? t(e) : e.nameMap }, _yearTextPositionControl: function(t, e, i, n, o) { e = e.slice(); var a = ["center", "bottom"]; "bottom" === n ? (e[1] += o, a = ["center", "top"]) : "left" === n ? e[0] -= o : "right" === n ? (e[0] += o, a = ["center", "top"]) : e[1] -= o; var r = 0; return "left" !== n && "right" !== n || (r = Math.PI / 2), { rotation: r, position: e, style: { textAlign: a[0], textVerticalAlign: a[1] } } }, _renderYearText: function(t, e, i, n) { var o = t.getModel("yearLabel"); if (o.get("show")) { var a = o.get("margin") , r = o.get("position"); r = r || ("horizontal" !== i ? "top" : "left"); var s = [this._tlpoints[this._tlpoints.length - 1], this._blpoints[0]] , l = (s[0][0] + s[1][0]) / 2 , u = (s[0][1] + s[1][1]) / 2 , h = "horizontal" === i ? 0 : 1 , c = { top: [l, s[h][1]], bottom: [l, s[1 - h][1]], left: [s[1 - h][0], u], right: [s[h][0], u] } , d = e.start.y; +e.end.y > +e.start.y && (d = d + "-" + e.end.y); var f = o.get("formatter") , p = { start: e.start.y, end: e.end.y, nameMap: d } , g = this._formatterLabel(f, p) , m = new Ur({ z2: 30 }); nl(m.style, o, { text: g }), m.attr(this._yearTextPositionControl(m, c[r], i, r, a)), n.add(m) } }, _monthTextPositionControl: function(t, e, i, n, o) { var a = "left" , r = "top" , s = t[0] , l = t[1]; return "horizontal" === i ? (l += o, e && (a = "center"), "start" === n && (r = "bottom")) : (s += o, e && (r = "middle"), "start" === n && (a = "right")), { x: s, y: l, textAlign: a, textVerticalAlign: r } }, _renderMonthText: function(t, e, i) { var n = t.getModel("monthLabel"); if (n.get("show")) { var o = n.get("nameMap") , a = n.get("margin") , r = n.get("position") , s = n.get("align") , l = [this._tlpoints, this._blpoints]; R(o) && (o = qT[o.toUpperCase()] || []); var u = "start" === r ? 0 : 1 , h = "horizontal" === e ? 0 : 1; a = "start" === r ? -a : a; for (var c = "center" === s, d = 0; d < l[u].length - 1; d++) { var f = l[u][d].slice() , p = this._firstDayOfMonth[d]; if (c) { var g = this._firstDayPoints[d]; f[h] = (g[h] + l[0][d + 1][h]) / 2 } var m = n.get("formatter") , v = o[+p.m - 1] , y = { yyyy: p.y, yy: (p.y + "").slice(2), MM: p.m, M: +p.m, nameMap: v } , x = this._formatterLabel(m, y) , _ = new Ur({ z2: 30 }); P(nl(_.style, n, { text: x }), this._monthTextPositionControl(f, c, e, r, a)), i.add(_) } } }, _weekTextPositionControl: function(t, e, i, n, o) { var a = "center" , r = "middle" , s = t[0] , l = t[1] , u = "start" === i; return "horizontal" === e ? (s = s + n + (u ? 1 : -1) * o[0] / 2, a = u ? "right" : "left") : (l = l + n + (u ? 1 : -1) * o[1] / 2, r = u ? "bottom" : "top"), { x: s, y: l, textAlign: a, textVerticalAlign: r } }, _renderWeekText: function(t, e, i, n) { var o = t.getModel("dayLabel"); if (o.get("show")) { var a = t.coordinateSystem , r = o.get("position") , s = o.get("nameMap") , l = o.get("margin") , u = a.getFirstDayOfWeek(); R(s) && (s = KT[s.toUpperCase()] || []); var h = a.getNextNDay(e.end.time, 7 - e.lweek).time , c = [a.getCellWidth(), a.getCellHeight()]; l = Rl(l, c["horizontal" === i ? 0 : 1]), "start" === r && (h = a.getNextNDay(e.start.time, -(7 + e.fweek)).time, l = -l); for (var d = 0; d < 7; d++) { var f, p = a.getNextNDay(h, d), g = a.dataToRect([p.time], !1).center; f = Math.abs((d + u) % 7); var m = new Ur({ z2: 30 }); P(nl(m.style, o, { text: s[f] }), this._weekTextPositionControl(g, i, r, l, c)), n.add(m) } } } }); var $T = { path: null, compoundPath: null, group: Ci, image: Qn, text: Ur }; yf(function(t) { var e = t.graphic; L(e) ? e[0] && e[0].elements ? t.graphic = [t.graphic[0]] : t.graphic = [{ elements: e }] : e && !e.elements && (t.graphic = [{ elements: [e] }]) }); var JT = Tf({ type: "graphic", defaultOption: { elements: [], parentId: null }, _elOptionsToUpdate: null, mergeOption: function(t) { var e = this.option.elements; this.option.elements = null, JT.superApply(this, "mergeOption", arguments), this.option.elements = e }, optionUpdated: function(t, e) { var i = this.option , n = (e ? i : t).elements , o = i.elements = e ? [] : i.elements , a = []; this._flatten(n, a); var r = Ho(o, a); Zo(r); var s = this._elOptionsToUpdate = []; E(r, function(t, e) { var i = t.option; i && (s.push(i), function(t, e) { var i = t.exist; if (e.id = t.keyInfo.id, !e.type && i && (e.type = i.type), null == e.parentId) { var n = e.parentOption; n ? e.parentId = n.id : i && (e.parentId = i.parentId) } e.parentOption = null }(t, i), function(t, e, i) { var n = P({}, i) , o = t[e] , a = i.$action || "merge"; "merge" === a ? o ? (m(o, n, !0), Mu(o, n, { ignoreSize: !0 }), Tu(i, o)) : t[e] = n : "replace" === a ? t[e] = n : "remove" === a && o && (t[e] = null) }(o, e, i), function(t, e) { if (!t) return; t.hv = e.hv = [eA(e, ["left", "right"]), eA(e, ["top", "bottom"])], "group" === t.type && (null == t.width && (t.width = e.width = 0), null == t.height && (t.height = e.height = 0)) }(o[e], i)) }, this); for (var l = o.length - 1; 0 <= l; l--) null == o[l] ? o.splice(l, 1) : delete o[l].$action }, _flatten: function(t, i, n) { E(t, function(t) { if (t) { n && (t.parentOption = n), i.push(t); var e = t.children; "group" === t.type && e && this._flatten(e, i, t), delete t.children } }, this) }, useElOptionsToUpdate: function() { var t = this._elOptionsToUpdate; return this._elOptionsToUpdate = null, t } }); function QT(t, e, i, n) { var o = i.type , a = new ($T.hasOwnProperty(o) ? $T[o] : ks(o))(i); e.add(a), n.set(t, a), a.__ecGraphicId = t } function tA(t, e) { var i = t && t.parent; i && ("group" === t.type && t.traverse(function(t) { tA(t, e) }), e.removeKey(t.__ecGraphicId), i.remove(t)) } function eA(e, t) { var i; return E(t, function(t) { null != e[t] && "auto" !== e[t] && (i = !0) }), i } Af({ type: "graphic", init: function(t, e) { this._elMap = Q(), this._lastGraphicModel }, render: function(t, e, i) { t !== this._lastGraphicModel && this._clear(), this._lastGraphicModel = t, this._updateElements(t), this._relocate(t, i) }, _updateElements: function(u) { var t = u.useElOptionsToUpdate(); if (t) { var h = this._elMap , c = this.group; E(t, function(t) { var e = t.$action , i = t.id , n = h.get(i) , o = t.parentId , a = null != o ? h.get(o) : c , r = t.style; "text" === t.type && r && (t.hv && t.hv[1] && (r.textVerticalAlign = r.textBaseline = null), !r.hasOwnProperty("textFill") && r.fill && (r.textFill = r.fill), !r.hasOwnProperty("textStroke") && r.stroke && (r.textStroke = r.stroke)); var s = function(e) { return e = P({}, e), E(["id", "parentId", "$action", "hv", "bounding"].concat(yu), function(t) { delete e[t] }), e }(t); e && "merge" !== e ? "replace" === e ? (tA(n, h), QT(i, a, s, h)) : "remove" === e && tA(n, h) : n ? n.attr(s) : QT(i, a, s, h); var l = h.get(i); l && (l.__ecGraphicWidthOption = t.width, l.__ecGraphicHeightOption = t.height, function(t, e) { var i = t.eventData; t.silent || t.ignore || i || (i = t.eventData = { componentType: "graphic", componentIndex: e.componentIndex, name: t.name }); i && (i.info = t.info) }(l, u)) }) } }, _relocate: function(t, e) { for (var i = t.option.elements, n = this.group, o = this._elMap, a = e.getWidth(), r = e.getHeight(), s = 0; s < i.length; s++) { var l = i[s]; if ((h = o.get(l.id)) && h.isGroup) { var u = (c = h.parent) === n; h.__ecGraphicWidth = Rl(h.__ecGraphicWidthOption, u ? a : c.__ecGraphicWidth) || 0, h.__ecGraphicHeight = Rl(h.__ecGraphicHeightOption, u ? r : c.__ecGraphicHeight) || 0 } } for (s = i.length - 1; 0 <= s; s--) { var h, c; l = i[s]; if (h = o.get(l.id)) Su(h, l, (c = h.parent) === n ? { width: a, height: r } : { width: c.__ecGraphicWidth, height: c.__ecGraphicHeight }, null, { hv: l.hv, boundingMode: l.bounding }) } }, _clear: function() { var e = this._elMap; e.each(function(t) { tA(t, e) }), this._elMap = Q() }, dispose: function() { this._clear() } }); var iA = {}; function nA(t, e) { iA[t] = e } function oA(t) { return iA[t] } var aA = Tf({ type: "toolbox", layoutMode: { type: "box", ignoreSize: !0 }, optionUpdated: function() { aA.superApply(this, "optionUpdated", arguments), E(this.option.feature, function(t, e) { var i = oA(e); i && m(t, i.defaultOption) }) }, defaultOption: { show: !0, z: 6, zlevel: 0, orient: "horizontal", left: "right", top: "top", backgroundColor: "transparent", borderColor: "#ccc", borderRadius: 0, borderWidth: 0, padding: 5, itemSize: 15, itemGap: 8, showTitle: !0, iconStyle: { borderColor: "#666", color: "none" }, emphasis: { iconStyle: { borderColor: "#3E98C5" } }, tooltip: { show: !1 } } }); function rA(t, e) { var i = iu(e.get("padding")) , n = e.getItemStyle(["color", "opacity"]); return n.fill = e.get("backgroundColor"), t = new rs({ shape: { x: t.x - i[3], y: t.y - i[0], width: t.width + i[1] + i[3], height: t.height + i[0] + i[2], r: e.get("borderRadius") }, style: n, silent: !0, z2: -1 }) } Af({ type: "toolbox", render: function(h, c, d, l) { var f = this.group; if (f.removeAll(), h.get("show")) { var p = +h.get("itemSize") , u = h.get("feature") || {} , g = this._features || (this._features = {}) , m = []; E(u, function(t, e) { m.push(e) }), new kf(this._featureNames || [],m).add(t).update(t).remove(T(t, null)).execute(), this._featureNames = m, function(t, e, i) { var n = e.getBoxLayoutParams() , o = e.get("padding") , a = { width: i.getWidth(), height: i.getHeight() } , r = bu(n, a, o); wu(e.get("orient"), t, e.get("itemGap"), r.width, r.height), Su(t, n, a, o) }(f, h, d), f.add(rA(f.getBoundingRect(), h)), f.eachChild(function(t) { var e = t.__title , i = t.hoverStyle; if (i && e) { var n = gn(e, An(i)) , o = t.position[0] + f.position[0] , a = !1; t.position[1] + f.position[1] + p + n.height > d.getHeight() && (i.textPosition = "top", a = !0); var r = a ? -5 - n.height : p + 8; o + n.width / 2 > d.getWidth() ? (i.textPosition = ["100%", r], i.textAlign = "right") : o - n.width / 2 < 0 && (i.textPosition = [0, r], i.textAlign = "left") } }) } function t(t, e) { var i, n = m[t], o = m[e], a = u[n], r = new Cl(a,h,h.ecModel); if (l && null != l.newTitle && l.featureName === n && (a.title = l.newTitle), n && !o) { if (function(t) { return 0 === t.indexOf("my") }(n)) i = { model: r, onclick: r.option.onclick, featureName: n }; else { var s = oA(n); if (!s) return; i = new s(r,c,d) } g[n] = i } else { if (!(i = g[o])) return; i.model = r, i.ecModel = c, i.api = d } n || !o ? r.get("show") && !i.unusable ? (function(o, a, t) { var r = o.getModel("iconStyle") , s = o.getModel("emphasis.iconStyle") , e = a.getIcons ? a.getIcons() : o.get("icon") , l = o.get("title") || {}; if ("string" == typeof e) { var i = e , n = l; l = {}, (e = {})[t] = i, l[t] = n } var u = o.iconPaths = {}; E(e, function(t, e) { var i = yl(t, {}, { x: -p / 2, y: -p / 2, width: p, height: p }); i.setStyle(r.getItemStyle()), i.hoverStyle = s.getItemStyle(), i.setStyle({ text: l[e], textAlign: s.get("textAlign"), textBorderRadius: s.get("textBorderRadius"), textPadding: s.get("textPadding"), textFill: null }); var n = h.getModel("tooltip"); n && n.get("show") && i.attr("tooltip", P({ content: l[e], formatter: n.get("formatter", !0) || function() { return l[e] } , formatterParams: { componentType: "toolbox", name: e, title: l[e], $vars: ["name", "title"] }, position: n.get("position", !0) || "bottom" }, n.option)), $s(i), h.get("showTitle") && (i.__title = l[e], i.on("mouseover", function() { var t = s.getItemStyle() , e = "vertical" === h.get("orient") ? null == h.get("right") ? "right" : "left" : null == h.get("bottom") ? "bottom" : "top"; i.setStyle({ textFill: s.get("textFill") || t.fill || t.stroke || "#000", textBackgroundColor: s.get("textBackgroundColor"), textPosition: s.get("textPosition") || e }) }).on("mouseout", function() { i.setStyle({ textFill: null, textBackgroundColor: null }) })), i.trigger(o.get("iconStatus." + e) || "normal"), f.add(i), i.on("click", A(a.onclick, a, c, d, e)), u[e] = i }) }(r, i, n), r.setIconStatus = function(t, e) { var i = this.option , n = this.iconPaths; i.iconStatus = i.iconStatus || {}, i.iconStatus[t] = e, n[t] && n[t].trigger(e) } , i.render && i.render(r, c, d, l)) : i.remove && i.remove(c, d) : i.dispose && i.dispose(c, d) } }, updateView: function(t, e, i, n) { E(this._features, function(t) { t.updateView && t.updateView(t.model, e, i, n) }) }, remove: function(e, i) { E(this._features, function(t) { t.remove && t.remove(e, i) }), this.group.removeAll() }, dispose: function(e, i) { E(this._features, function(t) { t.dispose && t.dispose(e, i) }) } }); var sA = Oc.toolbox.saveAsImage; function lA(t) { this.model = t } lA.defaultOption = { show: !0, icon: "M4.7,22.9L29.3,45.5L54.7,23.4M4.6,43.6L4.6,58L53.8,58L53.8,43.6M29.2,45.1L29.2,0", title: sA.title, type: "png", connectedBackgroundColor: "#fff", name: "", excludeComponents: ["toolbox"], pixelRatio: 1, lang: sA.lang.slice() }, lA.prototype.unusable = !v.canvasSupported, lA.prototype.onclick = function(t, e) { var i = this.model , n = i.get("name") || t.get("title.0.text") || "echarts" , o = "svg" === e.getZr().painter.getType() ? "svg" : i.get("type", !0) || "png" , a = e.getConnectedDataURL({ type: o, backgroundColor: i.get("backgroundColor", !0) || t.get("backgroundColor") || "#fff", connectedBackgroundColor: i.get("connectedBackgroundColor"), excludeComponents: i.get("excludeComponents"), pixelRatio: i.get("pixelRatio") }); if ("function" != typeof MouseEvent || v.browser.ie || v.browser.edge) if (window.navigator.msSaveOrOpenBlob) { for (var r = atob(a.split(",")[1]), s = r.length, l = new Uint8Array(s); s--; ) l[s] = r.charCodeAt(s); var u = new Blob([l]); window.navigator.msSaveOrOpenBlob(u, n + "." + o) } else { var h = i.get("lang") , c = ''; window.open().document.write(c) } else { var d = document.createElement("a"); d.download = n + "." + o, d.target = "_blank", d.href = a; var f = new MouseEvent("click",{ view: window, bubbles: !0, cancelable: !1 }); d.dispatchEvent(f) } } , nA("saveAsImage", lA); var uA = Oc.toolbox.magicType , hA = "__ec_magicType_stack__"; function cA(t) { this.model = t } cA.defaultOption = { show: !0, type: [], icon: { line: "M4.1,28.9h7.1l9.3-22l7.4,38l9.7-19.7l3,12.8h14.9M4.1,58h51.4", bar: "M6.7,22.9h10V48h-10V22.9zM24.9,13h10v35h-10V13zM43.2,2h10v46h-10V2zM3.1,58h53.7", stack: "M8.2,38.4l-8.4,4.1l30.6,15.3L60,42.5l-8.1-4.1l-21.5,11L8.2,38.4z M51.9,30l-8.1,4.2l-13.4,6.9l-13.9-6.9L8.2,30l-8.4,4.2l8.4,4.2l22.2,11l21.5-11l8.1-4.2L51.9,30z M51.9,21.7l-8.1,4.2L35.7,30l-5.3,2.8L24.9,30l-8.4-4.1l-8.3-4.2l-8.4,4.2L8.2,30l8.3,4.2l13.9,6.9l13.4-6.9l8.1-4.2l8.1-4.1L51.9,21.7zM30.4,2.2L-0.2,17.5l8.4,4.1l8.3,4.2l8.4,4.2l5.5,2.7l5.3-2.7l8.1-4.2l8.1-4.2l8.1-4.1L30.4,2.2z" }, title: k(uA.title), option: {}, seriesIndex: {} }; var dA = cA.prototype; dA.getIcons = function() { var t = this.model , e = t.get("icon") , i = {}; return E(t.get("type"), function(t) { e[t] && (i[t] = e[t]) }), i } ; var fA = { line: function(t, e, i, n) { if ("bar" === t) return m({ id: e, type: "line", data: i.get("data"), stack: i.get("stack"), markPoint: i.get("markPoint"), markLine: i.get("markLine") }, n.get("option.line") || {}, !0) }, bar: function(t, e, i, n) { if ("line" === t) return m({ id: e, type: "bar", data: i.get("data"), stack: i.get("stack"), markPoint: i.get("markPoint"), markLine: i.get("markLine") }, n.get("option.bar") || {}, !0) }, stack: function(t, e, i, n) { var o = i.get("stack") === hA; if ("line" === t || "bar" === t) return n.setIconStatus("stack", o ? "normal" : "emphasis"), m({ id: e, stack: o ? "" : hA }, n.get("option.stack") || {}, !0) } } , pA = [["line", "bar"], ["stack"]]; dA.onclick = function(u, t, h) { var c = this.model , e = c.get("seriesIndex." + h); if (fA[h]) { var i, d = { series: [] }; if (E(pA, function(t) { 0 <= _(t, h) && E(t, function(t) { c.setIconStatus(t, "normal") }) }), c.setIconStatus(h, "emphasis"), u.eachComponent({ mainType: "series", query: null == e ? null : { seriesIndex: e } }, function(t) { var e = t.subType , i = t.id , n = fA[h](e, i, t, c); n && (D(n, t.option), d.series.push(n)); var o = t.coordinateSystem; if (o && "cartesian2d" === o.type && ("line" === h || "bar" === h)) { var a = o.getAxesByScale("ordinal")[0]; if (a) { var r = a.dim + "Axis" , s = u.queryComponents({ mainType: r, index: t.get(name + "Index"), id: t.get(name + "Id") })[0].componentIndex; d[r] = d[r] || []; for (var l = 0; l <= s; l++) d[r][s] = d[r][s] || {}; d[r][s].boundaryGap = "bar" === h } } }), "stack" === h) i = d.series && d.series[0] && d.series[0].stack === hA ? m({ stack: uA.title.tiled }, uA.title) : k(uA.title); t.dispatchAction({ type: "changeMagicType", currentType: h, newOption: d, newTitle: i, featureName: "magicType" }) } } , _f({ type: "changeMagicType", event: "magicTypeChanged", update: "prepareAndUpdate" }, function(t, e) { e.mergeOption(t.newOption) }), nA("magicType", cA); var gA = Oc.toolbox.dataView , mA = new Array(60).join("-") , vA = "\t"; function yA(t) { var e = function(t) { var o = {} , a = [] , r = []; return t.eachRawSeries(function(t) { var e = t.coordinateSystem; if (!e || "cartesian2d" !== e.type && "polar" !== e.type) a.push(t); else { var i = e.getBaseAxis(); if ("category" === i.type) { var n = i.dim + "_" + i.index; o[n] || (o[n] = { categoryAxis: i, valueAxis: e.getOtherAxis(i), series: [] }, r.push({ axisDim: i.dim, axisIndex: i.index })), o[n].series.push(t) } else a.push(t) } }), { seriesGroupByCategoryAxis: o, other: a, meta: r } }(t); return { value: M([function(t) { var h = []; return E(t, function(t, e) { var i = t.categoryAxis , n = t.valueAxis.dim , o = [" "].concat(O(t.series, function(t) { return t.name })) , a = [i.model.getCategories()]; E(t.series, function(t) { a.push(t.getRawData().mapArray(n, function(t) { return t })) }); for (var r = [o.join(vA)], s = 0; s < a[0].length; s++) { for (var l = [], u = 0; u < a.length; u++) l.push(a[u][s]); r.push(l.join(vA)) } h.push(r.join("\n")) }), h.join("\n\n" + mA + "\n\n") }(e.seriesGroupByCategoryAxis), function(t) { return O(t, function(t) { var o = t.getRawData() , a = [t.name] , r = []; return o.each(o.dimensions, function() { for (var t = arguments.length, e = arguments[t - 1], i = o.getName(e), n = 0; n < t - 1; n++) r[n] = arguments[n]; a.push((i ? i + vA : "") + r.join(vA)) }), a.join("\n") }).join("\n\n" + mA + "\n\n") }(e.other)], function(t) { return t.replace(/[\n\t\s]/g, "") }).join("\n\n" + mA + "\n\n"), meta: e.meta } } function xA(t) { return t.replace(/^\s\s*/, "").replace(/\s\s*$/, "") } var _A = new RegExp("[" + vA + "]+","g"); function wA(t, a) { var e = t.split(new RegExp("\n*" + mA + "\n*","g")) , r = { series: [] }; return E(e, function(t, e) { if (function(t) { if (0 <= t.slice(0, t.indexOf("\n")).indexOf(vA)) return !0 }(t)) { var i = function(t) { for (var e = t.split(/\n+/g), i = [], n = O(xA(e.shift()).split(_A), function(t) { return { name: t, data: [] } }), o = 0; o < e.length; o++) { var a = xA(e[o]).split(_A); i.push(a.shift()); for (var r = 0; r < a.length; r++) n[r] && (n[r].data[o] = a[r]) } return { series: n, categories: i } }(t) , n = a[e] , o = n.axisDim + "Axis"; n && (r[o] = r[o] || [], r[o][n.axisIndex] = { data: i.categories }, r.series = r.series.concat(i.series)) } else { i = function(t) { for (var e = t.split(/\n+/g), i = xA(e.shift()), n = [], o = 0; o < e.length; o++) { var a, r = xA(e[o]).split(_A), s = "", l = !1; a = isNaN(r[0]) ? (l = !0, s = r[0], r = r.slice(1), n[o] = { name: s, value: [] }, n[o].value) : n[o] = []; for (var u = 0; u < r.length; u++) a.push(+r[u]); 1 === a.length && (l ? n[o].value = a[0] : n[o] = a[0]) } return { name: i, data: n } }(t); r.series.push(i) } }), r } function bA(t) { this._dom = null, this.model = t } bA.defaultOption = { show: !0, readOnly: !1, optionToContent: null, contentToOption: null, icon: "M17.5,17.3H33 M17.5,17.3H33 M45.4,29.5h-28 M11.5,2v56H51V14.8L38.4,2H11.5z M38.4,2.2v12.7H51 M45.4,41.7h-28", title: k(gA.title), lang: k(gA.lang), backgroundColor: "#fff", textColor: "#000", textareaColor: "#fff", textareaBorderColor: "#333", buttonColor: "#c23531", buttonTextColor: "#fff" }, bA.prototype.onclick = function(t, e) { var i = e.getDom() , n = this.model; this._dom && i.removeChild(this._dom); var o = document.createElement("div"); o.style.cssText = "position:absolute;left:5px;top:5px;bottom:5px;right:5px;", o.style.backgroundColor = n.get("backgroundColor") || "#fff"; var a = document.createElement("h4") , r = n.get("lang") || []; a.innerHTML = r[0] || n.get("title"), a.style.cssText = "margin: 10px 20px;", a.style.color = n.get("textColor"); var s = document.createElement("div") , l = document.createElement("textarea"); s.style.cssText = "display:block;width:100%;overflow:auto;"; var u = n.get("optionToContent") , h = n.get("contentToOption") , c = yA(t); if ("function" == typeof u) { var d = u(e.getOption()); "string" == typeof d ? s.innerHTML = d : G(d) && s.appendChild(d) } else s.appendChild(l), l.readOnly = n.get("readOnly"), l.style.cssText = "width:100%;height:100%;font-family:monospace;font-size:14px;line-height:1.6rem;", l.style.color = n.get("textColor"), l.style.borderColor = n.get("textareaBorderColor"), l.style.backgroundColor = n.get("textareaColor"), l.value = c.value; var f = c.meta , p = document.createElement("div"); p.style.cssText = "position:absolute;bottom:0;left:0;right:0;"; var g = "float:right;margin-right:20px;border:none;cursor:pointer;padding:2px 5px;font-size:12px;border-radius:3px" , m = document.createElement("div") , v = document.createElement("div"); g += ";background-color:" + n.get("buttonColor"), g += ";color:" + n.get("buttonTextColor"); var y = this; function x() { i.removeChild(o), y._dom = null } Ut(m, "click", x), Ut(v, "click", function() { var t; try { t = "function" == typeof h ? h(s, e.getOption()) : wA(l.value, f) } catch (t) { throw x(), new Error("Data view format error " + t) } t && e.dispatchAction({ type: "changeDataView", newOption: t }), x() }), m.innerHTML = r[1], v.innerHTML = r[2], v.style.cssText = g, m.style.cssText = g, n.get("readOnly") || p.appendChild(v), p.appendChild(m), o.appendChild(a), o.appendChild(s), o.appendChild(p), s.style.height = i.clientHeight - 80 + "px", i.appendChild(o), this._dom = o } , bA.prototype.remove = function(t, e) { this._dom && e.getDom().removeChild(this._dom) } , bA.prototype.dispose = function(t, e) { this.remove(t, e) } , nA("dataView", bA), _f({ type: "changeDataView", event: "dataViewChanged", update: "prepareAndUpdate" }, function(t, n) { var o = []; E(t.newOption.series, function(t) { var e = n.getSeriesByName(t.name)[0]; if (e) { var i = e.get("data"); o.push({ name: t.name, data: function(t, n) { return O(t, function(t, e) { var i = n && n[e]; return z(i) && !L(i) ? (z(t) && !L(t) && (t = t.value), D({ value: t }, i)) : t }) }(t.data, i) }) } else o.push(P({ type: "scatter" }, t)) }), n.mergeOption(D({ series: o }, t.newOption)) }); var SA = E , MA = _ , IA = T , TA = ["dataToPoint", "pointToData"] , AA = ["grid", "xAxis", "yAxis", "geo", "graph", "polar", "radiusAxis", "angleAxis", "bmap"]; function DA(t, e, i) { var n = this._targetInfoList = [] , o = {} , a = kA(e, t); SA(PA, function(t, e) { i && i.include && !(0 <= MA(i.include, e)) || t(a, n, o) }) } var CA = DA.prototype; function LA(t) { return t[0] > t[1] && t.reverse(), t } function kA(t, e) { return Ko(t, e, { includeMainTypes: AA }) } CA.setOutputRanges = function(t, e) { this.matchOutputRanges(t, e, function(t, e, i) { if ((t.coordRanges || (t.coordRanges = [])).push(e), !t.coordRange) { t.coordRange = e; var n = EA[t.brushType](0, i, e); t.__rangeOffset = { offset: zA[t.brushType](n.values, t.range, [1, 1]), xyMinMax: n.xyMinMax } } }) } , CA.matchOutputRanges = function(t, n, o) { SA(t, function(i) { var t = this.findTargetInfo(i, n); t && !0 !== t && E(t.coordSyses, function(t) { var e = EA[i.brushType](1, t, i.range); o(i, e.values, t, n) }) }, this) } , CA.setInputRanges = function(t, o) { SA(t, function(t) { var e = this.findTargetInfo(t, o); if (t.range = t.range || [], e && !0 !== e) { t.panelId = e.panelId; var i = EA[t.brushType](0, e.coordSys, t.coordRange) , n = t.__rangeOffset; t.range = n ? zA[t.brushType](i.values, n.offset, function(t, e) { var i = VA(t) , n = VA(e) , o = [i[0] / n[0], i[1] / n[1]]; return isNaN(o[0]) && (o[0] = 1), isNaN(o[1]) && (o[1] = 1), o }(i.xyMinMax, n.xyMinMax)) : i.values } }, this) } , CA.makePanelOpts = function(i, n) { return O(this._targetInfoList, function(t) { var e = t.getPanelRect(); return { panelId: t.panelId, defaultBrushType: n && n(t), clipPath: eS(e), isTargetByCursor: nS(e, i, t.coordSysModel), getLinearBrushOtherExtent: iS(e) } }) } , CA.controlSeries = function(t, e, i) { var n = this.findTargetInfo(t, i); return !0 === n || n && 0 <= MA(n.coordSyses, e.coordinateSystem) } , CA.findTargetInfo = function(t, e) { for (var i = this._targetInfoList, n = kA(e, t), o = 0; o < i.length; o++) { var a = i[o] , r = t.panelId; if (r) { if (a.panelId === r) return a } else for (o = 0; o < NA.length; o++) if (NA[o](n, a)) return a } return !0 } ; var PA = { grid: function(t, n) { var o = t.xAxisModels , a = t.yAxisModels , e = t.gridModels , i = Q() , r = {} , s = {}; (o || a || e) && (SA(o, function(t) { var e = t.axis.grid.model; i.set(e.id, e), r[e.id] = !0 }), SA(a, function(t) { var e = t.axis.grid.model; i.set(e.id, e), s[e.id] = !0 }), SA(e, function(t) { i.set(t.id, t), r[t.id] = !0, s[t.id] = !0 }), i.each(function(t) { var e = t.coordinateSystem , i = []; SA(e.getCartesians(), function(t, e) { (0 <= MA(o, t.getAxis("x").model) || 0 <= MA(a, t.getAxis("y").model)) && i.push(t) }), n.push({ panelId: "grid--" + t.id, gridModel: t, coordSysModel: t, coordSys: i[0], coordSyses: i, getPanelRect: OA.grid, xAxisDeclared: r[t.id], yAxisDeclared: s[t.id] }) })) }, geo: function(t, i) { SA(t.geoModels, function(t) { var e = t.coordinateSystem; i.push({ panelId: "geo--" + t.id, geoModel: t, coordSysModel: t, coordSys: e, coordSyses: [e], getPanelRect: OA.geo }) }) } } , NA = [function(t, e) { var i = t.xAxisModel , n = t.yAxisModel , o = t.gridModel; return !o && i && (o = i.axis.grid.model), !o && n && (o = n.axis.grid.model), o && o === e.gridModel } , function(t, e) { var i = t.geoModel; return i && i === e.geoModel } ] , OA = { grid: function() { return this.coordSys.grid.getRect().clone() }, geo: function() { var t = this.coordSys , e = t.getBoundingRect().clone(); return e.applyTransform(fl(t)), e } } , EA = { lineX: IA(RA, 0), lineY: IA(RA, 1), rect: function(t, e, i) { var n = e[TA[t]]([i[0][0], i[1][0]]) , o = e[TA[t]]([i[0][1], i[1][1]]) , a = [LA([n[0], o[0]]), LA([n[1], o[1]])]; return { values: a, xyMinMax: a } }, polygon: function(i, n, t) { var o = [[1 / 0, -1 / 0], [1 / 0, -1 / 0]]; return { values: O(t, function(t) { var e = n[TA[i]](t); return o[0][0] = Math.min(o[0][0], e[0]), o[1][0] = Math.min(o[1][0], e[1]), o[0][1] = Math.max(o[0][1], e[0]), o[1][1] = Math.max(o[1][1], e[1]), e }), xyMinMax: o } } }; function RA(t, e, i, n) { var o = i.getAxis(["x", "y"][t]) , a = LA(O([0, 1], function(t) { return e ? o.coordToData(o.toLocalCoord(n[t])) : o.toGlobalCoord(o.dataToCoord(n[t])) })) , r = []; return r[t] = a, r[1 - t] = [NaN, NaN], { values: a, xyMinMax: r } } var zA = { lineX: IA(BA, 0), lineY: IA(BA, 1), rect: function(t, e, i) { return [[t[0][0] - i[0] * e[0][0], t[0][1] - i[0] * e[0][1]], [t[1][0] - i[1] * e[1][0], t[1][1] - i[1] * e[1][1]]] }, polygon: function(t, i, n) { return O(t, function(t, e) { return [t[0] - n[0] * i[e][0], t[1] - n[1] * i[e][1]] }) } }; function BA(t, e, i, n) { return [e[0] - n[t] * i[0], e[1] - n[t] * i[1]] } function VA(t) { return t ? [t[0][1] - t[0][0], t[1][1] - t[1][0]] : [NaN, NaN] } var GA = E , FA = "\0_ec_hist_store"; function WA(t) { var e = t[FA]; return e = e || (t[FA] = [{}]) } ku.registerSubTypeDefaulter("dataZoom", function() { return "slider" }); var HA = ["cartesian2d", "polar", "singleAxis"]; var ZA, UA, XA, YA, jA = (UA = ["axisIndex", "axis", "index", "id"], XA = O(ZA = (ZA = ["x", "y", "z", "radius", "angle", "single"]).slice(), fu), YA = O(UA = (UA || []).slice(), fu), function(o, a) { E(ZA, function(t, e) { for (var i = { name: t, capital: XA[e] }, n = 0; n < UA.length; n++) i[UA[n]] = t + YA[n]; o.call(a, i) }) } ); function qA(o, a, r) { return function(t) { var e, i = { nodes: [], records: {} }; if (a(function(t) { i.records[t.name] = {} }), !t) return i; for (s(t, i); e = !1, o(n), e; ) ; function n(t) { !function(t, e) { return 0 <= _(e.nodes, t) }(t, i) && function(t, i) { var n = !1; return a(function(e) { E(r(t, e) || [], function(t) { i.records[e.name][t] && (n = !0) }) }), n }(t, i) && (s(t, i), e = !0) } return i } ; function s(t, i) { i.nodes.push(t), a(function(e) { E(r(t, e) || [], function(t) { i.records[e.name][t] = !0 }) }) } } function KA(t, e, i, n) { this._dimName = t, this._axisIndex = e, this._valueWindow, this._percentWindow, this._dataExtent, this._minMaxSpan, this.ecModel = n, this._dataZoomModel = i } var $A = E , JA = Bl; function QA(t, e) { var i = t.getAxisModel() , n = t._percentWindow , o = t._valueWindow; if (n) { var a = Fl(o, [0, 500]); a = Math.min(a, 20); var r = e || 0 === n[0] && 100 === n[1]; i.setRange(r ? null : +o[0].toFixed(a), r ? null : +o[1].toFixed(a)) } } KA.prototype = { constructor: KA, hostedBy: function(t) { return this._dataZoomModel === t }, getDataValueWindow: function() { return this._valueWindow.slice() }, getDataPercentWindow: function() { return this._percentWindow.slice() }, getTargetSeriesModels: function() { var n = [] , o = this.ecModel; return o.eachSeries(function(t) { if (function(t) { return 0 <= _(HA, t) }(t.get("coordinateSystem"))) { var e = this._dimName , i = o.queryComponents({ mainType: e + "Axis", index: t.get(e + "AxisIndex"), id: t.get(e + "AxisId") })[0]; this._axisIndex === (i && i.componentIndex) && n.push(t) } }, this), n }, getAxisModel: function() { return this.ecModel.getComponent(this._dimName + "Axis", this._axisIndex) }, getOtherAxisModel: function() { var t, e, i, n = this._dimName, o = this.ecModel, a = this.getAxisModel(); return t = "x" === n || "y" === n ? (e = "gridIndex", "x" === n ? "y" : "x") : (e = "polarIndex", "angle" === n ? "radius" : "angle"), o.eachComponent(t + "Axis", function(t) { (t.get(e) || 0) === (a.get(e) || 0) && (i = t) }), i }, getMinMaxSpan: function() { return k(this._minMaxSpan) }, calculateDataWindow: function(o) { var a, r = this._dataExtent, s = this.getAxisModel().axis.scale, l = this._dataZoomModel.getRangePropMode(), u = [0, 100], h = [], c = []; $A(["start", "end"], function(t, e) { var i = o[t] , n = o[t + "Value"]; "percent" === l[e] ? (null == i && (i = u[e]), n = s.parse(El(i, u, r))) : (a = !0, i = El(n = null == n ? r[e] : s.parse(n), r, u)), c[e] = n, h[e] = i }), JA(c), JA(h); var d = this._minMaxSpan; function t(t, e, i, n, o) { var a = o ? "Span" : "ValueSpan"; Jw(0, t, i, "all", d["min" + a], d["max" + a]); for (var r = 0; r < 2; r++) e[r] = El(t[r], i, n, !0), o && (e[r] = s.parse(e[r])) } return a ? t(c, h, r, u, !1) : t(h, c, u, r, !0), { valueWindow: c, percentWindow: h } }, reset: function(t) { if (t === this._dataZoomModel) { var e = this.getTargetSeriesModels(); this._dataExtent = function(t, e, i) { var n = [1 / 0, -1 / 0]; $A(i, function(t) { var i = t.getData(); i && $A(i.mapDimension(e, !0), function(t) { var e = i.getApproximateExtent(t); e[0] < n[0] && (n[0] = e[0]), e[1] > n[1] && (n[1] = e[1]) }) }), n[1] < n[0] && (n = [NaN, NaN]); return function(t, e) { var i = t.getAxisModel() , n = i.getMin(!0) , o = "category" === i.get("type") , a = o && i.getCategories().length; null != n && "dataMin" !== n && "function" != typeof n ? e[0] = n : o && (e[0] = 0 < a ? 0 : NaN); var r = i.getMax(!0); null != r && "dataMax" !== r && "function" != typeof r ? e[1] = r : o && (e[1] = 0 < a ? a - 1 : NaN); i.get("scale", !0) || (0 < e[0] && (e[0] = 0), e[1] < 0 && (e[1] = 0)) }(t, n), n }(this, this._dimName, e), function(n) { var o = n._minMaxSpan = {} , a = n._dataZoomModel , r = n._dataExtent; $A(["min", "max"], function(t) { var e = a.get(t + "Span") , i = a.get(t + "ValueSpan"); null != i && (i = n.getAxisModel().axis.scale.parse(i)), null != i ? e = El(r[0] + i, r, [0, 100], !0) : null != e && (i = El(e, [0, 100], r, !0) - r[0]), o[t + "Span"] = e, o[t + "ValueSpan"] = i }) }(this); var i = this.calculateDataWindow(t.settledOption); this._valueWindow = i.valueWindow, this._percentWindow = i.percentWindow, QA(this) } }, restore: function(t) { t === this._dataZoomModel && (this._valueWindow = this._percentWindow = null, QA(this, !0)) }, filterData: function(t, e) { if (t === this._dataZoomModel) { var n = this._dimName , i = this.getTargetSeriesModels() , o = t.get("filterMode") , c = this._valueWindow; "none" !== o && $A(i, function(i) { var u = i.getData() , h = u.mapDimension(n, !0); h.length && ("weakFilter" === o ? u.filterSelf(function(t) { for (var e, i, n, o = 0; o < h.length; o++) { var a = u.get(h[o], t) , r = !isNaN(a) , s = a < c[0] , l = a > c[1]; if (r && !s && !l) return !0; r && (n = !0), s && (e = !0), l && (i = !0) } return n && e && i }) : $A(h, function(t) { if ("empty" === o) i.setData(u = u.map(t, function(t) { return function(t) { return t >= c[0] && t <= c[1] }(t) ? t : NaN })); else { var e = {}; e[t] = c, u.selectRange(e) } }), $A(h, function(t) { u.setApproximateExtent(c, t) })) }) } } }; var tD = E , eD = jA , iD = Tf({ type: "dataZoom", dependencies: ["xAxis", "yAxis", "zAxis", "radiusAxis", "angleAxis", "singleAxis", "series"], defaultOption: { zlevel: 0, z: 4, orient: null, xAxisIndex: null, yAxisIndex: null, filterMode: "filter", throttle: null, start: 0, end: 100, startValue: null, endValue: null, minSpan: null, maxSpan: null, minValueSpan: null, maxValueSpan: null, rangeMode: null }, init: function(t, e, i) { this._dataIntervalByAxis = {}, this._dataInfo = {}, this._axisProxies = {}, this.textStyleModel, this._autoThrottle = !0, this._rangePropMode = ["percent", "percent"]; var n = nD(t); this.settledOption = n, this.mergeDefaultAndTheme(t, i), this.doInit(n) }, mergeOption: function(t) { var e = nD(t); m(this.option, t, !0), m(this.settledOption, e, !0), this.doInit(e) }, doInit: function(t) { var i = this.option; v.canvasSupported || (i.realtime = !1), this._setDefaultThrottle(t), oD(this, t); var n = this.settledOption; tD([["start", "startValue"], ["end", "endValue"]], function(t, e) { "value" === this._rangePropMode[e] && (i[t[0]] = n[t[0]] = null) }, this), this.textStyleModel = this.getModel("textStyle"), this._resetTarget(), this._giveAxisProxies() }, _giveAxisProxies: function() { var r = this._axisProxies; this.eachTargetAxis(function(t, e, i, n) { var o = this.dependentModels[t.axis][e] , a = o.__dzAxisProxy || (o.__dzAxisProxy = new KA(t.name,e,this,n)); r[t.name + "_" + e] = a }, this) }, _resetTarget: function() { var i = this.option , t = this._judgeAutoMode(); eD(function(t) { var e = t.axisIndex; i[e] = Vo(i[e]) }, this), "axisIndex" === t ? this._autoSetAxisIndex() : "orient" === t && this._autoSetOrient() }, _judgeAutoMode: function() { var e = this.option , i = !1; eD(function(t) { null != e[t.axisIndex] && (i = !0) }, this); var t = e.orient; return null == t && i ? "orient" : i ? void 0 : (null == t && (e.orient = "horizontal"), "axisIndex") }, _autoSetAxisIndex: function() { var a = !0 , e = this.get("orient", !0) , r = this.option , t = this.dependentModels; if (a) { var i = "vertical" === e ? "y" : "x"; t[i + "Axis"].length ? (r[i + "AxisIndex"] = [0], a = !1) : tD(t.singleAxis, function(t) { a && t.get("orient", !0) === e && (r.singleAxisIndex = [t.componentIndex], a = !1) }) } a && eD(function(t) { if (a) { var e = [] , i = this.dependentModels[t.axis]; if (i.length && !e.length) for (var n = 0, o = i.length; n < o; n++) "category" === i[n].get("type") && e.push(n); (r[t.axisIndex] = e).length && (a = !1) } }, this), a && this.ecModel.eachSeries(function(o) { this._isSeriesHasAllAxesTypeOf(o, "value") && eD(function(t) { var e = r[t.axisIndex] , i = o.get(t.axisIndex) , n = o.get(t.axisId); _(e, i = o.ecModel.queryComponents({ mainType: t.axis, index: i, id: n })[0].componentIndex) < 0 && e.push(i) }) }, this) }, _autoSetOrient: function() { var e; this.eachTargetAxis(function(t) { e = e || t.name }, this), this.option.orient = "y" === e ? "vertical" : "horizontal" }, _isSeriesHasAllAxesTypeOf: function(n, o) { var a = !0; return eD(function(t) { var e = n.get(t.axisIndex) , i = this.dependentModels[t.axis][e]; i && i.get("type") === o || (a = !1) }, this), a }, _setDefaultThrottle: function(t) { if (t.hasOwnProperty("throttle") && (this._autoThrottle = !1), this._autoThrottle) { var e = this.ecModel.option; this.option.throttle = e.animation && 0 < e.animationDurationUpdate ? 100 : 20 } }, getFirstTargetAxisModel: function() { var i; return eD(function(t) { if (null == i) { var e = this.get(t.axisIndex); e.length && (i = this.dependentModels[t.axis][e[0]]) } }, this), i }, eachTargetAxis: function(i, n) { var o = this.ecModel; eD(function(e) { tD(this.get(e.axisIndex), function(t) { i.call(n, e, t, this, o) }, this) }, this) }, getAxisProxy: function(t, e) { return this._axisProxies[t + "_" + e] }, getAxisModel: function(t, e) { var i = this.getAxisProxy(t, e); return i && i.getAxisModel() }, setRawRange: function(e) { var i = this.option , n = this.settledOption; tD([["start", "startValue"], ["end", "endValue"]], function(t) { null == e[t[0]] && null == e[t[1]] || (i[t[0]] = n[t[0]] = e[t[0]], i[t[1]] = n[t[1]] = e[t[1]]) }, this), oD(this, e) }, setCalculatedRange: function(e) { var i = this.option; tD(["start", "startValue", "end", "endValue"], function(t) { i[t] = e[t] }) }, getPercentRange: function() { var t = this.findRepresentativeAxisProxy(); if (t) return t.getDataPercentWindow() }, getValueRange: function(t, e) { if (null != t || null != e) return this.getAxisProxy(t, e).getDataValueWindow(); var i = this.findRepresentativeAxisProxy(); return i ? i.getDataValueWindow() : void 0 }, findRepresentativeAxisProxy: function(t) { if (t) return t.__dzAxisProxy; var e = this._axisProxies; for (var i in e) if (e.hasOwnProperty(i) && e[i].hostedBy(this)) return e[i]; for (var i in e) if (e.hasOwnProperty(i) && !e[i].hostedBy(this)) return e[i] }, getRangePropMode: function() { return this._rangePropMode.slice() } }); function nD(e) { var i = {}; return tD(["start", "end", "startValue", "endValue", "throttle"], function(t) { e.hasOwnProperty(t) && (i[t] = e[t]) }), i } function oD(t, o) { var a = t._rangePropMode , r = t.get("rangeMode"); tD([["start", "startValue"], ["end", "endValue"]], function(t, e) { var i = null != o[t[0]] , n = null != o[t[1]]; i && !n ? a[e] = "percent" : !i && n ? a[e] = "value" : r ? a[e] = r[e] : i && (a[e] = "percent") }) } var aD = gc.extend({ type: "dataZoom", render: function(t, e, i, n) { this.dataZoomModel = t, this.ecModel = e, this.api = i }, getTargetCoordInfo: function() { var t = this.dataZoomModel , o = this.ecModel , a = {}; return t.eachTargetAxis(function(t, e) { var i = o.getComponent(t.axis, e); if (i) { var n = i.getCoordSysModel(); n && function(t, e, i, n) { for (var o, a = 0; a < i.length; a++) if (i[a].model === t) { o = i[a]; break } o || i.push(o = { model: t, axisModels: [], coordIndex: n }); o.axisModels.push(e) }(n, i, a[n.mainType] || (a[n.mainType] = []), n.componentIndex) } }, this), a } }); iD.extend({ type: "dataZoom.select" }), aD.extend({ type: "dataZoom.select" }), xf({ getTargetSeries: function(t) { var n = Q(); return t.eachComponent("dataZoom", function(t) { t.eachTargetAxis(function(t, e, i) { E(i.getAxisProxy(t.name, e).getTargetSeriesModels(), function(t) { n.set(t.uid, t) }) }) }), n }, modifyOutputEnd: !0, overallReset: function(t, n) { t.eachComponent("dataZoom", function(t) { t.eachTargetAxis(function(t, e, i) { i.getAxisProxy(t.name, e).reset(i, n) }), t.eachTargetAxis(function(t, e, i) { i.getAxisProxy(t.name, e).filterData(i, n) }) }), t.eachComponent("dataZoom", function(t) { var e = t.findRepresentativeAxisProxy() , i = e.getDataPercentWindow() , n = e.getDataValueWindow(); t.setCalculatedRange({ start: i[0], end: i[1], startValue: n[0], endValue: n[1] }) }) } }), _f("dataZoom", function(i, t) { var n = qA(A(t.eachComponent, t, "dataZoom"), jA, function(t, e) { return t.get(e.axisIndex) }) , o = []; t.eachComponent({ mainType: "dataZoom", query: i }, function(t, e) { o.push.apply(o, n(t).nodes) }), E(o, function(t, e) { t.setRawRange({ start: i.start, end: i.end, startValue: i.startValue, endValue: i.endValue }) }) }); var rD = Oc.toolbox.dataZoom , sD = E; function lD(t, e, i) { (this._brushController = new Ib(i.getZr())).on("brush", A(this._onBrush, this)).mount(), this._isZoomActive } lD.defaultOption = { show: !0, filterMode: "filter", icon: { zoom: "M0,13.5h26.9 M13.5,26.9V0 M32.1,13.5H58V58H13.5 V32.1", back: "M22,1.4L9.9,13.5l12.3,12.3 M10.3,13.5H54.9v44.6 H10.3v-26" }, title: k(rD.title) }; var uD = lD.prototype; uD.render = function(t, e, i, n) { this.model = t, this.ecModel = e, this.api = i, function(t, e, i, n, o) { var a = i._isZoomActive; n && "takeGlobalCursor" === n.type && (a = "dataZoomSelect" === n.key && n.dataZoomSelectActive); i._isZoomActive = a, t.setIconStatus("zoom", a ? "emphasis" : "normal"); var r = new DA(cD(t.option),e,{ include: ["grid"] }); i._brushController.setPanels(r.makePanelOpts(o, function(t) { return t.xAxisDeclared && !t.yAxisDeclared ? "lineX" : !t.xAxisDeclared && t.yAxisDeclared ? "lineY" : "rect" })).enableBrush(!!a && { brushType: "auto", brushStyle: { lineWidth: 0, fill: "rgba(0,0,0,0.2)" } }) }(t, e, this, n, i), function(t, e) { t.setIconStatus("back", 1 < function(t) { return WA(t).length }(e) ? "emphasis" : "normal") }(t, e) } , uD.onclick = function(t, e, i) { hD[i].call(this) } , uD.remove = function(t, e) { this._brushController.unmount() } , uD.dispose = function(t, e) { this._brushController.dispose() } ; var hD = { zoom: function() { var t = !this._isZoomActive; this.api.dispatchAction({ type: "takeGlobalCursor", key: "dataZoomSelect", dataZoomSelectActive: t }) }, back: function() { this._dispatchZoomAction(function(t) { var n = WA(t) , e = n[n.length - 1]; 1 < n.length && n.pop(); var o = {}; return GA(e, function(t, e) { for (var i = n.length - 1; 0 <= i; i--) { if (t = n[i][e]) { o[e] = t; break } } }), o }(this.ecModel)) } }; function cD(e) { var i = {}; return E(["xAxisIndex", "yAxisIndex"], function(t) { i[t] = e[t], null == i[t] && (i[t] = "all"), !1 !== i[t] && "none" !== i[t] || (i[t] = []) }), i } uD._onBrush = function(t, e) { if (e.isEnd && t.length) { var s = {} , l = this.ecModel; this._brushController.updateCovers([]), new DA(cD(this.model.option),l,{ include: ["grid"] }).matchOutputRanges(t, l, function(t, e, i) { if ("cartesian2d" === i.type) { var n = t.brushType; "rect" === n ? (o("x", i, e[0]), o("y", i, e[1])) : o({ lineX: "x", lineY: "y" }[n], i, e) } }), function(a, t) { var r = WA(a); GA(t, function(t, e) { for (var i = r.length - 1; 0 <= i; i--) { if (r[i][e]) break } if (i < 0) { var n = a.queryComponents({ mainType: "dataZoom", subType: "select", id: e })[0]; if (n) { var o = n.getPercentRange(); r[0][e] = { dataZoomId: e, start: o[0], end: o[1] } } } }), r.push(t) }(l, s), this._dispatchZoomAction(s) } function o(t, e, i) { var n = e.getAxis(t) , o = n.model , a = function(e, i, t) { var n; return t.eachComponent({ mainType: "dataZoom", subType: "select" }, function(t) { t.getAxisModel(e, i.componentIndex) && (n = t) }), n }(t, o, l) , r = a.findRepresentativeAxisProxy(o).getMinMaxSpan(); null == r.minValueSpan && null == r.maxValueSpan || (i = Jw(0, i.slice(), n.scale.getExtent(), 0, r.minValueSpan, r.maxValueSpan)), a && (s[a.id] = { dataZoomId: a.id, startValue: i[0], endValue: i[1] }) } } , uD._dispatchZoomAction = function(t) { var i = []; sD(t, function(t, e) { i.push(k(t)) }), i.length && this.api.dispatchAction({ type: "dataZoom", from: this.uid, batch: i }) } , nA("dataZoom", lD), yf(function(s) { if (s) { var l = s.dataZoom || (s.dataZoom = []); L(l) || (s.dataZoom = l = [l]); var t = s.toolbox; if (t && (L(t) && (t = t[0]), t && t.feature)) { var e = t.feature.dataZoom; i("xAxis", e), i("yAxis", e) } } function i(n, o) { if (o) { var a = n + "Index" , r = o[a]; null == r || "all" === r || L(r) || (r = !1 === r || "none" === r ? [] : [r]), function(t, e) { var i = s[t]; L(i) || (i = i ? [i] : []); sD(i, e) }(n, function(t, e) { if (null == r || "all" === r || -1 !== _(r, e)) { var i = { type: "select", $fromToolbox: !0, filterMode: o.filterMode || "filter", id: "\0_ec_\0toolbox-dataZoom_" + n + e }; i[a] = e, l.push(i) } }) } } }); var dD = Oc.toolbox.restore; function fD(t) { this.model = t } fD.defaultOption = { show: !0, icon: "M3.8,33.4 M47,18.9h9.8V8.7 M56.3,20.1 C52.1,9,40.5,0.6,26.8,2.1C12.6,3.7,1.6,16.2,2.1,30.6 M13,41.1H3.1v10.2 M3.7,39.9c4.2,11.1,15.8,19.5,29.5,18 c14.2-1.6,25.2-14.1,24.7-28.5", title: dD.title }, fD.prototype.onclick = function(t, e, i) { !function(t) { t[FA] = null }(t), e.dispatchAction({ type: "restore", from: this.uid }) } , nA("restore", fD), _f({ type: "restore", event: "restore", update: "prepareAndUpdate" }, function(t, e) { e.resetOption("recreate") }), Tf({ type: "tooltip", dependencies: ["axisPointer"], defaultOption: { zlevel: 0, z: 60, show: !0, showContent: !0, trigger: "item", triggerOn: "mousemove|click", alwaysShowContent: !1, displayMode: "single", renderMode: "auto", confine: !1, showDelay: 0, hideDelay: 100, transitionDuration: .4, enterable: !1, backgroundColor: "rgba(50,50,50,0.7)", borderColor: "#333", borderRadius: 4, borderWidth: 0, padding: 5, extraCssText: "", axisPointer: { type: "line", axis: "auto", animation: "auto", animationDurationUpdate: 200, animationEasingUpdate: "exponentialOut", crossStyle: { color: "#999", width: 1, type: "dashed", textStyle: {} } }, textStyle: { color: "#fff", fontSize: 14 } } }); var pD = E , gD = eu , mD = ["", "-webkit-", "-moz-", "-o-"]; function vD(o) { var a = [] , t = o.get("transitionDuration") , e = o.get("backgroundColor") , i = o.getModel("textStyle") , n = o.get("padding"); return t && a.push(function(t) { var e = "cubic-bezier(0.23, 1, 0.32, 1)" , i = "left " + t + "s " + e + ",top " + t + "s " + e; return O(mD, function(t) { return t + "transition:" + i }).join(";") }(t)), e && (v.canvasSupported ? a.push("background-Color:" + e) : (a.push("background-Color:#" + Ze(e)), a.push("filter:alpha(opacity=70)"))), pD(["width", "color", "radius"], function(t) { var e = "border-" + t , i = gD(e) , n = o.get(i); null != n && a.push(e + ":" + n + ("color" === t ? "" : "px")) }), a.push(function(i) { var n = [] , t = i.get("fontSize") , e = i.getTextColor(); return e && n.push("color:" + e), n.push("font:" + i.getFont()), t && n.push("line-height:" + Math.round(3 * t / 2) + "px"), pD(["decoration", "align"], function(t) { var e = i.get(t); e && n.push("text-" + t + ":" + e) }), n.join(";") }(i)), null != n && a.push("padding:" + iu(n).join("px ") + "px"), a.join(";") + ";" } function yD(t, e, i, n, o) { var a = e && e.painter; if (i) { var r = a && a.getViewportRoot(); r && function(t, e, i, n, o) { Rt(Et, e, n, o, !0) && Rt(t, i, Et[0], Et[1]) }(t, r, document.body, n, o) } else { t[0] = n, t[1] = o; var s = a && a.getViewportRootOffset(); s && (t[0] += s.offsetLeft, t[1] += s.offsetTop) } } function xD(t, e, i) { if (v.wxa) return null; var n = document.createElement("div"); n.domBelongToZr = !0, this.el = n; var o = this._zr = e.getZr() , a = this._appendToBody = i && i.appendToBody; this._styleCoord = [0, 0], yD(this._styleCoord, o, a, e.getWidth() / 2, e.getHeight() / 2), a ? document.body.appendChild(n) : t.appendChild(n), this._container = t, this._show = !1, this._hideTimeout; var r = this; n.onmouseenter = function() { r._enterable && (clearTimeout(r._hideTimeout), r._show = !0), r._inContent = !0 } , n.onmousemove = function(t) { if (t = t || window.event, !r._enterable) { var e = o.handler; Zt(o.painter.getViewportRoot(), t, !0), e.dispatch("mousemove", t) } } , n.onmouseleave = function() { r._enterable && r._show && r.hideLater(r._hideDelay), r._inContent = !1 } } function _D(t) { this._zr = t.getZr(), this._show = !1, this._hideTimeout } xD.prototype = { constructor: xD, _enterable: !0, update: function() { var t = this._container , e = t.currentStyle || document.defaultView.getComputedStyle(t) , i = t.style; "absolute" !== i.position && "absolute" !== e.position && (i.position = "relative") }, show: function(t) { clearTimeout(this._hideTimeout); var e = this.el , i = this._styleCoord; e.style.cssText = "position:absolute;display:block;border-style:solid;white-space:nowrap;z-index:9999999;" + vD(t) + ";left:" + i[0] + "px;top:" + i[1] + "px;" + (t.get("extraCssText") || ""), e.style.display = e.innerHTML ? "block" : "none", e.style.pointerEvents = this._enterable ? "auto" : "none", this._show = !0 }, setContent: function(t) { this.el.innerHTML = null == t ? "" : t }, setEnterable: function(t) { this._enterable = t }, getSize: function() { var t = this.el; return [t.clientWidth, t.clientHeight] }, moveTo: function(t, e) { var i = this._styleCoord; yD(i, this._zr, this._appendToBody, t, e); var n = this.el.style; n.left = i[0] + "px", n.top = i[1] + "px" }, hide: function() { this.el.style.display = "none", this._show = !1 }, hideLater: function(t) { !this._show || this._inContent && this._enterable || (t ? (this._hideDelay = t, this._show = !1, this._hideTimeout = setTimeout(A(this.hide, this), t)) : this.hide()) }, isShow: function() { return this._show }, dispose: function() { this.el.parentNode.removeChild(this.el) }, getOuterSize: function() { var t = this.el.clientWidth , e = this.el.clientHeight; if (document.defaultView && document.defaultView.getComputedStyle) { var i = document.defaultView.getComputedStyle(this.el); i && (t += parseInt(i.borderLeftWidth, 10) + parseInt(i.borderRightWidth, 10), e += parseInt(i.borderTopWidth, 10) + parseInt(i.borderBottomWidth, 10)) } return { width: t, height: e } } }, _D.prototype = { constructor: _D, _enterable: !0, update: function() {}, show: function(t) { this._hideTimeout && clearTimeout(this._hideTimeout), this.el.attr("show", !0), this._show = !0 }, setContent: function(t, e, i) { this.el && this._zr.remove(this.el); for (var n = {}, o = t, a = "{marker", r = o.indexOf(a); 0 <= r; ) { var s = o.indexOf("|}") , l = o.substr(r + a.length, s - r - a.length); -1 < l.indexOf("sub") ? n["marker" + l] = { textWidth: 4, textHeight: 4, textBorderRadius: 2, textBackgroundColor: e[l], textOffset: [3, 0] } : n["marker" + l] = { textWidth: 10, textHeight: 10, textBorderRadius: 5, textBackgroundColor: e[l] }, r = (o = o.substr(s + 1)).indexOf("{marker") } this.el = new Ur({ style: { rich: n, text: t, textLineHeight: 20, textBackgroundColor: i.get("backgroundColor"), textBorderRadius: i.get("borderRadius"), textFill: i.get("textStyle.color"), textPadding: i.get("padding") }, z: i.get("z") }), this._zr.add(this.el); var u = this; this.el.on("mouseover", function() { u._enterable && (clearTimeout(u._hideTimeout), u._show = !0), u._inContent = !0 }), this.el.on("mouseout", function() { u._enterable && u._show && u.hideLater(u._hideDelay), u._inContent = !1 }) }, setEnterable: function(t) { this._enterable = t }, getSize: function() { var t = this.el.getBoundingRect(); return [t.width, t.height] }, moveTo: function(t, e) { this.el && this.el.attr("position", [t, e]) }, hide: function() { this.el && this.el.hide(), this._show = !1 }, hideLater: function(t) { !this._show || this._inContent && this._enterable || (t ? (this._hideDelay = t, this._show = !1, this._hideTimeout = setTimeout(A(this.hide, this), t)) : this.hide()) }, isShow: function() { return this._show }, getOuterSize: function() { var t = this.getSize(); return { width: t[0], height: t[1] } } }; var wD = A , bD = E , SD = Rl , MD = new rs({ shape: { x: -1, y: -1, width: 2, height: 2 } }); function ID(t) { for (var e = t.pop(); t.length; ) { var i = t.pop(); i && (Cl.isInstance(i) && (i = i.get("tooltip", !0)), "string" == typeof i && (i = { formatter: i }), e = new Cl(i,e,e.ecModel)) } return e } function TD(t, e) { return t.dispatchAction || A(e.dispatchAction, e) } function AD(t) { return "center" === t || "middle" === t } Af({ type: "tooltip", init: function(t, e) { if (!v.node) { var i, n = t.getComponent("tooltip"), o = n.get("renderMode"); this._renderMode = Qo(o), "html" === this._renderMode ? (i = new xD(e.getDom(),e,{ appendToBody: n.get("appendToBody", !0) }), this._newLine = "
") : (i = new _D(e), this._newLine = "\n"), this._tooltipContent = i } }, render: function(t, e, i) { if (!v.node) { this.group.removeAll(), this._tooltipModel = t, this._ecModel = e, this._api = i, this._lastDataByCoordSys = null, this._alwaysShowContent = t.get("alwaysShowContent"); var n = this._tooltipContent; n.update(), n.setEnterable(t.get("enterable")), this._initGlobalListener(), this._keepShow() } }, _initGlobalListener: function() { var n = this._tooltipModel.get("triggerOn"); fI("itemTooltip", this._api, wD(function(t, e, i) { "none" !== n && (0 <= n.indexOf(t) ? this._tryShow(e, i) : "leave" === t && this._hide(i)) }, this)) }, _keepShow: function() { var t = this._tooltipModel , e = this._ecModel , i = this._api; if (null != this._lastX && null != this._lastY && "none" !== t.get("triggerOn")) { var n = this; clearTimeout(this._refreshUpdateTimeout), this._refreshUpdateTimeout = setTimeout(function() { i.isDisposed() || n.manuallyShowTip(t, e, i, { x: n._lastX, y: n._lastY }) }) } }, manuallyShowTip: function(t, e, i, n) { if (n.from !== this.uid && !v.node) { var o = TD(n, i); this._ticket = ""; var a = n.dataByCoordSys; if (n.tooltip && null != n.x && null != n.y) { var r = MD; r.position = [n.x, n.y], r.update(), r.tooltip = n.tooltip, this._tryShow({ offsetX: n.x, offsetY: n.y, target: r }, o) } else if (a) this._tryShow({ offsetX: n.x, offsetY: n.y, position: n.position, dataByCoordSys: n.dataByCoordSys, tooltipOption: n.tooltipOption }, o); else if (null != n.seriesIndex) { if (this._manuallyAxisShowTip(t, e, i, n)) return; var s = iI(n, e) , l = s.point[0] , u = s.point[1]; null != l && null != u && this._tryShow({ offsetX: l, offsetY: u, position: n.position, target: s.el }, o) } else null != n.x && null != n.y && (i.dispatchAction({ type: "updateAxisPointer", x: n.x, y: n.y }), this._tryShow({ offsetX: n.x, offsetY: n.y, position: n.position, target: i.getZr().findHover(n.x, n.y).target }, o)) } }, manuallyHideTip: function(t, e, i, n) { var o = this._tooltipContent; !this._alwaysShowContent && this._tooltipModel && o.hideLater(this._tooltipModel.get("hideDelay")), this._lastX = this._lastY = null, n.from !== this.uid && this._hide(TD(n, i)) }, _manuallyAxisShowTip: function(t, e, i, n) { var o = n.seriesIndex , a = n.dataIndex , r = e.getComponent("axisPointer").coordSysAxesInfo; if (null != o && null != a && null != r) { var s = e.getSeriesByIndex(o); if (s) if ("axis" === (t = ID([s.getData().getItemModel(a), s, (s.coordinateSystem || {}).model, t])).get("trigger")) return i.dispatchAction({ type: "updateAxisPointer", seriesIndex: o, dataIndex: a, position: n.position }), !0 } }, _tryShow: function(t, e) { var i = t.target; if (this._tooltipModel) { this._lastX = t.offsetX, this._lastY = t.offsetY; var n = t.dataByCoordSys; n && n.length ? this._showAxisTooltip(n, t) : i && null != i.dataIndex ? (this._lastDataByCoordSys = null, this._showSeriesItemTooltip(t, i, e)) : i && i.tooltip ? (this._lastDataByCoordSys = null, this._showComponentItemTooltip(t, i, e)) : (this._lastDataByCoordSys = null, this._hide(e)) } }, _showOrMove: function(t, e) { var i = t.get("showDelay"); e = A(e, this), clearTimeout(this._showTimout), 0 < i ? this._showTimout = setTimeout(e, i) : e() }, _showAxisTooltip: function(t, e) { var d = this._ecModel , i = this._tooltipModel , n = [e.offsetX, e.offsetY] , o = [] , f = [] , a = ID([e.tooltipOption, i]) , p = this._renderMode , r = this._newLine , g = {}; bD(t, function(t) { bD(t.dataByAxis, function(s) { var l = d.getComponent(s.axisDim + "Axis", s.axisIndex) , u = s.value , h = []; if (l && null != u) { var c = DI(u, l.axis, d, s.seriesDataIndices, s.valueLabelOpt); E(s.seriesDataIndices, function(t) { var e = d.getSeriesByIndex(t.seriesIndex) , i = t.dataIndexInside , n = e && e.getDataParams(i); if (n.axisDim = s.axisDim, n.axisIndex = s.axisIndex, n.axisType = s.axisType, n.axisId = s.axisId, n.axisValue = ug(l.axis, u), n.axisValueLabel = c, n) { f.push(n); var o, a = e.formatTooltip(i, !0, null, p); if (z(a)) { o = a.html; var r = a.markers; m(g, r) } else o = a; h.push(o) } }); var t = c; "html" !== p ? o.push(h.join(r)) : o.push((t ? au(t) + r : "") + h.join(r)) } }) }, this), o.reverse(), o = o.join(this._newLine + this._newLine); var s = e.position; this._showOrMove(a, function() { this._updateContentNotChangedOnAxis(t) ? this._updatePosition(a, s, n[0], n[1], this._tooltipContent, f) : this._showTooltipContent(a, o, f, Math.random(), n[0], n[1], s, void 0, g) }) }, _showSeriesItemTooltip: function(t, e, i) { var n = this._ecModel , o = e.seriesIndex , a = n.getSeriesByIndex(o) , r = e.dataModel || a , s = e.dataIndex , l = e.dataType , u = r.getData(l) , h = ID([u.getItemModel(s), r, a && (a.coordinateSystem || {}).model, this._tooltipModel]) , c = h.get("trigger"); if (null == c || "item" === c) { var d, f, p = r.getDataParams(s, l), g = r.formatTooltip(s, !1, l, this._renderMode); f = z(g) ? (d = g.html, g.markers) : (d = g, null); var m = "item_" + r.name + "_" + s; this._showOrMove(h, function() { this._showTooltipContent(h, d, p, m, t.offsetX, t.offsetY, t.position, t.target, f) }), i({ type: "showTip", dataIndexInside: s, dataIndex: u.getRawIndex(s), seriesIndex: o, from: this.uid }) } }, _showComponentItemTooltip: function(t, e, i) { var n = e.tooltip; if ("string" == typeof n) { n = { content: n, formatter: n } } var o = new Cl(n,this._tooltipModel,this._ecModel) , a = o.get("content") , r = Math.random(); this._showOrMove(o, function() { this._showTooltipContent(o, a, o.get("formatterParams") || {}, r, t.offsetX, t.offsetY, t.position, e) }), i({ type: "showTip", from: this.uid }) }, _showTooltipContent: function(i, t, n, e, o, a, r, s, l) { if (this._ticket = "", i.get("showContent") && i.get("show")) { var u = this._tooltipContent , h = i.get("formatter"); r = r || i.get("position"); var c = t; if (h && "string" == typeof h) c = lu(h, n, !0); else if ("function" == typeof h) { var d = wD(function(t, e) { t === this._ticket && (u.setContent(e, l, i), this._updatePosition(i, r, o, a, u, n, s)) }, this); this._ticket = e, c = h(n, e, d) } u.setContent(c, l, i), u.show(i), this._updatePosition(i, r, o, a, u, n, s) } }, _updatePosition: function(t, e, i, n, o, a, r) { var s = this._api.getWidth() , l = this._api.getHeight(); e = e || t.get("position"); var u = o.getSize() , h = t.get("align") , c = t.get("verticalAlign") , d = r && r.getBoundingRect().clone(); if (r && d.applyTransform(r.transform), "function" == typeof e && (e = e([i, n], a, o.el, d, { viewSize: [s, l], contentSize: u.slice() })), L(e)) i = SD(e[0], s), n = SD(e[1], l); else if (z(e)) { e.width = u[0], e.height = u[1]; var f = bu(e, { width: s, height: l }); i = f.x, n = f.y, c = h = null } else if ("string" == typeof e && r) { i = (p = function(t, e, i) { var n = i[0] , o = i[1] , a = 0 , r = 0 , s = e.width , l = e.height; switch (t) { case "inside": a = e.x + s / 2 - n / 2, r = e.y + l / 2 - o / 2; break; case "top": a = e.x + s / 2 - n / 2, r = e.y - o - 5; break; case "bottom": a = e.x + s / 2 - n / 2, r = e.y + l + 5; break; case "left": a = e.x - n - 5, r = e.y + l / 2 - o / 2; break; case "right": a = e.x + s + 5, r = e.y + l / 2 - o / 2 } return [a, r] }(e, d, u))[0], n = p[1] } else { var p; i = (p = function(t, e, i, n, o, a, r) { var s = i.getOuterSize() , l = s.width , u = s.height; null != a && (n < t + l + a ? t -= l + a : t += a); null != r && (o < e + u + r ? e -= u + r : e += r); return [t, e] }(i, n, o, s, l, h ? null : 20, c ? null : 20))[0], n = p[1] } h && (i -= AD(h) ? u[0] / 2 : "right" === h ? u[0] : 0), c && (n -= AD(c) ? u[1] / 2 : "bottom" === c ? u[1] : 0), t.get("confine") && (i = (p = function(t, e, i, n, o) { var a = i.getOuterSize() , r = a.width , s = a.height; return t = Math.min(t + r, n) - r, e = Math.min(e + s, o) - s, t = Math.max(t, 0), e = Math.max(e, 0), [t, e] }(i, n, o, s, l))[0], n = p[1]); o.moveTo(i, n) }, _updateContentNotChangedOnAxis: function(n) { var t = this._lastDataByCoordSys , r = !!t && t.length === n.length; return r && bD(t, function(t, e) { var i = t.dataByAxis || {} , a = (n[e] || {}).dataByAxis || []; (r &= i.length === a.length) && bD(i, function(t, e) { var i = a[e] || {} , n = t.seriesDataIndices || [] , o = i.seriesDataIndices || []; (r &= t.value === i.value && t.axisType === i.axisType && t.axisId === i.axisId && n.length === o.length) && bD(n, function(t, e) { var i = o[e]; r &= t.seriesIndex === i.seriesIndex && t.dataIndex === i.dataIndex }) }) }), this._lastDataByCoordSys = n, !!r }, _hide: function(t) { this._lastDataByCoordSys = null, t({ type: "hideTip", from: this.uid }) }, dispose: function(t, e) { v.node || (this._tooltipContent.dispose(), mI("itemTooltip", e)) } }), _f({ type: "showTip", event: "showTip", update: "tooltip:manuallyShowTip" }, function() {}), _f({ type: "hideTip", event: "hideTip", update: "tooltip:manuallyHideTip" }, function() {}); var DD = ["rect", "polygon", "keep", "clear"]; var CD = E; function LD(t) { if (t) for (var e in t) if (t.hasOwnProperty(e)) return !0 } function kD(t, e, a) { var i = {}; return CD(e, function(n) { var o = i[n] = function() { function t() {} return t.prototype.__hidden = t.prototype, new t }(); CD(t[n], function(t, e) { if (g_.isValidType(e)) { var i = { type: e, visual: t }; a && a(i, n), o[e] = new g_(i), "opacity" === e && ((i = k(i)).type = "colorAlpha", o.__hidden.__alphaForOpacity = new g_(i)) } }) }), i } function PD(e, i, t) { var n; E(t, function(t) { i.hasOwnProperty(t) && LD(i[t]) && (n = !0) }), n && E(t, function(t) { i.hasOwnProperty(t) && LD(i[t]) ? e[t] = k(i[t]) : delete e[t] }) } var ND = { lineX: OD(0), lineY: OD(1), rect: { point: function(t, e, i) { return t && i.boundingRect.contain(t[0], t[1]) }, rect: function(t, e, i) { return t && i.boundingRect.intersect(t) } }, polygon: { point: function(t, e, i) { return t && i.boundingRect.contain(t[0], t[1]) && Tg(i.range, t[0], t[1]) }, rect: function(t, e, i) { var n = i.range; if (!t || n.length <= 1) return !1; var o = t.x , a = t.y , r = t.width , s = t.height , l = n[0]; return !!(Tg(n, o, a) || Tg(n, o + r, a) || Tg(n, o, a + s) || Tg(n, o + r, a + s) || Di.create(t).contain(l[0], l[1]) || xl(o, a, o + r, a, n) || xl(o, a, o, a + s, n) || xl(o + r, a, o + r, a + s, n) || xl(o, a + s, o + r, a + s, n)) || void 0 } } }; function OD(a) { var r = ["x", "y"] , s = ["width", "height"]; return { point: function(t, e, i) { if (t) { var n = i.range; return ED(t[a], n) } }, rect: function(t, e, i) { if (t) { var n = i.range , o = [t[r[a]], t[r[a]] + t[s[a]]]; return o[1] < o[0] && o.reverse(), ED(o[0], n) || ED(o[1], n) || ED(n[0], o) || ED(n[1], o) } } } } function ED(t, e) { return e[0] <= t && t <= e[1] } var RD = ["inBrush", "outOfBrush"] , zD = "__ecBrushSelect" , BD = "__ecInBrushSelectEvent" , VD = Ld.VISUAL.BRUSH; function GD(e) { e.eachComponent({ mainType: "brush" }, function(t) { (t.brushTargetManager = new DA(t.option,e)).setInputRanges(t.areas, e) }) } function FD(t, e) { if (!t.isDisposed()) { var i = t.getZr(); i[BD] = !0, t.dispatchAction({ type: "brushSelect", batch: e }), i[BD] = !1 } } function WD(t, e, i, n) { for (var o = 0, a = e.length; o < a; o++) { var r = e[o]; if (t[r.brushType](n, i, r.selectors, r)) return !0 } } function HD(t) { var r = t.brushSelector; if (R(r)) { var e = []; return E(ND, function(a, t) { e[t] = function(t, e, i, n) { var o = e.getItemLayout(t); return a[r](o, i, n) } }), e } if (C(r)) { var i = {}; return E(ND, function(t, e) { i[e] = r }), i } return r } bf(VD, function(t, e, i) { t.eachComponent({ mainType: "brush" }, function(t) { i && "takeGlobalCursor" === i.type && t.setBrushOption("brush" === i.key ? i.brushOption : { brushType: !1 }) }), GD(t) }), Sf(VD, function(p, t, e) { var o, g, m = []; p.eachComponent({ mainType: "brush" }, function(a, t) { var s = { brushId: a.id, brushIndex: t, brushName: a.name, areas: k(a.areas), selected: [] }; m.push(s); var e = a.option , i = e.brushLink , n = [] , l = [] , u = [] , h = 0; t || (o = e.throttleType, g = e.throttleDelay); var r = O(a.areas, function(t) { return function(i) { var n = i.selectors = {}; return E(ND[i.brushType], function(e, t) { n[t] = function(t) { return e(t, n, i) } }), i }(D({ boundingRect: ZD[t.brushType](t) }, t)) }) , c = kD(a.option, RD, function(t) { t.mappingMethod = "fixed" }); function d(t) { return "all" === i || n[t] } function f(t) { return !!t.length } L(i) && E(i, function(t) { n[t] = 1 }), p.eachSeries(function(t, e) { var i = u[e] = []; "parallel" === t.subType ? function(t, e) { var i = t.coordinateSystem; h |= i.hasAxisBrushed(), d(e) && i.eachActiveState(t.getData(), function(t, e) { "active" === t && (l[e] = 1) }) }(t, e) : function(e, t, i) { var n = HD(e); if (!n || function(t, e) { var i = t.option.seriesIndex; return null != i && "all" !== i && (L(i) ? _(i, e) < 0 : e !== i) }(a, t)) return; if (E(r, function(t) { n[t.brushType] && a.brushTargetManager.controlSeries(t, e, p) && i.push(t), h |= f(i) }), d(t) && f(i)) { var o = e.getData(); o.each(function(t) { WD(n, i, o, t) && (l[t] = 1) }) } }(t, e, i) }), p.eachSeries(function(t, e) { var i = { seriesId: t.id, seriesIndex: e, seriesName: t.name, dataIndex: [] }; s.selected.push(i); var n = HD(t) , o = u[e] , a = t.getData() , r = d(e) ? function(t) { return l[t] ? (i.dataIndex.push(a.getRawIndex(t)), "inBrush") : "outOfBrush" } : function(t) { return WD(n, o, a, t) ? (i.dataIndex.push(a.getRawIndex(t)), "inBrush") : "outOfBrush" } ; (d(e) ? h : f(o)) && function(t, u, h, c, d, f) { var p, g = {}; function m(t) { return h.getItemVisual(p, t) } function v(t, e) { h.setItemVisual(p, t, e) } function e(t, e) { p = null == f ? t : e; var i = h.getRawDataItem(p); if (!i || !1 !== i.visualMap) for (var n = c.call(d, t), o = u[n], a = g[n], r = 0, s = a.length; r < s; r++) { var l = a[r]; o[l] && o[l].applyVisual(t, m, v) } } E(t, function(t) { var e = g_.prepareVisualTypes(u[t]); g[t] = e }), null == f ? h.each(e) : h.each([f], e) }(RD, c, a, r) }) }), function(t, e, i, n, o) { if (!o) return; var a = t.getZr(); if (a[BD]) return; a[zD] || (a[zD] = FD); kc(a, zD, i, e)(t, n) }(t, o, g, m, e) }); var ZD = { lineX: et, lineY: et, rect: function(t) { return UD(t.range) }, polygon: function(t) { for (var e, i = t.range, n = 0, o = i.length; n < o; n++) { e = e || [[1 / 0, -1 / 0], [1 / 0, -1 / 0]]; var a = i[n]; a[0] < e[0][0] && (e[0][0] = a[0]), a[0] > e[0][1] && (e[0][1] = a[0]), a[1] < e[1][0] && (e[1][0] = a[1]), a[1] > e[1][1] && (e[1][1] = a[1]) } return e && UD(e) } }; function UD(t) { return new Di(t[0][0],t[1][0],t[0][1] - t[0][0],t[1][1] - t[1][0]) } var XD = ["#ddd"]; Tf({ type: "brush", dependencies: ["geo", "grid", "xAxis", "yAxis", "parallel", "series"], defaultOption: { toolbox: null, brushLink: null, seriesIndex: "all", geoIndex: null, xAxisIndex: null, yAxisIndex: null, brushType: "rect", brushMode: "single", transformable: !0, brushStyle: { borderWidth: 1, color: "rgba(120,140,180,0.3)", borderColor: "rgba(120,140,180,0.8)" }, throttleType: "fixRate", throttleDelay: 0, removeOnClick: !0, z: 1e4 }, areas: [], brushType: null, brushOption: {}, coordInfoList: [], optionUpdated: function(t, e) { var i = this.option; e || PD(i, t, ["inBrush", "outOfBrush"]); var n = i.inBrush = i.inBrush || {}; i.outOfBrush = i.outOfBrush || { color: XD }, n.hasOwnProperty("liftZ") || (n.liftZ = 5) }, setAreas: function(t) { t && (this.areas = O(t, function(t) { return YD(this.option, t) }, this)) }, setBrushOption: function(t) { this.brushOption = YD(this.option, t), this.brushType = this.brushOption.brushType } }); function YD(t, e) { return m({ brushType: t.brushType, brushMode: t.brushMode, transformable: t.transformable, brushStyle: new Cl(t.brushStyle).getItemStyle(), removeOnClick: t.removeOnClick, z: t.z }, e, !0) } function jD(t, e, i, n) { n && n.$from === t.id || this._brushController.setPanels(t.brushTargetManager.makePanelOpts(i)).enableBrush(t.brushOption).updateCovers(t.areas.slice()) } Af({ type: "brush", init: function(t, e) { this.ecModel = t, this.api = e, this.model, (this._brushController = new Ib(e.getZr())).on("brush", A(this._onBrush, this)).mount() }, render: function(t) { return this.model = t, jD.apply(this, arguments) }, updateTransform: function(t, e) { return GD(e), jD.apply(this, arguments) }, updateView: jD, dispose: function() { this._brushController.dispose() }, _onBrush: function(t, e) { var i = this.model.id; this.model.brushTargetManager.setOutputRanges(t, this.ecModel), e.isEnd && !e.removeOnClick || this.api.dispatchAction({ type: "brush", brushId: i, areas: k(t), $from: i }), e.isEnd && this.api.dispatchAction({ type: "brushEnd", brushId: i, areas: k(t), $from: i }) } }), _f({ type: "brush", event: "brush" }, function(e, t) { t.eachComponent({ mainType: "brush", query: e }, function(t) { t.setAreas(e.areas) }) }), _f({ type: "brushSelect", event: "brushSelected", update: "none" }, function() {}), _f({ type: "brushEnd", event: "brushEnd", update: "none" }, function() {}); var qD = Oc.toolbox.brush; function KD(t, e, i) { this.model = t, this.ecModel = e, this.api = i, this._brushType, this._brushMode } KD.defaultOption = { show: !0, type: ["rect", "polygon", "lineX", "lineY", "keep", "clear"], icon: { rect: "M7.3,34.7 M0.4,10V-0.2h9.8 M89.6,10V-0.2h-9.8 M0.4,60v10.2h9.8 M89.6,60v10.2h-9.8 M12.3,22.4V10.5h13.1 M33.6,10.5h7.8 M49.1,10.5h7.8 M77.5,22.4V10.5h-13 M12.3,31.1v8.2 M77.7,31.1v8.2 M12.3,47.6v11.9h13.1 M33.6,59.5h7.6 M49.1,59.5 h7.7 M77.5,47.6v11.9h-13", polygon: "M55.2,34.9c1.7,0,3.1,1.4,3.1,3.1s-1.4,3.1-3.1,3.1 s-3.1-1.4-3.1-3.1S53.5,34.9,55.2,34.9z M50.4,51c1.7,0,3.1,1.4,3.1,3.1c0,1.7-1.4,3.1-3.1,3.1c-1.7,0-3.1-1.4-3.1-3.1 C47.3,52.4,48.7,51,50.4,51z M55.6,37.1l1.5-7.8 M60.1,13.5l1.6-8.7l-7.8,4 M59,19l-1,5.3 M24,16.1l6.4,4.9l6.4-3.3 M48.5,11.6 l-5.9,3.1 M19.1,12.8L9.7,5.1l1.1,7.7 M13.4,29.8l1,7.3l6.6,1.6 M11.6,18.4l1,6.1 M32.8,41.9 M26.6,40.4 M27.3,40.2l6.1,1.6 M49.9,52.1l-5.6-7.6l-4.9-1.2", lineX: "M15.2,30 M19.7,15.6V1.9H29 M34.8,1.9H40.4 M55.3,15.6V1.9H45.9 M19.7,44.4V58.1H29 M34.8,58.1H40.4 M55.3,44.4 V58.1H45.9 M12.5,20.3l-9.4,9.6l9.6,9.8 M3.1,29.9h16.5 M62.5,20.3l9.4,9.6L62.3,39.7 M71.9,29.9H55.4", lineY: "M38.8,7.7 M52.7,12h13.2v9 M65.9,26.6V32 M52.7,46.3h13.2v-9 M24.9,12H11.8v9 M11.8,26.6V32 M24.9,46.3H11.8v-9 M48.2,5.1l-9.3-9l-9.4,9.2 M38.9-3.9V12 M48.2,53.3l-9.3,9l-9.4-9.2 M38.9,62.3V46.4", keep: "M4,10.5V1h10.3 M20.7,1h6.1 M33,1h6.1 M55.4,10.5V1H45.2 M4,17.3v6.6 M55.6,17.3v6.6 M4,30.5V40h10.3 M20.7,40 h6.1 M33,40h6.1 M55.4,30.5V40H45.2 M21,18.9h62.9v48.6H21V18.9z", clear: "M22,14.7l30.9,31 M52.9,14.7L22,45.7 M4.7,16.8V4.2h13.1 M26,4.2h7.8 M41.6,4.2h7.8 M70.3,16.8V4.2H57.2 M4.7,25.9v8.6 M70.3,25.9v8.6 M4.7,43.2v12.6h13.1 M26,55.8h7.8 M41.6,55.8h7.8 M70.3,43.2v12.6H57.2" }, title: k(qD.title) }; var $D = KD.prototype; $D.render = $D.updateView = function(e, t, i) { var n, o, a; t.eachComponent({ mainType: "brush" }, function(t) { n = t.brushType, o = t.brushOption.brushMode || "single", a |= t.areas.length }), this._brushType = n, this._brushMode = o, E(e.get("type", !0), function(t) { e.setIconStatus(t, ("keep" === t ? "multiple" === o : "clear" === t ? a : t === n) ? "emphasis" : "normal") }) } , $D.getIcons = function() { var t = this.model , e = t.get("icon", !0) , i = {}; return E(t.get("type", !0), function(t) { e[t] && (i[t] = e[t]) }), i } , $D.onclick = function(t, e, i) { var n = this._brushType , o = this._brushMode; "clear" === i ? (e.dispatchAction({ type: "axisAreaSelect", intervals: [] }), e.dispatchAction({ type: "brush", command: "clear", areas: [] })) : e.dispatchAction({ type: "takeGlobalCursor", key: "brush", brushOption: { brushType: "keep" === i ? n : n !== i && i, brushMode: "keep" === i ? "multiple" === o ? "single" : "multiple" : o } }) } , nA("brush", KD), yf(function(t, e) { var i = t && t.brush; if (L(i) || (i = i ? [i] : []), i.length) { var n = []; E(i, function(t) { var e = t.hasOwnProperty("toolbox") ? t.toolbox : []; e instanceof Array && (n = n.concat(e)) }); var o = t && t.toolbox; L(o) && (o = o[0]), o || (o = { feature: {} }, t.toolbox = [o]); var a = o.feature || (o.feature = {}) , r = a.brush || (a.brush = {}) , s = r.type || (r.type = []); s.push.apply(s, n), function(i) { var e = {}; E(i, function(t) { e[t] = 1 }), i.length = 0, E(e, function(t, e) { i.push(e) }) }(s), e && !s.length && s.push.apply(s, DD) } }), Tf({ type: "title", layoutMode: { type: "box", ignoreSize: !0 }, defaultOption: { zlevel: 0, z: 6, show: !0, text: "", target: "blank", subtext: "", subtarget: "blank", left: 0, top: 0, backgroundColor: "rgba(0,0,0,0)", borderColor: "#ccc", borderWidth: 0, padding: 5, itemGap: 10, textStyle: { fontSize: 18, fontWeight: "bolder", color: "#333" }, subtextStyle: { color: "#aaa" } } }), Af({ type: "title", render: function(t, e, i) { if (this.group.removeAll(), t.get("show")) { var n = this.group , o = t.getModel("textStyle") , a = t.getModel("subtextStyle") , r = t.get("textAlign") , s = H(t.get("textBaseline"), t.get("textVerticalAlign")) , l = new Ur({ style: nl({}, o, { text: t.get("text"), textFill: o.getTextColor() }, { disableBox: !0 }), z2: 10 }) , u = l.getBoundingRect() , h = t.get("subtext") , c = new Ur({ style: nl({}, a, { text: h, textFill: a.getTextColor(), y: u.height + t.get("itemGap"), textVerticalAlign: "top" }, { disableBox: !0 }), z2: 10 }) , d = t.get("link") , f = t.get("sublink") , p = t.get("triggerEvent", !0); l.silent = !d && !p, c.silent = !f && !p, d && l.on("click", function() { gu(d, "_" + t.get("target")) }), f && c.on("click", function() { gu(d, "_" + t.get("subtarget")) }), l.eventData = c.eventData = p ? { componentType: "title", componentIndex: t.componentIndex } : null, n.add(l), h && n.add(c); var g = n.getBoundingRect() , m = t.getBoxLayoutParams(); m.width = g.width, m.height = g.height; var v = bu(m, { width: i.getWidth(), height: i.getHeight() }, t.get("padding")); r || ("middle" === (r = t.get("left") || t.get("right")) && (r = "center"), "right" === r ? v.x += v.width : "center" === r && (v.x += v.width / 2)), s || ("center" === (s = t.get("top") || t.get("bottom")) && (s = "middle"), "bottom" === s ? v.y += v.height : "middle" === s && (v.y += v.height / 2), s = s || "top"), n.attr("position", [v.x, v.y]); var y = { textAlign: r, textVerticalAlign: s }; l.setStyle(y), c.setStyle(y), g = n.getBoundingRect(); var x = v.margin , _ = t.getItemStyle(["color", "opacity"]); _.fill = t.get("backgroundColor"); var w = new rs({ shape: { x: g.x - x[3], y: g.y - x[0], width: g.width + x[1] + x[3], height: g.height + x[0] + x[2], r: t.get("borderRadius") }, style: _, subPixelOptimize: !0, silent: !0 }); n.add(w) } } }); function JD(t) { var e = t.itemStyle || (t.itemStyle = {}) , i = e.emphasis || (e.emphasis = {}) , n = t.label || t.label || {} , o = n.normal || (n.normal = {}) , a = { normal: 1, emphasis: 1 }; E(n, function(t, e) { a[e] || QD(o, e) || (o[e] = t) }), i.label && !QD(n, "emphasis") && (n.emphasis = i.label, delete i.label) } function QD(t, e) { return t.hasOwnProperty(e) } ku.registerSubTypeDefaulter("timeline", function() { return "slider" }), _f({ type: "timelineChange", event: "timelineChanged", update: "prepareAndUpdate" }, function(t, e) { var i = e.getComponent("timeline"); return i && null != t.currentIndex && (i.setCurrentIndex(t.currentIndex), !i.get("loop", !0) && i.isIndexMax() && i.setPlayState(!1)), e.resetOption("timeline"), D({ currentIndex: i.option.currentIndex }, t) }), _f({ type: "timelinePlayChange", event: "timelinePlayChanged", update: "update" }, function(t, e) { var i = e.getComponent("timeline"); i && null != t.playState && i.setPlayState(t.playState) }); var tC = ku.extend({ type: "timeline", layoutMode: "box", defaultOption: { zlevel: 0, z: 4, show: !0, axisType: "time", realtime: !0, left: "20%", top: null, right: "20%", bottom: 0, width: null, height: 40, padding: 5, controlPosition: "left", autoPlay: !1, rewind: !1, loop: !0, playInterval: 2e3, currentIndex: 0, itemStyle: {}, label: { color: "#000" }, data: [] }, init: function(t, e, i) { this._data, this._names, this.mergeDefaultAndTheme(t, i), this._initData() }, mergeOption: function(t) { tC.superApply(this, "mergeOption", arguments), this._initData() }, setCurrentIndex: function(t) { null == t && (t = this.option.currentIndex); var e = this._data.count(); this.option.loop ? t = (t % e + e) % e : (e <= t && (t = e - 1), t < 0 && (t = 0)), this.option.currentIndex = t }, getCurrentIndex: function() { return this.option.currentIndex }, isIndexMax: function() { return this.getCurrentIndex() >= this._data.count() - 1 }, setPlayState: function(t) { this.option.autoPlay = !!t }, getPlayState: function() { return !!this.option.autoPlay }, _initData: function() { var t = this.option , e = t.data || [] , i = t.axisType , o = this._names = []; if ("category" === i) { var a = []; E(e, function(t, e) { var i, n = Wo(t); z(t) ? (i = k(t)).value = e : i = e, a.push(i), R(n) || null != n && !isNaN(n) || (n = ""), o.push(n + "") }), e = a } var n = { category: "ordinal", time: "time" }[i] || "number"; (this._data = new Yf([{ name: "value", type: n }],this)).initData(e, o) }, getData: function() { return this._data }, getCategories: function() { if ("category" === this.get("axisType")) return this._names.slice() } }); b(tC.extend({ type: "timeline.slider", defaultOption: { backgroundColor: "rgba(0,0,0,0)", borderColor: "#ccc", borderWidth: 0, orient: "horizontal", inverse: !1, tooltip: { trigger: "item" }, symbol: "emptyCircle", symbolSize: 10, lineStyle: { show: !0, width: 2, color: "#304654" }, label: { position: "auto", show: !0, interval: "auto", rotate: 0, color: "#304654" }, itemStyle: { color: "#304654", borderWidth: 1 }, checkpointStyle: { symbol: "circle", symbolSize: 13, color: "#c23531", borderWidth: 5, borderColor: "rgba(194,53,49, 0.5)", animation: !0, animationDuration: 300, animationEasing: "quinticInOut" }, controlStyle: { show: !0, showPlayBtn: !0, showPrevBtn: !0, showNextBtn: !0, itemSize: 22, itemGap: 12, position: "left", playIcon: "path://M31.6,53C17.5,53,6,41.5,6,27.4S17.5,1.8,31.6,1.8C45.7,1.8,57.2,13.3,57.2,27.4S45.7,53,31.6,53z M31.6,3.3 C18.4,3.3,7.5,14.1,7.5,27.4c0,13.3,10.8,24.1,24.1,24.1C44.9,51.5,55.7,40.7,55.7,27.4C55.7,14.1,44.9,3.3,31.6,3.3z M24.9,21.3 c0-2.2,1.6-3.1,3.5-2l10.5,6.1c1.899,1.1,1.899,2.9,0,4l-10.5,6.1c-1.9,1.1-3.5,0.2-3.5-2V21.3z", stopIcon: "path://M30.9,53.2C16.8,53.2,5.3,41.7,5.3,27.6S16.8,2,30.9,2C45,2,56.4,13.5,56.4,27.6S45,53.2,30.9,53.2z M30.9,3.5C17.6,3.5,6.8,14.4,6.8,27.6c0,13.3,10.8,24.1,24.101,24.1C44.2,51.7,55,40.9,55,27.6C54.9,14.4,44.1,3.5,30.9,3.5z M36.9,35.8c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H36c0.5,0,0.9,0.4,0.9,1V35.8z M27.8,35.8 c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H27c0.5,0,0.9,0.4,0.9,1L27.8,35.8L27.8,35.8z", nextIcon: "path://M18.6,50.8l22.5-22.5c0.2-0.2,0.3-0.4,0.3-0.7c0-0.3-0.1-0.5-0.3-0.7L18.7,4.4c-0.1-0.1-0.2-0.3-0.2-0.5 c0-0.4,0.3-0.8,0.8-0.8c0.2,0,0.5,0.1,0.6,0.3l23.5,23.5l0,0c0.2,0.2,0.3,0.4,0.3,0.7c0,0.3-0.1,0.5-0.3,0.7l-0.1,0.1L19.7,52 c-0.1,0.1-0.3,0.2-0.5,0.2c-0.4,0-0.8-0.3-0.8-0.8C18.4,51.2,18.5,51,18.6,50.8z", prevIcon: "path://M43,52.8L20.4,30.3c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.3,0.1-0.5,0.3-0.7L42.9,6.4c0.1-0.1,0.2-0.3,0.2-0.5 c0-0.4-0.3-0.8-0.8-0.8c-0.2,0-0.5,0.1-0.6,0.3L18.3,28.8l0,0c-0.2,0.2-0.3,0.4-0.3,0.7c0,0.3,0.1,0.5,0.3,0.7l0.1,0.1L41.9,54 c0.1,0.1,0.3,0.2,0.5,0.2c0.4,0,0.8-0.3,0.8-0.8C43.2,53.2,43.1,53,43,52.8z", color: "#304654", borderColor: "#304654", borderWidth: 1 }, emphasis: { label: { show: !0, color: "#c23531" }, itemStyle: { color: "#c23531" }, controlStyle: { color: "#c23531", borderColor: "#c23531", borderWidth: 2 } }, data: [] } }), Xh); function eC(t, e, i, n) { Gg.call(this, t, e, i), this.type = n || "value", this.model = null } var iC = gc.extend({ type: "timeline" }); eC.prototype = { constructor: eC, getLabelModel: function() { return this.model.getModel("label") }, isHorizontal: function() { return "horizontal" === this.model.get("orient") } }, w(eC, Gg); var nC = A , oC = E , aC = Math.PI; function rC(t, e, i, n, o, a) { var r = e.get("color"); o ? (o.setColor(r), i.add(o), a && a.onUpdate(o)) : ((o = wg(t.get("symbol"), -1, -1, 2, 2, r)).setStyle("strokeNoScale", !0), i.add(o), a && a.onCreate(o)); var s = e.getItemStyle(["color", "symbol", "symbolSize"]); o.setStyle(s), n = m({ rectHover: !0, z2: 100 }, n, !0); var l = t.get("symbolSize"); (l = l instanceof Array ? l.slice() : [+l, +l])[0] /= 2, l[1] /= 2, n.scale = l; var u = t.get("symbolOffset"); if (u) { var h = n.position = n.position || [0, 0]; h[0] += Rl(u[0], l[0]), h[1] += Rl(u[1], l[1]) } var c = t.get("symbolRotate"); return n.rotation = (c || 0) * Math.PI / 180 || 0, o.attr(n), o.updateTransform(), o } function sC(t, e, i, n, o) { if (!t.dragging) { var a = n.getModel("checkpointStyle") , r = i.dataToCoord(n.getData().get(["value"], e)); o || !a.get("animation", !0) ? t.attr({ position: [r, 0] }) : (t.stopAnimation(!0), t.animateTo({ position: [r, 0] }, a.get("animationDuration", !0), a.get("animationEasing", !0))) } } iC.extend({ type: "timeline.slider", init: function(t, e) { this.api = e, this._axis, this._viewRect, this._timer, this._currentPointer, this._mainGroup, this._labelGroup }, render: function(e, t, i, n) { if (this.model = e, this.api = i, this.ecModel = t, this.group.removeAll(), e.get("show", !0)) { var o = this._layout(e, i) , a = this._createGroup("mainGroup") , r = this._createGroup("labelGroup") , s = this._axis = this._createAxis(o, e); e.formatTooltip = function(t) { return au(s.scale.getLabel(t)) } , oC(["AxisLine", "AxisTick", "Control", "CurrentPointer"], function(t) { this["_render" + t](o, a, s, e) }, this), this._renderAxisLabel(o, r, s, e), this._position(o, e) } this._doPlayStop() }, remove: function() { this._clearTimer(), this.group.removeAll() }, dispose: function() { this._clearTimer() }, _layout: function(t, e) { var i = t.get("label.position") , n = t.get("orient") , o = function(t, e) { return bu(t.getBoxLayoutParams(), { width: e.getWidth(), height: e.getHeight() }, t.get("padding")) }(t, e); null == i || "auto" === i ? i = "horizontal" === n ? o.y + o.height / 2 < e.getHeight() / 2 ? "-" : "+" : o.x + o.width / 2 < e.getWidth() / 2 ? "+" : "-" : isNaN(i) && (i = { horizontal: { top: "-", bottom: "+" }, vertical: { left: "-", right: "+" } }[n][i]); var a, r, s, l, u = { horizontal: "center", vertical: 0 <= i || "+" === i ? "left" : "right" }, h = { horizontal: 0 <= i || "+" === i ? "top" : "bottom", vertical: "middle" }, c = { horizontal: 0, vertical: aC / 2 }, d = "vertical" === n ? o.height : o.width, f = t.getModel("controlStyle"), p = f.get("show", !0), g = p ? f.get("itemSize") : 0, m = p ? f.get("itemGap") : 0, v = g + m, y = t.get("label.rotate") || 0; y = y * aC / 180; var x = f.get("position", !0) , _ = p && f.get("showPlayBtn", !0) , w = p && f.get("showPrevBtn", !0) , b = p && f.get("showNextBtn", !0) , S = 0 , M = d; return "left" === x || "bottom" === x ? (_ && (a = [0, 0], S += v), w && (r = [S, 0], S += v)) : (_ && (a = [M - g, 0], M -= v), w && (r = [0, 0], S += v)), b && (s = [M - g, 0], M -= v), l = [S, M], t.get("inverse") && l.reverse(), { viewRect: o, mainLength: d, orient: n, rotation: c[n], labelRotation: y, labelPosOpt: i, labelAlign: t.get("label.align") || u[n], labelBaseline: t.get("label.verticalAlign") || t.get("label.baseline") || h[n], playPosition: a, prevBtnPosition: r, nextBtnPosition: s, axisExtent: l, controlSize: g, controlGap: m } }, _position: function(t, e) { var i = this._mainGroup , n = this._labelGroup , o = t.viewRect; if ("vertical" === t.orient) { var a = ae() , r = o.x , s = o.y + o.height; ue(a, a, [-r, -s]), he(a, a, -aC / 2), ue(a, a, [r, s]), (o = o.clone()).applyTransform(a) } var l = m(o) , u = m(i.getBoundingRect()) , h = m(n.getBoundingRect()) , c = i.position , d = n.position; d[0] = c[0] = l[0][0]; var f, p = t.labelPosOpt; isNaN(p) ? (v(c, u, l, 1, f = "+" === p ? 0 : 1), v(d, h, l, 1, 1 - f)) : (v(c, u, l, 1, f = 0 <= p ? 0 : 1), d[1] = c[1] + p); function g(t) { var e = t.position; t.origin = [l[0][0] - e[0], l[1][0] - e[1]] } function m(t) { return [[t.x, t.x + t.width], [t.y, t.y + t.height]] } function v(t, e, i, n, o) { t[n] += i[n][o] - e[n][o] } i.attr("position", c), n.attr("position", d), i.rotation = n.rotation = t.rotation, g(i), g(n) }, _createAxis: function(t, e) { var i = e.getData() , n = e.get("axisType") , o = sg(e, n); o.getTicks = function() { return i.mapArray(["value"], function(t) { return t }) } ; var a = i.getDataExtent("value"); o.setExtent(a[0], a[1]), o.niceTicks(); var r = new eC("value",o,t.axisExtent,n); return r.model = e, r }, _createGroup: function(t) { var e = this["_" + t] = new Ci; return this.group.add(e), e }, _renderAxisLine: function(t, e, i, n) { var o = i.getExtent(); n.get("lineStyle.show") && e.add(new ls({ shape: { x1: o[0], y1: 0, x2: o[1], y2: 0 }, style: P({ lineCap: "round" }, n.getModel("lineStyle").getLineStyle()), silent: !0, z2: 1 })) }, _renderAxisTick: function(t, s, l, u) { var h = u.getData() , e = l.scale.getTicks(); oC(e, function(t) { var e = l.dataToCoord(t) , i = h.getItemModel(t) , n = i.getModel("itemStyle") , o = i.getModel("emphasis.itemStyle") , a = { position: [e, 0], onclick: nC(this._changeTimeline, this, t) } , r = rC(i, n, s, a); $s(r, o.getItemStyle()), i.get("tooltip") ? (r.dataIndex = t, r.dataModel = u) : r.dataIndex = r.dataModel = null }, this) }, _renderAxisLabel: function(s, l, u, t) { if (u.getLabelModel().get("show")) { var h = t.getData() , e = u.getViewLabels(); oC(e, function(t) { var e = t.tickValue , i = h.getItemModel(e) , n = i.getModel("label") , o = i.getModel("emphasis.label") , a = u.dataToCoord(t.tickValue) , r = new Ur({ position: [a, 0], rotation: s.labelRotation - s.rotation, onclick: nC(this._changeTimeline, this, e), silent: !1 }); nl(r.style, n, { text: t.formattedLabel, textAlign: s.labelAlign, textVerticalAlign: s.labelBaseline }), l.add(r), $s(r, nl({}, o)) }, this) } }, _renderControl: function(t, a, e, r) { var s = t.controlSize , l = t.rotation , u = r.getModel("controlStyle").getItemStyle() , h = r.getModel("emphasis.controlStyle").getItemStyle() , c = [0, -s / 2, s, s] , i = r.getPlayState() , n = r.get("inverse", !0); function o(t, e, i, n) { if (t) { var o = function(t, e, i, n) { return Ps(t.get(e).replace(/^path:\/\//, ""), k(n || {}), new Di(i[0],i[1],i[2],i[3]), "center") }(r, e, c, { position: t, origin: [s / 2, 0], rotation: n ? -l : 0, rectHover: !0, style: u, onclick: i }); a.add(o), $s(o, h) } } o(t.nextBtnPosition, "controlStyle.nextIcon", nC(this._changeTimeline, this, n ? "-" : "+")), o(t.prevBtnPosition, "controlStyle.prevIcon", nC(this._changeTimeline, this, n ? "+" : "-")), o(t.playPosition, "controlStyle." + (i ? "stopIcon" : "playIcon"), nC(this._handlePlayClick, this, !i), !0) }, _renderCurrentPointer: function(t, e, i, n) { var o = n.getData() , a = n.getCurrentIndex() , r = o.getItemModel(a).getModel("checkpointStyle") , s = this , l = { onCreate: function(t) { t.draggable = !0, t.drift = nC(s._handlePointerDrag, s), t.ondragend = nC(s._handlePointerDragend, s), sC(t, a, i, n, !0) }, onUpdate: function(t) { sC(t, a, i, n) } }; this._currentPointer = rC(r, r, this._mainGroup, {}, this._currentPointer, l) }, _handlePlayClick: function(t) { this._clearTimer(), this.api.dispatchAction({ type: "timelinePlayChange", playState: t, from: this.uid }) }, _handlePointerDrag: function(t, e, i) { this._clearTimer(), this._pointerChangeTimeline([i.offsetX, i.offsetY]) }, _handlePointerDragend: function(t) { this._pointerChangeTimeline([t.offsetX, t.offsetY], !0) }, _pointerChangeTimeline: function(t, e) { var i = this._toAxisCoord(t)[0] , n = Bl(this._axis.getExtent().slice()); i > n[1] && (i = n[1]), i < n[0] && (i = n[0]), this._currentPointer.position[0] = i, this._currentPointer.dirty(); var o = this._findNearestTick(i) , a = this.model; (e || o !== a.getCurrentIndex() && a.get("realtime")) && this._changeTimeline(o) }, _doPlayStop: function() { this._clearTimer(), this.model.getPlayState() && (this._timer = setTimeout(nC(function() { var t = this.model; this._changeTimeline(t.getCurrentIndex() + (t.get("rewind", !0) ? -1 : 1)) }, this), this.model.get("playInterval"))) }, _toAxisCoord: function(t) { return pl(t, this._mainGroup.getLocalTransform(), !0) }, _findNearestTick: function(o) { var a, t = this.model.getData(), r = 1 / 0, s = this._axis; return t.each(["value"], function(t, e) { var i = s.dataToCoord(t) , n = Math.abs(i - o); n < r && (r = n, a = e) }), a }, _clearTimer: function() { this._timer && (clearTimeout(this._timer), this._timer = null) }, _changeTimeline: function(t) { var e = this.model.getCurrentIndex(); "+" === t ? t = e + 1 : "-" === t && (t = e - 1), this.api.dispatchAction({ type: "timelineChange", currentIndex: t, from: this.uid }) } }), yf(function(t) { var e = t && t.timeline; L(e) || (e = e ? [e] : []), E(e, function(t) { t && function(t) { var e = t.type , i = { number: "value", time: "time" }; i[e] && (t.axisType = i[e], delete t.type); if (JD(t), QD(t, "controlPosition")) { var n = t.controlStyle || (t.controlStyle = {}); QD(n, "position") || (n.position = t.controlPosition), "none" !== n.position || QD(n, "show") || (n.show = !1, delete n.position), delete t.controlPosition } E(t.data || [], function(t) { z(t) && !L(t) && (!QD(t, "value") && QD(t, "name") && (t.value = t.name), JD(t)) }) }(t) }) }); var lC = tu , uC = au; function hC(t) { Go(t, "label", ["show"]) } var cC = Tf({ type: "marker", dependencies: ["series", "grid", "polar", "geo"], init: function(t, e, i) { this.mergeDefaultAndTheme(t, i), this._mergeOption(t, i, !1, !0) }, isAnimationEnabled: function() { if (v.node) return !1; var t = this.__hostSeries; return this.getShallow("animation") && t && t.isAnimationEnabled() }, mergeOption: function(t, e) { this._mergeOption(t, e, !1, !1) }, _mergeOption: function(t, n, e, o) { var a = this.constructor , r = this.mainType + "Model"; e || n.eachSeries(function(t) { var e = t.get(this.mainType, !0) , i = t[r]; e && e.data ? (i ? i._mergeOption(e, n, !0) : (o && hC(e), E(e.data, function(t) { t instanceof Array ? (hC(t[0]), hC(t[1])) : hC(t) }), P(i = new a(e,this,n), { mainType: this.mainType, seriesIndex: t.seriesIndex, name: t.name, createdBySelf: !0 }), i.__hostSeries = t), t[r] = i) : t[r] = null }, this) }, formatTooltip: function(t) { var e = this.getData() , i = this.getRawValue(t) , n = L(i) ? O(i, lC).join(", ") : lC(i) , o = e.getName(t) , a = uC(this.name); return null == i && !o || (a += "
"), o && (a += uC(o), null != i && (a += " : ")), null != i && (a += uC(n)), a }, getData: function() { return this._data }, setData: function(t) { this._data = t } }); b(cC, Xh), cC.extend({ type: "markPoint", defaultOption: { zlevel: 0, z: 5, symbol: "pin", symbolSize: 50, tooltip: { trigger: "item" }, label: { show: !0, position: "inside" }, itemStyle: { borderWidth: 2 }, emphasis: { label: { show: !0 } } } }); var dC = _; function fC(t, e, i, n, o, a) { var r = [] , s = fp(e, n) ? e.getCalculationInfo("stackResultDimension") : n , l = _C(e, s, t) , u = e.indicesOfNearest(s, l)[0]; r[o] = e.get(i, u), r[a] = e.get(s, u); var h = e.get(n, u) , c = Vl(e.get(n, u)); return 0 <= (c = Math.min(c, 20)) && (r[a] = +r[a].toFixed(c)), [r, h] } var pC = T , gC = { min: pC(fC, "min"), max: pC(fC, "max"), average: pC(fC, "average") }; function mC(t, e) { var i = t.getData() , n = t.coordinateSystem; if (e && !function(t) { return !isNaN(parseFloat(t.x)) && !isNaN(parseFloat(t.y)) }(e) && !L(e.coord) && n) { var o = n.dimensions , a = vC(e, i, n, t); if ((e = k(e)).type && gC[e.type] && a.baseAxis && a.valueAxis) { var r = dC(o, a.baseAxis.dim) , s = dC(o, a.valueAxis.dim) , l = gC[e.type](i, a.baseDataDim, a.valueDataDim, r, s); e.coord = l[0], e.value = l[1] } else { for (var u = [null != e.xAxis ? e.xAxis : e.radiusAxis, null != e.yAxis ? e.yAxis : e.angleAxis], h = 0; h < 2; h++) gC[u[h]] && (u[h] = _C(i, i.mapDimension(o[h]), u[h])); e.coord = u } } return e } function vC(t, e, i, n) { var o = {}; return null != t.valueIndex || null != t.valueDim ? (o.valueDataDim = null != t.valueIndex ? e.getDimension(t.valueIndex) : t.valueDim, o.valueAxis = i.getAxis(function(t, e) { var i = t.getData() , n = i.dimensions; e = i.getDimension(e); for (var o = 0; o < n.length; o++) { var a = i.getDimensionInfo(n[o]); if (a.name === e) return a.coordDim } }(n, o.valueDataDim)), o.baseAxis = i.getOtherAxis(o.valueAxis), o.baseDataDim = e.mapDimension(o.baseAxis.dim)) : (o.baseAxis = n.getBaseAxis(), o.valueAxis = i.getOtherAxis(o.baseAxis), o.baseDataDim = e.mapDimension(o.baseAxis.dim), o.valueDataDim = e.mapDimension(o.valueAxis.dim)), o } function yC(t, e) { return !(t && t.containData && e.coord && !function(t) { return !(isNaN(parseFloat(t.x)) && isNaN(parseFloat(t.y))) }(e)) || t.containData(e.coord) } function xC(t, e, i, n) { return n < 2 ? t.coord && t.coord[n] : t.value } function _C(t, e, i) { if ("average" !== i) return "median" === i ? t.getMedian(e) : t.getDataExtent(e, !0)["max" === i ? 1 : 0]; var n = 0 , o = 0; return t.each(e, function(t, e) { isNaN(t) || (n += t, o++) }), n / o } var wC = Af({ type: "marker", init: function() { this.markerGroupMap = Q() }, render: function(t, i, n) { var e = this.markerGroupMap; e.each(function(t) { t.__keep = !1 }); var o = this.type + "Model"; i.eachSeries(function(t) { var e = t[o]; e && this.renderSeries(t, e, i, n) }, this), e.each(function(t) { t.__keep || this.group.remove(t.group) }, this) }, renderSeries: function() {} }); function bC(s, l, u) { var h = l.coordinateSystem; s.each(function(t) { var e, i = s.getItemModel(t), n = Rl(i.get("x"), u.getWidth()), o = Rl(i.get("y"), u.getHeight()); if (isNaN(n) || isNaN(o)) { if (l.getMarkerPosition) e = l.getMarkerPosition(s.getValues(s.dimensions, t)); else if (h) { var a = s.get(h.dimensions[0], t) , r = s.get(h.dimensions[1], t); e = h.dataToPoint([a, r]) } } else e = [n, o]; isNaN(n) || (e[0] = n), isNaN(o) || (e[1] = o), s.setItemLayout(t, e) }) } wC.extend({ type: "markPoint", updateTransform: function(t, e, i) { e.eachSeries(function(t) { var e = t.markPointModel; e && (bC(e.getData(), t, i), this.markerGroupMap.get(t.id).updateLayout(e)) }, this) }, renderSeries: function(t, l, e, i) { var n = t.coordinateSystem , o = t.id , u = t.getData() , a = this.markerGroupMap , r = a.get(o) || a.set(o, new im) , h = function(t, e, i) { var n; n = t ? O(t && t.dimensions, function(t) { return D({ name: t }, e.getData().getDimensionInfo(e.getData().mapDimension(t)) || {}) }) : [{ name: "value", type: "float" }]; var o = new Yf(n,i) , a = O(i.get("data"), T(mC, e)); t && (a = M(a, T(yC, t))); return o.initData(a, null, t ? xC : function(t) { return t.value } ), o }(n, t, l); l.setData(h), bC(l.getData(), t, i), h.each(function(t) { var e = h.getItemModel(t) , i = e.getShallow("symbol") , n = e.getShallow("symbolSize") , o = C(i) , a = C(n); if (o || a) { var r = l.getRawValue(t) , s = l.getDataParams(t); o && (i = i(r, s)), a && (n = n(r, s)) } h.setItemVisual(t, { symbol: i, symbolSize: n, color: e.get("itemStyle.color") || u.getVisual("color") }) }), r.updateData(h), this.group.add(r.group), h.eachItemGraphicEl(function(t) { t.traverse(function(t) { t.dataModel = l }) }), r.__keep = !0, r.group.silent = l.get("silent") || t.get("silent") } }), yf(function(t) { t.markPoint = t.markPoint || {} }), cC.extend({ type: "markLine", defaultOption: { zlevel: 0, z: 5, symbol: ["circle", "arrow"], symbolSize: [8, 16], precision: 2, tooltip: { trigger: "item" }, label: { show: !0, position: "end", distance: 5 }, lineStyle: { type: "dashed" }, emphasis: { label: { show: !0 }, lineStyle: { width: 3 } }, animationEasing: "linear" } }); function SC(t, e, i, n) { var o = t.getData() , a = n.type; if (!L(n) && ("min" === a || "max" === a || "average" === a || "median" === a || null != n.xAxis || null != n.yAxis)) { var r, s; if (null != n.yAxis || null != n.xAxis) r = e.getAxis(null != n.yAxis ? "y" : "x"), s = W(n.yAxis, n.xAxis); else { var l = vC(n, o, e, t); r = l.valueAxis, s = _C(o, pp(o, l.valueDataDim), a) } var u = "x" === r.dim ? 0 : 1 , h = 1 - u , c = k(n) , d = {}; c.type = null, c.coord = [], d.coord = [], c.coord[h] = -1 / 0, d.coord[h] = 1 / 0; var f = i.get("precision"); 0 <= f && "number" == typeof s && (s = +s.toFixed(Math.min(f, 20))), c.coord[u] = d.coord[u] = s, n = [c, d, { type: a, valueIndex: n.valueIndex, value: s }] } return (n = [mC(t, n[0]), mC(t, n[1]), P({}, n[2])])[2].type = n[2].type || "", m(n[2], n[0]), m(n[2], n[1]), n } function MC(t) { return !isNaN(t) && !isFinite(t) } function IC(t, e, i, n) { var o = 1 - t , a = n.dimensions[t]; return MC(e[o]) && MC(i[o]) && e[t] === i[t] && n.getAxis(a).containData(e[t]) } function TC(t, e) { if ("cartesian2d" === t.type) { var i = e[0].coord , n = e[1].coord; if (i && n && (IC(1, i, n, t) || IC(0, i, n, t))) return !0 } return yC(t, e[0]) && yC(t, e[1]) } function AC(t, e, i, n, o) { var a, r = n.coordinateSystem, s = t.getItemModel(e), l = Rl(s.get("x"), o.getWidth()), u = Rl(s.get("y"), o.getHeight()); if (isNaN(l) || isNaN(u)) { if (n.getMarkerPosition) a = n.getMarkerPosition(t.getValues(t.dimensions, e)); else { var h = r.dimensions , c = t.get(h[0], e) , d = t.get(h[1], e); a = r.dataToPoint([c, d]) } if ("cartesian2d" === r.type) { var f = r.getAxis("x") , p = r.getAxis("y"); h = r.dimensions; MC(t.get(h[0], e)) ? a[0] = f.toGlobalCoord(f.getExtent()[i ? 0 : 1]) : MC(t.get(h[1], e)) && (a[1] = p.toGlobalCoord(p.getExtent()[i ? 0 : 1])) } isNaN(l) || (a[0] = l), isNaN(u) || (a[1] = u) } else a = [l, u]; t.setItemLayout(e, a) } wC.extend({ type: "markLine", updateTransform: function(t, e, a) { e.eachSeries(function(e) { var t = e.markLineModel; if (t) { var i = t.getData() , n = t.__from , o = t.__to; n.each(function(t) { AC(n, t, !0, e, a), AC(o, t, !1, e, a) }), i.each(function(t) { i.setItemLayout(t, [n.getItemLayout(t), o.getItemLayout(t)]) }), this.markerGroupMap.get(e.id).updateLayout() } }, this) }, renderSeries: function(o, i, t, a) { var e = o.coordinateSystem , n = o.id , r = o.getData() , s = this.markerGroupMap , l = s.get(n) || s.set(n, new pw); this.group.add(l.group); var u = function(t, e, i) { var n; n = t ? O(t && t.dimensions, function(t) { return D({ name: t }, e.getData().getDimensionInfo(e.getData().mapDimension(t)) || {}) }) : [{ name: "value", type: "float" }]; var o = new Yf(n,i) , a = new Yf(n,i) , r = new Yf([],i) , s = O(i.get("data"), T(SC, e, t, i)); t && (s = M(s, T(TC, t))); var l = t ? xC : function(t) { return t.value } ; return o.initData(O(s, function(t) { return t[0] }), null, l), a.initData(O(s, function(t) { return t[1] }), null, l), r.initData(O(s, function(t) { return t[2] })), r.hasItemOption = !0, { from: o, to: a, line: r } }(e, o, i) , h = u.from , c = u.to , d = u.line; i.__from = h, i.__to = c, i.setData(d); var f = i.get("symbol") , p = i.get("symbolSize"); function g(t, e, i) { var n = t.getItemModel(e); AC(t, e, i, o, a), t.setItemVisual(e, { symbolSize: n.get("symbolSize") || p[i ? 0 : 1], symbol: n.get("symbol", !0) || f[i ? 0 : 1], color: n.get("itemStyle.color") || r.getVisual("color") }) } L(f) || (f = [f, f]), "number" == typeof p && (p = [p, p]), u.from.each(function(t) { g(h, t, !0), g(c, t, !1) }), d.each(function(t) { var e = d.getItemModel(t).get("lineStyle.color"); d.setItemVisual(t, { color: e || h.getItemVisual(t, "color") }), d.setItemLayout(t, [h.getItemLayout(t), c.getItemLayout(t)]), d.setItemVisual(t, { fromSymbolSize: h.getItemVisual(t, "symbolSize"), fromSymbol: h.getItemVisual(t, "symbol"), toSymbolSize: c.getItemVisual(t, "symbolSize"), toSymbol: c.getItemVisual(t, "symbol") }) }), l.updateData(d), u.line.eachItemGraphicEl(function(t, e) { t.traverse(function(t) { t.dataModel = i }) }), l.__keep = !0, l.group.silent = i.get("silent") || o.get("silent") } }), yf(function(t) { t.markLine = t.markLine || {} }), cC.extend({ type: "markArea", defaultOption: { zlevel: 0, z: 1, tooltip: { trigger: "item" }, animation: !1, label: { show: !0, position: "top" }, itemStyle: { borderWidth: 0 }, emphasis: { label: { show: !0, position: "top" } } } }); function DC(t, e, i, n) { var o = mC(t, n[0]) , a = mC(t, n[1]) , r = W , s = o.coord , l = a.coord; s[0] = r(s[0], -1 / 0), s[1] = r(s[1], -1 / 0), l[0] = r(l[0], 1 / 0), l[1] = r(l[1], 1 / 0); var u = p([{}, o, a]); return u.coord = [o.coord, a.coord], u.x0 = o.x, u.y0 = o.y, u.x1 = a.x, u.y1 = a.y, u } function CC(t) { return !isNaN(t) && !isFinite(t) } function LC(t, e, i) { var n = 1 - t; return CC(e[n]) && CC(i[n]) } function kC(t, e) { var i = e.coord[0] , n = e.coord[1]; return !("cartesian2d" !== t.type || !i || !n || !LC(1, i, n) && !LC(0, i, n)) || (yC(t, { coord: i, x: e.x0, y: e.y0 }) || yC(t, { coord: n, x: e.x1, y: e.y1 })) } function PC(t, e, i, n, o) { var a, r = n.coordinateSystem, s = t.getItemModel(e), l = Rl(s.get(i[0]), o.getWidth()), u = Rl(s.get(i[1]), o.getHeight()); if (isNaN(l) || isNaN(u)) { if (n.getMarkerPosition) a = n.getMarkerPosition(t.getValues(i, e)); else { var h = [f = t.get(i[0], e), p = t.get(i[1], e)]; r.clampData && r.clampData(h, h), a = r.dataToPoint(h, !0) } if ("cartesian2d" === r.type) { var c = r.getAxis("x") , d = r.getAxis("y") , f = t.get(i[0], e) , p = t.get(i[1], e); CC(f) ? a[0] = c.toGlobalCoord(c.getExtent()["x0" === i[0] ? 0 : 1]) : CC(p) && (a[1] = d.toGlobalCoord(d.getExtent()["y0" === i[1] ? 0 : 1])) } isNaN(l) || (a[0] = l), isNaN(u) || (a[1] = u) } else a = [l, u]; return a } var NC = [["x0", "y0"], ["x1", "y0"], ["x1", "y1"], ["x0", "y1"]]; wC.extend({ type: "markArea", updateTransform: function(t, e, o) { e.eachSeries(function(i) { var t = i.markAreaModel; if (t) { var n = t.getData(); n.each(function(e) { var t = O(NC, function(t) { return PC(n, e, t, i, o) }); n.setItemLayout(e, t), n.getItemGraphicEl(e).setShape("points", t) }) } }, this) }, renderSeries: function(i, r, t, n) { var e = i.coordinateSystem , o = i.id , a = i.getData() , s = this.markerGroupMap , l = s.get(o) || s.set(o, { group: new Ci }); this.group.add(l.group), l.__keep = !0; var u = function(t, i, e) { var n, o; o = t ? (n = O(t && t.dimensions, function(t) { var e = i.getData(); return D({ name: t }, e.getDimensionInfo(e.mapDimension(t)) || {}) }), new Yf(O(["x0", "y0", "x1", "y1"], function(t, e) { return { name: t, type: n[e % 2].type } }),e)) : new Yf(n = [{ name: "value", type: "float" }],e); var a = O(e.get("data"), T(DC, i, t, e)); t && (a = M(a, T(kC, t))); var r = t ? function(t, e, i, n) { return t.coord[Math.floor(n / 2)][n % 2] } : function(t) { return t.value } ; return o.initData(a, null, r), o.hasItemOption = !0, o }(e, i, r); r.setData(u), u.each(function(e) { u.setItemLayout(e, O(NC, function(t) { return PC(u, e, t, i, n) })), u.setItemVisual(e, { color: a.getVisual("color") }) }), u.diff(l.__data).add(function(t) { var e = new Qr({ shape: { points: u.getItemLayout(t) } }); u.setItemGraphicEl(t, e), l.group.add(e) }).update(function(t, e) { var i = l.__data.getItemGraphicEl(e); cl(i, { shape: { points: u.getItemLayout(t) } }, r, t), l.group.add(i), u.setItemGraphicEl(t, i) }).remove(function(t) { var e = l.__data.getItemGraphicEl(t); l.group.remove(e) }).execute(), u.eachItemGraphicEl(function(t, e) { var i = u.getItemModel(e) , n = i.getModel("label") , o = i.getModel("emphasis.label") , a = u.getItemVisual(e, "color"); t.useStyle(D(i.getModel("itemStyle").getItemStyle(), { fill: Ke(a, .4), stroke: a })), t.hoverStyle = i.getModel("emphasis.itemStyle").getItemStyle(), el(t.style, t.hoverStyle, n, o, { labelFetcher: r, labelDataIndex: e, defaultText: u.getName(e) || "", isRectText: !0, autoColor: a }), $s(t, {}), t.dataModel = r }), l.__data = u, l.group.silent = r.get("silent") || i.get("silent") } }), yf(function(t) { t.markArea = t.markArea || {} }); var OC = Oc.legend.selector , EC = { all: { type: "all", title: k(OC.all) }, inverse: { type: "inverse", title: k(OC.inverse) } } , RC = Tf({ type: "legend.plain", dependencies: ["series"], layoutMode: { type: "box", ignoreSize: !0 }, init: function(t, e, i) { this.mergeDefaultAndTheme(t, i), t.selected = t.selected || {}, this._updateSelector(t) }, mergeOption: function(t) { RC.superCall(this, "mergeOption", t), this._updateSelector(t) }, _updateSelector: function(t) { var i = t.selector; !0 === i && (i = t.selector = ["all", "inverse"]), L(i) && E(i, function(t, e) { R(t) && (t = { type: t }), i[e] = m(t, EC[t.type]) }) }, optionUpdated: function() { this._updateData(this.ecModel); var t = this._data; if (t[0] && "single" === this.get("selectedMode")) { for (var e = !1, i = 0; i < t.length; i++) { var n = t[i].get("name"); if (this.isSelected(n)) { this.select(n), e = !0; break } } e || this.select(t[0].get("name")) } }, _updateData: function(o) { var a = [] , r = []; o.eachRawSeries(function(t) { var e, i = t.name; if (r.push(i), t.legendVisualProvider) { var n = t.legendVisualProvider.getAllNames(); o.isSeriesFiltered(t) || (r = r.concat(n)), n.length ? a = a.concat(n) : e = !0 } else e = !0; e && Uo(t) && a.push(t.name) }), this._availableNames = r; var t = O(this.get("data") || a, function(t) { return "string" != typeof t && "number" != typeof t || (t = { name: t }), new Cl(t,this,this.ecModel) }, this); this._data = t }, getData: function() { return this._data }, select: function(t) { var e = this.option.selected; "single" === this.get("selectedMode") && E(this._data, function(t) { e[t.get("name")] = !1 }); e[t] = !0 }, unSelect: function(t) { "single" !== this.get("selectedMode") && (this.option.selected[t] = !1) }, toggleSelected: function(t) { var e = this.option.selected; e.hasOwnProperty(t) || (e[t] = !0), this[e[t] ? "unSelect" : "select"](t) }, allSelect: function() { var t = this._data , e = this.option.selected; E(t, function(t) { e[t.get("name", !0)] = !0 }) }, inverseSelect: function() { var t = this._data , i = this.option.selected; E(t, function(t) { var e = t.get("name", !0); i.hasOwnProperty(e) || (i[e] = !0), i[e] = !i[e] }) }, isSelected: function(t) { var e = this.option.selected; return !(e.hasOwnProperty(t) && !e[t]) && 0 <= _(this._availableNames, t) }, getOrient: function() { return "vertical" === this.get("orient") ? { index: 1, name: "vertical" } : { index: 0, name: "horizontal" } }, defaultOption: { zlevel: 0, z: 4, show: !0, orient: "horizontal", left: "center", top: 0, align: "auto", backgroundColor: "rgba(0,0,0,0)", borderColor: "#ccc", borderRadius: 0, borderWidth: 0, padding: 5, itemGap: 10, itemWidth: 25, itemHeight: 14, inactiveColor: "#ccc", inactiveBorderColor: "#ccc", itemStyle: { borderWidth: 0 }, textStyle: { color: "#333" }, selectedMode: !0, selector: !1, selectorLabel: { show: !0, borderRadius: 10, padding: [3, 5, 3, 5], fontSize: 12, fontFamily: " sans-serif", color: "#666", borderWidth: 1, borderColor: "#666" }, emphasis: { selectorLabel: { show: !0, color: "#eee", backgroundColor: "#666" } }, selectorPosition: "auto", selectorItemGap: 7, selectorButtonGap: 10, tooltip: { show: !1 } } }); function zC(t, e, i) { var o, a = {}, r = "toggleSelected" === t; return i.eachComponent("legend", function(n) { r && null != o ? n[o ? "select" : "unSelect"](e.name) : "allSelect" === t || "inverseSelect" === t ? n[t]() : (n[t](e.name), o = n.isSelected(e.name)), E(n.getData(), function(t) { var e = t.get("name"); if ("\n" !== e && "" !== e) { var i = n.isSelected(e); a.hasOwnProperty(e) ? a[e] = a[e] && i : a[e] = i } }) }), "allSelect" === t || "inverseSelect" === t ? { selected: a } : { name: e.name, selected: a } } _f("legendToggleSelect", "legendselectchanged", T(zC, "toggleSelected")), _f("legendAllSelect", "legendselectall", T(zC, "allSelect")), _f("legendInverseSelect", "legendinverseselect", T(zC, "inverseSelect")), _f("legendSelect", "legendselected", T(zC, "select")), _f("legendUnSelect", "legendunselected", T(zC, "unSelect")); var BC = T , VC = E , GC = Ci , FC = Af({ type: "legend.plain", newlineDisabled: !1, init: function() { this.group.add(this._contentGroup = new GC), this._backgroundEl, this.group.add(this._selectorGroup = new GC), this._isFirstRender = !0 }, getContentGroup: function() { return this._contentGroup }, getSelectorGroup: function() { return this._selectorGroup }, render: function(t, e, i) { var n = this._isFirstRender; if (this._isFirstRender = !1, this.resetInner(), t.get("show", !0)) { var o = t.get("align") , a = t.get("orient"); o && "auto" !== o || (o = "right" === t.get("left") && "vertical" === a ? "right" : "left"); var r = t.get("selector", !0) , s = t.get("selectorPosition", !0); !r || s && "auto" !== s || (s = "horizontal" === a ? "end" : "start"), this.renderInner(o, t, e, i, r, a, s); var l = t.getBoxLayoutParams() , u = { width: i.getWidth(), height: i.getHeight() } , h = t.get("padding") , c = bu(l, u, h) , d = this.layoutInner(t, o, c, n, r, s) , f = bu(D({ width: d.width, height: d.height }, l), u, h); this.group.attr("position", [f.x - d.x, f.y - d.y]), this.group.add(this._backgroundEl = rA(d, t)) } }, resetInner: function() { this.getContentGroup().removeAll(), this._backgroundEl && this.group.remove(this._backgroundEl), this.getSelectorGroup().removeAll() }, renderInner: function(u, h, c, d, t, e, i) { var f = this.getContentGroup() , p = Q() , g = h.get("selectedMode") , m = []; c.eachRawSeries(function(t) { t.get("legendHoverLink") || m.push(t.id) }), VC(h.getData(), function(a, r) { var s = a.get("name"); if (this.newlineDisabled || "" !== s && "\n" !== s) { var t = c.getSeriesByName(s)[0]; if (!p.get(s)) if (t) { var e = t.getData() , i = e.getVisual("color") , n = e.getVisual("borderColor"); "function" == typeof i && (i = i(t.getDataParams(0))), "function" == typeof n && (n = n(t.getDataParams(0))); var o = e.getVisual("legendSymbol") || "roundRect" , l = e.getVisual("symbol"); this._createItem(s, r, a, h, o, l, u, i, n, g).on("click", BC(HC, s, null, d, m)).on("mouseover", BC(ZC, t.name, null, d, m)).on("mouseout", BC(UC, t.name, null, d, m)), p.set(s, !0) } else c.eachRawSeries(function(t) { if (!p.get(s) && t.legendVisualProvider) { var e = t.legendVisualProvider; if (!e.containName(s)) return; var i = e.indexOfName(s) , n = e.getItemVisual(i, "color") , o = e.getItemVisual(i, "borderColor"); this._createItem(s, r, a, h, "roundRect", null, u, n, o, g).on("click", BC(HC, null, s, d, m)).on("mouseover", BC(ZC, null, s, d, m)).on("mouseout", BC(UC, null, s, d, m)), p.set(s, !0) } }, this) } else f.add(new GC({ newline: !0 })) }, this), t && this._createSelector(t, h, d, e, i) }, _createSelector: function(t, a, r, e, i) { var s = this.getSelectorGroup(); VC(t, function(t) { !function(t) { var e = t.type , i = new Ur({ style: { x: 0, y: 0, align: "center", verticalAlign: "middle" }, onclick: function() { r.dispatchAction({ type: "all" === e ? "legendAllSelect" : "legendInverseSelect" }) } }); s.add(i); var n = a.getModel("selectorLabel") , o = a.getModel("emphasis.selectorLabel"); el(i.style, i.hoverStyle = {}, n, o, { defaultText: t.title, isRectText: !1 }), $s(i) }(t) }) }, _createItem: function(t, e, i, n, o, a, r, s, l, u) { var h = n.get("itemWidth") , c = n.get("itemHeight") , d = n.get("inactiveColor") , f = n.get("inactiveBorderColor") , p = n.get("symbolKeepAspect") , g = n.getModel("itemStyle") , m = n.isSelected(t) , v = new GC , y = i.getModel("textStyle") , x = i.get("icon") , _ = i.getModel("tooltip") , w = _.parentModel , b = wg(o = x || o, 0, 0, h, c, m ? s : d, null == p || p); if (v.add(WC(b, o, g, l, f, m)), !x && a && (a !== o || "none" === a)) { var S = .8 * c; "none" === a && (a = "circle"); var M = wg(a, (h - S) / 2, (c - S) / 2, S, S, m ? s : d, null == p || p); v.add(WC(M, a, g, l, f, m)) } var I = "left" === r ? h + 5 : -5 , T = r , A = n.get("formatter") , D = t; "string" == typeof A && A ? D = A.replace("{name}", null != t ? t : "") : "function" == typeof A && (D = A(t)), v.add(new Ur({ style: nl({}, y, { text: D, x: I, y: c / 2, textFill: m ? y.getTextColor() : d, textAlign: T, textVerticalAlign: "middle" }) })); var C = new rs({ shape: v.getBoundingRect(), invisible: !0, tooltip: _.get("show") ? P({ content: t, formatter: w.get("formatter", !0) || function() { return t } , formatterParams: { componentType: "legend", legendIndex: n.componentIndex, name: t, $vars: ["name"] } }, _.option) : null }); return v.add(C), v.eachChild(function(t) { t.silent = !0 }), C.silent = !u, this.getContentGroup().add(v), $s(v), v.__legendDataIndex = e, v }, layoutInner: function(t, e, i, n, o, a) { var r = this.getContentGroup() , s = this.getSelectorGroup(); wu(t.get("orient"), r, t.get("itemGap"), i.width, i.height); var l = r.getBoundingRect() , u = [-l.x, -l.y]; if (o) { wu("horizontal", s, t.get("selectorItemGap", !0)); var h = s.getBoundingRect() , c = [-h.x, -h.y] , d = t.get("selectorButtonGap", !0) , f = t.getOrient().index , p = 0 === f ? "width" : "height" , g = 0 === f ? "height" : "width" , m = 0 === f ? "y" : "x"; "end" === a ? c[f] += l[p] + d : u[f] += h[p] + d, c[1 - f] += l[g] / 2 - h[g] / 2, s.attr("position", c), r.attr("position", u); var v = { x: 0, y: 0 }; return v[p] = l[p] + d + h[p], v[g] = Math.max(l[g], h[g]), v[m] = Math.min(0, h[m] + c[1 - f]), v } return r.attr("position", u), this.group.getBoundingRect() }, remove: function() { this.getContentGroup().removeAll(), this._isFirstRender = !0 } }); function WC(t, e, i, n, o, a) { var r; return "line" !== e && e.indexOf("empty") < 0 ? (r = i.getItemStyle(), t.style.stroke = n, a || (r.stroke = o)) : r = i.getItemStyle(["borderWidth", "borderColor"]), t.setStyle(r) } function HC(t, e, i, n) { UC(t, e, i, n), i.dispatchAction({ type: "legendToggleSelect", name: null != t ? t : e }), ZC(t, e, i, n) } function ZC(t, e, i, n) { var o = i.getZr().storage.getDisplayList()[0]; o && o.useHoverLayer || i.dispatchAction({ type: "highlight", seriesName: t, name: e, excludeSeriesId: n }) } function UC(t, e, i, n) { var o = i.getZr().storage.getDisplayList()[0]; o && o.useHoverLayer || i.dispatchAction({ type: "downplay", seriesName: t, name: e, excludeSeriesId: n }) } xf(Ld.PROCESSOR.SERIES_FILTER, function(t) { var i = t.findComponents({ mainType: "legend" }); i && i.length && t.filterSeries(function(t) { for (var e = 0; e < i.length; e++) if (!i[e].isSelected(t.name)) return !1; return !0 }) }), ku.registerSubTypeDefaulter("legend", function() { return "plain" }); var XC = RC.extend({ type: "legend.scroll", setScrollDataIndex: function(t) { this.option.scrollDataIndex = t }, defaultOption: { scrollDataIndex: 0, pageButtonItemGap: 5, pageButtonGap: null, pageButtonPosition: "end", pageFormatter: "{current}/{total}", pageIcons: { horizontal: ["M0,0L12,-10L12,10z", "M0,0L-12,-10L-12,10z"], vertical: ["M0,0L20,0L10,-20z", "M0,0L20,0L10,20z"] }, pageIconColor: "#2f4554", pageIconInactiveColor: "#aaa", pageIconSize: 15, pageTextStyle: { color: "#333" }, animationDurationUpdate: 800 }, init: function(t, e, i, n) { var o = Iu(t); XC.superCall(this, "init", t, e, i, n), YC(this, t, o) }, mergeOption: function(t, e) { XC.superCall(this, "mergeOption", t, e), YC(this, this.option, t) } }); function YC(t, e, i) { var n = [1, 1]; n[t.getOrient().index] = 0, Mu(e, i, { type: "box", ignoreSize: n }) } var jC = Ci , qC = ["width", "height"] , KC = ["x", "y"] , $C = FC.extend({ type: "legend.scroll", newlineDisabled: !0, init: function() { $C.superCall(this, "init"), this._currentIndex = 0, this.group.add(this._containerGroup = new jC), this._containerGroup.add(this.getContentGroup()), this.group.add(this._controllerGroup = new jC), this._showController }, resetInner: function() { $C.superCall(this, "resetInner"), this._controllerGroup.removeAll(), this._containerGroup.removeClipPath(), this._containerGroup.__rectSize = null }, renderInner: function(t, o, e, a, i, n, r) { var s = this; $C.superCall(this, "renderInner", t, o, e, a, i, n, r); var l = this._controllerGroup , u = o.get("pageIconSize", !0); L(u) || (u = [u, u]), c("pagePrev", 0); var h = o.getModel("pageTextStyle"); function c(t, e) { var i = t + "DataIndex" , n = yl(o.get("pageIcons", !0)[o.getOrient().name][e], { onclick: A(s._pageGo, s, i, o, a) }, { x: -u[0] / 2, y: -u[1] / 2, width: u[0], height: u[1] }); n.name = t, l.add(n) } l.add(new Ur({ name: "pageText", style: { textFill: h.getTextColor(), font: h.getFont(), textVerticalAlign: "middle", textAlign: "center" }, silent: !0 })), c("pageNext", 1) }, layoutInner: function(t, e, i, n, o, a) { var r = this.getSelectorGroup() , s = t.getOrient().index , l = qC[s] , u = KC[s] , h = qC[1 - s] , c = KC[1 - s]; o && wu("horizontal", r, t.get("selectorItemGap", !0)); var d = t.get("selectorButtonGap", !0) , f = r.getBoundingRect() , p = [-f.x, -f.y] , g = k(i); o && (g[l] = i[l] - f[l] - d); var m = this._layoutContentAndController(t, n, g, s, l, h, c); if (o) { if ("end" === a) p[s] += m[l] + d; else { var v = f[l] + d; p[s] -= v, m[u] -= v } m[l] += f[l] + d, p[1 - s] += m[c] + m[h] / 2 - f[h] / 2, m[h] = Math.max(m[h], f[h]), m[c] = Math.min(m[c], f[c] + p[1 - s]), r.attr("position", p) } return m }, _layoutContentAndController: function(t, e, i, n, o, a, r) { var s = this.getContentGroup() , l = this._containerGroup , u = this._controllerGroup; wu(t.get("orient"), s, t.get("itemGap"), n ? i.width : null, n ? null : i.height), wu("horizontal", u, t.get("pageButtonItemGap", !0)); var h = s.getBoundingRect() , c = u.getBoundingRect() , d = this._showController = h[o] > i[o] , f = [-h.x, -h.y]; e || (f[n] = s.position[n]); var p = [0, 0] , g = [-c.x, -c.y] , m = H(t.get("pageButtonGap", !0), t.get("itemGap", !0)); d && ("end" === t.get("pageButtonPosition", !0) ? g[n] += i[o] - c[o] : p[n] += c[o] + m); g[1 - n] += h[a] / 2 - c[a] / 2, s.attr("position", f), l.attr("position", p), u.attr("position", g); var v = { x: 0, y: 0 }; if (v[o] = d ? i[o] : h[o], v[a] = Math.max(h[a], c[a]), v[r] = Math.min(0, c[r] + g[1 - n]), l.__rectSize = i[o], d) { var y = { x: 0, y: 0 }; y[o] = Math.max(i[o] - c[o] - m, 0), y[a] = v[a], l.setClipPath(new rs({ shape: y })), l.__rectSize = y[o] } else u.eachChild(function(t) { t.attr({ invisible: !0, silent: !0 }) }); var x = this._getPageInfo(t); return null != x.pageIndex && cl(s, { position: x.contentPosition }, d && t), this._updatePageInfoView(t, x), v }, _pageGo: function(t, e, i) { var n = this._getPageInfo(e)[t]; null != n && i.dispatchAction({ type: "legendScroll", scrollDataIndex: n, legendId: e.id }) }, _updatePageInfoView: function(n, o) { var a = this._controllerGroup; E(["pagePrev", "pageNext"], function(t) { var e = null != o[t + "DataIndex"] , i = a.childOfName(t); i && (i.setStyle("fill", e ? n.get("pageIconColor", !0) : n.get("pageIconInactiveColor", !0)), i.cursor = e ? "pointer" : "default") }); var t = a.childOfName("pageText") , e = n.get("pageFormatter") , i = o.pageIndex , r = null != i ? i + 1 : 0 , s = o.pageCount; t && e && t.setStyle("text", R(e) ? e.replace("{current}", r).replace("{total}", s) : e({ current: r, total: s })) }, _getPageInfo: function(t) { var e = t.get("scrollDataIndex", !0) , i = this.getContentGroup() , n = this._containerGroup.__rectSize , o = t.getOrient().index , a = qC[o] , r = KC[o] , s = this._findTargetItemIndex(e) , l = i.children() , u = l[s] , h = l.length , c = h ? 1 : 0 , d = { contentPosition: i.position.slice(), pageCount: c, pageIndex: c - 1, pagePrevDataIndex: null, pageNextDataIndex: null }; if (!u) return d; var f = y(u); d.contentPosition[o] = -f.s; for (var p = s + 1, g = f, m = f, v = null; p <= h; ++p) (!(v = y(l[p])) && m.e > g.s + n || v && !x(v, g.s)) && (g = m.i > g.i ? m : v) && (null == d.pageNextDataIndex && (d.pageNextDataIndex = g.i), ++d.pageCount), m = v; for (p = s - 1, g = f, m = f, v = null; -1 <= p; --p) (v = y(l[p])) && x(m, v.s) || !(g.i < m.i) || (m = g, null == d.pagePrevDataIndex && (d.pagePrevDataIndex = g.i), ++d.pageCount, ++d.pageIndex), g = v; return d; function y(t) { if (t) { var e = t.getBoundingRect() , i = e[r] + t.position[o]; return { s: i, e: i + e[a], i: t.__legendDataIndex } } } function x(t, e) { return t.e >= e && t.s <= e + n } }, _findTargetItemIndex: function(n) { return this._showController ? (this.getContentGroup().eachChild(function(t, e) { var i = t.__legendDataIndex; null == a && null != i && (a = e), i === n && (o = e) }), null != o ? o : a) : 0; var o, a } }); _f("legendScroll", "legendscroll", function(t, e) { var i = t.scrollDataIndex; null != i && e.eachComponent({ mainType: "legend", subType: "scroll", query: t }, function(t) { t.setScrollDataIndex(i) }) }); iD.extend({ type: "dataZoom.slider", layoutMode: "box", defaultOption: { show: !0, right: "ph", top: "ph", width: "ph", height: "ph", left: null, bottom: null, backgroundColor: "rgba(47,69,84,0)", dataBackground: { lineStyle: { color: "#2f4554", width: .5, opacity: .3 }, areaStyle: { color: "rgba(47,69,84,0.3)", opacity: .3 } }, borderColor: "#ddd", fillerColor: "rgba(167,183,204,0.4)", handleIcon: "M8.2,13.6V3.9H6.3v9.7H3.1v14.9h3.3v9.7h1.8v-9.7h3.3V13.6H8.2z M9.7,24.4H4.8v-1.4h4.9V24.4z M9.7,19.1H4.8v-1.4h4.9V19.1z", handleSize: "100%", handleStyle: { color: "#a7b7cc" }, labelPrecision: null, labelFormatter: null, showDetail: !0, showDataShadow: "auto", realtime: !0, zoomLock: !1, textStyle: { color: "#333" } } }); var JC = rs , QC = El , tL = Bl , eL = A , iL = E , nL = "horizontal" , oL = "vertical" , aL = ["line", "bar", "candlestick", "scatter"] , rL = aD.extend({ type: "dataZoom.slider", init: function(t, e) { this._displayables = {}, this._orient, this._range, this._handleEnds, this._size, this._handleWidth, this._handleHeight, this._location, this._dragging, this._dataShadowInfo, this.api = e }, render: function(t, e, i, n) { rL.superApply(this, "render", arguments), kc(this, "_dispatchZoomAction", this.dataZoomModel.get("throttle"), "fixRate"), this._orient = t.get("orient"), !1 !== this.dataZoomModel.get("show") ? (n && "dataZoom" === n.type && n.from === this.uid || this._buildView(), this._updateView()) : this.group.removeAll() }, remove: function() { rL.superApply(this, "remove", arguments), Pc(this, "_dispatchZoomAction") }, dispose: function() { rL.superApply(this, "dispose", arguments), Pc(this, "_dispatchZoomAction") }, _buildView: function() { var t = this.group; t.removeAll(), this._resetLocation(), this._resetInterval(); var e = this._displayables.barGroup = new Ci; this._renderBackground(), this._renderHandle(), this._renderDataShadow(), t.add(e), this._positionGroup() }, _resetLocation: function() { var t = this.dataZoomModel , e = this.api , i = this._findCoordRect() , n = { width: e.getWidth(), height: e.getHeight() } , o = this._orient === nL ? { right: n.width - i.x - i.width, top: n.height - 30 - 7, width: i.width, height: 30 } : { right: 7, top: i.y, width: 30, height: i.height } , a = Iu(t.option); E(["right", "top", "width", "height"], function(t) { "ph" === a[t] && (a[t] = o[t]) }); var r = bu(a, n, t.padding); this._location = { x: r.x, y: r.y }, this._size = [r.width, r.height], this._orient === oL && this._size.reverse() }, _positionGroup: function() { var t = this.group , e = this._location , i = this._orient , n = this.dataZoomModel.getFirstTargetAxisModel() , o = n && n.get("inverse") , a = this._displayables.barGroup , r = (this._dataShadowInfo || {}).otherAxisInverse; a.attr(i !== nL || o ? i === nL && o ? { scale: r ? [-1, 1] : [-1, -1] } : i !== oL || o ? { scale: r ? [-1, -1] : [-1, 1], rotation: Math.PI / 2 } : { scale: r ? [1, -1] : [1, 1], rotation: Math.PI / 2 } : { scale: r ? [1, 1] : [1, -1] }); var s = t.getBoundingRect([a]); t.attr("position", [e.x - s.x, e.y - s.y]) }, _getViewExtent: function() { return [0, this._size[0]] }, _renderBackground: function() { var t = this.dataZoomModel , e = this._size , i = this._displayables.barGroup; i.add(new JC({ silent: !0, shape: { x: 0, y: 0, width: e[0], height: e[1] }, style: { fill: t.get("backgroundColor") }, z2: -40 })), i.add(new JC({ shape: { x: 0, y: 0, width: e[0], height: e[1] }, style: { fill: "transparent" }, z2: 0, onclick: A(this._onClickPanelClick, this) })) }, _renderDataShadow: function() { var t = this._dataShadowInfo = this._prepareDataShadowInfo(); if (t) { var e = this._size , i = t.series , n = i.getRawData() , o = i.getShadowDim ? i.getShadowDim() : t.otherDim; if (null != o) { var a = n.getDataExtent(o) , r = .3 * (a[1] - a[0]); a = [a[0] - r, a[1] + r]; var s, l = [0, e[1]], u = [0, e[0]], h = [[e[0], 0], [0, 0]], c = [], d = u[1] / (n.count() - 1), f = 0, p = Math.round(n.count() / e[0]); n.each([o], function(t, e) { if (0 < p && e % p) f += d; else { var i = null == t || isNaN(t) || "" === t , n = i ? 0 : QC(t, a, l, !0); i && !s && e ? (h.push([h[h.length - 1][0], 0]), c.push([c[c.length - 1][0], 0])) : !i && s && (h.push([f, 0]), c.push([f, 0])), h.push([f, n]), c.push([f, n]), f += d, s = i } }); var g = this.dataZoomModel; this._displayables.barGroup.add(new Qr({ shape: { points: h }, style: D({ fill: g.get("dataBackgroundColor") }, g.getModel("dataBackground.areaStyle").getAreaStyle()), silent: !0, z2: -20 })), this._displayables.barGroup.add(new ts({ shape: { points: c }, style: g.getModel("dataBackground.lineStyle").getLineStyle(), silent: !0, z2: -19 })) } } }, _prepareDataShadowInfo: function() { var t = this.dataZoomModel , s = t.get("showDataShadow"); if (!1 !== s) { var l, u = this.ecModel; return t.eachTargetAxis(function(a, r) { E(t.getAxisProxy(a.name, r).getTargetSeriesModels(), function(t) { if (!(l || !0 !== s && _(aL, t.get("type")) < 0)) { var e, i = u.getComponent(a.axis, r).axis, n = function(t) { return { x: "y", y: "x", radius: "angle", angle: "radius" }[t] }(a.name), o = t.coordinateSystem; null != n && o.getOtherAxis && (e = o.getOtherAxis(i).inverse), n = t.getData().mapDimension(n), l = { thisAxis: i, series: t, thisDim: a.name, otherDim: n, otherAxisInverse: e } } }, this) }, this), l } }, _renderHandle: function() { var t = this._displayables , a = t.handles = [] , r = t.handleLabels = [] , s = this._displayables.barGroup , e = this._size , l = this.dataZoomModel; s.add(t.filler = new JC({ draggable: !0, cursor: sL(this._orient), drift: eL(this._onDragMove, this, "all"), ondragstart: eL(this._showDataInfo, this, !0), ondragend: eL(this._onDragEnd, this), onmouseover: eL(this._showDataInfo, this, !0), onmouseout: eL(this._showDataInfo, this, !1), style: { fill: l.get("fillerColor"), textPosition: "inside" } })), s.add(new JC({ silent: !0, subPixelOptimize: !0, shape: { x: 0, y: 0, width: e[0], height: e[1] }, style: { stroke: l.get("dataBackgroundColor") || l.get("borderColor"), lineWidth: 1, fill: "rgba(0,0,0,0)" } })), iL([0, 1], function(t) { var e = yl(l.get("handleIcon"), { cursor: sL(this._orient), draggable: !0, drift: eL(this._onDragMove, this, t), ondragend: eL(this._onDragEnd, this), onmouseover: eL(this._showDataInfo, this, !0), onmouseout: eL(this._showDataInfo, this, !1) }, { x: -1, y: 0, width: 2, height: 2 }) , i = e.getBoundingRect(); this._handleHeight = Rl(l.get("handleSize"), this._size[1]), this._handleWidth = i.width / i.height * this._handleHeight, e.setStyle(l.getModel("handleStyle").getItemStyle()); var n = l.get("handleColor"); null != n && (e.style.fill = n), s.add(a[t] = e); var o = l.textStyleModel; this.group.add(r[t] = new Ur({ silent: !0, invisible: !0, style: { x: 0, y: 0, text: "", textVerticalAlign: "middle", textAlign: "center", textFill: o.getTextColor(), textFont: o.getFont() }, z2: 10 })) }, this) }, _resetInterval: function() { var t = this._range = this.dataZoomModel.getPercentRange() , e = this._getViewExtent(); this._handleEnds = [QC(t[0], [0, 100], e, !0), QC(t[1], [0, 100], e, !0)] }, _updateInterval: function(t, e) { var i = this.dataZoomModel , n = this._handleEnds , o = this._getViewExtent() , a = i.findRepresentativeAxisProxy().getMinMaxSpan() , r = [0, 100]; Jw(e, n, o, i.get("zoomLock") ? "all" : t, null != a.minSpan ? QC(a.minSpan, r, o, !0) : null, null != a.maxSpan ? QC(a.maxSpan, r, o, !0) : null); var s = this._range , l = this._range = tL([QC(n[0], o, r, !0), QC(n[1], o, r, !0)]); return !s || s[0] !== l[0] || s[1] !== l[1] }, _updateView: function(t) { var n = this._displayables , o = this._handleEnds , e = tL(o.slice()) , a = this._size; iL([0, 1], function(t) { var e = n.handles[t] , i = this._handleHeight; e.attr({ scale: [i / 2, i / 2], position: [o[t], a[1] / 2 - i / 2] }) }, this), n.filler.setShape({ x: e[0], y: 0, width: e[1] - e[0], height: a[1] }), this._updateDataInfo(t) }, _updateDataInfo: function(t) { var e = this.dataZoomModel , a = this._displayables , r = a.handleLabels , s = this._orient , l = ["", ""]; if (e.get("showDetail")) { var i = e.findRepresentativeAxisProxy(); if (i) { var n = i.getAxisModel().axis , o = this._range , u = t ? i.calculateDataWindow({ start: o[0], end: o[1] }).valueWindow : i.getDataValueWindow(); l = [this._formatLabel(u[0], n), this._formatLabel(u[1], n)] } } var h = tL(this._handleEnds.slice()); function c(t) { var e = fl(a.handles[t].parent, this.group) , i = gl(0 === t ? "right" : "left", e) , n = this._handleWidth / 2 + 5 , o = pl([h[t] + (0 === t ? -n : n), this._size[1] / 2], e); r[t].setStyle({ x: o[0], y: o[1], textVerticalAlign: s === nL ? "middle" : i, textAlign: s === nL ? i : "center", text: l[t] }) } c.call(this, 0), c.call(this, 1) }, _formatLabel: function(t, e) { var i = this.dataZoomModel , n = i.get("labelFormatter") , o = i.get("labelPrecision"); null != o && "auto" !== o || (o = e.getPixelPrecision()); var a = null == t || isNaN(t) ? "" : "category" === e.type || "time" === e.type ? e.scale.getLabel(Math.round(t)) : t.toFixed(Math.min(o, 20)); return C(n) ? n(t, a) : R(n) ? n.replace("{value}", a) : a }, _showDataInfo: function(t) { t = this._dragging || t; var e = this._displayables.handleLabels; e[0].attr("invisible", !t), e[1].attr("invisible", !t) }, _onDragMove: function(t, e, i, n) { this._dragging = !0, Xt(n.event); var o = pl([e, i], this._displayables.barGroup.getLocalTransform(), !0) , a = this._updateInterval(t, o[0]) , r = this.dataZoomModel.get("realtime"); this._updateView(!r), a && r && this._dispatchZoomAction() }, _onDragEnd: function() { this._dragging = !1, this._showDataInfo(!1), this.dataZoomModel.get("realtime") || this._dispatchZoomAction() }, _onClickPanelClick: function(t) { var e = this._size , i = this._displayables.barGroup.transformCoordToLocal(t.offsetX, t.offsetY); if (!(i[0] < 0 || i[0] > e[0] || i[1] < 0 || i[1] > e[1])) { var n = this._handleEnds , o = (n[0] + n[1]) / 2 , a = this._updateInterval("all", i[0] - o); this._updateView(), a && this._dispatchZoomAction() } }, _dispatchZoomAction: function() { var t = this._range; this.api.dispatchAction({ type: "dataZoom", from: this.uid, dataZoomId: this.dataZoomModel.id, start: t[0], end: t[1] }) }, _findCoordRect: function() { var i; if (iL(this.getTargetCoordInfo(), function(t) { if (!i && t.length) { var e = t[0].model.coordinateSystem; i = e.getRect && e.getRect() } }), !i) { var t = this.api.getWidth() , e = this.api.getHeight(); i = { x: .2 * t, y: .2 * e, width: .6 * t, height: .6 * e } } return i } }); function sL(t) { return "vertical" === t ? "ns-resize" : "ew-resize" } iD.extend({ type: "dataZoom.inside", defaultOption: { disabled: !1, zoomLock: !1, zoomOnMouseWheel: !0, moveOnMouseMove: !0, moveOnMouseWheel: !1, preventDefaultMouseMove: !0 } }); var lL = "\0_ec_dataZoom_roams"; function uL(t, n) { var e = cL(t) , o = n.dataZoomId , a = n.coordId; E(e, function(t, e) { var i = t.dataZoomInfos; i[o] && _(n.allCoordIds, a) < 0 && (delete i[o], t.count--) }), dL(e); var i = e[a]; i || ((i = e[a] = { coordId: a, dataZoomInfos: {}, count: 0 }).controller = function(t, r) { var e = new Vy(t.getZr()); return E(["pan", "zoom", "scrollMove"], function(a) { e.on(a, function(n) { var o = []; E(r.dataZoomInfos, function(t) { if (n.isAvailableBehavior(t.dataZoomModel.option)) { var e = (t.getRange || {})[a] , i = e && e(r.controller, n); !t.dataZoomModel.get("disabled", !0) && i && o.push({ dataZoomId: t.dataZoomId, start: i[0], end: i[1] }) } }), o.length && r.dispatchAction(o) }) }), e }(t, i), i.dispatchAction = T(fL, t)), i.dataZoomInfos[o] || i.count++, i.dataZoomInfos[o] = n; var r = function(t) { var n, o = { type_true: 2, type_move: 1, type_false: 0, type_undefined: -1 }, a = !0; return E(t, function(t) { var e = t.dataZoomModel , i = !e.get("disabled", !0) && (!e.get("zoomLock", !0) || "move"); o["type_" + n] < o["type_" + i] && (n = i), a &= e.get("preventDefaultMouseMove", !0) }), { controlType: n, opt: { zoomOnMouseWheel: !0, moveOnMouseMove: !0, moveOnMouseWheel: !0, preventDefaultMouseMove: !!a } } }(i.dataZoomInfos); i.controller.enable(r.controlType, r.opt), i.controller.setPointerChecker(n.containsPoint), kc(i, "dispatchAction", n.dataZoomModel.get("throttle", !0), "fixRate") } function hL(t) { return t.type + "\0_" + t.id } function cL(t) { var e = t.getZr(); return e[lL] || (e[lL] = {}) } function dL(i) { E(i, function(t, e) { t.count || (t.controller.dispose(), delete i[e]) }) } function fL(t, e) { t.dispatchAction({ type: "dataZoom", batch: e }) } var pL = A , gL = aD.extend({ type: "dataZoom.inside", init: function(t, e) { this._range }, render: function(r, t, s, e) { gL.superApply(this, "render", arguments), this._range = r.getPercentRange(), E(this.getTargetCoordInfo(), function(t, o) { var a = O(t, function(t) { return hL(t.model) }); E(t, function(e) { var n = e.model , i = {}; E(["pan", "zoom", "scrollMove"], function(t) { i[t] = pL(mL[t], this, e, o) }, this), uL(s, { coordId: hL(n), allCoordIds: a, containsPoint: function(t, e, i) { return n.coordinateSystem.containPoint([e, i]) }, dataZoomId: r.id, dataZoomModel: r, getRange: i }) }, this) }, this) }, dispose: function() { !function(t, i) { var e = cL(t); E(e, function(t) { t.controller.dispose(); var e = t.dataZoomInfos; e[i] && (delete e[i], t.count--) }), dL(e) }(this.api, this.dataZoomModel.id), gL.superApply(this, "dispose", arguments), this._range = null } }) , mL = { zoom: function(t, e, i, n) { var o = this._range , a = o.slice() , r = t.axisModels[0]; if (r) { var s = xL[e](null, [n.originX, n.originY], r, i, t) , l = (0 < s.signal ? s.pixelStart + s.pixelLength - s.pixel : s.pixel - s.pixelStart) / s.pixelLength * (a[1] - a[0]) + a[0] , u = Math.max(1 / n.scale, 0); a[0] = (a[0] - l) * u + l, a[1] = (a[1] - l) * u + l; var h = this.dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan(); return Jw(0, a, [0, 100], 0, h.minSpan, h.maxSpan), this._range = a, o[0] !== a[0] || o[1] !== a[1] ? a : void 0 } }, pan: vL(function(t, e, i, n, o, a) { var r = xL[n]([a.oldX, a.oldY], [a.newX, a.newY], e, o, i); return r.signal * (t[1] - t[0]) * r.pixel / r.pixelLength }), scrollMove: vL(function(t, e, i, n, o, a) { return xL[n]([0, 0], [a.scrollDelta, a.scrollDelta], e, o, i).signal * (t[1] - t[0]) * a.scrollDelta }) }; function vL(l) { return function(t, e, i, n) { var o = this._range , a = o.slice() , r = t.axisModels[0]; if (r) { var s = l(a, r, t, e, i, n); return Jw(s, a, [0, 100], "all"), this._range = a, o[0] !== a[0] || o[1] !== a[1] ? a : void 0 } } } function yL(t) { var e = t && t.visualMap; L(e) || (e = e ? [e] : []), _L(e, function(t) { if (t) { wL(t, "splitList") && !wL(t, "pieces") && (t.pieces = t.splitList, delete t.splitList); var e = t.pieces; e && L(e) && _L(e, function(t) { z(t) && (wL(t, "start") && !wL(t, "min") && (t.min = t.start), wL(t, "end") && !wL(t, "max") && (t.max = t.end)) }) } }) } var xL = { grid: function(t, e, i, n, o) { var a = i.axis , r = {} , s = o.model.coordinateSystem.getRect(); return t = t || [0, 0], "x" === a.dim ? (r.pixel = e[0] - t[0], r.pixelLength = s.width, r.pixelStart = s.x, r.signal = a.inverse ? 1 : -1) : (r.pixel = e[1] - t[1], r.pixelLength = s.height, r.pixelStart = s.y, r.signal = a.inverse ? -1 : 1), r }, polar: function(t, e, i, n, o) { var a = i.axis , r = {} , s = o.model.coordinateSystem , l = s.getRadiusAxis().getExtent() , u = s.getAngleAxis().getExtent(); return t = t ? s.pointToCoord(t) : [0, 0], e = s.pointToCoord(e), "radiusAxis" === i.mainType ? (r.pixel = e[0] - t[0], r.pixelLength = l[1] - l[0], r.pixelStart = l[0], r.signal = a.inverse ? 1 : -1) : (r.pixel = e[1] - t[1], r.pixelLength = u[1] - u[0], r.pixelStart = u[0], r.signal = a.inverse ? -1 : 1), r }, singleAxis: function(t, e, i, n, o) { var a = i.axis , r = o.model.coordinateSystem.getRect() , s = {}; return t = t || [0, 0], "horizontal" === a.orient ? (s.pixel = e[0] - t[0], s.pixelLength = r.width, s.pixelStart = r.x, s.signal = a.inverse ? 1 : -1) : (s.pixel = e[1] - t[1], s.pixelLength = r.height, s.pixelStart = r.y, s.signal = a.inverse ? -1 : 1), s } } , _L = E; function wL(t, e) { return t && t.hasOwnProperty && t.hasOwnProperty(e) } ku.registerSubTypeDefaulter("visualMap", function(t) { return t.categories || (t.pieces ? 0 < t.pieces.length : 0 < t.splitNumber) && !t.calculable ? "piecewise" : "continuous" }); var bL = Ld.VISUAL.COMPONENT; function SL(t, e, i, n) { for (var o = e.targetVisuals[n], a = g_.prepareVisualTypes(o), r = { color: t.getData().getVisual("color") }, s = 0, l = a.length; s < l; s++) { var u = a[s] , h = o["opacity" === u ? "__alphaForOpacity" : u]; h && h.applyVisual(i, c, d) } return r.color; function c(t) { return r[t] } function d(t, e) { r[t] = e } } Sf(bL, { createOnAllSeries: !0, reset: function(i, t) { var n = []; return t.eachComponent("visualMap", function(t) { var e = i.pipelineContext; !t.isTargetSeries(i) || e && e.large || n.push(function(t, f, p, g) { var m = {}; return E(t, function(t) { var e = g_.prepareVisualTypes(f[t]); m[t] = e }), { progress: function(t, i) { function e(t) { return i.getItemVisual(o, t) } function n(t, e) { i.setItemVisual(o, t, e) } var o; for (null != g && (g = i.getDimension(g)); null != (o = t.next()); ) { var a = i.getRawDataItem(o); if (!a || !1 !== a.visualMap) for (var r = null != g ? i.get(g, o, !0) : o, s = p(r), l = f[s], u = m[s], h = 0, c = u.length; h < c; h++) { var d = u[h]; l[d] && l[d].applyVisual(r, e, n) } } } } }(t.stateList, t.targetVisuals, A(t.getValueState, t), t.getDataDimension(i.getData()))) }), n } }), Sf(bL, { createOnAllSeries: !0, reset: function(o, t) { var a = o.getData() , r = []; t.eachComponent("visualMap", function(t) { if (t.isTargetSeries(o)) { var e = t.getVisualMeta(A(SL, null, o, t)) || { stops: [], outerColors: [] } , i = t.getDataDimension(a) , n = a.getDimensionInfo(i); null != n && (e.dimension = n.index, r.push(e)) } }), o.getData().setVisual("visualMeta", r) } }); var ML = function(t, e, i) { var n = k((IL[t] || {})[e]); return i && L(n) ? n[n.length - 1] : n } , IL = { color: { active: ["#006edd", "#e0ffff"], inactive: ["rgba(0,0,0,0)"] }, colorHue: { active: [0, 360], inactive: [0, 0] }, colorSaturation: { active: [.3, 1], inactive: [0, 0] }, colorLightness: { active: [.9, .5], inactive: [0, 0] }, colorAlpha: { active: [.3, 1], inactive: [0, 0] }, opacity: { active: [.3, 1], inactive: [0, 0] }, symbol: { active: ["circle", "roundRect", "diamond"], inactive: ["none"] }, symbolSize: { active: [10, 50], inactive: [0, 0] } } , TL = g_.mapVisual , AL = g_.eachVisual , DL = L , CL = E , LL = Bl , kL = El , PL = Tf({ type: "visualMap", dependencies: ["series"], stateList: ["inRange", "outOfRange"], replacableOptionKeys: ["inRange", "outOfRange", "target", "controller", "color"], dataBound: [-1 / 0, 1 / 0], layoutMode: { type: "box", ignoreSize: !0 }, defaultOption: { show: !0, zlevel: 0, z: 4, seriesIndex: "all", min: 0, max: 200, dimension: null, inRange: null, outOfRange: null, left: 0, right: null, top: null, bottom: 0, itemWidth: null, itemHeight: null, inverse: !1, orient: "vertical", backgroundColor: "rgba(0,0,0,0)", borderColor: "#ccc", contentColor: "#5793f3", inactiveColor: "#aaa", borderWidth: 0, padding: 5, textGap: 10, precision: 0, color: null, formatter: null, text: null, textStyle: { color: "#333" } }, init: function(t, e, i) { this._dataExtent, this.targetVisuals = {}, this.controllerVisuals = {}, this.textStyleModel, this.itemSize, this.mergeDefaultAndTheme(t, i) }, optionUpdated: function(t, e) { var i = this.option; v.canvasSupported || (i.realtime = !1), e || PD(i, t, this.replacableOptionKeys), this.textStyleModel = this.getModel("textStyle"), this.resetItemSize(), this.completeVisualOption() }, resetVisual: function(t) { var e = this.stateList; t = A(t, this), this.controllerVisuals = kD(this.option.controller, e, t), this.targetVisuals = kD(this.option.target, e, t) }, getTargetSeriesIndices: function() { var t = this.option.seriesIndex , i = []; return null == t || "all" === t ? this.ecModel.eachSeries(function(t, e) { i.push(e) }) : i = Vo(t), i }, eachTargetSeries: function(e, i) { E(this.getTargetSeriesIndices(), function(t) { e.call(i, this.ecModel.getSeriesByIndex(t)) }, this) }, isTargetSeries: function(e) { var i = !1; return this.eachTargetSeries(function(t) { t === e && (i = !0) }), i }, formatValueText: function(t, e, i) { var n, o, a = this.option, r = a.precision, s = this.dataBound, l = a.formatter; return i = i || ["<", ">"], L(t) && (t = t.slice(), n = !0), o = e ? t : n ? [u(t[0]), u(t[1])] : u(t), R(l) ? l.replace("{value}", n ? o[0] : o).replace("{value2}", n ? o[1] : o) : C(l) ? n ? l(t[0], t[1]) : l(t) : n ? t[0] === s[0] ? i[0] + " " + o[1] : t[1] === s[1] ? i[1] + " " + o[0] : o[0] + " - " + o[1] : o; function u(t) { return t === s[0] ? "min" : t === s[1] ? "max" : (+t).toFixed(Math.min(r, 20)) } }, resetExtent: function() { var t = this.option , e = LL([t.min, t.max]); this._dataExtent = e }, getDataDimension: function(t) { var e = this.option.dimension , i = t.dimensions; if (null != e || i.length) { if (null != e) return t.getDimension(e); for (var n = t.dimensions, o = n.length - 1; 0 <= o; o--) { var a = n[o]; if (!t.getDimensionInfo(a).isCalculationCoord) return a } } }, getExtent: function() { return this._dataExtent.slice() }, completeVisualOption: function() { var t = this.ecModel , e = this.option , i = { inRange: e.inRange, outOfRange: e.outOfRange } , n = e.target || (e.target = {}) , o = e.controller || (e.controller = {}); m(n, i), m(o, i); var u = this.isCategory(); function a(n) { DL(e.color) && !n.inRange && (n.inRange = { color: e.color.slice().reverse() }), n.inRange = n.inRange || { color: t.get("gradientColor") }, CL(this.stateList, function(t) { var e = n[t]; if (R(e)) { var i = ML(e, "active", u); i ? (n[t] = {}, n[t][e] = i) : delete n[t] } }, this) } a.call(this, n), a.call(this, o), function(t, e, i) { var n = t[e] , o = t[i]; n && !o && (o = t[i] = {}, CL(n, function(t, e) { if (g_.isValidType(e)) { var i = ML(e, "inactive", u); null != i && (o[e] = i, "color" !== e || o.hasOwnProperty("opacity") || o.hasOwnProperty("colorAlpha") || (o.opacity = [0, 0])) } })) } .call(this, n, "inRange", "outOfRange"), function(a) { var r = (a.inRange || {}).symbol || (a.outOfRange || {}).symbol , s = (a.inRange || {}).symbolSize || (a.outOfRange || {}).symbolSize , l = this.get("inactiveColor"); CL(this.stateList, function(t) { var e = this.itemSize , i = a[t]; null == (i = i || (a[t] = { color: u ? l : [l] })).symbol && (i.symbol = r && k(r) || (u ? "roundRect" : ["roundRect"])), null == i.symbolSize && (i.symbolSize = s && k(s) || (u ? e[0] : [e[0], e[0]])), i.symbol = TL(i.symbol, function(t) { return "none" === t || "square" === t ? "roundRect" : t }); var n = i.symbolSize; if (null != n) { var o = -1 / 0; AL(n, function(t) { o < t && (o = t) }), i.symbolSize = TL(n, function(t) { return kL(t, [0, o], [0, e[0]], !0) }) } }, this) } .call(this, o) }, resetItemSize: function() { this.itemSize = [parseFloat(this.get("itemWidth")), parseFloat(this.get("itemHeight"))] }, isCategory: function() { return !!this.option.categories }, setSelected: et, getValueState: et, getVisualMeta: et }) , NL = [20, 140] , OL = PL.extend({ type: "visualMap.continuous", defaultOption: { align: "auto", calculable: !1, range: null, realtime: !0, itemHeight: null, itemWidth: null, hoverLink: !0, hoverLinkDataSize: null, hoverLinkOnHandle: null }, optionUpdated: function(t, e) { OL.superApply(this, "optionUpdated", arguments), this.resetExtent(), this.resetVisual(function(t) { t.mappingMethod = "linear", t.dataExtent = this.getExtent() }), this._resetRange() }, resetItemSize: function() { OL.superApply(this, "resetItemSize", arguments); var t = this.itemSize; "horizontal" === this._orient && t.reverse(), null != t[0] && !isNaN(t[0]) || (t[0] = NL[0]), null != t[1] && !isNaN(t[1]) || (t[1] = NL[1]) }, _resetRange: function() { var t = this.getExtent() , e = this.option.range; !e || e.auto ? (t.auto = 1, this.option.range = t) : L(e) && (e[0] > e[1] && e.reverse(), e[0] = Math.max(e[0], t[0]), e[1] = Math.min(e[1], t[1])) }, completeVisualOption: function() { PL.prototype.completeVisualOption.apply(this, arguments), E(this.stateList, function(t) { var e = this.option.controller[t].symbolSize; e && e[0] !== e[1] && (e[0] = 0) }, this) }, setSelected: function(t) { this.option.range = t.slice(), this._resetRange() }, getSelected: function() { var t = this.getExtent() , e = Bl((this.get("range") || []).slice()); return e[0] > t[1] && (e[0] = t[1]), e[1] > t[1] && (e[1] = t[1]), e[0] < t[0] && (e[0] = t[0]), e[1] < t[0] && (e[1] = t[0]), e }, getValueState: function(t) { var e = this.option.range , i = this.getExtent(); return (e[0] <= i[0] || e[0] <= t) && (e[1] >= i[1] || t <= e[1]) ? "inRange" : "outOfRange" }, findTargetDataIndices: function(n) { var o = []; return this.eachTargetSeries(function(t) { var i = [] , e = t.getData(); e.each(this.getDataDimension(e), function(t, e) { n[0] <= t && t <= n[1] && i.push(e) }, this), o.push({ seriesId: t.id, dataIndex: i }) }, this), o }, getVisualMeta: function(i) { var t = EL(this, "outOfRange", this.getExtent()) , e = EL(this, "inRange", this.option.range.slice()) , n = []; function o(t, e) { n.push({ value: t, color: i(t, e) }) } for (var a = 0, r = 0, s = e.length, l = t.length; r < l && (!e.length || t[r] <= e[0]); r++) t[r] < e[a] && o(t[r], "outOfRange"); for (var u = 1; a < s; a++, u = 0) u && n.length && o(e[a], "outOfRange"), o(e[a], "inRange"); for (u = 1; r < l; r++) (!e.length || e[e.length - 1] < t[r]) && (u && (n.length && o(n[n.length - 1].value, "outOfRange"), u = 0), o(t[r], "outOfRange")); var h = n.length; return { stops: n, outerColors: [h ? n[0].color : "transparent", h ? n[h - 1].color : "transparent"] } } }); function EL(t, e, i) { if (i[0] === i[1]) return i.slice(); for (var n = (i[1] - i[0]) / 200, o = i[0], a = [], r = 0; r <= 200 && o < i[1]; r++) a.push(o), o += n; return a.push(i[1]), a } var RL = Af({ type: "visualMap", autoPositionValues: { left: 1, right: 1, top: 1, bottom: 1 }, init: function(t, e) { this.ecModel = t, this.api = e, this.visualMapModel }, render: function(t, e, i, n) { !1 !== (this.visualMapModel = t).get("show") ? this.doRender.apply(this, arguments) : this.group.removeAll() }, renderBackground: function(t) { var e = this.visualMapModel , i = iu(e.get("padding") || 0) , n = t.getBoundingRect(); t.add(new rs({ z2: -1, silent: !0, shape: { x: n.x - i[3], y: n.y - i[0], width: n.width + i[3] + i[1], height: n.height + i[0] + i[2] }, style: { fill: e.get("backgroundColor"), stroke: e.get("borderColor"), lineWidth: e.get("borderWidth") } })) }, getControllerVisual: function(i, n, o) { var t = (o = o || {}).forceState , e = this.visualMapModel , a = {}; if ("symbol" === n && (a.symbol = e.get("itemSymbol")), "color" === n) { var r = e.get("contentColor"); a.color = r } function s(t) { return a[t] } function l(t, e) { a[t] = e } var u = e.controllerVisuals[t || e.getValueState(i)]; return E(g_.prepareVisualTypes(u), function(t) { var e = u[t]; o.convertOpacityToAlpha && "opacity" === t && (t = "colorAlpha", e = u.__alphaForOpacity), g_.dependsOn(t, n) && e && e.applyVisual(i, s, l) }), a[n] }, positionGroup: function(t) { var e = this.visualMapModel , i = this.api; Su(t, e.getBoxLayoutParams(), { width: i.getWidth(), height: i.getHeight() }) }, doRender: et }); function zL(t, e, i) { var n = t.option , o = n.align; if (null != o && "auto" !== o) return o; for (var a = { width: e.getWidth(), height: e.getHeight() }, r = "horizontal" === n.orient ? 1 : 0, s = [["left", "right", "width"], ["top", "bottom", "height"]], l = s[r], u = [0, null, 10], h = {}, c = 0; c < 3; c++) h[s[1 - r][c]] = u[c], h[l[c]] = 2 === c ? i[0] : n[l[c]]; var d = [["x", "width", 3], ["y", "height", 0]][r] , f = bu(h, a, n.padding); return l[(f.margin[d[2]] || 0) + f[d[0]] + .5 * f[d[1]] < .5 * a[d[1]] ? 0 : 1] } function BL(t, e) { return E(t || [], function(t) { null != t.dataIndex && (t.dataIndexInside = t.dataIndex, t.dataIndex = null), t.highlightKey = "visualMap" + (e ? e.componentIndex : "") }), t } var VL = El , GL = E , FL = Math.min , WL = Math.max , HL = RL.extend({ type: "visualMap.continuous", init: function() { HL.superApply(this, "init", arguments), this._shapes = {}, this._dataInterval = [], this._handleEnds = [], this._orient, this._useHandle, this._hoverLinkDataIndices = [], this._dragging, this._hovering }, doRender: function(t, e, i, n) { n && "selectDataRange" === n.type && n.from === this.uid || this._buildView() }, _buildView: function() { this.group.removeAll(); var t = this.visualMapModel , e = this.group; this._orient = t.get("orient"), this._useHandle = t.get("calculable"), this._resetInterval(), this._renderBar(e); var i = t.get("text"); this._renderEndsText(e, i, 0), this._renderEndsText(e, i, 1), this._updateView(!0), this.renderBackground(e), this._updateView(), this._enableHoverLinkToSeries(), this._enableHoverLinkFromSeries(), this.positionGroup(e) }, _renderEndsText: function(t, e, i) { if (e) { var n = e[1 - i]; n = null != n ? n + "" : ""; var o = this.visualMapModel , a = o.get("textGap") , r = o.itemSize , s = this._shapes.barGroup , l = this._applyTransform([r[0] / 2, 0 === i ? -a : r[1] + a], s) , u = this._applyTransform(0 === i ? "bottom" : "top", s) , h = this._orient , c = this.visualMapModel.textStyleModel; this.group.add(new Ur({ style: { x: l[0], y: l[1], textVerticalAlign: "horizontal" === h ? "middle" : u, textAlign: "horizontal" === h ? u : "center", text: n, textFont: c.getFont(), textFill: c.getTextColor() } })) } }, _renderBar: function(t) { var e = this.visualMapModel , i = this._shapes , n = e.itemSize , o = this._orient , a = this._useHandle , r = zL(e, this.api, n) , s = i.barGroup = this._createBarGroup(r); s.add(i.outOfRange = ZL()), s.add(i.inRange = ZL(null, a ? XL(this._orient) : null, A(this._dragHandle, this, "all", !1), A(this._dragHandle, this, "all", !0))); var l = e.textStyleModel.getTextRect("国") , u = WL(l.width, l.height); a && (i.handleThumbs = [], i.handleLabels = [], i.handleLabelPoints = [], this._createHandle(s, 0, n, u, o, r), this._createHandle(s, 1, n, u, o, r)), this._createIndicator(s, n, u, o), t.add(s) }, _createHandle: function(t, e, i, n, o) { var a = A(this._dragHandle, this, e, !1) , r = A(this._dragHandle, this, e, !0) , s = ZL(function(t, e) { return 0 === t ? [[0, 0], [e, 0], [e, -e]] : [[0, 0], [e, 0], [e, e]] }(e, n), XL(this._orient), a, r); s.position[0] = i[0], t.add(s); var l = this.visualMapModel.textStyleModel , u = new Ur({ draggable: !0, drift: a, onmousemove: function(t) { Xt(t.event) }, ondragend: r, style: { x: 0, y: 0, text: "", textFont: l.getFont(), textFill: l.getTextColor() } }); this.group.add(u); var h = ["horizontal" === o ? n / 2 : 1.5 * n, "horizontal" === o ? 0 === e ? -1.5 * n : 1.5 * n : 0 === e ? -n / 2 : n / 2] , c = this._shapes; c.handleThumbs[e] = s, c.handleLabelPoints[e] = h, c.handleLabels[e] = u }, _createIndicator: function(t, e, i, n) { var o = ZL([[0, 0]], "move"); o.position[0] = e[0], o.attr({ invisible: !0, silent: !0 }), t.add(o); var a = this.visualMapModel.textStyleModel , r = new Ur({ silent: !0, invisible: !0, style: { x: 0, y: 0, text: "", textFont: a.getFont(), textFill: a.getTextColor() } }); this.group.add(r); var s = ["horizontal" === n ? i / 2 : 9, 0] , l = this._shapes; l.indicator = o, l.indicatorLabel = r, l.indicatorLabelPoint = s }, _dragHandle: function(t, e, i, n) { if (this._useHandle) { if (this._dragging = !e, !e) { var o = this._applyTransform([i, n], this._shapes.barGroup, !0); this._updateInterval(t, o[1]), this._updateView() } e === !this.visualMapModel.get("realtime") && this.api.dispatchAction({ type: "selectDataRange", from: this.uid, visualMapId: this.visualMapModel.id, selected: this._dataInterval.slice() }), e ? this._hovering || this._clearHoverLinkToSeries() : UL(this.visualMapModel) && this._doHoverLinkToSeries(this._handleEnds[t], !1) } }, _resetInterval: function() { var t = this.visualMapModel , e = this._dataInterval = t.getSelected() , i = t.getExtent() , n = [0, t.itemSize[1]]; this._handleEnds = [VL(e[0], i, n, !0), VL(e[1], i, n, !0)] }, _updateInterval: function(t, e) { e = e || 0; var i = this.visualMapModel , n = this._handleEnds , o = [0, i.itemSize[1]]; Jw(e, n, o, t, 0); var a = i.getExtent(); this._dataInterval = [VL(n[0], o, a, !0), VL(n[1], o, a, !0)] }, _updateView: function(t) { var e = this.visualMapModel , i = e.getExtent() , n = this._shapes , o = [0, e.itemSize[1]] , a = t ? o : this._handleEnds , r = this._createBarVisual(this._dataInterval, i, a, "inRange") , s = this._createBarVisual(i, i, o, "outOfRange"); n.inRange.setStyle({ fill: r.barColor, opacity: r.opacity }).setShape("points", r.barPoints), n.outOfRange.setStyle({ fill: s.barColor, opacity: s.opacity }).setShape("points", s.barPoints), this._updateHandle(a, r) }, _createBarVisual: function(t, e, i, n) { var o = { forceState: n, convertOpacityToAlpha: !0 } , a = this._makeColorGradient(t, o) , r = [this.getControllerVisual(t[0], "symbolSize", o), this.getControllerVisual(t[1], "symbolSize", o)] , s = this._createBarPoints(i, r); return { barColor: new gs(0,0,0,1,a), barPoints: s, handlesColor: [a[0].color, a[a.length - 1].color] } }, _makeColorGradient: function(t, e) { var i = [] , n = (t[1] - t[0]) / 100; i.push({ color: this.getControllerVisual(t[0], "color", e), offset: 0 }); for (var o = 1; o < 100; o++) { var a = t[0] + n * o; if (a > t[1]) break; i.push({ color: this.getControllerVisual(a, "color", e), offset: o / 100 }) } return i.push({ color: this.getControllerVisual(t[1], "color", e), offset: 1 }), i }, _createBarPoints: function(t, e) { var i = this.visualMapModel.itemSize; return [[i[0] - e[0], t[0]], [i[0], t[0]], [i[0], t[1]], [i[0] - e[1], t[1]]] }, _createBarGroup: function(t) { var e = this._orient , i = this.visualMapModel.get("inverse"); return new Ci("horizontal" !== e || i ? "horizontal" === e && i ? { scale: "bottom" === t ? [-1, 1] : [1, 1], rotation: -Math.PI / 2 } : "vertical" !== e || i ? { scale: "left" === t ? [1, 1] : [-1, 1] } : { scale: "left" === t ? [1, -1] : [-1, -1] } : { scale: "bottom" === t ? [1, 1] : [-1, 1], rotation: Math.PI / 2 }) }, _updateHandle: function(n, o) { if (this._useHandle) { var a = this._shapes , r = this.visualMapModel , s = a.handleThumbs , l = a.handleLabels; GL([0, 1], function(t) { var e = s[t]; e.setStyle("fill", o.handlesColor[t]), e.position[1] = n[t]; var i = pl(a.handleLabelPoints[t], fl(e, this.group)); l[t].setStyle({ x: i[0], y: i[1], text: r.formatValueText(this._dataInterval[t]), textVerticalAlign: "middle", textAlign: this._applyTransform("horizontal" === this._orient ? 0 === t ? "bottom" : "top" : "left", a.barGroup) }) }, this) } }, _showIndicator: function(t, e, i, n) { var o = this.visualMapModel , a = o.getExtent() , r = o.itemSize , s = [0, r[1]] , l = VL(t, a, s, !0) , u = this._shapes , h = u.indicator; if (h) { h.position[1] = l, h.attr("invisible", !1), h.setShape("points", function(t, e, i, n) { return t ? [[0, -FL(e, WL(i, 0))], [6, 0], [0, FL(e, WL(n - i, 0))]] : [[0, 0], [5, -5], [5, 5]] }(!!i, n, l, r[1])); var c = this.getControllerVisual(t, "color", { convertOpacityToAlpha: !0 }); h.setStyle("fill", c); var d = pl(u.indicatorLabelPoint, fl(h, this.group)) , f = u.indicatorLabel; f.attr("invisible", !1); var p = this._applyTransform("left", u.barGroup) , g = this._orient; f.setStyle({ text: (i || "") + o.formatValueText(e), textVerticalAlign: "horizontal" === g ? p : "middle", textAlign: "horizontal" === g ? "center" : p, x: d[0], y: d[1] }) } }, _enableHoverLinkToSeries: function() { var n = this; this._shapes.barGroup.on("mousemove", function(t) { if (n._hovering = !0, !n._dragging) { var e = n.visualMapModel.itemSize , i = n._applyTransform([t.offsetX, t.offsetY], n._shapes.barGroup, !0, !0); i[1] = FL(WL(0, i[1]), e[1]), n._doHoverLinkToSeries(i[1], 0 <= i[0] && i[0] <= e[0]) } }).on("mouseout", function() { n._hovering = !1, n._dragging || n._clearHoverLinkToSeries() }) }, _enableHoverLinkFromSeries: function() { var t = this.api.getZr(); this.visualMapModel.option.hoverLink ? (t.on("mouseover", this._hoverLinkFromSeriesMouseOver, this), t.on("mouseout", this._hideIndicator, this)) : this._clearHoverLinkFromSeries() }, _doHoverLinkToSeries: function(t, e) { var i = this.visualMapModel , n = i.itemSize; if (i.option.hoverLink) { var o = [0, n[1]] , a = i.getExtent(); t = FL(WL(o[0], t), o[1]); var r = function(t, e, i) { var n = 6 , o = t.get("hoverLinkDataSize"); o && (n = VL(o, e, i, !0) / 2); return n }(i, a, o) , s = [t - r, t + r] , l = VL(t, o, a, !0) , u = [VL(s[0], o, a, !0), VL(s[1], o, a, !0)]; s[0] < o[0] && (u[0] = -1 / 0), o[1] < s[1] && (u[1] = 1 / 0), e && (u[0] === -1 / 0 ? this._showIndicator(l, u[1], "< ", r) : u[1] === 1 / 0 ? this._showIndicator(l, u[0], "> ", r) : this._showIndicator(l, l, "≈ ", r)); var h = this._hoverLinkDataIndices , c = []; (e || UL(i)) && (c = this._hoverLinkDataIndices = i.findTargetDataIndices(u)); var d = function(t, e) { var i = {} , n = {}; return o(t || [], i), o(e || [], n, i), [a(i), a(n)]; function o(t, e, i) { for (var n = 0, o = t.length; n < o; n++) for (var a = t[n].seriesId, r = Vo(t[n].dataIndex), s = i && i[a], l = 0, u = r.length; l < u; l++) { var h = r[l]; s && s[h] ? s[h] = null : (e[a] || (e[a] = {}))[h] = 1 } } function a(t, e) { var i = []; for (var n in t) if (t.hasOwnProperty(n) && null != t[n]) if (e) i.push(+n); else { var o = a(t[n], !0); o.length && i.push({ seriesId: n, dataIndex: o }) } return i } }(h, c); this._dispatchHighDown("downplay", BL(d[0], i)), this._dispatchHighDown("highlight", BL(d[1], i)) } }, _hoverLinkFromSeriesMouseOver: function(t) { var e = t.target , i = this.visualMapModel; if (e && null != e.dataIndex) { var n = this.ecModel.getSeriesByIndex(e.seriesIndex); if (i.isTargetSeries(n)) { var o = n.getData(e.dataType) , a = o.get(i.getDataDimension(o), e.dataIndex, !0); isNaN(a) || this._showIndicator(a, a) } } }, _hideIndicator: function() { var t = this._shapes; t.indicator && t.indicator.attr("invisible", !0), t.indicatorLabel && t.indicatorLabel.attr("invisible", !0) }, _clearHoverLinkToSeries: function() { this._hideIndicator(); var t = this._hoverLinkDataIndices; this._dispatchHighDown("downplay", BL(t, this.visualMapModel)), t.length = 0 }, _clearHoverLinkFromSeries: function() { this._hideIndicator(); var t = this.api.getZr(); t.off("mouseover", this._hoverLinkFromSeriesMouseOver), t.off("mouseout", this._hideIndicator) }, _applyTransform: function(t, e, i, n) { var o = fl(e, n ? null : this.group); return bl[L(t) ? "applyTransform" : "transformDirection"](t, o, i) }, _dispatchHighDown: function(t, e) { e && e.length && this.api.dispatchAction({ type: t, batch: e }) }, dispose: function() { this._clearHoverLinkFromSeries(), this._clearHoverLinkToSeries() }, remove: function() { this._clearHoverLinkFromSeries(), this._clearHoverLinkToSeries() } }); function ZL(t, e, i, n) { return new Qr({ shape: { points: t }, draggable: !!i, cursor: e, drift: i, onmousemove: function(t) { Xt(t.event) }, ondragend: n }) } function UL(t) { var e = t.get("hoverLinkOnHandle"); return !!(null == e ? t.get("realtime") : e) } function XL(t) { return "vertical" === t ? "ns-resize" : "ew-resize" } _f({ type: "selectDataRange", event: "dataRangeSelected", update: "update" }, function(e, t) { t.eachComponent({ mainType: "visualMap", query: e }, function(t) { t.setSelected(e.selected) }) }), yf(yL); var YL = PL.extend({ type: "visualMap.piecewise", defaultOption: { selected: null, minOpen: !1, maxOpen: !1, align: "auto", itemWidth: 20, itemHeight: 14, itemSymbol: "roundRect", pieceList: null, categories: null, splitNumber: 5, selectedMode: "multiple", itemGap: 10, hoverLink: !0, showLabel: null }, optionUpdated: function(t, e) { YL.superApply(this, "optionUpdated", arguments), this._pieceList = [], this.resetExtent(); var i = this._mode = this._determineMode(); jL[this._mode].call(this), this._resetSelected(t, e); var n = this.option.categories; this.resetVisual(function(t, e) { "categories" === i ? (t.mappingMethod = "category", t.categories = k(n)) : (t.dataExtent = this.getExtent(), t.mappingMethod = "piecewise", t.pieceList = O(this._pieceList, function(t) { t = k(t); return "inRange" !== e && (t.visual = null), t })) }) }, completeVisualOption: function() { var n = this.option , i = {} , t = g_.listVisualTypes() , o = this.isCategory(); function a(t, e, i) { return t && t[e] && (z(t[e]) ? t[e].hasOwnProperty(i) : t[e] === i) } E(n.pieces, function(e) { E(t, function(t) { e.hasOwnProperty(t) && (i[t] = 1) }) }), E(i, function(t, e) { var i = 0; E(this.stateList, function(t) { i |= a(n, t, e) || a(n.target, t, e) }, this), i || E(this.stateList, function(t) { (n[t] || (n[t] = {}))[e] = ML(e, "inRange" === t ? "active" : "inactive", o) }) }, this), PL.prototype.completeVisualOption.apply(this, arguments) }, _resetSelected: function(t, e) { var i = this.option , n = this._pieceList , o = (e ? i : t).selected || {}; if (i.selected = o, E(n, function(t, e) { var i = this.getSelectedMapKey(t); o.hasOwnProperty(i) || (o[i] = !0) }, this), "single" === i.selectedMode) { var a = !1; E(n, function(t, e) { var i = this.getSelectedMapKey(t); o[i] && (a ? o[i] = !1 : a = !0) }, this) } }, getSelectedMapKey: function(t) { return "categories" === this._mode ? t.value + "" : t.index + "" }, getPieceList: function() { return this._pieceList }, _determineMode: function() { var t = this.option; return t.pieces && 0 < t.pieces.length ? "pieces" : this.option.categories ? "categories" : "splitNumber" }, setSelected: function(t) { this.option.selected = k(t) }, getValueState: function(t) { var e = g_.findPieceIndex(t, this._pieceList); return null != e && this.option.selected[this.getSelectedMapKey(this._pieceList[e])] ? "inRange" : "outOfRange" }, findTargetDataIndices: function(n) { var o = []; return this.eachTargetSeries(function(t) { var i = [] , e = t.getData(); e.each(this.getDataDimension(e), function(t, e) { g_.findPieceIndex(t, this._pieceList) === n && i.push(e) }, this), o.push({ seriesId: t.id, dataIndex: i }) }, this), o }, getRepresentValue: function(t) { var e; if (this.isCategory()) e = t.value; else if (null != t.value) e = t.value; else { var i = t.interval || []; e = i[0] === -1 / 0 && i[1] === 1 / 0 ? 0 : (i[0] + i[1]) / 2 } return e }, getVisualMeta: function(o) { if (!this.isCategory()) { var a = [] , r = [] , s = this , t = this._pieceList.slice(); if (t.length) { var e = t[0].interval[0]; e !== -1 / 0 && t.unshift({ interval: [-1 / 0, e] }), (e = t[t.length - 1].interval[1]) !== 1 / 0 && t.push({ interval: [e, 1 / 0] }) } else t.push({ interval: [-1 / 0, 1 / 0] }); var i = -1 / 0; return E(t, function(t) { var e = t.interval; e && (e[0] > i && n([i, e[0]], "outOfRange"), n(e.slice()), i = e[1]) }, this), { stops: a, outerColors: r } } function n(t, e) { var i = s.getRepresentValue({ interval: t }); e = e || s.getValueState(i); var n = o(i, e); t[0] === -1 / 0 ? r[0] = n : t[1] === 1 / 0 ? r[1] = n : a.push({ value: t[0], color: n }, { value: t[1], color: n }) } } }) , jL = { splitNumber: function() { var t = this.option , e = this._pieceList , i = Math.min(t.precision, 20) , n = this.getExtent() , o = t.splitNumber; o = Math.max(parseInt(o, 10), 1), t.splitNumber = o; for (var a = (n[1] - n[0]) / o; +a.toFixed(i) !== a && i < 5; ) i++; t.precision = i, a = +a.toFixed(i), t.minOpen && e.push({ interval: [-1 / 0, n[0]], close: [0, 0] }); for (var r = 0, s = n[0]; r < o; s += a, r++) { var l = r === o - 1 ? n[1] : s + a; e.push({ interval: [s, l], close: [1, 1] }) } t.maxOpen && e.push({ interval: [n[1], 1 / 0], close: [0, 0] }), $l(e), E(e, function(t, e) { t.index = e, t.text = this.formatValueText(t.interval) }, this) }, categories: function() { var t = this.option; E(t.categories, function(t) { this._pieceList.push({ text: this.formatValueText(t, !0), value: t }) }, this), qL(t, this._pieceList) }, pieces: function() { var t = this.option , d = this._pieceList; E(t.pieces, function(t, e) { z(t) || (t = { value: t }); var i = { text: "", index: e }; if (null != t.label && (i.text = t.label), t.hasOwnProperty("value")) { var n = i.value = t.value; i.interval = [n, n], i.close = [1, 1] } else { for (var o = i.interval = [], a = i.close = [0, 0], r = [1, 0, 1], s = [-1 / 0, 1 / 0], l = [], u = 0; u < 2; u++) { for (var h = [["gte", "gt", "min"], ["lte", "lt", "max"]][u], c = 0; c < 3 && null == o[u]; c++) o[u] = t[h[c]], a[u] = r[c], l[u] = 2 === c; null == o[u] && (o[u] = s[u]) } l[0] && o[1] === 1 / 0 && (a[0] = 0), l[1] && o[0] === -1 / 0 && (a[1] = 0), o[0] === o[1] && a[0] && a[1] && (i.value = o[0]) } i.visual = g_.retrieveVisuals(t), d.push(i) }, this), qL(t, d), $l(d), E(d, function(t) { var e = t.close , i = [["<", "≤"][e[1]], [">", "≥"][e[0]]]; t.text = t.text || this.formatValueText(null != t.value ? t.value : t.interval, !1, i) }, this) } }; function qL(t, e) { var i = t.inverse; ("vertical" === t.orient ? !i : i) && e.reverse() } RL.extend({ type: "visualMap.piecewise", doRender: function() { var a = this.group; a.removeAll(); var r = this.visualMapModel , s = r.get("textGap") , t = r.textStyleModel , l = t.getFont() , u = t.getTextColor() , h = this._getItemAlign() , c = r.itemSize , e = this._getViewData() , i = e.endsText , d = W(r.get("showLabel", !0), !i); i && this._renderEndsText(a, i[0], c, d, h), E(e.viewPieceList, function(t) { var e = t.piece , i = new Ci; i.onclick = A(this._onItemClick, this, e), this._enableHoverLink(i, t.indexInModelPieceList); var n = r.getRepresentValue(e); if (this._createItemSymbol(i, n, [0, 0, c[0], c[1]]), d) { var o = this.visualMapModel.getValueState(n); i.add(new Ur({ style: { x: "right" === h ? -s : c[0] + s, y: c[1] / 2, text: e.text, textVerticalAlign: "middle", textAlign: h, textFont: l, textFill: u, opacity: "outOfRange" === o ? .5 : 1 } })) } a.add(i) }, this), i && this._renderEndsText(a, i[1], c, d, h), wu(r.get("orient"), a, r.get("itemGap")), this.renderBackground(a), this.positionGroup(a) }, _enableHoverLink: function(t, i) { function e(t) { var e = this.visualMapModel; e.option.hoverLink && this.api.dispatchAction({ type: t, batch: BL(e.findTargetDataIndices(i), e) }) } t.on("mouseover", A(e, this, "highlight")).on("mouseout", A(e, this, "downplay")) }, _getItemAlign: function() { var t = this.visualMapModel , e = t.option; if ("vertical" === e.orient) return zL(t, this.api, t.itemSize); var i = e.align; return i && "auto" !== i || (i = "left"), i }, _renderEndsText: function(t, e, i, n, o) { if (e) { var a = new Ci , r = this.visualMapModel.textStyleModel; a.add(new Ur({ style: { x: n ? "right" === o ? i[0] : 0 : i[0] / 2, y: i[1] / 2, textVerticalAlign: "middle", textAlign: n ? o : "center", text: e, textFont: r.getFont(), textFill: r.getTextColor() } })), t.add(a) } }, _getViewData: function() { var t = this.visualMapModel , e = O(t.getPieceList(), function(t, e) { return { piece: t, indexInModelPieceList: e } }) , i = t.get("text") , n = t.get("orient") , o = t.get("inverse"); return ("horizontal" === n ? o : !o) ? e.reverse() : i = i && i.slice().reverse(), { viewPieceList: e, endsText: i } }, _createItemSymbol: function(t, e, i) { t.add(wg(this.getControllerVisual(e, "symbol"), i[0], i[1], i[2], i[3], this.getControllerVisual(e, "color"))) }, _onItemClick: function(t) { var e = this.visualMapModel , i = e.option , n = k(i.selected) , o = e.getSelectedMapKey(t); "single" === i.selectedMode ? (n[o] = !0, E(n, function(t, e) { n[e] = e === o })) : n[o] = !n[o], this.api.dispatchAction({ type: "selectDataRange", from: this.uid, visualMapId: this.visualMapModel.id, selected: n }) } }); yf(yL); var KL, $L = "urn:schemas-microsoft-com:vml", JL = "undefined" == typeof window ? null : window, QL = !1, tk = JL && JL.document; function ek(t) { return KL(t) } if (tk && !v.canvasSupported) try { tk.namespaces.zrvml || tk.namespaces.add("zrvml", $L), KL = function(t) { return tk.createElement("') } } catch (t) { KL = function(t) { return tk.createElement("<" + t + ' xmlns="' + $L + '" class="zrvml">') } } var ik, nk = rr.CMD, ok = Math.round, ak = Math.sqrt, rk = Math.abs, sk = Math.cos, lk = Math.sin, uk = Math.max; if (!v.canvasSupported) { var hk = "," , ck = "progid:DXImageTransform.Microsoft" , dk = 21600 , fk = dk / 2 , pk = function(t) { t.style.cssText = "position:absolute;left:0;top:0;width:1px;height:1px;", t.coordsize = dk + "," + dk, t.coordorigin = "0,0" } , gk = function(t, e, i) { return "rgb(" + [t, e, i].join(",") + ")" } , mk = function(t, e) { e && t && e.parentNode !== t && t.appendChild(e) } , vk = function(t, e) { e && t && e.parentNode === t && t.removeChild(e) } , yk = function(t, e, i) { return 1e5 * (parseFloat(t) || 0) + 1e3 * (parseFloat(e) || 0) + i } , xk = Yn , _k = function(t, e, i) { var n = Fe(e); i = +i, isNaN(i) && (i = 1), n && (t.color = gk(n[0], n[1], n[2]), t.opacity = i * n[3]) } , wk = function(t, e, i, n) { var o = "fill" === e , a = t.getElementsByTagName(e)[0]; null != i[e] && "none" !== i[e] && (o || !o && i.lineWidth) ? (t[o ? "filled" : "stroked"] = "true", i[e]instanceof cs && vk(t, a), a = a || ek(e), o ? function(t, e, i) { var n, o, a = e.fill; if (null != a) if (a instanceof cs) { var r, s = 0, l = [0, 0], u = 0, h = 1, c = i.getBoundingRect(), d = c.width, f = c.height; if ("linear" === a.type) { r = "gradient"; var p = i.transform , g = [a.x * d, a.y * f] , m = [a.x2 * d, a.y2 * f]; p && (bt(g, g, p), bt(m, m, p)); var v = m[0] - g[0] , y = m[1] - g[1]; (s = 180 * Math.atan2(v, y) / Math.PI) < 0 && (s += 360), s < 1e-6 && (s = 0) } else { r = "gradientradial"; g = [a.x * d, a.y * f], p = i.transform; var x = i.scale , _ = d , w = f; l = [(g[0] - c.x) / _, (g[1] - c.y) / w], p && bt(g, g, p), _ /= x[0] * dk, w /= x[1] * dk; var b = uk(_, w); u = 0 / b, h = 2 * a.r / b - u } var S = a.colorStops.slice(); S.sort(function(t, e) { return t.offset - e.offset }); for (var M = S.length, I = [], T = [], A = 0; A < M; A++) { var D = S[A] , C = (n = D.color, void 0, o = Fe(n), [gk(o[0], o[1], o[2]), o[3]]); T.push(D.offset * h + u + " " + C[0]), 0 !== A && A !== M - 1 || I.push(C) } if (2 <= M) { var L = I[0][0] , k = I[1][0] , P = I[0][1] * e.opacity , N = I[1][1] * e.opacity; t.type = r, t.method = "none", t.focus = "100%", t.angle = s, t.color = L, t.color2 = k, t.colors = T.join(","), t.opacity = N, t.opacity2 = P } "radial" === r && (t.focusposition = l.join(",")) } else _k(t, a, e.opacity) }(a, i, n) : function(t, e) { e.lineDash && (t.dashstyle = e.lineDash.join(" ")), null == e.stroke || e.stroke instanceof cs || _k(t, e.stroke, e.opacity) }(a, i), mk(t, a)) : (t[o ? "filled" : "stroked"] = "false", vk(t, a)) } , bk = [[], [], []]; Ar.prototype.brushVML = function(t) { var e = this.style , i = this._vmlEl; i || (i = ek("shape"), pk(i), this._vmlEl = i), wk(i, "fill", e, this), wk(i, "stroke", e, this); var n = this.transform , o = null != n , a = i.getElementsByTagName("stroke")[0]; if (a) { var r = e.lineWidth; if (o && !e.strokeNoScale) { var s = n[0] * n[3] - n[1] * n[2]; r *= ak(rk(s)) } a.weight = r + "px" } var l = this.path || (this.path = new rr); this.__dirtyPath && (l.beginPath(), l.subPixelOptimize = !1, this.buildPath(l, this.shape), l.toStatic(), this.__dirtyPath = !1), i.path = function(t, e) { var i, n, o, a, r, s, l = nk.M, u = nk.C, h = nk.L, c = nk.A, d = nk.Q, f = [], p = t.data, g = t.len(); for (a = 0; a < g; ) { switch (n = "", i = 0, o = p[a++]) { case l: n = " m ", i = 1, r = p[a++], s = p[a++], bk[0][0] = r, bk[0][1] = s; break; case h: n = " l ", i = 1, r = p[a++], s = p[a++], bk[0][0] = r, bk[0][1] = s; break; case d: case u: n = " c ", i = 3; var m, v, y = p[a++], x = p[a++], _ = p[a++], w = p[a++]; o === d ? (_ = ((m = _) + 2 * y) / 3, w = ((v = w) + 2 * x) / 3, y = (r + 2 * y) / 3, x = (s + 2 * x) / 3) : (m = p[a++], v = p[a++]), bk[0][0] = y, bk[0][1] = x, bk[1][0] = _, bk[1][1] = w, r = bk[2][0] = m, s = bk[2][1] = v; break; case c: var b = 0 , S = 0 , M = 1 , I = 1 , T = 0; e && (b = e[4], S = e[5], M = ak(e[0] * e[0] + e[1] * e[1]), I = ak(e[2] * e[2] + e[3] * e[3]), T = Math.atan2(-e[1] / I, e[0] / M)); var A = p[a++] , D = p[a++] , C = p[a++] , L = p[a++] , k = p[a++] + T , P = p[a++] + k + T; a++; var N = p[a++] , O = A + sk(k) * C , E = D + lk(k) * L , R = (y = A + sk(P) * C, x = D + lk(P) * L, N ? " wa " : " at "); Math.abs(O - y) < 1e-4 && (.01 < Math.abs(P - k) ? N && (O += .0125) : Math.abs(E - D) < 1e-4 ? N && O < A || !N && A < O ? x -= .0125 : x += .0125 : N && E < D || !N && D < E ? y += .0125 : y -= .0125), f.push(R, ok(((A - C) * M + b) * dk - fk), hk, ok(((D - L) * I + S) * dk - fk), hk, ok(((A + C) * M + b) * dk - fk), hk, ok(((D + L) * I + S) * dk - fk), hk, ok((O * M + b) * dk - fk), hk, ok((E * I + S) * dk - fk), hk, ok((y * M + b) * dk - fk), hk, ok((x * I + S) * dk - fk)), r = y, s = x; break; case nk.R: var z = bk[0] , B = bk[1]; z[0] = p[a++], z[1] = p[a++], B[0] = z[0] + p[a++], B[1] = z[1] + p[a++], e && (bt(z, z, e), bt(B, B, e)), z[0] = ok(z[0] * dk - fk), B[0] = ok(B[0] * dk - fk), z[1] = ok(z[1] * dk - fk), B[1] = ok(B[1] * dk - fk), f.push(" m ", z[0], hk, z[1], " l ", B[0], hk, z[1], " l ", B[0], hk, B[1], " l ", z[0], hk, B[1]); break; case nk.Z: f.push(" x ") } if (0 < i) { f.push(n); for (var V = 0; V < i; V++) { var G = bk[V]; e && bt(G, G, e), f.push(ok(G[0] * dk - fk), hk, ok(G[1] * dk - fk), V < i - 1 ? hk : "") } } } return f.join("") }(l, this.transform), i.style.zIndex = yk(this.zlevel, this.z, this.z2), mk(t, i), null != e.text ? this.drawRectText(t, this.getBoundingRect()) : this.removeRectText(t) } , Ar.prototype.onRemove = function(t) { vk(t, this._vmlEl), this.removeRectText(t) } , Ar.prototype.onAdd = function(t) { mk(t, this._vmlEl), this.appendRectText(t) } ; Qn.prototype.brushVML = function(t) { var e, i, n = this.style, o = n.image; if (function(t) { return "object" == typeof t && t.tagName && "IMG" === t.tagName.toUpperCase() }(o)) { var a = o.src; if (a === this._imageSrc) e = this._imageWidth, i = this._imageHeight; else { var r = o.runtimeStyle , s = r.width , l = r.height; r.width = "auto", r.height = "auto", e = o.width, i = o.height, r.width = s, r.height = l, this._imageSrc = a, this._imageWidth = e, this._imageHeight = i } o = a } else o === this._imageSrc && (e = this._imageWidth, i = this._imageHeight); if (o) { var u = n.x || 0 , h = n.y || 0 , c = n.width , d = n.height , f = n.sWidth , p = n.sHeight , g = n.sx || 0 , m = n.sy || 0 , v = f && p , y = this._vmlEl; y || (y = tk.createElement("div"), pk(y), this._vmlEl = y); var x, _ = y.style, w = !1, b = 1, S = 1; if (this.transform && (x = this.transform, b = ak(x[0] * x[0] + x[1] * x[1]), S = ak(x[2] * x[2] + x[3] * x[3]), w = x[1] || x[2]), w) { var M = [u, h] , I = [u + c, h] , T = [u, h + d] , A = [u + c, h + d]; bt(M, M, x), bt(I, I, x), bt(T, T, x), bt(A, A, x); var D = uk(M[0], I[0], T[0], A[0]) , C = uk(M[1], I[1], T[1], A[1]) , L = []; L.push("M11=", x[0] / b, hk, "M12=", x[2] / S, hk, "M21=", x[1] / b, hk, "M22=", x[3] / S, hk, "Dx=", ok(u * b + x[4]), hk, "Dy=", ok(h * S + x[5])), _.padding = "0 " + ok(D) + "px " + ok(C) + "px 0", _.filter = ck + ".Matrix(" + L.join("") + ", SizingMethod=clip)" } else x && (u = u * b + x[4], h = h * S + x[5]), _.filter = "", _.left = ok(u) + "px", _.top = ok(h) + "px"; var k = this._imageEl , P = this._cropEl; k || (k = tk.createElement("div"), this._imageEl = k); var N = k.style; if (v) { if (e && i) N.width = ok(b * e * c / f) + "px", N.height = ok(S * i * d / p) + "px"; else { var O = new Image , E = this; O.onload = function() { O.onload = null, e = O.width, i = O.height, N.width = ok(b * e * c / f) + "px", N.height = ok(S * i * d / p) + "px", E._imageWidth = e, E._imageHeight = i, E._imageSrc = o } , O.src = o } P || ((P = tk.createElement("div")).style.overflow = "hidden", this._cropEl = P); var R = P.style; R.width = ok((c + g * c / f) * b), R.height = ok((d + m * d / p) * S), R.filter = ck + ".Matrix(Dx=" + -g * c / f * b + ",Dy=" + -m * d / p * S + ")", P.parentNode || y.appendChild(P), k.parentNode !== P && P.appendChild(k) } else N.width = ok(b * c) + "px", N.height = ok(S * d) + "px", y.appendChild(k), P && P.parentNode && (y.removeChild(P), this._cropEl = null); var z = "" , B = n.opacity; B < 1 && (z += ".Alpha(opacity=" + ok(100 * B) + ") "), z += ck + ".AlphaImageLoader(src=" + o + ", SizingMethod=scale)", N.filter = z, y.style.zIndex = yk(this.zlevel, this.z, this.z2), mk(t, y), null != n.text && this.drawRectText(t, this.getBoundingRect()) } } , Qn.prototype.onRemove = function(t) { vk(t, this._vmlEl), this._vmlEl = null, this._cropEl = null, this._imageEl = null, this.removeRectText(t) } , Qn.prototype.onAdd = function(t) { mk(t, this._vmlEl), this.appendRectText(t) } ; var Sk, Mk = "normal", Ik = {}, Tk = 0, Ak = document.createElement("div"); ik = function(t, e) { var i = tk; Sk || ((Sk = i.createElement("div")).style.cssText = "position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;", tk.body.appendChild(Sk)); try { Sk.style.font = e } catch (t) {} return Sk.innerHTML = "", Sk.appendChild(i.createTextNode(t)), { width: Sk.offsetWidth } } , fn["measureText"] = ik; for (var Dk = new Di, Ck = function(t, e, i, n) { var o = this.style; this.__dirty && En(o); var a = o.text; if (null != a && (a += ""), a) { if (o.rich) { var r = In(a, o); a = []; for (var s = 0; s < r.lines.length; s++) { for (var l = r.lines[s].tokens, u = [], h = 0; h < l.length; h++) u.push(l[h].text); a.push(u.join("")) } a = a.join("\n") } var c, d, f = o.textAlign, p = o.textVerticalAlign, g = function(t) { var e = Ik[t]; if (!e) { 100 < Tk && (Tk = 0, Ik = {}); var i, n = Ak.style; try { n.font = t, i = n.fontFamily.split(",")[0] } catch (t) {} e = { style: n.fontStyle || Mk, variant: n.fontVariant || Mk, weight: n.fontWeight || Mk, size: 0 | parseFloat(n.fontSize || 12), family: i || "Microsoft YaHei" }, Ik[t] = e, Tk++ } return e }(o.font), m = g.style + " " + g.variant + " " + g.weight + " " + g.size + 'px "' + g.family + '"'; i = i || gn(a, m, f, p, o.textPadding, o.textLineHeight); var v = this.transform; if (v && !n && (Dk.copy(e), Dk.applyTransform(v), e = Dk), n) c = e.x, d = e.y; else { var y = o.textPosition; if (y instanceof Array) c = e.x + xk(y[0], e.width), d = e.y + xk(y[1], e.height), f = f || "left"; else { var x = this.calculateTextPosition ? this.calculateTextPosition({}, o, e) : yn({}, o, e); c = x.x, d = x.y, f = f || x.textAlign, p = p || x.textVerticalAlign } } c = mn(c, i.width, f), d = vn(d, i.height, p), d += i.height / 2; var _, w, b, S = ek, M = this._textVmlEl; M ? w = (_ = (b = M.firstChild).nextSibling).nextSibling : (M = S("line"), _ = S("path"), w = S("textpath"), b = S("skew"), w.style["v-text-align"] = "left", pk(M), _.textpathok = !0, w.on = !0, M.from = "0 0", M.to = "1000 0.05", mk(M, b), mk(M, _), mk(M, w), this._textVmlEl = M); var I = [c, d] , T = M.style; v && n ? (bt(I, I, v), b.on = !0, b.matrix = v[0].toFixed(3) + hk + v[2].toFixed(3) + hk + v[1].toFixed(3) + hk + v[3].toFixed(3) + ",0,0", b.offset = (ok(I[0]) || 0) + "," + (ok(I[1]) || 0), b.origin = "0 0", T.left = "0px", T.top = "0px") : (b.on = !1, T.left = ok(c) + "px", T.top = ok(d) + "px"), w.string = function(t) { return String(t).replace(/&/g, "&").replace(/"/g, """) }(a); try { w.style.font = m } catch (t) {} wk(M, "fill", { fill: o.textFill, opacity: o.opacity }, this), wk(M, "stroke", { stroke: o.textStroke, opacity: o.opacity, lineDash: o.lineDash || null }, this), M.style.zIndex = yk(this.zlevel, this.z, this.z2), mk(t, M) } }, Lk = function(t) { vk(t, this._textVmlEl), this._textVmlEl = null }, kk = function(t) { mk(t, this._textVmlEl) }, Pk = [Kn, Jn, Qn, Ar, Ur], Nk = 0; Nk < Pk.length; Nk++) { var Ok = Pk[Nk].prototype; Ok.drawRectText = Ck, Ok.removeRectText = Lk, Ok.appendRectText = kk } Ur.prototype.brushVML = function(t) { var e = this.style; null != e.text ? this.drawRectText(t, { x: e.x || 0, y: e.y || 0, width: 0, height: 0 }, this.getBoundingRect(), !0) : this.removeRectText(t) } , Ur.prototype.onRemove = function(t) { this.removeRectText(t) } , Ur.prototype.onAdd = function(t) { this.appendRectText(t) } } function Ek(t) { return parseInt(t, 10) } function Rk(t, e) { !function() { if (!QL && tk) { QL = !0; var t = tk.styleSheets; t.length < 31 ? tk.createStyleSheet().addRule(".zrvml", "behavior:url(#default#VML)") : t[0].addRule(".zrvml", "behavior:url(#default#VML)") } }(), this.root = t, this.storage = e; var i = document.createElement("div") , n = document.createElement("div"); i.style.cssText = "display:inline-block;overflow:hidden;position:relative;width:300px;height:150px;", n.style.cssText = "position:absolute;left:0;top:0;", t.appendChild(i), this._vmlRoot = n, this._vmlViewport = i, this.resize(); var o = e.delFromStorage , a = e.addToStorage; e.delFromStorage = function(t) { o.call(e, t), t && t.onRemove && t.onRemove(n) } , e.addToStorage = function(t) { t.onAdd && t.onAdd(n), a.call(e, t) } , this._firstPaint = !0 } Rk.prototype = { constructor: Rk, getType: function() { return "vml" }, getViewportRoot: function() { return this._vmlViewport }, getViewportRootOffset: function() { var t = this.getViewportRoot(); if (t) return { offsetLeft: t.offsetLeft || 0, offsetTop: t.offsetTop || 0 } }, refresh: function() { var t = this.storage.getDisplayList(!0, !0); this._paintList(t) }, _paintList: function(t) { for (var e = this._vmlRoot, i = 0; i < t.length; i++) { var n = t[i]; n.invisible || n.ignore ? (n.__alreadyNotVisible || n.onRemove(e), n.__alreadyNotVisible = !0) : (n.__alreadyNotVisible && n.onAdd(e), n.__alreadyNotVisible = !1, n.__dirty && (n.beforeBrush && n.beforeBrush(), (n.brushVML || n.brush).call(n, e), n.afterBrush && n.afterBrush())), n.__dirty = !1 } this._firstPaint && (this._vmlViewport.appendChild(e), this._firstPaint = !1) }, resize: function(t, e) { t = null == t ? this._getWidth() : t, e = null == e ? this._getHeight() : e; if (this._width !== t || this._height !== e) { this._width = t, this._height = e; var i = this._vmlViewport.style; i.width = t + "px", i.height = e + "px" } }, dispose: function() { this.root.innerHTML = "", this._vmlRoot = this._vmlViewport = this.storage = null }, getWidth: function() { return this._width }, getHeight: function() { return this._height }, clear: function() { this._vmlViewport && this.root.removeChild(this._vmlViewport) }, _getWidth: function() { var t = this.root , e = t.currentStyle; return (t.clientWidth || Ek(e.width)) - Ek(e.paddingLeft) - Ek(e.paddingRight) | 0 }, _getHeight: function() { var t = this.root , e = t.currentStyle; return (t.clientHeight || Ek(e.height)) - Ek(e.paddingTop) - Ek(e.paddingBottom) | 0 } }, E(["getLayer", "insertLayer", "eachLayer", "eachBuiltinLayer", "eachOtherLayer", "getLayers", "modLayer", "delLayer", "clearLayer", "toDataURL", "pathToImage"], function(t) { Rk.prototype[t] = function(t) { return function() { vi('In IE8.0 VML mode painter not support method "' + t + '"') } }(t) }), Po("vml", Rk); function zk(t) { return document.createElementNS("http://www.w3.org/2000/svg", t) } var Bk = rr.CMD , Vk = Array.prototype.join , Gk = "none" , Fk = Math.round , Wk = Math.sin , Hk = Math.cos , Zk = Math.PI , Uk = 2 * Math.PI , Xk = 180 / Zk , Yk = 1e-4; function jk(t) { return Fk(1e4 * t) / 1e4 } function qk(t) { return t < Yk && -Yk < t } function Kk(t, e) { e && $k(t, "transform", "matrix(" + Vk.call(e, ",") + ")") } function $k(t, e, i) { i && ("linear" === i.type || "radial" === i.type) || t.setAttribute(e, i) } function Jk(t, e, i, n) { if (function(t, e) { var i = e ? t.textFill : t.fill; return null != i && i !== Gk }(e, i)) { var o = i ? e.textFill : e.fill; $k(t, "fill", o = "transparent" === o ? Gk : o), $k(t, "fill-opacity", null != e.fillOpacity ? e.fillOpacity * e.opacity : e.opacity) } else $k(t, "fill", Gk); if (function(t, e) { var i = e ? t.textStroke : t.stroke; return null != i && i !== Gk }(e, i)) { var a = i ? e.textStroke : e.stroke; $k(t, "stroke", a = "transparent" === a ? Gk : a), $k(t, "stroke-width", (i ? e.textStrokeWidth : e.lineWidth) / (!i && e.strokeNoScale ? n.getLineScale() : 1)), $k(t, "paint-order", i ? "stroke" : "fill"), $k(t, "stroke-opacity", null != e.strokeOpacity ? e.strokeOpacity : e.opacity), e.lineDash ? ($k(t, "stroke-dasharray", e.lineDash.join(",")), $k(t, "stroke-dashoffset", Fk(e.lineDashOffset || 0))) : $k(t, "stroke-dasharray", ""), e.lineCap && $k(t, "stroke-linecap", e.lineCap), e.lineJoin && $k(t, "stroke-linejoin", e.lineJoin), e.miterLimit && $k(t, "stroke-miterlimit", e.miterLimit) } else $k(t, "stroke", Gk) } var Qk = {}; Qk.brush = function(t) { var e = t.style , i = t.__svgEl; i || (i = zk("path"), t.__svgEl = i), t.path || t.createPathProxy(); var n = t.path; if (t.__dirtyPath) { n.beginPath(), n.subPixelOptimize = !1, t.buildPath(n, t.shape), t.__dirtyPath = !1; var o = function(t) { for (var e = [], i = t.data, n = t.len(), o = 0; o < n; ) { var a = "" , r = 0; switch (i[o++]) { case Bk.M: a = "M", r = 2; break; case Bk.L: a = "L", r = 2; break; case Bk.Q: a = "Q", r = 4; break; case Bk.C: a = "C", r = 6; break; case Bk.A: var s = i[o++] , l = i[o++] , u = i[o++] , h = i[o++] , c = i[o++] , d = i[o++] , f = i[o++] , p = i[o++] , g = Math.abs(d) , m = qk(g - Uk) || (p ? Uk <= d : Uk <= -d) , v = 0 < d ? d % Uk : d % Uk + Uk , y = !1; y = !!m || !qk(g) && Zk <= v == !!p; var x = jk(s + u * Hk(c)) , _ = jk(l + h * Wk(c)); m && (d = p ? Uk - 1e-4 : 1e-4 - Uk, y = !0, 9 === o && e.push("M", x, _)); var w = jk(s + u * Hk(c + d)) , b = jk(l + h * Wk(c + d)); e.push("A", jk(u), jk(h), Fk(f * Xk), +y, +p, w, b); break; case Bk.Z: a = "Z"; break; case Bk.R: w = jk(i[o++]), b = jk(i[o++]); var S = jk(i[o++]) , M = jk(i[o++]); e.push("M", w, b, "L", w + S, b, "L", w + S, b + M, "L", w, b + M, "L", w, b) } a && e.push(a); for (var I = 0; I < r; I++) e.push(jk(i[o++])) } return e.join(" ") }(n); o.indexOf("NaN") < 0 && $k(i, "d", o) } Jk(i, e, !1, t), Kk(i, t.transform), null != e.text ? rP(t, t.getBoundingRect()) : lP(t) } ; var tP = { brush: function(t) { var e = t.style , i = e.image; i instanceof HTMLImageElement && (i = i.src); if (i) { var n = e.x || 0 , o = e.y || 0 , a = e.width , r = e.height , s = t.__svgEl; s || (s = zk("image"), t.__svgEl = s), i !== t.__imageSrc && (function(t, e, i) { t.setAttributeNS("http://www.w3.org/1999/xlink", e, i) }(s, "href", i), t.__imageSrc = i), $k(s, "width", a), $k(s, "height", r), $k(s, "x", n), $k(s, "y", o), Kk(s, t.transform), null != e.text ? rP(t, t.getBoundingRect()) : lP(t) } } } , eP = {} , iP = new Di , nP = {} , oP = [] , aP = { left: "start", right: "end", center: "middle", middle: "middle" } , rP = function(t, e) { var i = t.style , n = t.transform , o = t instanceof Ur || i.transformText; t.__dirty && En(i); var a = i.text; if (null != a && (a += ""), qn(a, i)) { null == a && (a = ""), !o && n && (iP.copy(e), iP.applyTransform(n), e = iP); var r = t.__textSvgEl; r || (r = zk("text"), t.__textSvgEl = r); var s = r.style , l = i.font || dn , u = r.__computedFont; l !== r.__styleFont && (s.font = r.__styleFont = l, u = r.__computedFont = s.font); var h = i.textPadding , c = i.textLineHeight , d = t.__textCotentBlock; d && !t.__dirtyText || (d = t.__textCotentBlock = Mn(a, u, h, c, i.truncate)); var f = d.outerHeight , p = d.lineHeight; Hn(nP, t, i, e); var g = nP.baseX , m = nP.baseY , v = nP.textAlign || "left" , y = nP.textVerticalAlign; !function(t, e, i, n, o, a, r) { re(oP), e && i && se(oP, i); var s = n.textRotation; if (o && s) { var l = n.textOrigin; "center" === l ? (a = o.width / 2 + o.x, r = o.height / 2 + o.y) : l && (a = l[0] + o.x, r = l[1] + o.y), oP[4] -= a, oP[5] -= r, he(oP, oP, s), oP[4] += a, oP[5] += r } Kk(t, oP) }(r, o, n, i, e, g, m); var x = g , _ = vn(m, f, y); h && (x = function(t, e, i) { return "right" === e ? t - i[1] : "center" === e ? t + i[3] / 2 - i[1] / 2 : t + i[3] }(g, v, h), _ += h[0]), _ += p / 2, Jk(r, i, !0, t); var w = d.canCacheByTextString , b = t.__tspanList || (t.__tspanList = []) , S = b.length; if (w && t.__canCacheByTextString && t.__text === a) { if (t.__dirtyText && S) for (var M = 0; M < S; ++M) sP(b[M], v, x, _ + M * p) } else { t.__text = a, t.__canCacheByTextString = w; var I = d.lines , T = I.length; for (M = 0; M < T; M++) { var A = b[M] , D = I[M]; A ? A.__zrText !== D && (A.innerHTML = "", A.appendChild(document.createTextNode(D))) : (A = b[M] = zk("tspan"), r.appendChild(A), A.appendChild(document.createTextNode(D))), sP(A, v, x, _ + M * p) } if (T < S) { for (; M < S; M++) r.removeChild(b[M]); b.length = T } } } }; function sP(t, e, i, n) { $k(t, "dominant-baseline", "middle"), $k(t, "text-anchor", aP[e]), $k(t, "x", i), $k(t, "y", n) } function lP(t) { t && t.__textSvgEl && (t.__textSvgEl.parentNode && t.__textSvgEl.parentNode.removeChild(t.__textSvgEl), t.__textSvgEl = null, t.__tspanList = [], t.__text = null) } function uP() {} function hP(t, e) { for (var i = 0, n = e.length, o = 0, a = 0; i < n; i++) { var r = e[i]; if (r.removed) { for (s = [], l = a; l < a + r.count; l++) s.push(l); r.indices = s, a += r.count } else { for (var s = [], l = o; l < o + r.count; l++) s.push(l); r.indices = s, o += r.count, r.added || (a += r.count) } } return e } eP.drawRectText = rP, eP.brush = function(t) { null != t.style.text ? rP(t, !1) : lP(t) } , uP.prototype = { diff: function(l, u, t) { t = t || function(t, e) { return t === e } , this.equals = t; var h = this; l = l.slice(); var c = (u = u.slice()).length , d = l.length , f = 1 , e = c + d , p = [{ newPos: -1, components: [] }] , i = this.extractCommon(p[0], u, l, 0); if (p[0].newPos + 1 >= c && d <= i + 1) { for (var n = [], o = 0; o < u.length; o++) n.push(o); return [{ indices: n, count: u.length }] } function a() { for (var t = -1 * f; t <= f; t += 2) { var e, i = p[t - 1], n = p[t + 1], o = (n ? n.newPos : 0) - t; i && (p[t - 1] = void 0); var a = i && i.newPos + 1 < c , r = n && 0 <= o && o < d; if (a || r) { if (!a || r && i.newPos < n.newPos ? (e = { newPos: (s = n).newPos, components: s.components.slice(0) }, h.pushComponent(e.components, void 0, !0)) : ((e = i).newPos++, h.pushComponent(e.components, !0, void 0)), o = h.extractCommon(e, u, l, t), e.newPos + 1 >= c && d <= o + 1) return hP(h, e.components, u, l); p[t] = e } else p[t] = void 0 } var s; f++ } for (; f <= e; ) { var r = a(); if (r) return r } }, pushComponent: function(t, e, i) { var n = t[t.length - 1]; n && n.added === e && n.removed === i ? t[t.length - 1] = { count: n.count + 1, added: e, removed: i } : t.push({ count: 1, added: e, removed: i }) }, extractCommon: function(t, e, i, n) { for (var o = e.length, a = i.length, r = t.newPos, s = r - n, l = 0; r + 1 < o && s + 1 < a && this.equals(e[r + 1], i[s + 1]); ) r++, s++, l++; return l && t.components.push({ count: l }), t.newPos = r, s }, tokenize: function(t) { return t.slice() }, join: function(t) { return t.slice() } }; var cP = new uP; function dP(t, e, i, n, o) { this._zrId = t, this._svgRoot = e, this._tagNames = "string" == typeof i ? [i] : i, this._markLabel = n, this._domName = o || "_dom", this.nextId = 0 } function fP(t, e) { dP.call(this, t, e, ["linearGradient", "radialGradient"], "__gradient_in_use__") } function pP(t, e) { dP.call(this, t, e, "clipPath", "__clippath_in_use__") } function gP(t, e) { dP.call(this, t, e, ["filter"], "__filter_in_use__", "_shadowDom") } function mP(t) { return t && (t.shadowBlur || t.shadowOffsetX || t.shadowOffsetY || t.textShadowBlur || t.textShadowOffsetX || t.textShadowOffsetY) } function vP(t) { return parseInt(t, 10) } function yP(t, e) { return e && t && e.parentNode !== t } function xP(t, e, i) { if (yP(t, e) && i) { var n = i.nextSibling; n ? t.insertBefore(e, n) : t.appendChild(e) } } function _P(t, e) { if (yP(t, e)) { var i = t.firstChild; i ? t.insertBefore(e, i) : t.appendChild(e) } } function wP(t, e) { e && t && e.parentNode === t && t.removeChild(e) } function bP(t) { return t.__textSvgEl } function SP(t) { return t.__svgEl } dP.prototype.createElement = zk, dP.prototype.getDefs = function(t) { var e = this._svgRoot , n = this._svgRoot.getElementsByTagName("defs"); return 0 === n.length ? t ? ((n = e.insertBefore(this.createElement("defs"), e.firstChild)).contains || (n.contains = function(t) { var e = n.children; if (!e) return !1; for (var i = e.length - 1; 0 <= i; --i) if (e[i] === t) return !0; return !1 } ), n) : null : n[0] } , dP.prototype.update = function(t, e) { if (t) { var i = this.getDefs(!1); if (t[this._domName] && i.contains(t[this._domName])) "function" == typeof e && e(t); else { var n = this.add(t); n && (t[this._domName] = n) } } } , dP.prototype.addDom = function(t) { this.getDefs(!0).appendChild(t) } , dP.prototype.removeDom = function(t) { var e = this.getDefs(!1); e && t[this._domName] && (e.removeChild(t[this._domName]), t[this._domName] = null) } , dP.prototype.getDoms = function() { var i = this.getDefs(!1); if (!i) return []; var n = []; return E(this._tagNames, function(t) { var e = i.getElementsByTagName(t); n = n.concat([].slice.call(e)) }), n } , dP.prototype.markAllUnused = function() { var t = this.getDoms() , e = this; E(t, function(t) { t[e._markLabel] = "0" }) } , dP.prototype.markUsed = function(t) { t && (t[this._markLabel] = "1") } , dP.prototype.removeUnused = function() { var e = this.getDefs(!1); if (e) { var t = this.getDoms() , i = this; E(t, function(t) { "1" !== t[i._markLabel] && e.removeChild(t) }) } } , dP.prototype.getSvgProxy = function(t) { return t instanceof Ar ? Qk : t instanceof Qn ? tP : t instanceof Ur ? eP : Qk } , dP.prototype.getTextSvgElement = function(t) { return t.__textSvgEl } , dP.prototype.getSvgElement = function(t) { return t.__svgEl } , w(fP, dP), fP.prototype.addWithoutUpdate = function(a, r) { if (r && r.style) { var s = this; E(["fill", "stroke"], function(t) { if (r.style[t] && ("linear" === r.style[t].type || "radial" === r.style[t].type)) { var e, i = r.style[t], n = s.getDefs(!0); i._dom ? (e = i._dom, n.contains(i._dom) || s.addDom(e)) : e = s.add(i), s.markUsed(r); var o = e.getAttribute("id"); a.setAttribute(t, "url(#" + o + ")") } }) } } , fP.prototype.add = function(t) { var e; if ("linear" === t.type) e = this.createElement("linearGradient"); else { if ("radial" !== t.type) return vi("Illegal gradient type."), null; e = this.createElement("radialGradient") } return t.id = t.id || this.nextId++, e.setAttribute("id", "zr" + this._zrId + "-gradient-" + t.id), this.updateDom(t, e), this.addDom(e), e } , fP.prototype.update = function(i) { var n = this; dP.prototype.update.call(this, i, function() { var t = i.type , e = i._dom.tagName; "linear" === t && "linearGradient" === e || "radial" === t && "radialGradient" === e ? n.updateDom(i, i._dom) : (n.removeDom(i), n.add(i)) }) } , fP.prototype.updateDom = function(t, e) { if ("linear" === t.type) e.setAttribute("x1", t.x), e.setAttribute("y1", t.y), e.setAttribute("x2", t.x2), e.setAttribute("y2", t.y2); else { if ("radial" !== t.type) return void vi("Illegal gradient type."); e.setAttribute("cx", t.x), e.setAttribute("cy", t.y), e.setAttribute("r", t.r) } t.global ? e.setAttribute("gradientUnits", "userSpaceOnUse") : e.setAttribute("gradientUnits", "objectBoundingBox"), e.innerHTML = ""; for (var i = t.colorStops, n = 0, o = i.length; n < o; ++n) { var a = this.createElement("stop"); a.setAttribute("offset", 100 * i[n].offset + "%"); var r = i[n].color; if (r.indexOf(!1)) { var s = Fe(r)[3] , l = Ze(r); a.setAttribute("stop-color", "#" + l), a.setAttribute("stop-opacity", s) } else a.setAttribute("stop-color", i[n].color); e.appendChild(a) } t._dom = e } , fP.prototype.markUsed = function(t) { if (t.style) { var e = t.style.fill; e && e._dom && dP.prototype.markUsed.call(this, e._dom), (e = t.style.stroke) && e._dom && dP.prototype.markUsed.call(this, e._dom) } } , w(pP, dP), pP.prototype.update = function(t) { var e = this.getSvgElement(t); e && this.updateDom(e, t.__clipPaths, !1); var i = this.getTextSvgElement(t); i && this.updateDom(i, t.__clipPaths, !0), this.markUsed(t) } , pP.prototype.updateDom = function(t, e, i) { if (e && 0 < e.length) { var n, o, a = this.getDefs(!0), r = e[0], s = i ? "_textDom" : "_dom"; r[s] ? (o = r[s].getAttribute("id"), n = r[s], a.contains(n) || a.appendChild(n)) : (o = "zr" + this._zrId + "-clip-" + this.nextId, ++this.nextId, (n = this.createElement("clipPath")).setAttribute("id", o), a.appendChild(n), r[s] = n); var l = this.getSvgProxy(r); if (r.transform && r.parent.invTransform && !i) { var u = Array.prototype.slice.call(r.transform); le(r.transform, r.parent.invTransform, r.transform), l.brush(r), r.transform = u } else l.brush(r); var h = this.getSvgElement(r); n.innerHTML = "", n.appendChild(h.cloneNode()), t.setAttribute("clip-path", "url(#" + o + ")"), 1 < e.length && this.updateDom(n, e.slice(1), i) } else t && t.setAttribute("clip-path", "none") } , pP.prototype.markUsed = function(t) { var e = this; t.__clipPaths && E(t.__clipPaths, function(t) { t._dom && dP.prototype.markUsed.call(e, t._dom), t._textDom && dP.prototype.markUsed.call(e, t._textDom) }) } , w(gP, dP), gP.prototype.addWithoutUpdate = function(t, e) { if (e && mP(e.style)) { var i; if (e._shadowDom) i = e._shadowDom, this.getDefs(!0).contains(e._shadowDom) || this.addDom(i); else i = this.add(e); this.markUsed(e); var n = i.getAttribute("id"); t.style.filter = "url(#" + n + ")" } } , gP.prototype.add = function(t) { var e = this.createElement("filter"); return t._shadowDomId = t._shadowDomId || this.nextId++, e.setAttribute("id", "zr" + this._zrId + "-shadow-" + t._shadowDomId), this.updateDom(t, e), this.addDom(e), e } , gP.prototype.update = function(t, e) { if (mP(e.style)) { var i = this; dP.prototype.update.call(this, e, function() { i.updateDom(e, e._shadowDom) }) } else this.remove(t, e) } , gP.prototype.remove = function(t, e) { null != e._shadowDomId && (this.removeDom(t), t.style.filter = "") } , gP.prototype.updateDom = function(t, e) { var i = e.getElementsByTagName("feDropShadow"); i = 0 === i.length ? this.createElement("feDropShadow") : i[0]; var n, o, a, r, s = t.style, l = t.scale && t.scale[0] || 1, u = t.scale && t.scale[1] || 1; if (s.shadowBlur || s.shadowOffsetX || s.shadowOffsetY) n = s.shadowOffsetX || 0, o = s.shadowOffsetY || 0, a = s.shadowBlur, r = s.shadowColor; else { if (!s.textShadowBlur) return void this.removeDom(e, s); n = s.textShadowOffsetX || 0, o = s.textShadowOffsetY || 0, a = s.textShadowBlur, r = s.textShadowColor } i.setAttribute("dx", n / l), i.setAttribute("dy", o / u), i.setAttribute("flood-color", r); var h = a / 2 / l + " " + a / 2 / u; i.setAttribute("stdDeviation", h), e.setAttribute("x", "-100%"), e.setAttribute("y", "-100%"), e.setAttribute("width", Math.ceil(a / 2 * 200) + "%"), e.setAttribute("height", Math.ceil(a / 2 * 200) + "%"), e.appendChild(i), t._shadowDom = e } , gP.prototype.markUsed = function(t) { t._shadowDom && dP.prototype.markUsed.call(this, t._shadowDom) } ; function MP(t, e, i, n) { this.root = t, this.storage = e, this._opts = i = P({}, i || {}); var o = zk("svg"); o.setAttribute("xmlns", "http://www.w3.org/2000/svg"), o.setAttribute("version", "1.1"), o.setAttribute("baseProfile", "full"), o.style.cssText = "user-select:none;position:absolute;left:0;top:0;"; var a = zk("g"); o.appendChild(a); var r = zk("g"); o.appendChild(r), this.gradientManager = new fP(n,r), this.clipPathManager = new pP(n,r), this.shadowManager = new gP(n,r); var s = document.createElement("div"); s.style.cssText = "overflow:hidden;position:relative", this._svgDom = o, this._svgRoot = r, this._backgroundRoot = a, this._viewport = s, t.appendChild(s), s.appendChild(o), this.resize(i.width, i.height), this._visibleList = [] } MP.prototype = { constructor: MP, getType: function() { return "svg" }, getViewportRoot: function() { return this._viewport }, getSvgDom: function() { return this._svgDom }, getSvgRoot: function() { return this._svgRoot }, getViewportRootOffset: function() { var t = this.getViewportRoot(); if (t) return { offsetLeft: t.offsetLeft || 0, offsetTop: t.offsetTop || 0 } }, refresh: function() { var t = this.storage.getDisplayList(!0); this._paintList(t) }, setBackgroundColor: function(t) { this._backgroundRoot && this._backgroundNode && this._backgroundRoot.removeChild(this._backgroundNode); var e = zk("rect"); e.setAttribute("width", this.getWidth()), e.setAttribute("height", this.getHeight()), e.setAttribute("x", 0), e.setAttribute("y", 0), e.setAttribute("id", 0), e.style.fill = t, this._backgroundRoot.appendChild(e), this._backgroundNode = e }, _paintList: function(t) { this.gradientManager.markAllUnused(), this.clipPathManager.markAllUnused(), this.shadowManager.markAllUnused(); var e, i, n = this._svgRoot, o = this._visibleList, a = t.length, r = []; for (e = 0; e < a; e++) { var s = t[e] , l = (i = s)instanceof Ar ? Qk : i instanceof Qn ? tP : i instanceof Ur ? eP : Qk , u = SP(s) || bP(s); s.invisible || (s.__dirty && (l && l.brush(s), this.clipPathManager.update(s), s.style && (this.gradientManager.update(s.style.fill), this.gradientManager.update(s.style.stroke), this.shadowManager.update(u, s)), s.__dirty = !1), r.push(s)) } var h, c = function(t, e, i) { return cP.diff(t, e, i) }(o, r); for (e = 0; e < c.length; e++) { if ((p = c[e]).removed) for (var d = 0; d < p.count; d++) { u = SP(s = o[p.indices[d]]); var f = bP(s); wP(n, u), wP(n, f) } } for (e = 0; e < c.length; e++) { var p; if ((p = c[e]).added) for (d = 0; d < p.count; d++) { u = SP(s = r[p.indices[d]]), f = bP(s); h ? xP(n, u, h) : _P(n, u), u ? xP(n, f, u) : h ? xP(n, f, h) : _P(n, f), xP(n, f, u), h = f || u || h, this.gradientManager.addWithoutUpdate(u || f, s), this.shadowManager.addWithoutUpdate(u || f, s), this.clipPathManager.markUsed(s) } else if (!p.removed) for (d = 0; d < p.count; d++) { u = SP(s = r[p.indices[d]]), f = bP(s), u = SP(s), f = bP(s); this.gradientManager.markUsed(s), this.gradientManager.addWithoutUpdate(u || f, s), this.shadowManager.markUsed(s), this.shadowManager.addWithoutUpdate(u || f, s), this.clipPathManager.markUsed(s), f && xP(n, f, u), h = u || f || h } } this.gradientManager.removeUnused(), this.clipPathManager.removeUnused(), this.shadowManager.removeUnused(), this._visibleList = r }, _getDefs: function(t) { var n, e = this._svgDom; return 0 !== (n = e.getElementsByTagName("defs")).length ? n[0] : t ? ((n = e.insertBefore(zk("defs"), e.firstChild)).contains || (n.contains = function(t) { var e = n.children; if (!e) return !1; for (var i = e.length - 1; 0 <= i; --i) if (e[i] === t) return !0; return !1 } ), n) : null }, resize: function(t, e) { var i = this._viewport; i.style.display = "none"; var n = this._opts; if (null != t && (n.width = t), null != e && (n.height = e), t = this._getSize(0), e = this._getSize(1), i.style.display = "", this._width !== t || this._height !== e) { this._width = t, this._height = e; var o = i.style; o.width = t + "px", o.height = e + "px"; var a = this._svgDom; a.setAttribute("width", t), a.setAttribute("height", e) } this._backgroundNode && (this._backgroundNode.setAttribute("width", t), this._backgroundNode.setAttribute("height", e)) }, getWidth: function() { return this._width }, getHeight: function() { return this._height }, _getSize: function(t) { var e = this._opts , i = ["width", "height"][t] , n = ["clientWidth", "clientHeight"][t] , o = ["paddingLeft", "paddingTop"][t] , a = ["paddingRight", "paddingBottom"][t]; if (null != e[i] && "auto" !== e[i]) return parseFloat(e[i]); var r = this.root , s = document.defaultView.getComputedStyle(r); return (r[n] || vP(s[i]) || vP(r.style[i])) - (vP(s[o]) || 0) - (vP(s[a]) || 0) | 0 }, dispose: function() { this.root.innerHTML = "", this._svgRoot = this._backgroundRoot = this._svgDom = this._backgroundNode = this._viewport = this.storage = null }, clear: function() { this._viewport && this.root.removeChild(this._viewport) }, toDataURL: function() { return this.refresh(), "data:image/svg+xml;charset=UTF-8," + encodeURIComponent(this._svgDom.outerHTML.replace(/>\n\r<")) } }, E(["getLayer", "insertLayer", "eachLayer", "eachBuiltinLayer", "eachOtherLayer", "getLayers", "modLayer", "delLayer", "clearLayer", "pathToImage"], function(t) { MP.prototype[t] = function(t) { return function() { vi('In SVG mode painter not support method "' + t + '"') } }(t) }), Po("svg", MP), t.version = "4.8.0", t.dependencies = { zrender: "4.3.1" }, t.PRIORITY = Ld, t.init = function(t, e, i) { var n = mf(t); if (n) return n; var o = new Rd(t,e,i); return o.id = "ec_" + cf++, uf[o.id] = o, Jo(t, ff, o.id), function(n) { var o = "__connectUpdateStatus"; function a(t, e) { for (var i = 0; i < t.length; i++) { t[i][o] = e } } Td(ef, function(t, e) { n._messageCenter.on(e, function(t) { if (hf[n.group] && 0 !== n[o]) { if (t && t.escapeConnect) return; var e = n.makeActionFromEvent(t) , i = []; Td(uf, function(t) { t !== n && t.group === n.group && i.push(t) }), a(i, 0), Td(i, function(t) { 1 !== t[o] && t.dispatchAction(e) }), a(i, 2) } }) }) }(o), o } , t.connect = function(e) { if (L(e)) { var t = e; e = null, Td(t, function(t) { null != t.group && (e = t.group) }), e = e || "g_" + df++, Td(t, function(t) { t.group = e }) } return hf[e] = !0, e } , t.disConnect = pf, t.disconnect = gf, t.dispose = function(t) { "string" == typeof t ? t = uf[t] : t instanceof Rd || (t = mf(t)), t instanceof Rd && !t.isDisposed() && t.dispose() } , t.getInstanceByDom = mf, t.getInstanceById = function(t) { return uf[t] } , t.registerTheme = vf, t.registerPreprocessor = yf, t.registerProcessor = xf, t.registerPostUpdate = function(t) { af.push(t) } , t.registerAction = _f, t.registerCoordinateSystem = wf, t.getCoordinateSystemDimensions = function(t) { var e = lh.get(t); if (e) return e.getDimensionsInfo ? e.getDimensionsInfo() : e.dimensions.slice() } , t.registerLayout = bf, t.registerVisual = Sf, t.registerLoading = If, t.extendComponentModel = Tf, t.extendComponentView = Af, t.extendSeriesModel = Df, t.extendChartView = Cf, t.setCanvasCreator = function(t) { f("createCanvas", t) } , t.registerMap = function(t, e, i) { Sd.registerMap(t, e, i) } , t.getMap = function(t) { var e = Sd.retrieveMap(t); return e && e[0] && { geoJson: e[0].geoJSON, specialAreas: e[0].specialAreas } } , t.dataTool = {}, t.zrender = Oo, t.number = Ql, t.format = mu, t.throttle = Lc, t.helper = Sg, t.matrix = pe, t.vector = It, t.color = Je, t.parseGeoJSON = Cg, t.parseGeoJson = Wg, t.util = Hg, t.graphic = Zg, t.List = Yf, t.Model = Cl, t.Axis = Gg, t.env = v });