echarts-rails 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 39f9041038ff19435c4ae7597a13c96a47ce58f0
4
- data.tar.gz: 270427515753ea062095b7a3150e107778fce04c
3
+ metadata.gz: 55dedbc17f3ea5fd0923662d3251fb9e5d0e3e90
4
+ data.tar.gz: c847ecc5f15f10ce8efa7ab4e820917d09722867
5
5
  SHA512:
6
- metadata.gz: 2a37c095166ffeb63eebe45f703839e8fa9dcd0cca54ff10c508112c0765ca9c8d35e0a4ea15b4d4e3d029bdf45f03df979d149bd13b616022647a443ede1c40
7
- data.tar.gz: b412a129810a0a27da1ca5b606d58bf4ab85c77ca8f73eba9a5df64ae3fcfe890d45ec927498a306825ffc8b6a08afe9027c50453469b65a19cdacc9a7943981
6
+ metadata.gz: 65517ba74e35a889a4169ace8d69fde13d9188d10c26cf3cb091d07a0c56755adc502141eea2cf6e503dfdbaa8b8507a4371db9e65dbc2e4b092a5b4f1284d55
7
+ data.tar.gz: ede9b3358ea3d42d8af0d99a8593851be6c2f825559a7dc720c6f6de4b6ff46abd7ca2dbae11844114b313ee2b095dbd49f3fd87b842656e2b9a007f451f56ff
data/Gemfile CHANGED
@@ -1,2 +1,15 @@
1
1
  source 'https://rubygems.org'
2
+
3
+ group :assets do
4
+ gem 'sqlite3'
5
+ gem 'sass-rails', "~> 5.0"
6
+ gem 'coffee-rails', '~> 4.1.0'
7
+ gem 'uglifier', '>= 1.3.0'
8
+ end
9
+ group :test do
10
+ gem 'turn', :require => false
11
+ gem 'rspec-rails'
12
+ gem 'capybara'
13
+ gem 'capybara-webkit'
14
+ end
2
15
  gemspec
data/README.md CHANGED
@@ -7,6 +7,7 @@ Check out how to use echarts at http://echarts.baidu.com
7
7
  * echarts-rails 0.1.0 -> echarts 3.1.3
8
8
  * echarts-rails 0.1.2 -> echarts 3.2.0
9
9
  * echarts-rails 0.1.3 -> echarts 3.2.2
10
+ * echarts-rails 0.1.4 -> echarts 3.2.3
10
11
 
11
12
  ## Installation
12
13
 
@@ -45,7 +46,7 @@ And you're done!
45
46
  ## Usage
46
47
 
