echarts 4.5.0 → 4.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/dist/echarts-en.common.js +1790 -774
  2. package/dist/echarts-en.common.min.js +1 -1
  3. package/dist/echarts-en.js +2029 -849
  4. package/dist/echarts-en.js.map +1 -1
  5. package/dist/echarts-en.min.js +1 -1
  6. package/dist/echarts-en.simple.js +1676 -691
  7. package/dist/echarts-en.simple.min.js +1 -1
  8. package/dist/echarts.common.js +1790 -774
  9. package/dist/echarts.common.min.js +1 -1
  10. package/dist/echarts.js +2029 -849
  11. package/dist/echarts.js.map +1 -1
  12. package/dist/echarts.min.js +1 -1
  13. package/dist/echarts.simple.js +1676 -691
  14. package/dist/echarts.simple.min.js +1 -1
  15. package/lib/chart/bar/BarView.js +11 -1
  16. package/lib/chart/bar/BaseBarSeries.js +3 -1
  17. package/lib/chart/effectScatter/EffectScatterSeries.js +3 -1
  18. package/lib/chart/funnel/FunnelSeries.js +15 -5
  19. package/lib/chart/gauge/GaugeSeries.js +0 -2
  20. package/lib/chart/graph/GraphSeries.js +9 -4
  21. package/lib/chart/graph/GraphView.js +28 -8
  22. package/lib/chart/heatmap/HeatmapView.js +4 -4
  23. package/lib/chart/helper/createListFromArray.js +14 -8
  24. package/lib/chart/helper/whiskerBoxCommon.js +22 -16
  25. package/lib/chart/line/LineSeries.js +3 -1
  26. package/lib/chart/line/LineView.js +8 -2
  27. package/lib/chart/map/MapSeries.js +8 -1
  28. package/lib/chart/pie/PieSeries.js +27 -6
  29. package/lib/chart/pie/PieView.js +1 -1
  30. package/lib/chart/pie/labelLayout.js +102 -19
  31. package/lib/chart/pie/pieLayout.js +19 -7
  32. package/lib/chart/radar/RadarSeries.js +3 -3
  33. package/lib/chart/sankey/SankeyView.js +28 -9
  34. package/lib/chart/scatter/ScatterSeries.js +3 -1
  35. package/lib/chart/themeRiver/ThemeRiverSeries.js +3 -3
  36. package/lib/chart/tree/TreeSeries.js +15 -1
  37. package/lib/component/axis/AngleAxisView.js +64 -7
  38. package/lib/component/axis/AxisBuilder.js +63 -24
  39. package/lib/component/axis/CartesianAxisView.js +55 -11
  40. package/lib/component/axis/RadiusAxisView.js +36 -4
  41. package/lib/component/dataZoom/SliderZoomView.js +4 -10
  42. package/lib/component/helper/BrushController.js +33 -43
  43. package/lib/component/legend/LegendModel.js +3 -3
  44. package/lib/component/legend/LegendView.js +17 -13
  45. package/lib/component/toolbox/ToolboxView.js +5 -1
  46. package/lib/component/toolbox/feature/MagicType.js +19 -14
  47. package/lib/coord/Axis.js +30 -2
  48. package/lib/coord/axisDefault.js +21 -2
  49. package/lib/data/DataDimensionInfo.js +157 -0
  50. package/lib/data/List.js +25 -19
  51. package/lib/data/Tree.js +2 -1
  52. package/lib/data/helper/completeDimensions.js +43 -32
  53. package/lib/data/helper/createDimensions.js +2 -0
  54. package/lib/data/helper/sourceHelper.js +214 -114
  55. package/lib/echarts.js +2 -2
  56. package/lib/layout/barGrid.js +2 -3
  57. package/lib/model/Series.js +3 -3
  58. package/lib/model/referHelper.js +40 -12
  59. package/lib/scale/Interval.js +87 -2
  60. package/lib/scale/Log.js +9 -2
  61. package/lib/scale/helper.js +1 -43
  62. package/lib/theme/dark.js +3 -0
  63. package/lib/util/graphic.js +1 -2
  64. package/lib/visual/LegendVisualProvider.js +75 -0
  65. package/lib/visual/dataColor.js +2 -12
  66. package/lib/visual/seriesColor.js +15 -7
  67. package/map/json/province/tianjin.json +1 -1
  68. package/package.json +3 -2
  69. package/src/chart/bar/BarView.js +12 -2
  70. package/src/chart/bar/BaseBarSeries.js +1 -1
  71. package/src/chart/effectScatter/EffectScatterSeries.js +1 -1
  72. package/src/chart/funnel/FunnelSeries.js +11 -4
  73. package/src/chart/gauge/GaugeSeries.js +0 -1
  74. package/src/chart/graph/GraphSeries.js +8 -3
  75. package/src/chart/graph/GraphView.js +26 -8
  76. package/src/chart/heatmap/HeatmapView.js +4 -4
  77. package/src/chart/helper/createListFromArray.js +13 -8
  78. package/src/chart/helper/whiskerBoxCommon.js +21 -16
  79. package/src/chart/line/LineSeries.js +1 -1
  80. package/src/chart/line/LineView.js +6 -1
  81. package/src/chart/map/MapSeries.js +5 -1
  82. package/src/chart/pie/PieSeries.js +26 -5
  83. package/src/chart/pie/PieView.js +1 -1
  84. package/src/chart/pie/labelLayout.js +114 -22
  85. package/src/chart/pie/pieLayout.js +20 -7
  86. package/src/chart/radar/RadarSeries.js +5 -3
  87. package/src/chart/sankey/SankeyView.js +26 -9
  88. package/src/chart/scatter/ScatterSeries.js +1 -1
  89. package/src/chart/themeRiver/ThemeRiverSeries.js +4 -3
  90. package/src/chart/tree/TreeSeries.js +12 -1
  91. package/src/component/axis/AngleAxisView.js +75 -7
  92. package/src/component/axis/AxisBuilder.js +78 -33
  93. package/src/component/axis/CartesianAxisView.js +58 -11
  94. package/src/component/axis/RadiusAxisView.js +37 -4
  95. package/src/component/dataZoom/SliderZoomView.js +4 -9
  96. package/src/component/helper/BrushController.js +40 -47
  97. package/src/component/legend/LegendModel.js +3 -3
  98. package/src/component/legend/LegendView.js +18 -12
  99. package/src/component/toolbox/ToolboxView.js +5 -0
  100. package/src/component/toolbox/feature/MagicType.js +18 -13
  101. package/src/coord/Axis.js +29 -2
  102. package/src/coord/axisDefault.js +25 -1
  103. package/src/data/DataDimensionInfo.js +135 -0
  104. package/src/data/List.js +29 -16
  105. package/src/data/Tree.js +3 -1
  106. package/src/data/helper/completeDimensions.js +49 -30
  107. package/src/data/helper/createDimensions.js +2 -0
  108. package/src/data/helper/sourceHelper.js +216 -124
  109. package/src/echarts.js +2 -2
  110. package/src/layout/barGrid.js +6 -3
  111. package/src/model/Series.js +3 -3
  112. package/src/model/referHelper.js +34 -11
  113. package/src/scale/Interval.js +84 -4
  114. package/src/scale/Log.js +9 -2
  115. package/src/scale/helper.js +1 -39
  116. package/src/theme/dark.js +3 -0
  117. package/src/util/graphic.js +1 -2
  118. package/src/visual/LegendVisualProvider.js +55 -0
  119. package/src/visual/dataColor.js +0 -13
  120. package/src/visual/seriesColor.js +13 -7
  121. package/theme/azul.js +163 -0
  122. package/theme/bee-inspired.js +178 -0
  123. package/theme/blue.js +178 -0
  124. package/theme/caravan.js +178 -0
  125. package/theme/carp.js +163 -0
  126. package/theme/cool.js +180 -0
  127. package/theme/dark-blue.js +168 -0
  128. package/theme/dark-bold.js +168 -0
  129. package/theme/dark-digerati.js +168 -0
  130. package/theme/dark-fresh-cut.js +168 -0
  131. package/theme/dark-mushroom.js +168 -0
  132. package/theme/dark.js +69 -62
  133. package/theme/eduardo.js +178 -0
  134. package/theme/forest.js +163 -0
  135. package/theme/fresh-cut.js +163 -0
  136. package/theme/fruit.js +178 -0
  137. package/theme/gray.js +220 -0
  138. package/theme/green.js +222 -0
  139. package/theme/helianthus.js +263 -0
  140. package/theme/infographic.js +72 -57
  141. package/theme/inspired.js +163 -0
  142. package/theme/jazz.js +163 -0
  143. package/theme/london.js +163 -0
  144. package/theme/macarons.js +80 -57
  145. package/theme/macarons2.js +251 -0
  146. package/theme/mint.js +155 -0
  147. package/theme/red-velvet.js +163 -0
  148. package/theme/red.js +225 -0
  149. package/theme/roma.js +55 -22
  150. package/theme/royal.js +163 -0
  151. package/theme/sakura.js +140 -0
  152. package/theme/shine.js +52 -45
  153. package/theme/tech-blue.js +180 -0
  154. package/theme/vintage.js +37 -23
