echarts-rails 0.1.4 → 0.1.5

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 55dedbc17f3ea5fd0923662d3251fb9e5d0e3e90
4
- data.tar.gz: c847ecc5f15f10ce8efa7ab4e820917d09722867
3
+ metadata.gz: 7817871c50149c26e648ac0866af4b5d71e7b5c1
4
+ data.tar.gz: bfa330185388138724c9110cf24c0434aaf47990
5
5
  SHA512:
6
- metadata.gz: 65517ba74e35a889a4169ace8d69fde13d9188d10c26cf3cb091d07a0c56755adc502141eea2cf6e503dfdbaa8b8507a4371db9e65dbc2e4b092a5b4f1284d55
7
- data.tar.gz: ede9b3358ea3d42d8af0d99a8593851be6c2f825559a7dc720c6f6de4b6ff46abd7ca2dbae11844114b313ee2b095dbd49f3fd87b842656e2b9a007f451f56ff
6
+ metadata.gz: 147ebb7cbd0aad60ac7fb0a4f31e400a017b658e94b329cd152a28c22059847feab92a1056258ed7c01edd1b57feda7dc7d7cb655c874cbbd93a8d6a093ede3f
7
+ data.tar.gz: a6971fabf4afa3d600bd2d0e216ad53102a695a9baae01513d051367714703b40a6b7c110e0f0d853286ddfa5b236b8ab38f1d16f03389715de767d590a6fe83
data/README.md CHANGED
@@ -5,9 +5,8 @@ Wrappers of Echarts Javascript Chart Libary for Rails 3.1+
5
5
  Check out how to use echarts at http://echarts.baidu.com
6
6
 
7
7
  * echarts-rails 0.1.0 -> echarts 3.1.3
8
- * echarts-rails 0.1.2 -> echarts 3.2.0
9
- * echarts-rails 0.1.3 -> echarts 3.2.2
10
8
  * echarts-rails 0.1.4 -> echarts 3.2.3
9
+ * echarts-rails 0.1.5 -> echarts 3.3.0
11
10
 
12
11
  ## Installation
13
12
 
