echarts 4.5.0 → 4.9.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 (329) hide show
  1. package/.DS_Store +0 -0
  2. package/.gitattributes +3 -0
  3. package/.github/pull_request_template.md +66 -0
  4. package/.github/workflows/nodejs.yml +15 -3
  5. package/.huskyrc +5 -0
  6. package/CONTRIBUTING.md +16 -160
  7. package/NOTICE +1 -1
  8. package/README.md +3 -3
  9. package/asset/.DS_Store +0 -0
  10. package/build/.DS_Store +0 -0
  11. package/dist/echarts-en.common.js +3072 -1261
  12. package/dist/echarts-en.common.min.js +1 -1
  13. package/dist/echarts-en.js +4339 -1685
  14. package/dist/echarts-en.js.map +1 -1
  15. package/dist/echarts-en.min.js +1 -1
  16. package/dist/echarts-en.simple.js +2496 -1011
  17. package/dist/echarts-en.simple.min.js +1 -1
  18. package/dist/echarts.common.js +3046 -1261
  19. package/dist/echarts.common.min.js +1 -1
  20. package/dist/echarts.js +4313 -1685
  21. package/dist/echarts.js.map +1 -1
  22. package/dist/echarts.min.js +1 -1
  23. package/dist/echarts.simple.js +2470 -1011
  24. package/dist/echarts.simple.min.js +1 -1
  25. package/dist/extension/bmap.js +33 -11
  26. package/dist/extension/bmap.js.map +1 -1
  27. package/dist/extension/bmap.min.js +1 -1
  28. package/dist/extension/dataTool.js.map +1 -1
  29. package/extension/.DS_Store +0 -0
  30. package/extension/bmap/BMapCoordSys.js +14 -4
  31. package/extension/bmap/BMapModel.js +4 -0
  32. package/extension/bmap/BMapView.js +18 -10
  33. package/extension-src/bmap/BMapCoordSys.js +14 -4
  34. package/extension-src/bmap/BMapModel.js +6 -1
  35. package/extension-src/bmap/BMapView.js +16 -9
  36. package/lib/chart/bar/BarSeries.js +14 -1
  37. package/lib/chart/bar/BarView.js +196 -18
  38. package/lib/chart/bar/BaseBarSeries.js +3 -1
  39. package/lib/chart/bar/PictorialBarSeries.js +1 -1
  40. package/lib/chart/candlestick/candlestickVisual.js +1 -1
  41. package/lib/chart/effectScatter/EffectScatterSeries.js +3 -1
  42. package/lib/chart/funnel/FunnelSeries.js +14 -5
  43. package/lib/chart/funnel/funnelLayout.js +162 -46
  44. package/lib/chart/gauge/GaugeSeries.js +0 -2
  45. package/lib/chart/graph/GraphSeries.js +23 -7
  46. package/lib/chart/graph/GraphView.js +30 -12
  47. package/lib/chart/graph/circularLayoutHelper.js +8 -2
  48. package/lib/chart/graph/forceLayout.js +6 -1
  49. package/lib/chart/graph/simpleLayout.js +1 -1
  50. package/lib/chart/graph/simpleLayoutHelper.js +10 -4
  51. package/lib/chart/heatmap/HeatmapView.js +4 -4
  52. package/lib/chart/helper/EffectLine.js +23 -1
  53. package/lib/chart/helper/EffectSymbol.js +2 -1
  54. package/lib/chart/helper/Line.js +129 -42
  55. package/lib/chart/helper/LineDraw.js +5 -1
  56. package/lib/chart/helper/Symbol.js +2 -3
  57. package/lib/chart/helper/createClipPathFromCoordSys.js +4 -1
  58. package/lib/chart/helper/createListFromArray.js +14 -8
  59. package/lib/chart/helper/createRenderPlanner.js +6 -3
  60. package/lib/chart/helper/multipleGraphEdgeHelper.js +258 -0
  61. package/lib/chart/helper/whiskerBoxCommon.js +22 -16
  62. package/lib/chart/line/LineSeries.js +3 -1
  63. package/lib/chart/line/LineView.js +41 -2
  64. package/lib/chart/lines/LinesSeries.js +0 -2
  65. package/lib/chart/map/MapSeries.js +14 -5
  66. package/lib/chart/pie/PieSeries.js +27 -6
  67. package/lib/chart/pie/PieView.js +22 -15
  68. package/lib/chart/pie/labelLayout.js +102 -19
  69. package/lib/chart/pie/pieLayout.js +19 -7
  70. package/lib/chart/radar/RadarSeries.js +27 -6
  71. package/lib/chart/radar/RadarView.js +3 -1
  72. package/lib/chart/sankey/SankeySeries.js +13 -1
  73. package/lib/chart/sankey/SankeyView.js +70 -32
  74. package/lib/chart/sankey/sankeyLayout.js +22 -3
  75. package/lib/chart/scatter/ScatterSeries.js +3 -1
  76. package/lib/chart/sunburst/SunburstPiece.js +5 -1
  77. package/lib/chart/sunburst/SunburstSeries.js +29 -12
  78. package/lib/chart/sunburst/SunburstView.js +5 -1
  79. package/lib/chart/themeRiver/ThemeRiverSeries.js +24 -33
  80. package/lib/chart/tree/TreeSeries.js +20 -3
  81. package/lib/chart/tree/TreeView.js +149 -23
  82. package/lib/chart/treemap/TreemapSeries.js +25 -4
  83. package/lib/chart/treemap/TreemapView.js +80 -38
  84. package/lib/chart/treemap/treemapLayout.js +1 -1
  85. package/lib/chart/treemap/treemapVisual.js +9 -15
  86. package/lib/component/axis/AngleAxisView.js +64 -7
  87. package/lib/component/axis/AxisBuilder.js +62 -24
  88. package/lib/component/axis/CartesianAxisView.js +52 -85
  89. package/lib/component/axis/RadiusAxisView.js +36 -4
  90. package/lib/component/axis/SingleAxisView.js +21 -6
  91. package/lib/component/axis/axisSplitHelper.js +132 -0
  92. package/lib/component/axisPointer/axisTrigger.js +1 -1
  93. package/lib/component/brush/BrushView.js +11 -1
  94. package/lib/component/brush/visualEncoding.js +13 -2
  95. package/lib/component/dataZoom/SliderZoomView.js +4 -10
  96. package/lib/component/helper/BrushController.js +33 -43
  97. package/lib/component/helper/MapDraw.js +30 -4
  98. package/lib/component/legend/LegendModel.js +3 -3
  99. package/lib/component/legend/LegendView.js +17 -13
  100. package/lib/component/legend/ScrollableLegendView.js +18 -18
  101. package/lib/component/marker/MarkAreaView.js +53 -15
  102. package/lib/component/marker/MarkLineModel.js +2 -1
  103. package/lib/component/marker/MarkLineView.js +3 -0
  104. package/lib/component/marker/MarkPointView.js +8 -1
  105. package/lib/component/marker/MarkerModel.js +3 -2
  106. package/lib/component/marker/markerHelper.js +7 -4
  107. package/lib/component/timeline/SliderTimelineView.js +7 -1
  108. package/lib/component/title.js +6 -2
  109. package/lib/component/toolbox/ToolboxView.js +5 -1
  110. package/lib/component/toolbox/feature/DataView.js +23 -8
  111. package/lib/component/toolbox/feature/DataZoom.js +6 -6
  112. package/lib/component/toolbox/feature/MagicType.js +20 -14
  113. package/lib/component/toolbox/feature/SaveAsImage.js +4 -2
  114. package/lib/component/tooltip/TooltipContent.js +101 -30
  115. package/lib/component/tooltip/TooltipRichContent.js +56 -8
  116. package/lib/component/tooltip/TooltipView.js +11 -12
  117. package/lib/component/visualMap/PiecewiseModel.js +3 -6
  118. package/lib/component/visualMap/VisualMapModel.js +1 -1
  119. package/lib/coord/Axis.js +30 -2
  120. package/lib/coord/View.js +9 -0
  121. package/lib/coord/axisDefault.js +22 -3
  122. package/lib/coord/axisHelper.js +24 -18
  123. package/lib/coord/calendar/Calendar.js +8 -4
  124. package/lib/coord/geo/GeoModel.js +2 -1
  125. package/lib/coord/geo/geoJSONLoader.js +3 -2
  126. package/lib/coord/geo/geoSourceManager.js +3 -2
  127. package/lib/coord/geo/parseGeoJson.js +3 -2
  128. package/lib/coord/radar/Radar.js +5 -5
  129. package/lib/data/DataDimensionInfo.js +157 -0
  130. package/lib/data/Graph.js +1 -6
  131. package/lib/data/List.js +26 -20
  132. package/lib/data/Tree.js +5 -42
  133. package/lib/data/helper/completeDimensions.js +43 -32
  134. package/lib/data/helper/createDimensions.js +2 -0
  135. package/lib/data/helper/sourceHelper.js +214 -114
  136. package/lib/echarts.js +57 -34
  137. package/lib/langEN.js +26 -0
  138. package/lib/layout/barGrid.js +19 -13
  139. package/lib/layout/barPolar.js +1 -6
  140. package/lib/loading/default.js +43 -27
  141. package/lib/model/Series.js +4 -4
  142. package/lib/model/referHelper.js +40 -12
  143. package/lib/processor/dataSample.js +1 -1
  144. package/lib/scale/Interval.js +87 -2
  145. package/lib/scale/Log.js +9 -2
  146. package/lib/scale/helper.js +1 -43
  147. package/lib/stream/Scheduler.js +10 -2
  148. package/lib/theme/dark.js +3 -0
  149. package/lib/util/format.js +19 -2
  150. package/lib/util/graphic.js +14 -12
  151. package/lib/visual/LegendVisualProvider.js +75 -0
  152. package/lib/visual/VisualMapping.js +1 -1
  153. package/lib/visual/dataColor.js +2 -12
  154. package/lib/visual/seriesColor.js +15 -7
  155. package/lib/visual/symbol.js +12 -2
  156. package/map/.DS_Store +0 -0
  157. package/map/js/.DS_Store +0 -0
  158. package/map/js/china.js +1 -1
  159. package/map/js/province/.DS_Store +0 -0
  160. package/map/js/province/chongqing.js +1 -1
  161. package/map/js/province/gansu.js +2 -2
  162. package/map/js/province/tianjin.js +1 -28
  163. package/map/json/.DS_Store +0 -0
  164. package/map/json/china.json +1 -1
  165. package/map/json/province/chongqing.json +1 -1
  166. package/map/json/province/tianjin.json +1 -1
  167. package/package.json +12 -6
  168. package/src/.DS_Store +0 -0
  169. package/src/chart/.DS_Store +0 -0
  170. package/src/chart/bar/BarSeries.js +15 -1
  171. package/src/chart/bar/BarView.js +198 -17
  172. package/src/chart/bar/BaseBarSeries.js +1 -1
  173. package/src/chart/bar/PictorialBarSeries.js +2 -2
  174. package/src/chart/candlestick/candlestickVisual.js +1 -1
  175. package/src/chart/effectScatter/EffectScatterSeries.js +1 -1
  176. package/src/chart/funnel/FunnelSeries.js +11 -4
  177. package/src/chart/funnel/funnelLayout.js +179 -53
  178. package/src/chart/gauge/GaugeSeries.js +0 -1
  179. package/src/chart/graph/GraphSeries.js +19 -7
  180. package/src/chart/graph/GraphView.js +28 -10
  181. package/src/chart/graph/circularLayoutHelper.js +8 -2
  182. package/src/chart/graph/forceLayout.js +7 -1
  183. package/src/chart/graph/simpleLayout.js +1 -1
  184. package/src/chart/graph/simpleLayoutHelper.js +12 -5
  185. package/src/chart/heatmap/HeatmapView.js +4 -4
  186. package/src/chart/helper/EffectLine.js +23 -1
  187. package/src/chart/helper/EffectSymbol.js +2 -1
  188. package/src/chart/helper/Line.js +122 -37
  189. package/src/chart/helper/LineDraw.js +5 -1
  190. package/src/chart/helper/Symbol.js +4 -4
  191. package/src/chart/helper/createClipPathFromCoordSys.js +4 -0
  192. package/src/chart/helper/createGraphFromNodeEdge.js +2 -1
  193. package/src/chart/helper/createListFromArray.js +13 -8
  194. package/src/chart/helper/createRenderPlanner.js +5 -2
  195. package/src/chart/helper/multipleGraphEdgeHelper.js +229 -0
  196. package/src/chart/helper/whiskerBoxCommon.js +21 -16
  197. package/src/chart/line/LineSeries.js +1 -1
  198. package/src/chart/line/LineView.js +45 -1
  199. package/src/chart/lines/LinesSeries.js +1 -3
  200. package/src/chart/map/MapSeries.js +11 -5
  201. package/src/chart/pie/PieSeries.js +26 -5
  202. package/src/chart/pie/PieView.js +20 -15
  203. package/src/chart/pie/labelLayout.js +114 -22
  204. package/src/chart/pie/pieLayout.js +20 -7
  205. package/src/chart/radar/RadarSeries.js +31 -6
  206. package/src/chart/radar/RadarView.js +4 -2
  207. package/src/chart/sankey/SankeySeries.js +12 -1
  208. package/src/chart/sankey/SankeyView.js +75 -30
  209. package/src/chart/sankey/sankeyLayout.js +25 -5
  210. package/src/chart/scatter/ScatterSeries.js +1 -1
  211. package/src/chart/sunburst/SunburstPiece.js +7 -1
  212. package/src/chart/sunburst/SunburstSeries.js +28 -15
  213. package/src/chart/sunburst/SunburstView.js +2 -1
  214. package/src/chart/themeRiver/ThemeRiverSeries.js +25 -30
  215. package/src/chart/tree/TreeSeries.js +19 -6
  216. package/src/chart/tree/TreeView.js +156 -23
  217. package/src/chart/treemap/TreemapSeries.js +23 -5
  218. package/src/chart/treemap/TreemapView.js +77 -41
  219. package/src/chart/treemap/treemapLayout.js +2 -2
  220. package/src/chart/treemap/treemapVisual.js +8 -25
  221. package/src/component/axis/AngleAxisView.js +75 -7
  222. package/src/component/axis/AxisBuilder.js +77 -32
  223. package/src/component/axis/CartesianAxisView.js +47 -83
  224. package/src/component/axis/RadiusAxisView.js +37 -4
  225. package/src/component/axis/SingleAxisView.js +21 -4
  226. package/src/component/axis/axisSplitHelper.js +114 -0
  227. package/src/component/axisPointer/axisTrigger.js +1 -1
  228. package/src/component/brush/BrushView.js +8 -1
  229. package/src/component/brush/visualEncoding.js +6 -3
  230. package/src/component/dataZoom/SliderZoomView.js +4 -9
  231. package/src/component/helper/BrushController.js +40 -47
  232. package/src/component/helper/MapDraw.js +27 -4
  233. package/src/component/legend/LegendModel.js +3 -3
  234. package/src/component/legend/LegendView.js +18 -12
  235. package/src/component/legend/ScrollableLegendView.js +18 -16
  236. package/src/component/marker/MarkAreaView.js +53 -15
  237. package/src/component/marker/MarkLineModel.js +2 -1
  238. package/src/component/marker/MarkLineView.js +3 -1
  239. package/src/component/marker/MarkPointView.js +7 -1
  240. package/src/component/marker/MarkerModel.js +3 -2
  241. package/src/component/marker/markerHelper.js +8 -5
  242. package/src/component/timeline/SliderTimelineView.js +9 -6
  243. package/src/component/title.js +4 -3
  244. package/src/component/toolbox/.DS_Store +0 -0
  245. package/src/component/toolbox/ToolboxView.js +5 -0
  246. package/src/component/toolbox/feature/DataView.js +20 -8
  247. package/src/component/toolbox/feature/DataZoom.js +6 -6
  248. package/src/component/toolbox/feature/MagicType.js +19 -13
  249. package/src/component/toolbox/feature/SaveAsImage.js +4 -2
  250. package/src/component/tooltip/TooltipContent.js +94 -28
  251. package/src/component/tooltip/TooltipRichContent.js +52 -9
  252. package/src/component/tooltip/TooltipView.js +14 -12
  253. package/src/component/visualMap/PiecewiseModel.js +5 -9
  254. package/src/component/visualMap/VisualMapModel.js +1 -1
  255. package/src/coord/Axis.js +29 -2
  256. package/src/coord/View.js +10 -1
  257. package/src/coord/axisDefault.js +26 -2
  258. package/src/coord/axisHelper.js +30 -21
  259. package/src/coord/calendar/Calendar.js +12 -5
  260. package/src/coord/geo/GeoModel.js +3 -6
  261. package/src/coord/geo/geoJSONLoader.js +3 -2
  262. package/src/coord/geo/geoSourceManager.js +3 -2
  263. package/src/coord/geo/parseGeoJson.js +3 -2
  264. package/src/coord/radar/Radar.js +6 -8
  265. package/src/data/DataDimensionInfo.js +135 -0
  266. package/src/data/Graph.js +0 -5
  267. package/src/data/List.js +30 -17
  268. package/src/data/Tree.js +6 -39
  269. package/src/data/helper/completeDimensions.js +49 -30
  270. package/src/data/helper/createDimensions.js +2 -0
  271. package/src/data/helper/sourceHelper.js +216 -124
  272. package/src/echarts.js +60 -36
  273. package/src/langEN.js +26 -0
  274. package/src/layout/barGrid.js +22 -10
  275. package/src/layout/barPolar.js +4 -6
  276. package/src/loading/default.js +46 -34
  277. package/src/model/.DS_Store +0 -0
  278. package/src/model/Series.js +4 -4
  279. package/src/model/referHelper.js +34 -11
  280. package/src/preprocessor/.DS_Store +0 -0
  281. package/src/processor/dataSample.js +1 -1
  282. package/src/scale/Interval.js +84 -4
  283. package/src/scale/Log.js +9 -2
  284. package/src/scale/helper.js +1 -39
  285. package/src/stream/Scheduler.js +9 -1
  286. package/src/theme/dark.js +3 -0
  287. package/src/util/.DS_Store +0 -0
  288. package/src/util/format.js +17 -1
  289. package/src/util/graphic.js +13 -11
  290. package/src/visual/LegendVisualProvider.js +55 -0
  291. package/src/visual/VisualMapping.js +1 -1
  292. package/src/visual/dataColor.js +0 -13
  293. package/src/visual/seriesColor.js +13 -7
  294. package/src/visual/symbol.js +11 -2
  295. package/theme/.DS_Store +0 -0
  296. package/theme/azul.js +163 -0
  297. package/theme/bee-inspired.js +178 -0
  298. package/theme/blue.js +178 -0
  299. package/theme/caravan.js +178 -0
  300. package/theme/carp.js +163 -0
  301. package/theme/cool.js +180 -0
  302. package/theme/dark-blue.js +168 -0
  303. package/theme/dark-bold.js +168 -0
  304. package/theme/dark-digerati.js +168 -0
  305. package/theme/dark-fresh-cut.js +168 -0
  306. package/theme/dark-mushroom.js +168 -0
  307. package/theme/dark.js +69 -62
  308. package/theme/eduardo.js +178 -0
  309. package/theme/forest.js +163 -0
  310. package/theme/fresh-cut.js +163 -0
  311. package/theme/fruit.js +178 -0
  312. package/theme/gray.js +220 -0
  313. package/theme/green.js +222 -0
  314. package/theme/helianthus.js +263 -0
  315. package/theme/infographic.js +72 -57
  316. package/theme/inspired.js +163 -0
  317. package/theme/jazz.js +163 -0
  318. package/theme/london.js +163 -0
  319. package/theme/macarons.js +80 -57
  320. package/theme/macarons2.js +251 -0
  321. package/theme/mint.js +155 -0
  322. package/theme/red-velvet.js +163 -0
  323. package/theme/red.js +225 -0
  324. package/theme/roma.js +55 -22
  325. package/theme/royal.js +163 -0
  326. package/theme/sakura.js +140 -0
  327. package/theme/shine.js +52 -45
  328. package/theme/tech-blue.js +180 -0
  329. package/theme/vintage.js +37 -23
