echarts 4.5.0-rc.2 → 4.8.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 (256) hide show
  1. package/.github/pull_request_template.md +66 -0
  2. package/.github/workflows/nodejs.yml +12 -2
  3. package/CONTRIBUTING.md +16 -160
  4. package/NOTICE +1 -1
  5. package/README.md +2 -2
  6. package/dist/echarts-en.common.js +2808 -1188
  7. package/dist/echarts-en.common.min.js +1 -1
  8. package/dist/echarts-en.js +3559 -1437
  9. package/dist/echarts-en.js.map +1 -1
  10. package/dist/echarts-en.min.js +1 -1
  11. package/dist/echarts-en.simple.js +2453 -1002
  12. package/dist/echarts-en.simple.min.js +1 -1
  13. package/dist/echarts.common.js +2782 -1188
  14. package/dist/echarts.common.min.js +1 -1
  15. package/dist/echarts.js +3533 -1437
  16. package/dist/echarts.js.map +1 -1
  17. package/dist/echarts.min.js +1 -1
  18. package/dist/echarts.simple.js +2427 -1002
  19. package/dist/echarts.simple.min.js +1 -1
  20. package/dist/extension/bmap.js +336 -2
  21. package/dist/extension/bmap.js.map +1 -1
  22. package/dist/extension/bmap.min.js +1 -1
  23. package/extension/bmap/BMapView.js +6 -2
  24. package/extension-src/bmap/BMapView.js +3 -2
  25. package/lib/chart/bar/BarSeries.js +14 -1
  26. package/lib/chart/bar/BarView.js +161 -16
  27. package/lib/chart/bar/BaseBarSeries.js +3 -1
  28. package/lib/chart/candlestick/candlestickVisual.js +1 -1
  29. package/lib/chart/effectScatter/EffectScatterSeries.js +3 -1
  30. package/lib/chart/funnel/FunnelSeries.js +13 -5
  31. package/lib/chart/gauge/GaugeSeries.js +0 -2
  32. package/lib/chart/graph/GraphSeries.js +11 -5
  33. package/lib/chart/graph/GraphView.js +30 -12
  34. package/lib/chart/heatmap/HeatmapView.js +4 -4
  35. package/lib/chart/helper/EffectLine.js +23 -1
  36. package/lib/chart/helper/EffectSymbol.js +2 -1
  37. package/lib/chart/helper/Line.js +94 -33
  38. package/lib/chart/helper/LineDraw.js +5 -1
  39. package/lib/chart/helper/Symbol.js +1 -2
  40. package/lib/chart/helper/createClipPathFromCoordSys.js +4 -1
  41. package/lib/chart/helper/createListFromArray.js +14 -8
  42. package/lib/chart/helper/createRenderPlanner.js +6 -3
  43. package/lib/chart/helper/whiskerBoxCommon.js +22 -16
  44. package/lib/chart/line/LineSeries.js +3 -1
  45. package/lib/chart/line/LineView.js +41 -2
  46. package/lib/chart/map/MapSeries.js +11 -3
  47. package/lib/chart/pie/PieSeries.js +27 -6
  48. package/lib/chart/pie/PieView.js +22 -15
  49. package/lib/chart/pie/labelLayout.js +102 -19
  50. package/lib/chart/pie/pieLayout.js +19 -7
  51. package/lib/chart/radar/RadarSeries.js +23 -3
  52. package/lib/chart/sankey/SankeySeries.js +13 -1
  53. package/lib/chart/sankey/SankeyView.js +70 -32
  54. package/lib/chart/sankey/sankeyLayout.js +22 -3
  55. package/lib/chart/scatter/ScatterSeries.js +3 -1
  56. package/lib/chart/sunburst/SunburstPiece.js +1 -0
  57. package/lib/chart/sunburst/SunburstSeries.js +12 -7
  58. package/lib/chart/sunburst/SunburstView.js +5 -1
  59. package/lib/chart/themeRiver/ThemeRiverSeries.js +3 -3
  60. package/lib/chart/tree/TreeSeries.js +20 -3
  61. package/lib/chart/tree/TreeView.js +151 -25
  62. package/lib/chart/treemap/TreemapSeries.js +15 -3
  63. package/lib/chart/treemap/TreemapView.js +80 -38
  64. package/lib/component/axis/AngleAxisView.js +64 -7
  65. package/lib/component/axis/AxisBuilder.js +62 -24
  66. package/lib/component/axis/CartesianAxisView.js +52 -85
  67. package/lib/component/axis/RadiusAxisView.js +36 -4
  68. package/lib/component/axis/SingleAxisView.js +21 -6
  69. package/lib/component/axis/axisSplitHelper.js +132 -0
  70. package/lib/component/brush/BrushView.js +11 -1
  71. package/lib/component/brush/visualEncoding.js +13 -2
  72. package/lib/component/dataZoom/SliderZoomView.js +4 -10
  73. package/lib/component/helper/BrushController.js +33 -43
  74. package/lib/component/helper/MapDraw.js +30 -4
  75. package/lib/component/legend/LegendModel.js +3 -3
  76. package/lib/component/legend/LegendView.js +17 -13
  77. package/lib/component/legend/ScrollableLegendView.js +18 -18
  78. package/lib/component/marker/MarkLineModel.js +2 -1
  79. package/lib/component/marker/markerHelper.js +7 -4
  80. package/lib/component/title.js +6 -2
  81. package/lib/component/toolbox/ToolboxView.js +5 -1
  82. package/lib/component/toolbox/feature/MagicType.js +20 -14
  83. package/lib/component/toolbox/feature/SaveAsImage.js +2 -1
  84. package/lib/component/tooltip/TooltipContent.js +60 -23
  85. package/lib/component/tooltip/TooltipView.js +7 -8
  86. package/lib/component/visualMap/PiecewiseModel.js +3 -6
  87. package/lib/coord/Axis.js +30 -2
  88. package/lib/coord/View.js +9 -0
  89. package/lib/coord/axisDefault.js +21 -2
  90. package/lib/coord/axisHelper.js +22 -16
  91. package/lib/coord/calendar/Calendar.js +8 -4
  92. package/lib/coord/geo/geoJSONLoader.js +3 -2
  93. package/lib/coord/geo/geoSourceManager.js +3 -2
  94. package/lib/coord/geo/parseGeoJson.js +3 -2
  95. package/lib/coord/radar/Radar.js +5 -5
  96. package/lib/data/DataDimensionInfo.js +157 -0
  97. package/lib/data/List.js +25 -19
  98. package/lib/data/Tree.js +9 -19
  99. package/lib/data/helper/completeDimensions.js +43 -32
  100. package/lib/data/helper/createDimensions.js +2 -0
  101. package/lib/data/helper/sourceHelper.js +214 -114
  102. package/lib/echarts.js +57 -34
  103. package/lib/langEN.js +26 -0
  104. package/lib/layout/barGrid.js +19 -13
  105. package/lib/layout/barPolar.js +0 -5
  106. package/lib/loading/default.js +43 -27
  107. package/lib/model/Series.js +4 -4
  108. package/lib/model/referHelper.js +40 -12
  109. package/lib/scale/Interval.js +87 -2
  110. package/lib/scale/Log.js +9 -2
  111. package/lib/scale/helper.js +1 -43
  112. package/lib/stream/Scheduler.js +9 -1
  113. package/lib/theme/dark.js +3 -0
  114. package/lib/util/format.js +19 -2
  115. package/lib/util/graphic.js +14 -12
  116. package/lib/visual/LegendVisualProvider.js +75 -0
  117. package/lib/visual/dataColor.js +2 -12
  118. package/lib/visual/seriesColor.js +15 -7
  119. package/lib/visual/symbol.js +12 -2
  120. package/map/js/china.js +1 -1
  121. package/map/js/province/chongqing.js +1 -1
  122. package/map/js/province/gansu.js +2 -2
  123. package/map/js/province/tianjin.js +1 -28
  124. package/map/json/china.json +1 -1
  125. package/map/json/province/chongqing.json +1 -1
  126. package/map/json/province/tianjin.json +1 -1
  127. package/package.json +11 -6
  128. package/src/chart/bar/BarSeries.js +15 -1
  129. package/src/chart/bar/BarView.js +162 -15
  130. package/src/chart/bar/BaseBarSeries.js +1 -1
  131. package/src/chart/candlestick/candlestickVisual.js +1 -1
  132. package/src/chart/effectScatter/EffectScatterSeries.js +1 -1
  133. package/src/chart/funnel/FunnelSeries.js +10 -4
  134. package/src/chart/gauge/GaugeSeries.js +0 -1
  135. package/src/chart/graph/GraphSeries.js +10 -4
  136. package/src/chart/graph/GraphView.js +28 -10
  137. package/src/chart/heatmap/HeatmapView.js +4 -4
  138. package/src/chart/helper/EffectLine.js +23 -1
  139. package/src/chart/helper/EffectSymbol.js +2 -1
  140. package/src/chart/helper/Line.js +84 -26
  141. package/src/chart/helper/LineDraw.js +5 -1
  142. package/src/chart/helper/Symbol.js +2 -2
  143. package/src/chart/helper/createClipPathFromCoordSys.js +4 -0
  144. package/src/chart/helper/createListFromArray.js +13 -8
  145. package/src/chart/helper/createRenderPlanner.js +5 -2
  146. package/src/chart/helper/whiskerBoxCommon.js +21 -16
  147. package/src/chart/line/LineSeries.js +1 -1
  148. package/src/chart/line/LineView.js +45 -1
  149. package/src/chart/map/MapSeries.js +8 -3
  150. package/src/chart/pie/PieSeries.js +26 -5
  151. package/src/chart/pie/PieView.js +20 -15
  152. package/src/chart/pie/labelLayout.js +114 -22
  153. package/src/chart/pie/pieLayout.js +20 -7
  154. package/src/chart/radar/RadarSeries.js +27 -3
  155. package/src/chart/sankey/SankeySeries.js +12 -1
  156. package/src/chart/sankey/SankeyView.js +75 -30
  157. package/src/chart/sankey/sankeyLayout.js +25 -5
  158. package/src/chart/scatter/ScatterSeries.js +1 -1
  159. package/src/chart/sunburst/SunburstPiece.js +2 -0
  160. package/src/chart/sunburst/SunburstSeries.js +12 -7
  161. package/src/chart/sunburst/SunburstView.js +2 -1
  162. package/src/chart/themeRiver/ThemeRiverSeries.js +4 -3
  163. package/src/chart/tree/TreeSeries.js +19 -6
  164. package/src/chart/tree/TreeView.js +155 -22
  165. package/src/chart/treemap/TreemapSeries.js +15 -5
  166. package/src/chart/treemap/TreemapView.js +77 -41
  167. package/src/component/axis/AngleAxisView.js +75 -7
  168. package/src/component/axis/AxisBuilder.js +77 -32
  169. package/src/component/axis/CartesianAxisView.js +47 -83
  170. package/src/component/axis/RadiusAxisView.js +37 -4
  171. package/src/component/axis/SingleAxisView.js +21 -4
  172. package/src/component/axis/axisSplitHelper.js +114 -0
  173. package/src/component/brush/BrushView.js +8 -1
  174. package/src/component/brush/visualEncoding.js +6 -3
  175. package/src/component/dataZoom/SliderZoomView.js +4 -9
  176. package/src/component/helper/BrushController.js +40 -47
  177. package/src/component/helper/MapDraw.js +27 -4
  178. package/src/component/legend/LegendModel.js +3 -3
  179. package/src/component/legend/LegendView.js +18 -12
  180. package/src/component/legend/ScrollableLegendView.js +18 -16
  181. package/src/component/marker/MarkLineModel.js +2 -1
  182. package/src/component/marker/markerHelper.js +8 -5
  183. package/src/component/title.js +3 -2
  184. package/src/component/toolbox/ToolboxView.js +5 -0
  185. package/src/component/toolbox/feature/MagicType.js +19 -13
  186. package/src/component/toolbox/feature/SaveAsImage.js +2 -1
  187. package/src/component/tooltip/TooltipContent.js +59 -22
  188. package/src/component/tooltip/TooltipView.js +10 -8
  189. package/src/component/visualMap/PiecewiseModel.js +5 -9
  190. package/src/coord/Axis.js +29 -2
  191. package/src/coord/View.js +10 -1
  192. package/src/coord/axisDefault.js +25 -1
  193. package/src/coord/axisHelper.js +26 -19
  194. package/src/coord/calendar/Calendar.js +12 -5
  195. package/src/coord/geo/geoJSONLoader.js +3 -2
  196. package/src/coord/geo/geoSourceManager.js +3 -2
  197. package/src/coord/geo/parseGeoJson.js +3 -2
  198. package/src/coord/radar/Radar.js +6 -8
  199. package/src/data/DataDimensionInfo.js +135 -0
  200. package/src/data/List.js +29 -16
  201. package/src/data/Tree.js +12 -17
  202. package/src/data/helper/completeDimensions.js +49 -30
  203. package/src/data/helper/createDimensions.js +2 -0
  204. package/src/data/helper/sourceHelper.js +216 -124
  205. package/src/echarts.js +60 -36
  206. package/src/langEN.js +26 -0
  207. package/src/layout/barGrid.js +22 -10
  208. package/src/layout/barPolar.js +0 -4
  209. package/src/loading/default.js +46 -34
  210. package/src/model/Series.js +4 -4
  211. package/src/model/referHelper.js +34 -11
  212. package/src/scale/Interval.js +84 -4
  213. package/src/scale/Log.js +9 -2
  214. package/src/scale/helper.js +1 -39
  215. package/src/stream/Scheduler.js +8 -0
  216. package/src/theme/dark.js +3 -0
  217. package/src/util/format.js +17 -1
  218. package/src/util/graphic.js +13 -11
  219. package/src/visual/LegendVisualProvider.js +55 -0
  220. package/src/visual/dataColor.js +0 -13
  221. package/src/visual/seriesColor.js +13 -7
  222. package/src/visual/symbol.js +11 -2
  223. package/theme/azul.js +163 -0
  224. package/theme/bee-inspired.js +178 -0
  225. package/theme/blue.js +178 -0
  226. package/theme/caravan.js +178 -0
  227. package/theme/carp.js +163 -0
  228. package/theme/cool.js +180 -0
  229. package/theme/dark-blue.js +168 -0
  230. package/theme/dark-bold.js +168 -0
  231. package/theme/dark-digerati.js +168 -0
  232. package/theme/dark-fresh-cut.js +168 -0
  233. package/theme/dark-mushroom.js +168 -0
  234. package/theme/dark.js +69 -62
  235. package/theme/eduardo.js +178 -0
  236. package/theme/forest.js +163 -0
  237. package/theme/fresh-cut.js +163 -0
  238. package/theme/fruit.js +178 -0
  239. package/theme/gray.js +220 -0
  240. package/theme/green.js +222 -0
  241. package/theme/helianthus.js +263 -0
  242. package/theme/infographic.js +72 -57
  243. package/theme/inspired.js +163 -0
  244. package/theme/jazz.js +163 -0
  245. package/theme/london.js +163 -0
  246. package/theme/macarons.js +80 -57
  247. package/theme/macarons2.js +251 -0
  248. package/theme/mint.js +155 -0
  249. package/theme/red-velvet.js +163 -0
  250. package/theme/red.js +225 -0
  251. package/theme/roma.js +55 -22
  252. package/theme/royal.js +163 -0
  253. package/theme/sakura.js +140 -0
  254. package/theme/shine.js +52 -45
  255. package/theme/tech-blue.js +180 -0
  256. package/theme/vintage.js +37 -23