@@ -60,22 +60,22 @@ return /******/ (function(modules) { // webpackBootstrap
60
60
  module.exports = __webpack_require__(1);
61
61
 
62
62
  __webpack_require__(99);
63
- __webpack_require__(133);
64
- __webpack_require__(138);
65
- __webpack_require__(147);
66
- __webpack_require__(279);
67
- __webpack_require__(273);
63
+ __webpack_require__(134);
64
+ __webpack_require__(139);
65
+ __webpack_require__(148);
66
+ __webpack_require__(280);
67
+ __webpack_require__(274);
68
68
 
69
69
  __webpack_require__(112);
70
- __webpack_require__(315);
71
-
72
- __webpack_require__(345);
73
- __webpack_require__(351);
74
- __webpack_require__(354);
75
70
  __webpack_require__(316);
76
- __webpack_require__(366);
77
71
 
78
- __webpack_require__(379);
72
+ __webpack_require__(346);
73
+ __webpack_require__(352);
74
+ __webpack_require__(355);
75
+ __webpack_require__(317);
76
+ __webpack_require__(367);
77
+
78
+ __webpack_require__(380);
79
79
 
80
80
  /***/ },
81
81
  /* 1 */
@@ -123,6 +123,7 @@ return /******/ (function(modules) { // webpackBootstrap
123
123
  var ComponentView = __webpack_require__(29);
124
124
  var ChartView = __webpack_require__(42);
125
125
  var graphic = __webpack_require__(43);
126
+ var modelUtil = __webpack_require__(5);
126
127
 
127
128
  var zrender = __webpack_require__(81);
128
129
  var zrUtil = __webpack_require__(4);
@@ -160,6 +161,7 @@ return /******/ (function(modules) { // webpackBootstrap
160
161
  Eventful.prototype[method].call(this, eventName, handler, context);
161
162
  };
162
163
  }
164
+
163
165
  /**
164
166
  * @module echarts~MessageCenter
165
167
  */
@@ -170,6 +172,7 @@ return /******/ (function(modules) { // webpackBootstrap
170
172
  MessageCenter.prototype.off = createRegisterEventWithLowercaseName('off');
171
173
  MessageCenter.prototype.one = createRegisterEventWithLowercaseName('one');
172
174
  zrUtil.mixin(MessageCenter, Eventful);
175
+
173
176
  /**
174
177
  * @module echarts~ECharts
175
178
  */
@@ -201,7 +204,9 @@ return /******/ (function(modules) { // webpackBootstrap
201
204
  */
202
205
  this._zr = zrender.init(dom, {
203
206
  renderer: opts.renderer || 'canvas',
204
- devicePixelRatio: opts.devicePixelRatio
207
+ devicePixelRatio: opts.devicePixelRatio,
208
+ width: opts.width,
209
+ height: opts.height
205
210
  });
206
211
 
207
212
  /**
@@ -451,8 +456,8 @@ return /******/ (function(modules) { // webpackBootstrap
451
456
  var bottom = -MAX_NUMBER;
452
457
  var canvasList = [];
453
458
  var dpr = (opts && opts.pixelRatio) || 1;
454
- for (var id in instances) {
455
- var chart = instances[id];
459
+
460
+ zrUtil.each(instances, function (chart, id) {
456
461
  if (chart.group === groupId) {
457
462
  var canvas = chart.getRenderedCanvas(
458
463
  zrUtil.clone(opts)
@@ -468,7 +473,7 @@ return /******/ (function(modules) { // webpackBootstrap
468
473
  top: boundingRect.top
469
474
  });
470
475
  }
471
- }
476
+ });
472
477
 
473
478
  left *= dpr;
474
479
  top *= dpr;
@@ -500,8 +505,166 @@ return /******/ (function(modules) { // webpackBootstrap
500
505
  }
501
506
  };
502
507
 
503
- var updateMethods = {
508
+ /**
509
+ * Convert from logical coordinate system to pixel coordinate system.
510
+ * See CoordinateSystem#convertToPixel.
511
+ * @param {string|Object} finder
512
+ * If string, e.g., 'geo', means {geoIndex: 0}.
513
+ * If Object, could contain some of these properties below:
514
+ * {
515
+ * seriesIndex / seriesId / seriesName,
516
+ * geoIndex / geoId, geoName,
517
+ * bmapIndex / bmapId / bmapName,
518
+ * xAxisIndex / xAxisId / xAxisName,
519
+ * yAxisIndex / yAxisId / yAxisName,
520
+ * gridIndex / gridId / gridName,
521
+ * ... (can be extended)
522
+ * }
523
+ * @param {Array|number} value
524
+ * @return {Array|number} result
525
+ */
526
+ echartsProto.convertToPixel = zrUtil.curry(doConvertPixel, 'convertToPixel');
527
+
528
+ /**
529
+ * Convert from pixel coordinate system to logical coordinate system.
530
+ * See CoordinateSystem#convertFromPixel.
531
+ * @param {string|Object} finder
532
+ * If string, e.g., 'geo', means {geoIndex: 0}.
533
+ * If Object, could contain some of these properties below:
534
+ * {
535
+ * seriesIndex / seriesId / seriesName,
536
+ * geoIndex / geoId / geoName,
537
+ * bmapIndex / bmapId / bmapName,
538
+ * xAxisIndex / xAxisId / xAxisName,
539
+ * yAxisIndex / yAxisId / yAxisName
540
+ * gridIndex / gridId / gridName,
541
+ * ... (can be extended)
542
+ * }
543
+ * @param {Array|number} value
544
+ * @return {Array|number} result
545
+ */
546
+ echartsProto.convertFromPixel = zrUtil.curry(doConvertPixel, 'convertFromPixel');
547
+
548
+ function doConvertPixel(methodName, finder, value) {
549
+ var ecModel = this._model;
550
+ var coordSysList = this._coordSysMgr.getCoordinateSystems();
551
+ var result;
552
+
553
+ finder = modelUtil.parseFinder(ecModel, finder);
554
+
555
+ for (var i = 0; i < coordSysList.length; i++) {
556
+ var coordSys = coordSysList[i];
557
+ if (coordSys[methodName]
558
+ && (result = coordSys[methodName](ecModel, finder, value)) != null
559
+ ) {
560
+ return result;
561
+ }
562
+ }
563
+
564
+ if (true) {
565
+ console.warn(
566
+ 'No coordinate system that supports ' + methodName + ' found by the given finder.'
567
+ );
568
+ }
569
+ }
570
+
571
+ /**
572
+ * Is the specified coordinate systems or components contain the given pixel point.
573
+ * @param {string|Object} finder
574
+ * If string, e.g., 'geo', means {geoIndex: 0}.
575
+ * If Object, could contain some of these properties below:
576
+ * {
577
+ * seriesIndex / seriesId / seriesName,
578
+ * geoIndex / geoId / geoName,
579
+ * bmapIndex / bmapId / bmapName,
580
+ * xAxisIndex / xAxisId / xAxisName,
581
+ * yAxisIndex / yAxisId / yAxisName
582
+ * gridIndex / gridId / gridName,
583
+ * ... (can be extended)
584
+ * }
585
+ * @param {Array|number} value
586
+ * @return {boolean} result
587
+ */
588
+ echartsProto.containPixel = function (finder, value) {
589
+ var ecModel = this._model;
590
+ var result;
591
+
592
+ finder = modelUtil.parseFinder(ecModel, finder);
593
+
594
+ zrUtil.each(finder, function (models, key) {
595
+ key.indexOf('Models') >= 0 && zrUtil.each(models, function (model) {
596
+ var coordSys = model.coordinateSystem;
597
+ if (coordSys && coordSys.containPoint) {
598
+ result |= !!coordSys.containPoint(value);
599
+ }
600
+ else if (key === 'seriesModels') {
601
+ var view = this._chartsMap[model.__viewId];
602
+ if (view && view.containPoint) {
603
+ result |= view.containPoint(value, model);
604
+ }
605
+ else {
606
+ if (true) {
607
+ console.warn(key + ': ' + (view
608
+ ? 'The found component do not support containPoint.'
609
+ : 'No view mapping to the found component.'
610
+ ));
611
+ }
612
+ }
613
+ }
614
+ else {
615
+ if (true) {
616
+ console.warn(key + ': containPoint is not supported');
617
+ }
618
+ }
619
+ }, this);
620
+ }, this);
621
+
622
+ return !!result;
623
+ };
624
+
625
+ /**
626
+ * Get visual from series or data.
627
+ * @param {string|Object} finder
628
+ * If string, e.g., 'series', means {seriesIndex: 0}.
629
+ * If Object, could contain some of these properties below:
630
+ * {
631
+ * seriesIndex / seriesId / seriesName,
632
+ * dataIndex / dataIndexInside
633
+ * }
634
+ * If dataIndex is not specified, series visual will be fetched,
635
+ * but not data item visual.
636
+ * If all of seriesIndex, seriesId, seriesName are not specified,
637
+ * visual will be fetched from first series.
638
+ * @param {string} visualType 'color', 'symbol', 'symbolSize'
639
+ */
640
+ echartsProto.getVisual = function (finder, visualType) {
641
+ var ecModel = this._model;
642
+
643
+ finder = modelUtil.parseFinder(ecModel, finder, {defaultMainType: 'series'});
644
+
645
+ var seriesModel = finder.seriesModel;
646
+
647
+ if (true) {
648
+ if (!seriesModel) {
649
+ console.warn('There is no specified seires model');
650
+ }
651
+ }
504
652
 
653
+ var data = seriesModel.getData();
654
+
655
+ var dataIndexInside = finder.hasOwnProperty('dataIndexInside')
656
+ ? finder.dataIndexInside
657
+ : finder.hasOwnProperty('dataIndex')
658
+ ? data.indexOfRawIndex(finder.dataIndex)
659
+ : null;
660
+
661
+ return dataIndexInside != null
662
+ ? data.getItemVisual(dataIndexInside, visualType)
663
+ : data.getVisual(visualType);
664
+ };
665
+
666
+
667
+ var updateMethods = {
505
668
 
506
669
  /**
507
670
  * @param {Object} payload
@@ -703,15 +866,18 @@ return /******/ (function(modules) { // webpackBootstrap
703
866
 
704
867
  /**
705
868
  * Resize the chart
869
+ * @param {Object} opts
870
+ * @param {number} [opts.width] Can be 'auto' (the same as null/undefined)
871
+ * @param {number} [opts.height] Can be 'auto' (the same as null/undefined)
706
872
  */
707
- echartsProto.resize = function () {
873
+ echartsProto.resize = function (opts) {
708
874
  if (true) {
709
875
  zrUtil.assert(!this[IN_MAIN_PROCESS], '`resize` should not be called during main process.');
710
876
  }
711
877
 
712
878
  this[IN_MAIN_PROCESS] = true;
713
879
 
714
- this._zr.resize();
880
+ this._zr.resize(opts);
715
881
 
716
882
  var optionChanged = this._model && this._model.resetOption('media');
717
883
  updateMethods[optionChanged ? 'prepareAndUpdate' : 'update'].call(this);
@@ -1076,7 +1242,8 @@ return /******/ (function(modules) { // webpackBootstrap
1076
1242
  }
1077
1243
 
1078
1244
  var MOUSE_EVENT_NAMES = [
1079
- 'click', 'dblclick', 'mouseover', 'mouseout', 'mousemove', 'mousedown', 'mouseup', 'globalout'
1245
+ 'click', 'dblclick', 'mouseover', 'mouseout', 'mousemove',
1246
+ 'mousedown', 'mouseup', 'globalout', 'contextmenu'
1080
1247
  ];
1081
1248
  /**
1082
1249
  * @private
@@ -1086,17 +1253,27 @@ return /******/ (function(modules) { // webpackBootstrap
1086
1253
  this._zr.on(eveName, function (e) {
1087
1254
  var ecModel = this.getModel();
1088
1255
  var el = e.target;
1089
- if (el && el.dataIndex != null) {
1256
+ var params;
1257
+
1258
+ // no e.target when 'globalout'.
1259
+ if (eveName === 'globalout') {
1260
+ params = {};
1261
+ }
1262
+ else if (el && el.dataIndex != null) {
1090
1263
  var dataModel = el.dataModel || ecModel.getSeriesByIndex(el.seriesIndex);
1091
- var params = dataModel && dataModel.getDataParams(el.dataIndex, el.dataType) || {};
1092
- params.event = e;
1093
- params.type = eveName;
1094
- this.trigger(eveName, params);
1264
+ params = dataModel && dataModel.getDataParams(el.dataIndex, el.dataType) || {};
1095
1265
  }
1096
1266
  // If element has custom eventData of components
1097
1267
  else if (el && el.eventData) {
1098
- this.trigger(eveName, el.eventData);
1268
+ params = zrUtil.extend({}, el.eventData);
1099
1269
  }
1270
+
1271
+ if (params) {
1272
+ params.event = e;
1273
+ params.type = eveName;
1274
+ this.trigger(eveName, params);
1275
+ }
1276
+
1100
1277
  }, this);
1101
1278
  }, this);
1102
1279
 
@@ -1278,9 +1455,9 @@ return /******/ (function(modules) { // webpackBootstrap
1278
1455
  /**
1279
1456
  * @type {number}
1280
1457
  */
1281
- version: '3.2.3',
1458
+ version: '3.3.0',
1282
1459
  dependencies: {
1283
- zrender: '3.1.3'
1460
+ zrender: '3.2.0'
1284
1461
  }
1285
1462
  };
1286
1463
 
@@ -1301,12 +1478,13 @@ return /******/ (function(modules) { // webpackBootstrap
1301
1478
  if (connectedGroups[chart.group] && chart[STATUS_KEY] !== STATUS_PENDING) {
1302
1479
  var action = chart.makeActionFromEvent(event);
1303
1480
  var otherCharts = [];
1304
- for (var id in instances) {
1305
- var otherChart = instances[id];
1481
+
1482
+ zrUtil.each(instances, function (otherChart) {
1306
1483
  if (otherChart !== chart && otherChart.group === chart.group) {
1307
1484
  otherCharts.push(otherChart);
1308
1485
  }
1309
- }
1486
+ });
1487
+
1310
1488
  updateConnectedChartsStatus(otherCharts, STATUS_PENDING);
1311
1489
  each(otherCharts, function (otherChart) {
1312
1490
  if (otherChart[STATUS_KEY] !== STATUS_UPDATING) {
@@ -1323,6 +1501,12 @@ return /******/ (function(modules) { // webpackBootstrap
1323
1501
  * @param {HTMLDomElement} dom
1324
1502
  * @param {Object} [theme]
1325
1503
  * @param {Object} opts
1504
+ * @param {number} [opts.devicePixelRatio] Use window.devicePixelRatio by default
1505
+ * @param {string} [opts.renderer] Currently only 'canvas' is supported.
1506
+ * @param {number} [opts.width] Use clientWidth of the input `dom` by default.
1507
+ * Can be 'auto' (the same as null/undefined)
1508
+ * @param {number} [opts.height] Use clientHeight of the input `dom` by default.
1509
+ * Can be 'auto' (the same as null/undefined)
1326
1510
  */
1327
1511
  echarts.init = function (dom, theme, opts) {
1328
1512
  if (true) {
@@ -1768,13 +1952,12 @@ return /******/ (function(modules) { // webpackBootstrap
1768
1952
  if (firefox) browser.firefox = true, browser.version = firefox[1];
1769
1953
  // if (safari && (ua.match(/Safari/) || !!os.ios)) browser.safari = true;
1770
1954
  // if (webview) browser.webview = true;
1771
- if (ie) {
1772
- browser.ie = true; browser.version = ie[1];
1773
- }
1955
+
1774
1956
  if (ie) {
1775
1957
  browser.ie = true;
1776
1958
  browser.version = ie[1];
1777
1959
  }
1960
+
1778
1961
  if (edge) {
1779
1962
  browser.edge = true;
1780
1963
  browser.version = edge[1];
@@ -1815,11 +1998,23 @@ return /******/ (function(modules) { // webpackBootstrap
1815
1998
  * ECharts global model
1816
1999
  *
1817
2000
  * @module {echarts/model/Global}
1818
- *
1819
2001
  */
1820
2002
 
1821
2003
 
1822
2004
 
2005
+ /**
2006
+ * Caution: If the mechanism should be changed some day, these cases
2007
+ * should be considered:
2008
+ *
2009
+ * (1) In `merge option` mode, if using the same option to call `setOption`
2010
+ * many times, the result should be the same (try our best to ensure that).
2011
+ * (2) In `merge option` mode, if a component has no id/name specified, it
2012
+ * will be merged by index, and the result sequence of the components is
2013
+ * consistent to the original sequence.
2014
+ * (3) `reset` feature (in toolbox). Find detailed info in comments about
2015
+ * `mergeOption` in module:echarts/model/OptionManager.
2016
+ */
2017
+
1823
2018
  var zrUtil = __webpack_require__(4);
1824
2019
  var modelUtil = __webpack_require__(5);
1825
2020
  var Model = __webpack_require__(12);
@@ -1989,6 +2184,7 @@ return /******/ (function(modules) { // webpackBootstrap
1989
2184
  );
1990
2185
 
1991
2186
  if (componentModel && componentModel instanceof ComponentModelClass) {
2187
+ componentModel.name = resultItem.keyInfo.name;
1992
2188
  componentModel.mergeOption(newCptOption, this);
1993
2189
  componentModel.optionUpdated(newCptOption, false);
1994
2190
  }
@@ -2004,6 +2200,7 @@ return /******/ (function(modules) { // webpackBootstrap
2004
2200
  componentModel = new ComponentModelClass(
2005
2201
  newCptOption, this, this, extraOpt
2006
2202
  );
2203
+ zrUtil.extend(componentModel, extraOpt);
2007
2204
  componentModel.init(newCptOption, this, this, extraOpt);
2008
2205
  // Call optionUpdated after init.
2009
2206
  // newCptOption has been used as componentModel.option
@@ -2073,9 +2270,9 @@ return /******/ (function(modules) { // webpackBootstrap
2073
2270
  * @param {Object} condition
2074
2271
  * @param {string} condition.mainType
2075
2272
  * @param {string} [condition.subType] If ignore, only query by mainType
2076
- * @param {number} [condition.index] Either input index or id or name.
2077
- * @param {string} [condition.id] Either input index or id or name.
2078
- * @param {string} [condition.name] Either input index or id or name.
2273
+ * @param {number|Array.<number>} [condition.index] Either input index or id or name.
2274
+ * @param {string|Array.<string>} [condition.id] Either input index or id or name.
2275
+ * @param {string|Array.<string>} [condition.name] Either input index or id or name.
2079
2276
  * @return {Array.<module:echarts/model/Component>}
2080
2277
  */
2081
2278
  queryComponents: function (condition) {
@@ -2375,21 +2572,21 @@ return /******/ (function(modules) { // webpackBootstrap
2375
2572
  * @inner
2376
2573
  */
2377
2574
  function mergeTheme(option, theme) {
2378
- for (var name in theme) {
2575
+ zrUtil.each(theme, function (themeItem, name) {
2379
2576
  // 如果有 component model 则把具体的 merge 逻辑交给该 model 处理
2380
2577
  if (!ComponentModel.hasClass(name)) {
2381
- if (typeof theme[name] === 'object') {
2578
+ if (typeof themeItem === 'object') {
2382
2579
  option[name] = !option[name]
2383
- ? zrUtil.clone(theme[name])
2384
- : zrUtil.merge(option[name], theme[name], false);
2580
+ ? zrUtil.clone(themeItem)
2581
+ : zrUtil.merge(option[name], themeItem, false);
2385
2582
  }
2386
2583
  else {
2387
2584
  if (option[name] == null) {
2388
- option[name] = theme[name];
2585
+ option[name] = themeItem;
2389
2586
  }
2390
2587
  }
2391
2588
  }
2392
- }
2589
+ });
2393
2590
  }
2394
2591
 
2395
2592
  function initBase(baseOption) {
@@ -3448,6 +3645,113 @@ return /******/ (function(modules) { // webpackBootstrap
3448
3645
  }
3449
3646
  };
3450
3647
 
3648
+ /**
3649
+ * @param {module:echarts/data/List} data
3650
+ * @param {Object} payload Contains dataIndex (means rawIndex) / dataIndexInside / name
3651
+ * each of which can be Array or primary type.
3652
+ * @return {number|Array.<number>} dataIndex If not found, return undefined/null.
3653
+ */
3654
+ modelUtil.queryDataIndex = function (data, payload) {
3655
+ if (payload.dataIndexInside != null) {
3656
+ return payload.dataIndexInside;
3657
+ }
3658
+ else if (payload.dataIndex != null) {
3659
+ return zrUtil.isArray(payload.dataIndex)
3660
+ ? zrUtil.map(payload.dataIndex, function (value) {
3661
+ return data.indexOfRawIndex(value);
3662
+ })
3663
+ : data.indexOfRawIndex(payload.dataIndex);
3664
+ }
3665
+ else if (payload.name != null) {
3666
+ return zrUtil.isArray(payload.name)
3667
+ ? zrUtil.map(payload.name, function (value) {
3668
+ return data.indexOfName(value);
3669
+ })
3670
+ : data.indexOfName(payload.name);
3671
+ }
3672
+ };
3673
+
3674
+ /**
3675
+ * @param {module:echarts/model/Global} ecModel
3676
+ * @param {string|Object} finder
3677
+ * If string, e.g., 'geo', means {geoIndex: 0}.
3678
+ * If Object, could contain some of these properties below:
3679
+ * {
3680
+ * seriesIndex, seriesId, seriesName,
3681
+ * geoIndex, geoId, goeName,
3682
+ * bmapIndex, bmapId, bmapName,
3683
+ * xAxisIndex, xAxisId, xAxisName,
3684
+ * yAxisIndex, yAxisId, yAxisName,
3685
+ * gridIndex, gridId, gridName,
3686
+ * ... (can be extended)
3687
+ * }
3688
+ * Each properties can be number|string|Array.<number>|Array.<string>
3689
+ * For example, a finder could be
3690
+ * {
3691
+ * seriesIndex: 3,
3692
+ * geoId: ['aa', 'cc'],
3693
+ * gridName: ['xx', 'rr']
3694
+ * }
3695
+ * @param {Object} [opt]
3696
+ * @param {string} [opt.defaultMainType]
3697
+ * @return {Object} result like:
3698
+ * {
3699
+ * seriesModels: [seriesModel1, seriesModel2],
3700
+ * seriesModel: seriesModel1, // The first model
3701
+ * geoModels: [geoModel1, geoModel2],
3702
+ * geoModel: geoModel1, // The first model
3703
+ * ...
3704
+ * }
3705
+ */
3706
+ modelUtil.parseFinder = function (ecModel, finder, opt) {
3707
+ if (zrUtil.isString(finder)) {
3708
+ var obj = {};
3709
+ obj[finder + 'Index'] = 0;
3710
+ finder = obj;
3711
+ }
3712
+
3713
+ var defaultMainType = opt && opt.defaultMainType;
3714
+ if (defaultMainType
3715
+ && !has(finder, defaultMainType + 'Index')
3716
+ && !has(finder, defaultMainType + 'Id')
3717
+ && !has(finder, defaultMainType + 'Name')
3718
+ ) {
3719
+ finder[defaultMainType + 'Index'] = 0;
3720
+ }
3721
+
3722
+ var result = {};
3723
+
3724
+ zrUtil.each(finder, function (value, key) {
3725
+ var value = finder[key];
3726
+
3727
+ // Exclude 'dataIndex' and other illgal keys.
3728
+ if (key === 'dataIndex' || key === 'dataIndexInside') {
3729
+ result[key] = value;
3730
+ return;
3731
+ }
3732
+
3733
+ var parsedKey = key.match(/^(\w+)(Index|Id|Name)$/) || [];
3734
+ var mainType = parsedKey[1];
3735
+ var queryType = parsedKey[2];
3736
+
3737
+ if (!mainType || !queryType) {
3738
+ return;
3739
+ }
3740
+
3741
+ var queryParam = {mainType: mainType};
3742
+ queryParam[queryType.toLowerCase()] = value;
3743
+ var models = ecModel.queryComponents(queryParam);
3744
+ result[mainType + 'Models'] = models;
3745
+ result[mainType + 'Model'] = models[0];
3746
+ });
3747
+
3748
+ return result;
3749
+ };
3750
+
3751
+ function has(obj, prop) {
3752
+ return obj && obj.hasOwnProperty(prop);
3753
+ }
3754
+
3451
3755
  module.exports = modelUtil;
3452
3756
 
3453
3757
 
@@ -3736,7 +4040,8 @@ return /******/ (function(modules) { // webpackBootstrap
3736
4040
  if (precision == null) {
3737
4041
  precision = 10;
3738
4042
  }
3739
- // PENDING
4043
+ // Avoid range error
4044
+ precision = Math.min(Math.max(0, precision), 20);
3740
4045
  return +(+x).toFixed(precision);
3741
4046
  };
3742
4047
 
@@ -4179,6 +4484,16 @@ return /******/ (function(modules) { // webpackBootstrap
4179
4484
  * @alias module:echarts/core/BoundingRect
4180
4485
  */
4181
4486
  function BoundingRect(x, y, width, height) {
4487
+
4488
+ if (width < 0) {
4489
+ x = x + width;
4490
+ width = -width;
4491
+ }
4492
+ if (height < 0) {
4493
+ y = y + height;
4494
+ height = -height;
4495
+ }
4496
+
4182
4497
  /**
4183
4498
  * @type {number}
4184
4499
  */
@@ -4274,6 +4589,11 @@ return /******/ (function(modules) { // webpackBootstrap
4274
4589
  * @return {boolean}
4275
4590
  */
4276
4591
  intersect: function (b) {
4592
+ if (!(b instanceof BoundingRect)) {
4593
+ // Normalize negative width/height.
4594
+ b = BoundingRect.create(b);
4595
+ }
4596
+
4277
4597
  var a = this;
4278
4598
  var ax0 = a.x;
4279
4599
  var ax1 = a.x + a.width;
@@ -4311,9 +4631,30 @@ return /******/ (function(modules) { // webpackBootstrap
4311
4631
  this.y = other.y;
4312
4632
  this.width = other.width;
4313
4633
  this.height = other.height;
4634
+ },
4635
+
4636
+ plain: function () {
4637
+ return {
4638
+ x: this.x,
4639
+ y: this.y,
4640
+ width: this.width,
4641
+ height: this.height
4642
+ };
4314
4643
  }
4315
4644
  };
4316
4645
 
4646
+ /**
4647
+ * @param {Object|module:zrender/core/BoundingRect} rect
4648
+ * @param {number} rect.x
4649
+ * @param {number} rect.y
4650
+ * @param {number} rect.width
4651
+ * @param {number} rect.height
4652
+ * @return {module:zrender/core/BoundingRect}
4653
+ */
4654
+ BoundingRect.create = function (rect) {
4655
+ return new BoundingRect(rect.x, rect.y, rect.width, rect.height);
4656
+ };
4657
+
4317
4658
  module.exports = BoundingRect;
4318
4659
 
4319
4660
 
@@ -4956,10 +5297,22 @@ return /******/ (function(modules) { // webpackBootstrap
4956
5297
  /**
4957
5298
  * @public
4958
5299
  */
4959
- clazz.enableClassExtend = function (RootClass) {
5300
+ clazz.enableClassExtend = function (RootClass, mandatoryMethods) {
4960
5301
 
4961
5302
  RootClass.$constructor = RootClass;
4962
5303
  RootClass.extend = function (proto) {
5304
+
5305
+ if (true) {
5306
+ zrUtil.each(mandatoryMethods, function (method) {
5307
+ if (!proto[method]) {
5308
+ console.warn(
5309
+ 'Method `' + method + '` should be implemented'
5310
+ + (proto.type ? ' in ' + proto.type : '') + '.'
5311
+ );
5312
+ }
5313
+ });
5314
+ }
5315
+
4963
5316
  var superClass = this;
4964
5317
  var ExtendedClass = function () {
4965
5318
  if (!proto.$constructor) {
@@ -5165,15 +5518,20 @@ return /******/ (function(modules) { // webpackBootstrap
5165
5518
  module.exports = {
5166
5519
  getLineStyle: function (excludes) {
5167
5520
  var style = getLineStyle.call(this, excludes);
5168
- var lineDash = this.getLineDash();
5521
+ var lineDash = this.getLineDash(style.lineWidth);
5169
5522
  lineDash && (style.lineDash = lineDash);
5170
5523
  return style;
5171
5524
  },
5172
5525
 
5173
- getLineDash: function () {
5526
+ getLineDash: function (lineWidth) {
5527
+ if (lineWidth == null) {
5528
+ lineWidth = 1;
5529
+ }
5174
5530
  var lineType = this.get('type');
5531
+ var dotSize = Math.max(lineWidth, 2);
5532
+ var dashSize = lineWidth * 4;
5175
5533
  return (lineType === 'solid' || lineType == null) ? null
5176
- : (lineType === 'dashed' ? [5, 5] : [2, 2]);
5534
+ : (lineType === 'dashed' ? [dashSize, dashSize] : [dotSize, dotSize]);
5177
5535
  }
5178
5536
  };
5179
5537
 
@@ -5301,7 +5659,9 @@ return /******/ (function(modules) { // webpackBootstrap
5301
5659
  ['shadowBlur'],
5302
5660
  ['shadowOffsetX'],
5303
5661
  ['shadowOffsetY'],
5304
- ['shadowColor']
5662
+ ['shadowColor'],
5663
+ ['textPosition'],
5664
+ ['textAlign']
5305
5665
  ]
5306
5666
  );
5307
5667
  module.exports = {
@@ -5415,9 +5775,6 @@ return /******/ (function(modules) { // webpackBootstrap
5415
5775
  $constructor: function (option, parentModel, ecModel, extraOpt) {
5416
5776
  Model.call(this, option, parentModel, ecModel, extraOpt);
5417
5777
 
5418
- // Set dependentModels, componentIndex, name, id, mainType, subType.
5419
- zrUtil.extend(this, extraOpt);
5420
-
5421
5778
  this.uid = componentUtil.getUID('componentModel');
5422
5779
  },
5423
5780
 
@@ -5440,7 +5797,7 @@ return /******/ (function(modules) { // webpackBootstrap
5440
5797
  }
5441
5798
  },
5442
5799
 
5443
- mergeOption: function (option) {
5800
+ mergeOption: function (option, extraOpt) {
5444
5801
  zrUtil.merge(this.option, option, true);
5445
5802
 
5446
5803
  var layoutMode = this.layoutMode;
@@ -5469,6 +5826,14 @@ return /******/ (function(modules) { // webpackBootstrap
5469
5826
  this.__defaultOption = defaultOption;
5470
5827
  }
5471
5828
  return this.__defaultOption;
5829
+ },
5830
+
5831
+ getReferringComponents: function (mainType) {
5832
+ return this.ecModel.queryComponents({
5833
+ mainType: mainType,
5834
+ index: this.get(mainType + 'Index', true),
5835
+ id: this.get(mainType + 'Id', true)
5836
+ });
5472
5837
  }
5473
5838
 
5474
5839
  });
@@ -6236,11 +6601,41 @@ return /******/ (function(modules) { // webpackBootstrap
6236
6601
 
6237
6602
  /***/ },
6238
6603
  /* 26 */
6239
- /***/ function(module, exports) {
6604
+ /***/ function(module, exports, __webpack_require__) {
6240
6605
 
6241
6606
  'use strict';
6242
6607
 
6243
6608
 
6609
+ var zrUtil = __webpack_require__(4);
6610
+
6611
+ /**
6612
+ * Interface of Coordinate System Class
6613
+ *
6614
+ * create:
6615
+ * @param {module:echarts/model/Global} ecModel
6616
+ * @param {module:echarts/ExtensionAPI} api
6617
+ * @return {Object} coordinate system instance
6618
+ *
6619
+ * update:
6620
+ * @param {module:echarts/model/Global} ecModel
6621
+ * @param {module:echarts/ExtensionAPI} api
6622
+ *
6623
+ * convertToPixel:
6624
+ * convertFromPixel:
6625
+ * These two methods is also responsible for determine whether this
6626
+ * coodinate system is applicable to the given `finder`.
6627
+ * Each coordinate system will be tried, util one returns none
6628
+ * null/undefined value.
6629
+ * @param {module:echarts/model/Global} ecModel
6630
+ * @param {Object} finder
6631
+ * @param {Array|number} value
6632
+ * @return {Array|number} convert result.
6633
+ *
6634
+ * containPoint:
6635
+ * @param {Array.<number>} point In pixel coordinate system.
6636
+ * @return {boolean}
6637
+ */
6638
+
6244
6639
  var coordinateSystemCreators = {};
6245
6640
 
6246
6641
  function CoordinateSystemManager() {
@@ -6254,20 +6649,23 @@ return /******/ (function(modules) { // webpackBootstrap
6254
6649
 
6255
6650
  create: function (ecModel, api) {
6256
6651
  var coordinateSystems = [];
6257
- for (var type in coordinateSystemCreators) {
6258
- var list = coordinateSystemCreators[type].create(ecModel, api);
6259
- list && (coordinateSystems = coordinateSystems.concat(list));
6260
- }
6652
+ zrUtil.each(coordinateSystemCreators, function (creater, type) {
6653
+ var list = creater.create(ecModel, api);
6654
+ coordinateSystems = coordinateSystems.concat(list || []);
6655
+ });
6261
6656
 
6262
6657
  this._coordinateSystems = coordinateSystems;
6263
6658
  },
6264
6659
 
6265
6660
  update: function (ecModel, api) {
6266
- var coordinateSystems = this._coordinateSystems;
6267
- for (var i = 0; i < coordinateSystems.length; i++) {
6661
+ zrUtil.each(this._coordinateSystems, function (coordSys) {
6268
6662
  // FIXME MUST have
6269
- coordinateSystems[i].update && coordinateSystems[i].update(ecModel, api);
6270
- }
6663
+ coordSys.update && coordSys.update(ecModel, api);
6664
+ });
6665
+ },
6666
+
6667
+ getCoordinateSystems: function () {
6668
+ return this._coordinateSystems.slice();
6271
6669
  }
6272
6670
  };
6273
6671
 
@@ -6913,21 +7311,27 @@ return /******/ (function(modules) { // webpackBootstrap
6913
7311
  */
6914
7312
  formatTooltip: function (dataIndex, multipleSeries, dataType) {
6915
7313
  function formatArrayValue(value) {
6916
- return zrUtil.map(value, function (val, idx) {
7314
+ var result = [];
7315
+
7316
+ zrUtil.each(value, function (val, idx) {
6917
7317
  var dimInfo = data.getDimensionInfo(idx);
6918
7318
  var dimType = dimInfo && dimInfo.type;
7319
+ var valStr;
7320
+
6919
7321
  if (dimType === 'ordinal') {
6920
- return val;
7322
+ valStr = val + '';
6921
7323
  }
6922
7324
  else if (dimType === 'time') {
6923
- return multipleSeries ? '' : formatUtil.formatTime('yyyy/mm/dd hh:mm:ss', val);
7325
+ valStr = multipleSeries ? '' : formatUtil.formatTime('yyyy/mm/dd hh:mm:ss', val);
6924
7326
  }
6925
7327
  else {
6926
- return addCommas(val);
7328
+ valStr = addCommas(val);
6927
7329
  }
6928
- }).filter(function (val) {
6929
- return !!val;
6930
- }).join(', ');
7330
+
7331
+ valStr && result.push(valStr);
7332
+ });
7333
+
7334
+ return result.join(', ');
6931
7335
  }
6932
7336
 
6933
7337
  var data = this._data;
@@ -6986,7 +7390,23 @@ return /******/ (function(modules) { // webpackBootstrap
6986
7390
  return color;
6987
7391
  },
6988
7392
 
6989
- getAxisTooltipDataIndex: null
7393
+ /**
7394
+ * Get data indices for show tooltip content. See tooltip.
7395
+ * @abstract
7396
+ * @param {Array.<string>|string} dim
7397
+ * @param {Array.<number>} value
7398
+ * @param {module:echarts/coord/single/SingleAxis} baseAxis
7399
+ * @return {Array.<number>} data indices.
7400
+ */
7401
+ getAxisTooltipDataIndex: null,
7402
+
7403
+ /**
7404
+ * See tooltip.
7405
+ * @abstract
7406
+ * @param {number} dataIndex
7407
+ * @return {Array.<number>} Point of tooltip. null/undefined can be returned.
7408
+ */
7409
+ getTooltipPosition: null
6990
7410
  });
6991
7411
 
6992
7412
  zrUtil.mixin(SeriesModel, modelUtil.dataFormatMixin);
@@ -7028,6 +7448,7 @@ return /******/ (function(modules) { // webpackBootstrap
7028
7448
  render: function (componentModel, ecModel, api, payload) {},
7029
7449
 
7030
7450
  dispose: function () {}
7451
+
7031
7452
  };
7032
7453
 
7033
7454
  var componentProto = Component.prototype;
@@ -7087,7 +7508,9 @@ return /******/ (function(modules) { // webpackBootstrap
7087
7508
  Element.call(this, opts);
7088
7509
 
7089
7510
  for (var key in opts) {
7090
- this[key] = opts[key];
7511
+ if (opts.hasOwnProperty(key)) {
7512
+ this[key] = opts[key];
7513
+ }
7091
7514
  }
7092
7515
 
7093
7516
  this._children = [];
@@ -8433,6 +8856,10 @@ return /******/ (function(modules) { // webpackBootstrap
8433
8856
  var objShallow = {};
8434
8857
  var propertyCount = 0;
8435
8858
  for (var name in target) {
8859
+ if (!target.hasOwnProperty(name)) {
8860
+ continue;
8861
+ }
8862
+
8436
8863
  if (source[name] != null) {
8437
8864
  if (isObject(target[name]) && !util.isArrayLike(target[name])) {
8438
8865
  this._animateToShallow(
@@ -8954,6 +9381,10 @@ return /******/ (function(modules) { // webpackBootstrap
8954
9381
  when: function(time /* ms */, props) {
8955
9382
  var tracks = this._tracks;
8956
9383
  for (var propName in props) {
9384
+ if (!props.hasOwnProperty(propName)) {
9385
+ continue;
9386
+ }
9387
+
8957
9388
  if (!tracks[propName]) {
8958
9389
  tracks[propName] = [];
8959
9390
  // Invalid value
@@ -9022,6 +9453,9 @@ return /******/ (function(modules) { // webpackBootstrap
9022
9453
 
9023
9454
  var lastClip;
9024
9455
  for (var propName in this._tracks) {
9456
+ if (!this._tracks.hasOwnProperty(propName)) {
9457
+ continue;
9458
+ }
9025
9459
  var clip = createTrackClip(
9026
9460
  this, easing, oneTrackDone,
9027
9461
  this._tracks[propName], propName
@@ -10082,7 +10516,7 @@ return /******/ (function(modules) { // webpackBootstrap
10082
10516
  return function(mes) {
10083
10517
  document.getElementById('wrong-message').innerHTML =
10084
10518
  mes + ' ' + (new Date() - 0)
10085
- + '<br/>'
10519
+ + '<br/>'
10086
10520
  + document.getElementById('wrong-message').innerHTML;
10087
10521
  };
10088
10522
  */
@@ -10130,6 +10564,8 @@ return /******/ (function(modules) { // webpackBootstrap
10130
10564
  var Group = __webpack_require__(30);
10131
10565
  var componentUtil = __webpack_require__(20);
10132
10566
  var clazzUtil = __webpack_require__(13);
10567
+ var modelUtil = __webpack_require__(5);
10568
+ var zrUtil = __webpack_require__(4);
10133
10569
 
10134
10570
  function Chart() {
10135
10571
 
@@ -10203,6 +10639,15 @@ return /******/ (function(modules) { // webpackBootstrap
10203
10639
  * @param {module:echarts/ExtensionAPI} api
10204
10640
  */
10205
10641
  dispose: function () {}
10642
+
10643
+ /**
10644
+ * The view contains the given point.
10645
+ * @interface
10646
+ * @param {Array.<number>} point
10647
+ * @return {boolean}
10648
+ */
10649
+ // containPoint: function () {}
10650
+
10206
10651
  };
10207
10652
 
10208
10653
  var chartProto = Chart.prototype;
@@ -10235,21 +10680,12 @@ return /******/ (function(modules) { // webpackBootstrap
10235
10680
  * @inner
10236
10681
  */
10237
10682
  function toggleHighlight(data, payload, state) {
10238
- var dataIndex = payload && payload.dataIndex;
10239
- var name = payload && payload.name;
10683
+ var dataIndex = modelUtil.queryDataIndex(data, payload);
10240
10684
 
10241
10685
  if (dataIndex != null) {
10242
- var dataIndices = dataIndex instanceof Array ? dataIndex : [dataIndex];
10243
- for (var i = 0, len = dataIndices.length; i < len; i++) {
10244
- elSetState(data.getItemGraphicEl(dataIndices[i]), state);
10245
- }
10246
- }
10247
- else if (name) {
10248
- var names = name instanceof Array ? name : [name];
10249
- for (var i = 0, len = names.length; i < len; i++) {
10250
- var dataIndex = data.indexOfName(names[i]);
10251
- elSetState(data.getItemGraphicEl(dataIndex), state);
10252
- }
10686
+ zrUtil.each(modelUtil.normalizeToArray(dataIndex), function (dataIdx) {
10687
+ elSetState(data.getItemGraphicEl(dataIdx), state);
10688
+ });
10253
10689
  }
10254
10690
  else {
10255
10691
  data.eachItemGraphicEl(function (el) {
@@ -10259,7 +10695,7 @@ return /******/ (function(modules) { // webpackBootstrap
10259
10695
  }
10260
10696
 
10261
10697
  // Enable Chart.extend.
10262
- clazzUtil.enableClassExtend(Chart);
10698
+ clazzUtil.enableClassExtend(Chart, ['dispose']);
10263
10699
 
10264
10700
  // Add capability of registerClass, getClass, hasClass, registerSubTypeDefaulter and so on.
10265
10701
  clazzUtil.enableClassManagement(Chart, {registerWhenExtend: true});
@@ -11518,7 +11954,9 @@ return /******/ (function(modules) { // webpackBootstrap
11518
11954
  if (shape) {
11519
11955
  if (zrUtil.isObject(key)) {
11520
11956
  for (var name in key) {
11521
- shape[name] = key[name];
11957
+ if (key.hasOwnProperty(name)) {
11958
+ shape[name] = key[name];
11959
+ }
11522
11960
  }
11523
11961
  }
11524
11962
  else {
@@ -16190,10 +16628,11 @@ return /******/ (function(modules) { // webpackBootstrap
16190
16628
  var instances = {}; // ZRender实例map索引
16191
16629
 
16192
16630
  var zrender = {};
16631
+
16193
16632
  /**
16194
16633
  * @type {string}
16195
16634
  */
16196
- zrender.version = '3.1.3';
16635
+ zrender.version = '3.2.0';
16197
16636
 
16198
16637
  /**
16199
16638
  * Initializing a zrender instance
@@ -16201,6 +16640,8 @@ return /******/ (function(modules) { // webpackBootstrap
16201
16640
  * @param {Object} opts
16202
16641
  * @param {string} [opts.renderer='canvas'] 'canvas' or 'svg'
16203
16642
  * @param {number} [opts.devicePixelRatio]
16643
+ * @param {number|string} [opts.width] Can be 'auto' (the same as null/undefined)
16644
+ * @param {number|string} [opts.height] Can be 'auto' (the same as null/undefined)
16204
16645
  * @return {module:zrender/ZRender}
16205
16646
  */
16206
16647
  zrender.init = function(dom, opts) {
@@ -16219,7 +16660,9 @@ return /******/ (function(modules) { // webpackBootstrap
16219
16660
  }
16220
16661
  else {
16221
16662
  for (var key in instances) {
16222
- instances[key].dispose();
16663
+ if (instances.hasOwnProperty(key)) {
16664
+ instances[key].dispose();
16665
+ }
16223
16666
  }
16224
16667
  instances = {};
16225
16668
  }
@@ -16255,6 +16698,8 @@ return /******/ (function(modules) { // webpackBootstrap
16255
16698
  * @param {Object} opts
16256
16699
  * @param {string} [opts.renderer='canvas'] 'canvas' or 'svg'
16257
16700
  * @param {number} [opts.devicePixelRatio]
16701
+ * @param {number} [opts.width] Can be 'auto' (the same as null/undefined)
16702
+ * @param {number} [opts.height] Can be 'auto' (the same as null/undefined)
16258
16703
  */
16259
16704
  var ZRender = function(id, dom, opts) {
16260
16705
 
@@ -16289,7 +16734,7 @@ return /******/ (function(modules) { // webpackBootstrap
16289
16734
  this.painter = painter;
16290
16735
 
16291
16736
  var handerProxy = !env.node ? new HandlerProxy(painter.getViewportRoot()) : null;
16292
- this.handler = new Handler(storage, painter, handerProxy);
16737
+ this.handler = new Handler(storage, painter, handerProxy, painter.root);
16293
16738
 
16294
16739
  /**
16295
16740
  * @type {module:zrender/animation/Animation}
@@ -16449,9 +16894,13 @@ return /******/ (function(modules) { // webpackBootstrap
16449
16894
  /**
16450
16895
  * Resize the canvas.
16451
16896
  * Should be invoked when container size is changed
16897
+ * @param {Object} [opts]
16898
+ * @param {number|string} [opts.width] Can be 'auto' (the same as null/undefined)
16899
+ * @param {number|string} [opts.height] Can be 'auto' (the same as null/undefined)
16452
16900
  */
16453
- resize: function() {
16454
- this.painter.resize();
16901
+ resize: function(opts) {
16902
+ opts = opts || {};
16903
+ this.painter.resize(opts.width, opts.height);
16455
16904
  this.handler.resize();
16456
16905
  },
16457
16906
 
@@ -16611,24 +17060,28 @@ return /******/ (function(modules) { // webpackBootstrap
16611
17060
 
16612
17061
  var handlerNames = [
16613
17062
  'click', 'dblclick', 'mousewheel', 'mouseout',
16614
- 'mouseup', 'mousedown', 'mousemove'
17063
+ 'mouseup', 'mousedown', 'mousemove', 'contextmenu'
16615
17064
  ];
16616
17065
  /**
16617
17066
  * @alias module:zrender/Handler
16618
17067
  * @constructor
16619
17068
  * @extends module:zrender/mixin/Eventful
16620
- * @param {HTMLElement} root Main HTML element for painting.
16621
17069
  * @param {module:zrender/Storage} storage Storage instance.
16622
17070
  * @param {module:zrender/Painter} painter Painter instance.
17071
+ * @param {module:zrender/dom/HandlerProxy} proxy HandlerProxy instance.
17072
+ * @param {HTMLElement} painterRoot painter.root (not painter.getViewportRoot()).
16623
17073
  */
16624
- var Handler = function(storage, painter, proxy) {
17074
+ var Handler = function(storage, painter, proxy, painterRoot) {
16625
17075
  Eventful.call(this);
16626
17076
 
16627
17077
  this.storage = storage;
16628
17078
 
16629
17079
  this.painter = painter;
16630
17080
 
17081
+ this.painterRoot = painterRoot;
17082
+
16631
17083
  proxy = proxy || new EmptyProxy();
17084
+
16632
17085
  /**
16633
17086
  * Proxy of event. can be Dom, WebGLSurface, etc.
16634
17087
  */
@@ -16702,9 +17155,21 @@ return /******/ (function(modules) { // webpackBootstrap
16702
17155
  mouseout: function (event) {
16703
17156
  this.dispatchToElement(this._hovered, 'mouseout', event);
16704
17157
 
16705
- this.trigger('globalout', {
16706
- event: event
16707
- });
17158
+ // There might be some doms created by upper layer application
17159
+ // at the same level of painter.getViewportRoot() (e.g., tooltip
17160
+ // dom created by echarts), where 'globalout' event should not
17161
+ // be triggered when mouse enters these doms. (But 'mouseout'
17162
+ // should be triggered at the original hovered element as usual).
17163
+ var element = event.toElement || event.relatedTarget;
17164
+ var innerDom;
17165
+ do {
17166
+ element = element && element.parentNode;
17167
+ }
17168
+ while (element && element.nodeType != 9 && !(
17169
+ innerDom = element === this.painterRoot
17170
+ ));
17171
+
17172
+ !innerDom && this.trigger('globalout', {event: event});
16708
17173
  },
16709
17174
 
16710
17175
  /**
@@ -16810,7 +17275,7 @@ return /******/ (function(modules) { // webpackBootstrap
16810
17275
  };
16811
17276
 
16812
17277
  // Common handlers
16813
- util.each(['click', 'mousedown', 'mouseup', 'mousewheel', 'dblclick'], function (name) {
17278
+ util.each(['click', 'mousedown', 'mouseup', 'mousewheel', 'dblclick', 'contextmenu'], function (name) {
16814
17279
  Handler.prototype[name] = function (event) {
16815
17280
  // Find hover again to avoid click event is dispatched manually. Or click is triggered without mouseover
16816
17281
  var hovered = this.findHover(event.zrX, event.zrY, null);
@@ -18168,6 +18633,7 @@ return /******/ (function(modules) { // webpackBootstrap
18168
18633
 
18169
18634
 
18170
18635
  var Eventful = __webpack_require__(33);
18636
+ var env = __webpack_require__(2);
18171
18637
 
18172
18638
  var isDomLevel2 = (typeof window !== 'undefined') && !!window.addEventListener;
18173
18639
 
@@ -18177,12 +18643,51 @@ return /******/ (function(modules) { // webpackBootstrap
18177
18643
  }
18178
18644
 
18179
18645
  function clientToLocal(el, e, out) {
18180
- // clientX/clientY is according to view port.
18646
+ // According to the W3C Working Draft, offsetX and offsetY should be relative
18647
+ // to the padding edge of the target element. The only browser using this convention
18648
+ // is IE. Webkit uses the border edge, Opera uses the content edge, and FireFox does
18649
+ // not support the properties.
18650
+ // (see http://www.jacklmoore.com/notes/mouse-position/)
18651
+ // In zr painter.dom, padding edge equals to border edge.
18652
+
18653
+ // FIXME
18654
+ // When mousemove event triggered on ec tooltip, target is not zr painter.dom, and
18655
+ // offsetX/Y is relative to e.target, where the calculation of zrX/Y via offsetX/Y
18656
+ // is too complex. So css-transfrom dont support in this case temporarily.
18657
+
18658
+ if (!e.currentTarget || el !== e.currentTarget) {
18659
+ defaultGetZrXY(el, e, out);
18660
+ }
18661
+ // Caution: In FireFox, layerX/layerY Mouse position relative to the closest positioned
18662
+ // ancestor element, so we should make sure el is positioned (e.g., not position:static).
18663
+ // BTW1, Webkit don't return the same results as FF in non-simple cases (like add
18664
+ // zoom-factor, overflow / opacity layers, transforms ...)
18665
+ // BTW2, (ev.offsetY || ev.pageY - $(ev.target).offset().top) is not correct in preserve-3d.
18666
+ // <https://bugs.jquery.com/ticket/8523#comment:14>
18667
+ // BTW3, In ff, offsetX/offsetY is always 0.
18668
+ else if (env.browser.firefox && e.layerX != null && e.layerX !== e.offsetX) {
18669
+ out.zrX = e.layerX;
18670
+ out.zrY = e.layerY;
18671
+ }
18672
+ // For IE6+, chrome, safari, opera. (When will ff support offsetX?)
18673
+ else if (e.offsetX != null) {
18674
+ out.zrX = e.offsetX;
18675
+ out.zrY = e.offsetY;
18676
+ }
18677
+ // For some other device, e.g., IOS safari.
18678
+ else {
18679
+ defaultGetZrXY(el, e, out);
18680
+ }
18681
+
18682
+ return out;
18683
+ }
18684
+
18685
+ function defaultGetZrXY(el, e, out) {
18686
+ // This well-known method below does not support css transform.
18181
18687
  var box = getBoundingClientRect(el);
18182
18688
  out = out || {};
18183
18689
  out.zrX = e.clientX - box.left;
18184
18690
  out.zrY = e.clientY - box.top;
18185
- return out;
18186
18691
  }
18187
18692
 
18188
18693
  /**
@@ -18298,7 +18803,7 @@ return /******/ (function(modules) { // webpackBootstrap
18298
18803
 
18299
18804
  var mouseHandlerNames = [
18300
18805
  'click', 'dblclick', 'mousewheel', 'mouseout',
18301
- 'mouseup', 'mousedown', 'mousemove'
18806
+ 'mouseup', 'mousedown', 'mousemove', 'contextmenu'
18302
18807
  ];
18303
18808
 
18304
18809
  var touchHandlerNames = [
@@ -18453,7 +18958,7 @@ return /******/ (function(modules) { // webpackBootstrap
18453
18958
  };
18454
18959
 
18455
18960
  // Common handlers
18456
- zrUtil.each(['click', 'mousedown', 'mouseup', 'mousewheel', 'dblclick'], function (name) {
18961
+ zrUtil.each(['click', 'mousedown', 'mouseup', 'mousewheel', 'dblclick', 'contextmenu'], function (name) {
18457
18962
  domHandlers[name] = function (event) {
18458
18963
  event = normalizeEvent(this.dom, event);
18459
18964
  this.trigger(name, event);
@@ -18784,13 +19289,18 @@ return /******/ (function(modules) { // webpackBootstrap
18784
19289
 
18785
19290
  function createRoot(width, height) {
18786
19291
  var domRoot = document.createElement('div');
18787
- var domRootStyle = domRoot.style;
18788
19292
 
18789
19293
  // domRoot.onselectstart = returnFalse; // 避免页面选中的尴尬
18790
- domRootStyle.position = 'relative';
18791
- domRootStyle.overflow = 'hidden';
18792
- domRootStyle.width = width + 'px';
18793
- domRootStyle.height = height + 'px';
19294
+ domRoot.style.cssText = [
19295
+ 'position:relative',
19296
+ 'overflow:hidden',
19297
+ 'width:' + width + 'px',
19298
+ 'height:' + height + 'px',
19299
+ 'padding:0',
19300
+ 'margin:0',
19301
+ 'border-width:0'
19302
+ ].join(';') + ';';
19303
+
18794
19304
  return domRoot;
18795
19305
  }
18796
19306
 
@@ -18806,7 +19316,7 @@ return /******/ (function(modules) { // webpackBootstrap
18806
19316
  var singleCanvas = !root.nodeName // In node ?
18807
19317
  || root.nodeName.toUpperCase() === 'CANVAS';
18808
19318
 
18809
- opts = opts || {};
19319
+ this._opts = opts = util.extend({}, opts || {});
18810
19320
 
18811
19321
  /**
18812
19322
  * @type {number}
@@ -18858,8 +19368,8 @@ return /******/ (function(modules) { // webpackBootstrap
18858
19368
  this._layerConfig = {};
18859
19369
 
18860
19370
  if (!singleCanvas) {
18861
- this._width = this._getWidth();
18862
- this._height = this._getHeight();
19371
+ this._width = this._getSize(0);
19372
+ this._height = this._getSize(1);
18863
19373
 
18864
19374
  var domRoot = this._domRoot = createRoot(
18865
19375
  this._width, this._height
@@ -19564,8 +20074,13 @@ return /******/ (function(modules) { // webpackBootstrap
19564
20074
  // FIXME Why ?
19565
20075
  domRoot.style.display = 'none';
19566
20076
 
19567
- width = width || this._getWidth();
19568
- height = height || this._getHeight();
20077
+ // Save input w/h
20078
+ var opts = this._opts;
20079
+ width != null && (opts.width = width);
20080
+ height != null && (opts.height = height);
20081
+
20082
+ width = this._getSize(0);
20083
+ height = this._getSize(1);
19569
20084
 
19570
20085
  domRoot.style.display = '';
19571
20086
 
@@ -19575,8 +20090,13 @@ return /******/ (function(modules) { // webpackBootstrap
19575
20090
  domRoot.style.height = height + 'px';
19576
20091
 
19577
20092
  for (var id in this._layers) {
19578
- this._layers[id].resize(width, height);
20093
+ if (this._layers.hasOwnProperty(id)) {
20094
+ this._layers[id].resize(width, height);
20095
+ }
19579
20096
  }
20097
+ util.each(this._progressiveLayers, function (layer) {
20098
+ layer.resize(width, height);
20099
+ });
19580
20100
 
19581
20101
  this.refresh(true);
19582
20102
  }
@@ -19652,23 +20172,25 @@ return /******/ (function(modules) { // webpackBootstrap
19652
20172
  return this._height;
19653
20173
  },
19654
20174
 
19655
- _getWidth: function () {
19656
- var root = this.root;
19657
- var stl = document.defaultView.getComputedStyle(root);
20175
+ _getSize: function (whIdx) {
20176
+ var opts = this._opts;
20177
+ var wh = ['width', 'height'][whIdx];
20178
+ var cwh = ['clientWidth', 'clientHeight'][whIdx];
20179
+ var plt = ['paddingLeft', 'paddingTop'][whIdx];
20180
+ var prb = ['paddingRight', 'paddingBottom'][whIdx];
19658
20181
 
19659
- // FIXME Better way to get the width and height when element has not been append to the document
19660
- return ((root.clientWidth || parseInt10(stl.width) || parseInt10(root.style.width))
19661
- - (parseInt10(stl.paddingLeft) || 0)
19662
- - (parseInt10(stl.paddingRight) || 0)) | 0;
19663
- },
20182
+ if (opts[wh] != null && opts[wh] !== 'auto') {
20183
+ return parseFloat(opts[wh]);
20184
+ }
19664
20185
 
19665
- _getHeight: function () {
19666
20186
  var root = this.root;
19667
20187
  var stl = document.defaultView.getComputedStyle(root);
19668
20188
 
19669
- return ((root.clientHeight || parseInt10(stl.height) || parseInt10(root.style.height))
19670
- - (parseInt10(stl.paddingTop) || 0)
19671
- - (parseInt10(stl.paddingBottom) || 0)) | 0;
20189
+ return (
20190
+ (root[cwh] || parseInt10(stl[wh]) || parseInt10(root.style[wh]))
20191
+ - (parseInt10(stl[plt]) || 0)
20192
+ - (parseInt10(stl[prb]) || 0)
20193
+ ) | 0;
19672
20194
  },
19673
20195
 
19674
20196
  _pathToImage: function (id, path, width, height, dpr) {
@@ -19809,6 +20331,9 @@ return /******/ (function(modules) { // webpackBootstrap
19809
20331
  domStyle['user-select'] = 'none';
19810
20332
  domStyle['-webkit-touch-callout'] = 'none';
19811
20333
  domStyle['-webkit-tap-highlight-color'] = 'rgba(0,0,0,0)';
20334
+ domStyle['padding'] = 0;
20335
+ domStyle['margin'] = 0;
20336
+ domStyle['border-width'] = 0;
19812
20337
  }
19813
20338
 
19814
20339
  this.domBack = null;
@@ -20817,6 +21342,13 @@ return /******/ (function(modules) { // webpackBootstrap
20817
21342
  listProto.indexOfRawIndex = function (rawIndex) {
20818
21343
  // Indices are ascending
20819
21344
  var indices = this.indices;
21345
+
21346
+ // If rawIndex === dataIndex
21347
+ var rawDataIndex = indices[rawIndex];
21348
+ if (rawDataIndex != null && rawDataIndex === rawIndex) {
21349
+ return rawIndex;
21350
+ }
21351
+
20820
21352
  var left = 0;
20821
21353
  var right = indices.length - 1;
20822
21354
  while (left <= right) {
@@ -22047,6 +22579,7 @@ return /******/ (function(modules) { // webpackBootstrap
22047
22579
  var Symbol = __webpack_require__(105);
22048
22580
  var lineAnimationDiff = __webpack_require__(107);
22049
22581
  var graphic = __webpack_require__(43);
22582
+ var modelUtil = __webpack_require__(5);
22050
22583
 
22051
22584
  var polyHelper = __webpack_require__(108);
22052
22585
 
@@ -22120,15 +22653,6 @@ return /******/ (function(modules) { // webpackBootstrap
22120
22653
  }, true);
22121
22654
  }
22122
22655
 
22123
- function queryDataIndex(data, payload) {
22124
- if (payload.dataIndex != null) {
22125
- return payload.dataIndex;
22126
- }
22127
- else if (payload.name != null) {
22128
- return data.indexOfName(payload.name);
22129
- }
22130
- }
22131
-
22132
22656
  function createGridClipShape(cartesian, hasAnimation, seriesModel) {
22133
22657
  var xExtent = getAxisExtentWithGap(cartesian.getAxis('x'));
22134
22658
  var yExtent = getAxisExtentWithGap(cartesian.getAxis('y'));
@@ -22257,7 +22781,8 @@ return /******/ (function(modules) { // webpackBootstrap
22257
22781
 
22258
22782
  function getVisualGradient(data, coordSys) {
22259
22783
  var visualMetaList = data.getVisual('visualMeta');
22260
- if (!visualMetaList || !visualMetaList.length) {
22784
+ if (!visualMetaList || !visualMetaList.length || !data.count()) {
22785
+ // When data.count() is 0, gradient range can not be calculated.
22261
22786
  return;
22262
22787
  }
22263
22788
 
@@ -22275,6 +22800,7 @@ return /******/ (function(modules) { // webpackBootstrap
22275
22800
  }
22276
22801
  return;
22277
22802
  }
22803
+
22278
22804
  var dimension = visualMeta.dimension;
22279
22805
  var dimName = data.dimensions[dimension];
22280
22806
  var dataExtent = data.getDataExtent(dimName);
@@ -22326,13 +22852,14 @@ return /******/ (function(modules) { // webpackBootstrap
22326
22852
  });
22327
22853
  }
22328
22854
  }
22855
+
22329
22856
  var gradient = new graphic.LinearGradient(
22330
22857
  0, 0, 0, 0, colorStops, true
22331
22858
  );
22332
22859
  var axis = coordSys.getAxis(dimName);
22333
22860
 
22334
- var start = Math.round(axis.toGlobalCoord(axis.dataToCoord(min)));
22335
- var end = Math.round(axis.toGlobalCoord(axis.dataToCoord(max)));
22861
+ var start = axis.toGlobalCoord(axis.dataToCoord(min));
22862
+ var end = axis.toGlobalCoord(axis.dataToCoord(max));
22336
22863
  // zrUtil.each(colorStops, function (colorStop) {
22337
22864
  // // Make sure each offset has rounded px to avoid not sharp edge
22338
22865
  // colorStop.offset = (Math.round(colorStop.offset * (end - start) + start) - start) / (end - start);
@@ -22482,6 +23009,7 @@ return /******/ (function(modules) { // webpackBootstrap
22482
23009
  }
22483
23010
 
22484
23011
  var visualColor = getVisualGradient(data, coordSys) || data.getVisual('color');
23012
+
22485
23013
  polyline.useStyle(zrUtil.defaults(
22486
23014
  // Use color in lineStyle first
22487
23015
  lineStyleModel.getLineStyle(),
@@ -22534,9 +23062,11 @@ return /******/ (function(modules) { // webpackBootstrap
22534
23062
  this._step = step;
22535
23063
  },
22536
23064
 
23065
+ dispose: function () {},
23066
+
22537
23067
  highlight: function (seriesModel, ecModel, api, payload) {
22538
23068
  var data = seriesModel.getData();
22539
- var dataIndex = queryDataIndex(data, payload);
23069
+ var dataIndex = modelUtil.queryDataIndex(data, payload);
22540
23070
 
22541
23071
  if (!(dataIndex instanceof Array) && dataIndex != null && dataIndex >= 0) {
22542
23072
  var symbol = data.getItemGraphicEl(dataIndex);
@@ -22570,7 +23100,7 @@ return /******/ (function(modules) { // webpackBootstrap
22570
23100
 
22571
23101
  downplay: function (seriesModel, ecModel, api, payload) {
22572
23102
  var data = seriesModel.getData();
22573
- var dataIndex = queryDataIndex(data, payload);
23103
+ var dataIndex = modelUtil.queryDataIndex(data, payload);
22574
23104
  if (dataIndex != null && dataIndex >= 0) {
22575
23105
  var symbol = data.getItemGraphicEl(dataIndex);
22576
23106
  if (symbol) {
@@ -22681,6 +23211,9 @@ return /******/ (function(modules) { // webpackBootstrap
22681
23211
  next = turnPointsIntoStep(diff.next, coordSys, step);
22682
23212
  stackedOnNext = turnPointsIntoStep(diff.stackedOnNext, coordSys, step);
22683
23213
  }
23214
+ // `diff.current` is subset of `current` (which should be ensured by
23215
+ // turnPointsIntoStep), so points in `__points` can be updated when
23216
+ // points in `current` are update during animation.
22684
23217
  polyline.shape.__points = diff.current;
22685
23218
  polyline.shape.points = current;
22686
23219
 
@@ -22698,8 +23231,7 @@ return /******/ (function(modules) { // webpackBootstrap
22698
23231
  graphic.updateProps(polygon, {
22699
23232
  shape: {
22700
23233
  points: next,
22701
- stackedOnPoints: stackedOnNext,
22702
- __points: diff.next
23234
+ stackedOnPoints: stackedOnNext
22703
23235
  }
22704
23236
  }, seriesModel);
22705
23237
  }
@@ -22900,9 +23432,11 @@ return /******/ (function(modules) { // webpackBootstrap
22900
23432
  var numberUtil = __webpack_require__(7);
22901
23433
 
22902
23434
  function normalizeSymbolSize(symbolSize) {
22903
- if (!(symbolSize instanceof Array)) {
22904
- symbolSize = [+symbolSize, +symbolSize];
22905
- }
23435
+ symbolSize = symbolSize instanceof Array
23436
+ ? symbolSize.slice()
23437
+ : [+symbolSize, +symbolSize];
23438
+ symbolSize[0] /= 2;
23439
+ symbolSize[1] /= 2;
22906
23440
  return symbolSize;
22907
23441
  }
22908
23442
 
@@ -22932,8 +23466,14 @@ return /******/ (function(modules) { // webpackBootstrap
22932
23466
  var seriesModel = data.hostModel;
22933
23467
  var color = data.getItemVisual(idx, 'color');
22934
23468
 
23469
+ // var symbolPath = symbolUtil.createSymbol(
23470
+ // symbolType, -0.5, -0.5, 1, 1, color
23471
+ // );
23472
+ // If width/height are set too small (e.g., set to 1) on ios10
23473
+ // and macOS Sierra, a circle stroke become a rect, no matter what
23474
+ // the scale is set. So we set width/height as 2. See #4150.
22935
23475
  var symbolPath = symbolUtil.createSymbol(
22936
- symbolType, -0.5, -0.5, 1, 1, color
23476
+ symbolType, -1, -1, 2, 2, color
22937
23477
  );
22938
23478
 
22939
23479
  symbolPath.attr({
@@ -22949,7 +23489,6 @@ return /******/ (function(modules) { // webpackBootstrap
22949
23489
  graphic.initProps(symbolPath, {
22950
23490
  scale: size
22951
23491
  }, seriesModel, idx);
22952
-
22953
23492
  this._symbolType = symbolType;
22954
23493
 
22955
23494
  this.add(symbolPath);
@@ -23029,7 +23568,6 @@ return /******/ (function(modules) { // webpackBootstrap
23029
23568
  }, seriesModel, idx);
23030
23569
  }
23031
23570
  this._updateCommon(data, idx, symbolSize, seriesScope);
23032
-
23033
23571
  this._seriesModel = seriesModel;
23034
23572
  };
23035
23573
 
@@ -23082,7 +23620,7 @@ return /******/ (function(modules) { // webpackBootstrap
23082
23620
 
23083
23621
  var elStyle = symbolPath.style;
23084
23622
 
23085
- symbolPath.rotation = (symbolRotate || 0) * Math.PI / 180 || 0;
23623
+ symbolPath.attr('rotation', (symbolRotate || 0) * Math.PI / 180 || 0);
23086
23624
 
23087
23625
  if (symbolOffset) {
23088
23626
  symbolPath.attr('position', [
@@ -23420,7 +23958,9 @@ return /******/ (function(modules) { // webpackBootstrap
23420
23958
 
23421
23959
  var symbolBuildProxies = {};
23422
23960
  for (var name in symbolCtors) {
23423
- symbolBuildProxies[name] = new symbolCtors[name]();
23961
+ if (symbolCtors.hasOwnProperty(name)) {
23962
+ symbolBuildProxies[name] = new symbolCtors[name]();
23963
+ }
23424
23964
  }
23425
23965
 
23426
23966
  var Symbol = graphic.extendShape({
@@ -24187,7 +24727,7 @@ return /******/ (function(modules) { // webpackBootstrap
24187
24727
 
24188
24728
  __webpack_require__(113);
24189
24729
 
24190
- __webpack_require__(130);
24730
+ __webpack_require__(131);
24191
24731
 
24192
24732
  // Grid view
24193
24733
  echarts.extendComponentView({
@@ -24198,14 +24738,16 @@ return /******/ (function(modules) { // webpackBootstrap
24198
24738
  this.group.removeAll();
24199
24739
  if (gridModel.get('show')) {
24200
24740
  this.group.add(new graphic.Rect({
24201
- shape:gridModel.coordinateSystem.getRect(),
24741
+ shape: gridModel.coordinateSystem.getRect(),
24202
24742
  style: zrUtil.defaults({
24203
24743
  fill: gridModel.get('backgroundColor')
24204
24744
  }, gridModel.getItemStyle()),
24205
- silent: true
24745
+ silent: true,
24746
+ z2: -1
24206
24747
  }));
24207
24748
  }
24208
24749
  }
24750
+
24209
24751
  });
24210
24752
 
24211
24753
  echarts.registerPreprocessor(function (option) {
@@ -24317,9 +24859,11 @@ return /******/ (function(modules) { // webpackBootstrap
24317
24859
  function ifAxisCanNotOnZero(otherAxisDim) {
24318
24860
  var axes = axesMap[otherAxisDim];
24319
24861
  for (var idx in axes) {
24320
- var axis = axes[idx];
24321
- if (axis && (axis.type === 'category' || !ifAxisCrossZero(axis))) {
24322
- return true;
24862
+ if (axes.hasOwnProperty(idx)) {
24863
+ var axis = axes[idx];
24864
+ if (axis && (axis.type === 'category' || !ifAxisCrossZero(axis))) {
24865
+ return true;
24866
+ }
24323
24867
  }
24324
24868
  }
24325
24869
  return false;
@@ -24413,7 +24957,9 @@ return /******/ (function(modules) { // webpackBootstrap
24413
24957
  if (axisIndex == null) {
24414
24958
  // Find first axis
24415
24959
  for (var name in axesMapOnDim) {
24416
- return axesMapOnDim[name];
24960
+ if (axesMapOnDim.hasOwnProperty(name)) {
24961
+ return axesMapOnDim[name];
24962
+ }
24417
24963
  }
24418
24964
  }
24419
24965
  return axesMapOnDim[axisIndex];
@@ -24437,6 +24983,83 @@ return /******/ (function(modules) { // webpackBootstrap
24437
24983
  }
24438
24984
  };
24439
24985
 
24986
+ /**
24987
+ * @implements
24988
+ * see {module:echarts/CoodinateSystem}
24989
+ */
24990
+ gridProto.convertToPixel = function (ecModel, finder, value) {
24991
+ var target = this._findConvertTarget(ecModel, finder);
24992
+
24993
+ return target.cartesian
24994
+ ? target.cartesian.dataToPoint(value)
24995
+ : target.axis
24996
+ ? target.axis.toGlobalCoord(target.axis.dataToCoord(value))
24997
+ : null;
24998
+ };
24999
+
25000
+ /**
25001
+ * @implements
25002
+ * see {module:echarts/CoodinateSystem}
25003
+ */
25004
+ gridProto.convertFromPixel = function (ecModel, finder, value) {
25005
+ var target = this._findConvertTarget(ecModel, finder);
25006
+
25007
+ return target.cartesian
25008
+ ? target.cartesian.pointToData(value)
25009
+ : target.axis
25010
+ ? target.axis.coordToData(target.axis.toLocalCoord(value))
25011
+ : null;
25012
+ };
25013
+
25014
+ /**
25015
+ * @inner
25016
+ */
25017
+ gridProto._findConvertTarget = function (ecModel, finder) {
25018
+ var seriesModel = finder.seriesModel;
25019
+ var xAxisModel = finder.xAxisModel
25020
+ || (seriesModel && seriesModel.getReferringComponents('xAxis')[0]);
25021
+ var yAxisModel = finder.yAxisModel
25022
+ || (seriesModel && seriesModel.getReferringComponents('yAxis')[0]);
25023
+ var gridModel = finder.gridModel;
25024
+ var coordsList = this._coordsList;
25025
+ var cartesian;
25026
+ var axis;
25027
+
25028
+ if (seriesModel) {
25029
+ cartesian = seriesModel.coordinateSystem;
25030
+ zrUtil.indexOf(coordsList, cartesian) < 0 && (cartesian = null);
25031
+ }
25032
+ else if (xAxisModel && yAxisModel) {
25033
+ cartesian = this.getCartesian(xAxisModel.componentIndex, yAxisModel.componentIndex);
25034
+ }
25035
+ else if (xAxisModel) {
25036
+ axis = this.getAxis('x', xAxisModel.componentIndex);
25037
+ }
25038
+ else if (yAxisModel) {
25039
+ axis = this.getAxis('y', yAxisModel.componentIndex);
25040
+ }
25041
+ // Lowest priority.
25042
+ else if (gridModel) {
25043
+ var grid = gridModel.coordinateSystem;
25044
+ if (grid === this) {
25045
+ cartesian = this._coordsList[0];
25046
+ }
25047
+ }
25048
+
25049
+ return {cartesian: cartesian, axis: axis};
25050
+ };
25051
+
25052
+ /**
25053
+ * @implements
25054
+ * see {module:echarts/CoodinateSystem}
25055
+ */
25056
+ gridProto.containPoint = function (point) {
25057
+ var coord = this._coordsList[0];
25058
+ if (coord) {
25059
+ return coord.containPoint(point);
25060
+ }
25061
+ };
25062
+
24440
25063
  /**
24441
25064
  * Initialize cartesian coordinate systems
24442
25065
  * @private
@@ -24624,11 +25247,7 @@ return /******/ (function(modules) { // webpackBootstrap
24624
25247
  */
24625
25248
  function findAxesModels(seriesModel, ecModel) {
24626
25249
  return zrUtil.map(axesTypes, function (axisType) {
24627
- var axisModel = ecModel.queryComponents({
24628
- mainType: axisType,
24629
- index: seriesModel.get(axisType + 'Index'),
24630
- id: seriesModel.get(axisType + 'Id')
24631
- })[0];
25250
+ var axisModel = seriesModel.getReferringComponents(axisType)[0];
24632
25251
 
24633
25252
  if (true) {
24634
25253
  if (!axisModel) {
@@ -24811,7 +25430,11 @@ return /******/ (function(modules) { // webpackBootstrap
24811
25430
  // scaleQuantity *= 10;
24812
25431
  // }
24813
25432
  extent = scale.getExtent();
24814
- scale.setExtent(intervalScale * extent[0], extent[1] * intervalScale);
25433
+ var origin = (extent[1] + extent[0]) / 2;
25434
+ scale.setExtent(
25435
+ intervalScale * (extent[0] - origin) + origin,
25436
+ intervalScale * (extent[1] - origin) + origin
25437
+ );
24815
25438
  scale.niceExtent(splitNumber);
24816
25439
  }
24817
25440
 
@@ -25260,6 +25883,7 @@ return /******/ (function(modules) { // webpackBootstrap
25260
25883
  ticks.push(extent[0]);
25261
25884
  }
25262
25885
  var tick = niceExtent[0];
25886
+
25263
25887
  while (tick <= niceExtent[1]) {
25264
25888
  ticks.push(tick);
25265
25889
  // Avoid rounding error
@@ -25268,7 +25892,9 @@ return /******/ (function(modules) { // webpackBootstrap
25268
25892
  return [];
25269
25893
  }
25270
25894
  }
25271
- if (extent[1] > niceExtent[1]) {
25895
+ // Consider this case: the last item of ticks is smaller
25896
+ // than niceExtent[1] and niceExtent[1] === extent[1].
25897
+ if (extent[1] > (ticks.length ? ticks[ticks.length - 1] : niceExtent[1])) {
25272
25898
  ticks.push(extent[1]);
25273
25899
  }
25274
25900
  }
@@ -25586,6 +26212,9 @@ return /******/ (function(modules) { // webpackBootstrap
25586
26212
  var scaleProto = Scale.prototype;
25587
26213
  var intervalScaleProto = IntervalScale.prototype;
25588
26214
 
26215
+ var getPrecisionSafe = numberUtil.getPrecisionSafe;
26216
+ var roundingErrorFix = numberUtil.round;
26217
+
25589
26218
  var mathFloor = Math.floor;
25590
26219
  var mathCeil = Math.ceil;
25591
26220
  var mathPow = Math.pow;
@@ -25598,12 +26227,31 @@ return /******/ (function(modules) { // webpackBootstrap
25598
26227
 
25599
26228
  base: 10,
25600
26229
 
26230
+ $constructor: function () {
26231
+ Scale.apply(this, arguments);
26232
+ this._originalScale = new IntervalScale();
26233
+ },
26234
+
25601
26235
  /**
25602
26236
  * @return {Array.<number>}
25603
26237
  */
25604
26238
  getTicks: function () {
26239
+ var originalScale = this._originalScale;
26240
+ var extent = this._extent;
26241
+ var originalExtent = originalScale.getExtent();
26242
+
25605
26243
  return zrUtil.map(intervalScaleProto.getTicks.call(this), function (val) {
25606
- return numberUtil.round(mathPow(this.base, val));
26244
+ var powVal = numberUtil.round(mathPow(this.base, val));
26245
+
26246
+ // Fix #4158
26247
+ powVal = (val === extent[0] && originalScale.__fixMin)
26248
+ ? fixRoundingError(powVal, originalExtent[0])
26249
+ : powVal;
26250
+ powVal = (val === extent[1] && originalScale.__fixMax)
26251
+ ? fixRoundingError(powVal, originalExtent[1])
26252
+ : powVal;
26253
+
26254
+ return powVal;
25607
26255
  }, this);
25608
26256
  },
25609
26257
 
@@ -25641,6 +26289,13 @@ return /******/ (function(modules) { // webpackBootstrap
25641
26289
  var extent = scaleProto.getExtent.call(this);
25642
26290
  extent[0] = mathPow(base, extent[0]);
25643
26291
  extent[1] = mathPow(base, extent[1]);
26292
+
26293
+ // Fix #4158
26294
+ var originalScale = this._originalScale;
26295
+ var originalExtent = originalScale.getExtent();
26296
+ originalScale.__fixMin && (extent[0] = fixRoundingError(extent[0], originalExtent[0]));
26297
+ originalScale.__fixMax && (extent[1] = fixRoundingError(extent[1], originalExtent[1]));
26298
+
25644
26299
  return extent;
25645
26300
  },
25646
26301
 
@@ -25648,6 +26303,8 @@ return /******/ (function(modules) { // webpackBootstrap
25648
26303
  * @param {Array.<number>} extent
25649
26304
  */
25650
26305
  unionExtent: function (extent) {
26306
+ this._originalScale.unionExtent(extent);
26307
+
25651
26308
  var base = this.base;
25652
26309
  extent[0] = mathLog(extent[0]) / mathLog(base);
25653
26310
  extent[1] = mathLog(extent[1]) / mathLog(base);
@@ -25694,7 +26351,14 @@ return /******/ (function(modules) { // webpackBootstrap
25694
26351
  * @param {boolean} [fixMin=false]
25695
26352
  * @param {boolean} [fixMax=false]
25696
26353
  */
25697
- niceExtent: intervalScaleProto.niceExtent
26354
+ niceExtent: function (splitNumber, fixMin, fixMax) {
26355
+ intervalScaleProto.niceExtent.call(this, splitNumber, fixMin, fixMax);
26356
+
26357
+ var originalScale = this._originalScale;
26358
+ originalScale.__fixMin = fixMin;
26359
+ originalScale.__fixMax = fixMax;
26360
+ }
26361
+
25698
26362
  });
25699
26363
 
25700
26364
  zrUtil.each(['contain', 'normalize'], function (methodName) {
@@ -25708,6 +26372,10 @@ return /******/ (function(modules) { // webpackBootstrap
25708
26372
  return new LogScale();
25709
26373
  };
25710
26374
 
26375
+ function fixRoundingError(val, originalVal) {
26376
+ return roundingErrorFix(val, getPrecisionSafe(originalVal));
26377
+ }
26378
+
25711
26379
  module.exports = LogScale;
25712
26380
 
25713
26381
 
@@ -26392,7 +27060,7 @@ return /******/ (function(modules) { // webpackBootstrap
26392
27060
  */
26393
27061
  init: function () {
26394
27062
  AxisModel.superApply(this, 'init', arguments);
26395
- this._resetRange();
27063
+ this.resetRange();
26396
27064
  },
26397
27065
 
26398
27066
  /**
@@ -26400,7 +27068,7 @@ return /******/ (function(modules) { // webpackBootstrap
26400
27068
  */
26401
27069
  mergeOption: function () {
26402
27070
  AxisModel.superApply(this, 'mergeOption', arguments);
26403
- this._resetRange();
27071
+ this.resetRange();
26404
27072
  },
26405
27073
 
26406
27074
  /**
@@ -26408,45 +27076,7 @@ return /******/ (function(modules) { // webpackBootstrap
26408
27076
  */
26409
27077
  restoreData: function () {
26410
27078
  AxisModel.superApply(this, 'restoreData', arguments);
26411
- this._resetRange();
26412
- },
26413
-
26414
- /**
26415
- * @public
26416
- * @param {number} rangeStart
26417
- * @param {number} rangeEnd
26418
- */
26419
- setRange: function (rangeStart, rangeEnd) {
26420
- this.option.rangeStart = rangeStart;
26421
- this.option.rangeEnd = rangeEnd;
26422
- },
26423
-
26424
- /**
26425
- * @public
26426
- * @return {Array.<number|string|Date>}
26427
- */
26428
- getMin: function () {
26429
- var option = this.option;
26430
- return option.rangeStart != null ? option.rangeStart : option.min;
26431
- },
26432
-
26433
- /**
26434
- * @public
26435
- * @return {Array.<number|string|Date>}
26436
- */
26437
- getMax: function () {
26438
- var option = this.option;
26439
- return option.rangeEnd != null ? option.rangeEnd : option.max;
26440
- },
26441
-
26442
- /**
26443
- * @public
26444
- * @return {boolean}
26445
- */
26446
- getNeedCrossZero: function () {
26447
- var option = this.option;
26448
- return (option.rangeStart != null || option.rangeEnd != null)
26449
- ? false : !option.scale;
27079
+ this.resetRange();
26450
27080
  },
26451
27081
 
26452
27082
  /**
@@ -26458,14 +27088,6 @@ return /******/ (function(modules) { // webpackBootstrap
26458
27088
  index: this.get('gridIndex'),
26459
27089
  id: this.get('gridId')
26460
27090
  })[0];
26461
- },
26462
-
26463
- /**
26464
- * @private
26465
- */
26466
- _resetRange: function () {
26467
- // rangeStart and rangeEnd is readonly.
26468
- this.option.rangeStart = this.option.rangeEnd = null;
26469
27091
  }
26470
27092
 
26471
27093
  });
@@ -26476,6 +27098,7 @@ return /******/ (function(modules) { // webpackBootstrap
26476
27098
  }
26477
27099
 
26478
27100
  zrUtil.merge(AxisModel.prototype, __webpack_require__(129));
27101
+ zrUtil.merge(AxisModel.prototype, __webpack_require__(130));
26479
27102
 
26480
27103
  var extraOption = {
26481
27104
  // gridIndex: 0,
@@ -26758,6 +27381,75 @@ return /******/ (function(modules) { // webpackBootstrap
26758
27381
 
26759
27382
  /***/ },
26760
27383
  /* 130 */
27384
+ /***/ function(module, exports) {
27385
+
27386
+
27387
+
27388
+ module.exports = {
27389
+
27390
+ /**
27391
+ * @public
27392
+ * @return {Array.<number|string|Date>}
27393
+ */
27394
+ getMin: function () {
27395
+ var option = this.option;
27396
+ var min = option.rangeStart != null ? option.rangeStart : option.min;
27397
+ // In case of axis.type === 'time', Date should be converted to timestamp.
27398
+ // In other cases, min/max should be a number or null/undefined or 'dataMin/Max'.
27399
+ if (min instanceof Date) {
27400
+ min = +min;
27401
+ }
27402
+ return min;
27403
+ },
27404
+
27405
+ /**
27406
+ * @public
27407
+ * @return {Array.<number|string|Date>}
27408
+ */
27409
+ getMax: function () {
27410
+ var option = this.option;
27411
+ var max = option.rangeEnd != null ? option.rangeEnd : option.max;
27412
+ // In case of axis.type === 'time', Date should be converted to timestamp.
27413
+ // In other cases, min/max should be a number or null/undefined or 'dataMin/Max'.
27414
+ if (max instanceof Date) {
27415
+ max = +max;
27416
+ }
27417
+ return max;
27418
+ },
27419
+
27420
+ /**
27421
+ * @public
27422
+ * @return {boolean}
27423
+ */
27424
+ getNeedCrossZero: function () {
27425
+ var option = this.option;
27426
+ return (option.rangeStart != null || option.rangeEnd != null)
27427
+ ? false : !option.scale;
27428
+ },
27429
+
27430
+ /**
27431
+ * @public
27432
+ * @param {number} rangeStart
27433
+ * @param {number} rangeEnd
27434
+ */
27435
+ setRange: function (rangeStart, rangeEnd) {
27436
+ this.option.rangeStart = rangeStart;
27437
+ this.option.rangeEnd = rangeEnd;
27438
+ },
27439
+
27440
+ /**
27441
+ * @public
27442
+ */
27443
+ resetRange: function () {
27444
+ // rangeStart and rangeEnd is readonly.
27445
+ this.option.rangeStart = this.option.rangeEnd = null;
27446
+ }
27447
+ };
27448
+
27449
+
27450
+
27451
+ /***/ },
27452
+ /* 131 */
26761
27453
  /***/ function(module, exports, __webpack_require__) {
26762
27454
 
26763
27455
  'use strict';
@@ -26766,18 +27458,18 @@ return /******/ (function(modules) { // webpackBootstrap
26766
27458
 
26767
27459
  __webpack_require__(126);
26768
27460
 
26769
- __webpack_require__(131);
27461
+ __webpack_require__(132);
26770
27462
 
26771
27463
 
26772
27464
  /***/ },
26773
- /* 131 */
27465
+ /* 132 */
26774
27466
  /***/ function(module, exports, __webpack_require__) {
26775
27467
 
26776
27468
 
26777
27469
 
26778
27470
  var zrUtil = __webpack_require__(4);
26779
27471
  var graphic = __webpack_require__(43);
26780
- var AxisBuilder = __webpack_require__(132);
27472
+ var AxisBuilder = __webpack_require__(133);
26781
27473
  var ifIgnoreOnTick = AxisBuilder.ifIgnoreOnTick;
26782
27474
  var getInterval = AxisBuilder.getInterval;
26783
27475
 
@@ -27055,7 +27747,7 @@ return /******/ (function(modules) { // webpackBootstrap
27055
27747
 
27056
27748
 
27057
27749
  /***/ },
27058
- /* 132 */
27750
+ /* 133 */
27059
27751
  /***/ function(module, exports, __webpack_require__) {
27060
27752
 
27061
27753
 
@@ -27656,7 +28348,7 @@ return /******/ (function(modules) { // webpackBootstrap
27656
28348
 
27657
28349
 
27658
28350
  /***/ },
27659
- /* 133 */
28351
+ /* 134 */
27660
28352
  /***/ function(module, exports, __webpack_require__) {
27661
28353
 
27662
28354
 
@@ -27665,10 +28357,10 @@ return /******/ (function(modules) { // webpackBootstrap
27665
28357
 
27666
28358
  __webpack_require__(113);
27667
28359
 
27668
- __webpack_require__(134);
27669
28360
  __webpack_require__(135);
28361
+ __webpack_require__(136);
27670
28362
 
27671
- var barLayoutGrid = __webpack_require__(137);
28363
+ var barLayoutGrid = __webpack_require__(138);
27672
28364
  var echarts = __webpack_require__(1);
27673
28365
 
27674
28366
  echarts.registerLayout(zrUtil.curry(barLayoutGrid, 'bar'));
@@ -27685,7 +28377,7 @@ return /******/ (function(modules) { // webpackBootstrap
27685
28377
 
27686
28378
 
27687
28379
  /***/ },
27688
- /* 134 */
28380
+ /* 135 */
27689
28381
  /***/ function(module, exports, __webpack_require__) {
27690
28382
 
27691
28383
  'use strict';
@@ -27764,7 +28456,7 @@ return /******/ (function(modules) { // webpackBootstrap
27764
28456
 
27765
28457
 
27766
28458
  /***/ },
27767
- /* 135 */
28459
+ /* 136 */
27768
28460
  /***/ function(module, exports, __webpack_require__) {
27769
28461
 
27770
28462
  'use strict';
@@ -27773,7 +28465,7 @@ return /******/ (function(modules) { // webpackBootstrap
27773
28465
  var zrUtil = __webpack_require__(4);
27774
28466
  var graphic = __webpack_require__(43);
27775
28467
 
27776
- zrUtil.extend(__webpack_require__(12).prototype, __webpack_require__(136));
28468
+ zrUtil.extend(__webpack_require__(12).prototype, __webpack_require__(137));
27777
28469
 
27778
28470
  function fixLayoutWithLineWidth(layout, lineWidth) {
27779
28471
  var signX = layout.width > 0 ? 1 : -1;
@@ -27800,6 +28492,8 @@ return /******/ (function(modules) { // webpackBootstrap
27800
28492
  return this.group;
27801
28493
  },
27802
28494
 
28495
+ dispose: zrUtil.noop,
28496
+
27803
28497
  _renderOnCartesian: function (seriesModel, ecModel, api) {
27804
28498
  var group = this.group;
27805
28499
  var data = seriesModel.getData();
@@ -27983,7 +28677,7 @@ return /******/ (function(modules) { // webpackBootstrap
27983
28677
 
27984
28678
 
27985
28679
  /***/ },
27986
- /* 136 */
28680
+ /* 137 */
27987
28681
  /***/ function(module, exports, __webpack_require__) {
27988
28682
 
27989
28683
 
@@ -28017,7 +28711,7 @@ return /******/ (function(modules) { // webpackBootstrap
28017
28711
 
28018
28712
 
28019
28713
  /***/ },
28020
- /* 137 */
28714
+ /* 138 */
28021
28715
  /***/ function(module, exports, __webpack_require__) {
28022
28716
 
28023
28717
  'use strict';
@@ -28169,6 +28863,7 @@ return /******/ (function(modules) { // webpackBootstrap
28169
28863
  );
28170
28864
 
28171
28865
  var lastStackCoords = {};
28866
+ var lastStackCoordsOrigin = {};
28172
28867
 
28173
28868
  ecModel.eachSeriesByType(seriesType, function (seriesModel) {
28174
28869
 
@@ -28190,11 +28885,13 @@ return /******/ (function(modules) { // webpackBootstrap
28190
28885
 
28191
28886
  var coords = cartesian.dataToPoints(data, true);
28192
28887
  lastStackCoords[stackId] = lastStackCoords[stackId] || [];
28888
+ lastStackCoordsOrigin[stackId] = lastStackCoordsOrigin[stackId] || []; // Fix #4243
28193
28889
 
28194
28890
  data.setLayout({
28195
28891
  offset: columnOffset,
28196
28892
  size: columnWidth
28197
28893
  });
28894
+
28198
28895
  data.each(valueAxis.dim, function (value, idx) {
28199
28896
  // 空数据
28200
28897
  if (isNaN(value)) {
@@ -28202,22 +28899,30 @@ return /******/ (function(modules) { // webpackBootstrap
28202
28899
  }
28203
28900
  if (!lastStackCoords[stackId][idx]) {
28204
28901
  lastStackCoords[stackId][idx] = {
28205
- // Positive stack
28206
- p: valueAxisStart,
28207
- // Negative stack
28208
- n: valueAxisStart
28902
+ p: valueAxisStart, // Positive stack
28903
+ n: valueAxisStart // Negative stack
28904
+ };
28905
+ lastStackCoordsOrigin[stackId][idx] = {
28906
+ p: valueAxisStart, // Positive stack
28907
+ n: valueAxisStart // Negative stack
28209
28908
  };
28210
28909
  }
28211
28910
  var sign = value >= 0 ? 'p' : 'n';
28212
28911
  var coord = coords[idx];
28213
28912
  var lastCoord = lastStackCoords[stackId][idx][sign];
28214
- var x, y, width, height;
28913
+ var lastCoordOrigin = lastStackCoordsOrigin[stackId][idx][sign];
28914
+ var x;
28915
+ var y;
28916
+ var width;
28917
+ var height;
28918
+
28215
28919
  if (valueAxis.isHorizontal()) {
28216
28920
  x = lastCoord;
28217
28921
  y = coord[1] + columnOffset;
28218
- width = coord[0] - lastCoord;
28922
+ width = coord[0] - lastCoordOrigin;
28219
28923
  height = columnWidth;
28220
28924
 
28925
+ lastStackCoordsOrigin[stackId][idx][sign] += width;
28221
28926
  if (Math.abs(width) < barMinHeight) {
28222
28927
  width = (width < 0 ? -1 : 1) * barMinHeight;
28223
28928
  }
@@ -28227,7 +28932,9 @@ return /******/ (function(modules) { // webpackBootstrap
28227
28932
  x = coord[0] + columnOffset;
28228
28933
  y = lastCoord;
28229
28934
  width = columnWidth;
28230
- height = coord[1] - lastCoord;
28935
+ height = coord[1] - lastCoordOrigin;
28936
+
28937
+ lastStackCoordsOrigin[stackId][idx][sign] += height;
28231
28938
  if (Math.abs(height) < barMinHeight) {
28232
28939
  // Include zero to has a positive bar
28233
28940
  height = (height <= 0 ? -1 : 1) * barMinHeight;
@@ -28250,7 +28957,7 @@ return /******/ (function(modules) { // webpackBootstrap
28250
28957
 
28251
28958
 
28252
28959
  /***/ },
28253
- /* 138 */
28960
+ /* 139 */
28254
28961
  /***/ function(module, exports, __webpack_require__) {
28255
28962
 
28256
28963
 
@@ -28258,10 +28965,10 @@ return /******/ (function(modules) { // webpackBootstrap
28258
28965
  var zrUtil = __webpack_require__(4);
28259
28966
  var echarts = __webpack_require__(1);
28260
28967
 
28261
- __webpack_require__(139);
28262
- __webpack_require__(141);
28968
+ __webpack_require__(140);
28969
+ __webpack_require__(142);
28263
28970
 
28264
- __webpack_require__(142)('pie', [{
28971
+ __webpack_require__(143)('pie', [{
28265
28972
  type: 'pieToggleSelect',
28266
28973
  event: 'pieselectchanged',
28267
28974
  method: 'toggleSelected'
@@ -28275,17 +28982,17 @@ return /******/ (function(modules) { // webpackBootstrap
28275
28982
  method: 'unSelect'
28276
28983
  }]);
28277
28984
 
28278
- echarts.registerVisual(zrUtil.curry(__webpack_require__(143), 'pie'));
28985
+ echarts.registerVisual(zrUtil.curry(__webpack_require__(144), 'pie'));
28279
28986
 
28280
28987
  echarts.registerLayout(zrUtil.curry(
28281
- __webpack_require__(144), 'pie'
28988
+ __webpack_require__(145), 'pie'
28282
28989
  ));
28283
28990
 
28284
- echarts.registerProcessor(zrUtil.curry(__webpack_require__(146), 'pie'));
28991
+ echarts.registerProcessor(zrUtil.curry(__webpack_require__(147), 'pie'));
28285
28992
 
28286
28993
 
28287
28994
  /***/ },
28288
- /* 139 */
28995
+ /* 140 */
28289
28996
  /***/ function(module, exports, __webpack_require__) {
28290
28997
 
28291
28998
  'use strict';
@@ -28296,7 +29003,7 @@ return /******/ (function(modules) { // webpackBootstrap
28296
29003
  var modelUtil = __webpack_require__(5);
28297
29004
  var completeDimensions = __webpack_require__(102);
28298
29005
 
28299
- var dataSelectableMixin = __webpack_require__(140);
29006
+ var dataSelectableMixin = __webpack_require__(141);
28300
29007
 
28301
29008
  var PieSeries = __webpack_require__(1).extendSeriesModel({
28302
29009
 
@@ -28429,7 +29136,7 @@ return /******/ (function(modules) { // webpackBootstrap
28429
29136
 
28430
29137
 
28431
29138
  /***/ },
28432
- /* 140 */
29139
+ /* 141 */
28433
29140
  /***/ function(module, exports, __webpack_require__) {
28434
29141
 
28435
29142
  /**
@@ -28499,7 +29206,7 @@ return /******/ (function(modules) { // webpackBootstrap
28499
29206
 
28500
29207
 
28501
29208
  /***/ },
28502
- /* 141 */
29209
+ /* 142 */
28503
29210
  /***/ function(module, exports, __webpack_require__) {
28504
29211
 
28505
29212
 
@@ -28838,6 +29545,8 @@ return /******/ (function(modules) { // webpackBootstrap
28838
29545
  this._data = data;
28839
29546
  },
28840
29547
 
29548
+ dispose: function () {},
29549
+
28841
29550
  _createClipPath: function (
28842
29551
  cx, cy, r, startAngle, clockwise, cb, seriesModel
28843
29552
  ) {
@@ -28860,14 +29569,29 @@ return /******/ (function(modules) { // webpackBootstrap
28860
29569
  }, seriesModel, cb);
28861
29570
 
28862
29571
  return clipPath;
29572
+ },
29573
+
29574
+ /**
29575
+ * @implement
29576
+ */
29577
+ containPoint: function (point, seriesModel) {
29578
+ var data = seriesModel.getData();
29579
+ var itemLayout = data.getItemLayout(0);
29580
+ if (itemLayout) {
29581
+ var dx = point[0] - itemLayout.cx;
29582
+ var dy = point[1] - itemLayout.cy;
29583
+ var radius = Math.sqrt(dx * dx + dy * dy);
29584
+ return radius <= itemLayout.r && radius >= itemLayout.r0;
29585
+ }
28863
29586
  }
29587
+
28864
29588
  });
28865
29589
 
28866
29590
  module.exports = Pie;
28867
29591
 
28868
29592
 
28869
29593
  /***/ },
28870
- /* 142 */
29594
+ /* 143 */
28871
29595
  /***/ function(module, exports, __webpack_require__) {
28872
29596
 
28873
29597
 
@@ -28907,7 +29631,7 @@ return /******/ (function(modules) { // webpackBootstrap
28907
29631
 
28908
29632
 
28909
29633
  /***/ },
28910
- /* 143 */
29634
+ /* 144 */
28911
29635
  /***/ function(module, exports) {
28912
29636
 
28913
29637
  // Pick color from palette for each data item
@@ -28956,7 +29680,7 @@ return /******/ (function(modules) { // webpackBootstrap
28956
29680
 
28957
29681
 
28958
29682
  /***/ },
28959
- /* 144 */
29683
+ /* 145 */
28960
29684
  /***/ function(module, exports, __webpack_require__) {
28961
29685
 
28962
29686
  // TODO minAngle
@@ -28965,7 +29689,7 @@ return /******/ (function(modules) { // webpackBootstrap
28965
29689
 
28966
29690
  var numberUtil = __webpack_require__(7);
28967
29691
  var parsePercent = numberUtil.parsePercent;
28968
- var labelLayout = __webpack_require__(145);
29692
+ var labelLayout = __webpack_require__(146);
28969
29693
  var zrUtil = __webpack_require__(4);
28970
29694
 
28971
29695
  var PI2 = Math.PI * 2;
@@ -29084,7 +29808,7 @@ return /******/ (function(modules) { // webpackBootstrap
29084
29808
 
29085
29809
 
29086
29810
  /***/ },
29087
- /* 145 */
29811
+ /* 146 */
29088
29812
  /***/ function(module, exports, __webpack_require__) {
29089
29813
 
29090
29814
  'use strict';
@@ -29315,7 +30039,7 @@ return /******/ (function(modules) { // webpackBootstrap
29315
30039
 
29316
30040
 
29317
30041
  /***/ },
29318
- /* 146 */
30042
+ /* 147 */
29319
30043
  /***/ function(module, exports) {
29320
30044
 
29321
30045
 
@@ -29343,7 +30067,7 @@ return /******/ (function(modules) { // webpackBootstrap
29343
30067
 
29344
30068
 
29345
30069
  /***/ },
29346
- /* 147 */
30070
+ /* 148 */
29347
30071
  /***/ function(module, exports, __webpack_require__) {
29348
30072
 
29349
30073
 
@@ -29351,8 +30075,8 @@ return /******/ (function(modules) { // webpackBootstrap
29351
30075
  var zrUtil = __webpack_require__(4);
29352
30076
  var echarts = __webpack_require__(1);
29353
30077
 
29354
- __webpack_require__(148);
29355
30078
  __webpack_require__(149);
30079
+ __webpack_require__(150);
29356
30080
 
29357
30081
  echarts.registerVisual(zrUtil.curry(
29358
30082
  __webpack_require__(109), 'scatter', 'circle', null
@@ -29366,7 +30090,7 @@ return /******/ (function(modules) { // webpackBootstrap
29366
30090
 
29367
30091
 
29368
30092
  /***/ },
29369
- /* 148 */
30093
+ /* 149 */
29370
30094
  /***/ function(module, exports, __webpack_require__) {
29371
30095
 
29372
30096
  'use strict';
@@ -29435,13 +30159,13 @@ return /******/ (function(modules) { // webpackBootstrap
29435
30159
 
29436
30160
 
29437
30161
  /***/ },
29438
- /* 149 */
30162
+ /* 150 */
29439
30163
  /***/ function(module, exports, __webpack_require__) {
29440
30164
 
29441
30165
 
29442
30166
 
29443
30167
  var SymbolDraw = __webpack_require__(104);
29444
- var LargeSymbolDraw = __webpack_require__(150);
30168
+ var LargeSymbolDraw = __webpack_require__(151);
29445
30169
 
29446
30170
  __webpack_require__(1).extendChartView({
29447
30171
 
@@ -29477,12 +30201,14 @@ return /******/ (function(modules) { // webpackBootstrap
29477
30201
 
29478
30202
  remove: function (ecModel, api) {
29479
30203
  this._symbolDraw && this._symbolDraw.remove(api, true);
29480
- }
30204
+ },
30205
+
30206
+ dispose: function () {}
29481
30207
  });
29482
30208
 
29483
30209
 
29484
30210
  /***/ },
29485
- /* 150 */
30211
+ /* 151 */
29486
30212
  /***/ function(module, exports, __webpack_require__) {
29487
30213
 
29488
30214
  // TODO Batch by color
@@ -29633,7 +30359,6 @@ return /******/ (function(modules) { // webpackBootstrap
29633
30359
 
29634
30360
 
29635
30361
  /***/ },
29636
- /* 151 */,
29637
30362
  /* 152 */,
29638
30363
  /* 153 */,
29639
30364
  /* 154 */,
@@ -29656,7 +30381,8 @@ return /******/ (function(modules) { // webpackBootstrap
29656
30381
  /* 171 */,
29657
30382
  /* 172 */,
29658
30383
  /* 173 */,
29659
- /* 174 */
30384
+ /* 174 */,
30385
+ /* 175 */
29660
30386
  /***/ function(module, exports, __webpack_require__) {
29661
30387
 
29662
30388
  /**
@@ -29668,7 +30394,7 @@ return /******/ (function(modules) { // webpackBootstrap
29668
30394
  var Eventful = __webpack_require__(33);
29669
30395
  var zrUtil = __webpack_require__(4);
29670
30396
  var eventTool = __webpack_require__(87);
29671
- var interactionMutex = __webpack_require__(175);
30397
+ var interactionMutex = __webpack_require__(176);
29672
30398
 
29673
30399
  function mousedown(e) {
29674
30400
  if (e.target && e.target.draggable) {
@@ -29677,8 +30403,8 @@ return /******/ (function(modules) { // webpackBootstrap
29677
30403
 
29678
30404
  var x = e.offsetX;
29679
30405
  var y = e.offsetY;
29680
- var rect = this.rectProvider && this.rectProvider();
29681
- if (rect && rect.contain(x, y)) {
30406
+
30407
+ if (this.containsPoint && this.containsPoint(x, y)) {
29682
30408
  this._x = x;
29683
30409
  this._y = y;
29684
30410
  this._dragging = true;
@@ -29701,8 +30427,11 @@ return /******/ (function(modules) { // webpackBootstrap
29701
30427
  var x = e.offsetX;
29702
30428
  var y = e.offsetY;
29703
30429
 
29704
- var dx = x - this._x;
29705
- var dy = y - this._y;
30430
+ var oldX = this._x;
30431
+ var oldY = this._y;
30432
+
30433
+ var dx = x - oldX;
30434
+ var dy = y - oldY;
29706
30435
 
29707
30436
  this._x = x;
29708
30437
  this._y = y;
@@ -29717,7 +30446,7 @@ return /******/ (function(modules) { // webpackBootstrap
29717
30446
  }
29718
30447
 
29719
30448
  eventTool.stop(e.event);
29720
- this.trigger('pan', dx, dy);
30449
+ this.trigger('pan', dx, dy, oldX, oldY, x, y);
29721
30450
  }
29722
30451
  }
29723
30452
 
@@ -29742,9 +30471,7 @@ return /******/ (function(modules) { // webpackBootstrap
29742
30471
  }
29743
30472
 
29744
30473
  function zoom(e, zoomDelta, zoomX, zoomY) {
29745
- var rect = this.rectProvider && this.rectProvider();
29746
-
29747
- if (rect && rect.contain(zoomX, zoomY)) {
30474
+ if (this.containsPoint && this.containsPoint(zoomX, zoomY)) {
29748
30475
  // When mouse is out of roamController rect,
29749
30476
  // default befavoius should be be disabled, otherwise
29750
30477
  // page sliding is disabled, contrary to expectation.
@@ -29789,9 +30516,8 @@ return /******/ (function(modules) { // webpackBootstrap
29789
30516
  *
29790
30517
  * @param {module:zrender/zrender~ZRender} zr
29791
30518
  * @param {module:zrender/Element} target
29792
- * @param {Function} [rectProvider]
29793
30519
  */
29794
- function RoamController(zr, target, rectProvider) {
30520
+ function RoamController(zr, target) {
29795
30521
 
29796
30522
  /**
29797
30523
  * @type {module:zrender/Element}
@@ -29801,7 +30527,7 @@ return /******/ (function(modules) { // webpackBootstrap
29801
30527
  /**
29802
30528
  * @type {Function}
29803
30529
  */
29804
- this.rectProvider = rectProvider;
30530
+ this.containsPoint;
29805
30531
 
29806
30532
  /**
29807
30533
  * { min: 1, max: 2 }
@@ -29828,6 +30554,15 @@ return /******/ (function(modules) { // webpackBootstrap
29828
30554
 
29829
30555
  Eventful.call(this);
29830
30556
 
30557
+ /**
30558
+ * @param {Function} containsPoint
30559
+ * input: x, y
30560
+ * output: boolean
30561
+ */
30562
+ this.setContainsPoint = function (containsPoint) {
30563
+ this.containsPoint = containsPoint;
30564
+ };
30565
+
29831
30566
  /**
29832
30567
  * Notice: only enable needed types. For example, if 'zoom'
29833
30568
  * is not needed, 'zoom' should not be enabled, otherwise
@@ -29881,7 +30616,7 @@ return /******/ (function(modules) { // webpackBootstrap
29881
30616
 
29882
30617
 
29883
30618
  /***/ },
29884
- /* 175 */
30619
+ /* 176 */
29885
30620
  /***/ function(module, exports, __webpack_require__) {
29886
30621
 
29887
30622
 
@@ -29929,7 +30664,6 @@ return /******/ (function(modules) { // webpackBootstrap
29929
30664
 
29930
30665
 
29931
30666
  /***/ },
29932
- /* 176 */,
29933
30667
  /* 177 */,
29934
30668
  /* 178 */,
29935
30669
  /* 179 */,
@@ -29952,7 +30686,8 @@ return /******/ (function(modules) { // webpackBootstrap
29952
30686
  /* 196 */,
29953
30687
  /* 197 */,
29954
30688
  /* 198 */,
29955
- /* 199 */
30689
+ /* 199 */,
30690
+ /* 200 */
29956
30691
  /***/ function(module, exports, __webpack_require__) {
29957
30692
 
29958
30693
  /**
@@ -29961,7 +30696,7 @@ return /******/ (function(modules) { // webpackBootstrap
29961
30696
 
29962
30697
 
29963
30698
  var graphic = __webpack_require__(43);
29964
- var LineGroup = __webpack_require__(200);
30699
+ var LineGroup = __webpack_require__(201);
29965
30700
 
29966
30701
 
29967
30702
  function isPointNaN(pt) {
@@ -30051,7 +30786,7 @@ return /******/ (function(modules) { // webpackBootstrap
30051
30786
 
30052
30787
 
30053
30788
  /***/ },
30054
- /* 200 */
30789
+ /* 201 */
30055
30790
  /***/ function(module, exports, __webpack_require__) {
30056
30791
 
30057
30792
  /**
@@ -30062,7 +30797,7 @@ return /******/ (function(modules) { // webpackBootstrap
30062
30797
  var symbolUtil = __webpack_require__(106);
30063
30798
  var vector = __webpack_require__(10);
30064
30799
  // var matrix = require('zrender/lib/core/matrix');
30065
- var LinePath = __webpack_require__(201);
30800
+ var LinePath = __webpack_require__(202);
30066
30801
  var graphic = __webpack_require__(43);
30067
30802
  var zrUtil = __webpack_require__(4);
30068
30803
  var numberUtil = __webpack_require__(7);
@@ -30090,6 +30825,7 @@ return /******/ (function(modules) { // webpackBootstrap
30090
30825
  symbolType, -symbolSize[0] / 2, -symbolSize[1] / 2,
30091
30826
  symbolSize[0], symbolSize[1], color
30092
30827
  );
30828
+
30093
30829
  symbolPath.name = name;
30094
30830
 
30095
30831
  return symbolPath;
@@ -30324,10 +31060,7 @@ return /******/ (function(modules) { // webpackBootstrap
30324
31060
  lineStyle.opacity,
30325
31061
  1
30326
31062
  );
30327
- if (isNaN(defaultText)) {
30328
- // Use name
30329
- defaultText = lineData.getName(idx);
30330
- }
31063
+
30331
31064
  line.useStyle(zrUtil.defaults(
30332
31065
  {
30333
31066
  strokeNoScale: true,
@@ -30352,21 +31085,29 @@ return /******/ (function(modules) { // webpackBootstrap
30352
31085
 
30353
31086
  var showLabel = labelModel.getShallow('show');
30354
31087
  var hoverShowLabel = hoverLabelModel.getShallow('show');
30355
- var defaultText;
31088
+
30356
31089
  var label = this.childOfName('label');
30357
31090
  var defaultLabelColor;
31091
+ var defaultText;
31092
+
30358
31093
  if (showLabel || hoverShowLabel) {
30359
- defaultText = numberUtil.round(seriesModel.getRawValue(idx));
31094
+ var rawVal = seriesModel.getRawValue(idx);
31095
+ defaultText = rawVal == null
31096
+ ? defaultText = lineData.getName(idx)
31097
+ : isFinite(rawVal)
31098
+ ? numberUtil.round(rawVal)
31099
+ : rawVal;
30360
31100
  defaultLabelColor = visualColor || '#000';
30361
31101
  }
31102
+
30362
31103
  // label.afterUpdate = lineAfterUpdate;
30363
31104
  if (showLabel) {
30364
31105
  var textStyleModel = labelModel.getModel('textStyle');
30365
31106
  label.setStyle({
30366
31107
  text: zrUtil.retrieve(
30367
- seriesModel.getFormattedLabel(idx, 'normal', lineData.dataType),
30368
- defaultText
30369
- ),
31108
+ seriesModel.getFormattedLabel(idx, 'normal', lineData.dataType),
31109
+ defaultText
31110
+ ),
30370
31111
  textFont: textStyleModel.getFont(),
30371
31112
  fill: textStyleModel.getTextColor() || defaultLabelColor
30372
31113
  });
@@ -30383,9 +31124,9 @@ return /******/ (function(modules) { // webpackBootstrap
30383
31124
 
30384
31125
  label.hoverStyle = {
30385
31126
  text: zrUtil.retrieve(
30386
- seriesModel.getFormattedLabel(idx, 'emphasis', lineData.dataType),
30387
- defaultText
30388
- ),
31127
+ seriesModel.getFormattedLabel(idx, 'emphasis', lineData.dataType),
31128
+ defaultText
31129
+ ),
30389
31130
  textFont: textStyleHoverModel.getFont(),
30390
31131
  fill: textStyleHoverModel.getTextColor() || defaultLabelColor
30391
31132
  };
@@ -30417,7 +31158,7 @@ return /******/ (function(modules) { // webpackBootstrap
30417
31158
 
30418
31159
 
30419
31160
  /***/ },
30420
- /* 201 */
31161
+ /* 202 */
30421
31162
  /***/ function(module, exports, __webpack_require__) {
30422
31163
 
30423
31164
  /**
@@ -30474,7 +31215,6 @@ return /******/ (function(modules) { // webpackBootstrap
30474
31215
 
30475
31216
 
30476
31217
  /***/ },
30477
- /* 202 */,
30478
31218
  /* 203 */,
30479
31219
  /* 204 */,
30480
31220
  /* 205 */,
@@ -30505,7 +31245,8 @@ return /******/ (function(modules) { // webpackBootstrap
30505
31245
  /* 230 */,
30506
31246
  /* 231 */,
30507
31247
  /* 232 */,
30508
- /* 233 */
31248
+ /* 233 */,
31249
+ /* 234 */
30509
31250
  /***/ function(module, exports, __webpack_require__) {
30510
31251
 
30511
31252
  /**
@@ -30518,8 +31259,9 @@ return /******/ (function(modules) { // webpackBootstrap
30518
31259
 
30519
31260
  var Eventful = __webpack_require__(33);
30520
31261
  var zrUtil = __webpack_require__(4);
31262
+ var BoundingRect = __webpack_require__(9);
30521
31263
  var graphic = __webpack_require__(43);
30522
- var interactionMutex = __webpack_require__(175);
31264
+ var interactionMutex = __webpack_require__(176);
30523
31265
  var DataDiffer = __webpack_require__(98);
30524
31266
 
30525
31267
  var curry = zrUtil.curry;
@@ -30727,7 +31469,14 @@ return /******/ (function(modules) { // webpackBootstrap
30727
31469
  });
30728
31470
  thisGroup.add(panel);
30729
31471
  }
30730
- panel.attr('shape', panelOpt.rect);
31472
+
31473
+ var rect = panelOpt.rect;
31474
+ // Using BoundingRect to normalize negative width/height.
31475
+ if (!(rect instanceof BoundingRect)) {
31476
+ rect = BoundingRect.create(rect);
31477
+ }
31478
+
31479
+ panel.attr('shape', rect.plain());
30731
31480
  panel.__brushPanelId = panelId;
30732
31481
  newPanels[panelId] = panel;
30733
31482
  oldPanels[panelId] = null;
@@ -31504,7 +32253,6 @@ return /******/ (function(modules) { // webpackBootstrap
31504
32253
 
31505
32254
 
31506
32255
  /***/ },
31507
- /* 234 */,
31508
32256
  /* 235 */,
31509
32257
  /* 236 */,
31510
32258
  /* 237 */,
@@ -31543,7 +32291,8 @@ return /******/ (function(modules) { // webpackBootstrap
31543
32291
  /* 270 */,
31544
32292
  /* 271 */,
31545
32293
  /* 272 */,
31546
- /* 273 */
32294
+ /* 273 */,
32295
+ /* 274 */
31547
32296
  /***/ function(module, exports, __webpack_require__) {
31548
32297
 
31549
32298
  /**
@@ -31551,17 +32300,17 @@ return /******/ (function(modules) { // webpackBootstrap
31551
32300
  */
31552
32301
 
31553
32302
 
31554
- __webpack_require__(274);
31555
32303
  __webpack_require__(275);
31556
32304
  __webpack_require__(276);
32305
+ __webpack_require__(277);
31557
32306
 
31558
32307
  var echarts = __webpack_require__(1);
31559
32308
  // Series Filter
31560
- echarts.registerProcessor(__webpack_require__(278));
32309
+ echarts.registerProcessor(__webpack_require__(279));
31561
32310
 
31562
32311
 
31563
32312
  /***/ },
31564
- /* 274 */
32313
+ /* 275 */
31565
32314
  /***/ function(module, exports, __webpack_require__) {
31566
32315
 
31567
32316
  'use strict';
@@ -31679,7 +32428,7 @@ return /******/ (function(modules) { // webpackBootstrap
31679
32428
  toggleSelected: function (name) {
31680
32429
  var selected = this.option.selected;
31681
32430
  // Default is true
31682
- if (!(name in selected)) {
32431
+ if (!selected.hasOwnProperty(name)) {
31683
32432
  selected[name] = true;
31684
32433
  }
31685
32434
  this[selected[name] ? 'unSelect' : 'select'](name);
@@ -31690,7 +32439,7 @@ return /******/ (function(modules) { // webpackBootstrap
31690
32439
  */
31691
32440
  isSelected: function (name) {
31692
32441
  var selected = this.option.selected;
31693
- return !((name in selected) && !selected[name])
32442
+ return !(selected.hasOwnProperty(name) && !selected[name])
31694
32443
  && zrUtil.indexOf(this._availableNames, name) >= 0;
31695
32444
  },
31696
32445
 
@@ -31758,7 +32507,7 @@ return /******/ (function(modules) { // webpackBootstrap
31758
32507
 
31759
32508
 
31760
32509
  /***/ },
31761
- /* 275 */
32510
+ /* 276 */
31762
32511
  /***/ function(module, exports, __webpack_require__) {
31763
32512
 
31764
32513
  /**
@@ -31845,7 +32594,7 @@ return /******/ (function(modules) { // webpackBootstrap
31845
32594
 
31846
32595
 
31847
32596
  /***/ },
31848
- /* 276 */
32597
+ /* 277 */
31849
32598
  /***/ function(module, exports, __webpack_require__) {
31850
32599
 
31851
32600
 
@@ -31853,7 +32602,7 @@ return /******/ (function(modules) { // webpackBootstrap
31853
32602
  var zrUtil = __webpack_require__(4);
31854
32603
  var symbolCreator = __webpack_require__(106);
31855
32604
  var graphic = __webpack_require__(43);
31856
- var listComponentHelper = __webpack_require__(277);
32605
+ var listComponentHelper = __webpack_require__(278);
31857
32606
 
31858
32607
  var curry = zrUtil.curry;
31859
32608
 
@@ -31956,8 +32705,8 @@ return /******/ (function(modules) { // webpackBootstrap
31956
32705
  );
31957
32706
 
31958
32707
  itemGroup.on('click', curry(dispatchSelectAction, name, api))
31959
- .on('mouseover', curry(dispatchHighlightAction, seriesModel, '', api))
31960
- .on('mouseout', curry(dispatchDownplayAction, seriesModel, '', api));
32708
+ .on('mouseover', curry(dispatchHighlightAction, seriesModel, null, api))
32709
+ .on('mouseout', curry(dispatchDownplayAction, seriesModel, null, api));
31961
32710
 
31962
32711
  legendDrawedMap[name] = true;
31963
32712
  }
@@ -32026,6 +32775,7 @@ return /******/ (function(modules) { // webpackBootstrap
32026
32775
  var itemIcon = itemModel.get('icon');
32027
32776
 
32028
32777
  var tooltipModel = itemModel.getModel('tooltip');
32778
+ var legendGlobalTooltipModel = tooltipModel.parentModel;
32029
32779
 
32030
32780
  // Use user given icon first
32031
32781
  legendSymbolType = itemIcon || legendSymbolType;
@@ -32083,7 +32833,7 @@ return /******/ (function(modules) { // webpackBootstrap
32083
32833
  tooltip: tooltipModel.get('show') ? zrUtil.extend({
32084
32834
  content: name,
32085
32835
  // Defaul formatter
32086
- formatter: function () {
32836
+ formatter: legendGlobalTooltipModel.get('formatter', true) || function () {
32087
32837
  return name;
32088
32838
  },
32089
32839
  formatterParams: {
@@ -32114,7 +32864,7 @@ return /******/ (function(modules) { // webpackBootstrap
32114
32864
 
32115
32865
 
32116
32866
  /***/ },
32117
- /* 277 */
32867
+ /* 278 */
32118
32868
  /***/ function(module, exports, __webpack_require__) {
32119
32869
 
32120
32870
 
@@ -32184,7 +32934,7 @@ return /******/ (function(modules) { // webpackBootstrap
32184
32934
 
32185
32935
 
32186
32936
  /***/ },
32187
- /* 278 */
32937
+ /* 279 */
32188
32938
  /***/ function(module, exports) {
32189
32939
 
32190
32940
 
@@ -32208,16 +32958,16 @@ return /******/ (function(modules) { // webpackBootstrap
32208
32958
 
32209
32959
 
32210
32960
  /***/ },
32211
- /* 279 */
32961
+ /* 280 */
32212
32962
  /***/ function(module, exports, __webpack_require__) {
32213
32963
 
32214
32964
  // FIXME Better way to pack data in graphic element
32215
32965
 
32216
32966
 
32217
- __webpack_require__(280);
32218
-
32219
32967
  __webpack_require__(281);
32220
32968
 
32969
+ __webpack_require__(282);
32970
+
32221
32971
  // Show tip action
32222
32972
  /**
32223
32973
  * @action
@@ -32249,7 +32999,7 @@ return /******/ (function(modules) { // webpackBootstrap
32249
32999
 
32250
33000
 
32251
33001
  /***/ },
32252
- /* 280 */
33002
+ /* 281 */
32253
33003
  /***/ function(module, exports, __webpack_require__) {
32254
33004
 
32255
33005
 
@@ -32271,7 +33021,7 @@ return /******/ (function(modules) { // webpackBootstrap
32271
33021
  // 触发类型,默认数据触发,见下图,可选为:'item' ¦ 'axis'
32272
33022
  trigger: 'item',
32273
33023
 
32274
- // 触发条件,支持 'click' | 'mousemove'
33024
+ // 触发条件,支持 'click' | 'mousemove' | 'none'
32275
33025
  triggerOn: 'mousemove',
32276
33026
 
32277
33027
  // 是否永远显示 content
@@ -32358,16 +33108,17 @@ return /******/ (function(modules) { // webpackBootstrap
32358
33108
 
32359
33109
 
32360
33110
  /***/ },
32361
- /* 281 */
33111
+ /* 282 */
32362
33112
  /***/ function(module, exports, __webpack_require__) {
32363
33113
 
32364
33114
 
32365
33115
 
32366
- var TooltipContent = __webpack_require__(282);
33116
+ var TooltipContent = __webpack_require__(283);
32367
33117
  var graphic = __webpack_require__(43);
32368
33118
  var zrUtil = __webpack_require__(4);
32369
33119
  var formatUtil = __webpack_require__(6);
32370
33120
  var numberUtil = __webpack_require__(7);
33121
+ var modelUtil = __webpack_require__(5);
32371
33122
  var parsePercent = numberUtil.parsePercent;
32372
33123
  var env = __webpack_require__(2);
32373
33124
  var Model = __webpack_require__(12);
@@ -32599,8 +33350,16 @@ return /******/ (function(modules) { // webpackBootstrap
32599
33350
  this.group.add(crossText);
32600
33351
  }
32601
33352
 
33353
+ var triggerOn = tooltipModel.get('triggerOn');
33354
+
32602
33355
  // Try to keep the tooltip show when refreshing
32603
- if (this._lastX != null && this._lastY != null) {
33356
+ if (this._lastX != null
33357
+ && this._lastY != null
33358
+ // When user is willing to control tooltip totally using API,
33359
+ // self._manuallyShowTip({x, y}) might cause tooltip hide,
33360
+ // which is not expected.
33361
+ && triggerOn !== 'none'
33362
+ ) {
32604
33363
  var self = this;
32605
33364
  clearTimeout(this._refreshUpdateTimeout);
32606
33365
  this._refreshUpdateTimeout = setTimeout(function () {
@@ -32619,14 +33378,17 @@ return /******/ (function(modules) { // webpackBootstrap
32619
33378
  zr.off('mousemove', this._mousemove);
32620
33379
  zr.off('mouseout', this._hide);
32621
33380
  zr.off('globalout', this._hide);
32622
- if (tooltipModel.get('triggerOn') === 'click') {
33381
+
33382
+ if (triggerOn === 'click') {
32623
33383
  zr.on('click', this._tryShow, this);
32624
33384
  }
32625
- else {
33385
+ else if (triggerOn === 'mousemove') {
32626
33386
  zr.on('mousemove', this._mousemove, this);
32627
33387
  zr.on('mouseout', this._hide, this);
32628
33388
  zr.on('globalout', this._hide, this);
32629
33389
  }
33390
+ // else triggerOn is 'none', which enable user
33391
+ // to control tooltip totally using API.
32630
33392
  },
32631
33393
 
32632
33394
  _mousemove: function (e) {
@@ -32645,17 +33407,17 @@ return /******/ (function(modules) { // webpackBootstrap
32645
33407
 
32646
33408
  /**
32647
33409
  * Show tip manually by
32648
- * dispatchAction({
32649
- * type: 'showTip',
32650
- * x: 10,
32651
- * y: 10
32652
- * });
33410
+ * dispatchAction({
33411
+ * type: 'showTip',
33412
+ * x: 10,
33413
+ * y: 10
33414
+ * });
32653
33415
  * Or
32654
- * dispatchAction({
33416
+ * dispatchAction({
32655
33417
  * type: 'showTip',
32656
33418
  * seriesIndex: 0,
32657
- * dataIndex: 1
32658
- * });
33419
+ * dataIndex or dataIndexInside or name
33420
+ * });
32659
33421
  *
32660
33422
  * TODO Batch
32661
33423
  */
@@ -32667,7 +33429,6 @@ return /******/ (function(modules) { // webpackBootstrap
32667
33429
 
32668
33430
  var ecModel = this._ecModel;
32669
33431
  var seriesIndex = event.seriesIndex;
32670
- var dataIndex = event.dataIndex;
32671
33432
  var seriesModel = ecModel.getSeriesByIndex(seriesIndex);
32672
33433
  var api = this._api;
32673
33434
 
@@ -32682,14 +33443,23 @@ return /******/ (function(modules) { // webpackBootstrap
32682
33443
  }
32683
33444
  if (seriesModel) {
32684
33445
  var data = seriesModel.getData();
32685
- if (dataIndex == null) {
32686
- dataIndex = data.indexOfName(event.name);
33446
+ var dataIndex = modelUtil.queryDataIndex(data, event);
33447
+
33448
+ if (dataIndex == null || zrUtil.isArray(dataIndex)) {
33449
+ return;
32687
33450
  }
33451
+
32688
33452
  var el = data.getItemGraphicEl(dataIndex);
32689
- var cx, cy;
33453
+ var cx;
33454
+ var cy;
32690
33455
  // Try to get the point in coordinate system
32691
33456
  var coordSys = seriesModel.coordinateSystem;
32692
- if (coordSys && coordSys.dataToPoint) {
33457
+ if (seriesModel.getTooltipPosition) {
33458
+ var point = seriesModel.getTooltipPosition(dataIndex) || [];
33459
+ cx = point[0];
33460
+ cy = point[1];
33461
+ }
33462
+ else if (coordSys && coordSys.dataToPoint) {
32693
33463
  var point = coordSys.dataToPoint(
32694
33464
  data.getValues(
32695
33465
  zrUtil.map(coordSys.dimensions, function (dim) {
@@ -32707,10 +33477,12 @@ return /******/ (function(modules) { // webpackBootstrap
32707
33477
  cx = rect.x + rect.width / 2;
32708
33478
  cy = rect.y + rect.height / 2;
32709
33479
  }
33480
+
32710
33481
  if (cx != null && cy != null) {
32711
33482
  this._tryShow({
32712
33483
  offsetX: cx,
32713
33484
  offsetY: cy,
33485
+ position: event.position,
32714
33486
  target: el,
32715
33487
  event: {}
32716
33488
  });
@@ -32722,6 +33494,7 @@ return /******/ (function(modules) { // webpackBootstrap
32722
33494
  this._tryShow({
32723
33495
  offsetX: event.x,
32724
33496
  offsetY: event.y,
33497
+ position: event.position,
32725
33498
  target: el,
32726
33499
  event: {}
32727
33500
  });
@@ -32818,7 +33591,7 @@ return /******/ (function(modules) { // webpackBootstrap
32818
33591
  api.dispatchAction({
32819
33592
  type: 'showTip',
32820
33593
  from: this.uid,
32821
- dataIndex: el.dataIndex,
33594
+ dataIndexInside: el.dataIndex,
32822
33595
  seriesIndex: el.seriesIndex
32823
33596
  });
32824
33597
  }
@@ -32839,7 +33612,7 @@ return /******/ (function(modules) { // webpackBootstrap
32839
33612
  this._showTooltipContent(
32840
33613
  // TODO params
32841
33614
  subTooltipModel, defaultHtml, subTooltipModel.get('formatterParams') || {},
32842
- asyncTicket, e.offsetX, e.offsetY, el, api
33615
+ asyncTicket, e.offsetX, e.offsetY, e.position, el, api
32843
33616
  );
32844
33617
  }
32845
33618
  else {
@@ -32949,7 +33722,7 @@ return /******/ (function(modules) { // webpackBootstrap
32949
33722
 
32950
33723
  if (axisPointerType !== 'cross') {
32951
33724
  this._dispatchAndShowSeriesTooltipContent(
32952
- coordSys, seriesCoordSysSameAxis.series, point, value, contentNotChange
33725
+ coordSys, seriesCoordSysSameAxis.series, point, value, contentNotChange, e.position
32953
33726
  );
32954
33727
  }
32955
33728
  }, this);
@@ -33275,10 +34048,10 @@ return /******/ (function(modules) { // webpackBootstrap
33275
34048
  * @param {Array.<number>} point
33276
34049
  * @param {Array.<number>} value
33277
34050
  * @param {boolean} contentNotChange
33278
- * @param {Object} e
34051
+ * @param {Array.<number>|string|Function} [positionExpr]
33279
34052
  */
33280
34053
  _dispatchAndShowSeriesTooltipContent: function (
33281
- coordSys, seriesList, point, value, contentNotChange
34054
+ coordSys, seriesList, point, value, contentNotChange, positionExpr
33282
34055
  ) {
33283
34056
 
33284
34057
  var rootTooltipModel = this._tooltipModel;
@@ -33289,7 +34062,7 @@ return /******/ (function(modules) { // webpackBootstrap
33289
34062
  var payloadBatch = zrUtil.map(seriesList, function (series) {
33290
34063
  return {
33291
34064
  seriesIndex: series.seriesIndex,
33292
- dataIndex: series.getAxisTooltipDataIndex
34065
+ dataIndexInside: series.getAxisTooltipDataIndex
33293
34066
  ? series.getAxisTooltipDataIndex(series.coordDimToDataDim(baseAxis.dim), value, baseAxis)
33294
34067
  : series.getData().indexOfNearest(
33295
34068
  series.coordDimToDataDim(baseAxis.dim)[0],
@@ -33320,19 +34093,19 @@ return /******/ (function(modules) { // webpackBootstrap
33320
34093
  // Dispatch showTip action
33321
34094
  api.dispatchAction({
33322
34095
  type: 'showTip',
33323
- dataIndex: payloadBatch[0].dataIndex,
34096
+ dataIndexInside: payloadBatch[0].dataIndexInside,
33324
34097
  seriesIndex: payloadBatch[0].seriesIndex,
33325
34098
  from: this.uid
33326
34099
  });
33327
34100
 
33328
34101
  if (baseAxis && rootTooltipModel.get('showContent') && rootTooltipModel.get('show')) {
33329
34102
  var paramsList = zrUtil.map(seriesList, function (series, index) {
33330
- return series.getDataParams(payloadBatch[index].dataIndex);
34103
+ return series.getDataParams(payloadBatch[index].dataIndexInside);
33331
34104
  });
33332
34105
 
33333
34106
  if (!contentNotChange) {
33334
34107
  // Update html content
33335
- var firstDataIndex = payloadBatch[0].dataIndex;
34108
+ var firstDataIndex = payloadBatch[0].dataIndexInside;
33336
34109
 
33337
34110
  // Default tooltip content
33338
34111
  // FIXME
@@ -33343,19 +34116,19 @@ return /******/ (function(modules) { // webpackBootstrap
33343
34116
  : seriesList[0].getData().getName(firstDataIndex);
33344
34117
  var defaultHtml = (firstLine ? firstLine + '<br />' : '')
33345
34118
  + zrUtil.map(seriesList, function (series, index) {
33346
- return series.formatTooltip(payloadBatch[index].dataIndex, true);
34119
+ return series.formatTooltip(payloadBatch[index].dataIndexInside, true);
33347
34120
  }).join('<br />');
33348
34121
 
33349
34122
  var asyncTicket = 'axis_' + coordSys.name + '_' + firstDataIndex;
33350
34123
 
33351
34124
  this._showTooltipContent(
33352
34125
  rootTooltipModel, defaultHtml, paramsList, asyncTicket,
33353
- point[0], point[1], null, api
34126
+ point[0], point[1], positionExpr, null, api
33354
34127
  );
33355
34128
  }
33356
34129
  else {
33357
34130
  updatePosition(
33358
- rootTooltipModel.get('position'), point[0], point[1],
34131
+ positionExpr || rootTooltipModel.get('position'), point[0], point[1],
33359
34132
  this._tooltipContent, paramsList, null, api
33360
34133
  );
33361
34134
  }
@@ -33400,12 +34173,12 @@ return /******/ (function(modules) { // webpackBootstrap
33400
34173
 
33401
34174
  this._showTooltipContent(
33402
34175
  tooltipModel, defaultHtml, params, asyncTicket,
33403
- e.offsetX, e.offsetY, e.target, api
34176
+ e.offsetX, e.offsetY, e.position, e.target, api
33404
34177
  );
33405
34178
  },
33406
34179
 
33407
34180
  _showTooltipContent: function (
33408
- tooltipModel, defaultHtml, params, asyncTicket, x, y, target, api
34181
+ tooltipModel, defaultHtml, params, asyncTicket, x, y, positionExpr, target, api
33409
34182
  ) {
33410
34183
  // Reset ticket
33411
34184
  this._ticket = '';
@@ -33414,7 +34187,7 @@ return /******/ (function(modules) { // webpackBootstrap
33414
34187
  var tooltipContent = this._tooltipContent;
33415
34188
 
33416
34189
  var formatter = tooltipModel.get('formatter');
33417
- var positionExpr = tooltipModel.get('position');
34190
+ positionExpr = positionExpr || tooltipModel.get('position');
33418
34191
  var html = defaultHtml;
33419
34192
 
33420
34193
  if (formatter) {
@@ -33533,7 +34306,7 @@ return /******/ (function(modules) { // webpackBootstrap
33533
34306
 
33534
34307
 
33535
34308
  /***/ },
33536
- /* 282 */
34309
+ /* 283 */
33537
34310
  /***/ function(module, exports, __webpack_require__) {
33538
34311
 
33539
34312
  /**
@@ -33680,6 +34453,7 @@ return /******/ (function(modules) { // webpackBootstrap
33680
34453
  self._inContent = true;
33681
34454
  };
33682
34455
  el.onmousemove = function (e) {
34456
+ e = e || window.event;
33683
34457
  if (!self.enterable) {
33684
34458
  // Try trigger zrender event to avoid mouse
33685
34459
  // in and out shape too frequently
@@ -33703,14 +34477,14 @@ return /******/ (function(modules) { // webpackBootstrap
33703
34477
  function compromiseMobile(tooltipContentEl, container) {
33704
34478
  // Prevent default behavior on mobile. For example,
33705
34479
  // default pinch gesture will cause browser zoom.
33706
- // We do not preventing event on tooltip contnet el,
34480
+ // We do not preventing event on tooltip content el,
33707
34481
  // because user may need customization in tooltip el.
33708
34482
  eventUtil.addEventListener(container, 'touchstart', preventDefault);
33709
34483
  eventUtil.addEventListener(container, 'touchmove', preventDefault);
33710
34484
  eventUtil.addEventListener(container, 'touchend', preventDefault);
33711
34485
 
33712
34486
  function preventDefault(e) {
33713
- if (contains(e.target)) {
34487
+ if (!contains(e.target)) {
33714
34488
  e.preventDefault();
33715
34489
  }
33716
34490
  }
@@ -33806,7 +34580,6 @@ return /******/ (function(modules) { // webpackBootstrap
33806
34580
 
33807
34581
 
33808
34582
  /***/ },
33809
- /* 283 */,
33810
34583
  /* 284 */,
33811
34584
  /* 285 */,
33812
34585
  /* 286 */,
@@ -33831,7 +34604,8 @@ return /******/ (function(modules) { // webpackBootstrap
33831
34604
  /* 305 */,
33832
34605
  /* 306 */,
33833
34606
  /* 307 */,
33834
- /* 308 */
34607
+ /* 308 */,
34608
+ /* 309 */
33835
34609
  /***/ function(module, exports) {
33836
34610
 
33837
34611
 
@@ -33979,7 +34753,7 @@ return /******/ (function(modules) { // webpackBootstrap
33979
34753
 
33980
34754
 
33981
34755
  /***/ },
33982
- /* 309 */
34756
+ /* 310 */
33983
34757
  /***/ function(module, exports, __webpack_require__) {
33984
34758
 
33985
34759
 
@@ -34213,11 +34987,11 @@ return /******/ (function(modules) { // webpackBootstrap
34213
34987
 
34214
34988
 
34215
34989
  /***/ },
34216
- /* 310 */,
34217
34990
  /* 311 */,
34218
34991
  /* 312 */,
34219
34992
  /* 313 */,
34220
- /* 314 */
34993
+ /* 314 */,
34994
+ /* 315 */
34221
34995
  /***/ function(module, exports) {
34222
34996
 
34223
34997
  'use strict';
@@ -34237,7 +35011,7 @@ return /******/ (function(modules) { // webpackBootstrap
34237
35011
 
34238
35012
 
34239
35013
  /***/ },
34240
- /* 315 */
35014
+ /* 316 */
34241
35015
  /***/ function(module, exports, __webpack_require__) {
34242
35016
 
34243
35017
  'use strict';
@@ -34451,7 +35225,7 @@ return /******/ (function(modules) { // webpackBootstrap
34451
35225
 
34452
35226
 
34453
35227
  /***/ },
34454
- /* 316 */
35228
+ /* 317 */
34455
35229
  /***/ function(module, exports, __webpack_require__) {
34456
35230
 
34457
35231
  /**
@@ -34459,24 +35233,24 @@ return /******/ (function(modules) { // webpackBootstrap
34459
35233
  */
34460
35234
 
34461
35235
 
34462
- __webpack_require__(317);
34463
-
34464
35236
  __webpack_require__(318);
34465
- __webpack_require__(321);
34466
35237
 
35238
+ __webpack_require__(319);
34467
35239
  __webpack_require__(322);
35240
+
34468
35241
  __webpack_require__(323);
35242
+ __webpack_require__(324);
34469
35243
 
34470
- __webpack_require__(325);
34471
35244
  __webpack_require__(326);
35245
+ __webpack_require__(327);
34472
35246
 
34473
- __webpack_require__(328);
34474
35247
  __webpack_require__(329);
35248
+ __webpack_require__(330);
34475
35249
 
34476
35250
 
34477
35251
 
34478
35252
  /***/ },
34479
- /* 317 */
35253
+ /* 318 */
34480
35254
  /***/ function(module, exports, __webpack_require__) {
34481
35255
 
34482
35256
 
@@ -34489,7 +35263,7 @@ return /******/ (function(modules) { // webpackBootstrap
34489
35263
 
34490
35264
 
34491
35265
  /***/ },
34492
- /* 318 */
35266
+ /* 319 */
34493
35267
  /***/ function(module, exports, __webpack_require__) {
34494
35268
 
34495
35269
  /**
@@ -34501,8 +35275,8 @@ return /******/ (function(modules) { // webpackBootstrap
34501
35275
  var env = __webpack_require__(2);
34502
35276
  var echarts = __webpack_require__(1);
34503
35277
  var modelUtil = __webpack_require__(5);
34504
- var helper = __webpack_require__(319);
34505
- var AxisProxy = __webpack_require__(320);
35278
+ var helper = __webpack_require__(320);
35279
+ var AxisProxy = __webpack_require__(321);
34506
35280
  var each = zrUtil.each;
34507
35281
  var eachAxisDim = helper.eachAxisDim;
34508
35282
 
@@ -34524,7 +35298,6 @@ return /******/ (function(modules) { // webpackBootstrap
34524
35298
  xAxisIndex: null, // Default the first horizontal category axis.
34525
35299
  yAxisIndex: null, // Default the first vertical category axis.
34526
35300
 
34527
-
34528
35301
  filterMode: 'filter', // Possible values: 'filter' or 'empty'.
34529
35302
  // 'filter': data items which are out of window will be removed.
34530
35303
  // This option is applicable when filtering outliers.
@@ -34975,7 +35748,7 @@ return /******/ (function(modules) { // webpackBootstrap
34975
35748
 
34976
35749
 
34977
35750
  /***/ },
34978
- /* 319 */
35751
+ /* 320 */
34979
35752
  /***/ function(module, exports, __webpack_require__) {
34980
35753
 
34981
35754
 
@@ -35103,7 +35876,7 @@ return /******/ (function(modules) { // webpackBootstrap
35103
35876
 
35104
35877
 
35105
35878
  /***/ },
35106
- /* 320 */
35879
+ /* 321 */
35107
35880
  /***/ function(module, exports, __webpack_require__) {
35108
35881
 
35109
35882
  /**
@@ -35215,14 +35988,17 @@ return /******/ (function(modules) { // webpackBootstrap
35215
35988
  var ecModel = this.ecModel;
35216
35989
 
35217
35990
  ecModel.eachSeries(function (seriesModel) {
35218
- var dimName = this._dimName;
35219
- var axisModel = ecModel.queryComponents({
35220
- mainType: dimName + 'Axis',
35221
- index: seriesModel.get(dimName + 'AxisIndex'),
35222
- id: seriesModel.get(dimName + 'AxisId')
35223
- })[0];
35224
- if (this._axisIndex === (axisModel && axisModel.componentIndex)) {
35225
- seriesModels.push(seriesModel);
35991
+ var coordSysName = seriesModel.get('coordinateSystem');
35992
+ if (coordSysName === 'cartesian2d' || coordSysName === 'polar') {
35993
+ var dimName = this._dimName;
35994
+ var axisModel = ecModel.queryComponents({
35995
+ mainType: dimName + 'Axis',
35996
+ index: seriesModel.get(dimName + 'AxisIndex'),
35997
+ id: seriesModel.get(dimName + 'AxisId')
35998
+ })[0];
35999
+ if (this._axisIndex === (axisModel && axisModel.componentIndex)) {
36000
+ seriesModels.push(seriesModel);
36001
+ }
35226
36002
  }
35227
36003
  }, this);
35228
36004
 
@@ -35472,7 +36248,7 @@ return /******/ (function(modules) { // webpackBootstrap
35472
36248
 
35473
36249
 
35474
36250
  /***/ },
35475
- /* 321 */
36251
+ /* 322 */
35476
36252
  /***/ function(module, exports, __webpack_require__) {
35477
36253
 
35478
36254
 
@@ -35519,21 +36295,30 @@ return /******/ (function(modules) { // webpackBootstrap
35519
36295
  if (axisModel) {
35520
36296
  axisModels.push(axisModel);
35521
36297
  var coordSysName;
35522
- if (dimNames.axis === 'xAxis' || dimNames.axis === 'yAxis') {
36298
+ var axisName = dimNames.axis;
36299
+
36300
+ if (axisName === 'xAxis' || axisName === 'yAxis') {
35523
36301
  coordSysName = 'grid';
35524
36302
  }
35525
- else {
35526
- // Polar
36303
+ else if (axisName === 'angleAxis' || axisName === 'radiusAxis') {
35527
36304
  coordSysName = 'polar';
35528
36305
  }
35529
- var coordModel = ecModel.queryComponents({
35530
- mainType: coordSysName,
35531
- index: axisModel.get(coordSysName + 'Index'),
35532
- id: axisModel.get(coordSysName + 'Id')
35533
- })[0];
36306
+
36307
+ var coordModel = coordSysName
36308
+ ? ecModel.queryComponents({
36309
+ mainType: coordSysName,
36310
+ index: axisModel.get(coordSysName + 'Index'),
36311
+ id: axisModel.get(coordSysName + 'Id')
36312
+ })[0]
36313
+ : null;
35534
36314
 
35535
36315
  if (coordModel != null) {
35536
- save(coordModel, axisModel, coordSysName === 'grid' ? cartesians : polars, coordModel.componentIndex);
36316
+ save(
36317
+ coordModel,
36318
+ axisModel,
36319
+ coordSysName === 'grid' ? cartesians : polars,
36320
+ coordModel.componentIndex
36321
+ );
35537
36322
  }
35538
36323
  }
35539
36324
  }, this);
@@ -35566,7 +36351,7 @@ return /******/ (function(modules) { // webpackBootstrap
35566
36351
 
35567
36352
 
35568
36353
  /***/ },
35569
- /* 322 */
36354
+ /* 323 */
35570
36355
  /***/ function(module, exports, __webpack_require__) {
35571
36356
 
35572
36357
  /**
@@ -35574,7 +36359,7 @@ return /******/ (function(modules) { // webpackBootstrap
35574
36359
  */
35575
36360
 
35576
36361
 
35577
- var DataZoomModel = __webpack_require__(318);
36362
+ var DataZoomModel = __webpack_require__(319);
35578
36363
 
35579
36364
  var SliderZoomModel = DataZoomModel.extend({
35580
36365
 
@@ -35645,20 +36430,20 @@ return /******/ (function(modules) { // webpackBootstrap
35645
36430
 
35646
36431
 
35647
36432
  /***/ },
35648
- /* 323 */
36433
+ /* 324 */
35649
36434
  /***/ function(module, exports, __webpack_require__) {
35650
36435
 
35651
36436
 
35652
36437
 
35653
36438
  var zrUtil = __webpack_require__(4);
35654
36439
  var graphic = __webpack_require__(43);
35655
- var throttle = __webpack_require__(308);
35656
- var DataZoomView = __webpack_require__(321);
36440
+ var throttle = __webpack_require__(309);
36441
+ var DataZoomView = __webpack_require__(322);
35657
36442
  var Rect = graphic.Rect;
35658
36443
  var numberUtil = __webpack_require__(7);
35659
36444
  var linearMap = numberUtil.linearMap;
35660
36445
  var layout = __webpack_require__(21);
35661
- var sliderMove = __webpack_require__(324);
36446
+ var sliderMove = __webpack_require__(325);
35662
36447
  var asc = numberUtil.asc;
35663
36448
  var bind = zrUtil.bind;
35664
36449
  // var mathMax = Math.max;
@@ -35944,22 +36729,38 @@ return /******/ (function(modules) { // webpackBootstrap
35944
36729
 
35945
36730
  // Optimize for large data shadow
35946
36731
  var stride = Math.round(data.count() / size[0]);
36732
+ var lastIsEmpty;
35947
36733
  data.each([otherDim], function (value, index) {
35948
36734
  if (stride > 0 && (index % stride)) {
35949
36735
  thisCoord += step;
35950
36736
  return;
35951
36737
  }
36738
+
35952
36739
  // FIXME
35953
- // 应该使用统计的空判断?还是在list里进行空判断?
35954
- var otherCoord = (value == null || isNaN(value) || value === '')
35955
- ? null
35956
- : linearMap(value, otherDataExtent, otherShadowExtent, true);
35957
- if (otherCoord != null) {
35958
- areaPoints.push([thisCoord, otherCoord]);
35959
- linePoints.push([thisCoord, otherCoord]);
36740
+ // Should consider axis.min/axis.max when drawing dataShadow.
36741
+
36742
+ // FIXME
36743
+ // 应该使用统一的空判断?还是在list里进行空判断?
36744
+ var isEmpty = value == null || isNaN(value) || value === '';
36745
+ // See #4235.
36746
+ var otherCoord = isEmpty
36747
+ ? 0 : linearMap(value, otherDataExtent, otherShadowExtent, true);
36748
+
36749
+ // Attempt to draw data shadow precisely when there are empty value.
36750
+ if (isEmpty && !lastIsEmpty && index) {
36751
+ areaPoints.push([areaPoints[areaPoints.length - 1][0], 0]);
36752
+ linePoints.push([linePoints[linePoints.length - 1][0], 0]);
36753
+ }
36754
+ else if (!isEmpty && lastIsEmpty) {
36755
+ areaPoints.push([thisCoord, 0]);
36756
+ linePoints.push([thisCoord, 0]);
35960
36757
  }
35961
36758
 
36759
+ areaPoints.push([thisCoord, otherCoord]);
36760
+ linePoints.push([thisCoord, otherCoord]);
36761
+
35962
36762
  thisCoord += step;
36763
+ lastIsEmpty = isEmpty;
35963
36764
  });
35964
36765
 
35965
36766
  var dataZoomModel = this.dataZoomModel;
@@ -36261,16 +37062,13 @@ return /******/ (function(modules) { // webpackBootstrap
36261
37062
  _formatLabel: function (value, axis) {
36262
37063
  var dataZoomModel = this.dataZoomModel;
36263
37064
  var labelFormatter = dataZoomModel.get('labelFormatter');
36264
- if (zrUtil.isFunction(labelFormatter)) {
36265
- return labelFormatter(value);
36266
- }
36267
37065
 
36268
37066
  var labelPrecision = dataZoomModel.get('labelPrecision');
36269
37067
  if (labelPrecision == null || labelPrecision === 'auto') {
36270
37068
  labelPrecision = axis.getPixelPrecision();
36271
37069
  }
36272
37070
 
36273
- value = (value == null && isNaN(value))
37071
+ var valueStr = (value == null && isNaN(value))
36274
37072
  ? ''
36275
37073
  // FIXME Glue code
36276
37074
  : (axis.type === 'category' || axis.type === 'time')
@@ -36278,11 +37076,11 @@ return /******/ (function(modules) { // webpackBootstrap
36278
37076
  // param of toFixed should less then 20.
36279
37077
  : value.toFixed(Math.min(labelPrecision, 20));
36280
37078
 
36281
- if (zrUtil.isString(labelFormatter)) {
36282
- value = labelFormatter.replace('{value}', value);
36283
- }
36284
-
36285
- return value;
37079
+ return zrUtil.isFunction(labelFormatter)
37080
+ ? labelFormatter(value, valueStr)
37081
+ : zrUtil.isString(labelFormatter)
37082
+ ? labelFormatter.replace('{value}', valueStr)
37083
+ : valueStr;
36286
37084
  },
36287
37085
 
36288
37086
  /**
@@ -36384,7 +37182,7 @@ return /******/ (function(modules) { // webpackBootstrap
36384
37182
 
36385
37183
 
36386
37184
  /***/ },
36387
- /* 324 */
37185
+ /* 325 */
36388
37186
  /***/ function(module, exports) {
36389
37187
 
36390
37188
 
@@ -36443,7 +37241,7 @@ return /******/ (function(modules) { // webpackBootstrap
36443
37241
 
36444
37242
 
36445
37243
  /***/ },
36446
- /* 325 */
37244
+ /* 326 */
36447
37245
  /***/ function(module, exports, __webpack_require__) {
36448
37246
 
36449
37247
  /**
@@ -36451,7 +37249,7 @@ return /******/ (function(modules) { // webpackBootstrap
36451
37249
  */
36452
37250
 
36453
37251
 
36454
- module.exports = __webpack_require__(318).extend({
37252
+ module.exports = __webpack_require__(319).extend({
36455
37253
 
36456
37254
  type: 'dataZoom.inside',
36457
37255
 
@@ -36459,21 +37257,22 @@ return /******/ (function(modules) { // webpackBootstrap
36459
37257
  * @protected
36460
37258
  */
36461
37259
  defaultOption: {
36462
- zoomLock: false // Whether disable zoom but only pan.
37260
+ silent: false, // Whether disable this inside zoom.
37261
+ zoomLock: false // Whether disable zoom but only pan.
36463
37262
  }
36464
37263
  });
36465
37264
 
36466
37265
 
36467
37266
  /***/ },
36468
- /* 326 */
37267
+ /* 327 */
36469
37268
  /***/ function(module, exports, __webpack_require__) {
36470
37269
 
36471
37270
 
36472
37271
 
36473
- var DataZoomView = __webpack_require__(321);
37272
+ var DataZoomView = __webpack_require__(322);
36474
37273
  var zrUtil = __webpack_require__(4);
36475
- var sliderMove = __webpack_require__(324);
36476
- var roams = __webpack_require__(327);
37274
+ var sliderMove = __webpack_require__(325);
37275
+ var roams = __webpack_require__(328);
36477
37276
  var bind = zrUtil.bind;
36478
37277
 
36479
37278
  var InsideZoomView = DataZoomView.extend({
@@ -36506,30 +37305,36 @@ return /******/ (function(modules) { // webpackBootstrap
36506
37305
  this._range = dataZoomModel.getPercentRange();
36507
37306
  }
36508
37307
 
37308
+ var targetInfo = this.getTargetInfo();
37309
+
36509
37310
  // Reset controllers.
36510
- var coordInfoList = this.getTargetInfo().cartesians;
36511
- var allCoordIds = zrUtil.map(coordInfoList, function (coordInfo) {
36512
- return roams.generateCoordId(coordInfo.model);
36513
- });
37311
+ zrUtil.each(['cartesians', 'polars'], function (coordSysName) {
36514
37312
 
36515
- zrUtil.each(coordInfoList, function (coordInfo) {
36516
- var coordModel = coordInfo.model;
36517
- roams.register(
36518
- api,
36519
- {
36520
- coordId: roams.generateCoordId(coordModel),
36521
- allCoordIds: allCoordIds,
36522
- coordinateSystem: coordModel.coordinateSystem,
36523
- dataZoomId: dataZoomModel.id,
36524
- throttleRate: dataZoomModel.get('throttle', true),
36525
- panGetRange: bind(this._onPan, this, coordInfo),
36526
- zoomGetRange: bind(this._onZoom, this, coordInfo)
36527
- }
36528
- );
36529
- }, this);
37313
+ var coordInfoList = targetInfo[coordSysName];
37314
+ var allCoordIds = zrUtil.map(coordInfoList, function (coordInfo) {
37315
+ return roams.generateCoordId(coordInfo.model);
37316
+ });
36530
37317
 
36531
- // TODO
36532
- // polar支持
37318
+ zrUtil.each(coordInfoList, function (coordInfo) {
37319
+ var coordModel = coordInfo.model;
37320
+ var coordinateSystem = coordModel.coordinateSystem;
37321
+
37322
+ roams.register(
37323
+ api,
37324
+ {
37325
+ coordId: roams.generateCoordId(coordModel),
37326
+ allCoordIds: allCoordIds,
37327
+ coordinateSystem: coordinateSystem,
37328
+ containsPoint: bind(operations[coordSysName].containsPoint, this, coordinateSystem),
37329
+ dataZoomId: dataZoomModel.id,
37330
+ throttleRate: dataZoomModel.get('throttle', true),
37331
+ panGetRange: bind(this._onPan, this, coordInfo, coordSysName),
37332
+ zoomGetRange: bind(this._onZoom, this, coordInfo, coordSysName)
37333
+ }
37334
+ );
37335
+ }, this);
37336
+
37337
+ }, this);
36533
37338
  },
36534
37339
 
36535
37340
  /**
@@ -36544,100 +37349,137 @@ return /******/ (function(modules) { // webpackBootstrap
36544
37349
  /**
36545
37350
  * @private
36546
37351
  */
36547
- _onPan: function (coordInfo, controller, dx, dy) {
36548
- return (
36549
- this._range = panCartesian(
36550
- [dx, dy], this._range, controller, coordInfo
36551
- )
37352
+ _onPan: function (coordInfo, coordSysName, controller, dx, dy, oldX, oldY, newX, newY) {
37353
+ if (this.dataZoomModel.option.silent) {
37354
+ return this._range;
37355
+ }
37356
+
37357
+ var range = this._range.slice();
37358
+
37359
+ // Calculate transform by the first axis.
37360
+ var axisModel = coordInfo.axisModels[0];
37361
+ if (!axisModel) {
37362
+ return;
37363
+ }
37364
+
37365
+ var directionInfo = operations[coordSysName].getDirectionInfo(
37366
+ [oldX, oldY], [newX, newY], axisModel, controller, coordInfo
36552
37367
  );
37368
+
37369
+ var percentDelta = directionInfo.signal
37370
+ * (range[1] - range[0])
37371
+ * directionInfo.pixel / directionInfo.pixelLength;
37372
+
37373
+ sliderMove(percentDelta, range, [0, 100], 'rigid');
37374
+
37375
+ return (this._range = range);
36553
37376
  },
36554
37377
 
36555
37378
  /**
36556
37379
  * @private
36557
37380
  */
36558
- _onZoom: function (coordInfo, controller, scale, mouseX, mouseY) {
36559
- var dataZoomModel = this.dataZoomModel;
37381
+ _onZoom: function (coordInfo, coordSysName, controller, scale, mouseX, mouseY) {
37382
+ var option = this.dataZoomModel.option;
36560
37383
 
36561
- if (dataZoomModel.option.zoomLock) {
37384
+ if (option.silent || option.zoomLock) {
36562
37385
  return this._range;
36563
37386
  }
36564
37387
 
36565
- return (
36566
- this._range = scaleCartesian(
36567
- 1 / scale, [mouseX, mouseY], this._range,
36568
- controller, coordInfo, dataZoomModel
36569
- )
37388
+ var range = this._range.slice();
37389
+
37390
+ // Calculate transform by the first axis.
37391
+ var axisModel = coordInfo.axisModels[0];
37392
+ if (!axisModel) {
37393
+ return;
37394
+ }
37395
+
37396
+ var directionInfo = operations[coordSysName].getDirectionInfo(
37397
+ null, [mouseX, mouseY], axisModel, controller, coordInfo
36570
37398
  );
37399
+
37400
+ var percentPoint = (directionInfo.pixel - directionInfo.pixelStart) /
37401
+ directionInfo.pixelLength * (range[1] - range[0]) + range[0];
37402
+
37403
+ scale = Math.max(1 / scale, 0);
37404
+ range[0] = (range[0] - percentPoint) * scale + percentPoint;
37405
+ range[1] = (range[1] - percentPoint) * scale + percentPoint;
37406
+ return (this._range = fixRange(range));
36571
37407
  }
36572
37408
 
36573
37409
  });
36574
37410
 
36575
- function panCartesian(pixelDeltas, range, controller, coordInfo) {
36576
- range = range.slice();
37411
+ var operations = {
36577
37412
 
36578
- // Calculate transform by the first axis.
36579
- var axisModel = coordInfo.axisModels[0];
36580
- if (!axisModel) {
36581
- return;
36582
- }
37413
+ cartesians: {
36583
37414
 
36584
- var directionInfo = getDirectionInfo(pixelDeltas, axisModel, controller);
37415
+ getDirectionInfo: function (oldPoint, newPoint, axisModel, controller, coordInfo) {
37416
+ var axis = axisModel.axis;
37417
+ var ret = {};
37418
+ var rect = coordInfo.model.coordinateSystem.getRect();
37419
+ oldPoint = oldPoint || [0, 0];
36585
37420
 
36586
- var percentDelta = directionInfo.signal
36587
- * (range[1] - range[0])
36588
- * directionInfo.pixel / directionInfo.pixelLength;
36589
-
36590
- sliderMove(
36591
- percentDelta,
36592
- range,
36593
- [0, 100],
36594
- 'rigid'
36595
- );
37421
+ if (axis.dim === 'x') {
37422
+ ret.pixel = newPoint[0] - oldPoint[0];
37423
+ ret.pixelLength = rect.width;
37424
+ ret.pixelStart = rect.x;
37425
+ ret.signal = axis.inverse ? 1 : -1;
37426
+ }
37427
+ else { // axis.dim === 'y'
37428
+ ret.pixel = newPoint[1] - oldPoint[1];
37429
+ ret.pixelLength = rect.height;
37430
+ ret.pixelStart = rect.y;
37431
+ ret.signal = axis.inverse ? -1 : 1;
37432
+ }
36596
37433
 
36597
- return range;
36598
- }
37434
+ return ret;
37435
+ },
36599
37436
 
36600
- function scaleCartesian(scale, mousePoint, range, controller, coordInfo, dataZoomModel) {
36601
- range = range.slice();
37437
+ containsPoint: function (coordinateSystem, x, y) {
37438
+ return coordinateSystem.getRect().contain(x, y);
37439
+ }
37440
+ },
36602
37441
 
36603
- // Calculate transform by the first axis.
36604
- var axisModel = coordInfo.axisModels[0];
36605
- if (!axisModel) {
36606
- return;
36607
- }
37442
+ polars: {
36608
37443
 
36609
- var directionInfo = getDirectionInfo(mousePoint, axisModel, controller);
37444
+ getDirectionInfo: function (oldPoint, newPoint, axisModel, controller, coordInfo) {
37445
+ var axis = axisModel.axis;
37446
+ var ret = {};
37447
+ var polar = coordInfo.model.coordinateSystem;
37448
+ var radiusExtent = polar.getRadiusAxis().getExtent();
37449
+ var angleExtent = polar.getAngleAxis().getExtent();
36610
37450
 
36611
- var mouse = directionInfo.pixel - directionInfo.pixelStart;
36612
- var percentPoint = mouse / directionInfo.pixelLength * (range[1] - range[0]) + range[0];
37451
+ oldPoint = oldPoint ? polar.pointToCoord(oldPoint) : [0, 0];
37452
+ newPoint = polar.pointToCoord(newPoint);
36613
37453
 
36614
- scale = Math.max(scale, 0);
36615
- range[0] = (range[0] - percentPoint) * scale + percentPoint;
36616
- range[1] = (range[1] - percentPoint) * scale + percentPoint;
37454
+ if (axisModel.mainType === 'radiusAxis') {
37455
+ ret.pixel = newPoint[0] - oldPoint[0];
37456
+ // ret.pixelLength = Math.abs(radiusExtent[1] - radiusExtent[0]);
37457
+ // ret.pixelStart = Math.min(radiusExtent[0], radiusExtent[1]);
37458
+ ret.pixelLength = radiusExtent[1] - radiusExtent[0];
37459
+ ret.pixelStart = radiusExtent[0];
37460
+ ret.signal = axis.inverse ? 1 : -1;
37461
+ }
37462
+ else { // 'angleAxis'
37463
+ ret.pixel = newPoint[1] - oldPoint[1];
37464
+ // ret.pixelLength = Math.abs(angleExtent[1] - angleExtent[0]);
37465
+ // ret.pixelStart = Math.min(angleExtent[0], angleExtent[1]);
37466
+ ret.pixelLength = angleExtent[1] - angleExtent[0];
37467
+ ret.pixelStart = angleExtent[0];
37468
+ ret.signal = axis.inverse ? -1 : 1;
37469
+ }
36617
37470
 
36618
- return fixRange(range);
36619
- }
37471
+ return ret;
37472
+ },
36620
37473
 
36621
- function getDirectionInfo(xy, axisModel, controller) {
36622
- var axis = axisModel.axis;
36623
- var rect = controller.rectProvider();
36624
- var ret = {};
37474
+ containsPoint: function (coordinateSystem, x, y) {
37475
+ var radius = coordinateSystem.getRadiusAxis().getExtent()[1];
37476
+ var cx = coordinateSystem.cx;
37477
+ var cy = coordinateSystem.cy;
36625
37478
 
36626
- if (axis.dim === 'x') {
36627
- ret.pixel = xy[0];
36628
- ret.pixelLength = rect.width;
36629
- ret.pixelStart = rect.x;
36630
- ret.signal = axis.inverse ? 1 : -1;
36631
- }
36632
- else { // axis.dim === 'y'
36633
- ret.pixel = xy[1];
36634
- ret.pixelLength = rect.height;
36635
- ret.pixelStart = rect.y;
36636
- ret.signal = axis.inverse ? -1 : 1;
37479
+ return Math.pow(x - cx, 2) + Math.pow(y - cy, 2) <= Math.pow(radius, 2);
37480
+ }
36637
37481
  }
36638
-
36639
- return ret;
36640
- }
37482
+ };
36641
37483
 
36642
37484
  function fixRange(range) {
36643
37485
  // Clamp, using !(<= or >=) to handle NaN.
@@ -36656,7 +37498,7 @@ return /******/ (function(modules) { // webpackBootstrap
36656
37498
 
36657
37499
 
36658
37500
  /***/ },
36659
- /* 327 */
37501
+ /* 328 */
36660
37502
  /***/ function(module, exports, __webpack_require__) {
36661
37503
 
36662
37504
  /**
@@ -36671,8 +37513,8 @@ return /******/ (function(modules) { // webpackBootstrap
36671
37513
  // components.
36672
37514
 
36673
37515
  var zrUtil = __webpack_require__(4);
36674
- var RoamController = __webpack_require__(174);
36675
- var throttle = __webpack_require__(308);
37516
+ var RoamController = __webpack_require__(175);
37517
+ var throttle = __webpack_require__(309);
36676
37518
  var curry = zrUtil.curry;
36677
37519
 
36678
37520
  var ATTR = '\0_ec_dataZoom_roams';
@@ -36684,7 +37526,7 @@ return /******/ (function(modules) { // webpackBootstrap
36684
37526
  * @param {module:echarts/ExtensionAPI} api
36685
37527
  * @param {Object} dataZoomInfo
36686
37528
  * @param {string} dataZoomInfo.coordId
36687
- * @param {Object} dataZoomInfo.coordinateSystem
37529
+ * @param {Function} dataZoomInfo.containsPoint
36688
37530
  * @param {Array.<string>} dataZoomInfo.allCoordIds
36689
37531
  * @param {string} dataZoomInfo.dataZoomId
36690
37532
  * @param {number} dataZoomInfo.throttleRate
@@ -36697,6 +37539,7 @@ return /******/ (function(modules) { // webpackBootstrap
36697
37539
  var theCoordId = dataZoomInfo.coordId;
36698
37540
 
36699
37541
  // Do clean when a dataZoom changes its target coordnate system.
37542
+ // Avoid memory leak, dispose all not-used-registered.
36700
37543
  zrUtil.each(store, function (record, coordId) {
36701
37544
  var dataZoomInfos = record.dataZoomInfos;
36702
37545
  if (dataZoomInfos[theDataZoomId]
@@ -36710,7 +37553,6 @@ return /******/ (function(modules) { // webpackBootstrap
36710
37553
  cleanStore(store);
36711
37554
 
36712
37555
  var record = store[theCoordId];
36713
-
36714
37556
  // Create if needed.
36715
37557
  if (!record) {
36716
37558
  record = store[theCoordId] = {
@@ -36723,10 +37565,7 @@ return /******/ (function(modules) { // webpackBootstrap
36723
37565
  }
36724
37566
 
36725
37567
  // Consider resize, area should be always updated.
36726
- var rect = dataZoomInfo.coordinateSystem.getRect().clone();
36727
- record.controller.rectProvider = function () {
36728
- return rect;
36729
- };
37568
+ record.controller.setContainsPoint(dataZoomInfo.containsPoint);
36730
37569
 
36731
37570
  // Update throttle.
36732
37571
  throttle.createOrUpdate(
@@ -36750,6 +37589,7 @@ return /******/ (function(modules) { // webpackBootstrap
36750
37589
  var store = giveStore(api);
36751
37590
 
36752
37591
  zrUtil.each(store, function (record) {
37592
+ record.controller.dispose();
36753
37593
  var dataZoomInfos = record.dataZoomInfos;
36754
37594
  if (dataZoomInfos[dataZoomId]) {
36755
37595
  delete dataZoomInfos[dataZoomId];
@@ -36805,15 +37645,15 @@ return /******/ (function(modules) { // webpackBootstrap
36805
37645
  function cleanStore(store) {
36806
37646
  zrUtil.each(store, function (record, coordId) {
36807
37647
  if (!record.count) {
36808
- record.controller.off('pan').off('zoom');
37648
+ record.controller.dispose();
36809
37649
  delete store[coordId];
36810
37650
  }
36811
37651
  });
36812
37652
  }
36813
37653
 
36814
- function onPan(record, dx, dy) {
37654
+ function onPan(record, dx, dy, oldX, oldY, newX, newY) {
36815
37655
  wrapAndDispatch(record, function (info) {
36816
- return info.panGetRange(record.controller, dx, dy);
37656
+ return info.panGetRange(record.controller, dx, dy, oldX, oldY, newX, newY);
36817
37657
  });
36818
37658
  }
36819
37659
 
@@ -36853,7 +37693,7 @@ return /******/ (function(modules) { // webpackBootstrap
36853
37693
 
36854
37694
 
36855
37695
  /***/ },
36856
- /* 328 */
37696
+ /* 329 */
36857
37697
  /***/ function(module, exports, __webpack_require__) {
36858
37698
 
36859
37699
  /**
@@ -36916,7 +37756,7 @@ return /******/ (function(modules) { // webpackBootstrap
36916
37756
 
36917
37757
 
36918
37758
  /***/ },
36919
- /* 329 */
37759
+ /* 330 */
36920
37760
  /***/ function(module, exports, __webpack_require__) {
36921
37761
 
36922
37762
  /**
@@ -36925,7 +37765,7 @@ return /******/ (function(modules) { // webpackBootstrap
36925
37765
 
36926
37766
 
36927
37767
  var zrUtil = __webpack_require__(4);
36928
- var helper = __webpack_require__(319);
37768
+ var helper = __webpack_require__(320);
36929
37769
  var echarts = __webpack_require__(1);
36930
37770
 
36931
37771
 
@@ -36964,7 +37804,6 @@ return /******/ (function(modules) { // webpackBootstrap
36964
37804
 
36965
37805
 
36966
37806
  /***/ },
36967
- /* 330 */,
36968
37807
  /* 331 */,
36969
37808
  /* 332 */,
36970
37809
  /* 333 */,
@@ -36979,14 +37818,15 @@ return /******/ (function(modules) { // webpackBootstrap
36979
37818
  /* 342 */,
36980
37819
  /* 343 */,
36981
37820
  /* 344 */,
36982
- /* 345 */
37821
+ /* 345 */,
37822
+ /* 346 */
36983
37823
  /***/ function(module, exports, __webpack_require__) {
36984
37824
 
36985
37825
  // HINT Markpoint can't be used too much
36986
37826
 
36987
37827
 
36988
- __webpack_require__(346);
36989
- __webpack_require__(348);
37828
+ __webpack_require__(347);
37829
+ __webpack_require__(349);
36990
37830
 
36991
37831
  __webpack_require__(1).registerPreprocessor(function (opt) {
36992
37832
  // Make sure markPoint component is enabled
@@ -36995,12 +37835,12 @@ return /******/ (function(modules) { // webpackBootstrap
36995
37835
 
36996
37836
 
36997
37837
  /***/ },
36998
- /* 346 */
37838
+ /* 347 */
36999
37839
  /***/ function(module, exports, __webpack_require__) {
37000
37840
 
37001
37841
 
37002
37842
 
37003
- module.exports = __webpack_require__(347).extend({
37843
+ module.exports = __webpack_require__(348).extend({
37004
37844
 
37005
37845
  type: 'markPoint',
37006
37846
 
@@ -37033,7 +37873,7 @@ return /******/ (function(modules) { // webpackBootstrap
37033
37873
 
37034
37874
 
37035
37875
  /***/ },
37036
- /* 347 */
37876
+ /* 348 */
37037
37877
  /***/ function(module, exports, __webpack_require__) {
37038
37878
 
37039
37879
 
@@ -37111,16 +37951,19 @@ return /******/ (function(modules) { // webpackBootstrap
37111
37951
  fillLabel(item);
37112
37952
  }
37113
37953
  });
37114
- var opt = {
37954
+
37955
+ markerModel = new MarkerModel(
37956
+ markerOpt, this, ecModel
37957
+ );
37958
+
37959
+ zrUtil.extend(markerModel, {
37115
37960
  mainType: this.mainType,
37116
37961
  // Use the same series index and name
37117
37962
  seriesIndex: seriesModel.seriesIndex,
37118
37963
  name: seriesModel.name,
37119
37964
  createdBySelf: true
37120
- };
37121
- markerModel = new MarkerModel(
37122
- markerOpt, this, ecModel, opt
37123
- );
37965
+ });
37966
+
37124
37967
  markerModel.__hostSeries = seriesModel;
37125
37968
  }
37126
37969
  else {
@@ -37168,7 +38011,7 @@ return /******/ (function(modules) { // webpackBootstrap
37168
38011
 
37169
38012
 
37170
38013
  /***/ },
37171
- /* 348 */
38014
+ /* 349 */
37172
38015
  /***/ function(module, exports, __webpack_require__) {
37173
38016
 
37174
38017
 
@@ -37179,7 +38022,7 @@ return /******/ (function(modules) { // webpackBootstrap
37179
38022
 
37180
38023
  var List = __webpack_require__(97);
37181
38024
 
37182
- var markerHelper = __webpack_require__(349);
38025
+ var markerHelper = __webpack_require__(350);
37183
38026
 
37184
38027
  function updateMarkerLayout(mpData, seriesModel, api) {
37185
38028
  var coordSys = seriesModel.coordinateSystem;
@@ -37217,7 +38060,7 @@ return /******/ (function(modules) { // webpackBootstrap
37217
38060
  });
37218
38061
  }
37219
38062
 
37220
- __webpack_require__(350).extend({
38063
+ __webpack_require__(351).extend({
37221
38064
 
37222
38065
  type: 'markPoint',
37223
38066
 
@@ -37329,7 +38172,7 @@ return /******/ (function(modules) { // webpackBootstrap
37329
38172
 
37330
38173
 
37331
38174
  /***/ },
37332
- /* 349 */
38175
+ /* 350 */
37333
38176
  /***/ function(module, exports, __webpack_require__) {
37334
38177
 
37335
38178
 
@@ -37533,7 +38376,7 @@ return /******/ (function(modules) { // webpackBootstrap
37533
38376
 
37534
38377
 
37535
38378
  /***/ },
37536
- /* 350 */
38379
+ /* 351 */
37537
38380
  /***/ function(module, exports, __webpack_require__) {
37538
38381
 
37539
38382
 
@@ -37554,7 +38397,9 @@ return /******/ (function(modules) { // webpackBootstrap
37554
38397
  render: function (markerModel, ecModel, api) {
37555
38398
  var markerGroupMap = this.markerGroupMap;
37556
38399
  for (var name in markerGroupMap) {
37557
- markerGroupMap[name].__keep = false;
38400
+ if (markerGroupMap.hasOwnProperty(name)) {
38401
+ markerGroupMap[name].__keep = false;
38402
+ }
37558
38403
  }
37559
38404
 
37560
38405
  var markerModelKey = this.type + 'Model';
@@ -37564,7 +38409,7 @@ return /******/ (function(modules) { // webpackBootstrap
37564
38409
  }, this);
37565
38410
 
37566
38411
  for (var name in markerGroupMap) {
37567
- if (!markerGroupMap[name].__keep) {
38412
+ if (markerGroupMap.hasOwnProperty(name) && !markerGroupMap[name].__keep) {
37568
38413
  this.group.remove(markerGroupMap[name].group);
37569
38414
  }
37570
38415
  }
@@ -37575,13 +38420,13 @@ return /******/ (function(modules) { // webpackBootstrap
37575
38420
 
37576
38421
 
37577
38422
  /***/ },
37578
- /* 351 */
38423
+ /* 352 */
37579
38424
  /***/ function(module, exports, __webpack_require__) {
37580
38425
 
37581
38426
 
37582
38427
 
37583
- __webpack_require__(352);
37584
38428
  __webpack_require__(353);
38429
+ __webpack_require__(354);
37585
38430
 
37586
38431
  __webpack_require__(1).registerPreprocessor(function (opt) {
37587
38432
  // Make sure markLine component is enabled
@@ -37590,12 +38435,12 @@ return /******/ (function(modules) { // webpackBootstrap
37590
38435
 
37591
38436
 
37592
38437
  /***/ },
37593
- /* 352 */
38438
+ /* 353 */
37594
38439
  /***/ function(module, exports, __webpack_require__) {
37595
38440
 
37596
38441
 
37597
38442
 
37598
- module.exports = __webpack_require__(347).extend({
38443
+ module.exports = __webpack_require__(348).extend({
37599
38444
 
37600
38445
  type: 'markLine',
37601
38446
 
@@ -37635,7 +38480,7 @@ return /******/ (function(modules) { // webpackBootstrap
37635
38480
 
37636
38481
 
37637
38482
  /***/ },
37638
- /* 353 */
38483
+ /* 354 */
37639
38484
  /***/ function(module, exports, __webpack_require__) {
37640
38485
 
37641
38486
 
@@ -37644,9 +38489,9 @@ return /******/ (function(modules) { // webpackBootstrap
37644
38489
  var List = __webpack_require__(97);
37645
38490
  var numberUtil = __webpack_require__(7);
37646
38491
 
37647
- var markerHelper = __webpack_require__(349);
38492
+ var markerHelper = __webpack_require__(350);
37648
38493
 
37649
- var LineDraw = __webpack_require__(199);
38494
+ var LineDraw = __webpack_require__(200);
37650
38495
 
37651
38496
  var markLineTransform = function (seriesModel, coordSys, mlModel, item) {
37652
38497
  var data = seriesModel.getData();
@@ -37693,7 +38538,7 @@ return /******/ (function(modules) { // webpackBootstrap
37693
38538
  mlTo.coord[baseIndex] = Infinity;
37694
38539
 
37695
38540
  var precision = mlModel.get('precision');
37696
- if (precision >= 0) {
38541
+ if (precision >= 0 && typeof value === 'number') {
37697
38542
  value = +value.toFixed(precision);
37698
38543
  }
37699
38544
 
@@ -37816,7 +38661,7 @@ return /******/ (function(modules) { // webpackBootstrap
37816
38661
  data.setItemLayout(idx, point);
37817
38662
  }
37818
38663
 
37819
- __webpack_require__(350).extend({
38664
+ __webpack_require__(351).extend({
37820
38665
 
37821
38666
  type: 'markLine',
37822
38667
 
@@ -37995,13 +38840,13 @@ return /******/ (function(modules) { // webpackBootstrap
37995
38840
 
37996
38841
 
37997
38842
  /***/ },
37998
- /* 354 */
38843
+ /* 355 */
37999
38844
  /***/ function(module, exports, __webpack_require__) {
38000
38845
 
38001
38846
 
38002
38847
 
38003
- __webpack_require__(355);
38004
38848
  __webpack_require__(356);
38849
+ __webpack_require__(357);
38005
38850
 
38006
38851
  __webpack_require__(1).registerPreprocessor(function (opt) {
38007
38852
  // Make sure markArea component is enabled
@@ -38010,12 +38855,12 @@ return /******/ (function(modules) { // webpackBootstrap
38010
38855
 
38011
38856
 
38012
38857
  /***/ },
38013
- /* 355 */
38858
+ /* 356 */
38014
38859
  /***/ function(module, exports, __webpack_require__) {
38015
38860
 
38016
38861
 
38017
38862
 
38018
- module.exports = __webpack_require__(347).extend({
38863
+ module.exports = __webpack_require__(348).extend({
38019
38864
 
38020
38865
  type: 'markArea',
38021
38866
 
@@ -38051,7 +38896,7 @@ return /******/ (function(modules) { // webpackBootstrap
38051
38896
 
38052
38897
 
38053
38898
  /***/ },
38054
- /* 356 */
38899
+ /* 357 */
38055
38900
  /***/ function(module, exports, __webpack_require__) {
38056
38901
 
38057
38902
  // TODO Better on polar
@@ -38063,7 +38908,7 @@ return /******/ (function(modules) { // webpackBootstrap
38063
38908
  var graphic = __webpack_require__(43);
38064
38909
  var colorUtil = __webpack_require__(39);
38065
38910
 
38066
- var markerHelper = __webpack_require__(349);
38911
+ var markerHelper = __webpack_require__(350);
38067
38912
 
38068
38913
  var markAreaTransform = function (seriesModel, coordSys, maModel, item) {
38069
38914
  var lt = markerHelper.dataTransform(seriesModel, item[0]);
@@ -38183,7 +39028,7 @@ return /******/ (function(modules) { // webpackBootstrap
38183
39028
 
38184
39029
  var dimPermutations = [['x0', 'y0'], ['x1', 'y0'], ['x1', 'y1'], ['x0', 'y1']];
38185
39030
 
38186
- __webpack_require__(350).extend({
39031
+ __webpack_require__(351).extend({
38187
39032
 
38188
39033
  type: 'markArea',
38189
39034
 
@@ -38362,7 +39207,6 @@ return /******/ (function(modules) { // webpackBootstrap
38362
39207
 
38363
39208
 
38364
39209
  /***/ },
38365
- /* 357 */,
38366
39210
  /* 358 */,
38367
39211
  /* 359 */,
38368
39212
  /* 360 */,
@@ -38371,28 +39215,29 @@ return /******/ (function(modules) { // webpackBootstrap
38371
39215
  /* 363 */,
38372
39216
  /* 364 */,
38373
39217
  /* 365 */,
38374
- /* 366 */
39218
+ /* 366 */,
39219
+ /* 367 */
38375
39220
  /***/ function(module, exports, __webpack_require__) {
38376
39221
 
38377
39222
 
38378
39223
 
38379
- __webpack_require__(367);
38380
39224
  __webpack_require__(368);
39225
+ __webpack_require__(369);
38381
39226
 
38382
- __webpack_require__(370);
38383
39227
  __webpack_require__(371);
38384
39228
  __webpack_require__(372);
38385
39229
  __webpack_require__(373);
38386
- __webpack_require__(378);
39230
+ __webpack_require__(374);
39231
+ __webpack_require__(379);
38387
39232
 
38388
39233
 
38389
39234
  /***/ },
38390
- /* 367 */
39235
+ /* 368 */
38391
39236
  /***/ function(module, exports, __webpack_require__) {
38392
39237
 
38393
39238
 
38394
39239
 
38395
- var featureManager = __webpack_require__(314);
39240
+ var featureManager = __webpack_require__(315);
38396
39241
  var zrUtil = __webpack_require__(4);
38397
39242
 
38398
39243
  var ToolboxModel = __webpack_require__(1).extendComponentModel({
@@ -38463,17 +39308,17 @@ return /******/ (function(modules) { // webpackBootstrap
38463
39308
 
38464
39309
 
38465
39310
  /***/ },
38466
- /* 368 */
39311
+ /* 369 */
38467
39312
  /***/ function(module, exports, __webpack_require__) {
38468
39313
 
38469
39314
  /* WEBPACK VAR INJECTION */(function(process) {
38470
39315
 
38471
- var featureManager = __webpack_require__(314);
39316
+ var featureManager = __webpack_require__(315);
38472
39317
  var zrUtil = __webpack_require__(4);
38473
39318
  var graphic = __webpack_require__(43);
38474
39319
  var Model = __webpack_require__(12);
38475
39320
  var DataDiffer = __webpack_require__(98);
38476
- var listComponentHelper = __webpack_require__(277);
39321
+ var listComponentHelper = __webpack_require__(278);
38477
39322
  var textContain = __webpack_require__(8);
38478
39323
 
38479
39324
  module.exports = __webpack_require__(1).extendComponentView({
@@ -38623,6 +39468,8 @@ return /******/ (function(modules) { // webpackBootstrap
38623
39468
  if (toolboxModel.get('showTitle')) {
38624
39469
  path.__title = titles[iconName];
38625
39470
  path.on('mouseover', function () {
39471
+ // Should not reuse above hoverStyle, which might be modified.
39472
+ var hoverStyle = iconStyleModel.getModel('emphasis').getItemStyle();
38626
39473
  path.setStyle({
38627
39474
  text: titles[iconName],
38628
39475
  textPosition: hoverStyle.textPosition || 'bottom',
@@ -38713,10 +39560,10 @@ return /******/ (function(modules) { // webpackBootstrap
38713
39560
  }
38714
39561
 
38715
39562
 
38716
- /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(369)))
39563
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(370)))
38717
39564
 
38718
39565
  /***/ },
38719
- /* 369 */
39566
+ /* 370 */
38720
39567
  /***/ function(module, exports) {
38721
39568
 
38722
39569
  // shim for using process in browser
@@ -38841,7 +39688,7 @@ return /******/ (function(modules) { // webpackBootstrap
38841
39688
 
38842
39689
 
38843
39690
  /***/ },
38844
- /* 370 */
39691
+ /* 371 */
38845
39692
  /***/ function(module, exports, __webpack_require__) {
38846
39693
 
38847
39694
 
@@ -38905,7 +39752,7 @@ return /******/ (function(modules) { // webpackBootstrap
38905
39752
  }
38906
39753
  };
38907
39754
 
38908
- __webpack_require__(314).register(
39755
+ __webpack_require__(315).register(
38909
39756
  'saveAsImage', SaveAsImage
38910
39757
  );
38911
39758
 
@@ -38913,7 +39760,7 @@ return /******/ (function(modules) { // webpackBootstrap
38913
39760
 
38914
39761
 
38915
39762
  /***/ },
38916
- /* 371 */
39763
+ /* 372 */
38917
39764
  /***/ function(module, exports, __webpack_require__) {
38918
39765
 
38919
39766
  'use strict';
@@ -39087,13 +39934,13 @@ return /******/ (function(modules) { // webpackBootstrap
39087
39934
  ecModel.mergeOption(payload.newOption);
39088
39935
  });
39089
39936
 
39090
- __webpack_require__(314).register('magicType', MagicType);
39937
+ __webpack_require__(315).register('magicType', MagicType);
39091
39938
 
39092
39939
  module.exports = MagicType;
39093
39940
 
39094
39941
 
39095
39942
  /***/ },
39096
- /* 372 */
39943
+ /* 373 */
39097
39944
  /***/ function(module, exports, __webpack_require__) {
39098
39945
 
39099
39946
  /**
@@ -39540,7 +40387,7 @@ return /******/ (function(modules) { // webpackBootstrap
39540
40387
  });
39541
40388
  }
39542
40389
 
39543
- __webpack_require__(314).register('dataView', DataView);
40390
+ __webpack_require__(315).register('dataView', DataView);
39544
40391
 
39545
40392
  __webpack_require__(1).registerAction({
39546
40393
  type: 'changeDataView',
@@ -39576,21 +40423,21 @@ return /******/ (function(modules) { // webpackBootstrap
39576
40423
 
39577
40424
 
39578
40425
  /***/ },
39579
- /* 373 */
40426
+ /* 374 */
39580
40427
  /***/ function(module, exports, __webpack_require__) {
39581
40428
 
39582
40429
  'use strict';
39583
40430
 
39584
40431
 
39585
40432
  var zrUtil = __webpack_require__(4);
39586
- var BrushController = __webpack_require__(233);
39587
- var brushHelper = __webpack_require__(309);
39588
- var history = __webpack_require__(374);
40433
+ var BrushController = __webpack_require__(234);
40434
+ var brushHelper = __webpack_require__(310);
40435
+ var history = __webpack_require__(375);
39589
40436
 
39590
40437
  var each = zrUtil.each;
39591
40438
 
39592
40439
  // Use dataZoomSelect
39593
- __webpack_require__(375);
40440
+ __webpack_require__(376);
39594
40441
 
39595
40442
  // Spectial component id start with \0ec\0, see echarts/model/Global.js~hasInnerId
39596
40443
  var DATA_ZOOM_ID_BASE = '\0_ec_\0toolbox-dataZoom_';
@@ -39808,7 +40655,7 @@ return /******/ (function(modules) { // webpackBootstrap
39808
40655
  }
39809
40656
 
39810
40657
 
39811
- __webpack_require__(314).register('dataZoom', DataZoom);
40658
+ __webpack_require__(315).register('dataZoom', DataZoom);
39812
40659
 
39813
40660
 
39814
40661
  // Create special dataZoom option for select
@@ -39884,7 +40731,7 @@ return /******/ (function(modules) { // webpackBootstrap
39884
40731
 
39885
40732
 
39886
40733
  /***/ },
39887
- /* 374 */
40734
+ /* 375 */
39888
40735
  /***/ function(module, exports, __webpack_require__) {
39889
40736
 
39890
40737
  /**
@@ -39998,7 +40845,7 @@ return /******/ (function(modules) { // webpackBootstrap
39998
40845
 
39999
40846
 
40000
40847
  /***/ },
40001
- /* 375 */
40848
+ /* 376 */
40002
40849
  /***/ function(module, exports, __webpack_require__) {
40003
40850
 
40004
40851
  /**
@@ -40006,21 +40853,21 @@ return /******/ (function(modules) { // webpackBootstrap
40006
40853
  */
40007
40854
 
40008
40855
 
40009
- __webpack_require__(317);
40010
-
40011
40856
  __webpack_require__(318);
40012
- __webpack_require__(321);
40013
40857
 
40014
- __webpack_require__(376);
40858
+ __webpack_require__(319);
40859
+ __webpack_require__(322);
40860
+
40015
40861
  __webpack_require__(377);
40862
+ __webpack_require__(378);
40016
40863
 
40017
- __webpack_require__(328);
40018
40864
  __webpack_require__(329);
40865
+ __webpack_require__(330);
40019
40866
 
40020
40867
 
40021
40868
 
40022
40869
  /***/ },
40023
- /* 376 */
40870
+ /* 377 */
40024
40871
  /***/ function(module, exports, __webpack_require__) {
40025
40872
 
40026
40873
  /**
@@ -40028,7 +40875,7 @@ return /******/ (function(modules) { // webpackBootstrap
40028
40875
  */
40029
40876
 
40030
40877
 
40031
- var DataZoomModel = __webpack_require__(318);
40878
+ var DataZoomModel = __webpack_require__(319);
40032
40879
 
40033
40880
  module.exports = DataZoomModel.extend({
40034
40881
 
@@ -40039,12 +40886,12 @@ return /******/ (function(modules) { // webpackBootstrap
40039
40886
 
40040
40887
 
40041
40888
  /***/ },
40042
- /* 377 */
40889
+ /* 378 */
40043
40890
  /***/ function(module, exports, __webpack_require__) {
40044
40891
 
40045
40892
 
40046
40893
 
40047
- module.exports = __webpack_require__(321).extend({
40894
+ module.exports = __webpack_require__(322).extend({
40048
40895
 
40049
40896
  type: 'dataZoom.select'
40050
40897
 
@@ -40053,13 +40900,13 @@ return /******/ (function(modules) { // webpackBootstrap
40053
40900
 
40054
40901
 
40055
40902
  /***/ },
40056
- /* 378 */
40903
+ /* 379 */
40057
40904
  /***/ function(module, exports, __webpack_require__) {
40058
40905
 
40059
40906
  'use strict';
40060
40907
 
40061
40908
 
40062
- var history = __webpack_require__(374);
40909
+ var history = __webpack_require__(375);
40063
40910
 
40064
40911
  function Restore(model) {
40065
40912
  this.model = model;
@@ -40083,7 +40930,7 @@ return /******/ (function(modules) { // webpackBootstrap
40083
40930
  };
40084
40931
 
40085
40932
 
40086
- __webpack_require__(314).register('restore', Restore);
40933
+ __webpack_require__(315).register('restore', Restore);
40087
40934
 
40088
40935
 
40089
40936
  __webpack_require__(1).registerAction(
@@ -40097,16 +40944,16 @@ return /******/ (function(modules) { // webpackBootstrap
40097
40944
 
40098
40945
 
40099
40946
  /***/ },
40100
- /* 379 */
40947
+ /* 380 */
40101
40948
  /***/ function(module, exports, __webpack_require__) {
40102
40949
 
40103
40950
 
40104
- __webpack_require__(380);
40105
- __webpack_require__(81).registerPainter('vml', __webpack_require__(382));
40951
+ __webpack_require__(381);
40952
+ __webpack_require__(81).registerPainter('vml', __webpack_require__(383));
40106
40953
 
40107
40954
 
40108
40955
  /***/ },
40109
- /* 380 */
40956
+ /* 381 */
40110
40957
  /***/ function(module, exports, __webpack_require__) {
40111
40958
 
40112
40959
  // http://www.w3.org/TR/NOTE-VML
@@ -40127,7 +40974,7 @@ return /******/ (function(modules) { // webpackBootstrap
40127
40974
 
40128
40975
  var Gradient = __webpack_require__(61);
40129
40976
 
40130
- var vmlCore = __webpack_require__(381);
40977
+ var vmlCore = __webpack_require__(382);
40131
40978
 
40132
40979
  var round = Math.round;
40133
40980
  var sqrt = Math.sqrt;
@@ -41164,7 +42011,7 @@ return /******/ (function(modules) { // webpackBootstrap
41164
42011
 
41165
42012
 
41166
42013
  /***/ },
41167
- /* 381 */
42014
+ /* 382 */
41168
42015
  /***/ function(module, exports, __webpack_require__) {
41169
42016
 
41170
42017
 
@@ -41217,7 +42064,7 @@ return /******/ (function(modules) { // webpackBootstrap
41217
42064
 
41218
42065
 
41219
42066
  /***/ },
41220
- /* 382 */
42067
+ /* 383 */
41221
42068
  /***/ function(module, exports, __webpack_require__) {
41222
42069
 
41223
42070
  /**
@@ -41229,7 +42076,7 @@ return /******/ (function(modules) { // webpackBootstrap
41229
42076
 
41230
42077
 
41231
42078
  var zrLog = __webpack_require__(40);
41232
- var vmlCore = __webpack_require__(381);
42079
+ var vmlCore = __webpack_require__(382);
41233
42080
 
41234
42081
  function parseInt10(val) {
41235
42082
  return parseInt(val, 10);
@@ -41340,11 +42187,11 @@ return /******/ (function(modules) { // webpackBootstrap
41340
42187
  }
41341
42188
  },
41342
42189
 
41343
- resize: function () {
41344
- var width = this._getWidth();
41345
- var height = this._getHeight();
42190
+ resize: function (width, height) {
42191
+ var width = width == null ? this._getWidth() : width;
42192
+ var height = height == null ? this._getHeight() : height;
41346
42193
 
41347
- if (this._width != width && this._height != height) {
42194
+ if (this._width != width || this._height != height) {
41348
42195
  this._width = width;
41349
42196
  this._height = height;
41350
42197
 
@@ -41371,7 +42218,9 @@ return /******/ (function(modules) { // webpackBootstrap
41371
42218
  },
41372
42219
 
41373
42220
  clear: function () {
41374
- this.root.removeChild(this.vmlViewport);
42221
+ if (this._vmlViewport) {
42222
+ this.root.removeChild(this._vmlViewport);
42223
+ }
41375
42224
  },
41376
42225
 
41377
42226
  _getWidth: function () {