@@ -27,10 +27,6 @@ var _model = require("../../util/model");
27
27
  var makeInner = _model.makeInner;
28
28
  var getDataItemValue = _model.getDataItemValue;
29
29
 
30
- var _referHelper = require("../../model/referHelper");
31
-
32
- var getCoordSysDefineBySeries = _referHelper.getCoordSysDefineBySeries;
33
-
34
30
  var _util = require("zrender/lib/core/util");
35
31
 
36
32
  var createHashMap = _util.createHashMap;
@@ -74,6 +70,15 @@ var SERIES_LAYOUT_BY_ROW = _sourceType.SERIES_LAYOUT_BY_ROW;
74
70
  * specific language governing permissions and limitations
75
71
  * under the License.
76
72
  */
73
+ // The result of `guessOrdinal`.
74
+ var BE_ORDINAL = {
75
+ Must: 1,
76
+ // Encounter string but not '-' and not number-like.
77
+ Might: 2,
78
+ // Encounter string but number-like.
79
+ Not: 3 // Other cases
80
+
81
+ };
77
82
  var inner = makeInner();
78
83
  /**
79
84
  * @see {module:echarts/data/Source}
@@ -196,14 +201,7 @@ function prepareSource(seriesModel) {
196
201
  dimensionsDefine = dimensionsDefine || datasetOption.dimensions;
197
202
  }
198
203
 
199
- var completeResult = completeBySourceData(data, sourceFormat, seriesLayoutBy, sourceHeader, dimensionsDefine); // Note: dataset option does not have `encode`.
200
-
201
- var encodeDefine = seriesOption.encode;
202
-
203
- if (!encodeDefine && datasetModel) {
204
- encodeDefine = makeDefaultEncode(seriesModel, datasetModel, data, sourceFormat, seriesLayoutBy, completeResult);
205
- }
206
-
204
+ var completeResult = completeBySourceData(data, sourceFormat, seriesLayoutBy, sourceHeader, dimensionsDefine);
207
205
  inner(seriesModel).source = new Source({
208
206
  data: data,
209
207
  fromDataset: fromDataset,
@@ -212,7 +210,8 @@ function prepareSource(seriesModel) {
212
210
  dimensionsDefine: completeResult.dimensionsDefine,
213
211
  startIndex: completeResult.startIndex,
214
212
  dimensionsDetectCount: completeResult.dimensionsDetectCount,
215
- encodeDefine: encodeDefine
213
+ // Note: dataset option does not have `encode`.
214
+ encodeDefine: seriesOption.encode
216
215
  });
217
216
  } // return {startIndex, dimensionsDefine, dimensionsCount}
218
217
 
@@ -226,7 +225,6 @@ function completeBySourceData(data, sourceFormat, seriesLayoutBy, sourceHeader,
226
225
 
227
226
  var dimensionsDetectCount;
228
227
  var startIndex;
229
- var findPotentialName;
230
228
 
231
229
  if (sourceFormat === SOURCE_FORMAT_ARRAY_ROWS) {
232
230
  // Rule: Most of the first line are string: it is header.
@@ -260,12 +258,10 @@ function completeBySourceData(data, sourceFormat, seriesLayoutBy, sourceHeader,
260
258
  } else if (sourceFormat === SOURCE_FORMAT_OBJECT_ROWS) {
261
259
  if (!dimensionsDefine) {
262
260
  dimensionsDefine = objectRowsCollectDimensions(data);
263
- findPotentialName = true;
264
261
  }
265
262
  } else if (sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS) {
266
263
  if (!dimensionsDefine) {
267
264
  dimensionsDefine = [];
268
- findPotentialName = true;
269
265
  each(data, function (colArr, key) {
270
266
  dimensionsDefine.push(key);
271
267
  });
@@ -275,22 +271,10 @@ function completeBySourceData(data, sourceFormat, seriesLayoutBy, sourceHeader,
275
271
  dimensionsDetectCount = isArray(value0) && value0.length || 1;
276
272
  } else if (sourceFormat === SOURCE_FORMAT_TYPED_ARRAY) {}
277
273
 
278
- var potentialNameDimIndex;
279
-
280
- if (findPotentialName) {
281
- each(dimensionsDefine, function (dim, idx) {
282
- if ((isObject(dim) ? dim.name : dim) === 'name') {
283
- potentialNameDimIndex = idx;
284
- }
285
- });
286
- }
287
-
288
274
  return {
289
275
  startIndex: startIndex,
290
276
  dimensionsDefine: normalizeDimensionsDefine(dimensionsDefine),
291
- dimensionsDetectCount: dimensionsDetectCount,
292
- potentialNameDimIndex: potentialNameDimIndex // TODO: potentialIdDimIdx
293
-
277
+ dimensionsDetectCount: dimensionsDetectCount
294
278
  };
295
279
  } // Consider dimensions defined like ['A', 'price', 'B', 'price', 'C', 'price'],
296
280
  // which is reasonable. But dimension name is duplicated.
@@ -370,91 +354,191 @@ function objectRowsCollectDimensions(data) {
370
354
  });
371
355
  return dimensions;
372
356
  }
373
- } // ??? TODO merge to completedimensions, where also has
374
- // default encode making logic. And the default rule
375
- // should depends on series? consider 'map'.
357
+ }
358
+ /**
359
+ * [The strategy of the arrengment of data dimensions for dataset]:
360
+ * "value way": all axes are non-category axes. So series one by one take
361
+ * several (the number is coordSysDims.length) dimensions from dataset.
362
+ * The result of data arrengment of data dimensions like:
363
+ * | ser0_x | ser0_y | ser1_x | ser1_y | ser2_x | ser2_y |
364
+ * "category way": at least one axis is category axis. So the the first data
365
+ * dimension is always mapped to the first category axis and shared by
366
+ * all of the series. The other data dimensions are taken by series like
367
+ * "value way" does.
368
+ * The result of data arrengment of data dimensions like:
369
+ * | ser_shared_x | ser0_y | ser1_y | ser2_y |
370
+ *
371
+ * @param {Array.<Object|string>} coordDimensions [{name: <string>, type: <string>, dimsDef: <Array>}, ...]
372
+ * @param {module:model/Series} seriesModel
373
+ * @param {module:data/Source} source
374
+ * @return {Object} encode Never be `null/undefined`.
375
+ */
376
376
 
