echarts-rails 0.1.5 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -59,10 +59,10 @@ return /******/ (function(modules) { // webpackBootstrap
59
59
  */
60
60
  module.exports = __webpack_require__(1);
61
61
 
62
- __webpack_require__(99);
63
- __webpack_require__(134);
64
- __webpack_require__(139);
65
- __webpack_require__(112);
62
+ __webpack_require__(100);
63
+ __webpack_require__(135);
64
+ __webpack_require__(140);
65
+ __webpack_require__(113);
66
66
 
67
67
  /***/ },
68
68
  /* 1 */
@@ -111,12 +111,13 @@ return /******/ (function(modules) { // webpackBootstrap
111
111
  var ChartView = __webpack_require__(42);
112
112
  var graphic = __webpack_require__(43);
113
113
  var modelUtil = __webpack_require__(5);
114
+ var throttle = __webpack_require__(81);
114
115
 
115
- var zrender = __webpack_require__(81);
116
+ var zrender = __webpack_require__(82);
116
117
  var zrUtil = __webpack_require__(4);
117
118
  var colorTool = __webpack_require__(39);
118
119
  var Eventful = __webpack_require__(33);
119
- var timsort = __webpack_require__(85);
120
+ var timsort = __webpack_require__(86);
120
121
 
121
122
  var each = zrUtil.each;
122
123
 
@@ -135,11 +136,9 @@ return /******/ (function(modules) { // webpackBootstrap
135
136
  // dispatchAction with updateMethod "none" in main process.
136
137
  // This flag is used to carry out this rule.
137
138
  // All events will be triggered out side main process (i.e. when !this[IN_MAIN_PROCESS]).
138
- var IN_MAIN_PROCESS = '__flag_in_main_process';
139
- var HAS_GRADIENT_OR_PATTERN_BG = '_hasGradientOrPatternBg';
140
-
141
-
142
- var OPTION_UPDATED = '_optionUpdated';
139
+ var IN_MAIN_PROCESS = '__flagInMainProcess';
140
+ var HAS_GRADIENT_OR_PATTERN_BG = '__hasGradientOrPatternBg';
141
+ var OPTION_UPDATED = '__optionUpdated';
143
142
 
144
143
  function createRegisterEventWithLowercaseName(method) {
145
144
  return function (eventName, handler, context) {
@@ -189,13 +188,20 @@ return /******/ (function(modules) { // webpackBootstrap
189
188
  * @type {module:zrender/ZRender}
190
189
  * @private
191
190
  */
192
- this._zr = zrender.init(dom, {
191
+ var zr = this._zr = zrender.init(dom, {
193
192
  renderer: opts.renderer || 'canvas',
194
193
  devicePixelRatio: opts.devicePixelRatio,
195
194
  width: opts.width,
196
195
  height: opts.height
197
196
  });
198
197
 
198
+ /**
199
+ * Expect 60 pfs.
200
+ * @type {Function}
201
+ * @private
202
+ */
203
+ this._throttledZrFlush = throttle.throttle(zrUtil.bind(zr.flush, zr), 17);
204
+
199
205
  /**
200
206
  * @type {Object}
201
207
  * @private
@@ -261,7 +267,7 @@ return /******/ (function(modules) { // webpackBootstrap
261
267
  timsort(visualFuncs, prioritySortFunc);
262
268
  timsort(dataProcessorFuncs, prioritySortFunc);
263
269
 
264
- this._zr.animation.on('frame', this._onframe, this);
270
+ zr.animation.on('frame', this._onframe, this);
265
271
  }
266
272
 
267
273
  var echartsProto = ECharts.prototype;
@@ -312,6 +318,13 @@ return /******/ (function(modules) { // webpackBootstrap
312
318
  ecModel.init(null, null, theme, optionManager);
313
319
  }
314
320
 
321
+ // FIXME
322
+ // ugly
323
+ this.__lastOnlyGraphic = !!(option && option.graphic);
324
+ zrUtil.each(option, function (o, mainType) {
325
+ mainType !== 'graphic' && (this.__lastOnlyGraphic = false);
326
+ }, this);
327
+
315
328
  this._model.setOption(option, optionPreprocessorFuncs);
316
329
 
317
330
  if (lazyUpdate) {
@@ -319,13 +332,15 @@ return /******/ (function(modules) { // webpackBootstrap
319
332
  }
320
333
  else {
321
334
  updateMethods.prepareAndUpdate.call(this);
322
- this._zr.refreshImmediately();
335
+ // Ensure zr refresh sychronously, and then pixel in canvas can be
336
+ // fetched after `setOption`.
337
+ this._zr.flush();
323
338
  this[OPTION_UPDATED] = false;
324
339
  }
325
340
 
326
341
  this[IN_MAIN_PROCESS] = false;
327
342
 
328
- this._flushPendingActions();
343
+ flushPendingActions.call(this, false);
329
344
  };
330
345
 
331
346
  /**
@@ -390,6 +405,7 @@ return /******/ (function(modules) { // webpackBootstrap
390
405
  * @param {string} [opts.type='png']
391
406
  * @param {string} [opts.pixelRatio=1]
392
407
  * @param {string} [opts.backgroundColor]
408
+ * @param {string} [opts.excludeComponents]
393
409
  */
394
410
  echartsProto.getDataURL = function (opts) {
395
411
  opts = opts || {};
@@ -821,7 +837,21 @@ return /******/ (function(modules) { // webpackBootstrap
821
837
 
822
838
  prepareView.call(this, 'chart', ecModel);
823
839
 
824
- updateMethods.update.call(this, payload);
840
+ // FIXME
841
+ // ugly
842
+ if (this.__lastOnlyGraphic) {
843
+ each(this._componentsViews, function (componentView) {
844
+ var componentModel = componentView.__model;
845
+ if (componentModel && componentModel.mainType === 'graphic') {
846
+ componentView.render(componentModel, ecModel, this._api, payload);
847
+ updateZ(componentModel, componentView);
848
+ }
849
+ }, this);
850
+ this.__lastOnlyGraphic = false;
851
+ }
852
+ else {
853
+ updateMethods.update.call(this, payload);
854
+ }
825
855
  }
826
856
  };
827
857
 
@@ -874,7 +904,7 @@ return /******/ (function(modules) { // webpackBootstrap
874
904
 
875
905
  this[IN_MAIN_PROCESS] = false;
876
906
 
877
- this._flushPendingActions();
907
+ flushPendingActions.call(this);
878
908
  };
879
909
 
880
910
  /**
@@ -925,16 +955,22 @@ return /******/ (function(modules) { // webpackBootstrap
925
955
  * @pubilc
926
956
  * @param {Object} payload
927
957
  * @param {string} [payload.type] Action type
928
- * @param {boolean} [silent=false] Whether trigger event.
958
+ * @param {Object|boolean} [opt] If pass boolean, means opt.silent
959
+ * @param {boolean} [opt.silent=false] Whether trigger events.
960
+ * @param {boolean} [opt.flush=undefined]
961
+ * true: Flush immediately, and then pixel in canvas can be fetched
962
+ * immediately. Caution: it might affect performance.
963
+ * false: Not not flush.
964
+ * undefined: Auto decide whether perform flush.
929
965
  */
930
- echartsProto.dispatchAction = function (payload, silent) {
931
- var actionWrap = actions[payload.type];
932
- if (!actionWrap) {
933
- return;
966
+ echartsProto.dispatchAction = function (payload, opt) {
967
+ if (!zrUtil.isObject(opt)) {
968
+ opt = {silent: !!opt};
934
969
  }
935
970
 
936
- var actionInfo = actionWrap.actionInfo;
937
- var updateMethod = actionInfo.update || 'update';
971
+ if (!actions[payload.type]) {
972
+ return;
973
+ }
938
974
 
939
975
  // if (__DEV__) {
940
976
  // zrUtil.assert(
@@ -950,6 +986,28 @@ return /******/ (function(modules) { // webpackBootstrap
950
986
  return;
951
987
  }
952
988
 
989
+ doDispatchAction.call(this, payload, opt.silent);
990
+
991
+ if (opt.flush) {
992
+ this._zr.flush(true);
993
+ }
994
+ else if (opt.flush !== false && env.browser.weChat) {
995
+ // In WeChat embeded browser, `requestAnimationFrame` and `setInterval`
996
+ // hang when sliding page (on touch event), which cause that zr does not
997
+ // refresh util user interaction finished, which is not expected.
998
+ // But `dispatchAction` may be called too frequently when pan on touch
999
+ // screen, which impacts performance if do not throttle them.
1000
+ this._throttledZrFlush();
1001
+ }
1002
+
1003
+ flushPendingActions.call(this, opt.silent);
1004
+ };
1005
+
1006
+ function doDispatchAction(payload, silent) {
1007
+ var actionWrap = actions[payload.type];
1008
+ var actionInfo = actionWrap.actionInfo;
1009
+ var updateMethod = actionInfo.update || 'update';
1010
+
953
1011
  this[IN_MAIN_PROCESS] = true;
954
1012
 
955
1013
  var payloads = [payload];
@@ -1007,18 +1065,15 @@ return /******/ (function(modules) { // webpackBootstrap
1007
1065
  this[IN_MAIN_PROCESS] = false;
1008
1066
 
1009
1067
  !silent && this._messageCenter.trigger(eventObj.type, eventObj);
1068
+ }
1010
1069
 
1011
- this._flushPendingActions();
1012
-
1013
- };
1014
-
1015
- echartsProto._flushPendingActions = function () {
1070
+ function flushPendingActions(silent) {
1016
1071
  var pendingActions = this._pendingActions;
1017
1072
  while (pendingActions.length) {
1018
1073
  var payload = pendingActions.shift();
1019
- this.dispatchAction(payload);
1074
+ doDispatchAction.call(this, payload, silent);
1020
1075
  }
1021
- };
1076
+ }
1022
1077
 
1023
1078
  /**
1024
1079
  * Register event
@@ -1442,9 +1497,9 @@ return /******/ (function(modules) { // webpackBootstrap
1442
1497
  /**
1443
1498
  * @type {number}
1444
1499
  */
1445
- version: '3.3.0',
1500
+ version: '3.3.2',
1446
1501
  dependencies: {
1447
- zrender: '3.2.0'
1502
+ zrender: '3.2.2'
1448
1503
  }
1449
1504
  };
1450
1505
 
@@ -1757,7 +1812,7 @@ return /******/ (function(modules) { // webpackBootstrap
1757
1812
  if (superClass) {
1758
1813
  superClass = 'series.' + superClass.replace('series.', '');
1759
1814
  var classType = parseClassType(superClass);
1760
- Clazz = SeriesModel.getClass(classType.main, classType.sub, true);
1815
+ Clazz = ComponentModel.getClass(classType.main, classType.sub, true);
1761
1816
  }
1762
1817
  return Clazz.extend(opts);
1763
1818
  };
@@ -1796,9 +1851,9 @@ return /******/ (function(modules) { // webpackBootstrap
1796
1851
  zrUtil.createCanvas = creator;
1797
1852
  };
1798
1853
 
1799
- echarts.registerVisual(PRIORITY_VISUAL_GLOBAL, __webpack_require__(93));
1800
- echarts.registerPreprocessor(__webpack_require__(94));
1801
- echarts.registerLoading('default', __webpack_require__(96));
1854
+ echarts.registerVisual(PRIORITY_VISUAL_GLOBAL, __webpack_require__(94));
1855
+ echarts.registerPreprocessor(__webpack_require__(95));
1856
+ echarts.registerLoading('default', __webpack_require__(97));
1802
1857
 
1803
1858
  // Default action
1804
1859
  echarts.registerAction({
@@ -1817,7 +1872,7 @@ return /******/ (function(modules) { // webpackBootstrap
1817
1872
  // Exports
1818
1873
  // --------
1819
1874
  //
1820
- echarts.List = __webpack_require__(97);
1875
+ echarts.List = __webpack_require__(98);
1821
1876
  echarts.Model = __webpack_require__(12);
1822
1877
 
1823
1878
  echarts.graphic = __webpack_require__(43);
@@ -1829,9 +1884,9 @@ return /******/ (function(modules) { // webpackBootstrap
1829
1884
 
1830
1885
  echarts.util = {};
1831
1886
  each([
1832
- 'map', 'each', 'filter', 'indexOf', 'inherits',
1833
- 'reduce', 'filter', 'bind', 'curry', 'isArray',
1834
- 'isString', 'isObject', 'isFunction', 'extend', 'defaults'
1887
+ 'map', 'each', 'filter', 'indexOf', 'inherits', 'reduce', 'filter',
1888
+ 'bind', 'curry', 'isArray', 'isString', 'isObject', 'isFunction',
1889
+ 'extend', 'defaults', 'clone'
1835
1890
  ],
1836
1891
  function (name) {
1837
1892
  echarts.util[name] = zrUtil[name];
@@ -1914,6 +1969,8 @@ return /******/ (function(modules) { // webpackBootstrap
1914
1969
  || ua.match(/Trident\/.+?rv:(([\d.]+))/);
1915
1970
  var edge = ua.match(/Edge\/([\d.]+)/); // IE 12 and 12+
1916
1971
 
1972
+ var weChat = (/micromessenger/i).test(ua);
1973
+
1917
1974
  // Todo: clean this up with a better OS/browser seperation:
1918
1975
  // - discern (more) between multiple browsers on android
1919
1976
  // - decide if kindle fire in silk mode is android or not
@@ -1936,20 +1993,29 @@ return /******/ (function(modules) { // webpackBootstrap
1936
1993
  // if (silk) browser.silk = true, browser.version = silk[1];
1937
1994
  // if (!silk && os.android && ua.match(/Kindle Fire/)) browser.silk = true;
1938
1995
  // if (chrome) browser.chrome = true, browser.version = chrome[1];
1939
- if (firefox) browser.firefox = true, browser.version = firefox[1];
1996
+ if (firefox) {
1997
+ browser.firefox = true;
1998
+ browser.version = firefox[1];
1999
+ }
1940
2000
  // if (safari && (ua.match(/Safari/) || !!os.ios)) browser.safari = true;
1941
2001
  // if (webview) browser.webview = true;
1942
-
2002
+
1943
2003
  if (ie) {
1944
2004
  browser.ie = true;
1945
2005
  browser.version = ie[1];
1946
2006
  }
1947
-
2007
+
1948
2008
  if (edge) {
1949
2009
  browser.edge = true;
1950
2010
  browser.version = edge[1];
1951
2011
  }
1952
2012
 
2013
+ // It is difficult to detect WeChat in Win Phone precisely, because ua can
2014
+ // not be set on win phone. So we do not consider Win Phone.
2015
+ if (weChat) {
2016
+ browser.weChat = true;
2017
+ }
2018
+
1953
2019
  // os.tablet = !!(ipad || playbook || (android && !ua.match(/Mobile/)) ||
1954
2020
  // (firefox && ua.match(/Tablet/)) || (ie && !ua.match(/Phone/) && ua.match(/Touch/)));
1955
2021
  // os.phone = !!(!os.tablet && !os.ipod && (android || iphone || webos ||
@@ -2140,7 +2206,16 @@ return /******/ (function(modules) { // webpackBootstrap
2140
2206
  componentsMap[mainType], newCptOptionList
2141
2207
  );
2142
2208
 
2143
- makeKeyInfo(mainType, mapResult);
2209
+ modelUtil.makeIdAndName(mapResult);
2210
+
2211
+ // Set mainType and complete subType.
2212
+ each(mapResult, function (item, index) {
2213
+ var opt = item.option;
2214
+ if (isObject(opt)) {
2215
+ item.keyInfo.mainType = mainType;
2216
+ item.keyInfo.subType = determineSubType(mainType, opt, item.exist);
2217
+ }
2218
+ });
2144
2219
 
2145
2220
  var dependentModels = getComponentsByTypes(
2146
2221
  componentsMap, dependencies
@@ -2624,89 +2699,6 @@ return /******/ (function(modules) { // webpackBootstrap
2624
2699
  return ret;
2625
2700
  }
2626
2701
 
2627
- /**
2628
- * @inner
2629
- */
2630
- function makeKeyInfo(mainType, mapResult) {
2631
- // We use this id to hash component models and view instances
2632
- // in echarts. id can be specified by user, or auto generated.
2633
-
2634
- // The id generation rule ensures new view instance are able
2635
- // to mapped to old instance when setOption are called in
2636
- // no-merge mode. So we generate model id by name and plus
2637
- // type in view id.
2638
-
2639
- // name can be duplicated among components, which is convenient
2640
- // to specify multi components (like series) by one name.
2641
-
2642
- // Ensure that each id is distinct.
2643
- var idMap = {};
2644
-
2645
- each(mapResult, function (item, index) {
2646
- var existCpt = item.exist;
2647
- existCpt && (idMap[existCpt.id] = item);
2648
- });
2649
-
2650
- each(mapResult, function (item, index) {
2651
- var opt = item.option;
2652
-
2653
- zrUtil.assert(
2654
- !opt || opt.id == null || !idMap[opt.id] || idMap[opt.id] === item,
2655
- 'id duplicates: ' + (opt && opt.id)
2656
- );
2657
-
2658
- opt && opt.id != null && (idMap[opt.id] = item);
2659
-
2660
- // Complete subType
2661
- if (isObject(opt)) {
2662
- var subType = determineSubType(mainType, opt, item.exist);
2663
- item.keyInfo = {mainType: mainType, subType: subType};
2664
- }
2665
- });
2666
-
2667
- // Make name and id.
2668
- each(mapResult, function (item, index) {
2669
- var existCpt = item.exist;
2670
- var opt = item.option;
2671
- var keyInfo = item.keyInfo;
2672
-
2673
- if (!isObject(opt)) {
2674
- return;
2675
- }
2676
-
2677
- // name can be overwitten. Consider case: axis.name = '20km'.
2678
- // But id generated by name will not be changed, which affect
2679
- // only in that case: setOption with 'not merge mode' and view
2680
- // instance will be recreated, which can be accepted.
2681
- keyInfo.name = opt.name != null
2682
- ? opt.name + ''
2683
- : existCpt
2684
- ? existCpt.name
2685
- : '\0-';
2686
-
2687
- if (existCpt) {
2688
- keyInfo.id = existCpt.id;
2689
- }
2690
- else if (opt.id != null) {
2691
- keyInfo.id = opt.id + '';
2692
- }
2693
- else {
2694
- // Consider this situatoin:
2695
- // optionA: [{name: 'a'}, {name: 'a'}, {..}]
2696
- // optionB [{..}, {name: 'a'}, {name: 'a'}]
2697
- // Series with the same name between optionA and optionB
2698
- // should be mapped.
2699
- var idNum = 0;
2700
- do {
2701
- keyInfo.id = '\0' + keyInfo.name + '\0' + idNum++;
2702
- }
2703
- while (idMap[keyInfo.id]);
2704
- }
2705
-
2706
- idMap[keyInfo.id] = item;
2707
- });
2708
- }
2709
-
2710
2702
  /**
2711
2703
  * @inner
2712
2704
  */
@@ -2779,8 +2771,21 @@ return /******/ (function(modules) { // webpackBootstrap
2779
2771
  '[object Error]': 1,
2780
2772
  '[object CanvasGradient]': 1,
2781
2773
  '[object CanvasPattern]': 1,
2782
- // In node-canvas Image can be Canvas.Image
2783
- '[object Image]': 1
2774
+ // For node-canvas
2775
+ '[object Image]': 1,
2776
+ '[object Canvas]': 1
2777
+ };
2778
+
2779
+ var TYPED_ARRAY = {
2780
+ '[object Int8Array]': 1,
2781
+ '[object Uint8Array]': 1,
2782
+ '[object Uint8ClampedArray]': 1,
2783
+ '[object Int16Array]': 1,
2784
+ '[object Uint16Array]': 1,
2785
+ '[object Int32Array]': 1,
2786
+ '[object Uint32Array]': 1,
2787
+ '[object Float32Array]': 1,
2788
+ '[object Float64Array]': 1
2784
2789
  };
2785
2790
 
2786
2791
  var objToString = Object.prototype.toString;
@@ -2793,35 +2798,48 @@ return /******/ (function(modules) { // webpackBootstrap
2793
2798
  var nativeReduce = arrayProto.reduce;
2794
2799
 
2795
2800
  /**
2801
+ * Those data types can be cloned:
2802
+ * Plain object, Array, TypedArray, number, string, null, undefined.
2803
+ * Those data types will be assgined using the orginal data:
2804
+ * BUILTIN_OBJECT
2805
+ * Instance of user defined class will be cloned to a plain object, without
2806
+ * properties in prototype.
2807
+ * Other data types is not supported (not sure what will happen).
2808
+ *
2809
+ * Caution: do not support clone Date, for performance consideration.
2810
+ * (There might be a large number of date in `series.data`).
2811
+ * So date should not be modified in and out of echarts.
2812
+ *
2796
2813
  * @param {*} source
2797
- * @return {*} 拷贝后的新对象
2814
+ * @return {*} new
2798
2815
  */
2799
2816
  function clone(source) {
2800
- if (typeof source == 'object' && source !== null) {
2801
- var result = source;
2802
- if (source instanceof Array) {
2803
- result = [];
2804
- for (var i = 0, len = source.length; i < len; i++) {
2805
- result[i] = clone(source[i]);
2806
- }
2807
- }
2808
- else if (
2809
- !isBuildInObject(source)
2810
- // 是否为 dom 对象
2811
- && !isDom(source)
2812
- ) {
2813
- result = {};
2814
- for (var key in source) {
2815
- if (source.hasOwnProperty(key)) {
2816
- result[key] = clone(source[key]);
2817
- }
2817
+ if (source == null || typeof source != 'object') {
2818
+ return source;
2819
+ }
2820
+
2821
+ var result = source;
2822
+ var typeStr = objToString.call(source);
2823
+
2824
+ if (typeStr === '[object Array]') {
2825
+ result = [];
2826
+ for (var i = 0, len = source.length; i < len; i++) {
2827
+ result[i] = clone(source[i]);
2828
+ }
2829
+ }
2830
+ else if (TYPED_ARRAY[typeStr]) {
2831
+ result = source.constructor.from(source);
2832
+ }
2833
+ else if (!BUILTIN_OBJECT[typeStr] && !isDom(source)) {
2834
+ result = {};
2835
+ for (var key in source) {
2836
+ if (source.hasOwnProperty(key)) {
2837
+ result[key] = clone(source[key]);
2818
2838
  }
2819
2839
  }
2820
-
2821
- return result;
2822
2840
  }
2823
2841
 
2824
- return source;
2842
+ return result;
2825
2843
  }
2826
2844
 
2827
2845
  /**
@@ -3186,8 +3204,9 @@ return /******/ (function(modules) { // webpackBootstrap
3186
3204
  * @return {boolean}
3187
3205
  */
3188
3206
  function isDom(value) {
3189
- return value && value.nodeType === 1
3190
- && typeof(value.nodeName) == 'string';
3207
+ return typeof value === 'object'
3208
+ && typeof value.nodeType === 'number'
3209
+ && typeof value.ownerDocument === 'object';
3191
3210
  }
3192
3211
 
3193
3212
  /**
@@ -3269,6 +3288,8 @@ return /******/ (function(modules) { // webpackBootstrap
3269
3288
  var nubmerUtil = __webpack_require__(7);
3270
3289
  var Model = __webpack_require__(12);
3271
3290
  var zrUtil = __webpack_require__(4);
3291
+ var each = zrUtil.each;
3292
+ var isObject = zrUtil.isObject;
3272
3293
 
3273
3294
  var modelUtil = {};
3274
3295
 
@@ -3309,7 +3330,7 @@ return /******/ (function(modules) { // webpackBootstrap
3309
3330
  var normalOpt = opt.normal = opt.normal || {};
3310
3331
 
3311
3332
  // Default emphasis option from normal
3312
- zrUtil.each(subOpts, function (subOptName) {
3333
+ each(subOpts, function (subOptName) {
3313
3334
  var val = zrUtil.retrieve(emphasisOpt[subOptName], normalOpt[subOptName]);
3314
3335
  if (val != null) {
3315
3336
  emphasisOpt[subOptName] = val;
@@ -3337,10 +3358,10 @@ return /******/ (function(modules) { // webpackBootstrap
3337
3358
  * @param {string|number|Date|Array|Object} dataItem
3338
3359
  */
3339
3360
  modelUtil.isDataItemOption = function (dataItem) {
3340
- return zrUtil.isObject(dataItem)
3361
+ return isObject(dataItem)
3341
3362
  && !(dataItem instanceof Array);
3342
3363
  // // markLine data can be array
3343
- // && !(dataItem[0] && zrUtil.isObject(dataItem[0]) && !(dataItem[0] instanceof Array));
3364
+ // && !(dataItem[0] && isObject(dataItem[0]) && !(dataItem[0] instanceof Array));
3344
3365
  };
3345
3366
 
3346
3367
  /**
@@ -3465,7 +3486,7 @@ return /******/ (function(modules) { // webpackBootstrap
3465
3486
  var data = this.getData(dataType);
3466
3487
  var dataItem = data.getRawDataItem(idx);
3467
3488
  if (dataItem != null) {
3468
- return (zrUtil.isObject(dataItem) && !(dataItem instanceof Array))
3489
+ return (isObject(dataItem) && !(dataItem instanceof Array))
3469
3490
  ? dataItem.value : dataItem;
3470
3491
  }
3471
3492
  },
@@ -3487,7 +3508,7 @@ return /******/ (function(modules) { // webpackBootstrap
3487
3508
  * @param {Array.<Object>|Array.<module:echarts/model/Component>} exists
3488
3509
  * @param {Object|Array.<Object>} newCptOptions
3489
3510
  * @return {Array.<Object>} Result, like [{exist: ..., option: ...}, {}],
3490
- * which order is the same as exists.
3511
+ * index of which is the same as exists.
3491
3512
  */
3492
3513
  modelUtil.mappingToExists = function (exists, newCptOptions) {
3493
3514
  // Mapping by the order by original option (but not order of
@@ -3503,8 +3524,8 @@ return /******/ (function(modules) { // webpackBootstrap
3503
3524
  });
3504
3525
 
3505
3526
  // Mapping by id or name if specified.
3506
- zrUtil.each(newCptOptions, function (cptOption, index) {
3507
- if (!zrUtil.isObject(cptOption)) {
3527
+ each(newCptOptions, function (cptOption, index) {
3528
+ if (!isObject(cptOption)) {
3508
3529
  return;
3509
3530
  }
3510
3531
 
@@ -3538,8 +3559,8 @@ return /******/ (function(modules) { // webpackBootstrap
3538
3559
  });
3539
3560
 
3540
3561
  // Otherwise mapping by index.
3541
- zrUtil.each(newCptOptions, function (cptOption, index) {
3542
- if (!zrUtil.isObject(cptOption)) {
3562
+ each(newCptOptions, function (cptOption, index) {
3563
+ if (!isObject(cptOption)) {
3543
3564
  return;
3544
3565
  }
3545
3566
 
@@ -3547,6 +3568,10 @@ return /******/ (function(modules) { // webpackBootstrap
3547
3568
  for (; i < result.length; i++) {
3548
3569
  var exist = result[i].exist;
3549
3570
  if (!result[i].option
3571
+ // Existing model that already has id should be able to
3572
+ // mapped to (because after mapping performed model may
3573
+ // be assigned with a id, whish should not affect next
3574
+ // mapping), except those has inner id.
3550
3575
  && !modelUtil.isIdInner(exist)
3551
3576
  // Caution:
3552
3577
  // Do not overwrite id. But name can be overwritten,
@@ -3568,13 +3593,97 @@ return /******/ (function(modules) { // webpackBootstrap
3568
3593
  return result;
3569
3594
  };
3570
3595
 
3596
+ /**
3597
+ * Make id and name for mapping result (result of mappingToExists)
3598
+ * into `keyInfo` field.
3599
+ *
3600
+ * @public
3601
+ * @param {Array.<Object>} Result, like [{exist: ..., option: ...}, {}],
3602
+ * which order is the same as exists.
3603
+ * @return {Array.<Object>} The input.
3604
+ */
3605
+ modelUtil.makeIdAndName = function (mapResult) {
3606
+ // We use this id to hash component models and view instances
3607
+ // in echarts. id can be specified by user, or auto generated.
3608
+
3609
+ // The id generation rule ensures new view instance are able
3610
+ // to mapped to old instance when setOption are called in
3611
+ // no-merge mode. So we generate model id by name and plus
3612
+ // type in view id.
3613
+
3614
+ // name can be duplicated among components, which is convenient
3615
+ // to specify multi components (like series) by one name.
3616
+
3617
+ // Ensure that each id is distinct.
3618
+ var idMap = {};
3619
+
3620
+ each(mapResult, function (item, index) {
3621
+ var existCpt = item.exist;
3622
+ existCpt && (idMap[existCpt.id] = item);
3623
+ });
3624
+
3625
+ each(mapResult, function (item, index) {
3626
+ var opt = item.option;
3627
+
3628
+ zrUtil.assert(
3629
+ !opt || opt.id == null || !idMap[opt.id] || idMap[opt.id] === item,
3630
+ 'id duplicates: ' + (opt && opt.id)
3631
+ );
3632
+
3633
+ opt && opt.id != null && (idMap[opt.id] = item);
3634
+ !item.keyInfo && (item.keyInfo = {});
3635
+ });
3636
+
3637
+ // Make name and id.
3638
+ each(mapResult, function (item, index) {
3639
+ var existCpt = item.exist;
3640
+ var opt = item.option;
3641
+ var keyInfo = item.keyInfo;
3642
+
3643
+ if (!isObject(opt)) {
3644
+ return;
3645
+ }
3646
+
3647
+ // name can be overwitten. Consider case: axis.name = '20km'.
3648
+ // But id generated by name will not be changed, which affect
3649
+ // only in that case: setOption with 'not merge mode' and view
3650
+ // instance will be recreated, which can be accepted.
3651
+ keyInfo.name = opt.name != null
3652
+ ? opt.name + ''
3653
+ : existCpt
3654
+ ? existCpt.name
3655
+ : '\0-';
3656
+
3657
+ if (existCpt) {
3658
+ keyInfo.id = existCpt.id;
3659
+ }
3660
+ else if (opt.id != null) {
3661
+ keyInfo.id = opt.id + '';
3662
+ }
3663
+ else {
3664
+ // Consider this situatoin:
3665
+ // optionA: [{name: 'a'}, {name: 'a'}, {..}]
3666
+ // optionB [{..}, {name: 'a'}, {name: 'a'}]
3667
+ // Series with the same name between optionA and optionB
3668
+ // should be mapped.
3669
+ var idNum = 0;
3670
+ do {
3671
+ keyInfo.id = '\0' + keyInfo.name + '\0' + idNum++;
3672
+ }
3673
+ while (idMap[keyInfo.id]);
3674
+ }
3675
+
3676
+ idMap[keyInfo.id] = item;
3677
+ });
3678
+ };
3679
+
3571
3680
  /**
3572
3681
  * @public
3573
3682
  * @param {Object} cptOption
3574
3683
  * @return {boolean}
3575
3684
  */
3576
3685
  modelUtil.isIdInner = function (cptOption) {
3577
- return zrUtil.isObject(cptOption)
3686
+ return isObject(cptOption)
3578
3687
  && cptOption.id
3579
3688
  && (cptOption.id + '').indexOf('\0_ec_\0') === 0;
3580
3689
  };
@@ -3708,7 +3817,7 @@ return /******/ (function(modules) { // webpackBootstrap
3708
3817
 
3709
3818
  var result = {};
3710
3819
 
3711
- zrUtil.each(finder, function (value, key) {
3820
+ each(finder, function (value, key) {
3712
3821
  var value = finder[key];
3713
3822
 
3714
3823
  // Exclude 'dataIndex' and other illgal keys.
@@ -3768,12 +3877,19 @@ return /******/ (function(modules) { // webpackBootstrap
3768
3877
 
3769
3878
  /**
3770
3879
  * @param {string} str
3880
+ * @param {boolean} [upperCaseFirst=false]
3771
3881
  * @return {string} str
3772
3882
  */
3773
- formatUtil.toCamelCase = function (str) {
3774
- return str.toLowerCase().replace(/-(.)/g, function(match, group1) {
3883
+ formatUtil.toCamelCase = function (str, upperCaseFirst) {
3884
+ str = (str || '').toLowerCase().replace(/-(.)/g, function(match, group1) {
3775
3885
  return group1.toUpperCase();
3776
3886
  });
3887
+
3888
+ if (upperCaseFirst && str) {
3889
+ str = str.charAt(0).toUpperCase() + str.slice(1);
3890
+ }
3891
+
3892
+ return str;
3777
3893
  };
3778
3894
 
3779
3895
  /**
@@ -4166,6 +4282,70 @@ return /******/ (function(modules) { // webpackBootstrap
4166
4282
  return nf * exp10;
4167
4283
  };
4168
4284
 
4285
+ /**
4286
+ * Order intervals asc, and split them when overlap.
4287
+ * expect(numberUtil.reformIntervals([
4288
+ * {interval: [18, 62], close: [1, 1]},
4289
+ * {interval: [-Infinity, -70], close: [0, 0]},
4290
+ * {interval: [-70, -26], close: [1, 1]},
4291
+ * {interval: [-26, 18], close: [1, 1]},
4292
+ * {interval: [62, 150], close: [1, 1]},
4293
+ * {interval: [106, 150], close: [1, 1]},
4294
+ * {interval: [150, Infinity], close: [0, 0]}
4295
+ * ])).toEqual([
4296
+ * {interval: [-Infinity, -70], close: [0, 0]},
4297
+ * {interval: [-70, -26], close: [1, 1]},
4298
+ * {interval: [-26, 18], close: [0, 1]},
4299
+ * {interval: [18, 62], close: [0, 1]},
4300
+ * {interval: [62, 150], close: [0, 1]},
4301
+ * {interval: [150, Infinity], close: [0, 0]}
4302
+ * ]);
4303
+ * @param {Array.<Object>} list, where `close` mean open or close
4304
+ * of the interval, and Infinity can be used.
4305
+ * @return {Array.<Object>} The origin list, which has been reformed.
4306
+ */
4307
+ number.reformIntervals = function (list) {
4308
+ list.sort(function (a, b) {
4309
+ return littleThan(a, b, 0) ? -1 : 1;
4310
+ });
4311
+
4312
+ var curr = -Infinity;
4313
+ var currClose = 1;
4314
+ for (var i = 0; i < list.length;) {
4315
+ var interval = list[i].interval;
4316
+ var close = list[i].close;
4317
+
4318
+ for (var lg = 0; lg < 2; lg++) {
4319
+ if (interval[lg] <= curr) {
4320
+ interval[lg] = curr;
4321
+ close[lg] = !lg ? 1 - currClose : 1;
4322
+ }
4323
+ curr = interval[lg];
4324
+ currClose = close[lg];
4325
+ }
4326
+
4327
+ if (interval[0] === interval[1] && close[0] * close[1] !== 1) {
4328
+ list.splice(i, 1);
4329
+ }
4330
+ else {
4331
+ i++;
4332
+ }
4333
+ }
4334
+
4335
+ return list;
4336
+
4337
+ function littleThan(a, b, lg) {
4338
+ return a.interval[lg] < b.interval[lg]
4339
+ || (
4340
+ a.interval[lg] === b.interval[lg]
4341
+ && (
4342
+ (a.close[lg] - b.close[lg] === (!lg ? 1 : -1))
4343
+ || (!lg && littleThan(a, b, 1))
4344
+ )
4345
+ );
4346
+ }
4347
+ };
4348
+
4169
4349
  module.exports = number;
4170
4350
 
4171
4351
 
@@ -4465,7 +4645,6 @@ return /******/ (function(modules) { // webpackBootstrap
4465
4645
 
4466
4646
  var v2ApplyTransform = vec2.applyTransform;
4467
4647
  var mathMin = Math.min;
4468
- var mathAbs = Math.abs;
4469
4648
  var mathMax = Math.max;
4470
4649
  /**
4471
4650
  * @alias module:echarts/core/BoundingRect
@@ -4527,8 +4706,10 @@ return /******/ (function(modules) { // webpackBootstrap
4527
4706
  * @methods
4528
4707
  */
4529
4708
  applyTransform: (function () {
4530
- var min = [];
4531
- var max = [];
4709
+ var lt = [];
4710
+ var rb = [];
4711
+ var lb = [];
4712
+ var rt = [];
4532
4713
  return function (m) {
4533
4714
  // In case usage like this
4534
4715
  // el.getBoundingRect().applyTransform(el.transform)
@@ -4536,18 +4717,22 @@ return /******/ (function(modules) { // webpackBootstrap
4536
4717
  if (!m) {
4537
4718
  return;
4538
4719
  }
4539
- min[0] = this.x;
4540
- min[1] = this.y;
4541
- max[0] = this.x + this.width;
4542
- max[1] = this.y + this.height;
4543
-
4544
- v2ApplyTransform(min, min, m);
4545
- v2ApplyTransform(max, max, m);
4546
-
4547
- this.x = mathMin(min[0], max[0]);
4548
- this.y = mathMin(min[1], max[1]);
4549
- this.width = mathAbs(max[0] - min[0]);
4550
- this.height = mathAbs(max[1] - min[1]);
4720
+ lt[0] = lb[0] = this.x;
4721
+ lt[1] = rt[1] = this.y;
4722
+ rb[0] = rt[0] = this.x + this.width;
4723
+ rb[1] = lb[1] = this.y + this.height;
4724
+
4725
+ v2ApplyTransform(lt, lt, m);
4726
+ v2ApplyTransform(rb, rb, m);
4727
+ v2ApplyTransform(lb, lb, m);
4728
+ v2ApplyTransform(rt, rt, m);
4729
+
4730
+ this.x = mathMin(lt[0], rb[0], lb[0], rt[0]);
4731
+ this.y = mathMin(lt[1], rb[1], lb[1], rt[1]);
4732
+ var maxX = mathMax(lt[0], rb[0], lb[0], rt[0]);
4733
+ var maxY = mathMax(lt[1], rb[1], lb[1], rt[1]);
4734
+ this.width = maxX - this.x;
4735
+ this.height = maxY - this.y;
4551
4736
  };
4552
4737
  })(),
4553
4738
 
@@ -4576,6 +4761,10 @@ return /******/ (function(modules) { // webpackBootstrap
4576
4761
  * @return {boolean}
4577
4762
  */
4578
4763
  intersect: function (b) {
4764
+ if (!b) {
4765
+ return false;
4766
+ }
4767
+
4579
4768
  if (!(b instanceof BoundingRect)) {
4580
4769
  // Normalize negative width/height.
4581
4770
  b = BoundingRect.create(b);
@@ -5615,12 +5804,11 @@ return /******/ (function(modules) { // webpackBootstrap
5615
5804
  },
5616
5805
 
5617
5806
  getTextRect: function (text) {
5618
- var textStyle = this.get('textStyle') || {};
5619
5807
  return textContain.getBoundingRect(
5620
5808
  text,
5621
5809
  this.getFont(),
5622
- textStyle.align,
5623
- textStyle.baseline
5810
+ this.getShallow('align'),
5811
+ this.getShallow('baseline')
5624
5812
  );
5625
5813
  },
5626
5814
 
@@ -6064,7 +6252,9 @@ return /******/ (function(modules) { // webpackBootstrap
6064
6252
 
6065
6253
  var layout = {};
6066
6254
 
6067
- var LOCATION_PARAMS = ['left', 'right', 'top', 'bottom', 'width', 'height'];
6255
+ var LOCATION_PARAMS = layout.LOCATION_PARAMS = [
6256
+ 'left', 'right', 'top', 'bottom', 'width', 'height'
6257
+ ];
6068
6258
 
6069
6259
  function boxLayout(orient, group, gap, maxWidth, maxHeight) {
6070
6260
  var x = 0;
@@ -6299,13 +6489,23 @@ return /******/ (function(modules) { // webpackBootstrap
6299
6489
  return rect;
6300
6490
  };
6301
6491
 
6492
+
6302
6493
  /**
6303
- * Position group of component in viewport
6494
+ * Position a zr element in viewport
6304
6495
  * Group position is specified by either
6305
6496
  * {left, top}, {right, bottom}
6306
6497
  * If all properties exists, right and bottom will be igonred.
6307
6498
  *
6308
- * @param {module:zrender/container/Group} group
6499
+ * Logic:
6500
+ * 1. Scale (against origin point in parent coord)
6501
+ * 2. Rotate (against origin point in parent coord)
6502
+ * 3. Traslate (with el.position by this method)
6503
+ * So this method only fixes the last step 'Traslate', which does not affect
6504
+ * scaling and rotating.
6505
+ *
6506
+ * If be called repeatly with the same input el, the same result will be gotten.
6507
+ *
6508
+ * @param {module:zrender/Element} el Should have `getBoundingRect` method.
6309
6509
  * @param {Object} positionInfo
6310
6510
  * @param {number|string} [positionInfo.left]
6311
6511
  * @param {number|string} [positionInfo.top]
@@ -6313,25 +6513,62 @@ return /******/ (function(modules) { // webpackBootstrap
6313
6513
  * @param {number|string} [positionInfo.bottom]
6314
6514
  * @param {Object} containerRect
6315
6515
  * @param {string|number} margin
6316
- */
6317
- layout.positionGroup = function (
6318
- group, positionInfo, containerRect, margin
6319
- ) {
6320
- var groupRect = group.getBoundingRect();
6516
+ * @param {Object} [opt]
6517
+ * @param {Array.<number>} [opt.hv=[1,1]] Only horizontal or only vertical.
6518
+ * @param {Array.<number>} [opt.boundingMode='all']
6519
+ * Specify how to calculate boundingRect when locating.
6520
+ * 'all': Position the boundingRect that is transformed and uioned
6521
+ * both itself and its descendants.
6522
+ * This mode simplies confine the elements in the bounding
6523
+ * of their container (e.g., using 'right: 0').
6524
+ * 'raw': Position the boundingRect that is not transformed and only itself.
6525
+ * This mode is useful when you want a element can overflow its
6526
+ * container. (Consider a rotated circle needs to be located in a corner.)
6527
+ * In this mode positionInfo.width/height can only be number.
6528
+ */
6529
+ layout.positionElement = function (el, positionInfo, containerRect, margin, opt) {
6530
+ var h = !opt || !opt.hv || opt.hv[0];
6531
+ var v = !opt || !opt.hv || opt.hv[1];
6532
+ var boundingMode = opt && opt.boundingMode || 'all';
6533
+
6534
+ if (!h && !v) {
6535
+ return;
6536
+ }
6321
6537
 
6322
- positionInfo = zrUtil.extend(zrUtil.clone(positionInfo), {
6323
- width: groupRect.width,
6324
- height: groupRect.height
6325
- });
6538
+ var rect;
6539
+ if (boundingMode === 'raw') {
6540
+ rect = el.type === 'group'
6541
+ ? new BoundingRect(0, 0, +positionInfo.width || 0, +positionInfo.height || 0)
6542
+ : el.getBoundingRect();
6543
+ }
6544
+ else {
6545
+ rect = el.getBoundingRect();
6546
+ if (el.needLocalTransform()) {
6547
+ var transform = el.getLocalTransform();
6548
+ // Notice: raw rect may be inner object of el,
6549
+ // which should not be modified.
6550
+ rect = rect.clone();
6551
+ rect.applyTransform(transform);
6552
+ }
6553
+ }
6326
6554
 
6327
6555
  positionInfo = layout.getLayoutRect(
6328
- positionInfo, containerRect, margin
6556
+ zrUtil.defaults(
6557
+ {width: rect.width, height: rect.height},
6558
+ positionInfo
6559
+ ),
6560
+ containerRect,
6561
+ margin
6329
6562
  );
6330
6563
 
6331
- group.attr('position', [
6332
- positionInfo.x - groupRect.x,
6333
- positionInfo.y - groupRect.y
6334
- ]);
6564
+ // Because 'tranlate' is the last step in transform
6565
+ // (see zrender/core/Transformable#getLocalTransfrom),
6566
+ // we can just only modify el.position to get final result.
6567
+ var elPos = el.position;
6568
+ var dx = h ? positionInfo.x - rect.x : 0;
6569
+ var dy = v ? positionInfo.y - rect.y : 0;
6570
+
6571
+ el.attr('position', boundingMode === 'raw' ? [dx, dy] : [elPos[0] + dx, elPos[1] + dy]);
6335
6572
  };
6336
6573
 
6337
6574
  /**
@@ -6525,6 +6762,10 @@ return /******/ (function(modules) { // webpackBootstrap
6525
6762
  progressive: 400,
6526
6763
 
6527
6764
  // Threshold of if use single hover layer to optimize.
6765
+ // It is recommended that `hoverLayerThreshold` is equivalent to or less than
6766
+ // `progressiveThreshold`, otherwise hover will cause restart of progressive,
6767
+ // which is unexpected.
6768
+ // see example <echarts/test/heatmap-large.html>.
6528
6769
  hoverLayerThreshold: 3000
6529
6770
  };
6530
6771
 
@@ -6866,7 +7107,7 @@ return /******/ (function(modules) { // webpackBootstrap
6866
7107
  // called, and is merged into every new option by inner method `mergeOption`
6867
7108
  // each time `setOption` called, can be only used in `isRecreate`, because
6868
7109
  // its reliability is under suspicion. In other cases option merge is
6869
- // proformed by `model.mergeOption`.
7110
+ // performed by `model.mergeOption`.
6870
7111
  ? optionBackup.baseOption : this._newBaseOption
6871
7112
  );
6872
7113
  },
@@ -7120,6 +7361,7 @@ return /******/ (function(modules) { // webpackBootstrap
7120
7361
  var ComponentModel = __webpack_require__(19);
7121
7362
  var colorPaletteMixin = __webpack_require__(24);
7122
7363
  var env = __webpack_require__(2);
7364
+ var layout = __webpack_require__(21);
7123
7365
 
7124
7366
  var encodeHTML = formatUtil.encodeHTML;
7125
7367
  var addCommas = formatUtil.addCommas;
@@ -7154,6 +7396,14 @@ return /******/ (function(modules) { // webpackBootstrap
7154
7396
  */
7155
7397
  visualColorAccessPath: 'itemStyle.normal.color',
7156
7398
 
7399
+ /**
7400
+ * Support merge layout params.
7401
+ * Only support 'box' now (left/right/top/bottom/width/height).
7402
+ * @type {string|Object} Object can be {ignoreSize: true}
7403
+ * @readOnly
7404
+ */
7405
+ layoutMode: null,
7406
+
7157
7407
  init: function (option, parentModel, ecModel, extraOpt) {
7158
7408
 
7159
7409
  /**
@@ -7184,6 +7434,10 @@ return /******/ (function(modules) { // webpackBootstrap
7184
7434
  * @param {module:echarts/model/Global} ecModel
7185
7435
  */
7186
7436
  mergeDefaultAndTheme: function (option, ecModel) {
7437
+ var layoutMode = this.layoutMode;
7438
+ var inputPositionParams = layoutMode
7439
+ ? layout.getLayoutParams(option) : {};
7440
+
7187
7441
  zrUtil.merge(
7188
7442
  option,
7189
7443
  ecModel.getTheme().get(this.subType)
@@ -7195,12 +7449,21 @@ return /******/ (function(modules) { // webpackBootstrap
7195
7449
  modelUtil.defaultEmphasis(option.label, modelUtil.LABEL_OPTIONS);
7196
7450
 
7197
7451
  this.fillDataTextStyle(option.data);
7452
+
7453
+ if (layoutMode) {
7454
+ layout.mergeLayoutParam(option, inputPositionParams, layoutMode);
7455
+ }
7198
7456
  },
7199
7457
 
7200
7458
  mergeOption: function (newSeriesOption, ecModel) {
7201
7459
  newSeriesOption = zrUtil.merge(this.option, newSeriesOption, true);
7202
7460
  this.fillDataTextStyle(newSeriesOption.data);
7203
7461
 
7462
+ var layoutMode = this.layoutMode;
7463
+ if (layoutMode) {
7464
+ layout.mergeLayoutParam(this.option, newSeriesOption, layoutMode);
7465
+ }
7466
+
7204
7467
  var data = this.getInitialData(newSeriesOption, ecModel);
7205
7468
  // TODO Merge data?
7206
7469
  if (data) {
@@ -7309,7 +7572,7 @@ return /******/ (function(modules) { // webpackBootstrap
7309
7572
  valStr = val + '';
7310
7573
  }
7311
7574
  else if (dimType === 'time') {
7312
- valStr = multipleSeries ? '' : formatUtil.formatTime('yyyy/mm/dd hh:mm:ss', val);
7575
+ valStr = multipleSeries ? '' : formatUtil.formatTime('yyyy/MM/dd hh:mm:ss', val);
7313
7576
  }
7314
7577
  else {
7315
7578
  valStr = addCommas(val);
@@ -7327,7 +7590,13 @@ return /******/ (function(modules) { // webpackBootstrap
7327
7590
  var formattedValue = zrUtil.isArray(value)
7328
7591
  ? formatArrayValue(value) : addCommas(value);
7329
7592
  var name = data.getName(dataIndex);
7593
+
7330
7594
  var color = data.getItemVisual(dataIndex, 'color');
7595
+ if (zrUtil.isObject(color) && color.colorStops) {
7596
+ color = (color.colorStops[0] || {}).color;
7597
+ }
7598
+ color = color || 'transparent';
7599
+
7331
7600
  var colorEl = '<span style="display:inline-block;margin-right:5px;'
7332
7601
  + 'border-radius:10px;width:9px;height:9px;background-color:' + color + '"></span>';
7333
7602
 
@@ -7736,7 +8005,6 @@ return /******/ (function(modules) { // webpackBootstrap
7736
8005
  */
7737
8006
  getBoundingRect: function (includeChildren) {
7738
8007
  // TODO Caching
7739
- // TODO Transform
7740
8008
  var rect = null;
7741
8009
  var tmpRect = new BoundingRect(0, 0, 0, 0);
7742
8010
  var children = includeChildren || this._children;
@@ -7750,6 +8018,13 @@ return /******/ (function(modules) { // webpackBootstrap
7750
8018
 
7751
8019
  var childRect = child.getBoundingRect();
7752
8020
  var transform = child.getLocalTransform(tmpMat);
8021
+ // TODO
8022
+ // The boundingRect cacluated by transforming original
8023
+ // rect may be bigger than the actual bundingRect when rotation
8024
+ // is used. (Consider a circle rotated aginst its center, where
8025
+ // the actual boundingRect should be the same as that not be
8026
+ // rotated.) But we can not find better approach to calculate
8027
+ // actual boundingRect yet, considering performance.
7753
8028
  if (transform) {
7754
8029
  tmpRect.copy(childRect);
7755
8030
  tmpRect.applyTransform(transform);
@@ -8325,6 +8600,11 @@ return /******/ (function(modules) { // webpackBootstrap
8325
8600
  * @type {Function}
8326
8601
  * @default null
8327
8602
  */
8603
+ /**
8604
+ * @event module:zrender/mixin/Eventful#ondrag
8605
+ * @type {Function}
8606
+ * @default null
8607
+ */
8328
8608
  /**
8329
8609
  * @event module:zrender/mixin/Eventful#ondragstart
8330
8610
  * @type {Function}
@@ -10705,37 +10985,36 @@ return /******/ (function(modules) { // webpackBootstrap
10705
10985
  var colorTool = __webpack_require__(39);
10706
10986
  var matrix = __webpack_require__(11);
10707
10987
  var vector = __webpack_require__(10);
10708
- var Gradient = __webpack_require__(61);
10709
10988
 
10710
10989
  var graphic = {};
10711
10990
 
10712
10991
  graphic.Group = __webpack_require__(30);
10713
10992
 
10714
- graphic.Image = __webpack_require__(62);
10993
+ graphic.Image = __webpack_require__(61);
10715
10994
 
10716
- graphic.Text = __webpack_require__(64);
10995
+ graphic.Text = __webpack_require__(63);
10717
10996
 
10718
- graphic.Circle = __webpack_require__(65);
10997
+ graphic.Circle = __webpack_require__(64);
10719
10998
 
10720
- graphic.Sector = __webpack_require__(66);
10999
+ graphic.Sector = __webpack_require__(65);
10721
11000
 
10722
- graphic.Ring = __webpack_require__(67);
11001
+ graphic.Ring = __webpack_require__(66);
10723
11002
 
10724
- graphic.Polygon = __webpack_require__(68);
11003
+ graphic.Polygon = __webpack_require__(67);
10725
11004
 
10726
- graphic.Polyline = __webpack_require__(72);
11005
+ graphic.Polyline = __webpack_require__(71);
10727
11006
 
10728
- graphic.Rect = __webpack_require__(73);
11007
+ graphic.Rect = __webpack_require__(72);
10729
11008
 
10730
- graphic.Line = __webpack_require__(75);
11009
+ graphic.Line = __webpack_require__(74);
10731
11010
 
10732
- graphic.BezierCurve = __webpack_require__(76);
11011
+ graphic.BezierCurve = __webpack_require__(75);
10733
11012
 
10734
- graphic.Arc = __webpack_require__(77);
11013
+ graphic.Arc = __webpack_require__(76);
10735
11014
 
10736
- graphic.CompoundPath = __webpack_require__(78);
11015
+ graphic.CompoundPath = __webpack_require__(77);
10737
11016
 
10738
- graphic.LinearGradient = __webpack_require__(79);
11017
+ graphic.LinearGradient = __webpack_require__(78);
10739
11018
 
10740
11019
  graphic.RadialGradient = __webpack_require__(80);
10741
11020
 
@@ -11007,7 +11286,11 @@ return /******/ (function(modules) { // webpackBootstrap
11007
11286
  /**
11008
11287
  * @inner
11009
11288
  */
11010
- function onElementMouseOver() {
11289
+ function onElementMouseOver(e) {
11290
+ if (this.__hoverSilentOnTouch && e.zrByTouch) {
11291
+ return;
11292
+ }
11293
+
11011
11294
  // Only if element is not in emphasis status
11012
11295
  !this.__isEmphasis && doEnterHover(this);
11013
11296
  }
@@ -11015,7 +11298,11 @@ return /******/ (function(modules) { // webpackBootstrap
11015
11298
  /**
11016
11299
  * @inner
11017
11300
  */
11018
- function onElementMouseOut() {
11301
+ function onElementMouseOut(e) {
11302
+ if (this.__hoverSilentOnTouch && e.zrByTouch) {
11303
+ return;
11304
+ }
11305
+
11019
11306
  // Only if element is not in emphasis status
11020
11307
  !this.__isEmphasis && doLeaveHover(this);
11021
11308
  }
@@ -11040,8 +11327,21 @@ return /******/ (function(modules) { // webpackBootstrap
11040
11327
  * Set hover style of element
11041
11328
  * @param {module:zrender/Element} el
11042
11329
  * @param {Object} [hoverStyle]
11043
- */
11044
- graphic.setHoverStyle = function (el, hoverStyle) {
11330
+ * @param {Object} [opt]
11331
+ * @param {boolean} [opt.hoverSilentOnTouch=false]
11332
+ * In touch device, mouseover event will be trigger on touchstart event
11333
+ * (see module:zrender/dom/HandlerProxy). By this mechanism, we can
11334
+ * conviniently use hoverStyle when tap on touch screen without additional
11335
+ * code for compatibility.
11336
+ * But if the chart/component has select feature, which usually also use
11337
+ * hoverStyle, there might be conflict between 'select-highlight' and
11338
+ * 'hover-highlight' especially when roam is enabled (see geo for example).
11339
+ * In this case, hoverSilentOnTouch should be used to disable hover-highlight
11340
+ * on touch device.
11341
+ */
11342
+ graphic.setHoverStyle = function (el, hoverStyle, opt) {
11343
+ el.__hoverSilentOnTouch = opt && opt.hoverSilentOnTouch;
11344
+
11045
11345
  el.type === 'group'
11046
11346
  ? el.traverse(function (child) {
11047
11347
  if (child.type !== 'group') {
@@ -11049,7 +11349,8 @@ return /******/ (function(modules) { // webpackBootstrap
11049
11349
  }
11050
11350
  })
11051
11351
  : setElementHoverStl(el, hoverStyle);
11052
- // Remove previous bound handlers
11352
+
11353
+ // Duplicated function will be auto-ignored, see Eventful.js.
11053
11354
  el.on('mouseover', onElementMouseOver)
11054
11355
  .on('mouseout', onElementMouseOut);
11055
11356
 
@@ -11798,7 +12099,7 @@ return /******/ (function(modules) { // webpackBootstrap
11798
12099
  this.restoreTransform(ctx);
11799
12100
 
11800
12101
  // Draw rect text
11801
- if (style.text || style.text === 0) {
12102
+ if (style.text != null) {
11802
12103
  // var rect = this.getBoundingRect();
11803
12104
  this.drawRectText(ctx, this.getBoundingRect());
11804
12105
  }
@@ -15100,37 +15401,6 @@ return /******/ (function(modules) { // webpackBootstrap
15100
15401
 
15101
15402
  /***/ },
15102
15403
  /* 61 */
15103
- /***/ function(module, exports) {
15104
-
15105
-
15106
-
15107
- /**
15108
- * @param {Array.<Object>} colorStops
15109
- */
15110
- var Gradient = function (colorStops) {
15111
-
15112
- this.colorStops = colorStops || [];
15113
- };
15114
-
15115
- Gradient.prototype = {
15116
-
15117
- constructor: Gradient,
15118
-
15119
- addColorStop: function (offset, color) {
15120
- this.colorStops.push({
15121
-
15122
- offset: offset,
15123
-
15124
- color: color
15125
- });
15126
- }
15127
- };
15128
-
15129
- module.exports = Gradient;
15130
-
15131
-
15132
- /***/ },
15133
- /* 62 */
15134
15404
  /***/ function(module, exports, __webpack_require__) {
15135
15405
 
15136
15406
  /**
@@ -15144,7 +15414,7 @@ return /******/ (function(modules) { // webpackBootstrap
15144
15414
  var BoundingRect = __webpack_require__(9);
15145
15415
  var zrUtil = __webpack_require__(4);
15146
15416
 
15147
- var LRU = __webpack_require__(63);
15417
+ var LRU = __webpack_require__(62);
15148
15418
  var globalImageCache = new LRU(50);
15149
15419
  /**
15150
15420
  * @alias zrender/graphic/Image
@@ -15291,7 +15561,7 @@ return /******/ (function(modules) { // webpackBootstrap
15291
15561
 
15292
15562
 
15293
15563
  /***/ },
15294
- /* 63 */
15564
+ /* 62 */
15295
15565
  /***/ function(module, exports) {
15296
15566
 
15297
15567
  // Simple LRU cache use doubly linked list
@@ -15466,7 +15736,7 @@ return /******/ (function(modules) { // webpackBootstrap
15466
15736
 
15467
15737
 
15468
15738
  /***/ },
15469
- /* 64 */
15739
+ /* 63 */
15470
15740
  /***/ function(module, exports, __webpack_require__) {
15471
15741
 
15472
15742
  /**
@@ -15597,7 +15867,7 @@ return /******/ (function(modules) { // webpackBootstrap
15597
15867
 
15598
15868
 
15599
15869
  /***/ },
15600
- /* 65 */
15870
+ /* 64 */
15601
15871
  /***/ function(module, exports, __webpack_require__) {
15602
15872
 
15603
15873
  'use strict';
@@ -15634,7 +15904,7 @@ return /******/ (function(modules) { // webpackBootstrap
15634
15904
 
15635
15905
 
15636
15906
  /***/ },
15637
- /* 66 */
15907
+ /* 65 */
15638
15908
  /***/ function(module, exports, __webpack_require__) {
15639
15909
 
15640
15910
  /**
@@ -15700,7 +15970,7 @@ return /******/ (function(modules) { // webpackBootstrap
15700
15970
 
15701
15971
 
15702
15972
  /***/ },
15703
- /* 67 */
15973
+ /* 66 */
15704
15974
  /***/ function(module, exports, __webpack_require__) {
15705
15975
 
15706
15976
  /**
@@ -15734,7 +16004,7 @@ return /******/ (function(modules) { // webpackBootstrap
15734
16004
 
15735
16005
 
15736
16006
  /***/ },
15737
- /* 68 */
16007
+ /* 67 */
15738
16008
  /***/ function(module, exports, __webpack_require__) {
15739
16009
 
15740
16010
  /**
@@ -15743,7 +16013,7 @@ return /******/ (function(modules) { // webpackBootstrap
15743
16013
  */
15744
16014
 
15745
16015
 
15746
- var polyHelper = __webpack_require__(69);
16016
+ var polyHelper = __webpack_require__(68);
15747
16017
 
15748
16018
  module.exports = __webpack_require__(45).extend({
15749
16019
 
@@ -15764,13 +16034,13 @@ return /******/ (function(modules) { // webpackBootstrap
15764
16034
 
15765
16035
 
15766
16036
  /***/ },
15767
- /* 69 */
16037
+ /* 68 */
15768
16038
  /***/ function(module, exports, __webpack_require__) {
15769
16039
 
15770
16040
 
15771
16041
 
15772
- var smoothSpline = __webpack_require__(70);
15773
- var smoothBezier = __webpack_require__(71);
16042
+ var smoothSpline = __webpack_require__(69);
16043
+ var smoothBezier = __webpack_require__(70);
15774
16044
 
15775
16045
  module.exports = {
15776
16046
  buildPath: function (ctx, shape, closePath) {
@@ -15811,7 +16081,7 @@ return /******/ (function(modules) { // webpackBootstrap
15811
16081
 
15812
16082
 
15813
16083
  /***/ },
15814
- /* 70 */
16084
+ /* 69 */
15815
16085
  /***/ function(module, exports, __webpack_require__) {
15816
16086
 
15817
16087
  /**
@@ -15887,7 +16157,7 @@ return /******/ (function(modules) { // webpackBootstrap
15887
16157
 
15888
16158
 
15889
16159
  /***/ },
15890
- /* 71 */
16160
+ /* 70 */
15891
16161
  /***/ function(module, exports, __webpack_require__) {
15892
16162
 
15893
16163
  /**
@@ -15994,7 +16264,7 @@ return /******/ (function(modules) { // webpackBootstrap
15994
16264
 
15995
16265
 
15996
16266
  /***/ },
15997
- /* 72 */
16267
+ /* 71 */
15998
16268
  /***/ function(module, exports, __webpack_require__) {
15999
16269
 
16000
16270
  /**
@@ -16002,7 +16272,7 @@ return /******/ (function(modules) { // webpackBootstrap
16002
16272
  */
16003
16273
 
16004
16274
 
16005
- var polyHelper = __webpack_require__(69);
16275
+ var polyHelper = __webpack_require__(68);
16006
16276
 
16007
16277
  module.exports = __webpack_require__(45).extend({
16008
16278
 
@@ -16029,7 +16299,7 @@ return /******/ (function(modules) { // webpackBootstrap
16029
16299
 
16030
16300
 
16031
16301
  /***/ },
16032
- /* 73 */
16302
+ /* 72 */
16033
16303
  /***/ function(module, exports, __webpack_require__) {
16034
16304
 
16035
16305
  /**
@@ -16038,7 +16308,7 @@ return /******/ (function(modules) { // webpackBootstrap
16038
16308
  */
16039
16309
 
16040
16310
 
16041
- var roundRectHelper = __webpack_require__(74);
16311
+ var roundRectHelper = __webpack_require__(73);
16042
16312
 
16043
16313
  module.exports = __webpack_require__(45).extend({
16044
16314
 
@@ -16077,7 +16347,7 @@ return /******/ (function(modules) { // webpackBootstrap
16077
16347
 
16078
16348
 
16079
16349
  /***/ },
16080
- /* 74 */
16350
+ /* 73 */
16081
16351
  /***/ function(module, exports) {
16082
16352
 
16083
16353
 
@@ -16172,7 +16442,7 @@ return /******/ (function(modules) { // webpackBootstrap
16172
16442
 
16173
16443
 
16174
16444
  /***/ },
16175
- /* 75 */
16445
+ /* 74 */
16176
16446
  /***/ function(module, exports, __webpack_require__) {
16177
16447
 
16178
16448
  /**
@@ -16237,7 +16507,7 @@ return /******/ (function(modules) { // webpackBootstrap
16237
16507
 
16238
16508
 
16239
16509
  /***/ },
16240
- /* 76 */
16510
+ /* 75 */
16241
16511
  /***/ function(module, exports, __webpack_require__) {
16242
16512
 
16243
16513
  'use strict';
@@ -16378,7 +16648,7 @@ return /******/ (function(modules) { // webpackBootstrap
16378
16648
 
16379
16649
 
16380
16650
  /***/ },
16381
- /* 77 */
16651
+ /* 76 */
16382
16652
  /***/ function(module, exports, __webpack_require__) {
16383
16653
 
16384
16654
  /**
@@ -16432,7 +16702,7 @@ return /******/ (function(modules) { // webpackBootstrap
16432
16702
 
16433
16703
 
16434
16704
  /***/ },
16435
- /* 78 */
16705
+ /* 77 */
16436
16706
  /***/ function(module, exports, __webpack_require__) {
16437
16707
 
16438
16708
  // CompoundPath to improve performance
@@ -16491,7 +16761,7 @@ return /******/ (function(modules) { // webpackBootstrap
16491
16761
 
16492
16762
 
16493
16763
  /***/ },
16494
- /* 79 */
16764
+ /* 78 */
16495
16765
  /***/ function(module, exports, __webpack_require__) {
16496
16766
 
16497
16767
  'use strict';
@@ -16499,7 +16769,7 @@ return /******/ (function(modules) { // webpackBootstrap
16499
16769
 
16500
16770
  var zrUtil = __webpack_require__(4);
16501
16771
 
16502
- var Gradient = __webpack_require__(61);
16772
+ var Gradient = __webpack_require__(79);
16503
16773
 
16504
16774
  /**
16505
16775
  * x, y, x2, y2 are all percent from 0 to 1
@@ -16530,61 +16800,240 @@ return /******/ (function(modules) { // webpackBootstrap
16530
16800
 
16531
16801
  LinearGradient.prototype = {
16532
16802
 
16533
- constructor: LinearGradient
16534
- };
16803
+ constructor: LinearGradient
16804
+ };
16805
+
16806
+ zrUtil.inherits(LinearGradient, Gradient);
16807
+
16808
+ module.exports = LinearGradient;
16809
+
16810
+
16811
+ /***/ },
16812
+ /* 79 */
16813
+ /***/ function(module, exports) {
16814
+
16815
+
16816
+
16817
+ /**
16818
+ * @param {Array.<Object>} colorStops
16819
+ */
16820
+ var Gradient = function (colorStops) {
16821
+
16822
+ this.colorStops = colorStops || [];
16823
+ };
16824
+
16825
+ Gradient.prototype = {
16826
+
16827
+ constructor: Gradient,
16828
+
16829
+ addColorStop: function (offset, color) {
16830
+ this.colorStops.push({
16831
+
16832
+ offset: offset,
16833
+
16834
+ color: color
16835
+ });
16836
+ }
16837
+ };
16838
+
16839
+ module.exports = Gradient;
16840
+
16841
+
16842
+ /***/ },
16843
+ /* 80 */
16844
+ /***/ function(module, exports, __webpack_require__) {
16845
+
16846
+ 'use strict';
16847
+
16848
+
16849
+ var zrUtil = __webpack_require__(4);
16850
+
16851
+ var Gradient = __webpack_require__(79);
16852
+
16853
+ /**
16854
+ * x, y, r are all percent from 0 to 1
16855
+ * @param {number} [x=0.5]
16856
+ * @param {number} [y=0.5]
16857
+ * @param {number} [r=0.5]
16858
+ * @param {Array.<Object>} [colorStops]
16859
+ * @param {boolean} [globalCoord=false]
16860
+ */
16861
+ var RadialGradient = function (x, y, r, colorStops, globalCoord) {
16862
+ this.x = x == null ? 0.5 : x;
16863
+
16864
+ this.y = y == null ? 0.5 : y;
16865
+
16866
+ this.r = r == null ? 0.5 : r;
16867
+
16868
+ // Can be cloned
16869
+ this.type = 'radial';
16870
+
16871
+ // If use global coord
16872
+ this.global = globalCoord || false;
16873
+
16874
+ Gradient.call(this, colorStops);
16875
+ };
16876
+
16877
+ RadialGradient.prototype = {
16878
+
16879
+ constructor: RadialGradient
16880
+ };
16881
+
16882
+ zrUtil.inherits(RadialGradient, Gradient);
16883
+
16884
+ module.exports = RadialGradient;
16885
+
16886
+
16887
+ /***/ },
16888
+ /* 81 */
16889
+ /***/ function(module, exports) {
16890
+
16891
+
16892
+
16893
+ var lib = {};
16894
+
16895
+ var ORIGIN_METHOD = '\0__throttleOriginMethod';
16896
+ var RATE = '\0__throttleRate';
16897
+ var THROTTLE_TYPE = '\0__throttleType';
16898
+
16899
+ /**
16900
+ * @public
16901
+ * @param {(Function)} fn
16902
+ * @param {number} [delay=0] Unit: ms.
16903
+ * @param {boolean} [debounce=false]
16904
+ * true: If call interval less than `delay`, only the last call works.
16905
+ * false: If call interval less than `delay, call works on fixed rate.
16906
+ * @return {(Function)} throttled fn.
16907
+ */
16908
+ lib.throttle = function (fn, delay, debounce) {
16909
+
16910
+ var currCall;
16911
+ var lastCall = 0;
16912
+ var lastExec = 0;
16913
+ var timer = null;
16914
+ var diff;
16915
+ var scope;
16916
+ var args;
16535
16917
 
16536
- zrUtil.inherits(LinearGradient, Gradient);
16918
+ delay = delay || 0;
16537
16919
 
16538
- module.exports = LinearGradient;
16920
+ function exec() {
16921
+ lastExec = (new Date()).getTime();
16922
+ timer = null;
16923
+ fn.apply(scope, args || []);
16924
+ }
16539
16925
 
16926
+ var cb = function () {
16927
+ currCall = (new Date()).getTime();
16928
+ scope = this;
16929
+ args = arguments;
16930
+ diff = currCall - (debounce ? lastCall : lastExec) - delay;
16540
16931
 
16541
- /***/ },
16542
- /* 80 */
16543
- /***/ function(module, exports, __webpack_require__) {
16932
+ clearTimeout(timer);
16544
16933
 
16545
- 'use strict';
16934
+ if (debounce) {
16935
+ timer = setTimeout(exec, delay);
16936
+ }
16937
+ else {
16938
+ if (diff >= 0) {
16939
+ exec();
16940
+ }
16941
+ else {
16942
+ timer = setTimeout(exec, -diff);
16943
+ }
16944
+ }
16546
16945
 
16946
+ lastCall = currCall;
16947
+ };
16547
16948
 
16548
- var zrUtil = __webpack_require__(4);
16949
+ /**
16950
+ * Clear throttle.
16951
+ * @public
16952
+ */
16953
+ cb.clear = function () {
16954
+ if (timer) {
16955
+ clearTimeout(timer);
16956
+ timer = null;
16957
+ }
16958
+ };
16549
16959
 
16550
- var Gradient = __webpack_require__(61);
16960
+ return cb;
16961
+ };
16551
16962
 
16552
16963
  /**
16553
- * x, y, r are all percent from 0 to 1
16554
- * @param {number} [x=0.5]
16555
- * @param {number} [y=0.5]
16556
- * @param {number} [r=0.5]
16557
- * @param {Array.<Object>} [colorStops]
16558
- * @param {boolean} [globalCoord=false]
16964
+ * Create throttle method or update throttle rate.
16965
+ *
16966
+ * @example
16967
+ * ComponentView.prototype.render = function () {
16968
+ * ...
16969
+ * throttle.createOrUpdate(
16970
+ * this,
16971
+ * '_dispatchAction',
16972
+ * this.model.get('throttle'),
16973
+ * 'fixRate'
16974
+ * );
16975
+ * };
16976
+ * ComponentView.prototype.remove = function () {
16977
+ * throttle.clear(this, '_dispatchAction');
16978
+ * };
16979
+ * ComponentView.prototype.dispose = function () {
16980
+ * throttle.clear(this, '_dispatchAction');
16981
+ * };
16982
+ *
16983
+ * @public
16984
+ * @param {Object} obj
16985
+ * @param {string} fnAttr
16986
+ * @param {number} [rate]
16987
+ * @param {string} [throttleType='fixRate'] 'fixRate' or 'debounce'
16988
+ * @return {Function} throttled function.
16559
16989
  */
16560
- var RadialGradient = function (x, y, r, colorStops, globalCoord) {
16561
- this.x = x == null ? 0.5 : x;
16990
+ lib.createOrUpdate = function (obj, fnAttr, rate, throttleType) {
16991
+ var fn = obj[fnAttr];
16562
16992
 
16563
- this.y = y == null ? 0.5 : y;
16993
+ if (!fn) {
16994
+ return;
16995
+ }
16564
16996
 
16565
- this.r = r == null ? 0.5 : r;
16997
+ var originFn = fn[ORIGIN_METHOD] || fn;
16998
+ var lastThrottleType = fn[THROTTLE_TYPE];
16999
+ var lastRate = fn[RATE];
16566
17000
 
16567
- // Can be cloned
16568
- this.type = 'radial';
17001
+ if (lastRate !== rate || lastThrottleType !== throttleType) {
17002
+ if (rate == null || !throttleType) {
17003
+ return (obj[fnAttr] = originFn);
17004
+ }
16569
17005
 
16570
- // If use global coord
16571
- this.global = globalCoord || false;
17006
+ fn = obj[fnAttr] = lib.throttle(
17007
+ originFn, rate, throttleType === 'debounce'
17008
+ );
17009
+ fn[ORIGIN_METHOD] = originFn;
17010
+ fn[THROTTLE_TYPE] = throttleType;
17011
+ fn[RATE] = rate;
17012
+ }
16572
17013
 
16573
- Gradient.call(this, colorStops);
17014
+ return fn;
16574
17015
  };
16575
17016
 
16576
- RadialGradient.prototype = {
16577
-
16578
- constructor: RadialGradient
17017
+ /**
17018
+ * Clear throttle. Example see throttle.createOrUpdate.
17019
+ *
17020
+ * @public
17021
+ * @param {Object} obj
17022
+ * @param {string} fnAttr
17023
+ */
17024
+ lib.clear = function (obj, fnAttr) {
17025
+ var fn = obj[fnAttr];
17026
+ if (fn && fn[ORIGIN_METHOD]) {
17027
+ obj[fnAttr] = fn[ORIGIN_METHOD];
17028
+ }
16579
17029
  };
16580
17030
 
16581
- zrUtil.inherits(RadialGradient, Gradient);
17031
+ module.exports = lib;
16582
17032
 
16583
- module.exports = RadialGradient;
16584
17033
 
16585
17034
 
16586
17035
  /***/ },
16587
- /* 81 */
17036
+ /* 82 */
16588
17037
  /***/ function(module, exports, __webpack_require__) {
16589
17038
 
16590
17039
  /*!
@@ -16600,16 +17049,17 @@ return /******/ (function(modules) { // webpackBootstrap
16600
17049
 
16601
17050
  var guid = __webpack_require__(32);
16602
17051
  var env = __webpack_require__(2);
17052
+ var zrUtil = __webpack_require__(4);
16603
17053
 
16604
- var Handler = __webpack_require__(82);
16605
- var Storage = __webpack_require__(84);
16606
- var Animation = __webpack_require__(86);
16607
- var HandlerProxy = __webpack_require__(89);
17054
+ var Handler = __webpack_require__(83);
17055
+ var Storage = __webpack_require__(85);
17056
+ var Animation = __webpack_require__(87);
17057
+ var HandlerProxy = __webpack_require__(90);
16608
17058
 
16609
17059
  var useVML = !env.canvasSupported;
16610
17060
 
16611
17061
  var painterCtors = {
16612
- canvas: __webpack_require__(91)
17062
+ canvas: __webpack_require__(92)
16613
17063
  };
16614
17064
 
16615
17065
  var instances = {}; // ZRender实例map索引
@@ -16619,7 +17069,7 @@ return /******/ (function(modules) { // webpackBootstrap
16619
17069
  /**
16620
17070
  * @type {string}
16621
17071
  */
16622
- zrender.version = '3.2.0';
17072
+ zrender.version = '3.2.2';
16623
17073
 
16624
17074
  /**
16625
17075
  * Initializing a zrender instance
@@ -16728,14 +17178,7 @@ return /******/ (function(modules) { // webpackBootstrap
16728
17178
  */
16729
17179
  this.animation = new Animation({
16730
17180
  stage: {
16731
- update: function () {
16732
- if (self._needsRefresh) {
16733
- self.refreshImmediately();
16734
- }
16735
- if (self._needsRefreshHover) {
16736
- self.refreshHoverImmediately();
16737
- }
16738
- }
17181
+ update: zrUtil.bind(this.flush, this)
16739
17182
  }
16740
17183
  });
16741
17184
  this.animation.start();
@@ -16829,6 +17272,18 @@ return /******/ (function(modules) { // webpackBootstrap
16829
17272
  this._needsRefresh = true;
16830
17273
  },
16831
17274
 
17275
+ /**
17276
+ * Perform all refresh
17277
+ */
17278
+ flush: function () {
17279
+ if (this._needsRefresh) {
17280
+ this.refreshImmediately();
17281
+ }
17282
+ if (this._needsRefreshHover) {
17283
+ this.refreshHoverImmediately();
17284
+ }
17285
+ },
17286
+
16832
17287
  /**
16833
17288
  * Add element to hover layer
16834
17289
  * @param {module:zrender/Element} el
@@ -17008,7 +17463,7 @@ return /******/ (function(modules) { // webpackBootstrap
17008
17463
 
17009
17464
 
17010
17465
  /***/ },
17011
- /* 82 */
17466
+ /* 83 */
17012
17467
  /***/ function(module, exports, __webpack_require__) {
17013
17468
 
17014
17469
  'use strict';
@@ -17022,7 +17477,7 @@ return /******/ (function(modules) { // webpackBootstrap
17022
17477
 
17023
17478
 
17024
17479
  var util = __webpack_require__(4);
17025
- var Draggable = __webpack_require__(83);
17480
+ var Draggable = __webpack_require__(84);
17026
17481
 
17027
17482
  var Eventful = __webpack_require__(33);
17028
17483
 
@@ -17038,7 +17493,8 @@ return /******/ (function(modules) { // webpackBootstrap
17038
17493
  pinchX: event.pinchX,
17039
17494
  pinchY: event.pinchY,
17040
17495
  pinchScale: event.pinchScale,
17041
- wheelDelta: event.zrDelta
17496
+ wheelDelta: event.zrDelta,
17497
+ zrByTouch: event.zrByTouch
17042
17498
  };
17043
17499
  }
17044
17500
 
@@ -17308,7 +17764,7 @@ return /******/ (function(modules) { // webpackBootstrap
17308
17764
 
17309
17765
 
17310
17766
  /***/ },
17311
- /* 83 */
17767
+ /* 84 */
17312
17768
  /***/ function(module, exports) {
17313
17769
 
17314
17770
  // TODO Draggable for group
@@ -17396,7 +17852,7 @@ return /******/ (function(modules) { // webpackBootstrap
17396
17852
 
17397
17853
 
17398
17854
  /***/ },
17399
- /* 84 */
17855
+ /* 85 */
17400
17856
  /***/ function(module, exports, __webpack_require__) {
17401
17857
 
17402
17858
  'use strict';
@@ -17416,7 +17872,7 @@ return /******/ (function(modules) { // webpackBootstrap
17416
17872
 
17417
17873
  // Use timsort because in most case elements are partially sorted
17418
17874
  // https://jsfiddle.net/pissang/jr4x7mdm/8/
17419
- var timsort = __webpack_require__(85);
17875
+ var timsort = __webpack_require__(86);
17420
17876
 
17421
17877
  function shapeCompareFunc(a, b) {
17422
17878
  if (a.zlevel === b.zlevel) {
@@ -17670,7 +18126,7 @@ return /******/ (function(modules) { // webpackBootstrap
17670
18126
 
17671
18127
 
17672
18128
  /***/ },
17673
- /* 85 */
18129
+ /* 86 */
17674
18130
  /***/ function(module, exports) {
17675
18131
 
17676
18132
  // https://github.com/mziccard/node-timsort
@@ -18351,7 +18807,7 @@ return /******/ (function(modules) { // webpackBootstrap
18351
18807
 
18352
18808
 
18353
18809
  /***/ },
18354
- /* 86 */
18810
+ /* 87 */
18355
18811
  /***/ function(module, exports, __webpack_require__) {
18356
18812
 
18357
18813
  'use strict';
@@ -18367,9 +18823,9 @@ return /******/ (function(modules) { // webpackBootstrap
18367
18823
 
18368
18824
 
18369
18825
  var util = __webpack_require__(4);
18370
- var Dispatcher = __webpack_require__(87).Dispatcher;
18826
+ var Dispatcher = __webpack_require__(88).Dispatcher;
18371
18827
 
18372
- var requestAnimationFrame = __webpack_require__(88);
18828
+ var requestAnimationFrame = __webpack_require__(89);
18373
18829
 
18374
18830
  var Animator = __webpack_require__(36);
18375
18831
  /**
@@ -18608,7 +19064,7 @@ return /******/ (function(modules) { // webpackBootstrap
18608
19064
 
18609
19065
 
18610
19066
  /***/ },
18611
- /* 87 */
19067
+ /* 88 */
18612
19068
  /***/ function(module, exports, __webpack_require__) {
18613
19069
 
18614
19070
  'use strict';
@@ -18629,7 +19085,10 @@ return /******/ (function(modules) { // webpackBootstrap
18629
19085
  return el.getBoundingClientRect ? el.getBoundingClientRect() : {left: 0, top: 0};
18630
19086
  }
18631
19087
 
18632
- function clientToLocal(el, e, out) {
19088
+ // `calculate` is optional, default false
19089
+ function clientToLocal(el, e, out, calculate) {
19090
+ out = out || {};
19091
+
18633
19092
  // According to the W3C Working Draft, offsetX and offsetY should be relative
18634
19093
  // to the padding edge of the target element. The only browser using this convention
18635
19094
  // is IE. Webkit uses the border edge, Opera uses the content edge, and FireFox does
@@ -18641,8 +19100,7 @@ return /******/ (function(modules) { // webpackBootstrap
18641
19100
  // When mousemove event triggered on ec tooltip, target is not zr painter.dom, and
18642
19101
  // offsetX/Y is relative to e.target, where the calculation of zrX/Y via offsetX/Y
18643
19102
  // is too complex. So css-transfrom dont support in this case temporarily.
18644
-
18645
- if (!e.currentTarget || el !== e.currentTarget) {
19103
+ if (calculate || !env.canvasSupported) {
18646
19104
  defaultGetZrXY(el, e, out);
18647
19105
  }
18648
19106
  // Caution: In FireFox, layerX/layerY Mouse position relative to the closest positioned
@@ -18672,15 +19130,15 @@ return /******/ (function(modules) { // webpackBootstrap
18672
19130
  function defaultGetZrXY(el, e, out) {
18673
19131
  // This well-known method below does not support css transform.
18674
19132
  var box = getBoundingClientRect(el);
18675
- out = out || {};
18676
19133
  out.zrX = e.clientX - box.left;
18677
19134
  out.zrY = e.clientY - box.top;
18678
19135
  }
18679
19136
 
18680
19137
  /**
18681
- * 如果存在第三方嵌入的一些dom触发的事件,或touch事件,需要转换一下事件坐标
19138
+ * 如果存在第三方嵌入的一些dom触发的事件,或touch事件,需要转换一下事件坐标.
19139
+ * `calculate` is optional, default false.
18682
19140
  */
18683
- function normalizeEvent(el, e) {
19141
+ function normalizeEvent(el, e, calculate) {
18684
19142
 
18685
19143
  e = e || window.event;
18686
19144
 
@@ -18692,14 +19150,14 @@ return /******/ (function(modules) { // webpackBootstrap
18692
19150
  var isTouch = eventType && eventType.indexOf('touch') >= 0;
18693
19151
 
18694
19152
  if (!isTouch) {
18695
- clientToLocal(el, e, e);
19153
+ clientToLocal(el, e, e, calculate);
18696
19154
  e.zrDelta = (e.wheelDelta) ? e.wheelDelta / 120 : -(e.detail || 0) / 3;
18697
19155
  }
18698
19156
  else {
18699
19157
  var touch = eventType != 'touchend'
18700
19158
  ? e.targetTouches[0]
18701
19159
  : e.changedTouches[0];
18702
- touch && clientToLocal(el, touch, e);
19160
+ touch && clientToLocal(el, touch, e, calculate);
18703
19161
  }
18704
19162
 
18705
19163
  return e;
@@ -18754,7 +19212,7 @@ return /******/ (function(modules) { // webpackBootstrap
18754
19212
 
18755
19213
 
18756
19214
  /***/ },
18757
- /* 88 */
19215
+ /* 89 */
18758
19216
  /***/ function(module, exports) {
18759
19217
 
18760
19218
 
@@ -18771,16 +19229,16 @@ return /******/ (function(modules) { // webpackBootstrap
18771
19229
 
18772
19230
 
18773
19231
  /***/ },
18774
- /* 89 */
19232
+ /* 90 */
18775
19233
  /***/ function(module, exports, __webpack_require__) {
18776
19234
 
18777
19235
 
18778
19236
 
18779
- var eventTool = __webpack_require__(87);
19237
+ var eventTool = __webpack_require__(88);
18780
19238
  var zrUtil = __webpack_require__(4);
18781
19239
  var Eventful = __webpack_require__(33);
18782
19240
  var env = __webpack_require__(2);
18783
- var GestureMgr = __webpack_require__(90);
19241
+ var GestureMgr = __webpack_require__(91);
18784
19242
 
18785
19243
  var addEventListener = eventTool.addEventListener;
18786
19244
  var removeEventListener = eventTool.removeEventListener;
@@ -18888,13 +19346,16 @@ return /******/ (function(modules) { // webpackBootstrap
18888
19346
 
18889
19347
  event = normalizeEvent(this.dom, event);
18890
19348
 
19349
+ // Mark touch, which is useful in distinguish touch and
19350
+ // mouse event in upper applicatoin.
19351
+ event.zrByTouch = true;
19352
+
18891
19353
  this._lastTouchMoment = new Date();
18892
19354
 
18893
19355
  processGesture(this, event, 'start');
18894
19356
 
18895
- // 平板补充一次findHover
18896
- // this._mobileFindFixed(event);
18897
- // Trigger mousemove and mousedown
19357
+ // In touch device, trigger `mousemove`(`mouseover`) should
19358
+ // be triggered.
18898
19359
  domHandlers.mousemove.call(this, event);
18899
19360
 
18900
19361
  domHandlers.mousedown.call(this, event);
@@ -18911,6 +19372,10 @@ return /******/ (function(modules) { // webpackBootstrap
18911
19372
 
18912
19373
  event = normalizeEvent(this.dom, event);
18913
19374
 
19375
+ // Mark touch, which is useful in distinguish touch and
19376
+ // mouse event in upper applicatoin.
19377
+ event.zrByTouch = true;
19378
+
18914
19379
  processGesture(this, event, 'change');
18915
19380
 
18916
19381
  // Mouse move should always be triggered no matter whether
@@ -18930,10 +19395,22 @@ return /******/ (function(modules) { // webpackBootstrap
18930
19395
 
18931
19396
  event = normalizeEvent(this.dom, event);
18932
19397
 
19398
+ // Mark touch, which is useful in distinguish touch and
19399
+ // mouse event in upper applicatoin.
19400
+ event.zrByTouch = true;
19401
+
18933
19402
  processGesture(this, event, 'end');
18934
19403
 
18935
19404
  domHandlers.mouseup.call(this, event);
18936
19405
 
19406
+ // Do not trigger `mouseout` here, in spite of `mousemove`(`mouseover`) is
19407
+ // triggered in `touchstart`. This seems to be illogical, but by this mechanism,
19408
+ // we can conveniently implement "hover style" in both PC and touch device just
19409
+ // by listening to `mouseover` to add "hover style" and listening to `mouseout`
19410
+ // to remove "hover style" on an element, without any additional code for
19411
+ // compatibility. (`mouseout` will not be triggered in `touchend`, so "hover
19412
+ // style" will remain for user view)
19413
+
18937
19414
  // click event should always be triggered no matter whether
18938
19415
  // there is gestrue event. System click can not be prevented.
18939
19416
  if (+new Date() - this._lastTouchMoment < TOUCH_CLICK_DELAY) {
@@ -19046,7 +19523,7 @@ return /******/ (function(modules) { // webpackBootstrap
19046
19523
 
19047
19524
 
19048
19525
  /***/ },
19049
- /* 90 */
19526
+ /* 91 */
19050
19527
  /***/ function(module, exports, __webpack_require__) {
19051
19528
 
19052
19529
  'use strict';
@@ -19055,7 +19532,7 @@ return /******/ (function(modules) { // webpackBootstrap
19055
19532
  */
19056
19533
 
19057
19534
 
19058
- var eventUtil = __webpack_require__(87);
19535
+ var eventUtil = __webpack_require__(88);
19059
19536
 
19060
19537
  var GestureMgr = function () {
19061
19538
 
@@ -19096,7 +19573,7 @@ return /******/ (function(modules) { // webpackBootstrap
19096
19573
 
19097
19574
  for (var i = 0, len = touches.length; i < len; i++) {
19098
19575
  var touch = touches[i];
19099
- var pos = eventUtil.clientToLocal(root, touch);
19576
+ var pos = eventUtil.clientToLocal(root, touch, {});
19100
19577
  trackItem.points.push([pos.zrX, pos.zrY]);
19101
19578
  trackItem.touches.push(touch);
19102
19579
  }
@@ -19172,7 +19649,7 @@ return /******/ (function(modules) { // webpackBootstrap
19172
19649
 
19173
19650
 
19174
19651
  /***/ },
19175
- /* 91 */
19652
+ /* 92 */
19176
19653
  /***/ function(module, exports, __webpack_require__) {
19177
19654
 
19178
19655
  'use strict';
@@ -19189,11 +19666,11 @@ return /******/ (function(modules) { // webpackBootstrap
19189
19666
  var util = __webpack_require__(4);
19190
19667
  var log = __webpack_require__(40);
19191
19668
  var BoundingRect = __webpack_require__(9);
19192
- var timsort = __webpack_require__(85);
19669
+ var timsort = __webpack_require__(86);
19193
19670
 
19194
- var Layer = __webpack_require__(92);
19671
+ var Layer = __webpack_require__(93);
19195
19672
 
19196
- var requestAnimationFrame = __webpack_require__(88);
19673
+ var requestAnimationFrame = __webpack_require__(89);
19197
19674
 
19198
19675
  // PENDIGN
19199
19676
  // Layer exceeds MAX_PROGRESSIVE_LAYER_NUMBER may have some problem when flush directly second time.
@@ -20201,7 +20678,7 @@ return /******/ (function(modules) { // webpackBootstrap
20201
20678
  path.brush(ctx);
20202
20679
  }
20203
20680
 
20204
- var ImageShape = __webpack_require__(62);
20681
+ var ImageShape = __webpack_require__(61);
20205
20682
  var imgShape = new ImageShape({
20206
20683
  id: id,
20207
20684
  style: {
@@ -20242,7 +20719,7 @@ return /******/ (function(modules) { // webpackBootstrap
20242
20719
 
20243
20720
 
20244
20721
  /***/ },
20245
- /* 92 */
20722
+ /* 93 */
20246
20723
  /***/ function(module, exports, __webpack_require__) {
20247
20724
 
20248
20725
  /**
@@ -20477,11 +20954,11 @@ return /******/ (function(modules) { // webpackBootstrap
20477
20954
 
20478
20955
 
20479
20956
  /***/ },
20480
- /* 93 */
20957
+ /* 94 */
20481
20958
  /***/ function(module, exports, __webpack_require__) {
20482
20959
 
20483
20960
 
20484
- var Gradient = __webpack_require__(61);
20961
+ var Gradient = __webpack_require__(79);
20485
20962
  module.exports = function (ecModel) {
20486
20963
  function encodeColor(seriesModel) {
20487
20964
  var colorAccessPath = (seriesModel.visualColorAccessPath || 'itemStyle.normal.color').split('.');
@@ -20517,14 +20994,14 @@ return /******/ (function(modules) { // webpackBootstrap
20517
20994
 
20518
20995
 
20519
20996
  /***/ },
20520
- /* 94 */
20997
+ /* 95 */
20521
20998
  /***/ function(module, exports, __webpack_require__) {
20522
20999
 
20523
21000
  // Compatitable with 2.0
20524
21001
 
20525
21002
 
20526
21003
  var zrUtil = __webpack_require__(4);
20527
- var compatStyle = __webpack_require__(95);
21004
+ var compatStyle = __webpack_require__(96);
20528
21005
 
20529
21006
  function get(opt, path) {
20530
21007
  path = path.split(',');
@@ -20627,7 +21104,7 @@ return /******/ (function(modules) { // webpackBootstrap
20627
21104
 
20628
21105
 
20629
21106
  /***/ },
20630
- /* 95 */
21107
+ /* 96 */
20631
21108
  /***/ function(module, exports, __webpack_require__) {
20632
21109
 
20633
21110
 
@@ -20708,7 +21185,7 @@ return /******/ (function(modules) { // webpackBootstrap
20708
21185
 
20709
21186
 
20710
21187
  /***/ },
20711
- /* 96 */
21188
+ /* 97 */
20712
21189
  /***/ function(module, exports, __webpack_require__) {
20713
21190
 
20714
21191
 
@@ -20811,7 +21288,7 @@ return /******/ (function(modules) { // webpackBootstrap
20811
21288
 
20812
21289
 
20813
21290
  /***/ },
20814
- /* 97 */
21291
+ /* 98 */
20815
21292
  /***/ function(module, exports, __webpack_require__) {
20816
21293
 
20817
21294
  /* WEBPACK VAR INJECTION */(function(global) {/**
@@ -20837,7 +21314,7 @@ return /******/ (function(modules) { // webpackBootstrap
20837
21314
  };
20838
21315
 
20839
21316
  var Model = __webpack_require__(12);
20840
- var DataDiffer = __webpack_require__(98);
21317
+ var DataDiffer = __webpack_require__(99);
20841
21318
 
20842
21319
  var zrUtil = __webpack_require__(4);
20843
21320
  var modelUtil = __webpack_require__(5);
@@ -21703,11 +22180,19 @@ return /******/ (function(modules) { // webpackBootstrap
21703
22180
  listProto.diff = function (otherList) {
21704
22181
  var idList = this._idList;
21705
22182
  var otherIdList = otherList && otherList._idList;
22183
+ var val;
22184
+ // Use prefix to avoid index to be the same as otherIdList[idx],
22185
+ // which will cause weird udpate animation.
22186
+ var prefix = 'e\0\0';
22187
+
21706
22188
  return new DataDiffer(
21707
- otherList ? otherList.indices : [], this.indices, function (idx) {
21708
- return otherIdList[idx] || (idx + '');
21709
- }, function (idx) {
21710
- return idList[idx] || (idx + '');
22189
+ otherList ? otherList.indices : [],
22190
+ this.indices,
22191
+ function (idx) {
22192
+ return (val = otherIdList[idx]) != null ? val : prefix + idx;
22193
+ },
22194
+ function (idx) {
22195
+ return (val = idList[idx]) != null ? val : prefix + idx;
21711
22196
  }
21712
22197
  );
21713
22198
  };
@@ -21949,7 +22434,7 @@ return /******/ (function(modules) { // webpackBootstrap
21949
22434
  /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
21950
22435
 
21951
22436
  /***/ },
21952
- /* 98 */
22437
+ /* 99 */
21953
22438
  /***/ function(module, exports) {
21954
22439
 
21955
22440
  'use strict';
@@ -22078,7 +22563,7 @@ return /******/ (function(modules) { // webpackBootstrap
22078
22563
 
22079
22564
 
22080
22565
  /***/ },
22081
- /* 99 */
22566
+ /* 100 */
22082
22567
  /***/ function(module, exports, __webpack_require__) {
22083
22568
 
22084
22569
 
@@ -22087,33 +22572,33 @@ return /******/ (function(modules) { // webpackBootstrap
22087
22572
  var echarts = __webpack_require__(1);
22088
22573
  var PRIORITY = echarts.PRIORITY;
22089
22574
 
22090
- __webpack_require__(100);
22091
- __webpack_require__(103);
22575
+ __webpack_require__(101);
22576
+ __webpack_require__(104);
22092
22577
 
22093
22578
  echarts.registerVisual(zrUtil.curry(
22094
- __webpack_require__(109), 'line', 'circle', 'line'
22579
+ __webpack_require__(110), 'line', 'circle', 'line'
22095
22580
  ));
22096
22581
  echarts.registerLayout(zrUtil.curry(
22097
- __webpack_require__(110), 'line'
22582
+ __webpack_require__(111), 'line'
22098
22583
  ));
22099
22584
 
22100
22585
  // Down sample after filter
22101
22586
  echarts.registerProcessor(PRIORITY.PROCESSOR.STATISTIC, zrUtil.curry(
22102
- __webpack_require__(111), 'line'
22587
+ __webpack_require__(112), 'line'
22103
22588
  ));
22104
22589
 
22105
22590
  // In case developer forget to include grid component
22106
- __webpack_require__(112);
22591
+ __webpack_require__(113);
22107
22592
 
22108
22593
 
22109
22594
  /***/ },
22110
- /* 100 */
22595
+ /* 101 */
22111
22596
  /***/ function(module, exports, __webpack_require__) {
22112
22597
 
22113
22598
  'use strict';
22114
22599
 
22115
22600
 
22116
- var createListFromArray = __webpack_require__(101);
22601
+ var createListFromArray = __webpack_require__(102);
22117
22602
  var SeriesModel = __webpack_require__(28);
22118
22603
 
22119
22604
  module.exports = SeriesModel.extend({
@@ -22198,14 +22683,14 @@ return /******/ (function(modules) { // webpackBootstrap
22198
22683
 
22199
22684
 
22200
22685
  /***/ },
22201
- /* 101 */
22686
+ /* 102 */
22202
22687
  /***/ function(module, exports, __webpack_require__) {
22203
22688
 
22204
22689
  'use strict';
22205
22690
 
22206
22691
 
22207
- var List = __webpack_require__(97);
22208
- var completeDimensions = __webpack_require__(102);
22692
+ var List = __webpack_require__(98);
22693
+ var completeDimensions = __webpack_require__(103);
22209
22694
  var zrUtil = __webpack_require__(4);
22210
22695
  var modelUtil = __webpack_require__(5);
22211
22696
  var CoordinateSystem = __webpack_require__(26);
@@ -22484,7 +22969,7 @@ return /******/ (function(modules) { // webpackBootstrap
22484
22969
 
22485
22970
 
22486
22971
  /***/ },
22487
- /* 102 */
22972
+ /* 103 */
22488
22973
  /***/ function(module, exports, __webpack_require__) {
22489
22974
 
22490
22975
  /**
@@ -22554,7 +23039,7 @@ return /******/ (function(modules) { // webpackBootstrap
22554
23039
 
22555
23040
 
22556
23041
  /***/ },
22557
- /* 103 */
23042
+ /* 104 */
22558
23043
  /***/ function(module, exports, __webpack_require__) {
22559
23044
 
22560
23045
  'use strict';
@@ -22562,14 +23047,12 @@ return /******/ (function(modules) { // webpackBootstrap
22562
23047
 
22563
23048
 
22564
23049
  var zrUtil = __webpack_require__(4);
22565
- var SymbolDraw = __webpack_require__(104);
22566
- var Symbol = __webpack_require__(105);
22567
- var lineAnimationDiff = __webpack_require__(107);
23050
+ var SymbolDraw = __webpack_require__(105);
23051
+ var Symbol = __webpack_require__(106);
23052
+ var lineAnimationDiff = __webpack_require__(108);
22568
23053
  var graphic = __webpack_require__(43);
22569
23054
  var modelUtil = __webpack_require__(5);
22570
-
22571
- var polyHelper = __webpack_require__(108);
22572
-
23055
+ var polyHelper = __webpack_require__(109);
22573
23056
  var ChartView = __webpack_require__(42);
22574
23057
 
22575
23058
  function isPointsSame(points1, points2) {
@@ -22762,10 +23245,6 @@ return /******/ (function(modules) { // webpackBootstrap
22762
23245
  return stepPoints;
22763
23246
  }
22764
23247
 
22765
- function clamp(number, extent) {
22766
- return Math.max(Math.min(number, extent[1]), extent[0]);
22767
- }
22768
-
22769
23248
  function getVisualGradient(data, coordSys) {
22770
23249
  var visualMetaList = data.getVisual('visualMeta');
22771
23250
  if (!visualMetaList || !visualMetaList.length || !data.count()) {
@@ -22788,72 +23267,61 @@ return /******/ (function(modules) { // webpackBootstrap
22788
23267
  return;
22789
23268
  }
22790
23269
 
23270
+ // If the area to be rendered is bigger than area defined by LinearGradient,
23271
+ // the canvas spec prescribes that the color of the first stop and the last
23272
+ // stop should be used. But if two stops are added at offset 0, in effect
23273
+ // browsers use the color of the second stop to render area outside
23274
+ // LinearGradient. So we can only infinitesimally extend area defined in
23275
+ // LinearGradient to render `outerColors`.
23276
+
22791
23277
  var dimension = visualMeta.dimension;
22792
23278
  var dimName = data.dimensions[dimension];
22793
- var dataExtent = data.getDataExtent(dimName);
23279
+ var axis = coordSys.getAxis(dimName);
22794
23280
 
22795
- var stops = visualMeta.stops;
23281
+ // dataToCoor mapping may not be linear, but must be monotonic.
23282
+ var colorStops = zrUtil.map(visualMeta.stops, function (stop) {
23283
+ return {
23284
+ coord: axis.toGlobalCoord(axis.dataToCoord(stop.value)),
23285
+ color: stop.color
23286
+ };
23287
+ });
23288
+ var stopLen = colorStops.length;
23289
+ var outerColors = visualMeta.outerColors.slice();
22796
23290
 
22797
- var colorStops = [];
22798
- if (stops[0].interval) {
22799
- stops.sort(function (a, b) {
22800
- return a.interval[0] - b.interval[0];
22801
- });
23291
+ if (stopLen && colorStops[0].coord > colorStops[stopLen - 1].coord) {
23292
+ colorStops.reverse();
23293
+ outerColors.reverse();
22802
23294
  }
22803
23295
 
22804
- var firstStop = stops[0];
22805
- var lastStop = stops[stops.length - 1];
22806
- // Interval can be infinity in piecewise case
22807
- var min = firstStop.interval ? clamp(firstStop.interval[0], dataExtent) : firstStop.value;
22808
- var max = lastStop.interval ? clamp(lastStop.interval[1], dataExtent) : lastStop.value;
22809
- var stopsSpan = max - min;
23296
+ var tinyExtent = 10; // Arbitrary value: 10px
23297
+ var minCoord = colorStops[0].coord - tinyExtent;
23298
+ var maxCoord = colorStops[stopLen - 1].coord + tinyExtent;
23299
+ var coordSpan = maxCoord - minCoord;
22810
23300
 
22811
- // In the piecewise case data out of visual range
22812
- // ----dataMin----dataMax-----visualMin----visualMax
22813
- if (stopsSpan === 0) {
22814
- return data.getItemVisual(0, 'color');
22815
- }
22816
- for (var i = 0; i < stops.length; i++) {
22817
- // Piecewise
22818
- if (stops[i].interval) {
22819
- if (stops[i].interval[1] === stops[i].interval[0]) {
22820
- continue;
22821
- }
22822
- colorStops.push({
22823
- // Make sure offset is between 0 and 1
22824
- offset: (clamp(stops[i].interval[0], dataExtent) - min) / stopsSpan,
22825
- color: stops[i].color
22826
- }, {
22827
- offset: (clamp(stops[i].interval[1], dataExtent) - min) / stopsSpan,
22828
- color: stops[i].color
22829
- });
22830
- }
22831
- // Continous
22832
- else {
22833
- // if (i > 0 && stops[i].value === stops[i - 1].value) {
22834
- // continue;
22835
- // }
22836
- colorStops.push({
22837
- offset: (stops[i].value - min) / stopsSpan,
22838
- color: stops[i].color
22839
- });
22840
- }
23301
+ if (coordSpan < 1e-3) {
23302
+ return 'transparent';
22841
23303
  }
22842
23304
 
22843
- var gradient = new graphic.LinearGradient(
22844
- 0, 0, 0, 0, colorStops, true
22845
- );
22846
- var axis = coordSys.getAxis(dimName);
23305
+ zrUtil.each(colorStops, function (stop) {
23306
+ stop.offset = (stop.coord - minCoord) / coordSpan;
23307
+ });
23308
+ colorStops.push({
23309
+ offset: stopLen ? colorStops[stopLen - 1].offset : 0.5,
23310
+ color: outerColors[1] || 'transparent'
23311
+ });
23312
+ colorStops.unshift({ // notice colorStops.length have been changed.
23313
+ offset: stopLen ? colorStops[0].offset : 0.5,
23314
+ color: outerColors[0] || 'transparent'
23315
+ });
22847
23316
 
22848
- var start = axis.toGlobalCoord(axis.dataToCoord(min));
22849
- var end = axis.toGlobalCoord(axis.dataToCoord(max));
22850
23317
  // zrUtil.each(colorStops, function (colorStop) {
22851
23318
  // // Make sure each offset has rounded px to avoid not sharp edge
22852
23319
  // colorStop.offset = (Math.round(colorStop.offset * (end - start) + start) - start) / (end - start);
22853
23320
  // });
22854
23321
 
22855
- gradient[dimName] = start;
22856
- gradient[dimName + '2'] = end;
23322
+ var gradient = new graphic.LinearGradient(0, 0, 0, 0, colorStops, true);
23323
+ gradient[dimName] = minCoord;
23324
+ gradient[dimName + '2'] = maxCoord;
22857
23325
 
22858
23326
  return gradient;
22859
23327
  }
@@ -23060,6 +23528,10 @@ return /******/ (function(modules) { // webpackBootstrap
23060
23528
  if (!symbol) {
23061
23529
  // Create a temporary symbol if it is not exists
23062
23530
  var pt = data.getItemLayout(dataIndex);
23531
+ if (!pt) {
23532
+ // Null data
23533
+ return;
23534
+ }
23063
23535
  symbol = new Symbol(data, dataIndex);
23064
23536
  symbol.position = pt;
23065
23537
  symbol.setZ(
@@ -23273,7 +23745,7 @@ return /******/ (function(modules) { // webpackBootstrap
23273
23745
 
23274
23746
 
23275
23747
  /***/ },
23276
- /* 104 */
23748
+ /* 105 */
23277
23749
  /***/ function(module, exports, __webpack_require__) {
23278
23750
 
23279
23751
  /**
@@ -23282,7 +23754,7 @@ return /******/ (function(modules) { // webpackBootstrap
23282
23754
 
23283
23755
 
23284
23756
  var graphic = __webpack_require__(43);
23285
- var Symbol = __webpack_require__(105);
23757
+ var Symbol = __webpack_require__(106);
23286
23758
 
23287
23759
  /**
23288
23760
  * @constructor
@@ -23405,7 +23877,7 @@ return /******/ (function(modules) { // webpackBootstrap
23405
23877
 
23406
23878
 
23407
23879
  /***/ },
23408
- /* 105 */
23880
+ /* 106 */
23409
23881
  /***/ function(module, exports, __webpack_require__) {
23410
23882
 
23411
23883
  /**
@@ -23414,7 +23886,7 @@ return /******/ (function(modules) { // webpackBootstrap
23414
23886
 
23415
23887
 
23416
23888
  var zrUtil = __webpack_require__(4);
23417
- var symbolUtil = __webpack_require__(106);
23889
+ var symbolUtil = __webpack_require__(107);
23418
23890
  var graphic = __webpack_require__(43);
23419
23891
  var numberUtil = __webpack_require__(7);
23420
23892
 
@@ -23708,7 +24180,7 @@ return /******/ (function(modules) { // webpackBootstrap
23708
24180
 
23709
24181
 
23710
24182
  /***/ },
23711
- /* 106 */
24183
+ /* 107 */
23712
24184
  /***/ function(module, exports, __webpack_require__) {
23713
24185
 
23714
24186
  'use strict';
@@ -24068,7 +24540,7 @@ return /******/ (function(modules) { // webpackBootstrap
24068
24540
 
24069
24541
 
24070
24542
  /***/ },
24071
- /* 107 */
24543
+ /* 108 */
24072
24544
  /***/ function(module, exports) {
24073
24545
 
24074
24546
 
@@ -24282,7 +24754,7 @@ return /******/ (function(modules) { // webpackBootstrap
24282
24754
 
24283
24755
 
24284
24756
  /***/ },
24285
- /* 108 */
24757
+ /* 109 */
24286
24758
  /***/ function(module, exports, __webpack_require__) {
24287
24759
 
24288
24760
  // Poly path support NaN point
@@ -24537,7 +25009,7 @@ return /******/ (function(modules) { // webpackBootstrap
24537
25009
 
24538
25010
 
24539
25011
  /***/ },
24540
- /* 109 */
25012
+ /* 110 */
24541
25013
  /***/ function(module, exports) {
24542
25014
 
24543
25015
 
@@ -24586,7 +25058,7 @@ return /******/ (function(modules) { // webpackBootstrap
24586
25058
 
24587
25059
 
24588
25060
  /***/ },
24589
- /* 110 */
25061
+ /* 111 */
24590
25062
  /***/ function(module, exports) {
24591
25063
 
24592
25064
 
@@ -24619,7 +25091,7 @@ return /******/ (function(modules) { // webpackBootstrap
24619
25091
 
24620
25092
 
24621
25093
  /***/ },
24622
- /* 111 */
25094
+ /* 112 */
24623
25095
  /***/ function(module, exports) {
24624
25096
 
24625
25097
 
@@ -24702,7 +25174,7 @@ return /******/ (function(modules) { // webpackBootstrap
24702
25174
 
24703
25175
 
24704
25176
  /***/ },
24705
- /* 112 */
25177
+ /* 113 */
24706
25178
  /***/ function(module, exports, __webpack_require__) {
24707
25179
 
24708
25180
  'use strict';
@@ -24712,9 +25184,9 @@ return /******/ (function(modules) { // webpackBootstrap
24712
25184
  var zrUtil = __webpack_require__(4);
24713
25185
  var echarts = __webpack_require__(1);
24714
25186
 
24715
- __webpack_require__(113);
25187
+ __webpack_require__(114);
24716
25188
 
24717
- __webpack_require__(131);
25189
+ __webpack_require__(132);
24718
25190
 
24719
25191
  // Grid view
24720
25192
  echarts.extendComponentView({
@@ -24746,7 +25218,7 @@ return /******/ (function(modules) { // webpackBootstrap
24746
25218
 
24747
25219
 
24748
25220
  /***/ },
24749
- /* 113 */
25221
+ /* 114 */
24750
25222
  /***/ function(module, exports, __webpack_require__) {
24751
25223
 
24752
25224
  /**
@@ -24757,11 +25229,11 @@ return /******/ (function(modules) { // webpackBootstrap
24757
25229
  var factory = exports;
24758
25230
 
24759
25231
  var layout = __webpack_require__(21);
24760
- var axisHelper = __webpack_require__(114);
25232
+ var axisHelper = __webpack_require__(115);
24761
25233
 
24762
25234
  var zrUtil = __webpack_require__(4);
24763
- var Cartesian2D = __webpack_require__(120);
24764
- var Axis2D = __webpack_require__(122);
25235
+ var Cartesian2D = __webpack_require__(121);
25236
+ var Axis2D = __webpack_require__(123);
24765
25237
 
24766
25238
  var each = zrUtil.each;
24767
25239
 
@@ -24769,7 +25241,7 @@ return /******/ (function(modules) { // webpackBootstrap
24769
25241
  var niceScaleExtent = axisHelper.niceScaleExtent;
24770
25242
 
24771
25243
  // 依赖 GridModel, AxisModel 做预处理
24772
- __webpack_require__(125);
25244
+ __webpack_require__(126);
24773
25245
 
24774
25246
  /**
24775
25247
  * Check if the axis is used in the specified grid
@@ -24782,6 +25254,7 @@ return /******/ (function(modules) { // webpackBootstrap
24782
25254
  function getLabelUnionRect(axis) {
24783
25255
  var axisModel = axis.model;
24784
25256
  var labels = axisModel.getFormattedLabels();
25257
+ var textStyleModel = axisModel.getModel('axisLabel.textStyle');
24785
25258
  var rect;
24786
25259
  var step = 1;
24787
25260
  var labelCount = labels.length;
@@ -24791,7 +25264,7 @@ return /******/ (function(modules) { // webpackBootstrap
24791
25264
  }
24792
25265
  for (var i = 0; i < labelCount; i += step) {
24793
25266
  if (!axis.isLabelIgnored(i)) {
24794
- var singleRect = axisModel.getTextRect(labels[i]);
25267
+ var singleRect = textStyleModel.getTextRect(labels[i]);
24795
25268
  // FIXME consider label rotate
24796
25269
  rect ? rect.union(singleRect) : (rect = singleRect);
24797
25270
  }
@@ -25314,16 +25787,16 @@ return /******/ (function(modules) { // webpackBootstrap
25314
25787
 
25315
25788
 
25316
25789
  /***/ },
25317
- /* 114 */
25790
+ /* 115 */
25318
25791
  /***/ function(module, exports, __webpack_require__) {
25319
25792
 
25320
25793
 
25321
25794
 
25322
- var OrdinalScale = __webpack_require__(115);
25323
- var IntervalScale = __webpack_require__(117);
25324
- __webpack_require__(118);
25795
+ var OrdinalScale = __webpack_require__(116);
25796
+ var IntervalScale = __webpack_require__(118);
25325
25797
  __webpack_require__(119);
25326
- var Scale = __webpack_require__(116);
25798
+ __webpack_require__(120);
25799
+ var Scale = __webpack_require__(117);
25327
25800
 
25328
25801
  var numberUtil = __webpack_require__(7);
25329
25802
  var zrUtil = __webpack_require__(4);
@@ -25530,9 +26003,10 @@ return /******/ (function(modules) { // webpackBootstrap
25530
26003
  if (typeof labelFormatter === 'string') {
25531
26004
  labelFormatter = (function (tpl) {
25532
26005
  return function (val) {
25533
- return tpl.replace('{value}', val);
26006
+ return tpl.replace('{value}', val != null ? val : '');
25534
26007
  };
25535
26008
  })(labelFormatter);
26009
+ // Consider empty array
25536
26010
  return zrUtil.map(labels, labelFormatter);
25537
26011
  }
25538
26012
  else if (typeof labelFormatter === 'function') {
@@ -25552,7 +26026,7 @@ return /******/ (function(modules) { // webpackBootstrap
25552
26026
 
25553
26027
 
25554
26028
  /***/ },
25555
- /* 115 */
26029
+ /* 116 */
25556
26030
  /***/ function(module, exports, __webpack_require__) {
25557
26031
 
25558
26032
  /**
@@ -25566,7 +26040,7 @@ return /******/ (function(modules) { // webpackBootstrap
25566
26040
 
25567
26041
 
25568
26042
  var zrUtil = __webpack_require__(4);
25569
- var Scale = __webpack_require__(116);
26043
+ var Scale = __webpack_require__(117);
25570
26044
 
25571
26045
  var scaleProto = Scale.prototype;
25572
26046
 
@@ -25652,7 +26126,7 @@ return /******/ (function(modules) { // webpackBootstrap
25652
26126
 
25653
26127
 
25654
26128
  /***/ },
25655
- /* 116 */
26129
+ /* 117 */
25656
26130
  /***/ function(module, exports, __webpack_require__) {
25657
26131
 
25658
26132
  /**
@@ -25780,7 +26254,7 @@ return /******/ (function(modules) { // webpackBootstrap
25780
26254
 
25781
26255
 
25782
26256
  /***/ },
25783
- /* 117 */
26257
+ /* 118 */
25784
26258
  /***/ function(module, exports, __webpack_require__) {
25785
26259
 
25786
26260
  /**
@@ -25792,7 +26266,7 @@ return /******/ (function(modules) { // webpackBootstrap
25792
26266
 
25793
26267
  var numberUtil = __webpack_require__(7);
25794
26268
  var formatUtil = __webpack_require__(6);
25795
- var Scale = __webpack_require__(116);
26269
+ var Scale = __webpack_require__(117);
25796
26270
 
25797
26271
  var mathFloor = Math.floor;
25798
26272
  var mathCeil = Math.ceil;
@@ -26014,7 +26488,7 @@ return /******/ (function(modules) { // webpackBootstrap
26014
26488
 
26015
26489
 
26016
26490
  /***/ },
26017
- /* 118 */
26491
+ /* 119 */
26018
26492
  /***/ function(module, exports, __webpack_require__) {
26019
26493
 
26020
26494
  /**
@@ -26028,7 +26502,7 @@ return /******/ (function(modules) { // webpackBootstrap
26028
26502
  var numberUtil = __webpack_require__(7);
26029
26503
  var formatUtil = __webpack_require__(6);
26030
26504
 
26031
- var IntervalScale = __webpack_require__(117);
26505
+ var IntervalScale = __webpack_require__(118);
26032
26506
 
26033
26507
  var intervalScaleProto = IntervalScale.prototype;
26034
26508
 
@@ -26180,7 +26654,7 @@ return /******/ (function(modules) { // webpackBootstrap
26180
26654
 
26181
26655
 
26182
26656
  /***/ },
26183
- /* 119 */
26657
+ /* 120 */
26184
26658
  /***/ function(module, exports, __webpack_require__) {
26185
26659
 
26186
26660
  /**
@@ -26190,11 +26664,11 @@ return /******/ (function(modules) { // webpackBootstrap
26190
26664
 
26191
26665
 
26192
26666
  var zrUtil = __webpack_require__(4);
26193
- var Scale = __webpack_require__(116);
26667
+ var Scale = __webpack_require__(117);
26194
26668
  var numberUtil = __webpack_require__(7);
26195
26669
 
26196
26670
  // Use some method of IntervalScale
26197
- var IntervalScale = __webpack_require__(117);
26671
+ var IntervalScale = __webpack_require__(118);
26198
26672
 
26199
26673
  var scaleProto = Scale.prototype;
26200
26674
  var intervalScaleProto = IntervalScale.prototype;
@@ -26367,14 +26841,14 @@ return /******/ (function(modules) { // webpackBootstrap
26367
26841
 
26368
26842
 
26369
26843
  /***/ },
26370
- /* 120 */
26844
+ /* 121 */
26371
26845
  /***/ function(module, exports, __webpack_require__) {
26372
26846
 
26373
26847
  'use strict';
26374
26848
 
26375
26849
 
26376
26850
  var zrUtil = __webpack_require__(4);
26377
- var Cartesian = __webpack_require__(121);
26851
+ var Cartesian = __webpack_require__(122);
26378
26852
 
26379
26853
  function Cartesian2D(name) {
26380
26854
 
@@ -26483,7 +26957,7 @@ return /******/ (function(modules) { // webpackBootstrap
26483
26957
 
26484
26958
 
26485
26959
  /***/ },
26486
- /* 121 */
26960
+ /* 122 */
26487
26961
  /***/ function(module, exports, __webpack_require__) {
26488
26962
 
26489
26963
  'use strict';
@@ -26601,14 +27075,14 @@ return /******/ (function(modules) { // webpackBootstrap
26601
27075
 
26602
27076
 
26603
27077
  /***/ },
26604
- /* 122 */
27078
+ /* 123 */
26605
27079
  /***/ function(module, exports, __webpack_require__) {
26606
27080
 
26607
27081
 
26608
27082
 
26609
27083
  var zrUtil = __webpack_require__(4);
26610
- var Axis = __webpack_require__(123);
26611
- var axisLabelInterval = __webpack_require__(124);
27084
+ var Axis = __webpack_require__(124);
27085
+ var axisLabelInterval = __webpack_require__(125);
26612
27086
 
26613
27087
  /**
26614
27088
  * Extend axis 2d
@@ -26723,7 +27197,7 @@ return /******/ (function(modules) { // webpackBootstrap
26723
27197
 
26724
27198
 
26725
27199
  /***/ },
26726
- /* 123 */
27200
+ /* 124 */
26727
27201
  /***/ function(module, exports, __webpack_require__) {
26728
27202
 
26729
27203
 
@@ -26948,7 +27422,7 @@ return /******/ (function(modules) { // webpackBootstrap
26948
27422
 
26949
27423
 
26950
27424
  /***/ },
26951
- /* 124 */
27425
+ /* 125 */
26952
27426
  /***/ function(module, exports, __webpack_require__) {
26953
27427
 
26954
27428
  'use strict';
@@ -26959,7 +27433,7 @@ return /******/ (function(modules) { // webpackBootstrap
26959
27433
 
26960
27434
 
26961
27435
  var zrUtil = __webpack_require__(4);
26962
- var axisHelper = __webpack_require__(114);
27436
+ var axisHelper = __webpack_require__(115);
26963
27437
 
26964
27438
  module.exports = function (axis) {
26965
27439
  var axisModel = axis.model;
@@ -26979,7 +27453,7 @@ return /******/ (function(modules) { // webpackBootstrap
26979
27453
 
26980
27454
 
26981
27455
  /***/ },
26982
- /* 125 */
27456
+ /* 126 */
26983
27457
  /***/ function(module, exports, __webpack_require__) {
26984
27458
 
26985
27459
  'use strict';
@@ -26987,7 +27461,7 @@ return /******/ (function(modules) { // webpackBootstrap
26987
27461
  // 所以这里也要被 Cartesian2D 依赖
26988
27462
 
26989
27463
 
26990
- __webpack_require__(126);
27464
+ __webpack_require__(127);
26991
27465
  var ComponentModel = __webpack_require__(19);
26992
27466
 
26993
27467
  module.exports = ComponentModel.extend({
@@ -27023,7 +27497,7 @@ return /******/ (function(modules) { // webpackBootstrap
27023
27497
 
27024
27498
 
27025
27499
  /***/ },
27026
- /* 126 */
27500
+ /* 127 */
27027
27501
  /***/ function(module, exports, __webpack_require__) {
27028
27502
 
27029
27503
  'use strict';
@@ -27031,7 +27505,7 @@ return /******/ (function(modules) { // webpackBootstrap
27031
27505
 
27032
27506
  var ComponentModel = __webpack_require__(19);
27033
27507
  var zrUtil = __webpack_require__(4);
27034
- var axisModelCreator = __webpack_require__(127);
27508
+ var axisModelCreator = __webpack_require__(128);
27035
27509
 
27036
27510
  var AxisModel = ComponentModel.extend({
27037
27511
 
@@ -27084,8 +27558,8 @@ return /******/ (function(modules) { // webpackBootstrap
27084
27558
  return option.type || (option.data ? 'category' : 'value');
27085
27559
  }
27086
27560
 
27087
- zrUtil.merge(AxisModel.prototype, __webpack_require__(129));
27088
27561
  zrUtil.merge(AxisModel.prototype, __webpack_require__(130));
27562
+ zrUtil.merge(AxisModel.prototype, __webpack_require__(131));
27089
27563
 
27090
27564
  var extraOption = {
27091
27565
  // gridIndex: 0,
@@ -27102,12 +27576,12 @@ return /******/ (function(modules) { // webpackBootstrap
27102
27576
 
27103
27577
 
27104
27578
  /***/ },
27105
- /* 127 */
27579
+ /* 128 */
27106
27580
  /***/ function(module, exports, __webpack_require__) {
27107
27581
 
27108
27582
 
27109
27583
 
27110
- var axisDefault = __webpack_require__(128);
27584
+ var axisDefault = __webpack_require__(129);
27111
27585
  var zrUtil = __webpack_require__(4);
27112
27586
  var ComponentModel = __webpack_require__(19);
27113
27587
  var layout = __webpack_require__(21);
@@ -27165,7 +27639,7 @@ return /******/ (function(modules) { // webpackBootstrap
27165
27639
 
27166
27640
 
27167
27641
  /***/ },
27168
- /* 128 */
27642
+ /* 129 */
27169
27643
  /***/ function(module, exports, __webpack_require__) {
27170
27644
 
27171
27645
 
@@ -27323,13 +27797,13 @@ return /******/ (function(modules) { // webpackBootstrap
27323
27797
 
27324
27798
 
27325
27799
  /***/ },
27326
- /* 129 */
27800
+ /* 130 */
27327
27801
  /***/ function(module, exports, __webpack_require__) {
27328
27802
 
27329
27803
 
27330
27804
 
27331
27805
  var zrUtil = __webpack_require__(4);
27332
- var axisHelper = __webpack_require__(114);
27806
+ var axisHelper = __webpack_require__(115);
27333
27807
 
27334
27808
  function getName(obj) {
27335
27809
  if (zrUtil.isObject(obj) && obj.value != null) {
@@ -27367,7 +27841,7 @@ return /******/ (function(modules) { // webpackBootstrap
27367
27841
 
27368
27842
 
27369
27843
  /***/ },
27370
- /* 130 */
27844
+ /* 131 */
27371
27845
  /***/ function(module, exports) {
27372
27846
 
27373
27847
 
@@ -27436,27 +27910,27 @@ return /******/ (function(modules) { // webpackBootstrap
27436
27910
 
27437
27911
 
27438
27912
  /***/ },
27439
- /* 131 */
27913
+ /* 132 */
27440
27914
  /***/ function(module, exports, __webpack_require__) {
27441
27915
 
27442
27916
  'use strict';
27443
27917
  // TODO boundaryGap
27444
27918
 
27445
27919
 
27446
- __webpack_require__(126);
27920
+ __webpack_require__(127);
27447
27921
 
27448
- __webpack_require__(132);
27922
+ __webpack_require__(133);
27449
27923
 
27450
27924
 
27451
27925
  /***/ },
27452
- /* 132 */
27926
+ /* 133 */
27453
27927
  /***/ function(module, exports, __webpack_require__) {
27454
27928
 
27455
27929
 
27456
27930
 
27457
27931
  var zrUtil = __webpack_require__(4);
27458
27932
  var graphic = __webpack_require__(43);
27459
- var AxisBuilder = __webpack_require__(133);
27933
+ var AxisBuilder = __webpack_require__(134);
27460
27934
  var ifIgnoreOnTick = AxisBuilder.ifIgnoreOnTick;
27461
27935
  var getInterval = AxisBuilder.getInterval;
27462
27936
 
@@ -27734,7 +28208,7 @@ return /******/ (function(modules) { // webpackBootstrap
27734
28208
 
27735
28209
 
27736
28210
  /***/ },
27737
- /* 133 */
28211
+ /* 134 */
27738
28212
  /***/ function(module, exports, __webpack_require__) {
27739
28213
 
27740
28214
 
@@ -28004,34 +28478,34 @@ return /******/ (function(modules) { // webpackBootstrap
28004
28478
  var silent = isSilent(axisModel);
28005
28479
  var triggerEvent = axisModel.get('triggerEvent');
28006
28480
 
28007
- for (var i = 0; i < ticks.length; i++) {
28008
- if (ifIgnoreOnTick(axis, i, opt.labelInterval)) {
28009
- continue;
28481
+ zrUtil.each(ticks, function (tickVal, index) {
28482
+ if (ifIgnoreOnTick(axis, index, opt.labelInterval)) {
28483
+ return;
28010
28484
  }
28011
28485
 
28012
28486
  var itemTextStyleModel = textStyleModel;
28013
- if (categoryData && categoryData[i] && categoryData[i].textStyle) {
28487
+ if (categoryData && categoryData[tickVal] && categoryData[tickVal].textStyle) {
28014
28488
  itemTextStyleModel = new Model(
28015
- categoryData[i].textStyle, textStyleModel, axisModel.ecModel
28489
+ categoryData[tickVal].textStyle, textStyleModel, axisModel.ecModel
28016
28490
  );
28017
28491
  }
28018
28492
  var textColor = itemTextStyleModel.getTextColor()
28019
28493
  || axisModel.get('axisLine.lineStyle.color');
28020
28494
 
28021
- var tickCoord = axis.dataToCoord(ticks[i]);
28495
+ var tickCoord = axis.dataToCoord(tickVal);
28022
28496
  var pos = [
28023
28497
  tickCoord,
28024
28498
  opt.labelOffset + opt.labelDirection * labelMargin
28025
28499
  ];
28026
- var labelBeforeFormat = axis.scale.getLabel(ticks[i]);
28500
+ var labelBeforeFormat = axis.scale.getLabel(tickVal);
28027
28501
 
28028
28502
  var textEl = new graphic.Text({
28029
28503
 
28030
28504
  // Id for animation
28031
- anid: 'label_' + ticks[i],
28505
+ anid: 'label_' + tickVal,
28032
28506
 
28033
28507
  style: {
28034
- text: labels[i],
28508
+ text: labels[index],
28035
28509
  textAlign: itemTextStyleModel.get('align', true) || labelLayout.textAlign,
28036
28510
  textVerticalAlign: itemTextStyleModel.get('baseline', true) || labelLayout.verticalAlign,
28037
28511
  textFont: itemTextStyleModel.getFont(),
@@ -28050,7 +28524,6 @@ return /******/ (function(modules) { // webpackBootstrap
28050
28524
  textEl.eventData.value = labelBeforeFormat;
28051
28525
  }
28052
28526
 
28053
-
28054
28527
  // FIXME
28055
28528
  this._dumbGroup.add(textEl);
28056
28529
  textEl.updateTransform();
@@ -28059,7 +28532,8 @@ return /******/ (function(modules) { // webpackBootstrap
28059
28532
  this.group.add(textEl);
28060
28533
 
28061
28534
  textEl.decomposeTransform();
28062
- }
28535
+
28536
+ }, this);
28063
28537
 
28064
28538
  function isTwoLabelOverlapped(current, next) {
28065
28539
  var firstRect = current && current.getBoundingRect().clone();
@@ -28335,19 +28809,19 @@ return /******/ (function(modules) { // webpackBootstrap
28335
28809
 
28336
28810
 
28337
28811
  /***/ },
28338
- /* 134 */
28812
+ /* 135 */
28339
28813
  /***/ function(module, exports, __webpack_require__) {
28340
28814
 
28341
28815
 
28342
28816
 
28343
28817
  var zrUtil = __webpack_require__(4);
28344
28818
 
28345
- __webpack_require__(113);
28819
+ __webpack_require__(114);
28346
28820
 
28347
- __webpack_require__(135);
28348
28821
  __webpack_require__(136);
28822
+ __webpack_require__(137);
28349
28823
 
28350
- var barLayoutGrid = __webpack_require__(138);
28824
+ var barLayoutGrid = __webpack_require__(139);
28351
28825
  var echarts = __webpack_require__(1);
28352
28826
 
28353
28827
  echarts.registerLayout(zrUtil.curry(barLayoutGrid, 'bar'));
@@ -28360,18 +28834,18 @@ return /******/ (function(modules) { // webpackBootstrap
28360
28834
  });
28361
28835
 
28362
28836
  // In case developer forget to include grid component
28363
- __webpack_require__(112);
28837
+ __webpack_require__(113);
28364
28838
 
28365
28839
 
28366
28840
  /***/ },
28367
- /* 135 */
28841
+ /* 136 */
28368
28842
  /***/ function(module, exports, __webpack_require__) {
28369
28843
 
28370
28844
  'use strict';
28371
28845
 
28372
28846
 
28373
28847
  var SeriesModel = __webpack_require__(28);
28374
- var createListFromArray = __webpack_require__(101);
28848
+ var createListFromArray = __webpack_require__(102);
28375
28849
 
28376
28850
  module.exports = SeriesModel.extend({
28377
28851
 
@@ -28443,7 +28917,7 @@ return /******/ (function(modules) { // webpackBootstrap
28443
28917
 
28444
28918
 
28445
28919
  /***/ },
28446
- /* 136 */
28920
+ /* 137 */
28447
28921
  /***/ function(module, exports, __webpack_require__) {
28448
28922
 
28449
28923
  'use strict';
@@ -28452,7 +28926,7 @@ return /******/ (function(modules) { // webpackBootstrap
28452
28926
  var zrUtil = __webpack_require__(4);
28453
28927
  var graphic = __webpack_require__(43);
28454
28928
 
28455
- zrUtil.extend(__webpack_require__(12).prototype, __webpack_require__(137));
28929
+ zrUtil.extend(__webpack_require__(12).prototype, __webpack_require__(138));
28456
28930
 
28457
28931
  function fixLayoutWithLineWidth(layout, lineWidth) {
28458
28932
  var signX = layout.width > 0 ? 1 : -1;
@@ -28664,7 +29138,7 @@ return /******/ (function(modules) { // webpackBootstrap
28664
29138
 
28665
29139
 
28666
29140
  /***/ },
28667
- /* 137 */
29141
+ /* 138 */
28668
29142
  /***/ function(module, exports, __webpack_require__) {
28669
29143
 
28670
29144
 
@@ -28698,7 +29172,7 @@ return /******/ (function(modules) { // webpackBootstrap
28698
29172
 
28699
29173
 
28700
29174
  /***/ },
28701
- /* 138 */
29175
+ /* 139 */
28702
29176
  /***/ function(module, exports, __webpack_require__) {
28703
29177
 
28704
29178
  'use strict';
@@ -28944,7 +29418,7 @@ return /******/ (function(modules) { // webpackBootstrap
28944
29418
 
28945
29419
 
28946
29420
  /***/ },
28947
- /* 139 */
29421
+ /* 140 */
28948
29422
  /***/ function(module, exports, __webpack_require__) {
28949
29423
 
28950
29424
 
@@ -28952,10 +29426,10 @@ return /******/ (function(modules) { // webpackBootstrap
28952
29426
  var zrUtil = __webpack_require__(4);
28953
29427
  var echarts = __webpack_require__(1);
28954
29428
 
28955
- __webpack_require__(140);
28956
- __webpack_require__(142);
29429
+ __webpack_require__(141);
29430
+ __webpack_require__(143);
28957
29431
 
28958
- __webpack_require__(143)('pie', [{
29432
+ __webpack_require__(144)('pie', [{
28959
29433
  type: 'pieToggleSelect',
28960
29434
  event: 'pieselectchanged',
28961
29435
  method: 'toggleSelected'
@@ -28969,28 +29443,28 @@ return /******/ (function(modules) { // webpackBootstrap
28969
29443
  method: 'unSelect'
28970
29444
  }]);
28971
29445
 
28972
- echarts.registerVisual(zrUtil.curry(__webpack_require__(144), 'pie'));
29446
+ echarts.registerVisual(zrUtil.curry(__webpack_require__(145), 'pie'));
28973
29447
 
28974
29448
  echarts.registerLayout(zrUtil.curry(
28975
- __webpack_require__(145), 'pie'
29449
+ __webpack_require__(146), 'pie'
28976
29450
  ));
28977
29451
 
28978
- echarts.registerProcessor(zrUtil.curry(__webpack_require__(147), 'pie'));
29452
+ echarts.registerProcessor(zrUtil.curry(__webpack_require__(148), 'pie'));
28979
29453
 
28980
29454
 
28981
29455
  /***/ },
28982
- /* 140 */
29456
+ /* 141 */
28983
29457
  /***/ function(module, exports, __webpack_require__) {
28984
29458
 
28985
29459
  'use strict';
28986
29460
 
28987
29461
 
28988
- var List = __webpack_require__(97);
29462
+ var List = __webpack_require__(98);
28989
29463
  var zrUtil = __webpack_require__(4);
28990
29464
  var modelUtil = __webpack_require__(5);
28991
- var completeDimensions = __webpack_require__(102);
29465
+ var completeDimensions = __webpack_require__(103);
28992
29466
 
28993
- var dataSelectableMixin = __webpack_require__(141);
29467
+ var dataSelectableMixin = __webpack_require__(142);
28994
29468
 
28995
29469
  var PieSeries = __webpack_require__(1).extendSeriesModel({
28996
29470
 
@@ -29123,7 +29597,7 @@ return /******/ (function(modules) { // webpackBootstrap
29123
29597
 
29124
29598
 
29125
29599
  /***/ },
29126
- /* 141 */
29600
+ /* 142 */
29127
29601
  /***/ function(module, exports, __webpack_require__) {
29128
29602
 
29129
29603
  /**
@@ -29193,7 +29667,7 @@ return /******/ (function(modules) { // webpackBootstrap
29193
29667
 
29194
29668
 
29195
29669
  /***/ },
29196
- /* 142 */
29670
+ /* 143 */
29197
29671
  /***/ function(module, exports, __webpack_require__) {
29198
29672
 
29199
29673
 
@@ -29578,7 +30052,7 @@ return /******/ (function(modules) { // webpackBootstrap
29578
30052
 
29579
30053
 
29580
30054
  /***/ },
29581
- /* 143 */
30055
+ /* 144 */
29582
30056
  /***/ function(module, exports, __webpack_require__) {
29583
30057
 
29584
30058
 
@@ -29618,7 +30092,7 @@ return /******/ (function(modules) { // webpackBootstrap
29618
30092
 
29619
30093
 
29620
30094
  /***/ },
29621
- /* 144 */
30095
+ /* 145 */
29622
30096
  /***/ function(module, exports) {
29623
30097
 
29624
30098
  // Pick color from palette for each data item
@@ -29667,7 +30141,7 @@ return /******/ (function(modules) { // webpackBootstrap
29667
30141
 
29668
30142
 
29669
30143
  /***/ },
29670
- /* 145 */
30144
+ /* 146 */
29671
30145
  /***/ function(module, exports, __webpack_require__) {
29672
30146
 
29673
30147
  // TODO minAngle
@@ -29676,7 +30150,7 @@ return /******/ (function(modules) { // webpackBootstrap
29676
30150
 
29677
30151
  var numberUtil = __webpack_require__(7);
29678
30152
  var parsePercent = numberUtil.parsePercent;
29679
- var labelLayout = __webpack_require__(146);
30153
+ var labelLayout = __webpack_require__(147);
29680
30154
  var zrUtil = __webpack_require__(4);
29681
30155
 
29682
30156
  var PI2 = Math.PI * 2;
@@ -29784,7 +30258,7 @@ return /******/ (function(modules) { // webpackBootstrap
29784
30258
  ? minAngle : value * unitRadian;
29785
30259
  layout.startAngle = currentAngle;
29786
30260
  layout.endAngle = currentAngle + dir * angle;
29787
- currentAngle += angle;
30261
+ currentAngle += dir * angle;
29788
30262
  });
29789
30263
  }
29790
30264
  }
@@ -29795,7 +30269,7 @@ return /******/ (function(modules) { // webpackBootstrap
29795
30269
 
29796
30270
 
29797
30271
  /***/ },
29798
- /* 146 */
30272
+ /* 147 */
29799
30273
  /***/ function(module, exports, __webpack_require__) {
29800
30274
 
29801
30275
  'use strict';
@@ -30026,7 +30500,7 @@ return /******/ (function(modules) { // webpackBootstrap
30026
30500
 
30027
30501
 
30028
30502
  /***/ },
30029
- /* 147 */
30503
+ /* 148 */
30030
30504
  /***/ function(module, exports) {
30031
30505
 
30032
30506