47
48
  ```
48
- <div id="main" style="width: 600px; height: 400px; "</div>
49
+ <div id="main" style="width: 600px; height: 400px;"></div>
49
50
  <script>
50
51
  // 基于准备好的dom,初始化echarts实例
51
52
  var myChart = echarts.init(document.getElementById('main'));
@@ -69,13 +69,13 @@ return /******/ (function(modules) { // webpackBootstrap
69
69
  __webpack_require__(112);
70
70
  __webpack_require__(315);
71
71
 
72
- __webpack_require__(344);
73
- __webpack_require__(350);
74
- __webpack_require__(353);
72
+ __webpack_require__(345);
73
+ __webpack_require__(351);
74
+ __webpack_require__(354);
75
75
  __webpack_require__(316);
76
- __webpack_require__(365);
76
+ __webpack_require__(366);
77
77
 
78
- __webpack_require__(378);
78
+ __webpack_require__(379);
79
79
 
80
80
  /***/ },
81
81
  /* 1 */
@@ -150,6 +150,9 @@ return /******/ (function(modules) { // webpackBootstrap
150
150
  var IN_MAIN_PROCESS = '__flag_in_main_process';
151
151
  var HAS_GRADIENT_OR_PATTERN_BG = '_hasGradientOrPatternBg';
152
152
 
153
+
154
+ var OPTION_UPDATED = '_optionUpdated';
155
+
153
156
  function createRegisterEventWithLowercaseName(method) {
154
157
  return function (eventName, handler, context) {
155
158
  // Event name is all lowercase
@@ -265,10 +268,25 @@ return /******/ (function(modules) { // webpackBootstrap
265
268
  }
266
269
  timsort(visualFuncs, prioritySortFunc);
267
270
  timsort(dataProcessorFuncs, prioritySortFunc);
271
+
272
+ this._zr.animation.on('frame', this._onframe, this);
268
273
  }
269
274
 
270
275
  var echartsProto = ECharts.prototype;
271
276
 
277
+ echartsProto._onframe = function () {
278
+ // Lazy update
279
+ if (this[OPTION_UPDATED]) {
280
+
281
+ this[IN_MAIN_PROCESS] = true;
282
+
283
+ updateMethods.prepareAndUpdate.call(this);
284
+
285
+ this[IN_MAIN_PROCESS] = false;
286
+
287
+ this[OPTION_UPDATED] = false;
288
+ }
289
+ };
272
290
  /**
273
291
  * @return {HTMLDomElement}
274
292
  */
@@ -286,9 +304,9 @@ return /******/ (function(modules) { // webpackBootstrap
286
304
  /**
287
305
  * @param {Object} option
288
306
  * @param {boolean} notMerge
289
- * @param {boolean} [notRefreshImmediately=false] Useful when setOption frequently.
307
+ * @param {boolean} [lazyUpdate=false] Useful when setOption frequently.
290
308
  */
291
- echartsProto.setOption = function (option, notMerge, notRefreshImmediately) {
309
+ echartsProto.setOption = function (option, notMerge, lazyUpdate) {
292
310
  if (true) {
293
311
  zrUtil.assert(!this[IN_MAIN_PROCESS], '`setOption` should not be called during main process.');
294
312
  }
@@ -304,13 +322,18 @@ return /******/ (function(modules) { // webpackBootstrap
304
322
 
305
323
  this._model.setOption(option, optionPreprocessorFuncs);
306
324
 
307
- updateMethods.prepareAndUpdate.call(this);
325
+ if (lazyUpdate) {
326
+ this[OPTION_UPDATED] = true;
327
+ }
328
+ else {
329
+ updateMethods.prepareAndUpdate.call(this);
330
+ this._zr.refreshImmediately();
331
+ this[OPTION_UPDATED] = false;
332
+ }
308
333
 
309
334
  this[IN_MAIN_PROCESS] = false;
310
335
 
311
336
  this._flushPendingActions();
312
-
313
- !notRefreshImmediately && this._zr.refreshImmediately();
314
337
  };
315
338
 
316
339
  /**
@@ -331,7 +354,7 @@ return /******/ (function(modules) { // webpackBootstrap
331
354
  * @return {Object}
332
355
  */
333
356
  echartsProto.getOption = function () {
334
- return this._model.getOption();
357
+ return this._model && this._model.getOption();
335
358
  };
336
359
 
337
360
  /**
@@ -701,7 +724,6 @@ return /******/ (function(modules) { // webpackBootstrap
701
724
  this._flushPendingActions();
702
725
  };
703
726
 
704
- var defaultLoadingEffect = __webpack_require__(93);
705
727
  /**
706
728
  * Show loading effect
707
729
  * @param {string} [name='default']
@@ -710,10 +732,18 @@ return /******/ (function(modules) { // webpackBootstrap
710
732
  echartsProto.showLoading = function (name, cfg) {
711
733
  if (zrUtil.isObject(name)) {
712
734
  cfg = name;
713
- name = 'default';
735
+ name = '';
714
736
  }
737
+ name = name || 'default';
738
+
715
739
  this.hideLoading();
716
- var el = defaultLoadingEffect(this._api, cfg);
740
+ if (!loadingEffects[name]) {
741
+ if (true) {
742
+ console.warn('Loading effects ' + name + ' not exists.');
743
+ }
744
+ return;
745
+ }
746
+ var el = loadingEffects[name](this._api, cfg);
717
747
  var zr = this._zr;
718
748
  this._loadingFX = el;
719
749
 
@@ -798,8 +828,17 @@ return /******/ (function(modules) { // webpackBootstrap
798
828
  isHighlightOrDownplay && updateMethods[updateMethod].call(this, batchItem);
799
829
  }
800
830
 
801
- (updateMethod !== 'none' && !isHighlightOrDownplay)
802
- && updateMethods[updateMethod].call(this, payload);
831
+ if (updateMethod !== 'none' && !isHighlightOrDownplay) {
832
+ // Still dirty
833
+ if (this[OPTION_UPDATED]) {
834
+ // FIXME Pass payload ?
835
+ updateMethods.prepareAndUpdate.call(this, payload);
836
+ this[OPTION_UPDATED] = false;
837
+ }
838
+ else {
839
+ updateMethods[updateMethod].call(this, payload);
840
+ }
841
+ }
803
842
 
804
843
  // Follow the rule of action batch
805
844
  if (batched) {
@@ -1037,7 +1076,7 @@ return /******/ (function(modules) { // webpackBootstrap
1037
1076
  }
1038
1077
 
1039
1078
  var MOUSE_EVENT_NAMES = [
1040
- 'click', 'dblclick', 'mouseover', 'mouseout', 'mousedown', 'mouseup', 'globalout'
1079
+ 'click', 'dblclick', 'mouseover', 'mouseout', 'mousemove', 'mousedown', 'mouseup', 'globalout'
1041
1080
  ];
1042
1081
  /**
1043
1082
  * @private
@@ -1079,7 +1118,7 @@ return /******/ (function(modules) { // webpackBootstrap
1079
1118
  * Clear
1080
1119
  */
1081
1120
  echartsProto.clear = function () {
1082
- this.setOption({}, true);
1121
+ this.setOption({ series: [] }, true);
1083
1122
  };
1084
1123
  /**
1085
1124
  * Dispose instance
@@ -1220,6 +1259,10 @@ return /******/ (function(modules) { // webpackBootstrap
1220
1259
  * @type {Object.<key, Object>}
1221
1260
  */
1222
1261
  var themeStorage = {};
1262
+ /**
1263
+ * Loading effects
1264
+ */
1265
+ var loadingEffects = {};
1223
1266
 
1224
1267
 
1225
1268
  var instances = {};
@@ -1235,9 +1278,9 @@ return /******/ (function(modules) { // webpackBootstrap
1235
1278
  /**
1236
1279
  * @type {number}
1237
1280
  */
1238
- version: '3.2.2',
1281
+ version: '3.2.3',
1239
1282
  dependencies: {
1240
- zrender: '3.1.2'
1283
+ zrender: '3.1.3'
1241
1284
  }
1242
1285
  };
1243
1286
 
@@ -1459,7 +1502,7 @@ return /******/ (function(modules) { // webpackBootstrap
1459
1502
  * Most visual encoding like color are common for different chart
1460
1503
  * But each chart has it's own layout algorithm
1461
1504
  *
1462
- * @param {string} [priority=1000]
1505
+ * @param {number} [priority=1000]
1463
1506
  * @param {Function} layoutFunc
1464
1507
  */
1465
1508
  echarts.registerLayout = function (priority, layoutFunc) {
@@ -1480,7 +1523,7 @@ return /******/ (function(modules) { // webpackBootstrap
1480
1523
  };
1481
1524
 
1482
1525
  /**
1483
- * @param {string} [priority=3000]
1526
+ * @param {number} [priority=3000]
1484
1527
  * @param {Function} visualFunc
1485
1528
  */
1486
1529
  echarts.registerVisual = function (priority, visualFunc) {
@@ -1499,6 +1542,14 @@ return /******/ (function(modules) { // webpackBootstrap
1499
1542
  });
1500
1543
  };
1501
1544
 
1545
+ /**
1546
+ * @param {string} name
1547
+ */
1548
+ echarts.registerLoading = function (name, loadingFx) {
1549
+ loadingEffects[name] = loadingFx;
1550
+ };
1551
+
1552
+
1502
1553
  var parseClassType = ComponentModel.parseClassType;
1503
1554
  /**
1504
1555
  * @param {Object} opts
@@ -1551,7 +1602,7 @@ return /******/ (function(modules) { // webpackBootstrap
1551
1602
  var classType = parseClassType(superClass);
1552
1603
  Clazz = ChartView.getClass(classType.main, true);
1553
1604
  }
1554
- return ChartView.extend(opts);
1605
+ return Clazz.extend(opts);
1555
1606
  };
1556
1607
 
1557
1608
  /**
@@ -1574,8 +1625,9 @@ return /******/ (function(modules) { // webpackBootstrap
1574
1625
  zrUtil.createCanvas = creator;
1575
1626
  };
1576
1627
 
1577
- echarts.registerVisual(PRIORITY_VISUAL_GLOBAL, __webpack_require__(94));
1578
- echarts.registerPreprocessor(__webpack_require__(95));
1628
+ echarts.registerVisual(PRIORITY_VISUAL_GLOBAL, __webpack_require__(93));
1629
+ echarts.registerPreprocessor(__webpack_require__(94));
1630
+ echarts.registerLoading('default', __webpack_require__(96));
1579
1631
 
1580
1632
  // Default action
1581
1633
  echarts.registerAction({
@@ -1897,6 +1949,8 @@ return /******/ (function(modules) { // webpackBootstrap
1897
1949
  newCptTypes, ComponentModel.getAllClassMainTypes(), visitComponent, this
1898
1950
  );
1899
1951
 
1952
+ this._seriesIndices = this._seriesIndices || [];
1953
+
1900
1954
  function visitComponent(mainType, dependencies) {
1901
1955
  var newCptOptionList = modelUtil.normalizeToArray(newOption[mainType]);
1902
1956
 
@@ -2066,6 +2120,10 @@ return /******/ (function(modules) { // webpackBootstrap
2066
2120
  || (!isNameArray && cpt.name === name);
2067
2121
  });
2068
2122
  }
2123
+ else {
2124
+ // Return all components with mainType
2125
+ result = cpts;
2126
+ }
2069
2127
 
2070
2128
  return filterBySubType(result, condition);
2071
2129
  },
@@ -3028,60 +3086,8 @@ return /******/ (function(modules) { // webpackBootstrap
3028
3086
  var Model = __webpack_require__(12);
3029
3087
  var zrUtil = __webpack_require__(4);
3030
3088
 
3031
- var AXIS_DIMS = ['x', 'y', 'z', 'radius', 'angle'];
3032
-
3033
3089
  var modelUtil = {};
3034
3090
 
3035
- /**
3036
- * Create "each" method to iterate names.
3037
- *
3038
- * @pubilc
3039
- * @param {Array.<string>} names
3040
- * @param {Array.<string>=} attrs
3041
- * @return {Function}
3042
- */
3043
- modelUtil.createNameEach = function (names, attrs) {
3044
- names = names.slice();
3045
- var capitalNames = zrUtil.map(names, modelUtil.capitalFirst);
3046
- attrs = (attrs || []).slice();
3047
- var capitalAttrs = zrUtil.map(attrs, modelUtil.capitalFirst);
3048
-
3049
- return function (callback, context) {
3050
- zrUtil.each(names, function (name, index) {
3051
- var nameObj = {name: name, capital: capitalNames[index]};
3052
-
3053
- for (var j = 0; j < attrs.length; j++) {
3054
- nameObj[attrs[j]] = name + capitalAttrs[j];
3055
- }
3056
-
3057
- callback.call(context, nameObj);
3058
- });
3059
- };
3060
- };
3061
-
3062
- /**
3063
- * @public
3064
- */
3065
- modelUtil.capitalFirst = function (str) {
3066
- return str ? str.charAt(0).toUpperCase() + str.substr(1) : str;
3067
- };
3068
-
3069
- /**
3070
- * Iterate each dimension name.
3071
- *
3072
- * @public
3073
- * @param {Function} callback The parameter is like:
3074
- * {
3075
- * name: 'angle',
3076
- * capital: 'Angle',
3077
- * axis: 'angleAxis',
3078
- * axisIndex: 'angleAixs',
3079
- * index: 'angleIndex'
3080
- * }
3081
- * @param {Object} context
3082
- */
3083
- modelUtil.eachAxisDim = modelUtil.createNameEach(AXIS_DIMS, ['axisIndex', 'axis', 'index']);
3084
-
3085
3091
  /**
3086
3092
  * If value is not array, then translate it to array.
3087
3093
  * @param {*} value
@@ -3095,76 +3101,6 @@ return /******/ (function(modules) { // webpackBootstrap
3095
3101
  : [value];
3096
3102
  };
3097
3103
 
3098
- /**
3099
- * If tow dataZoomModels has the same axis controlled, we say that they are 'linked'.
3100
- * dataZoomModels and 'links' make up one or more graphics.
3101
- * This function finds the graphic where the source dataZoomModel is in.
3102
- *
3103
- * @public
3104
- * @param {Function} forEachNode Node iterator.
3105
- * @param {Function} forEachEdgeType edgeType iterator
3106
- * @param {Function} edgeIdGetter Giving node and edgeType, return an array of edge id.
3107
- * @return {Function} Input: sourceNode, Output: Like {nodes: [], dims: {}}
3108
- */
3109
- modelUtil.createLinkedNodesFinder = function (forEachNode, forEachEdgeType, edgeIdGetter) {
3110
-
3111
- return function (sourceNode) {
3112
- var result = {
3113
- nodes: [],
3114
- records: {} // key: edgeType.name, value: Object (key: edge id, value: boolean).
3115
- };
3116
-
3117
- forEachEdgeType(function (edgeType) {
3118
- result.records[edgeType.name] = {};
3119
- });
3120
-
3121
- if (!sourceNode) {
3122
- return result;
3123
- }
3124
-
3125
- absorb(sourceNode, result);
3126
-
3127
- var existsLink;
3128
- do {
3129
- existsLink = false;
3130
- forEachNode(processSingleNode);
3131
- }
3132
- while (existsLink);
3133
-
3134
- function processSingleNode(node) {
3135
- if (!isNodeAbsorded(node, result) && isLinked(node, result)) {
3136
- absorb(node, result);
3137
- existsLink = true;
3138
- }
3139
- }
3140
-
3141
- return result;
3142
- };
3143
-
3144
- function isNodeAbsorded(node, result) {
3145
- return zrUtil.indexOf(result.nodes, node) >= 0;
3146
- }
3147
-
3148
- function isLinked(node, result) {
3149
- var hasLink = false;
3150
- forEachEdgeType(function (edgeType) {
3151
- zrUtil.each(edgeIdGetter(node, edgeType) || [], function (edgeId) {
3152
- result.records[edgeType.name][edgeId] && (hasLink = true);
3153
- });
3154
- });
3155
- return hasLink;
3156
- }
3157
-
3158
- function absorb(node, result) {
3159
- result.nodes.push(node);
3160
- forEachEdgeType(function (edgeType) {
3161
- zrUtil.each(edgeIdGetter(node, edgeType) || [], function (edgeId) {
3162
- result.records[edgeType.name][edgeId] = true;
3163
- });
3164
- });
3165
- }
3166
- };
3167
-
3168
3104
  /**
3169
3105
  * Sync default option between normal and emphasis like `position` and `show`
3170
3106
  * In case some one will write code like
@@ -3388,22 +3324,31 @@ return /******/ (function(modules) { // webpackBootstrap
3388
3324
  return;
3389
3325
  }
3390
3326
 
3327
+ // id has highest priority.
3328
+ for (var i = 0; i < result.length; i++) {
3329
+ if (!result[i].option // Consider name: two map to one.
3330
+ && cptOption.id != null
3331
+ && result[i].exist.id === cptOption.id + ''
3332
+ ) {
3333
+ result[i].option = cptOption;
3334
+ newCptOptions[index] = null;
3335
+ return;
3336
+ }
3337
+ }
3338
+
3391
3339
  for (var i = 0; i < result.length; i++) {
3392
3340
  var exist = result[i].exist;
3393
3341
  if (!result[i].option // Consider name: two map to one.
3394
- && (
3395
- // id has highest priority.
3396
- (cptOption.id != null && exist.id === cptOption.id + '')
3397
- || (cptOption.name != null
3398
- && !modelUtil.isIdInner(cptOption)
3399
- && !modelUtil.isIdInner(exist)
3400
- && exist.name === cptOption.name + ''
3401
- )
3402
- )
3342
+ // Can not match when both ids exist but different.
3343
+ && (exist.id == null || cptOption.id == null)
3344
+ && cptOption.name != null
3345
+ && !modelUtil.isIdInner(cptOption)
3346
+ && !modelUtil.isIdInner(exist)
3347
+ && exist.name === cptOption.name + ''
3403
3348
  ) {
3404
3349
  result[i].option = cptOption;
3405
3350
  newCptOptions[index] = null;
3406
- break;
3351
+ return;
3407
3352
  }
3408
3353
  }
3409
3354
  });
@@ -3516,28 +3461,29 @@ return /******/ (function(modules) { // webpackBootstrap
3516
3461
  var numberUtil = __webpack_require__(7);
3517
3462
  var textContain = __webpack_require__(8);
3518
3463
 
3464
+ var formatUtil = {};
3519
3465
  /**
3520
3466
  * 每三位默认加,格式化
3521
3467
  * @type {string|number} x
3522
3468
  */
3523
- function addCommas(x) {
3469
+ formatUtil.addCommas = function (x) {
3524
3470
  if (isNaN(x)) {
3525
3471
  return '-';
3526
3472
  }
3527
3473
  x = (x + '').split('.');
3528
3474
  return x[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g,'$1,')
3529
3475
  + (x.length > 1 ? ('.' + x[1]) : '');
3530
- }
3476
+ };
3531
3477
 
3532
3478
  /**
3533
3479
  * @param {string} str
3534
3480
  * @return {string} str
3535
3481
  */
3536
- function toCamelCase(str) {
3482
+ formatUtil.toCamelCase = function (str) {
3537
3483
  return str.toLowerCase().replace(/-(.)/g, function(match, group1) {
3538
3484
  return group1.toUpperCase();
3539
3485
  });
3540
- }
3486
+ };
3541
3487
 
3542
3488
  /**
3543
3489
  * Normalize css liked array configuration
@@ -3547,7 +3493,7 @@ return /******/ (function(modules) { // webpackBootstrap
3547
3493
  * [4, 3, 2] => [4, 3, 2, 3]
3548
3494
  * @param {number|Array.<number>} val
3549
3495
  */
3550
- function normalizeCssArray(val) {
3496
+ formatUtil.normalizeCssArray = function (val) {
3551
3497
  var len = val.length;
3552
3498
  if (typeof (val) === 'number') {
3553
3499
  return [val, val, val, val];
@@ -3561,29 +3507,30 @@ return /******/ (function(modules) { // webpackBootstrap
3561
3507
  return [val[0], val[1], val[2], val[1]];
3562
3508
  }
3563
3509
  return val;
3564
- }
3510
+ };
3565
3511
 
3566
- function encodeHTML(source) {
3512
+ formatUtil.encodeHTML = function (source) {
3567
3513
  return String(source)
3568
3514
  .replace(/&/g, '&amp;')
3569
3515
  .replace(/</g, '&lt;')
3570
3516
  .replace(/>/g, '&gt;')
3571
3517
  .replace(/"/g, '&quot;')
3572
3518
  .replace(/'/g, '&#39;');
3573
- }
3519
+ };
3574
3520
 
3575
3521
  var TPL_VAR_ALIAS = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];
3576
3522
 
3577
- function wrapVar(varName, seriesIdx) {
3523
+ var wrapVar = function (varName, seriesIdx) {
3578
3524
  return '{' + varName + (seriesIdx == null ? '' : seriesIdx) + '}';
3579
- }
3525
+ };
3526
+
3580
3527
  /**
3581
3528
  * Template formatter
3582
3529
  * @param {string} tpl
3583
3530
  * @param {Array.<Object>|Object} paramsList
3584
3531
  * @return {string}
3585
3532
  */
3586
- function formatTpl(tpl, paramsList) {
3533
+ formatUtil.formatTpl = function (tpl, paramsList) {
3587
3534
  if (!zrUtil.isArray(paramsList)) {
3588
3535
  paramsList = [paramsList];
3589
3536
  }
@@ -3607,7 +3554,17 @@ return /******/ (function(modules) { // webpackBootstrap
3607
3554
  }
3608
3555
 
3609
3556
  return tpl;
3610
- }
3557
+ };
3558
+
3559
+
3560
+ /**
3561
+ * @param {string} str
3562
+ * @return {string}
3563
+ * @inner
3564
+ */
3565
+ var s2d = function (str) {
3566
+ return str < 10 ? ('0' + str) : str;
3567
+ };
3611
3568
 
3612
3569
  /**
3613
3570
  * ISO Date format
@@ -3615,7 +3572,7 @@ return /******/ (function(modules) { // webpackBootstrap
3615
3572
  * @param {number} value
3616
3573
  * @inner
3617
3574
  */
3618
- function formatTime(tpl, value) {
3575
+ formatUtil.formatTime = function (tpl, value) {
3619
3576
  if (tpl === 'week'
3620
3577
  || tpl === 'month'
3621
3578
  || tpl === 'quarter'
@@ -3647,33 +3604,20 @@ return /******/ (function(modules) { // webpackBootstrap
3647
3604
  .replace('s', s);
3648
3605
 
3649
3606
  return tpl;
3650
- }
3607
+ };
3651
3608
 
3652
3609
  /**
3610
+ * Capital first
3653
3611
  * @param {string} str
3654
3612
  * @return {string}
3655
- * @inner
3656
3613
  */
3657
- function s2d(str) {
3658
- return str < 10 ? ('0' + str) : str;
3659
- }
3660
-
3661
- module.exports = {
3662
-
3663
- normalizeCssArray: normalizeCssArray,
3664
-
3665
- addCommas: addCommas,
3666
-
3667
- toCamelCase: toCamelCase,
3668
-
3669
- encodeHTML: encodeHTML,
3614
+ formatUtil.capitalFirst = function (str) {
3615
+ return str ? str.charAt(0).toUpperCase() + str.substr(1) : str;
3616
+ };
3670
3617
 
3671
- formatTpl: formatTpl,
3618
+ formatUtil.truncateText = textContain.truncateText;
3672
3619
 
3673
- formatTime: formatTime,
3674
-
3675
- truncateText: textContain.truncateText
3676
- };
3620
+ module.exports = formatUtil;
3677
3621
 
3678
3622
 
3679
3623
  /***/ },
@@ -3788,9 +3732,12 @@ return /******/ (function(modules) { // webpackBootstrap
3788
3732
  * @param {number} x
3789
3733
  * @return {number}
3790
3734
  */
3791
- number.round = function (x) {
3735
+ number.round = function (x, precision) {
3736
+ if (precision == null) {
3737
+ precision = 10;
3738
+ }
3792
3739
  // PENDING
3793
- return +(+x).toFixed(10);
3740
+ return +(+x).toFixed(precision);
3794
3741
  };
3795
3742
 
3796
3743
  number.asc = function (arr) {
@@ -3822,6 +3769,15 @@ return /******/ (function(modules) { // webpackBootstrap
3822
3769
  return count;
3823
3770
  };
3824
3771
 
3772
+ number.getPrecisionSafe = function (val) {
3773
+ var str = val.toString();
3774
+ var dotIndex = str.indexOf('.');
3775
+ if (dotIndex < 0) {
3776
+ return 0;
3777
+ }
3778
+ return str.length - 1 - dotIndex;
3779
+ };
3780
+
3825
3781
  /**
3826
3782
  * @param {Array.<number>} dataExtent
3827
3783
  * @param {Array.<number>} pixelExtent
@@ -3861,17 +3817,23 @@ return /******/ (function(modules) { // webpackBootstrap
3861
3817
 
3862
3818
  /**
3863
3819
  * @param {string|Date|number} value
3864
- * @return {number} timestamp
3820
+ * @return {Date} date
3865
3821
  */
3866
3822
  number.parseDate = function (value) {
3867
- return value instanceof Date
3868
- ? value
3869
- : new Date(
3870
- typeof value === 'string'
3871
- // FIXME Date.parse('1970-01-01') is UTC, Date.parse('1970/01/01') is local
3872
- ? (new Date(value.replace(/-/g, '/')) - new Date('1970/01/01'))
3873
- : Math.round(value)
3874
- );
3823
+ if (value instanceof Date) {
3824
+ return value;
3825
+ }
3826
+ else if (typeof value === 'string') {
3827
+ // Treat as ISO format. See issue #3623
3828
+ var ret = new Date(value);
3829
+ if (isNaN(+ret)) {
3830
+ // FIXME new Date('1970-01-01') is UTC, new Date('1970/01/01') is local
3831
+ ret = new Date(new Date(value.replace(/-/g, '/')) - new Date('1970/01/01'));
3832
+ }
3833
+ return ret;
3834
+ }
3835
+
3836
+ return new Date(Math.round(value));
3875
3837
  };
3876
3838
 
3877
3839
  /**
@@ -4911,7 +4873,8 @@ return /******/ (function(modules) { // webpackBootstrap
4911
4873
  */
4912
4874
  getShallow: function (key, ignoreParent) {
4913
4875
  var option = this.option;
4914
- var val = option && option[key];
4876
+
4877
+ var val = option == null ? option : option[key];
4915
4878
  var parentModel = this.parentModel;
4916
4879
  if (val == null && parentModel && !ignoreParent) {
4917
4880
  val = parentModel.getShallow(key);
@@ -5210,7 +5173,7 @@ return /******/ (function(modules) { // webpackBootstrap
5210
5173
  getLineDash: function () {
5211
5174
  var lineType = this.get('type');
5212
5175
  return (lineType === 'solid' || lineType == null) ? null
5213
- : (lineType === 'dashed' ? [5, 5] : [1, 1]);
5176
+ : (lineType === 'dashed' ? [5, 5] : [2, 2]);
5214
5177
  }
5215
5178
  };
5216
5179
 
@@ -6180,7 +6143,7 @@ return /******/ (function(modules) { // webpackBootstrap
6180
6143
  color: ['#c23531','#2f4554', '#61a0a8', '#d48265', '#91c7ae','#749f83', '#ca8622', '#bda29a','#6e7074', '#546570', '#c4ccd3'],
6181
6144
 
6182
6145
  // 默认需要 Grid 配置项
6183
- grid: {},
6146
+ // grid: {},
6184
6147
  // 主题,主题
6185
6148
  textStyle: {
6186
6149
  // color: '#000',
@@ -8134,16 +8097,19 @@ return /******/ (function(modules) { // webpackBootstrap
8134
8097
  */
8135
8098
  transformableProto.setTransform = function (ctx) {
8136
8099
  var m = this.transform;
8100
+ var dpr = ctx.dpr || 1;
8137
8101
  if (m) {
8138
- ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);
8102
+ ctx.setTransform(dpr * m[0], dpr * m[1], dpr * m[2], dpr * m[3], dpr * m[4], dpr * m[5]);
8103
+ }
8104
+ else {
8105
+ ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
8139
8106
  }
8140
8107
  };
8141
8108
 
8142
8109
  transformableProto.restoreTransform = function (ctx) {
8143
- var m = this.invTransform;
8144
- if (m) {
8145
- ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);
8146
- }
8110
+ var m = this.transform;
8111
+ var dpr = ctx.dpr || 1;
8112
+ ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
8147
8113
  }
8148
8114
 
8149
8115
  var tmpTransform = [];
@@ -8830,7 +8796,11 @@ return /******/ (function(modules) { // webpackBootstrap
8830
8796
  // kf1-----kf2---------current--------kf3
8831
8797
  // find kf2 and kf3 and do interpolation
8832
8798
  var frame;
8833
- if (percent < lastFramePercent) {
8799
+ // In the easing function like elasticOut, percent may less than 0
8800
+ if (percent < 0) {
8801
+ frame = 0;
8802
+ }
8803
+ else if (percent < lastFramePercent) {
8834
8804
  // Start from next key
8835
8805
  // PENDING start from lastFrame ?
8836
8806
  start = Math.min(lastFrame + 1, trackLen - 1);
@@ -9185,15 +9155,15 @@ return /******/ (function(modules) { // webpackBootstrap
9185
9155
 
9186
9156
  constructor: Clip,
9187
9157
 
9188
- step: function (time) {
9158
+ step: function (globalTime) {
9189
9159
  // Set startTime on first step, or _startTime may has milleseconds different between clips
9190
9160
  // PENDING
9191
9161
  if (!this._initialized) {
9192
- this._startTime = new Date().getTime() + this._delay;
9162
+ this._startTime = globalTime + this._delay;
9193
9163
  this._initialized = true;
9194
9164
  }
9195
9165
 
9196
- var percent = (time - this._startTime) / this._life;
9166
+ var percent = (globalTime - this._startTime) / this._life;
9197
9167
 
9198
9168
  // 还没开始
9199
9169
  if (percent < 0) {
@@ -9213,7 +9183,7 @@ return /******/ (function(modules) { // webpackBootstrap
9213
9183
  // 结束
9214
9184
  if (percent == 1) {
9215
9185
  if (this.loop) {
9216
- this.restart();
9186
+ this.restart (globalTime);
9217
9187
  // 重新开始周期
9218
9188
  // 抛出而不是直接调用事件直到 stage.update 后再统一调用这些事件
9219
9189
  return 'restart';
@@ -9228,10 +9198,9 @@ return /******/ (function(modules) { // webpackBootstrap
9228
9198
  return null;
9229
9199
  },
9230
9200
 
9231
- restart: function() {
9232
- var time = new Date().getTime();
9233
- var remainder = (time - this._startTime) % this._life;
9234
- this._startTime = new Date().getTime() - remainder + this.gap;
9201
+ restart: function (globalTime) {
9202
+ var remainder = (globalTime - this._startTime) % this._life;
9203
+ this._startTime = globalTime - remainder + this.gap;
9235
9204
 
9236
9205
  this._needsRemove = false;
9237
9206
  },
@@ -11207,6 +11176,7 @@ return /******/ (function(modules) { // webpackBootstrap
11207
11176
  transform = matrix.create();
11208
11177
  }
11209
11178
  matrix.mul(transform, m, transform);
11179
+ this.dirty(true);
11210
11180
  };
11211
11181
 
11212
11182
  return opts;
@@ -12056,25 +12026,42 @@ return /******/ (function(modules) { // webpackBootstrap
12056
12026
  textVerticalAlign: null,
12057
12027
 
12058
12028
  /**
12029
+ * Only useful in Path and Image element
12059
12030
  * @type {number}
12060
12031
  */
12061
12032
  textDistance: 5,
12062
12033
 
12063
12034
  /**
12035
+ * Only useful in Path and Image element
12064
12036
  * @type {number}
12065
12037
  */
12066
12038
  textShadowBlur: 0,
12067
12039
 
12068
12040
  /**
12041
+ * Only useful in Path and Image element
12069
12042
  * @type {number}
12070
12043
  */
12071
12044
  textShadowOffsetX: 0,
12072
12045
 
12073
12046
  /**
12047
+ * Only useful in Path and Image element
12074
12048
  * @type {number}
12075
12049
  */
12076
12050
  textShadowOffsetY: 0,
12077
12051
 
12052
+ /**
12053
+ * If transform text
12054
+ * Only useful in Path and Image element
12055
+ * @type {boolean}
12056
+ */
12057
+ textTransform: false,
12058
+
12059
+ /**
12060
+ * Text rotate around position of Path or Image
12061
+ * Only useful in Path and Image element and textTransform is false.
12062
+ */
12063
+ textRotation: 0,
12064
+
12078
12065
  /**
12079
12066
  * @type {string}
12080
12067
  * https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation
@@ -12227,10 +12214,6 @@ return /******/ (function(modules) { // webpackBootstrap
12227
12214
  return value;
12228
12215
  }
12229
12216
 
12230
- function setTransform(ctx, m) {
12231
- ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);
12232
- }
12233
-
12234
12217
  RectText.prototype = {
12235
12218
 
12236
12219
  constructor: RectText,
@@ -12266,10 +12249,15 @@ return /******/ (function(modules) { // webpackBootstrap
12266
12249
 
12267
12250
  // Transform rect to view space
12268
12251
  var transform = this.transform;
12269
- if (transform) {
12270
- tmpRect.copy(rect);
12271
- tmpRect.applyTransform(transform);
12272
- rect = tmpRect;
12252
+ if (!style.textTransform) {
12253
+ if (transform) {
12254
+ tmpRect.copy(rect);
12255
+ tmpRect.applyTransform(transform);
12256
+ rect = tmpRect;
12257
+ }
12258
+ }
12259
+ else {
12260
+ this.setTransform(ctx);
12273
12261
  }
12274
12262
 
12275
12263
  // Text position represented by coord
@@ -12315,7 +12303,9 @@ return /******/ (function(modules) { // webpackBootstrap
12315
12303
  var textStroke = style.textStroke;
12316
12304
  textFill && (ctx.fillStyle = textFill);
12317
12305
  textStroke && (ctx.strokeStyle = textStroke);
12318
- ctx.font = font;
12306
+
12307
+ // TODO Invalid font
12308
+ ctx.font = font || '12px sans-serif';
12319
12309
 
12320
12310
  // Text shadow
12321
12311
  // Always set shadowBlur and shadowOffset to avoid leak from displayable
@@ -12325,6 +12315,13 @@ return /******/ (function(modules) { // webpackBootstrap
12325
12315
  ctx.shadowOffsetY = style.textShadowOffsetY;
12326
12316
 
12327
12317
  var textLines = text.split('\n');
12318
+
12319
+ if (style.textRotation) {
12320
+ transform && ctx.translate(transform[4], transform[5]);
12321
+ ctx.rotate(style.textRotation);
12322
+ transform && ctx.translate(-transform[4], -transform[5]);
12323
+ }
12324
+
12328
12325
  for (var i = 0; i < textLines.length; i++) {
12329
12326
  textFill && ctx.fillText(textLines[i], x, y);
12330
12327
  textStroke && ctx.strokeText(textLines[i], x, y);
@@ -12444,10 +12441,13 @@ return /******/ (function(modules) { // webpackBootstrap
12444
12441
  * @return {module:zrender/core/PathProxy}
12445
12442
  */
12446
12443
  beginPath: function (ctx) {
12444
+
12447
12445
  this._ctx = ctx;
12448
12446
 
12449
12447
  ctx && ctx.beginPath();
12450
12448
 
12449
+ ctx && (this.dpr = ctx.dpr);
12450
+
12451
12451
  // Reset
12452
12452
  this._len = 0;
12453
12453
 
@@ -14744,7 +14744,6 @@ return /******/ (function(modules) { // webpackBootstrap
14744
14744
 
14745
14745
  // Must bind each time
14746
14746
  style.bind(ctx, this, prevEl);
14747
-
14748
14747
  // style.image is a url string
14749
14748
  if (typeof src === 'string') {
14750
14749
  image = this._image;
@@ -15117,7 +15116,8 @@ return /******/ (function(modules) { // webpackBootstrap
15117
15116
  textBaseline = style.textBaseline;
15118
15117
  }
15119
15118
 
15120
- ctx.font = font;
15119
+ // TODO Invalid font
15120
+ ctx.font = font || '12px sans-serif';
15121
15121
  ctx.textAlign = textAlign || 'left';
15122
15122
  // Use canvas default left textAlign. Giving invalid value will cause state not change
15123
15123
  if (ctx.textAlign !== textAlign) {
@@ -15217,7 +15217,6 @@ return /******/ (function(modules) { // webpackBootstrap
15217
15217
  * @module zrender/graphic/shape/Sector
15218
15218
  */
15219
15219
 
15220
- // FIXME clockwise seems wrong
15221
15220
 
15222
15221
 
15223
15222
  module.exports = __webpack_require__(45).extend({
@@ -16194,7 +16193,7 @@ return /******/ (function(modules) { // webpackBootstrap
16194
16193
  /**
16195
16194
  * @type {string}
16196
16195
  */
16197
- zrender.version = '3.1.2';
16196
+ zrender.version = '3.1.3';
16198
16197
 
16199
16198
  /**
16200
16199
  * Initializing a zrender instance
@@ -17178,7 +17177,7 @@ return /******/ (function(modules) { // webpackBootstrap
17178
17177
  if (el instanceof Group) {
17179
17178
  el.__storage = this;
17180
17179
  }
17181
- el.dirty();
17180
+ el.dirty(false);
17182
17181
 
17183
17182
  this._elements[el.id] = el;
17184
17183
 
@@ -17962,7 +17961,13 @@ return /******/ (function(modules) { // webpackBootstrap
17962
17961
 
17963
17962
  this._running = false;
17964
17963
 
17965
- this._time = 0;
17964
+ this._time;
17965
+
17966
+ this._pausedTime;
17967
+
17968
+ this._pauseStart;
17969
+
17970
+ this._paused = false;
17966
17971
 
17967
17972
  Dispatcher.call(this);
17968
17973
  };
@@ -18013,7 +18018,7 @@ return /******/ (function(modules) { // webpackBootstrap
18013
18018
 
18014
18019
  _update: function() {
18015
18020
 
18016
- var time = new Date().getTime();
18021
+ var time = new Date().getTime() - this._pausedTime;
18017
18022
  var delta = time - this._time;
18018
18023
  var clips = this._clips;
18019
18024
  var len = clips.length;
@@ -18058,10 +18063,8 @@ return /******/ (function(modules) { // webpackBootstrap
18058
18063
  this.stage.update();
18059
18064
  }
18060
18065
  },
18061
- /**
18062
- * 开始运行动画
18063
- */
18064
- start: function () {
18066
+
18067
+ _startLoop: function () {
18065
18068
  var self = this;
18066
18069
 
18067
18070
  this._running = true;
@@ -18071,19 +18074,50 @@ return /******/ (function(modules) { // webpackBootstrap
18071
18074
 
18072
18075
  requestAnimationFrame(step);
18073
18076
 
18074
- self._update();
18077
+ !self._paused && self._update();
18075
18078
  }
18076
18079
  }
18077
18080
 
18078
- this._time = new Date().getTime();
18079
18081
  requestAnimationFrame(step);
18080
18082
  },
18083
+
18084
+ /**
18085
+ * 开始运行动画
18086
+ */
18087
+ start: function () {
18088
+
18089
+ this._time = new Date().getTime();
18090
+ this._pausedTime = 0;
18091
+
18092
+ this._startLoop();
18093
+ },
18081
18094
  /**
18082
18095
  * 停止运行动画
18083
18096
  */
18084
18097
  stop: function () {
18085
18098
  this._running = false;
18086
18099
  },
18100
+
18101
+ /**
18102
+ * Pause
18103
+ */
18104
+ pause: function () {
18105
+ if (!this._paused) {
18106
+ this._pauseStart = new Date().getTime();
18107
+ this._paused = true;
18108
+ }
18109
+ },
18110
+
18111
+ /**
18112
+ * Resume
18113
+ */
18114
+ resume: function () {
18115
+ if (this._paused) {
18116
+ this._pausedTime += (new Date().getTime()) - this._pauseStart;
18117
+ this._paused = false;
18118
+ }
18119
+ },
18120
+
18087
18121
  /**
18088
18122
  * 清除所有动画片段
18089
18123
  */
@@ -18101,6 +18135,7 @@ return /******/ (function(modules) { // webpackBootstrap
18101
18135
  * 如果指定setter函数,会通过setter函数设置属性值
18102
18136
  * @return {module:zrender/animation/Animation~Animator}
18103
18137
  */
18138
+ // TODO Gap
18104
18139
  animate: function (target, options) {
18105
18140
  options = options || {};
18106
18141
  var animator = new Animator(
@@ -18736,28 +18771,14 @@ return /******/ (function(modules) { // webpackBootstrap
18736
18771
  function doClip(clipPaths, ctx) {
18737
18772
  for (var i = 0; i < clipPaths.length; i++) {
18738
18773
  var clipPath = clipPaths[i];
18739
- var m;
18740
- if (clipPath.transform) {
18741
- m = clipPath.transform;
18742
- ctx.transform(
18743
- m[0], m[1],
18744
- m[2], m[3],
18745
- m[4], m[5]
18746
- );
18747
- }
18748
18774
  var path = clipPath.path;
18775
+
18776
+ clipPath.setTransform(ctx);
18749
18777
  path.beginPath(ctx);
18750
18778
  clipPath.buildPath(path, clipPath.shape);
18751
18779
  ctx.clip();
18752
18780
  // Transform back
18753
- if (clipPath.transform) {
18754
- m = clipPath.invTransform;
18755
- ctx.transform(
18756
- m[0], m[1],
18757
- m[2], m[3],
18758
- m[4], m[5]
18759
- );
18760
- }
18781
+ clipPath.restoreTransform(ctx);
18761
18782
  }
18762
18783
  }
18763
18784
 
@@ -19076,15 +19097,15 @@ return /******/ (function(modules) { // webpackBootstrap
19076
19097
  var layerProgress;
19077
19098
  var frame = this._progress;
19078
19099
  function flushProgressiveLayer(layer) {
19100
+ var dpr = ctx.dpr || 1;
19079
19101
  ctx.save();
19080
19102
  ctx.globalAlpha = 1;
19081
19103
  ctx.shadowBlur = 0;
19082
19104
  // Avoid layer don't clear in next progressive frame
19083
19105
  currentLayer.__dirty = true;
19084
- ctx.drawImage(layer.dom, 0, 0, width, height);
19106
+ ctx.setTransform(1, 0, 0, 1, 0, 0);
19107
+ ctx.drawImage(layer.dom, 0, 0, width * dpr, height * dpr);
19085
19108
  ctx.restore();
19086
-
19087
- currentLayer.ctx.restore();
19088
19109
  }
19089
19110
 
19090
19111
  for (var i = 0, l = list.length; i < l; i++) {
@@ -19134,6 +19155,7 @@ return /******/ (function(modules) { // webpackBootstrap
19134
19155
  if (!(currentLayer.__dirty || paintAll)) {
19135
19156
  continue;
19136
19157
  }
19158
+
19137
19159
  if (elFrame >= 0) {
19138
19160
  // Progressive layer changed
19139
19161
  if (!currentProgressiveLayer) {
@@ -19197,7 +19219,7 @@ return /******/ (function(modules) { // webpackBootstrap
19197
19219
 
19198
19220
  _doPaintEl: function (el, currentLayer, forcePaint, scope) {
19199
19221
  var ctx = currentLayer.ctx;
19200
-
19222
+ var m = el.transform;
19201
19223
  if (
19202
19224
  (currentLayer.__dirty || forcePaint)
19203
19225
  // Ignore invisible element
@@ -19206,7 +19228,8 @@ return /******/ (function(modules) { // webpackBootstrap
19206
19228
  && el.style.opacity !== 0
19207
19229
  // Ignore scale 0 element, in some environment like node-canvas
19208
19230
  // Draw a scale 0 element can cause all following draw wrong
19209
- && el.scale[0] && el.scale[1]
19231
+ // And setTransform with scale 0 will cause set back transform failed.
19232
+ && !(m && !m[0] && !m[3])
19210
19233
  // Ignore culled element
19211
19234
  && !(el.culling && isDisplayableCulled(el, this._width, this._height))
19212
19235
  ) {
@@ -19833,10 +19856,7 @@ return /******/ (function(modules) { // webpackBootstrap
19833
19856
  initContext: function () {
19834
19857
  this.ctx = this.dom.getContext('2d');
19835
19858
 
19836
- var dpr = this.dpr;
19837
- if (dpr != 1) {
19838
- this.ctx.scale(dpr, dpr);
19839
- }
19859
+ this.ctx.dpr = this.dpr;
19840
19860
  },
19841
19861
 
19842
19862
  createBackBuffer: function () {
@@ -19867,10 +19887,6 @@ return /******/ (function(modules) { // webpackBootstrap
19867
19887
  dom.width = width * dpr;
19868
19888
  dom.height = height * dpr;
19869
19889
 
19870
- if (dpr != 1) {
19871
- this.ctx.scale(dpr, dpr);
19872
- }
19873
-
19874
19890
  if (domBack) {
19875
19891
  domBack.width = width * dpr;
19876
19892
  domBack.height = height * dpr;
@@ -19910,7 +19926,7 @@ return /******/ (function(modules) { // webpackBootstrap
19910
19926
  );
19911
19927
  }
19912
19928
 
19913
- ctx.clearRect(0, 0, width / dpr, height / dpr);
19929
+ ctx.clearRect(0, 0, width, height);
19914
19930
  if (clearColor) {
19915
19931
  var clearColorGradientOrPattern;
19916
19932
  // Gradient
@@ -19919,8 +19935,8 @@ return /******/ (function(modules) { // webpackBootstrap
19919
19935
  clearColorGradientOrPattern = clearColor.__canvasGradient || Style.getGradient(ctx, clearColor, {
19920
19936
  x: 0,
19921
19937
  y: 0,
19922
- width: width / dpr,
19923
- height: height / dpr
19938
+ width: width,
19939
+ height: height
19924
19940
  });
19925
19941
 
19926
19942
  clearColor.__canvasGradient = clearColorGradientOrPattern;
@@ -19931,7 +19947,7 @@ return /******/ (function(modules) { // webpackBootstrap
19931
19947
  }
19932
19948
  ctx.save();
19933
19949
  ctx.fillStyle = clearColorGradientOrPattern || clearColor;
19934
- ctx.fillRect(0, 0, width / dpr, height / dpr);
19950
+ ctx.fillRect(0, 0, width, height);
19935
19951
  ctx.restore();
19936
19952
  }
19937
19953
 
@@ -19939,7 +19955,7 @@ return /******/ (function(modules) { // webpackBootstrap
19939
19955
  var domBack = this.domBack;
19940
19956
  ctx.save();
19941
19957
  ctx.globalAlpha = lastFrameAlpha;
19942
- ctx.drawImage(domBack, 0, 0, width / dpr, height / dpr);
19958
+ ctx.drawImage(domBack, 0, 0, width, height);
19943
19959
  ctx.restore();
19944
19960
  }
19945
19961
  }
@@ -19953,109 +19969,6 @@ return /******/ (function(modules) { // webpackBootstrap
19953
19969
  /***/ function(module, exports, __webpack_require__) {
19954
19970
 
19955
19971
 
19956
-
19957
- var graphic = __webpack_require__(43);
19958
- var zrUtil = __webpack_require__(4);
19959
- var PI = Math.PI;
19960
- /**
19961
- * @param {module:echarts/ExtensionAPI} api
19962
- * @param {Object} [opts]
19963
- * @param {string} [opts.text]
19964
- * @param {string} [opts.color]
19965
- * @param {string} [opts.textColor]
19966
- * @return {module:zrender/Element}
19967
- */
19968
- module.exports = function (api, opts) {
19969
- opts = opts || {};
19970
- zrUtil.defaults(opts, {
19971
- text: 'loading',
19972
- color: '#c23531',
19973
- textColor: '#000',
19974
- maskColor: 'rgba(255, 255, 255, 0.8)',
19975
- zlevel: 0
19976
- });
19977
- var mask = new graphic.Rect({
19978
- style: {
19979
- fill: opts.maskColor
19980
- },
19981
- zlevel: opts.zlevel,
19982
- z: 10000
19983
- });
19984
- var arc = new graphic.Arc({
19985
- shape: {
19986
- startAngle: -PI / 2,
19987
- endAngle: -PI / 2 + 0.1,
19988
- r: 10
19989
- },
19990
- style: {
19991
- stroke: opts.color,
19992
- lineCap: 'round',
19993
- lineWidth: 5
19994
- },
19995
- zlevel: opts.zlevel,
19996
- z: 10001
19997
- });
19998
- var labelRect = new graphic.Rect({
19999
- style: {
20000
- fill: 'none',
20001
- text: opts.text,
20002
- textPosition: 'right',
20003
- textDistance: 10,
20004
- textFill: opts.textColor
20005
- },
20006
- zlevel: opts.zlevel,
20007
- z: 10001
20008
- });
20009
-
20010
- arc.animateShape(true)
20011
- .when(1000, {
20012
- endAngle: PI * 3 / 2
20013
- })
20014
- .start('circularInOut');
20015
- arc.animateShape(true)
20016
- .when(1000, {
20017
- startAngle: PI * 3 / 2
20018
- })
20019
- .delay(300)
20020
- .start('circularInOut');
20021
-
20022
- var group = new graphic.Group();
20023
- group.add(arc);
20024
- group.add(labelRect);
20025
- group.add(mask);
20026
- // Inject resize
20027
- group.resize = function () {
20028
- var cx = api.getWidth() / 2;
20029
- var cy = api.getHeight() / 2;
20030
- arc.setShape({
20031
- cx: cx,
20032
- cy: cy
20033
- });
20034
- var r = arc.shape.r;
20035
- labelRect.setShape({
20036
- x: cx - r,
20037
- y: cy - r,
20038
- width: r * 2,
20039
- height: r * 2
20040
- });
20041
-
20042
- mask.setShape({
20043
- x: 0,
20044
- y: 0,
20045
- width: api.getWidth(),
20046
- height: api.getHeight()
20047
- });
20048
- };
20049
- group.resize();
20050
- return group;
20051
- };
20052
-
20053
-
20054
- /***/ },
20055
- /* 94 */
20056
- /***/ function(module, exports, __webpack_require__) {
20057
-
20058
-
20059
19972
  var Gradient = __webpack_require__(61);
20060
19973
  module.exports = function (ecModel) {
20061
19974
  function encodeColor(seriesModel) {
@@ -20092,14 +20005,14 @@ return /******/ (function(modules) { // webpackBootstrap
20092
20005
 
20093
20006
 
20094
20007
  /***/ },
20095
- /* 95 */
20008
+ /* 94 */
20096
20009
  /***/ function(module, exports, __webpack_require__) {
20097
20010
 
20098
20011
  // Compatitable with 2.0
20099
20012
 
20100
20013
 
20101
20014
  var zrUtil = __webpack_require__(4);
20102
- var compatStyle = __webpack_require__(96);
20015
+ var compatStyle = __webpack_require__(95);
20103
20016
 
20104
20017
  function get(opt, path) {
20105
20018
  path = path.split(',');
@@ -20202,7 +20115,7 @@ return /******/ (function(modules) { // webpackBootstrap
20202
20115
 
20203
20116
 
20204
20117
  /***/ },
20205
- /* 96 */
20118
+ /* 95 */
20206
20119
  /***/ function(module, exports, __webpack_require__) {
20207
20120
 
20208
20121
 
@@ -20282,6 +20195,109 @@ return /******/ (function(modules) { // webpackBootstrap
20282
20195
  };
20283
20196
 
20284
20197
 
20198
+ /***/ },
20199
+ /* 96 */
20200
+ /***/ function(module, exports, __webpack_require__) {
20201
+
20202
+
20203
+
20204
+ var graphic = __webpack_require__(43);
20205
+ var zrUtil = __webpack_require__(4);
20206
+ var PI = Math.PI;
20207
+ /**
20208
+ * @param {module:echarts/ExtensionAPI} api
20209
+ * @param {Object} [opts]
20210
+ * @param {string} [opts.text]
20211
+ * @param {string} [opts.color]
20212
+ * @param {string} [opts.textColor]
20213
+ * @return {module:zrender/Element}
20214
+ */
20215
+ module.exports = function (api, opts) {
20216
+ opts = opts || {};
20217
+ zrUtil.defaults(opts, {
20218
+ text: 'loading',
20219
+ color: '#c23531',
20220
+ textColor: '#000',
20221
+ maskColor: 'rgba(255, 255, 255, 0.8)',
20222
+ zlevel: 0
20223
+ });
20224
+ var mask = new graphic.Rect({
20225
+ style: {
20226
+ fill: opts.maskColor
20227
+ },
20228
+ zlevel: opts.zlevel,
20229
+ z: 10000
20230
+ });
20231
+ var arc = new graphic.Arc({
20232
+ shape: {
20233
+ startAngle: -PI / 2,
20234
+ endAngle: -PI / 2 + 0.1,
20235
+ r: 10
20236
+ },
20237
+ style: {
20238
+ stroke: opts.color,
20239
+ lineCap: 'round',
20240
+ lineWidth: 5
20241
+ },
20242
+ zlevel: opts.zlevel,
20243
+ z: 10001
20244
+ });
20245
+ var labelRect = new graphic.Rect({
20246
+ style: {
20247
+ fill: 'none',
20248
+ text: opts.text,
20249
+ textPosition: 'right',
20250
+ textDistance: 10,
20251
+ textFill: opts.textColor
20252
+ },
20253
+ zlevel: opts.zlevel,
20254
+ z: 10001
20255
+ });
20256
+
20257
+ arc.animateShape(true)
20258
+ .when(1000, {
20259
+ endAngle: PI * 3 / 2
20260
+ })
20261
+ .start('circularInOut');
20262
+ arc.animateShape(true)
20263
+ .when(1000, {
20264
+ startAngle: PI * 3 / 2
20265
+ })
20266
+ .delay(300)
20267
+ .start('circularInOut');
20268
+
20269
+ var group = new graphic.Group();
20270
+ group.add(arc);
20271
+ group.add(labelRect);
20272
+ group.add(mask);
20273
+ // Inject resize
20274
+ group.resize = function () {
20275
+ var cx = api.getWidth() / 2;
20276
+ var cy = api.getHeight() / 2;
20277
+ arc.setShape({
20278
+ cx: cx,
20279
+ cy: cy
20280
+ });
20281
+ var r = arc.shape.r;
20282
+ labelRect.setShape({
20283
+ x: cx - r,
20284
+ y: cy - r,
20285
+ width: r * 2,
20286
+ height: r * 2
20287
+ });
20288
+
20289
+ mask.setShape({
20290
+ x: 0,
20291
+ y: 0,
20292
+ width: api.getWidth(),
20293
+ height: api.getHeight()
20294
+ });
20295
+ };
20296
+ group.resize();
20297
+ return group;
20298
+ };
20299
+
20300
+
20285
20301
  /***/ },
20286
20302
  /* 97 */
20287
20303
  /***/ function(module, exports, __webpack_require__) {
@@ -21605,10 +21621,10 @@ return /******/ (function(modules) { // webpackBootstrap
21605
21621
 
21606
21622
  hoverAnimation: true,
21607
21623
  // stack: null
21608
- xAxisIndex: 0,
21609
- yAxisIndex: 0,
21624
+ // xAxisIndex: 0,
21625
+ // yAxisIndex: 0,
21610
21626
 
21611
- polarIndex: 0,
21627
+ // polarIndex: 0,
21612
21628
 
21613
21629
  // If clip the overflow value
21614
21630
  clipOverflow: true,
@@ -21782,15 +21798,31 @@ return /******/ (function(modules) { // webpackBootstrap
21782
21798
  var creators = {
21783
21799
 
21784
21800
  cartesian2d: function (data, seriesModel, ecModel) {
21785
- var xAxisModel = ecModel.getComponent('xAxis', seriesModel.get('xAxisIndex'));
21786
- var yAxisModel = ecModel.getComponent('yAxis', seriesModel.get('yAxisIndex'));
21801
+
21802
+ var axesModels = zrUtil.map(['xAxis', 'yAxis'], function (name) {
21803
+ return ecModel.queryComponents({
21804
+ mainType: name,
21805
+ index: seriesModel.get(name + 'Index'),
21806
+ id: seriesModel.get(name + 'Id')
21807
+ })[0];
21808
+ });
21809
+ var xAxisModel = axesModels[0];
21810
+ var yAxisModel = axesModels[1];
21787
21811
 
21788
21812
  if (true) {
21789
21813
  if (!xAxisModel) {
21790
- throw new Error('xAxis "' + seriesModel.get('xAxisIndex') + '" not found');
21814
+ throw new Error('xAxis "' + zrUtil.retrieve(
21815
+ seriesModel.get('xAxisIndex'),
21816
+ seriesModel.get('xAxisId'),
21817
+ 0
21818
+ ) + '" not found');
21791
21819
  }
21792
21820
  if (!yAxisModel) {
21793
- throw new Error('yAxis "' + seriesModel.get('yAxisIndex') + '" not found');
21821
+ throw new Error('yAxis "' + zrUtil.retrieve(
21822
+ seriesModel.get('xAxisIndex'),
21823
+ seriesModel.get('yAxisId'),
21824
+ 0
21825
+ ) + '" not found');
21794
21826
  }
21795
21827
  }
21796
21828
 
@@ -21831,19 +21863,15 @@ return /******/ (function(modules) { // webpackBootstrap
21831
21863
  },
21832
21864
 
21833
21865
  polar: function (data, seriesModel, ecModel) {
21834
- var polarIndex = seriesModel.get('polarIndex') || 0;
21835
-
21836
- var axisFinder = function (axisModel) {
21837
- return axisModel.get('polarIndex') === polarIndex;
21838
- };
21839
-
21840
- var angleAxisModel = ecModel.findComponents({
21841
- mainType: 'angleAxis', filter: axisFinder
21842
- })[0];
21843
- var radiusAxisModel = ecModel.findComponents({
21844
- mainType: 'radiusAxis', filter: axisFinder
21866
+ var polarModel = ecModel.queryComponents({
21867
+ mainType: 'polar',
21868
+ index: seriesModel.get('polarIndex'),
21869
+ id: seriesModel.get('polarId')
21845
21870
  })[0];
21846
21871
 
21872
+ var angleAxisModel = polarModel.findAxisModel('angleAxis');
21873
+ var radiusAxisModel = polarModel.findAxisModel('radiusAxis');
21874
+
21847
21875
  if (true) {
21848
21876
  if (!angleAxisModel) {
21849
21877
  throw new Error('angleAxis option not found');
@@ -22435,6 +22463,13 @@ return /******/ (function(modules) { // webpackBootstrap
22435
22463
  );
22436
22464
  }
22437
22465
  else {
22466
+ // Not do it in update with animation
22467
+ if (step) {
22468
+ // TODO If stacked series is not step
22469
+ points = turnPointsIntoStep(points, coordSys, step);
22470
+ stackedOnPoints = turnPointsIntoStep(stackedOnPoints, coordSys, step);
22471
+ }
22472
+
22438
22473
  polyline.setShape({
22439
22474
  points: points
22440
22475
  });
@@ -22745,6 +22780,10 @@ return /******/ (function(modules) { // webpackBootstrap
22745
22780
 
22746
22781
  function symbolNeedsDraw(data, idx, isIgnore) {
22747
22782
  var point = data.getItemLayout(idx);
22783
+ // Is an object
22784
+ // if (point && point.hasOwnProperty('point')) {
22785
+ // point = point.point;
22786
+ // }
22748
22787
  return point && !isNaN(point[0]) && !isNaN(point[1]) && !(isIgnore && isIgnore(idx))
22749
22788
  && data.getItemVisual(idx, 'symbol') !== 'none';
22750
22789
  }
@@ -22924,6 +22963,13 @@ return /******/ (function(modules) { // webpackBootstrap
22924
22963
  this.childAt(0).stopAnimation(toLastFrame);
22925
22964
  };
22926
22965
 
22966
+ /**
22967
+ * Get symbol path element
22968
+ */
22969
+ symbolProto.getSymbolPath = function () {
22970
+ return this.childAt(0);
22971
+ };
22972
+
22927
22973
  /**
22928
22974
  * Get scale(aka, current symbol size).
22929
22975
  * Including the change caused by animation
@@ -23094,7 +23140,9 @@ return /******/ (function(modules) { // webpackBootstrap
23094
23140
  .off('emphasis')
23095
23141
  .off('normal');
23096
23142
 
23097
- graphic.setHoverStyle(symbolPath, hoverItemStyle);
23143
+ symbolPath.hoverStyle = hoverItemStyle;
23144
+
23145
+ graphic.setHoverStyle(symbolPath);
23098
23146
 
23099
23147
  if (hoverAnimation && seriesModel.ifEnableAnimation()) {
23100
23148
  var onEmphasis = function() {
@@ -24135,13 +24183,14 @@ return /******/ (function(modules) { // webpackBootstrap
24135
24183
 
24136
24184
  var graphic = __webpack_require__(43);
24137
24185
  var zrUtil = __webpack_require__(4);
24186
+ var echarts = __webpack_require__(1);
24138
24187
 
24139
24188
  __webpack_require__(113);
24140
24189
 
24141
24190
  __webpack_require__(130);
24142
24191
 
24143
24192
  // Grid view
24144
- __webpack_require__(1).extendComponentView({
24193
+ echarts.extendComponentView({
24145
24194
 
24146
24195
  type: 'grid',
24147
24196
 
@@ -24159,6 +24208,13 @@ return /******/ (function(modules) { // webpackBootstrap
24159
24208
  }
24160
24209
  });
24161
24210
 
24211
+ echarts.registerPreprocessor(function (option) {
24212
+ // Only create grid when need
24213
+ if (option.xAxis && option.yAxis && !option.grid) {
24214
+ option.grid = {};
24215
+ }
24216
+ });
24217
+
24162
24218
 
24163
24219
  /***/ },
24164
24220
  /* 113 */
@@ -24191,7 +24247,7 @@ return /******/ (function(modules) { // webpackBootstrap
24191
24247
  * @inner
24192
24248
  */
24193
24249
  function isAxisUsedInTheGrid(axisModel, gridModel, ecModel) {
24194
- return ecModel.getComponent('grid', axisModel.get('gridIndex')) === gridModel;
24250
+ return axisModel.findGridModel() === gridModel;
24195
24251
  }
24196
24252
 
24197
24253
  function getLabelUnionRect(axis) {
@@ -24504,12 +24560,10 @@ return /******/ (function(modules) { // webpackBootstrap
24504
24560
  axis.scale.setExtent(Infinity, -Infinity);
24505
24561
  });
24506
24562
  ecModel.eachSeries(function (seriesModel) {
24507
- if (seriesModel.get('coordinateSystem') === 'cartesian2d') {
24508
- var xAxisIndex = seriesModel.get('xAxisIndex');
24509
- var yAxisIndex = seriesModel.get('yAxisIndex');
24510
-
24511
- var xAxisModel = ecModel.getComponent('xAxis', xAxisIndex);
24512
- var yAxisModel = ecModel.getComponent('yAxis', yAxisIndex);
24563
+ if (isCartesian2D(seriesModel)) {
24564
+ var axesModels = findAxesModels(seriesModel, ecModel);
24565
+ var xAxisModel = axesModels[0];
24566
+ var yAxisModel = axesModels[1];
24513
24567
 
24514
24568
  if (!isAxisUsedInTheGrid(xAxisModel, gridModel, ecModel)
24515
24569
  || !isAxisUsedInTheGrid(yAxisModel, gridModel, ecModel)
@@ -24517,7 +24571,9 @@ return /******/ (function(modules) { // webpackBootstrap
24517
24571
  return;
24518
24572
  }
24519
24573
 
24520
- var cartesian = this.getCartesian(xAxisIndex, yAxisIndex);
24574
+ var cartesian = this.getCartesian(
24575
+ xAxisModel.componentIndex, yAxisModel.componentIndex
24576
+ );
24521
24577
  var data = seriesModel.getData();
24522
24578
  var xAxis = cartesian.getAxis('x');
24523
24579
  var yAxis = cartesian.getAxis('y');
@@ -24562,6 +24618,38 @@ return /******/ (function(modules) { // webpackBootstrap
24562
24618
  };
24563
24619
  }
24564
24620
 
24621
+ var axesTypes = ['xAxis', 'yAxis'];
24622
+ /**
24623
+ * @inner
24624
+ */
24625
+ function findAxesModels(seriesModel, ecModel) {
24626
+ 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];
24632
+
24633
+ if (true) {
24634
+ if (!axisModel) {
24635
+ throw new Error(axisType + ' "' + zrUtil.retrieve(
24636
+ seriesModel.get(axisType + 'Index'),
24637
+ seriesModel.get(axisType + 'Id'),
24638
+ 0
24639
+ ) + '" not found');
24640
+ }
24641
+ }
24642
+ return axisModel;
24643
+ });
24644
+ }
24645
+
24646
+ /**
24647
+ * @inner
24648
+ */
24649
+ function isCartesian2D(seriesModel) {
24650
+ return seriesModel.get('coordinateSystem') === 'cartesian2d';
24651
+ }
24652
+
24565
24653
  Grid.create = function (ecModel, api) {
24566
24654
  var grids = [];
24567
24655
  ecModel.eachComponent('grid', function (gridModel, idx) {
@@ -24576,21 +24664,36 @@ return /******/ (function(modules) { // webpackBootstrap
24576
24664
 
24577
24665
  // Inject the coordinateSystems into seriesModel
24578
24666
  ecModel.eachSeries(function (seriesModel) {
24579
- if (seriesModel.get('coordinateSystem') !== 'cartesian2d') {
24667
+ if (!isCartesian2D(seriesModel)) {
24580
24668
  return;
24581
24669
  }
24582
- var xAxisIndex = seriesModel.get('xAxisIndex');
24583
- var yAxisIndex = seriesModel.get('yAxisIndex');
24584
- var xAxisModel = ecModel.getComponent('xAxis', xAxisIndex);
24670
+
24671
+ var axesModels = findAxesModels(seriesModel, ecModel);
24672
+ var xAxisModel = axesModels[0];
24673
+ var yAxisModel = axesModels[1];
24674
+
24675
+ var gridModel = xAxisModel.findGridModel();
24585
24676
 
24586
24677
  if (true) {
24587
- var yAxisModel = ecModel.getComponent('yAxis', yAxisIndex);
24588
- if (xAxisModel.get('gridIndex') !== yAxisModel.get('gridIndex')) {
24678
+ if (!gridModel) {
24679
+ throw new Error(
24680
+ 'Grid "' + zrUtil.retrieve(
24681
+ xAxisModel.get('gridIndex'),
24682
+ xAxisModel.get('gridId'),
24683
+ 0
24684
+ ) + '" not found'
24685
+ );
24686
+ }
24687
+ if (xAxisModel.findGridModel() !== yAxisModel.findGridModel()) {
24589
24688
  throw new Error('xAxis and yAxis must use the same grid');
24590
24689
  }
24591
24690
  }
24592
- var grid = grids[xAxisModel.get('gridIndex')];
24593
- seriesModel.coordinateSystem = grid.getCartesian(xAxisIndex, yAxisIndex);
24691
+
24692
+ var grid = gridModel.coordinateSystem;
24693
+
24694
+ seriesModel.coordinateSystem = grid.getCartesian(
24695
+ xAxisModel.componentIndex, yAxisModel.componentIndex
24696
+ );
24594
24697
  });
24595
24698
 
24596
24699
  return grids;
@@ -24684,6 +24787,11 @@ return /******/ (function(modules) { // webpackBootstrap
24684
24787
  var fixMin = (model.getMin ? model.getMin() : model.get('min')) != null;
24685
24788
  var fixMax = (model.getMax ? model.getMax() : model.get('max')) != null;
24686
24789
  var splitNumber = model.get('splitNumber');
24790
+
24791
+ if (scale.type === 'log') {
24792
+ scale.base = model.get('logBase');
24793
+ }
24794
+
24687
24795
  scale.setExtent(extent[0], extent[1]);
24688
24796
  scale.niceExtent(splitNumber, fixMin, fixMax);
24689
24797
 
@@ -25078,6 +25186,9 @@ return /******/ (function(modules) { // webpackBootstrap
25078
25186
 
25079
25187
  var mathFloor = Math.floor;
25080
25188
  var mathCeil = Math.ceil;
25189
+
25190
+ var getPrecisionSafe = numberUtil.getPrecisionSafe;
25191
+ var roundingErrorFix = numberUtil.round;
25081
25192
  /**
25082
25193
  * @alias module:echarts/coord/scale/Interval
25083
25194
  * @constructor
@@ -25143,6 +25254,8 @@ return /******/ (function(modules) { // webpackBootstrap
25143
25254
 
25144
25255
  if (interval) {
25145
25256
  var niceExtent = this._niceExtent;
25257
+ var precision = getPrecisionSafe(interval) + 2;
25258
+
25146
25259
  if (extent[0] < niceExtent[0]) {
25147
25260
  ticks.push(extent[0]);
25148
25261
  }
@@ -25150,7 +25263,7 @@ return /******/ (function(modules) { // webpackBootstrap
25150
25263
  while (tick <= niceExtent[1]) {
25151
25264
  ticks.push(tick);
25152
25265
  // Avoid rounding error
25153
- tick = numberUtil.round(tick + interval);
25266
+ tick = roundingErrorFix(tick + interval, precision);
25154
25267
  if (ticks.length > safeLimit) {
25155
25268
  return [];
25156
25269
  }
@@ -25204,12 +25317,21 @@ return /******/ (function(modules) { // webpackBootstrap
25204
25317
 
25205
25318
  // From "Nice Numbers for Graph Labels" of Graphic Gems
25206
25319
  // var niceSpan = numberUtil.nice(span, false);
25207
- var step = numberUtil.nice(span / splitNumber, true);
25320
+ var step = roundingErrorFix(
25321
+ numberUtil.nice(span / splitNumber, true),
25322
+ Math.max(
25323
+ getPrecisionSafe(extent[0]),
25324
+ getPrecisionSafe(extent[1])
25325
+ // extent may be [0, 1], and step should have 1 more digits.
25326
+ // To make it safe we add 2 more digits
25327
+ ) + 2
25328
+ );
25208
25329
 
25330
+ var precision = getPrecisionSafe(step) + 2;
25209
25331
  // Niced extent inside original extent
25210
25332
  var niceExtent = [
25211
- numberUtil.round(mathCeil(extent[0] / step) * step),
25212
- numberUtil.round(mathFloor(extent[1] / step) * step)
25333
+ roundingErrorFix(mathCeil(extent[0] / step) * step, precision),
25334
+ roundingErrorFix(mathFloor(extent[1] / step) * step, precision)
25213
25335
  ];
25214
25336
 
25215
25337
  this._interval = step;
@@ -25259,10 +25381,10 @@ return /******/ (function(modules) { // webpackBootstrap
25259
25381
  var interval = this._interval;
25260
25382
 
25261
25383
  if (!fixMin) {
25262
- extent[0] = numberUtil.round(mathFloor(extent[0] / interval) * interval);
25384
+ extent[0] = roundingErrorFix(mathFloor(extent[0] / interval) * interval);
25263
25385
  }
25264
25386
  if (!fixMax) {
25265
- extent[1] = numberUtil.round(mathCeil(extent[1] / interval) * interval);
25387
+ extent[1] = roundingErrorFix(mathCeil(extent[1] / interval) * interval);
25266
25388
  }
25267
25389
  }
25268
25390
  });
@@ -25468,20 +25590,21 @@ return /******/ (function(modules) { // webpackBootstrap
25468
25590
  var mathCeil = Math.ceil;
25469
25591
  var mathPow = Math.pow;
25470
25592
 
25471
- var LOG_BASE = 10;
25472
25593
  var mathLog = Math.log;
25473
25594
 
25474
25595
  var LogScale = Scale.extend({
25475
25596
 
25476
25597
  type: 'log',
25477
25598
 
25599
+ base: 10,
25600
+
25478
25601
  /**
25479
25602
  * @return {Array.<number>}
25480
25603
  */
25481
25604
  getTicks: function () {
25482
25605
  return zrUtil.map(intervalScaleProto.getTicks.call(this), function (val) {
25483
- return numberUtil.round(mathPow(LOG_BASE, val));
25484
- });
25606
+ return numberUtil.round(mathPow(this.base, val));
25607
+ }, this);
25485
25608
  },
25486
25609
 
25487
25610
  /**
@@ -25496,7 +25619,7 @@ return /******/ (function(modules) { // webpackBootstrap
25496
25619
  */
25497
25620
  scale: function (val) {
25498
25621
  val = scaleProto.scale.call(this, val);
25499
- return mathPow(LOG_BASE, val);
25622
+ return mathPow(this.base, val);
25500
25623
  },
25501
25624
 
25502
25625
  /**
@@ -25504,8 +25627,9 @@ return /******/ (function(modules) { // webpackBootstrap
25504
25627
  * @param {number} end
25505
25628
  */
25506
25629
  setExtent: function (start, end) {
25507
- start = mathLog(start) / mathLog(LOG_BASE);
25508
- end = mathLog(end) / mathLog(LOG_BASE);
25630
+ var base = this.base;
25631
+ start = mathLog(start) / mathLog(base);
25632
+ end = mathLog(end) / mathLog(base);
25509
25633
  intervalScaleProto.setExtent.call(this, start, end);
25510
25634
  },
25511
25635
 
@@ -25513,9 +25637,10 @@ return /******/ (function(modules) { // webpackBootstrap
25513
25637
  * @return {number} end
25514
25638
  */
25515
25639
  getExtent: function () {
25640
+ var base = this.base;
25516
25641
  var extent = scaleProto.getExtent.call(this);
25517
- extent[0] = mathPow(LOG_BASE, extent[0]);
25518
- extent[1] = mathPow(LOG_BASE, extent[1]);
25642
+ extent[0] = mathPow(base, extent[0]);
25643
+ extent[1] = mathPow(base, extent[1]);
25519
25644
  return extent;
25520
25645
  },
25521
25646
 
@@ -25523,8 +25648,9 @@ return /******/ (function(modules) { // webpackBootstrap
25523
25648
  * @param {Array.<number>} extent
25524
25649
  */
25525
25650
  unionExtent: function (extent) {
25526
- extent[0] = mathLog(extent[0]) / mathLog(LOG_BASE);
25527
- extent[1] = mathLog(extent[1]) / mathLog(LOG_BASE);
25651
+ var base = this.base;
25652
+ extent[0] = mathLog(extent[0]) / mathLog(base);
25653
+ extent[1] = mathLog(extent[1]) / mathLog(base);
25528
25654
  scaleProto.unionExtent.call(this, extent);
25529
25655
  },
25530
25656
 
@@ -25540,13 +25666,19 @@ return /******/ (function(modules) { // webpackBootstrap
25540
25666
  return;
25541
25667
  }
25542
25668
 
25543
- var interval = mathPow(10, mathFloor(mathLog(span / approxTickNum) / Math.LN10));
25669
+ var interval = numberUtil.quantity(span);
25544
25670
  var err = approxTickNum / span * interval;
25545
25671
 
25546
25672
  // Filter ticks to get closer to the desired count.
25547
25673
  if (err <= 0.5) {
25548
25674
  interval *= 10;
25549
25675
  }
25676
+
25677
+ // Interval should be integer
25678
+ while (!isNaN(interval) && Math.abs(interval) < 1 && Math.abs(interval) > 0) {
25679
+ interval *= 10;
25680
+ }
25681
+
25550
25682
  var niceExtent = [
25551
25683
  numberUtil.round(mathCeil(extent[0] / interval) * interval),
25552
25684
  numberUtil.round(mathFloor(extent[1] / interval) * interval)
@@ -25567,7 +25699,7 @@ return /******/ (function(modules) { // webpackBootstrap
25567
25699
 
25568
25700
  zrUtil.each(['contain', 'normalize'], function (methodName) {
25569
25701
  LogScale.prototype[methodName] = function (val) {
25570
- val = mathLog(val) / mathLog(LOG_BASE);
25702
+ val = mathLog(val) / mathLog(this.base);
25571
25703
  return scaleProto[methodName].call(this, val);
25572
25704
  };
25573
25705
  });
@@ -26317,6 +26449,17 @@ return /******/ (function(modules) { // webpackBootstrap
26317
26449
  ? false : !option.scale;
26318
26450
  },
26319
26451
 
26452
+ /**
26453
+ * @return {module:echarts/model/Model}
26454
+ */
26455
+ findGridModel: function () {
26456
+ return this.ecModel.queryComponents({
26457
+ mainType: 'grid',
26458
+ index: this.get('gridIndex'),
26459
+ id: this.get('gridId')
26460
+ })[0];
26461
+ },
26462
+
26320
26463
  /**
26321
26464
  * @private
26322
26465
  */
@@ -26335,7 +26478,8 @@ return /******/ (function(modules) { // webpackBootstrap
26335
26478
  zrUtil.merge(AxisModel.prototype, __webpack_require__(129));
26336
26479
 
26337
26480
  var extraOption = {
26338
- gridIndex: 0,
26481
+ // gridIndex: 0,
26482
+ // gridId: '',
26339
26483
 
26340
26484
  // Offset is for multiple axis on the same position
26341
26485
  offset: 0
@@ -26555,7 +26699,9 @@ return /******/ (function(modules) { // webpackBootstrap
26555
26699
  min: 'dataMin',
26556
26700
  max: 'dataMax'
26557
26701
  }, valueAxis);
26558
- var logAxis = zrUtil.defaults({}, valueAxis);
26702
+ var logAxis = zrUtil.defaults({
26703
+ logBase: 10
26704
+ }, valueAxis);
26559
26705
  logAxis.scale = true;
26560
26706
 
26561
26707
  module.exports = {
@@ -26667,7 +26813,7 @@ return /******/ (function(modules) { // webpackBootstrap
26667
26813
  return;
26668
26814
  }
26669
26815
 
26670
- var gridModel = ecModel.getComponent('grid', axisModel.get('gridIndex'));
26816
+ var gridModel = axisModel.findGridModel();
26671
26817
 
26672
26818
  var layout = layoutAxis(gridModel, axisModel);
26673
26819
 
@@ -27589,8 +27735,8 @@ return /******/ (function(modules) { // webpackBootstrap
27589
27735
  // stack: null
27590
27736
 
27591
27737
  // Cartesian coordinate system
27592
- xAxisIndex: 0,
27593
- yAxisIndex: 0,
27738
+ // xAxisIndex: 0,
27739
+ // yAxisIndex: 0,
27594
27740
 
27595
27741
  // 最小高度改为0
27596
27742
  barMinHeight: 0,
@@ -28783,15 +28929,21 @@ return /******/ (function(modules) { // webpackBootstrap
28783
28929
  // FIXME Performance
28784
28930
  var itemModel = dataAll.getItemModel(rawIdx);
28785
28931
  var filteredIdx = idxMap[rawIdx];
28932
+
28786
28933
  // If series.itemStyle.normal.color is a function. itemVisual may be encoded
28787
- var singleDataColor = data.getItemVisual(filteredIdx, 'color', true);
28934
+ var singleDataColor = filteredIdx != null
28935
+ && data.getItemVisual(filteredIdx, 'color', true);
28788
28936
 
28789
28937
  if (!singleDataColor) {
28790
28938
  var color = itemModel.get('itemStyle.normal.color')
28791
28939
  || seriesModel.getColorFromPalette(dataAll.getName(rawIdx), paletteScope);
28792
28940
  // Legend may use the visual info in data before processed
28793
28941
  dataAll.setItemVisual(rawIdx, 'color', color);
28794
- data.setItemVisual(filteredIdx, 'color', color);
28942
+
28943
+ // Data is not filtered
28944
+ if (filteredIdx != null) {
28945
+ data.setItemVisual(filteredIdx, 'color', color);
28946
+ }
28795
28947
  }
28796
28948
  else {
28797
28949
  // Set data all color for legend
@@ -29244,14 +29396,14 @@ return /******/ (function(modules) { // webpackBootstrap
29244
29396
 
29245
29397
  hoverAnimation: true,
29246
29398
  // Cartesian coordinate system
29247
- xAxisIndex: 0,
29248
- yAxisIndex: 0,
29399
+ // xAxisIndex: 0,
29400
+ // yAxisIndex: 0,
29249
29401
 
29250
29402
  // Polar coordinate system
29251
- polarIndex: 0,
29403
+ // polarIndex: 0,
29252
29404
 
29253
29405
  // Geo coordinate system
29254
- geoIndex: 0,
29406
+ // geoIndex: 0,
29255
29407
 
29256
29408
  // symbol: null, // 图形类型
29257
29409
  symbolSize: 10, // 图形大小,半宽(半径)参数,当图形为方向或菱形则总宽度为symbolSize * 2
@@ -29965,6 +30117,10 @@ return /******/ (function(modules) { // webpackBootstrap
29965
30117
  targetShape.cpx1 = cp1[0];
29966
30118
  targetShape.cpy1 = cp1[1];
29967
30119
  }
30120
+ else {
30121
+ targetShape.cpx1 = NaN;
30122
+ targetShape.cpy1 = NaN;
30123
+ }
29968
30124
  }
29969
30125
 
29970
30126
  function updateSymbolAndLabelBeforeLineUpdate () {
@@ -30163,6 +30319,11 @@ return /******/ (function(modules) { // webpackBootstrap
30163
30319
  }
30164
30320
 
30165
30321
  var visualColor = lineData.getItemVisual(idx, 'color');
30322
+ var visualOpacity = zrUtil.retrieve(
30323
+ lineData.getItemVisual(idx, 'opacity'),
30324
+ lineStyle.opacity,
30325
+ 1
30326
+ );
30166
30327
  if (isNaN(defaultText)) {
30167
30328
  // Use name
30168
30329
  defaultText = lineData.getName(idx);
@@ -30171,12 +30332,24 @@ return /******/ (function(modules) { // webpackBootstrap
30171
30332
  {
30172
30333
  strokeNoScale: true,
30173
30334
  fill: 'none',
30174
- stroke: visualColor
30335
+ stroke: visualColor,
30336
+ opacity: visualOpacity
30175
30337
  },
30176
30338
  lineStyle
30177
30339
  ));
30178
30340
  line.hoverStyle = hoverLineStyle;
30179
30341
 
30342
+ // Update symbol
30343
+ zrUtil.each(SYMBOL_CATEGORIES, function (symbolCategory) {
30344
+ var symbol = this.childOfName(symbolCategory);
30345
+ if (symbol) {
30346
+ symbol.setColor(visualColor);
30347
+ symbol.setStyle({
30348
+ opacity: visualOpacity
30349
+ });
30350
+ }
30351
+ }, this);
30352
+
30180
30353
  var showLabel = labelModel.getShallow('show');
30181
30354
  var hoverShowLabel = hoverLabelModel.getShallow('show');
30182
30355
  var defaultText;
@@ -30258,7 +30431,7 @@ return /******/ (function(modules) { // webpackBootstrap
30258
30431
  var bezierCurveProto = graphic.BezierCurve.prototype;
30259
30432
 
30260
30433
  function isLine(shape) {
30261
- return shape.cpx1 == null || shape.cpy1 == null;
30434
+ return isNaN(+shape.cpx1) || isNaN(+shape.cpy1);
30262
30435
  }
30263
30436
 
30264
30437
  module.exports = graphic.extendShape({
@@ -34289,16 +34462,16 @@ return /******/ (function(modules) { // webpackBootstrap
34289
34462
  __webpack_require__(317);
34290
34463
 
34291
34464
  __webpack_require__(318);
34292
- __webpack_require__(320);
34293
-
34294
34465
  __webpack_require__(321);
34466
+
34295
34467
  __webpack_require__(322);
34468
+ __webpack_require__(323);
34296
34469
 
34297
- __webpack_require__(324);
34298
34470
  __webpack_require__(325);
34471
+ __webpack_require__(326);
34299
34472
 
34300
- __webpack_require__(327);
34301
34473
  __webpack_require__(328);
34474
+ __webpack_require__(329);
34302
34475
 
34303
34476
 
34304
34477
 
@@ -34328,9 +34501,10 @@ return /******/ (function(modules) { // webpackBootstrap
34328
34501
  var env = __webpack_require__(2);
34329
34502
  var echarts = __webpack_require__(1);
34330
34503
  var modelUtil = __webpack_require__(5);
34331
- var AxisProxy = __webpack_require__(319);
34504
+ var helper = __webpack_require__(319);
34505
+ var AxisProxy = __webpack_require__(320);
34332
34506
  var each = zrUtil.each;
34333
- var eachAxisDim = modelUtil.eachAxisDim;
34507
+ var eachAxisDim = helper.eachAxisDim;
34334
34508
 
34335
34509
  var DataZoomModel = echarts.extendComponentModel({
34336
34510
 
@@ -34349,8 +34523,8 @@ return /******/ (function(modules) { // webpackBootstrap
34349
34523
  orient: null, // Default auto by axisIndex. Possible value: 'horizontal', 'vertical'.
34350
34524
  xAxisIndex: null, // Default the first horizontal category axis.
34351
34525
  yAxisIndex: null, // Default the first vertical category axis.
34352
- angleAxisIndex: null,
34353
- radiusAxisIndex: null,
34526
+
34527
+
34354
34528
  filterMode: 'filter', // Possible values: 'filter' or 'empty'.
34355
34529
  // 'filter': data items which are out of window will be removed.
34356
34530
  // This option is applicable when filtering outliers.
@@ -34578,7 +34752,29 @@ return /******/ (function(modules) { // webpackBootstrap
34578
34752
  if (this._isSeriesHasAllAxesTypeOf(seriesModel, 'value')) {
34579
34753
  eachAxisDim(function (dimNames) {
34580
34754
  var axisIndices = thisOption[dimNames.axisIndex];
34755
+
34581
34756
  var axisIndex = seriesModel.get(dimNames.axisIndex);
34757
+ var axisId = seriesModel.get(dimNames.axisId);
34758
+
34759
+ var axisModel = seriesModel.ecModel.queryComponents({
34760
+ mainType: dimNames.axis,
34761
+ index: axisIndex,
34762
+ id: axisId
34763
+ })[0];
34764
+
34765
+ if (true) {
34766
+ if (!axisModel) {
34767
+ throw new Error(
34768
+ dimNames.axis + ' "' + zrUtil.retrieve(
34769
+ axisIndex,
34770
+ axisId,
34771
+ 0
34772
+ ) + '" not found'
34773
+ );
34774
+ }
34775
+ }
34776
+ axisIndex = axisModel.componentIndex;
34777
+
34582
34778
  if (zrUtil.indexOf(axisIndices, axisIndex) < 0) {
34583
34779
  axisIndices.push(axisIndex);
34584
34780
  }
@@ -34782,6 +34978,134 @@ return /******/ (function(modules) { // webpackBootstrap
34782
34978
  /* 319 */
34783
34979
  /***/ function(module, exports, __webpack_require__) {
34784
34980
 
34981
+
34982
+ var formatUtil = __webpack_require__(6);
34983
+ var zrUtil = __webpack_require__(4);
34984
+
34985
+ var helper = {};
34986
+
34987
+ var AXIS_DIMS = ['x', 'y', 'z', 'radius', 'angle'];
34988
+
34989
+ /**
34990
+ * Create "each" method to iterate names.
34991
+ *
34992
+ * @pubilc
34993
+ * @param {Array.<string>} names
34994
+ * @param {Array.<string>=} attrs
34995
+ * @return {Function}
34996
+ */
34997
+ helper.createNameEach = function (names, attrs) {
34998
+ names = names.slice();
34999
+ var capitalNames = zrUtil.map(names, formatUtil.capitalFirst);
35000
+ attrs = (attrs || []).slice();
35001
+ var capitalAttrs = zrUtil.map(attrs, formatUtil.capitalFirst);
35002
+
35003
+ return function (callback, context) {
35004
+ zrUtil.each(names, function (name, index) {
35005
+ var nameObj = {name: name, capital: capitalNames[index]};
35006
+
35007
+ for (var j = 0; j < attrs.length; j++) {
35008
+ nameObj[attrs[j]] = name + capitalAttrs[j];
35009
+ }
35010
+
35011
+ callback.call(context, nameObj);
35012
+ });
35013
+ };
35014
+ };
35015
+
35016
+ /**
35017
+ * Iterate each dimension name.
35018
+ *
35019
+ * @public
35020
+ * @param {Function} callback The parameter is like:
35021
+ * {
35022
+ * name: 'angle',
35023
+ * capital: 'Angle',
35024
+ * axis: 'angleAxis',
35025
+ * axisIndex: 'angleAixs',
35026
+ * index: 'angleIndex'
35027
+ * }
35028
+ * @param {Object} context
35029
+ */
35030
+ helper.eachAxisDim = helper.createNameEach(AXIS_DIMS, ['axisIndex', 'axis', 'index', 'id']);
35031
+
35032
+ /**
35033
+ * If tow dataZoomModels has the same axis controlled, we say that they are 'linked'.
35034
+ * dataZoomModels and 'links' make up one or more graphics.
35035
+ * This function finds the graphic where the source dataZoomModel is in.
35036
+ *
35037
+ * @public
35038
+ * @param {Function} forEachNode Node iterator.
35039
+ * @param {Function} forEachEdgeType edgeType iterator
35040
+ * @param {Function} edgeIdGetter Giving node and edgeType, return an array of edge id.
35041
+ * @return {Function} Input: sourceNode, Output: Like {nodes: [], dims: {}}
35042
+ */
35043
+ helper.createLinkedNodesFinder = function (forEachNode, forEachEdgeType, edgeIdGetter) {
35044
+
35045
+ return function (sourceNode) {
35046
+ var result = {
35047
+ nodes: [],
35048
+ records: {} // key: edgeType.name, value: Object (key: edge id, value: boolean).
35049
+ };
35050
+
35051
+ forEachEdgeType(function (edgeType) {
35052
+ result.records[edgeType.name] = {};
35053
+ });
35054
+
35055
+ if (!sourceNode) {
35056
+ return result;
35057
+ }
35058
+
35059
+ absorb(sourceNode, result);
35060
+
35061
+ var existsLink;
35062
+ do {
35063
+ existsLink = false;
35064
+ forEachNode(processSingleNode);
35065
+ }
35066
+ while (existsLink);
35067
+
35068
+ function processSingleNode(node) {
35069
+ if (!isNodeAbsorded(node, result) && isLinked(node, result)) {
35070
+ absorb(node, result);
35071
+ existsLink = true;
35072
+ }
35073
+ }
35074
+
35075
+ return result;
35076
+ };
35077
+
35078
+ function isNodeAbsorded(node, result) {
35079
+ return zrUtil.indexOf(result.nodes, node) >= 0;
35080
+ }
35081
+
35082
+ function isLinked(node, result) {
35083
+ var hasLink = false;
35084
+ forEachEdgeType(function (edgeType) {
35085
+ zrUtil.each(edgeIdGetter(node, edgeType) || [], function (edgeId) {
35086
+ result.records[edgeType.name][edgeId] && (hasLink = true);
35087
+ });
35088
+ });
35089
+ return hasLink;
35090
+ }
35091
+
35092
+ function absorb(node, result) {
35093
+ result.nodes.push(node);
35094
+ forEachEdgeType(function (edgeType) {
35095
+ zrUtil.each(edgeIdGetter(node, edgeType) || [], function (edgeId) {
35096
+ result.records[edgeType.name][edgeId] = true;
35097
+ });
35098
+ });
35099
+ }
35100
+ };
35101
+
35102
+ module.exports = helper;
35103
+
35104
+
35105
+ /***/ },
35106
+ /* 320 */
35107
+ /***/ function(module, exports, __webpack_require__) {
35108
+
34785
35109
  /**
34786
35110
  * @file Axis operator
34787
35111
  */
@@ -34888,10 +35212,16 @@ return /******/ (function(modules) { // webpackBootstrap
34888
35212
  */
34889
35213
  getTargetSeriesModels: function () {
34890
35214
  var seriesModels = [];
35215
+ var ecModel = this.ecModel;
34891
35216
 
34892
- this.ecModel.eachSeries(function (seriesModel) {
34893
- // Legacy problem: some one wrote xAxisIndex as [0] following the wrong way in example.
34894
- if (this._axisIndex === +seriesModel.get(this._dimName + 'AxisIndex')) {
35217
+ 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)) {
34895
35225
  seriesModels.push(seriesModel);
34896
35226
  }
34897
35227
  }, this);
@@ -35142,7 +35472,7 @@ return /******/ (function(modules) { // webpackBootstrap
35142
35472
 
35143
35473
 
35144
35474
  /***/ },
35145
- /* 320 */
35475
+ /* 321 */
35146
35476
  /***/ function(module, exports, __webpack_require__) {
35147
35477
 
35148
35478
 
@@ -35188,17 +35518,22 @@ return /******/ (function(modules) { // webpackBootstrap
35188
35518
  var axisModel = ecModel.getComponent(dimNames.axis, axisIndex);
35189
35519
  if (axisModel) {
35190
35520
  axisModels.push(axisModel);
35191
-
35192
- var gridIndex = axisModel.get('gridIndex');
35193
- var polarIndex = axisModel.get('polarIndex');
35194
-
35195
- if (gridIndex != null) {
35196
- var coordModel = ecModel.getComponent('grid', gridIndex);
35197
- save(coordModel, axisModel, cartesians, gridIndex);
35521
+ var coordSysName;
35522
+ if (dimNames.axis === 'xAxis' || dimNames.axis === 'yAxis') {
35523
+ coordSysName = 'grid';
35524
+ }
35525
+ else {
35526
+ // Polar
35527
+ coordSysName = 'polar';
35198
35528
  }
35199
- else if (polarIndex != null) {
35200
- var coordModel = ecModel.getComponent('polar', polarIndex);
35201
- save(coordModel, axisModel, polars, polarIndex);
35529
+ var coordModel = ecModel.queryComponents({
35530
+ mainType: coordSysName,
35531
+ index: axisModel.get(coordSysName + 'Index'),
35532
+ id: axisModel.get(coordSysName + 'Id')
35533
+ })[0];
35534
+
35535
+ if (coordModel != null) {
35536
+ save(coordModel, axisModel, coordSysName === 'grid' ? cartesians : polars, coordModel.componentIndex);
35202
35537
  }
35203
35538
  }
35204
35539
  }, this);
@@ -35231,7 +35566,7 @@ return /******/ (function(modules) { // webpackBootstrap
35231
35566
 
35232
35567
 
35233
35568
  /***/ },
35234
- /* 321 */
35569
+ /* 322 */
35235
35570
  /***/ function(module, exports, __webpack_require__) {
35236
35571
 
35237
35572
  /**
@@ -35310,7 +35645,7 @@ return /******/ (function(modules) { // webpackBootstrap
35310
35645
 
35311
35646
 
35312
35647
  /***/ },
35313
- /* 322 */
35648
+ /* 323 */
35314
35649
  /***/ function(module, exports, __webpack_require__) {
35315
35650
 
35316
35651
 
@@ -35318,12 +35653,12 @@ return /******/ (function(modules) { // webpackBootstrap
35318
35653
  var zrUtil = __webpack_require__(4);
35319
35654
  var graphic = __webpack_require__(43);
35320
35655
  var throttle = __webpack_require__(308);
35321
- var DataZoomView = __webpack_require__(320);
35656
+ var DataZoomView = __webpack_require__(321);
35322
35657
  var Rect = graphic.Rect;
35323
35658
  var numberUtil = __webpack_require__(7);
35324
35659
  var linearMap = numberUtil.linearMap;
35325
35660
  var layout = __webpack_require__(21);
35326
- var sliderMove = __webpack_require__(323);
35661
+ var sliderMove = __webpack_require__(324);
35327
35662
  var asc = numberUtil.asc;
35328
35663
  var bind = zrUtil.bind;
35329
35664
  // var mathMax = Math.max;
@@ -36049,7 +36384,7 @@ return /******/ (function(modules) { // webpackBootstrap
36049
36384
 
36050
36385
 
36051
36386
  /***/ },
36052
- /* 323 */
36387
+ /* 324 */
36053
36388
  /***/ function(module, exports) {
36054
36389
 
36055
36390
 
@@ -36108,7 +36443,7 @@ return /******/ (function(modules) { // webpackBootstrap
36108
36443
 
36109
36444
 
36110
36445
  /***/ },
36111
- /* 324 */
36446
+ /* 325 */
36112
36447
  /***/ function(module, exports, __webpack_require__) {
36113
36448
 
36114
36449
  /**
@@ -36130,15 +36465,15 @@ return /******/ (function(modules) { // webpackBootstrap
36130
36465
 
36131
36466
 
36132
36467
  /***/ },
36133
- /* 325 */
36468
+ /* 326 */
36134
36469
  /***/ function(module, exports, __webpack_require__) {
36135
36470
 
36136
36471
 
36137
36472
 
36138
- var DataZoomView = __webpack_require__(320);
36473
+ var DataZoomView = __webpack_require__(321);
36139
36474
  var zrUtil = __webpack_require__(4);
36140
- var sliderMove = __webpack_require__(323);
36141
- var roams = __webpack_require__(326);
36475
+ var sliderMove = __webpack_require__(324);
36476
+ var roams = __webpack_require__(327);
36142
36477
  var bind = zrUtil.bind;
36143
36478
 
36144
36479
  var InsideZoomView = DataZoomView.extend({
@@ -36321,7 +36656,7 @@ return /******/ (function(modules) { // webpackBootstrap
36321
36656
 
36322
36657
 
36323
36658
  /***/ },
36324
- /* 326 */
36659
+ /* 327 */
36325
36660
  /***/ function(module, exports, __webpack_require__) {
36326
36661
 
36327
36662
  /**
@@ -36518,7 +36853,7 @@ return /******/ (function(modules) { // webpackBootstrap
36518
36853
 
36519
36854
 
36520
36855
  /***/ },
36521
- /* 327 */
36856
+ /* 328 */
36522
36857
  /***/ function(module, exports, __webpack_require__) {
36523
36858
 
36524
36859
  /**
@@ -36581,7 +36916,7 @@ return /******/ (function(modules) { // webpackBootstrap
36581
36916
 
36582
36917
 
36583
36918
  /***/ },
36584
- /* 328 */
36919
+ /* 329 */
36585
36920
  /***/ function(module, exports, __webpack_require__) {
36586
36921
 
36587
36922
  /**
@@ -36590,15 +36925,15 @@ return /******/ (function(modules) { // webpackBootstrap
36590
36925
 
36591
36926
 
36592
36927
  var zrUtil = __webpack_require__(4);
36593
- var modelUtil = __webpack_require__(5);
36928
+ var helper = __webpack_require__(319);
36594
36929
  var echarts = __webpack_require__(1);
36595
36930
 
36596
36931
 
36597
36932
  echarts.registerAction('dataZoom', function (payload, ecModel) {
36598
36933
 
36599
- var linkedNodesFinder = modelUtil.createLinkedNodesFinder(
36934
+ var linkedNodesFinder = helper.createLinkedNodesFinder(
36600
36935
  zrUtil.bind(ecModel.eachComponent, ecModel, 'dataZoom'),
36601
- modelUtil.eachAxisDim,
36936
+ helper.eachAxisDim,
36602
36937
  function (model, dimNames) {
36603
36938
  return model.get(dimNames.axisIndex);
36604
36939
  }
@@ -36629,7 +36964,6 @@ return /******/ (function(modules) { // webpackBootstrap
36629
36964
 
36630
36965
 
36631
36966
  /***/ },
36632
- /* 329 */,
36633
36967
  /* 330 */,
36634
36968
  /* 331 */,
36635
36969
  /* 332 */,
@@ -36644,14 +36978,15 @@ return /******/ (function(modules) { // webpackBootstrap
36644
36978
  /* 341 */,
36645
36979
  /* 342 */,
36646
36980
  /* 343 */,
36647
- /* 344 */
36981
+ /* 344 */,
36982
+ /* 345 */
36648
36983
  /***/ function(module, exports, __webpack_require__) {
36649
36984
 
36650
36985
  // HINT Markpoint can't be used too much
36651
36986
 
36652
36987
 
36653
- __webpack_require__(345);
36654
- __webpack_require__(347);
36988
+ __webpack_require__(346);
36989
+ __webpack_require__(348);
36655
36990
 
36656
36991
  __webpack_require__(1).registerPreprocessor(function (opt) {
36657
36992
  // Make sure markPoint component is enabled
@@ -36660,12 +36995,12 @@ return /******/ (function(modules) { // webpackBootstrap
36660
36995
 
36661
36996
 
36662
36997
  /***/ },
36663
- /* 345 */
36998
+ /* 346 */
36664
36999
  /***/ function(module, exports, __webpack_require__) {
36665
37000
 
36666
37001
 
36667
37002
 
36668
- module.exports = __webpack_require__(346).extend({
37003
+ module.exports = __webpack_require__(347).extend({
36669
37004
 
36670
37005
  type: 'markPoint',
36671
37006
 
@@ -36698,7 +37033,7 @@ return /******/ (function(modules) { // webpackBootstrap
36698
37033
 
36699
37034
 
36700
37035
  /***/ },
36701
- /* 346 */
37036
+ /* 347 */
36702
37037
  /***/ function(module, exports, __webpack_require__) {
36703
37038
 
36704
37039
 
@@ -36833,7 +37168,7 @@ return /******/ (function(modules) { // webpackBootstrap
36833
37168
 
36834
37169
 
36835
37170
  /***/ },
36836
- /* 347 */
37171
+ /* 348 */
36837
37172
  /***/ function(module, exports, __webpack_require__) {
36838
37173
 
36839
37174
 
@@ -36844,7 +37179,7 @@ return /******/ (function(modules) { // webpackBootstrap
36844
37179
 
36845
37180
  var List = __webpack_require__(97);
36846
37181
 
36847
- var markerHelper = __webpack_require__(348);
37182
+ var markerHelper = __webpack_require__(349);
36848
37183
 
36849
37184
  function updateMarkerLayout(mpData, seriesModel, api) {
36850
37185
  var coordSys = seriesModel.coordinateSystem;
@@ -36882,7 +37217,7 @@ return /******/ (function(modules) { // webpackBootstrap
36882
37217
  });
36883
37218
  }
36884
37219
 
36885
- __webpack_require__(349).extend({
37220
+ __webpack_require__(350).extend({
36886
37221
 
36887
37222
  type: 'markPoint',
36888
37223
 
@@ -36994,7 +37329,7 @@ return /******/ (function(modules) { // webpackBootstrap
36994
37329
 
36995
37330
 
36996
37331
  /***/ },
36997
- /* 348 */
37332
+ /* 349 */
36998
37333
  /***/ function(module, exports, __webpack_require__) {
36999
37334
 
37000
37335
 
@@ -37198,7 +37533,7 @@ return /******/ (function(modules) { // webpackBootstrap
37198
37533
 
37199
37534
 
37200
37535
  /***/ },
37201
- /* 349 */
37536
+ /* 350 */
37202
37537
  /***/ function(module, exports, __webpack_require__) {
37203
37538
 
37204
37539
 
@@ -37240,13 +37575,13 @@ return /******/ (function(modules) { // webpackBootstrap
37240
37575
 
37241
37576
 
37242
37577
  /***/ },
37243
- /* 350 */
37578
+ /* 351 */
37244
37579
  /***/ function(module, exports, __webpack_require__) {
37245
37580
 
37246
37581
 
37247
37582
 
37248
- __webpack_require__(351);
37249
37583
  __webpack_require__(352);
37584
+ __webpack_require__(353);
37250
37585
 
37251
37586
  __webpack_require__(1).registerPreprocessor(function (opt) {
37252
37587
  // Make sure markLine component is enabled
@@ -37255,12 +37590,12 @@ return /******/ (function(modules) { // webpackBootstrap
37255
37590
 
37256
37591
 
37257
37592
  /***/ },
37258
- /* 351 */
37593
+ /* 352 */
37259
37594
  /***/ function(module, exports, __webpack_require__) {
37260
37595
 
37261
37596
 
37262
37597
 
37263
- module.exports = __webpack_require__(346).extend({
37598
+ module.exports = __webpack_require__(347).extend({
37264
37599
 
37265
37600
  type: 'markLine',
37266
37601
 
@@ -37300,7 +37635,7 @@ return /******/ (function(modules) { // webpackBootstrap
37300
37635
 
37301
37636
 
37302
37637
  /***/ },
37303
- /* 352 */
37638
+ /* 353 */
37304
37639
  /***/ function(module, exports, __webpack_require__) {
37305
37640
 
37306
37641
 
@@ -37309,7 +37644,7 @@ return /******/ (function(modules) { // webpackBootstrap
37309
37644
  var List = __webpack_require__(97);
37310
37645
  var numberUtil = __webpack_require__(7);
37311
37646
 
37312
- var markerHelper = __webpack_require__(348);
37647
+ var markerHelper = __webpack_require__(349);
37313
37648
 
37314
37649
  var LineDraw = __webpack_require__(199);
37315
37650
 
@@ -37481,7 +37816,7 @@ return /******/ (function(modules) { // webpackBootstrap
37481
37816
  data.setItemLayout(idx, point);
37482
37817
  }
37483
37818
 
37484
- __webpack_require__(349).extend({
37819
+ __webpack_require__(350).extend({
37485
37820
 
37486
37821
  type: 'markLine',
37487
37822
 
@@ -37660,13 +37995,13 @@ return /******/ (function(modules) { // webpackBootstrap
37660
37995
 
37661
37996
 
37662
37997
  /***/ },
37663
- /* 353 */
37998
+ /* 354 */
37664
37999
  /***/ function(module, exports, __webpack_require__) {
37665
38000
 
37666
38001
 
37667
38002
 
37668
- __webpack_require__(354);
37669
38003
  __webpack_require__(355);
38004
+ __webpack_require__(356);
37670
38005
 
37671
38006
  __webpack_require__(1).registerPreprocessor(function (opt) {
37672
38007
  // Make sure markArea component is enabled
@@ -37675,12 +38010,12 @@ return /******/ (function(modules) { // webpackBootstrap
37675
38010
 
37676
38011
 
37677
38012
  /***/ },
37678
- /* 354 */
38013
+ /* 355 */
37679
38014
  /***/ function(module, exports, __webpack_require__) {
37680
38015
 
37681
38016
 
37682
38017
 
37683
- module.exports = __webpack_require__(346).extend({
38018
+ module.exports = __webpack_require__(347).extend({
37684
38019
 
37685
38020
  type: 'markArea',
37686
38021
 
@@ -37716,7 +38051,7 @@ return /******/ (function(modules) { // webpackBootstrap
37716
38051
 
37717
38052
 
37718
38053
  /***/ },
37719
- /* 355 */
38054
+ /* 356 */
37720
38055
  /***/ function(module, exports, __webpack_require__) {
37721
38056
 
37722
38057
  // TODO Better on polar
@@ -37728,7 +38063,7 @@ return /******/ (function(modules) { // webpackBootstrap
37728
38063
  var graphic = __webpack_require__(43);
37729
38064
  var colorUtil = __webpack_require__(39);
37730
38065
 
37731
- var markerHelper = __webpack_require__(348);
38066
+ var markerHelper = __webpack_require__(349);
37732
38067
 
37733
38068
  var markAreaTransform = function (seriesModel, coordSys, maModel, item) {
37734
38069
  var lt = markerHelper.dataTransform(seriesModel, item[0]);
@@ -37848,7 +38183,7 @@ return /******/ (function(modules) { // webpackBootstrap
37848
38183
 
37849
38184
  var dimPermutations = [['x0', 'y0'], ['x1', 'y0'], ['x1', 'y1'], ['x0', 'y1']];
37850
38185
 
37851
- __webpack_require__(349).extend({
38186
+ __webpack_require__(350).extend({
37852
38187
 
37853
38188
  type: 'markArea',
37854
38189
 
@@ -38027,7 +38362,6 @@ return /******/ (function(modules) { // webpackBootstrap
38027
38362
 
38028
38363
 
38029
38364
  /***/ },
38030
- /* 356 */,
38031
38365
  /* 357 */,
38032
38366
  /* 358 */,
38033
38367
  /* 359 */,
@@ -38036,23 +38370,24 @@ return /******/ (function(modules) { // webpackBootstrap
38036
38370
  /* 362 */,
38037
38371
  /* 363 */,
38038
38372
  /* 364 */,
38039
- /* 365 */
38373
+ /* 365 */,
38374
+ /* 366 */
38040
38375
  /***/ function(module, exports, __webpack_require__) {
38041
38376
 
38042
38377
 
38043
38378
 
38044
- __webpack_require__(366);
38045
38379
  __webpack_require__(367);
38380
+ __webpack_require__(368);
38046
38381
 
38047
- __webpack_require__(369);
38048
38382
  __webpack_require__(370);
38049
38383
  __webpack_require__(371);
38050
38384
  __webpack_require__(372);
38051
- __webpack_require__(377);
38385
+ __webpack_require__(373);
38386
+ __webpack_require__(378);
38052
38387
 
38053
38388
 
38054
38389
  /***/ },
38055
- /* 366 */
38390
+ /* 367 */
38056
38391
  /***/ function(module, exports, __webpack_require__) {
38057
38392
 
38058
38393
 
@@ -38128,7 +38463,7 @@ return /******/ (function(modules) { // webpackBootstrap
38128
38463
 
38129
38464
 
38130
38465
  /***/ },
38131
- /* 367 */
38466
+ /* 368 */
38132
38467
  /***/ function(module, exports, __webpack_require__) {
38133
38468
 
38134
38469
  /* WEBPACK VAR INJECTION */(function(process) {
@@ -38378,10 +38713,10 @@ return /******/ (function(modules) { // webpackBootstrap
38378
38713
  }
38379
38714
 
38380
38715
 
38381
- /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(368)))
38716
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(369)))
38382
38717
 
38383
38718
  /***/ },
38384
- /* 368 */
38719
+ /* 369 */
38385
38720
  /***/ function(module, exports) {
38386
38721
 
38387
38722
  // shim for using process in browser
@@ -38506,7 +38841,7 @@ return /******/ (function(modules) { // webpackBootstrap
38506
38841
 
38507
38842
 
38508
38843
  /***/ },
38509
- /* 369 */
38844
+ /* 370 */
38510
38845
  /***/ function(module, exports, __webpack_require__) {
38511
38846
 
38512
38847
 
@@ -38578,7 +38913,7 @@ return /******/ (function(modules) { // webpackBootstrap
38578
38913
 
38579
38914
 
38580
38915
  /***/ },
38581
- /* 370 */
38916
+ /* 371 */
38582
38917
  /***/ function(module, exports, __webpack_require__) {
38583
38918
 
38584
38919
  'use strict';
@@ -38701,13 +39036,19 @@ return /******/ (function(modules) { // webpackBootstrap
38701
39036
  var categoryAxis = coordSys.getAxesByScale('ordinal')[0];
38702
39037
  if (categoryAxis) {
38703
39038
  var axisDim = categoryAxis.dim;
38704
- var axisIndex = seriesModel.get(axisDim + 'AxisIndex');
38705
- var axisKey = axisDim + 'Axis';
38706
- newOption[axisKey] = newOption[axisKey] || [];
39039
+ var axisType = axisDim + 'Axis';
39040
+ var axisModel = ecModel.queryComponents({
39041
+ mainType: axisType,
39042
+ index: seriesModel.get(name + 'Index'),
39043
+ id: seriesModel.get(name + 'Id')
39044
+ })[0];
39045
+ var axisIndex = axisModel.componentIndex;
39046
+
39047
+ newOption[axisType] = newOption[axisType] || [];
38707
39048
  for (var i = 0; i <= axisIndex; i++) {
38708
- newOption[axisKey][axisIndex] = newOption[axisKey][axisIndex] || {};
39049
+ newOption[axisType][axisIndex] = newOption[axisType][axisIndex] || {};
38709
39050
  }
38710
- newOption[axisKey][axisIndex].boundaryGap = type === 'bar' ? true : false;
39051
+ newOption[axisType][axisIndex].boundaryGap = type === 'bar' ? true : false;
38711
39052
  }
38712
39053
  }
38713
39054
  };
@@ -38752,7 +39093,7 @@ return /******/ (function(modules) { // webpackBootstrap
38752
39093
 
38753
39094
 
38754
39095
  /***/ },
38755
- /* 371 */
39096
+ /* 372 */
38756
39097
  /***/ function(module, exports, __webpack_require__) {
38757
39098
 
38758
39099
  /**
@@ -39235,7 +39576,7 @@ return /******/ (function(modules) { // webpackBootstrap
39235
39576
 
39236
39577
 
39237
39578
  /***/ },
39238
- /* 372 */
39579
+ /* 373 */
39239
39580
  /***/ function(module, exports, __webpack_require__) {
39240
39581
 
39241
39582
  'use strict';
@@ -39244,12 +39585,12 @@ return /******/ (function(modules) { // webpackBootstrap
39244
39585
  var zrUtil = __webpack_require__(4);
39245
39586
  var BrushController = __webpack_require__(233);
39246
39587
  var brushHelper = __webpack_require__(309);
39247
- var history = __webpack_require__(373);
39588
+ var history = __webpack_require__(374);
39248
39589
 
39249
39590
  var each = zrUtil.each;
39250
39591
 
39251
39592
  // Use dataZoomSelect
39252
- __webpack_require__(374);
39593
+ __webpack_require__(375);
39253
39594
 
39254
39595
  // Spectial component id start with \0ec\0, see echarts/model/Global.js~hasInnerId
39255
39596
  var DATA_ZOOM_ID_BASE = '\0_ec_\0toolbox-dataZoom_';
@@ -39543,7 +39884,7 @@ return /******/ (function(modules) { // webpackBootstrap
39543
39884
 
39544
39885
 
39545
39886
  /***/ },
39546
- /* 373 */
39887
+ /* 374 */
39547
39888
  /***/ function(module, exports, __webpack_require__) {
39548
39889
 
39549
39890
  /**
@@ -39657,7 +39998,7 @@ return /******/ (function(modules) { // webpackBootstrap
39657
39998
 
39658
39999
 
39659
40000
  /***/ },
39660
- /* 374 */
40001
+ /* 375 */
39661
40002
  /***/ function(module, exports, __webpack_require__) {
39662
40003
 
39663
40004
  /**
@@ -39668,18 +40009,18 @@ return /******/ (function(modules) { // webpackBootstrap
39668
40009
  __webpack_require__(317);
39669
40010
 
39670
40011
  __webpack_require__(318);
39671
- __webpack_require__(320);
40012
+ __webpack_require__(321);
39672
40013
 
39673
- __webpack_require__(375);
39674
40014
  __webpack_require__(376);
40015
+ __webpack_require__(377);
39675
40016
 
39676
- __webpack_require__(327);
39677
40017
  __webpack_require__(328);
40018
+ __webpack_require__(329);
39678
40019
 
39679
40020
 
39680
40021
 
39681
40022
  /***/ },
39682
- /* 375 */
40023
+ /* 376 */
39683
40024
  /***/ function(module, exports, __webpack_require__) {
39684
40025
 
39685
40026
  /**
@@ -39698,12 +40039,12 @@ return /******/ (function(modules) { // webpackBootstrap
39698
40039
 
39699
40040
 
39700
40041
  /***/ },
39701
- /* 376 */
40042
+ /* 377 */
39702
40043
  /***/ function(module, exports, __webpack_require__) {
39703
40044
 
39704
40045
 
39705
40046
 
39706
- module.exports = __webpack_require__(320).extend({
40047
+ module.exports = __webpack_require__(321).extend({
39707
40048
 
39708
40049
  type: 'dataZoom.select'
39709
40050
 
@@ -39712,13 +40053,13 @@ return /******/ (function(modules) { // webpackBootstrap
39712
40053
 
39713
40054
 
39714
40055
  /***/ },
39715
- /* 377 */
40056
+ /* 378 */
39716
40057
  /***/ function(module, exports, __webpack_require__) {
39717
40058
 
39718
40059
  'use strict';
39719
40060
 
39720
40061
 
39721
- var history = __webpack_require__(373);
40062
+ var history = __webpack_require__(374);
39722
40063
 
39723
40064
  function Restore(model) {
39724
40065
  this.model = model;
@@ -39756,16 +40097,16 @@ return /******/ (function(modules) { // webpackBootstrap
39756
40097
 
39757
40098
 
39758
40099
  /***/ },
39759
- /* 378 */
40100
+ /* 379 */
39760
40101
  /***/ function(module, exports, __webpack_require__) {
39761
40102
 
39762
40103
 
39763
- __webpack_require__(379);
39764
- __webpack_require__(81).registerPainter('vml', __webpack_require__(381));
40104
+ __webpack_require__(380);
40105
+ __webpack_require__(81).registerPainter('vml', __webpack_require__(382));
39765
40106
 
39766
40107
 
39767
40108
  /***/ },
39768
- /* 379 */
40109
+ /* 380 */
39769
40110
  /***/ function(module, exports, __webpack_require__) {
39770
40111
 
39771
40112
  // http://www.w3.org/TR/NOTE-VML
@@ -39786,7 +40127,7 @@ return /******/ (function(modules) { // webpackBootstrap
39786
40127
 
39787
40128
  var Gradient = __webpack_require__(61);
39788
40129
 
39789
- var vmlCore = __webpack_require__(380);
40130
+ var vmlCore = __webpack_require__(381);
39790
40131
 
39791
40132
  var round = Math.round;
39792
40133
  var sqrt = Math.sqrt;
@@ -40823,7 +41164,7 @@ return /******/ (function(modules) { // webpackBootstrap
40823
41164
 
40824
41165
 
40825
41166
  /***/ },
40826
- /* 380 */
41167
+ /* 381 */
40827
41168
  /***/ function(module, exports, __webpack_require__) {
40828
41169
 
40829
41170
 
@@ -40876,7 +41217,7 @@ return /******/ (function(modules) { // webpackBootstrap
40876
41217
 
40877
41218
 
40878
41219
  /***/ },
40879
- /* 381 */
41220
+ /* 382 */
40880
41221
  /***/ function(module, exports, __webpack_require__) {
40881
41222
 
40882
41223
  /**
@@ -40888,7 +41229,7 @@ return /******/ (function(modules) { // webpackBootstrap
40888
41229
 
40889
41230
 
40890
41231
  var zrLog = __webpack_require__(40);
40891
- var vmlCore = __webpack_require__(380);
41232
+ var vmlCore = __webpack_require__(381);
40892
41233
 
40893
41234
  function parseInt10(val) {
40894
41235
  return parseInt(val, 10);