@@ -70,12 +70,14 @@ var _default = echarts.extendChartView({
70
70
 
71
71
  var symbolSize = normalizeSymbolSize(data.getItemVisual(idx, 'symbolSize'));
72
72
  var symbolPath = symbolUtil.createSymbol(symbolType, -1, -1, 2, 2, color);
73
+ var symbolRotate = data.getItemVisual(idx, 'symbolRotate') || 0;
73
74
  symbolPath.attr({
74
75
  style: {
75
76
  strokeNoScale: true
76
77
  },
77
78
  z2: 100,
78
- scale: [symbolSize[0] / 2, symbolSize[1] / 2]
79
+ scale: [symbolSize[0] / 2, symbolSize[1] / 2],
80
+ rotation: symbolRotate * Math.PI / 180 || 0
79
81
  });
80
82
  return symbolPath;
81
83
  }
@@ -160,6 +160,18 @@ var SankeySeries = SeriesModel.extend({
160
160
  option.focusNodeAdjacency = 'allEdges';
161
161
  }
162
162
  },
163
+ // Override Series.getDataParams()
164
+ getDataParams: function (dataIndex, dataType) {
165
+ var params = SankeySeries.superCall(this, 'getDataParams', dataIndex, dataType);
166
+
167
+ if (params.value == null && dataType === 'node') {
168
+ var node = this.getGraph().getNodeByIndex(dataIndex);
169
+ var nodeValue = node.getLayout().value;
170
+ params.value = nodeValue;
171
+ }
172
+
173
+ return params;
174
+ },
163
175
  defaultOption: {
164
176
  zlevel: 0,
165
177
  z: 2,
@@ -205,7 +217,7 @@ var SankeySeries = SeriesModel.extend({
205
217
  show: true
206
218
  },
207
219
  lineStyle: {
208
- opacity: 0.6
220
+ opacity: 0.5
209
221
  }
210
222
  },
211
223
  animationEasing: 'linear',
@@ -43,7 +43,9 @@ var zrUtil = require("zrender/lib/core/util");
43
43
  * under the License.
44
44
  */
45
45
  var nodeOpacityPath = ['itemStyle', 'opacity'];
46
+ var hoverNodeOpacityPath = ['emphasis', 'itemStyle', 'opacity'];
46
47
  var lineOpacityPath = ['lineStyle', 'opacity'];
48
+ var hoverLineOpacityPath = ['emphasis', 'lineStyle', 'opacity'];
47
49
 
48
50
  function getItemOpacity(item, opacityPath) {
49
51
  return item.getVisual('opacity') || item.getModel().get(opacityPath);
@@ -69,12 +71,13 @@ function fadeOutItem(item, opacityPath, opacityRatio) {
69
71
  function fadeInItem(item, opacityPath) {
70
72
  var opacity = getItemOpacity(item, opacityPath);
71
73
  var el = item.getGraphicEl();
72
- el.highlight && el.highlight();
73
74
  el.traverse(function (child) {
74
75
  if (child.type !== 'group') {
75
76
  child.setStyle('opacity', opacity);
76
77
  }
77
- });
78
+ }); // Support emphasis here.
79
+
80
+ el.highlight && el.highlight();
78
81
  }
79
82
 
80
83
  var SankeyShape = graphic.extendShape({
@@ -104,6 +107,12 @@ var SankeyShape = graphic.extendShape({
104
107
  }
105
108
 
106
109
  ctx.closePath();
110
+ },
111
+ highlight: function () {
112
+ this.trigger('emphasis');
113
+ },
114
+ downplay: function () {
115
+ this.trigger('normal');
107
116
  }
108
117
  });
109
118
 
@@ -266,9 +275,22 @@ var _default = echarts.extendChartView({
266
275
  el.cursor = 'move';
267
276
  }
268
277
 
278
+ el.highlight = function () {
279
+ this.trigger('emphasis');
280
+ };
281
+
282
+ el.downplay = function () {
283
+ this.trigger('normal');
284
+ };
285
+
286
+ el.focusNodeAdjHandler && el.off('mouseover', el.focusNodeAdjHandler);
287
+ el.unfocusNodeAdjHandler && el.off('mouseout', el.unfocusNodeAdjHandler);
288
+
269
289
  if (itemModel.get('focusNodeAdjacency')) {
270
- el.off('mouseover').on('mouseover', function () {
290
+ el.on('mouseover', el.focusNodeAdjHandler = function () {
271
291
  if (!sankeyView._focusAdjacencyDisabled) {
292
+ sankeyView._clearTimer();
293
+
272
294
  api.dispatchAction({
273
295
  type: 'focusNodeAdjacency',
274
296
  seriesId: seriesModel.id,
@@ -276,22 +298,23 @@ var _default = echarts.extendChartView({
276
298
  });
277
299
  }
278
300
  });
279
- el.off('mouseout').on('mouseout', function () {
301
+ el.on('mouseout', el.unfocusNodeAdjHandler = function () {
280
302
  if (!sankeyView._focusAdjacencyDisabled) {
281
- api.dispatchAction({
282
- type: 'unfocusNodeAdjacency',
283
- seriesId: seriesModel.id
284
- });
303
+ sankeyView._dispatchUnfocus(api);
285
304
  }
286
305
  });
287
306
  }
288
307
  });
289
308
  edgeData.eachItemGraphicEl(function (el, dataIndex) {
290
309
  var edgeModel = edgeData.getItemModel(dataIndex);
310
+ el.focusNodeAdjHandler && el.off('mouseover', el.focusNodeAdjHandler);
311
+ el.unfocusNodeAdjHandler && el.off('mouseout', el.unfocusNodeAdjHandler);
291
312
 
292
313
  if (edgeModel.get('focusNodeAdjacency')) {
293
- el.off('mouseover').on('mouseover', function () {
314
+ el.on('mouseover', el.focusNodeAdjHandler = function () {
294
315
  if (!sankeyView._focusAdjacencyDisabled) {
316
+ sankeyView._clearTimer();
317
+
295
318
  api.dispatchAction({
296
319
  type: 'focusNodeAdjacency',
297
320
  seriesId: seriesModel.id,
@@ -299,12 +322,9 @@ var _default = echarts.extendChartView({
299
322
  });
300
323
  }
301
324
  });
302
- el.off('mouseout').on('mouseout', function () {
325
+ el.on('mouseout', el.unfocusNodeAdjHandler = function () {
303
326
  if (!sankeyView._focusAdjacencyDisabled) {
304
- api.dispatchAction({
305
- type: 'unfocusNodeAdjacency',
306
- seriesId: seriesModel.id
307
- });
327
+ sankeyView._dispatchUnfocus(api);
308
328
  }
309
329
  });
310
330
  }
@@ -318,10 +338,30 @@ var _default = echarts.extendChartView({
318
338
 
319
339
  this._data = seriesModel.getData();
320
340
  },
321
- dispose: function () {},
322
- focusNodeAdjacency: function (seriesModel, ecModel, api, payload) {
323
- var data = this._model.getData();
341
+ dispose: function () {
342
+ this._clearTimer();
343
+ },
344
+ _dispatchUnfocus: function (api) {
345
+ var self = this;
324
346
 
347
+ this._clearTimer();
348
+
349
+ this._unfocusDelayTimer = setTimeout(function () {
350
+ self._unfocusDelayTimer = null;
351
+ api.dispatchAction({
352
+ type: 'unfocusNodeAdjacency',
353
+ seriesId: self._model.id
354
+ });
355
+ }, 500);
356
+ },
357
+ _clearTimer: function () {
358
+ if (this._unfocusDelayTimer) {
359
+ clearTimeout(this._unfocusDelayTimer);
360
+ this._unfocusDelayTimer = null;
361
+ }
362
+ },
363
+ focusNodeAdjacency: function (seriesModel, ecModel, api, payload) {
364
+ var data = seriesModel.getData();
325
365
  var graph = data.graph;
326
366
  var dataIndex = payload.dataIndex;
327
367
  var itemModel = data.getItemModel(dataIndex);
@@ -341,7 +381,7 @@ var _default = echarts.extendChartView({
341
381
  });
342
382
 
343
383
  if (node) {
344
- fadeInItem(node, nodeOpacityPath);
384
+ fadeInItem(node, hoverNodeOpacityPath);
345
385
  var focusNodeAdj = itemModel.get('focusNodeAdjacency');
346
386
 
347
387
  if (focusNodeAdj === 'outEdges') {
@@ -350,8 +390,8 @@ var _default = echarts.extendChartView({
350
390
  return;
351
391
  }
352
392
 
353
- fadeInItem(edge, lineOpacityPath);
354
- fadeInItem(edge.node2, nodeOpacityPath);
393
+ fadeInItem(edge, hoverLineOpacityPath);
394
+ fadeInItem(edge.node2, hoverNodeOpacityPath);
355
395
  });
356
396
  } else if (focusNodeAdj === 'inEdges') {
357
397
  zrUtil.each(node.inEdges, function (edge) {
@@ -359,8 +399,8 @@ var _default = echarts.extendChartView({
359
399
  return;
360
400
  }
361
401
 
362
- fadeInItem(edge, lineOpacityPath);
363
- fadeInItem(edge.node1, nodeOpacityPath);
402
+ fadeInItem(edge, hoverLineOpacityPath);
403
+ fadeInItem(edge.node1, hoverNodeOpacityPath);
364
404
  });
365
405
  } else if (focusNodeAdj === 'allEdges') {
366
406
  zrUtil.each(node.edges, function (edge) {
@@ -368,22 +408,21 @@ var _default = echarts.extendChartView({
368
408
  return;
369
409
  }
370
410
 
371
- fadeInItem(edge, lineOpacityPath);
372
- fadeInItem(edge.node1, nodeOpacityPath);
373
- fadeInItem(edge.node2, nodeOpacityPath);
411
+ fadeInItem(edge, hoverLineOpacityPath);
412
+ edge.node1 !== node && fadeInItem(edge.node1, hoverNodeOpacityPath);
413
+ edge.node2 !== node && fadeInItem(edge.node2, hoverNodeOpacityPath);
374
414
  });
375
415
  }
376
416
  }
377
417
 
378
418
  if (edge) {
379
- fadeInItem(edge, lineOpacityPath);
380
- fadeInItem(edge.node1, nodeOpacityPath);
381
- fadeInItem(edge.node2, nodeOpacityPath);
419
+ fadeInItem(edge, hoverLineOpacityPath);
420
+ fadeInItem(edge.node1, hoverNodeOpacityPath);
421
+ fadeInItem(edge.node2, hoverNodeOpacityPath);
382
422
  }
383
423
  },
384
424
  unfocusNodeAdjacency: function (seriesModel, ecModel, api, payload) {
385
- var graph = this._model.getGraph();
386
-
425
+ var graph = seriesModel.getGraph();
387
426
  graph.eachNode(function (node) {
388
427
  fadeOutItem(node, nodeOpacityPath);
389
428
  });
@@ -405,8 +444,7 @@ function createGridClipShape(rect, seriesModel, cb) {
405
444
  });
406
445
  graphic.initProps(rectEl, {
407
446
  shape: {
408
- width: rect.width + 20,
409
- height: rect.height + 20
447
+ width: rect.width + 20
410
448
  }
411
449
  }, seriesModel, cb);
412
450
  return rectEl;
@@ -97,7 +97,8 @@ function computeNodeValues(nodes) {
97
97
  zrUtil.each(nodes, function (node) {
98
98
  var value1 = sum(node.outEdges, getEdgeValue);
99
99
  var value2 = sum(node.inEdges, getEdgeValue);
100
- var value = Math.max(value1, value2);
100
+ var nodeRawValue = node.getValue() || 0;
101
+ var value = Math.max(value1, value2, nodeRawValue);
101
102
  node.setLayout({
102
103
  value: value
103
104
  }, true);
@@ -456,6 +457,11 @@ function relaxRightToLeft(nodesByBreadth, alpha, orient) {
456
457
  if (node.outEdges.length) {
457
458
  var y = sum(node.outEdges, weightedTarget, orient) / sum(node.outEdges, getEdgeValue, orient);
458
459
 
460
+ if (isNaN(y)) {
461
+ var len = node.outEdges.length;
462
+ y = len ? sum(node.outEdges, centerTarget, orient) / len : 0;
463
+ }
464
+
459
465
  if (orient === 'vertical') {
460
466
  var nodeX = node.getLayout().x + (y - center(node, orient)) * alpha;
461
467
  node.setLayout({
@@ -476,10 +482,18 @@ function weightedTarget(edge, orient) {
476
482
  return center(edge.node2, orient) * edge.getValue();
477
483
  }
478
484
 
485
+ function centerTarget(edge, orient) {
486
+ return center(edge.node2, orient);
487
+ }
488
+
479
489
  function weightedSource(edge, orient) {
480
490
  return center(edge.node1, orient) * edge.getValue();
481
491
  }
482
492
 
493
+ function centerSource(edge, orient) {
494
+ return center(edge.node1, orient);
495
+ }
496
+
483
497
  function center(node, orient) {
484
498
  return orient === 'vertical' ? node.getLayout().x + node.getLayout().dx / 2 : node.getLayout().y + node.getLayout().dy / 2;
485
499
  }
@@ -488,13 +502,13 @@ function getEdgeValue(edge) {
488
502
  return edge.getValue();
489
503
  }
490
504
 
491
- function sum(array, f, orient) {
505
+ function sum(array, cb, orient) {
492
506
  var sum = 0;
493
507
  var len = array.length;
494
508
  var i = -1;
495
509
 
496
510
  while (++i < len) {
497
- var value = +f.call(array, array[i], orient);
511
+ var value = +cb.call(array, array[i], orient);
498
512
 
499
513
  if (!isNaN(value)) {
500
514
  sum += value;
@@ -518,6 +532,11 @@ function relaxLeftToRight(nodesByBreadth, alpha, orient) {
518
532
  if (node.inEdges.length) {
519
533
  var y = sum(node.inEdges, weightedSource, orient) / sum(node.inEdges, getEdgeValue, orient);
520
534
 
535
+ if (isNaN(y)) {
536
+ var len = node.inEdges.length;
537
+ y = len ? sum(node.inEdges, centerSource, orient) / len : 0;
538
+ }
539
+
521
540
  if (orient === 'vertical') {
522
541
  var nodeX = node.getLayout().x + (y - center(node, orient)) * alpha;
523
542
  node.setLayout({
@@ -44,7 +44,9 @@ var _default = SeriesModel.extend({
44
44
  type: 'series.scatter',
45
45
  dependencies: ['grid', 'polar', 'geo', 'singleAxis', 'calendar'],
46
46
  getInitialData: function (option, ecModel) {
47
- return createListFromArray(this.getSource(), this);
47
+ return createListFromArray(this.getSource(), this, {
48
+ useEncodeDefaulter: true
49
+ });
48
50
  },
49
51
  brushSelector: 'point',
50
52
  getProgressive: function () {
@@ -149,6 +149,7 @@ SunburstPieceProto.updateData = function (firstCreate, node, state, seriesModel,
149
149
 
150
150
  this._seriesModel = seriesModel || this._seriesModel;
151
151
  this._ecModel = ecModel || this._ecModel;
152
+ graphic.setHoverStyle(this);
152
153
  };
153
154
 
154
155
  SunburstPieceProto.onEmphasis = function (highlightPolicy) {
@@ -187,7 +188,10 @@ SunburstPieceProto._updateLabel = function (seriesModel, visualColor, state) {
187
188
  var normalModel = itemModel.getModel('label');
188
189
  var labelModel = state === 'normal' || state === 'emphasis' ? normalModel : itemModel.getModel(state + '.label');
189
190
  var labelHoverModel = itemModel.getModel('emphasis.label');
190
- var text = zrUtil.retrieve(seriesModel.getFormattedLabel(this.node.dataIndex, state, null, null, 'label'), this.node.name);
191
+ var labelFormatter = labelModel.get('formatter'); // Use normal formatter if no state formatter is defined
192
+
193
+ var labelState = labelFormatter ? state : 'normal';
194
+ var text = zrUtil.retrieve(seriesModel.getFormattedLabel(this.node.dataIndex, labelState, null, null, 'label'), this.node.name);
191
195
 
192
196
  if (getLabelAttr('show') === false) {
193
197
  text = '';
@@ -24,6 +24,8 @@ var SeriesModel = require("../../model/Series");
24
24
 
25
25
  var Tree = require("../../data/Tree");
26
26
 
27
+ var Model = require("../../model/Model");
28
+
27
29
  var _treeHelper = require("../helper/treeHelper");
28
30
 
29
31
  var wrapTreePathInfo = _treeHelper.wrapTreePathInfo;
@@ -60,14 +62,24 @@ var _default = SeriesModel.extend({
60
62
  children: option.data
61
63
  };
62
64
  completeTreeValue(root);
63
- var levels = option.levels || []; // levels = option.levels = setDefault(levels, ecModel);
64
-
65
- var treeOption = {};
66
- treeOption.levels = levels; // Make sure always a new tree is created when setOption,
65
+ var levelModels = zrUtil.map(option.levels || [], function (levelDefine) {
66
+ return new Model(levelDefine, this, ecModel);
67
+ }, this); // Make sure always a new tree is created when setOption,
67
68
  // in TreemapView, we check whether oldTree === newTree
68
69
  // to choose mappings approach among old shapes and new shapes.
69
70
 
70
- return Tree.createTree(root, this, treeOption).data;
71
+ var tree = Tree.createTree(root, this, beforeLink);
72
+
73
+ function beforeLink(nodeData) {
74
+ nodeData.wrapMethod('getItemModel', function (model, idx) {
75
+ var node = tree.getNodeByDataIndex(idx);
76
+ var levelModel = levelModels[node.depth];
77
+ levelModel && (model.parentModel = levelModel);
78
+ return model;
79
+ });
80
+ }
81
+
82
+ return tree.data;
71
83
  },
72
84
  optionUpdated: function () {
73
85
  this.resetViewRoot();
@@ -113,8 +125,7 @@ var _default = SeriesModel.extend({
113
125
  align: 'center',
114
126
  position: 'inside',
115
127
  distance: 5,
116
- silent: true,
117
- emphasis: {}
128
+ silent: true
118
129
  },
119
130
  itemStyle: {
120
131
  borderWidth: 1,
@@ -124,13 +135,19 @@ var _default = SeriesModel.extend({
124
135
  shadowColor: 'rgba(0, 0, 0, 0.2)',
125
136
  shadowOffsetX: 0,
126
137
  shadowOffsetY: 0,
127
- opacity: 1,
128
- emphasis: {},
129
- highlight: {
138
+ opacity: 1
139
+ },
140
+ highlight: {
141
+ itemStyle: {
130
142
  opacity: 1
143
+ }
144
+ },
145
+ downplay: {
146
+ itemStyle: {
147
+ opacity: 0.5
131
148
  },
132
- downplay: {
133
- opacity: 0.9
149
+ label: {
150
+ opacity: 0.6
134
151
  }
135
152
  },
136
153
  // Animation type canbe expansion, scale
@@ -26,6 +26,10 @@ var SunburstPiece = require("./SunburstPiece");
26
26
 
27
27
  var DataDiffer = require("../../data/DataDiffer");
28
28
 
29
+ var _format = require("../../util/format");
30
+
31
+ var windowOpen = _format.windowOpen;
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
@@ -193,7 +197,7 @@ var SunburstView = ChartView.extend({
193
197
 
194
198
  if (link) {
195
199
  var linkTarget = itemModel.get('target', true) || '_blank';
196
- window.open(link, linkTarget);
200
+ windowOpen(link, linkTarget);
197
201
  }
198
202
  }
199
203
 
@@ -38,6 +38,8 @@ var _format = require("../../util/format");
38
38
 
39
39
  var encodeHTML = _format.encodeHTML;
40
40
 
41
+ var LegendVisualProvider = require("../../visual/LegendVisualProvider");
42
+
41
43
  /*
42
44
  * Licensed to the Apache Software Foundation (ASF) under one
43
45
  * or more contributor license agreements. See the NOTICE file
@@ -76,9 +78,7 @@ var ThemeRiverSeries = SeriesModel.extend({
76
78
  // Enable legend selection for each data item
77
79
  // Use a function instead of direct access because data reference may changed
78
80
 
79
- this.legendDataProvider = function () {
80
- return this.getRawData();
81
- };
81
+ this.legendVisualProvider = new LegendVisualProvider(zrUtil.bind(this.getData, this), zrUtil.bind(this.getRawData, this));
82
82
  },
83
83
 
84
84
  /**
@@ -88,9 +88,22 @@ var ThemeRiverSeries = SeriesModel.extend({
88
88
  * @return {Array}
89
89
  */
90
90
  fixData: function (data) {
91
- var rawDataLength = data.length; // grouped data by name
91
+ var rawDataLength = data.length;
92
+ /**
93
+ * Make sure every layer data get the same keys.
94
+ * The value index tells which layer has visited.
95
+ * {
96
+ * 2014/01/01: -1
97
+ * }
98
+ */
99
+
100
+ var timeValueKeys = {}; // grouped data by name
92
101
 
93
102
  var groupResult = groupData(data, function (item) {
103
+ if (!timeValueKeys.hasOwnProperty(item[0])) {
104
+ timeValueKeys[item[0]] = -1;
105
+ }
106
+
94
107
  return item[2];
95
108
  });
96
109
  var layData = [];
@@ -101,40 +114,18 @@ var ThemeRiverSeries = SeriesModel.extend({
101
114
  });
102
115
  });
103
116
  var layerNum = layData.length;
104
- var largestLayer = -1;
105
- var index = -1;
106
-
107
- for (var i = 0; i < layerNum; ++i) {
108
- var len = layData[i].dataList.length;
109
-
110
- if (len > largestLayer) {
111
- largestLayer = len;
112
- index = i;
113
- }
114
- }
115
117
 
116
118
  for (var k = 0; k < layerNum; ++k) {
117
- if (k === index) {
118
- continue;
119
- }
120
-
121
119
  var name = layData[k].name;
122
120
 
123
- for (var j = 0; j < largestLayer; ++j) {
124
- var timeValue = layData[index].dataList[j][0];
125
- var length = layData[k].dataList.length;
126
- var keyIndex = -1;
127
-
128
- for (var l = 0; l < length; ++l) {
129
- var value = layData[k].dataList[l][0];
130
-
131
- if (value === timeValue) {
132
- keyIndex = l;
133
- break;
134
- }
135
- }
121
+ for (var j = 0; j < layData[k].dataList.length; ++j) {
122
+ var timeValue = layData[k].dataList[j][0];
123
+ timeValueKeys[timeValue] = k;
124
+ }
136
125
 
137
- if (keyIndex === -1) {
126
+ for (var timeValue in timeValueKeys) {
127
+ if (timeValueKeys.hasOwnProperty(timeValue) && timeValueKeys[timeValue] !== k) {
128
+ timeValueKeys[timeValue] = k;
138
129
  data[rawDataLength] = [];
139
130
  data[rawDataLength][0] = timeValue;
140
131
  data[rawDataLength][1] = 0;
@@ -26,6 +26,8 @@ var _format = require("../../util/format");
26
26
 
27
27
  var encodeHTML = _format.encodeHTML;
28
28
 
29
+ var Model = require("../../model/Model");
30
+
29
31
  /*
30
32
  * Licensed to the Apache Software Foundation (ASF) under one
31
33
  * or more contributor license agreements. See the NOTICE file
@@ -63,9 +65,21 @@ var _default = SeriesModel.extend({
63
65
  children: option.data
64
66
  };
65
67
  var leaves = option.leaves || {};
66
- var treeOption = {};
67
- treeOption.leaves = leaves;
68
- var tree = Tree.createTree(root, this, treeOption);
68
+ var leavesModel = new Model(leaves, this, this.ecModel);
69
+ var tree = Tree.createTree(root, this, beforeLink);
70
+
71
+ function beforeLink(nodeData) {
72
+ nodeData.wrapMethod('getItemModel', function (model, idx) {
73
+ var node = tree.getNodeByDataIndex(idx);
74
+
75
+ if (!node.children.length || !node.isExpand) {
76
+ model.parentModel = leavesModel;
77
+ }
78
+
79
+ return model;
80
+ });
81
+ }
82
+
69
83
  var treeDepth = 0;
70
84
  tree.eachNode('preorder', function (node) {
71
85
  if (node.depth > treeDepth) {
@@ -133,6 +147,9 @@ var _default = SeriesModel.extend({
133
147
  bottom: '12%',
134
148
  // the layout of the tree, two value can be selected, 'orthogonal' or 'radial'
135
149
  layout: 'orthogonal',
150
+ // value can be 'polyline'
151
+ edgeShape: 'curve',
152
+ edgeForkPosition: '50%',
136
153
  // true | false | 'move' | 'scale', see module:component/helper/RoamController.
137
154
  roam: false,
138
155
  // Symbol size scale ratio in roam