@@ -161,40 +161,93 @@ function updateSymbolAndLabelBeforeLineUpdate() {
161
161
  var textPosition;
162
162
  var textAlign;
163
163
  var textVerticalAlign;
164
- var distance = 5 * invScale; // End
165
-
166
- if (label.__position === 'end') {
167
- textPosition = [d[0] * distance + toPos[0], d[1] * distance + toPos[1]];
168
- textAlign = d[0] > 0.8 ? 'left' : d[0] < -0.8 ? 'right' : 'center';
169
- textVerticalAlign = d[1] > 0.8 ? 'top' : d[1] < -0.8 ? 'bottom' : 'middle';
170
- } // Middle
171
- else if (label.__position === 'middle') {
172
- var halfPercent = percent / 2;
173
- var tangent = line.tangentAt(halfPercent);
174
- var n = [tangent[1], -tangent[0]];
175
- var cp = line.pointAt(halfPercent);
176
-
177
- if (n[1] > 0) {
178
- n[0] = -n[0];
179
- n[1] = -n[1];
180
- }
181
-
182
- textPosition = [cp[0] + n[0] * distance, cp[1] + n[1] * distance];
183
- textAlign = 'center';
184
- textVerticalAlign = 'bottom';
185
- var rotation = -Math.atan2(tangent[1], tangent[0]);
164
+ var textOrigin;
165
+ var distance = label.__labelDistance;
166
+ var distanceX = distance[0] * invScale;
167
+ var distanceY = distance[1] * invScale;
168
+ var halfPercent = percent / 2;
169
+ var tangent = line.tangentAt(halfPercent);
170
+ var n = [tangent[1], -tangent[0]];
171
+ var cp = line.pointAt(halfPercent);
172
+
173
+ if (n[1] > 0) {
174
+ n[0] = -n[0];
175
+ n[1] = -n[1];
176
+ }
177
+
178
+ var dir = tangent[0] < 0 ? -1 : 1;
179
+
180
+ if (label.__position !== 'start' && label.__position !== 'end') {
181
+ var rotation = -Math.atan2(tangent[1], tangent[0]);
182
+
183
+ if (toPos[0] < fromPos[0]) {
184
+ rotation = Math.PI + rotation;
185
+ }
186
+
187
+ label.attr('rotation', rotation);
188
+ }
186
189
 
187
- if (toPos[0] < fromPos[0]) {
188
- rotation = Math.PI + rotation;
189
- }
190
+ var dy;
190
191
 
191
- label.attr('rotation', rotation);
192
- } // Start
193
- else {
194
- textPosition = [-d[0] * distance + fromPos[0], -d[1] * distance + fromPos[1]];
195
- textAlign = d[0] > 0.8 ? 'right' : d[0] < -0.8 ? 'left' : 'center';
196
- textVerticalAlign = d[1] > 0.8 ? 'bottom' : d[1] < -0.8 ? 'top' : 'middle';
197
- }
192
+ switch (label.__position) {
193
+ case 'insideStartTop':
194
+ case 'insideMiddleTop':
195
+ case 'insideEndTop':
196
+ case 'middle':
197
+ dy = -distanceY;
198
+ textVerticalAlign = 'bottom';
199
+ break;
200
+
201
+ case 'insideStartBottom':
202
+ case 'insideMiddleBottom':
203
+ case 'insideEndBottom':
204
+ dy = distanceY;
205
+ textVerticalAlign = 'top';
206
+ break;
207
+
208
+ default:
209
+ dy = 0;
210
+ textVerticalAlign = 'middle';
211
+ }
212
+
213
+ switch (label.__position) {
214
+ case 'end':
215
+ textPosition = [d[0] * distanceX + toPos[0], d[1] * distanceY + toPos[1]];
216
+ textAlign = d[0] > 0.8 ? 'left' : d[0] < -0.8 ? 'right' : 'center';
217
+ textVerticalAlign = d[1] > 0.8 ? 'top' : d[1] < -0.8 ? 'bottom' : 'middle';
218
+ break;
219
+
220
+ case 'start':
221
+ textPosition = [-d[0] * distanceX + fromPos[0], -d[1] * distanceY + fromPos[1]];
222
+ textAlign = d[0] > 0.8 ? 'right' : d[0] < -0.8 ? 'left' : 'center';
223
+ textVerticalAlign = d[1] > 0.8 ? 'bottom' : d[1] < -0.8 ? 'top' : 'middle';
224
+ break;
225
+
226
+ case 'insideStartTop':
227
+ case 'insideStart':
228
+ case 'insideStartBottom':
229
+ textPosition = [distanceX * dir + fromPos[0], fromPos[1] + dy];
230
+ textAlign = tangent[0] < 0 ? 'right' : 'left';
231
+ textOrigin = [-distanceX * dir, -dy];
232
+ break;
233
+
234
+ case 'insideMiddleTop':
235
+ case 'insideMiddle':
236
+ case 'insideMiddleBottom':
237
+ case 'middle':
238
+ textPosition = [cp[0], cp[1] + dy];
239
+ textAlign = 'center';
240
+ textOrigin = [0, -dy];
241
+ break;
242
+
243
+ case 'insideEndTop':
244
+ case 'insideEnd':
245
+ case 'insideEndBottom':
246
+ textPosition = [-distanceX * dir + toPos[0], toPos[1] + dy];
247
+ textAlign = tangent[0] >= 0 ? 'right' : 'left';
248
+ textOrigin = [distanceX * dir, -dy];
249
+ break;
250
+ }
198
251
 
199
252
  label.attr({
200
253
  style: {
@@ -203,7 +256,8 @@ function updateSymbolAndLabelBeforeLineUpdate() {
203
256
  textAlign: label.__textAlign || textAlign
204
257
  },
205
258
  position: textPosition,
206
- scale: [invScale, invScale]
259
+ scale: [invScale, invScale],
260
+ origin: textOrigin
207
261
  });
208
262
  }
209
263
  }