377
377
 
378
- function makeDefaultEncode(seriesModel, datasetModel, data, sourceFormat, seriesLayoutBy, completeResult) {
379
- var coordSysDefine = getCoordSysDefineBySeries(seriesModel);
380
- var encode = {}; // var encodeTooltip = [];
381
- // var encodeLabel = [];
378
+ function makeSeriesEncodeForAxisCoordSys(coordDimensions, seriesModel, source) {
379
+ var encode = {};
380
+ var datasetModel = getDatasetModel(seriesModel); // Currently only make default when using dataset, util more reqirements occur.
381
+
382
+ if (!datasetModel || !coordDimensions) {
383
+ return encode;
384
+ }
382
385
 
383
386
  var encodeItemName = [];
384
387
  var encodeSeriesName = [];
385
- var seriesType = seriesModel.subType; // ??? TODO refactor: provide by series itself.
386
- // Consider the case: 'map' series is based on geo coordSys,
387
- // 'graph', 'heatmap' can be based on cartesian. But can not
388
- // give default rule simply here.
389
-
390
- var nSeriesMap = createHashMap(['pie', 'map', 'funnel']);
391
- var cSeriesMap = createHashMap(['line', 'bar', 'pictorialBar', 'scatter', 'effectScatter', 'candlestick', 'boxplot']); // Usually in this case series will use the first data
392
- // dimension as the "value" dimension, or other default
393
- // processes respectively.
394
-
395
- if (coordSysDefine && cSeriesMap.get(seriesType) != null) {
396
- var ecModel = seriesModel.ecModel;
397
- var datasetMap = inner(ecModel).datasetMap;
398
- var key = datasetModel.uid + '_' + seriesLayoutBy;
399
- var datasetRecord = datasetMap.get(key) || datasetMap.set(key, {
400
- categoryWayDim: 1,
401
- valueWayDim: 0
402
- }); // TODO
403
- // Auto detect first time axis and do arrangement.
404
-
405
- each(coordSysDefine.coordSysDims, function (coordDim) {
406
- // In value way.
407
- if (coordSysDefine.firstCategoryDimIndex == null) {
408
- var dataDim = datasetRecord.valueWayDim++;
409
- encode[coordDim] = dataDim; // ??? TODO give a better default series name rule?
410
- // especially when encode x y specified.
411
- // consider: when mutiple series share one dimension
412
- // category axis, series name should better use
413
- // the other dimsion name. On the other hand, use
414
- // both dimensions name.
415
-
416
- encodeSeriesName.push(dataDim); // encodeTooltip.push(dataDim);
417
- // encodeLabel.push(dataDim);
418
- } // In category way, category axis.
419
- else if (coordSysDefine.categoryAxisMap.get(coordDim)) {
420
- encode[coordDim] = 0;
421
- encodeItemName.push(0);
422
- } // In category way, non-category axis.
423
- else {
424
- var dataDim = datasetRecord.categoryWayDim++;
425
- encode[coordDim] = dataDim; // encodeTooltip.push(dataDim);
426
- // encodeLabel.push(dataDim);
427
-
428
- encodeSeriesName.push(dataDim);
429
- }
388
+ var ecModel = seriesModel.ecModel;
389
+ var datasetMap = inner(ecModel).datasetMap;
390
+ var key = datasetModel.uid + '_' + source.seriesLayoutBy;
391
+ var baseCategoryDimIndex;
392
+ var categoryWayValueDimStart;
393
+ coordDimensions = coordDimensions.slice();
394
+ each(coordDimensions, function (coordDimInfo, coordDimIdx) {
395
+ !isObject(coordDimInfo) && (coordDimensions[coordDimIdx] = {
396
+ name: coordDimInfo
430
397
  });
431
- } // Do not make a complex rule! Hard to code maintain and not necessary.
432
- // ??? TODO refactor: provide by series itself.
433
- // [{name: ..., value: ...}, ...] like:
434
- else if (nSeriesMap.get(seriesType) != null) {
435
- // Find the first not ordinal. (5 is an experience value)
436
- var firstNotOrdinal;
437
-
438
- for (var i = 0; i < 5 && firstNotOrdinal == null; i++) {
439
- if (!doGuessOrdinal(data, sourceFormat, seriesLayoutBy, completeResult.dimensionsDefine, completeResult.startIndex, i)) {
440
- firstNotOrdinal = i;
398
+
399
+ if (coordDimInfo.type === 'ordinal' && baseCategoryDimIndex == null) {
400
+ baseCategoryDimIndex = coordDimIdx;
401
+ categoryWayValueDimStart = getDataDimCountOnCoordDim(coordDimensions[coordDimIdx]);
402
+ }
403
+
404
+ encode[coordDimInfo.name] = [];
405
+ });
406
+ var datasetRecord = datasetMap.get(key) || datasetMap.set(key, {
407
+ categoryWayDim: categoryWayValueDimStart,
408
+ valueWayDim: 0
409
+ }); // TODO
410
+ // Auto detect first time axis and do arrangement.
411
+
412
+ each(coordDimensions, function (coordDimInfo, coordDimIdx) {
413
+ var coordDimName = coordDimInfo.name;
414
+ var count = getDataDimCountOnCoordDim(coordDimInfo); // In value way.
415
+
416
+ if (baseCategoryDimIndex == null) {
417
+ var start = datasetRecord.valueWayDim;
418
+ pushDim(encode[coordDimName], start, count);
419
+ pushDim(encodeSeriesName, start, count);
420
+ datasetRecord.valueWayDim += count; // ??? TODO give a better default series name rule?
421
+ // especially when encode x y specified.
422
+ // consider: when mutiple series share one dimension
423
+ // category axis, series name should better use
424
+ // the other dimsion name. On the other hand, use
425
+ // both dimensions name.
426
+ } // In category way, the first category axis.
427
+ else if (baseCategoryDimIndex === coordDimIdx) {
428
+ pushDim(encode[coordDimName], 0, count);
429
+ pushDim(encodeItemName, 0, count);
430
+ } // In category way, the other axis.
431
+ else {
432
+ var start = datasetRecord.categoryWayDim;
433
+ pushDim(encode[coordDimName], start, count);
434
+ pushDim(encodeSeriesName, start, count);
435
+ datasetRecord.categoryWayDim += count;
441
436
  }
437
+ });
438
+
439
+ function pushDim(dimIdxArr, idxFrom, idxCount) {
440
+ for (var i = 0; i < idxCount; i++) {
441
+ dimIdxArr.push(idxFrom + i);
442
+ }
443
+ }
444
+
445
+ function getDataDimCountOnCoordDim(coordDimInfo) {
446
+ var dimsDef = coordDimInfo.dimsDef;
447
+ return dimsDef ? dimsDef.length : 1;
448
+ }
449
+
450
+ encodeItemName.length && (encode.itemName = encodeItemName);
451
+ encodeSeriesName.length && (encode.seriesName = encodeSeriesName);
452
+ return encode;
453
+ }
454
+ /**
455
+ * Work for data like [{name: ..., value: ...}, ...].
456
+ *
457
+ * @param {module:model/Series} seriesModel
458
+ * @param {module:data/Source} source
459
+ * @return {Object} encode Never be `null/undefined`.
460
+ */
461
+
462
+
463
+ function makeSeriesEncodeForNameBased(seriesModel, source, dimCount) {
464
+ var encode = {};
465
+ var datasetModel = getDatasetModel(seriesModel); // Currently only make default when using dataset, util more reqirements occur.
466
+
467
+ if (!datasetModel) {
468
+ return encode;
469
+ }
470
+
471
+ var sourceFormat = source.sourceFormat;
472
+ var dimensionsDefine = source.dimensionsDefine;
473
+ var potentialNameDimIndex;
474
+
475
+ if (sourceFormat === SOURCE_FORMAT_OBJECT_ROWS || sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS) {
476
+ each(dimensionsDefine, function (dim, idx) {
477
+ if ((isObject(dim) ? dim.name : dim) === 'name') {
478
+ potentialNameDimIndex = idx;
442
479
  }
480
+ });
481
+ } // idxResult: {v, n}.
482
+
483
+
484
+ var idxResult = function () {
485
+ var idxRes0 = {};
486
+ var idxRes1 = {};
487
+ var guessRecords = []; // 5 is an experience value.
443
488
 
444
- if (firstNotOrdinal != null) {
445
- encode.value = firstNotOrdinal;
446
- var nameDimIndex = completeResult.potentialNameDimIndex || Math.max(firstNotOrdinal - 1, 0); // By default, label use itemName in charts.
447
- // So we dont set encodeLabel here.
489
+ for (var i = 0, len = Math.min(5, dimCount); i < len; i++) {
490
+ var guessResult = doGuessOrdinal(source.data, sourceFormat, source.seriesLayoutBy, dimensionsDefine, source.startIndex, i);
491
+ guessRecords.push(guessResult);
492
+ var isPureNumber = guessResult === BE_ORDINAL.Not; // [Strategy of idxRes0]: find the first BE_ORDINAL.Not as the value dim,
493
+ // and then find a name dim with the priority:
494
+ // "BE_ORDINAL.Might|BE_ORDINAL.Must" > "other dim" > "the value dim itself".
448
495
 
449
- encodeSeriesName.push(nameDimIndex);
450
- encodeItemName.push(nameDimIndex); // encodeTooltip.push(firstNotOrdinal);
496
+ if (isPureNumber && idxRes0.v == null && i !== potentialNameDimIndex) {
497
+ idxRes0.v = i;
451
498
  }
452
- } // encodeTooltip.length && (encode.tooltip = encodeTooltip);
453
- // encodeLabel.length && (encode.label = encodeLabel);
454
499
 
500
+ if (idxRes0.n == null || idxRes0.n === idxRes0.v || !isPureNumber && guessRecords[idxRes0.n] === BE_ORDINAL.Not) {
501
+ idxRes0.n = i;
502
+ }
503
+
504
+ if (fulfilled(idxRes0) && guessRecords[idxRes0.n] !== BE_ORDINAL.Not) {
505
+ return idxRes0;
506
+ } // [Strategy of idxRes1]: if idxRes0 not satisfied (that is, no BE_ORDINAL.Not),
507
+ // find the first BE_ORDINAL.Might as the value dim,
508
+ // and then find a name dim with the priority:
509
+ // "other dim" > "the value dim itself".
510
+ // That is for backward compat: number-like (e.g., `'3'`, `'55'`) can be
511
+ // treated as number.
512
+
513
+
514
+ if (!isPureNumber) {
515
+ if (guessResult === BE_ORDINAL.Might && idxRes1.v == null && i !== potentialNameDimIndex) {
516
+ idxRes1.v = i;
517
+ }
518
+
519
+ if (idxRes1.n == null || idxRes1.n === idxRes1.v) {
520
+ idxRes1.n = i;
521
+ }
522
+ }
523
+ }
524
+
525
+ function fulfilled(idxResult) {
526
+ return idxResult.v != null && idxResult.n != null;
527
+ }
528
+
529
+ return fulfilled(idxRes0) ? idxRes0 : fulfilled(idxRes1) ? idxRes1 : null;
530
+ }();
531
+
532
+ if (idxResult) {
533
+ encode.value = idxResult.v; // `potentialNameDimIndex` has highest priority.
534
+
535
+ var nameDimIndex = potentialNameDimIndex != null ? potentialNameDimIndex : idxResult.n; // By default, label use itemName in charts.
536
+ // So we dont set encodeLabel here.
537
+
538
+ encode.itemName = [nameDimIndex];
539
+ encode.seriesName = [nameDimIndex];
540
+ }
455
541
 
456
- encodeItemName.length && (encode.itemName = encodeItemName);
457
- encodeSeriesName.length && (encode.seriesName = encodeSeriesName);
458
542
  return encode;
459
543
  }
460
544
  /**
@@ -482,13 +566,14 @@ function getDatasetModel(seriesModel) {
482
566
  *
483
567
  * @param {module:echars/data/Source} source
484
568
  * @param {number} dimIndex
485
- * @return {boolean} Whether ordinal.
569
+ * @return {BE_ORDINAL} guess result.
486
570
  */
487
571
 
488
572
 
489
573
  function guessOrdinal(source, dimIndex) {
490
574
  return doGuessOrdinal(source.data, source.sourceFormat, source.seriesLayoutBy, source.dimensionsDefine, source.startIndex, dimIndex);
491
575
  } // dimIndex may be overflow source data.
576
+ // return {BE_ORDINAL}
492
577
 
493
578
 
494
579
  function doGuessOrdinal(data, sourceFormat, seriesLayoutBy, dimensionsDefine, startIndex, dimIndex) {
@@ -497,16 +582,27 @@ function doGuessOrdinal(data, sourceFormat, seriesLayoutBy, dimensionsDefine, st
497
582
  var maxLoop = 5;
498
583
 
499
584
  if (isTypedArray(data)) {
500
- return false;
585
+ return BE_ORDINAL.Not;
501
586
  } // When sourceType is 'objectRows' or 'keyedColumns', dimensionsDefine
502
587
  // always exists in source.
503
588
 
504
589
 
505
590
  var dimName;
591
+ var dimType;
506
592
 
507
593
  if (dimensionsDefine) {
508
- dimName = dimensionsDefine[dimIndex];
509
- dimName = isObject(dimName) ? dimName.name : dimName;
594
+ var dimDefItem = dimensionsDefine[dimIndex];
595
+
596
+ if (isObject(dimDefItem)) {
597
+ dimName = dimDefItem.name;
598
+ dimType = dimDefItem.type;
599
+ } else if (isString(dimDefItem)) {
600
+ dimName = dimDefItem;
601
+ }
602
+ }
603
+
604
+ if (dimType != null) {
605
+ return dimType === 'ordinal' ? BE_ORDINAL.Must : BE_ORDINAL.Not;
510
606
  }
511
607
 
512
608
  if (sourceFormat === SOURCE_FORMAT_ARRAY_ROWS) {
@@ -529,7 +625,7 @@ function doGuessOrdinal(data, sourceFormat, seriesLayoutBy, dimensionsDefine, st
529
625
  }
530
626
  } else if (sourceFormat === SOURCE_FORMAT_OBJECT_ROWS) {
531
627
  if (!dimName) {
532
- return;
628
+ return BE_ORDINAL.Not;
533
629
  }
534
630
 
535
631
  for (var i = 0; i < data.length && i < maxLoop; i++) {
@@ -541,13 +637,13 @@ function doGuessOrdinal(data, sourceFormat, seriesLayoutBy, dimensionsDefine, st
541
637
  }
542
638
  } else if (sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS) {
543
639
  if (!dimName) {
544
- return;
640
+ return BE_ORDINAL.Not;
545
641
  }
546
642
 
547
643
  var sample = data[dimName];
548
644
 
549
645
  if (!sample || isTypedArray(sample)) {
550
- return false;
646
+ return BE_ORDINAL.Not;
551
647
  }
552
648
 
553
649
  for (var i = 0; i < sample.length && i < maxLoop; i++) {
@@ -561,7 +657,7 @@ function doGuessOrdinal(data, sourceFormat, seriesLayoutBy, dimensionsDefine, st
561
657
  var val = getDataItemValue(item);
562
658
 
563
659
  if (!isArray(val)) {
564
- return false;
660
+ return BE_ORDINAL.Not;
565
661
  }
566
662
 
567
663
  if ((result = detectValue(val[dimIndex])) != null) {
@@ -571,20 +667,24 @@ function doGuessOrdinal(data, sourceFormat, seriesLayoutBy, dimensionsDefine, st
571
667
  }
572
668
 
573
669
  function detectValue(val) {
574
- // Consider usage convenience, '1', '2' will be treated as "number".
670
+ var beStr = isString(val); // Consider usage convenience, '1', '2' will be treated as "number".
575
671
  // `isFinit('')` get `true`.
672
+
576
673
  if (val != null && isFinite(val) && val !== '') {
577
- return false;
578
- } else if (isString(val) && val !== '-') {
579
- return true;
674
+ return beStr ? BE_ORDINAL.Might : BE_ORDINAL.Not;
675
+ } else if (beStr && val !== '-') {
676
+ return BE_ORDINAL.Must;
580
677
  }
581
678
  }
582
679
 
583
- return false;
680
+ return BE_ORDINAL.Not;
584
681
  }
585
682
 
683
+ exports.BE_ORDINAL = BE_ORDINAL;
586
684
  exports.detectSourceFormat = detectSourceFormat;
587
685
  exports.getSource = getSource;
588
686
  exports.resetSourceDefaulter = resetSourceDefaulter;
589
687
  exports.prepareSource = prepareSource;
688
+ exports.makeSeriesEncodeForAxisCoordSys = makeSeriesEncodeForAxisCoordSys;
689
+ exports.makeSeriesEncodeForNameBased = makeSeriesEncodeForNameBased;
590
690
  exports.guessOrdinal = guessOrdinal;
package/lib/echarts.js CHANGED
@@ -101,9 +101,9 @@ var each = zrUtil.each;
101
101
  var isFunction = zrUtil.isFunction;
102
102
  var isObject = zrUtil.isObject;
103
103
  var parseClassType = ComponentModel.parseClassType;
104
- var version = '4.5.0';
104
+ var version = '4.6.0';
105
105
  var dependencies = {
106
- zrender: '4.1.2'
106
+ zrender: '4.2.0'
107
107
  };
108
108
  var TEST_FRAME_REMAIN_TIME = 1;
109
109
  var PRIORITY_PROCESSOR_FILTER = 1000;
@@ -263,7 +263,6 @@ function doCalBarWidthAndOffset(seriesInfoList) {
263
263
  // will be shared by series. Consider that they have default values,
264
264
  // only the attributes set on the last series will work.
265
265
  // Do not change this fact unless there will be a break change.
266
- // TODO
267
266
 
268
267
  var barWidth = seriesInfo.barWidth;
269
268
 
@@ -317,7 +316,7 @@ function doCalBarWidthAndOffset(seriesInfoList) {
317
316
 
318
317
  if (finalWidth !== autoWidth) {
319
318
  column.width = finalWidth;
320
- remainedWidth -= finalWidth;
319
+ remainedWidth -= finalWidth + barGapPercent * finalWidth;
321
320
  autoWidthCount--;
322
321
  }
323
322
  } else {
@@ -336,7 +335,7 @@ function doCalBarWidthAndOffset(seriesInfoList) {
336
335
  }
337
336
 
338
337
  column.width = finalWidth;
339
- remainedWidth -= finalWidth;
338
+ remainedWidth -= finalWidth + barGapPercent * finalWidth;
340
339
  autoWidthCount--;
341
340
  }
342
341
  }); // Recalculate width again
@@ -95,11 +95,11 @@ var SeriesModel = ComponentModel.extend({
95
95
  defaultOption: null,
96
96
 
97
97
  /**
98
- * Data provided for legend
99
- * @type {Function}
98
+ * legend visual provider to the legend component
99
+ * @type {Object}
100
100
  */
101
101
  // PENDING
102
- legendDataProvider: null,
102
+ legendVisualProvider: null,
103
103
 
104
104
  /**
105
105
  * Access path of color for visual
@@ -56,7 +56,8 @@ var each = _util.each;
56
56
  // check: "modelHelper" of tooltip and "BrushTargetManager".
57
57
 
58
58
  /**
59
- * @return {Object} For example:
59
+ * @class
60
+ * For example:
60
61
  * {
61
62
  * coordSysName: 'cartesian2d',
62
63
  * coordSysDims: ['x', 'y', ...],
@@ -68,19 +69,46 @@ var each = _util.each;
68
69
  * x: xAxisModel,
69
70
  * y: undefined
70
71
  * }),
71
- * // It also indicate that whether there is category axis.
72
+ * // The index of the first category axis in `coordSysDims`.
73
+ * // `null/undefined` means no category axis exists.
72
74
  * firstCategoryDimIndex: 1,
73
75
  * // To replace user specified encode.
74
76
  * }
75
77
  */
76
- function getCoordSysDefineBySeries(seriesModel) {
78
+ function CoordSysInfo(coordSysName) {
79
+ /**
80
+ * @type {string}
81
+ */
82
+ this.coordSysName = coordSysName;
83
+ /**
84
+ * @type {Array.<string>}
85
+ */
86
+
87
+ this.coordSysDims = [];
88
+ /**
89
+ * @type {module:zrender/core/util#HashMap}
90
+ */
91
+
92
+ this.axisMap = createHashMap();
93
+ /**
94
+ * @type {module:zrender/core/util#HashMap}
95
+ */
96
+
97
+ this.categoryAxisMap = createHashMap();
98
+ /**
99
+ * @type {number}
100
+ */
101
+
102
+ this.firstCategoryDimIndex = null;
103
+ }
104
+ /**
105
+ * @return {module:model/referHelper#CoordSysInfo}
106
+ */
107
+
108
+
109
+ function getCoordSysInfoBySeries(seriesModel) {
77
110
  var coordSysName = seriesModel.get('coordinateSystem');
78
- var result = {
79
- coordSysName: coordSysName,
80
- coordSysDims: [],
81
- axisMap: createHashMap(),
82
- categoryAxisMap: createHashMap()
83
- };
111
+ var result = new CoordSysInfo(coordSysName);
84
112
  var fetch = fetchers[coordSysName];
85
113
 
86
114
  if (fetch) {
@@ -104,7 +132,7 @@ var fetchers = {
104
132
 
105
133
  if (isCategory(yAxisModel)) {
106
134
  categoryAxisMap.set('y', yAxisModel);
107
- result.firstCategoryDimIndex = 1;
135
+ result.firstCategoryDimIndex == null & (result.firstCategoryDimIndex = 1);
108
136
  }
109
137
  },
110
138
  singleAxis: function (seriesModel, result, axisMap, categoryAxisMap) {
@@ -132,7 +160,7 @@ var fetchers = {
132
160
 
133
161
  if (isCategory(angleAxisModel)) {
134
162
  categoryAxisMap.set('angle', angleAxisModel);
135
- result.firstCategoryDimIndex = 1;
163
+ result.firstCategoryDimIndex == null && (result.firstCategoryDimIndex = 1);
136
164
  }
137
165
  },
138
166
  geo: function (seriesModel, result, axisMap, categoryAxisMap) {
@@ -159,4 +187,4 @@ function isCategory(axisModel) {
159
187
  return axisModel.get('type') === 'category';
160
188
  }
161
189
 
162
- exports.getCoordSysDefineBySeries = getCoordSysDefineBySeries;
190
+ exports.getCoordSysInfoBySeries = getCoordSysInfoBySeries;