@@ -347,6 +401,13 @@ lineProto._updateCommonStl = function (lineData, idx, seriesScope) {
347
401
  label.__verticalAlign = labelStyle.textVerticalAlign; // 'start', 'middle', 'end'
348
402
 
349
403
  label.__position = labelModel.get('position') || 'middle';
404
+ var distance = labelModel.get('distance');
405
+
406
+ if (!zrUtil.isArray(distance)) {
407
+ distance = [distance, distance];
408
+ }
409
+
410
+ label.__labelDistance = distance;
350
411
  }
351
412
 
352
413
  if (emphasisText != null) {
@@ -134,9 +134,13 @@ lineDrawProto.incrementalPrepareUpdate = function (lineData) {
134
134
  this.group.removeAll();
135
135
  };
136
136
 
137
+ function isEffectObject(el) {
138
+ return el.animators && el.animators.length > 0;
139
+ }
140
+
137
141
  lineDrawProto.incrementalUpdate = function (taskParams, lineData) {
138
142
  function updateIncrementalAndHover(el) {
139
- if (!el.isGroup) {
143
+ if (!el.isGroup && !isEffectObject(el)) {
140
144
  el.incremental = el.useHoverLayer = true;
141
145
  }
142
146
  }
@@ -267,7 +267,6 @@ symbolProto._updateCommon = function (data, idx, symbolSize, seriesScope) {
267
267
 
268
268
  var itemStyle = seriesScope && seriesScope.itemStyle;
269
269
  var hoverItemStyle = seriesScope && seriesScope.hoverItemStyle;
270
- var symbolRotate = seriesScope && seriesScope.symbolRotate;
271
270
  var symbolOffset = seriesScope && seriesScope.symbolOffset;
272
271
  var labelModel = seriesScope && seriesScope.labelModel;
273
272
  var hoverLabelModel = seriesScope && seriesScope.hoverLabelModel;
@@ -280,7 +279,6 @@ symbolProto._updateCommon = function (data, idx, symbolSize, seriesScope) {
280
279
 
281
280
  itemStyle = itemModel.getModel(normalStyleAccessPath).getItemStyle(['color']);
282
281
  hoverItemStyle = itemModel.getModel(emphasisStyleAccessPath).getItemStyle();
283
- symbolRotate = itemModel.getShallow('symbolRotate');
284
282
  symbolOffset = itemModel.getShallow('symbolOffset');
285
283
  labelModel = itemModel.getModel(normalLabelAccessPath);
286
284
  hoverLabelModel = itemModel.getModel(emphasisLabelAccessPath);
@@ -291,6 +289,7 @@ symbolProto._updateCommon = function (data, idx, symbolSize, seriesScope) {
291
289
  }
292
290
 
293
291
  var elStyle = symbolPath.style;
292
+ var symbolRotate = data.getItemVisual(idx, 'symbolRotate');
294
293
  symbolPath.attr('rotation', (symbolRotate || 0) * Math.PI / 180 || 0);
295
294
 
296
295
  if (symbolOffset) {
@@ -54,7 +54,10 @@ function createGridClipPath(cartesian, hasAnimation, seriesModel) {
54
54
  x -= lineWidth / 2;
55
55
  y -= lineWidth / 2;
56
56
  width += lineWidth;
57
- height += lineWidth;
57
+ height += lineWidth; // fix: https://github.com/apache/incubator-echarts/issues/11369
58
+
59
+ x = Math.floor(x);
60
+ width = Math.round(width);
58
61
  var clipPath = new graphic.Rect({
59
62
  shape: {
60
63
  x: x,
@@ -40,7 +40,7 @@ var CoordinateSystem = require("../../CoordinateSystem");
40
40
 
41
41
  var _referHelper = require("../../model/referHelper");
42
42
 
43
- var getCoordSysDefineBySeries = _referHelper.getCoordSysDefineBySeries;
43
+ var getCoordSysInfoBySeries = _referHelper.getCoordSysInfoBySeries;
44
44
 
45
45
  var Source = require("../../data/Source");
46
46
 
@@ -48,6 +48,10 @@ var _dataStackHelper = require("../../data/helper/dataStackHelper");
48
48
 
49
49
  var enableDataStack = _dataStackHelper.enableDataStack;
50
50
 
51
+ var _sourceHelper = require("../../data/helper/sourceHelper");
52
+
53
+ var makeSeriesEncodeForAxisCoordSys = _sourceHelper.makeSeriesEncodeForAxisCoordSys;
54
+
51
55
  /*
52
56
  * Licensed to the Apache Software Foundation (ASF) under one
53
57
  * or more contributor license agreements. See the NOTICE file
@@ -72,6 +76,7 @@ var enableDataStack = _dataStackHelper.enableDataStack;
72
76
  * @param {module:echarts/model/Series} seriesModel
73
77
  * @param {Object} [opt]
74
78
  * @param {string} [opt.generateCoord]
79
+ * @param {boolean} [opt.useEncodeDefaulter]
75
80
  */
76
81
  function createListFromArray(source, seriesModel, opt) {
77
82
  opt = opt || {};
@@ -82,15 +87,15 @@ function createListFromArray(source, seriesModel, opt) {
82
87
 
83
88
  var coordSysName = seriesModel.get('coordinateSystem');
84
89
  var registeredCoordSys = CoordinateSystem.get(coordSysName);
85
- var coordSysDefine = getCoordSysDefineBySeries(seriesModel);
90
+ var coordSysInfo = getCoordSysInfoBySeries(seriesModel);
86
91
  var coordSysDimDefs;
87
92
 
88
- if (coordSysDefine) {
89
- coordSysDimDefs = zrUtil.map(coordSysDefine.coordSysDims, function (dim) {
93
+ if (coordSysInfo) {
94
+ coordSysDimDefs = zrUtil.map(coordSysInfo.coordSysDims, function (dim) {
90
95
  var dimInfo = {
91
96
  name: dim
92
97
  };
93
- var axisModel = coordSysDefine.axisMap.get(dim);
98
+ var axisModel = coordSysInfo.axisMap.get(dim);
94
99
 
95
100
  if (axisModel) {
96
101
  var axisType = axisModel.get('type');
@@ -108,13 +113,14 @@ function createListFromArray(source, seriesModel, opt) {
108
113
 
109
114
  var dimInfoList = createDimensions(source, {
110
115
  coordDimensions: coordSysDimDefs,
111
- generateCoord: opt.generateCoord
116
+ generateCoord: opt.generateCoord,
117
+ encodeDefaulter: opt.useEncodeDefaulter ? zrUtil.curry(makeSeriesEncodeForAxisCoordSys, coordSysDimDefs, seriesModel) : null
112
118
  });
113
119
  var firstCategoryDimIndex;
114
120
  var hasNameEncode;
115
- coordSysDefine && zrUtil.each(dimInfoList, function (dimInfo, dimIndex) {
121
+ coordSysInfo && zrUtil.each(dimInfoList, function (dimInfo, dimIndex) {
116
122
  var coordDim = dimInfo.coordDim;
117
- var categoryAxisModel = coordSysDefine.categoryAxisMap.get(coordDim);
123
+ var categoryAxisModel = coordSysInfo.categoryAxisMap.get(coordDim);
118
124
 
119
125
  if (categoryAxisModel) {
120
126
  if (firstCategoryDimIndex == null) {
@@ -50,9 +50,12 @@ function _default() {
50
50
  var fields = inner(seriesModel);
51
51
  var pipelineContext = seriesModel.pipelineContext;
52
52
  var originalLarge = fields.large;
53
- var originalProgressive = fields.progressiveRender;
54
- var large = fields.large = pipelineContext.large;
55
- var progressive = fields.progressiveRender = pipelineContext.progressiveRender;
53
+ var originalProgressive = fields.progressiveRender; // FIXME: if the planner works on a filtered series, `pipelineContext` does not
54
+ // exists. See #11611 . Probably we need to modify this structure, see the comment
55
+ // on `performRawSeries` in `Schedular.js`.
56
+
57
+ var large = fields.large = pipelineContext && pipelineContext.large;
58
+ var progressive = fields.progressiveRender = pipelineContext && pipelineContext.progressiveRender;
56
59
  return !!(originalLarge ^ large || originalProgressive ^ progressive) && 'reset';
57
60
  };
58
61
  }
@@ -26,6 +26,10 @@ var _dimensionHelper = require("../../data/helper/dimensionHelper");
26
26
 
27
27
  var getDimensionTypeByAxis = _dimensionHelper.getDimensionTypeByAxis;
28
28
 
29
+ var _sourceHelper = require("../../data/helper/sourceHelper");
30
+
31
+ var makeSeriesEncodeForAxisCoordSys = _sourceHelper.makeSeriesEncodeForAxisCoordSys;
32
+
29
33
  /*
30
34
  * Licensed to the Apache Software Foundation (ASF) under one
31
35
  * or more contributor license agreements. See the NOTICE file
@@ -64,7 +68,7 @@ var seriesModelMixin = {
64
68
  var xAxisType = xAxisModel.get('type');
65
69
  var yAxisType = yAxisModel.get('type');
66
70
  var addOrdinal; // FIXME
67
- // 考虑时间轴
71
+ // Consider time axis.
68
72
 
69
73
  if (xAxisType === 'category') {
70
74
  option.layout = 'horizontal';
@@ -109,22 +113,24 @@ var seriesModelMixin = {
109
113
  }
110
114
 
111
115
  var defaultValueDimensions = this.defaultValueDimensions;
116
+ var coordDimensions = [{
117
+ name: baseAxisDim,
118
+ type: getDimensionTypeByAxis(baseAxisType),
119
+ ordinalMeta: ordinalMeta,
120
+ otherDims: {
121
+ tooltip: false,
122
+ itemName: 0
123
+ },
124
+ dimsDef: ['base']
125
+ }, {
126
+ name: otherAxisDim,
127
+ type: getDimensionTypeByAxis(otherAxisType),
128
+ dimsDef: defaultValueDimensions.slice()
129
+ }];
112
130
  return createListSimply(this, {
113
- coordDimensions: [{
114
- name: baseAxisDim,
115
- type: getDimensionTypeByAxis(baseAxisType),
116
- ordinalMeta: ordinalMeta,
117
- otherDims: {
118
- tooltip: false,
119
- itemName: 0
120
- },
121
- dimsDef: ['base']
122
- }, {
123
- name: otherAxisDim,
124
- type: getDimensionTypeByAxis(otherAxisType),
125
- dimsDef: defaultValueDimensions.slice()
126
- }],
127
- dimensionsCount: defaultValueDimensions.length + 1
131
+ coordDimensions: coordDimensions,
132
+ dimensionsCount: defaultValueDimensions.length + 1,
133
+ encodeDefaulter: zrUtil.curry(makeSeriesEncodeForAxisCoordSys, coordDimensions, this)
128
134
  });
129
135
  },
130
136
 
@@ -48,7 +48,9 @@ var _default = SeriesModel.extend({
48
48
  type: 'series.line',
49
49
  dependencies: ['grid', 'polar'],
50
50
  getInitialData: function (option, ecModel) {
51
- return createListFromArray(this.getSource(), this);
51
+ return createListFromArray(this.getSource(), this, {
52
+ useEncodeDefaulter: true
53
+ });
52
54
  },
53
55
  defaultOption: {
54
56
  zlevel: 0,
@@ -24,6 +24,10 @@ var __DEV__ = _config.__DEV__;
24
24
 
25
25
  var zrUtil = require("zrender/lib/core/util");
26
26
 
27
+ var _bbox = require("zrender/lib/core/bbox");
28
+
29
+ var fromPoints = _bbox.fromPoints;
30
+
27
31
  var SymbolDraw = require("../helper/SymbolDraw");
28
32
 
29
33
  var SymbolClz = require("../helper/Symbol");
@@ -87,6 +91,17 @@ function isPointsSame(points1, points2) {
87
91
  return true;
88
92
  }
89
93
 
94
+ function getBoundingDiff(points1, points2) {
95
+ var min1 = [];
96
+ var max1 = [];
97
+ var min2 = [];
98
+ var max2 = [];
99
+ fromPoints(points1, min1, max1);
100
+ fromPoints(points2, min2, max2); // Get a max value from each corner of two boundings.
101
+
102
+ return Math.max(Math.abs(min1[0] - min2[0]), Math.abs(min1[1] - min2[1]), Math.abs(max1[0] - max2[0]), Math.abs(max1[1] - max2[1]));
103
+ }
104
+
90
105
  function getSmooth(smooth) {
91
106
  return typeof smooth === 'number' ? smooth : smooth ? 0.5 : 0;
92
107
  }
@@ -368,7 +383,7 @@ var _default = ChartView.extend({
368
383
  var step = !isCoordSysPolar && seriesModel.get('step');
369
384
  var clipShapeForSymbol;
370
385
 
371
- if (coordSys && coordSys.getArea) {
386
+ if (coordSys && coordSys.getArea && seriesModel.get('clip', true)) {
372
387
  clipShapeForSymbol = coordSys.getArea(); // Avoid float number rounding error for symbol on the edge of axis extent.
373
388
  // See #7913 and `test/dataZoom-clip.html`.
374
389
 
@@ -381,8 +396,9 @@ var _default = ChartView.extend({
381
396
  clipShapeForSymbol.r0 -= 0.5;
382
397
  clipShapeForSymbol.r1 += 0.5;
383
398
  }
384
- } // Initialization animation or coordinate system changed
399
+ }
385
400
 
401
+ this._clipShapeForSymbol = clipShapeForSymbol; // Initialization animation or coordinate system changed
386
402
 
387
403
  if (!(polyline && prevCoordSys.type === coordSys.type && step === this._step)) {
388
404
  showSymbol && symbolDraw.updateData(data, {
@@ -509,6 +525,11 @@ var _default = ChartView.extend({
509
525
  if (!pt) {
510
526
  // Null data
511
527
  return;
528
+ } // fix #11360: should't draw symbol outside clipShapeForSymbol
529
+
530
+
531
+ if (this._clipShapeForSymbol && !this._clipShapeForSymbol.contain(pt[0], pt[1])) {
532
+ return;
512
533
  }
513
534
 
514
535
  symbol = new SymbolClz(data, dataIndex);
@@ -624,6 +645,24 @@ var _default = ChartView.extend({
624
645
  stackedOnCurrent = turnPointsIntoStep(diff.stackedOnCurrent, coordSys, step);
625
646
  next = turnPointsIntoStep(diff.next, coordSys, step);
626
647
  stackedOnNext = turnPointsIntoStep(diff.stackedOnNext, coordSys, step);
648
+ } // Don't apply animation if diff is large.
649
+ // For better result and avoid memory explosion problems like
650
+ // https://github.com/apache/incubator-echarts/issues/12229
651
+
652
+
653
+ if (getBoundingDiff(current, next) > 3000 || polygon && getBoundingDiff(stackedOnCurrent, stackedOnNext) > 3000) {
654
+ polyline.setShape({
655
+ points: next
656
+ });
657
+
658
+ if (polygon) {
659
+ polygon.setShape({
660
+ points: next,
661
+ stackedOnPoints: stackedOnNext
662
+ });
663
+ }
664
+
665
+ return;
627
666
  } // `diff.current` is subset of `current` (which should be ensured by
628
667
  // turnPointsIntoStep), so points in `__points` can be updated when
629
668
  // points in `current` are update during animation.
@@ -37,6 +37,10 @@ var retrieveRawAttr = _dataProvider.retrieveRawAttr;
37
37
 
38
38
  var geoSourceManager = require("../../coord/geo/geoSourceManager");
39
39
 
40
+ var _sourceHelper = require("../../data/helper/sourceHelper");
41
+
42
+ var makeSeriesEncodeForNameBased = _sourceHelper.makeSeriesEncodeForNameBased;
43
+
40
44
  /*
41
45
  * Licensed to the Apache Software Foundation (ASF) under one
42
46
  * or more contributor license agreements. See the NOTICE file
@@ -72,7 +76,10 @@ var MapSeries = SeriesModel.extend({
72
76
  */
73
77
  seriesGroup: [],
74
78
  getInitialData: function (option) {
75
- var data = createListSimply(this, ['value']);
79
+ var data = createListSimply(this, {
80
+ coordDimensions: ['value'],
81
+ encodeDefaulter: zrUtil.curry(makeSeriesEncodeForNameBased, this)
82
+ });
76
83
  var valueDim = data.mapDimension('value');
77
84
  var dataNameMap = zrUtil.createHashMap();
78
85
  var selectTargetList = [];
@@ -88,7 +95,7 @@ var MapSeries = SeriesModel.extend({
88
95
  });
89
96
  }
90
97
 
91
- var geoSource = geoSourceManager.load(this.getMapType(), this.option.nameMap);
98
+ var geoSource = geoSourceManager.load(this.getMapType(), this.option.nameMap, this.option.nameProperty);
92
99
  zrUtil.each(geoSource.regions, function (region) {
93
100
  var name = region.name;
94
101
 
@@ -249,7 +256,8 @@ var MapSeries = SeriesModel.extend({
249
256
  itemStyle: {
250
257
  areaColor: 'rgba(255,215,0,0.8)'
251
258
  }
252
- }
259
+ },
260
+ nameProperty: 'name'
253
261
  }
254
262
  });
255
263
  zrUtil.mixin(MapSeries, dataSelectableMixin);
@@ -36,6 +36,12 @@ var _dataProvider = require("../../data/helper/dataProvider");
36
36
 
37
37
  var retrieveRawAttr = _dataProvider.retrieveRawAttr;
38
38
 
39
+ var _sourceHelper = require("../../data/helper/sourceHelper");
40
+
41
+ var makeSeriesEncodeForNameBased = _sourceHelper.makeSeriesEncodeForNameBased;
42
+
43
+ var LegendVisualProvider = require("../../visual/LegendVisualProvider");
44
+
39
45
  /*
40
46
  * Licensed to the Apache Software Foundation (ASF) under one
41
47
  * or more contributor license agreements. See the NOTICE file
@@ -61,10 +67,7 @@ var PieSeries = echarts.extendSeriesModel({
61
67
  PieSeries.superApply(this, 'init', arguments); // Enable legend selection for each data item
62
68
  // Use a function instead of direct access because data reference may changed
63
69
 
64
- this.legendDataProvider = function () {
65
- return this.getRawData();
66
- };
67
-
70
+ this.legendVisualProvider = new LegendVisualProvider(zrUtil.bind(this.getData, this), zrUtil.bind(this.getRawData, this));
68
71
  this.updateSelectedMap(this._createSelectableList());
69
72
 
70
73
  this._defaultLabelLine(option);
@@ -75,7 +78,10 @@ var PieSeries = echarts.extendSeriesModel({
75
78
  this.updateSelectedMap(this._createSelectableList());
76
79
  },
77
80
  getInitialData: function (option, ecModel) {
78
- return createListSimply(this, ['value']);
81
+ return createListSimply(this, {
82
+ coordDimensions: ['value'],
83
+ encodeDefaulter: zrUtil.curry(makeSeriesEncodeForNameBased, this)
84
+ });
79
85
  },
80
86
  _createSelectableList: function () {
81
87
  var data = this.getRawData();
@@ -144,12 +150,27 @@ var PieSeries = echarts.extendSeriesModel({
144
150
  // If still show when all data zero.
145
151
  stillShowZeroSum: true,
146
152
  // cursor: null,
153
+ left: 0,
154
+ top: 0,
155
+ right: 0,
156
+ bottom: 0,
157
+ width: null,
158
+ height: null,
147
159
  label: {
148
160
  // If rotate around circle
149
161
  rotate: false,
150
162
  show: true,
151
163
  // 'outer', 'inside', 'center'
152
- position: 'outer' // formatter: 标签文本格式器,同Tooltip.formatter,不支持异步回调
164
+ position: 'outer',
165
+ // 'none', 'labelLine', 'edge'. Works only when position is 'outer'
166
+ alignTo: 'none',
167
+ // Closest distance between label and chart edge.
168
+ // Works only position is 'outer' and alignTo is 'edge'.
169
+ margin: '25%',
170
+ // Works only position is 'outer' and alignTo is not 'edge'.
171
+ bleedMargin: 10,
172
+ // Distance between text and label line.
173
+ distanceToLabelLine: 5 // formatter: 标签文本格式器,同Tooltip.formatter,不支持异步回调
153
174
  // 默认使用全局文本样式,详见TEXTSTYLE
154
175
  // distance: 当position为inner时有效,为label位置到圆心的距离与圆半径(环状图为内外半径和)的比例系数
155
176
 
@@ -159,33 +159,40 @@ piePieceProto.updateData = function (data, idx, firstCreate) {
159
159
  var cursorStyle = itemModel.getShallow('cursor');
160
160
  cursorStyle && sector.attr('cursor', cursorStyle); // Toggle selected
161
161
 
162
- toggleItemSelected(this, data.getItemLayout(idx), seriesModel.isSelected(null, idx), seriesModel.get('selectedOffset'), seriesModel.get('animation')); // Label and text animation should be applied only for transition type animation when update
162
+ toggleItemSelected(this, data.getItemLayout(idx), seriesModel.isSelected(data.getName(idx)), seriesModel.get('selectedOffset'), seriesModel.get('animation')); // Label and text animation should be applied only for transition type animation when update
163
163
 
164
164
  var withAnimation = !firstCreate && animationTypeUpdate === 'transition';
165
165
 
166
166
  this._updateLabel(data, idx, withAnimation);
167
167
 
168
- this.highDownOnUpdate = itemModel.get('hoverAnimation') && seriesModel.isAnimationEnabled() ? function (fromState, toState) {
168
+ this.highDownOnUpdate = !seriesModel.get('silent') ? function (fromState, toState) {
169
+ var hasAnimation = seriesModel.isAnimationEnabled() && itemModel.get('hoverAnimation');
170
+
169
171
  if (toState === 'emphasis') {
170
172
  labelLine.ignore = labelLine.hoverIgnore;
171
173
  labelText.ignore = labelText.hoverIgnore; // Sector may has animation of updating data. Force to move to the last frame
172
174
  // Or it may stopped on the wrong shape
173
175
 
174
- sector.stopAnimation(true);
175
- sector.animateTo({
176
- shape: {
177
- r: layout.r + seriesModel.get('hoverOffset')
178
- }
179
- }, 300, 'elasticOut');
176
+ if (hasAnimation) {
177
+ sector.stopAnimation(true);
178
+ sector.animateTo({
179
+ shape: {
180
+ r: layout.r + seriesModel.get('hoverOffset')
181
+ }
182
+ }, 300, 'elasticOut');
183
+ }
180
184
  } else {
181
185
  labelLine.ignore = labelLine.normalIgnore;
182
186
  labelText.ignore = labelText.normalIgnore;
183
- sector.stopAnimation(true);
184
- sector.animateTo({
185
- shape: {
186
- r: layout.r
187
- }
188
- }, 300, 'elasticOut');
187
+
188
+ if (hasAnimation) {
189
+ sector.stopAnimation(true);
190
+ sector.animateTo({
191
+ shape: {
192
+ r: layout.r
193
+ }
194
+ }, 300, 'elasticOut');
195
+ }
189
196
  }
190
197
  } : null;
191
198
  graphic.setHoverStyle(this);
@@ -242,7 +249,7 @@ piePieceProto._updateLabel = function (data, idx, withAnimation) {
242
249
  graphic.setLabelStyle(labelText.style, labelText.hoverStyle = {}, labelModel, labelHoverModel, {
243
250
  labelFetcher: data.hostModel,
244
251
  labelDataIndex: idx,
245
- defaultText: data.getName(idx),
252
+ defaultText: labelLayout.text,
246
253
  autoColor: visualColor,
247
254
  useInsideStyle: !!labelLayout.inside
248
255
  }, {