echarts 4.8.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 (145) hide show
  1. package/.DS_Store +0 -0
  2. package/.gitattributes +3 -0
  3. package/.github/workflows/nodejs.yml +3 -1
  4. package/.huskyrc +5 -0
  5. package/README.md +1 -1
  6. package/asset/.DS_Store +0 -0
  7. package/build/.DS_Store +0 -0
  8. package/dist/echarts-en.common.js +284 -93
  9. package/dist/echarts-en.common.min.js +1 -1
  10. package/dist/echarts-en.js +816 -284
  11. package/dist/echarts-en.js.map +1 -1
  12. package/dist/echarts-en.min.js +1 -1
  13. package/dist/echarts-en.simple.js +60 -26
  14. package/dist/echarts-en.simple.min.js +1 -1
  15. package/dist/echarts.common.js +284 -93
  16. package/dist/echarts.common.min.js +1 -1
  17. package/dist/echarts.js +816 -284
  18. package/dist/echarts.js.map +1 -1
  19. package/dist/echarts.min.js +1 -1
  20. package/dist/echarts.simple.js +60 -26
  21. package/dist/echarts.simple.min.js +1 -1
  22. package/dist/extension/bmap.js +33 -345
  23. package/dist/extension/bmap.js.map +1 -1
  24. package/dist/extension/bmap.min.js +1 -1
  25. package/dist/extension/dataTool.js.map +1 -1
  26. package/extension/.DS_Store +0 -0
  27. package/extension/bmap/BMapCoordSys.js +14 -4
  28. package/extension/bmap/BMapModel.js +4 -0
  29. package/extension/bmap/BMapView.js +18 -14
  30. package/extension-src/bmap/BMapCoordSys.js +14 -4
  31. package/extension-src/bmap/BMapModel.js +6 -1
  32. package/extension-src/bmap/BMapView.js +16 -10
  33. package/lib/chart/bar/BarView.js +49 -16
  34. package/lib/chart/bar/PictorialBarSeries.js +1 -1
  35. package/lib/chart/funnel/FunnelSeries.js +1 -0
  36. package/lib/chart/funnel/funnelLayout.js +162 -46
  37. package/lib/chart/graph/GraphSeries.js +12 -2
  38. package/lib/chart/graph/circularLayoutHelper.js +8 -2
  39. package/lib/chart/graph/forceLayout.js +6 -1
  40. package/lib/chart/graph/simpleLayout.js +1 -1
  41. package/lib/chart/graph/simpleLayoutHelper.js +10 -4
  42. package/lib/chart/helper/Line.js +35 -9
  43. package/lib/chart/helper/Symbol.js +1 -1
  44. package/lib/chart/helper/multipleGraphEdgeHelper.js +258 -0
  45. package/lib/chart/lines/LinesSeries.js +0 -2
  46. package/lib/chart/map/MapSeries.js +3 -2
  47. package/lib/chart/radar/RadarSeries.js +4 -3
  48. package/lib/chart/radar/RadarView.js +3 -1
  49. package/lib/chart/sunburst/SunburstPiece.js +4 -1
  50. package/lib/chart/sunburst/SunburstSeries.js +17 -5
  51. package/lib/chart/themeRiver/ThemeRiverSeries.js +21 -30
  52. package/lib/chart/tree/TreeSeries.js +1 -1
  53. package/lib/chart/tree/TreeView.js +4 -4
  54. package/lib/chart/treemap/TreemapSeries.js +14 -5
  55. package/lib/chart/treemap/treemapLayout.js +1 -1
  56. package/lib/chart/treemap/treemapVisual.js +9 -15
  57. package/lib/component/axisPointer/axisTrigger.js +1 -1
  58. package/lib/component/legend/ScrollableLegendView.js +1 -1
  59. package/lib/component/marker/MarkAreaView.js +53 -15
  60. package/lib/component/marker/MarkLineView.js +3 -0
  61. package/lib/component/marker/MarkPointView.js +8 -1
  62. package/lib/component/marker/MarkerModel.js +3 -2
  63. package/lib/component/timeline/SliderTimelineView.js +7 -1
  64. package/lib/component/title.js +1 -1
  65. package/lib/component/toolbox/feature/DataView.js +23 -8
  66. package/lib/component/toolbox/feature/DataZoom.js +6 -6
  67. package/lib/component/toolbox/feature/SaveAsImage.js +2 -1
  68. package/lib/component/tooltip/TooltipContent.js +42 -8
  69. package/lib/component/tooltip/TooltipRichContent.js +56 -8
  70. package/lib/component/tooltip/TooltipView.js +4 -4
  71. package/lib/component/visualMap/VisualMapModel.js +1 -1
  72. package/lib/coord/axisDefault.js +1 -1
  73. package/lib/coord/axisHelper.js +2 -2
  74. package/lib/coord/geo/GeoModel.js +2 -1
  75. package/lib/data/Graph.js +1 -6
  76. package/lib/data/List.js +1 -1
  77. package/lib/data/Tree.js +4 -31
  78. package/lib/echarts.js +2 -2
  79. package/lib/layout/barPolar.js +1 -1
  80. package/lib/processor/dataSample.js +1 -1
  81. package/lib/stream/Scheduler.js +1 -1
  82. package/lib/visual/VisualMapping.js +1 -1
  83. package/map/.DS_Store +0 -0
  84. package/map/js/.DS_Store +0 -0
  85. package/map/js/province/.DS_Store +0 -0
  86. package/map/json/.DS_Store +0 -0
  87. package/package.json +3 -2
  88. package/src/.DS_Store +0 -0
  89. package/src/chart/.DS_Store +0 -0
  90. package/src/chart/bar/BarView.js +50 -16
  91. package/src/chart/bar/PictorialBarSeries.js +2 -2
  92. package/src/chart/funnel/FunnelSeries.js +1 -0
  93. package/src/chart/funnel/funnelLayout.js +179 -53
  94. package/src/chart/graph/GraphSeries.js +9 -3
  95. package/src/chart/graph/circularLayoutHelper.js +8 -2
  96. package/src/chart/graph/forceLayout.js +7 -1
  97. package/src/chart/graph/simpleLayout.js +1 -1
  98. package/src/chart/graph/simpleLayoutHelper.js +12 -5
  99. package/src/chart/helper/Line.js +38 -11
  100. package/src/chart/helper/Symbol.js +2 -2
  101. package/src/chart/helper/createGraphFromNodeEdge.js +2 -1
  102. package/src/chart/helper/multipleGraphEdgeHelper.js +229 -0
  103. package/src/chart/lines/LinesSeries.js +1 -3
  104. package/src/chart/map/MapSeries.js +3 -2
  105. package/src/chart/radar/RadarSeries.js +4 -3
  106. package/src/chart/radar/RadarView.js +4 -2
  107. package/src/chart/sunburst/SunburstPiece.js +5 -1
  108. package/src/chart/sunburst/SunburstSeries.js +16 -8
  109. package/src/chart/themeRiver/ThemeRiverSeries.js +21 -27
  110. package/src/chart/tree/TreeSeries.js +1 -1
  111. package/src/chart/tree/TreeView.js +3 -3
  112. package/src/chart/treemap/TreemapSeries.js +11 -3
  113. package/src/chart/treemap/treemapLayout.js +2 -2
  114. package/src/chart/treemap/treemapVisual.js +8 -25
  115. package/src/component/axisPointer/axisTrigger.js +1 -1
  116. package/src/component/legend/ScrollableLegendView.js +1 -1
  117. package/src/component/marker/MarkAreaView.js +53 -15
  118. package/src/component/marker/MarkLineView.js +3 -1
  119. package/src/component/marker/MarkPointView.js +7 -1
  120. package/src/component/marker/MarkerModel.js +3 -2
  121. package/src/component/timeline/SliderTimelineView.js +9 -6
  122. package/src/component/title.js +2 -2
  123. package/src/component/toolbox/.DS_Store +0 -0
  124. package/src/component/toolbox/feature/DataView.js +20 -8
  125. package/src/component/toolbox/feature/DataZoom.js +6 -6
  126. package/src/component/toolbox/feature/SaveAsImage.js +2 -1
  127. package/src/component/tooltip/TooltipContent.js +36 -7
  128. package/src/component/tooltip/TooltipRichContent.js +52 -9
  129. package/src/component/tooltip/TooltipView.js +4 -4
  130. package/src/component/visualMap/VisualMapModel.js +1 -1
  131. package/src/coord/axisDefault.js +1 -1
  132. package/src/coord/axisHelper.js +4 -2
  133. package/src/coord/geo/GeoModel.js +3 -6
  134. package/src/data/Graph.js +0 -5
  135. package/src/data/List.js +1 -1
  136. package/src/data/Tree.js +4 -32
  137. package/src/echarts.js +2 -2
  138. package/src/layout/barPolar.js +4 -2
  139. package/src/model/.DS_Store +0 -0
  140. package/src/preprocessor/.DS_Store +0 -0
  141. package/src/processor/dataSample.js +1 -1
  142. package/src/stream/Scheduler.js +1 -1
  143. package/src/util/.DS_Store +0 -0
  144. package/src/visual/VisualMapping.js +1 -1
  145. package/theme/.DS_Store +0 -0
@@ -19,6 +19,8 @@
19
19
 
20
20
  import * as vec2 from 'zrender/src/core/vector';
21
21
  import {getSymbolSize, getNodeGlobalScale} from './graphHelper';
22
+ import * as zrUtil from 'zrender/src/core/util';
23
+ import {getCurvenessForEdge} from '../helper/multipleGraphEdgeHelper';
22
24
 
23
25
  var PI = Math.PI;
24
26
 
@@ -73,8 +75,12 @@ export function circularLayout(seriesModel, basedOn) {
73
75
 
74
76
  _layoutNodesBasedOn[basedOn](seriesModel, coordSys, graph, nodeData, r, cx, cy, count);
75
77
 
76
- graph.eachEdge(function (edge) {
77
- var curveness = edge.getModel().get('lineStyle.curveness') || 0;
78
+ graph.eachEdge(function (edge, index) {
79
+ var curveness = zrUtil.retrieve3(
80
+ edge.getModel().get('lineStyle.curveness'),
81
+ getCurvenessForEdge(edge, seriesModel, index),
82
+ 0
83
+ );
78
84
  var p1 = vec2.clone(edge.node1.getLayout());
79
85
  var p2 = vec2.clone(edge.node2.getLayout());
80
86
  var cp1;
@@ -23,6 +23,7 @@ import {circularLayout} from './circularLayoutHelper';
23
23
  import {linearMap} from '../../util/number';
24
24
  import * as vec2 from 'zrender/src/core/vector';
25
25
  import * as zrUtil from 'zrender/src/core/util';
26
+ import {getCurvenessForEdge} from '../helper/multipleGraphEdgeHelper';
26
27
 
27
28
  export default function (ecModel) {
28
29
  ecModel.eachSeriesByType('graph', function (graphSeries) {
@@ -84,11 +85,16 @@ export default function (ecModel) {
84
85
  d = (edgeLength[0] + edgeLength[1]) / 2;
85
86
  }
86
87
  var edgeModel = edge.getModel();
88
+ var curveness = zrUtil.retrieve3(
89
+ edgeModel.get('lineStyle.curveness'),
90
+ -getCurvenessForEdge(edge, graphSeries, idx, true),
91
+ 0
92
+ );
87
93
  return {
88
94
  n1: nodes[edge.node1.dataIndex],
89
95
  n2: nodes[edge.node2.dataIndex],
90
96
  d: d,
91
- curveness: edgeModel.get('lineStyle.curveness') || 0,
97
+ curveness: curveness,
92
98
  ignoreForceLayout: edgeModel.get('ignoreForceLayout')
93
99
  };
94
100
  });
@@ -51,7 +51,7 @@ export default function (ecModel, api) {
51
51
  }
52
52
  }
53
53
 
54
- simpleLayoutEdge(data.graph);
54
+ simpleLayoutEdge(data.graph, seriesModel);
55
55
  }
56
56
  else if (!layout || layout === 'none') {
57
57
  simpleLayout(seriesModel);
@@ -18,6 +18,9 @@
18
18
  */
19
19
 
20
20
  import * as vec2 from 'zrender/src/core/vector';
21
+ import * as zrUtil from 'zrender/src/core/util';
22
+ import {getCurvenessForEdge} from '../helper/multipleGraphEdgeHelper';
23
+
21
24
 
22
25
  export function simpleLayout(seriesModel) {
23
26
  var coordSys = seriesModel.coordinateSystem;
@@ -31,12 +34,16 @@ export function simpleLayout(seriesModel) {
31
34
  node.setLayout([+model.get('x'), +model.get('y')]);
32
35
  });
33
36
 
34
- simpleLayoutEdge(graph);
37
+ simpleLayoutEdge(graph, seriesModel);
35
38
  }
36
39
 
37
- export function simpleLayoutEdge(graph) {
38
- graph.eachEdge(function (edge) {
39
- var curveness = edge.getModel().get('lineStyle.curveness') || 0;
40
+ export function simpleLayoutEdge(graph, seriesModel) {
41
+ graph.eachEdge(function (edge, index) {
42
+ var curveness = zrUtil.retrieve3(
43
+ edge.getModel().get('lineStyle.curveness'),
44
+ -getCurvenessForEdge(edge, seriesModel, index, true),
45
+ 0
46
+ );
40
47
  var p1 = vec2.clone(edge.node1.getLayout());
41
48
  var p2 = vec2.clone(edge.node2.getLayout());
42
49
  var points = [p1, p2];
@@ -48,4 +55,4 @@ export function simpleLayoutEdge(graph) {
48
55
  }
49
56
  edge.setLayout(points);
50
57
  });
51
- }
58
+ }
@@ -37,22 +37,29 @@ function makeSymbolTypeKey(symbolCategory) {
37
37
  * @inner
38
38
  */
39
39
  function createSymbol(name, lineData, idx) {
40
- var color = lineData.getItemVisual(idx, 'color');
41
40
  var symbolType = lineData.getItemVisual(idx, name);
42
- var symbolSize = lineData.getItemVisual(idx, name + 'Size');
43
41
 
44
42
  if (!symbolType || symbolType === 'none') {
45
43
  return;
46
44
  }
47
45
 
46
+ var color = lineData.getItemVisual(idx, 'color');
47
+ var symbolSize = lineData.getItemVisual(idx, name + 'Size');
48
+ var symbolRotate = lineData.getItemVisual(idx, name + 'Rotate');
49
+
48
50
  if (!zrUtil.isArray(symbolSize)) {
49
51
  symbolSize = [symbolSize, symbolSize];
50
52
  }
53
+
51
54
  var symbolPath = symbolUtil.createSymbol(
52
55
  symbolType, -symbolSize[0] / 2, -symbolSize[1] / 2,
53
56
  symbolSize[0], symbolSize[1], color
54
57
  );
55
58
 
59
+ // rotate by default if symbolRotate is not specified or NaN
60
+ symbolPath.__specifiedRotation = symbolRotate == null || isNaN(symbolRotate)
61
+ ? void 0
62
+ : +symbolRotate * Math.PI / 180 || 0;
56
63
  symbolPath.name = name;
57
64
 
58
65
  return symbolPath;
@@ -120,18 +127,38 @@ function updateSymbolAndLabelBeforeLineUpdate() {
120
127
 
121
128
  if (symbolFrom) {
122
129
  symbolFrom.attr('position', fromPos);
123
- var tangent = line.tangentAt(0);
124
- symbolFrom.attr('rotation', Math.PI / 2 - Math.atan2(
125
- tangent[1], tangent[0]
126
- ));
130
+ // Fix #12388
131
+ // when symbol is set to be 'arrow' in markLine,
132
+ // symbolRotate value will be ignored, and compulsively use tangent angle.
133
+ // rotate by default if symbol rotation is not specified
134
+ var specifiedRotation = symbolFrom.__specifiedRotation;
135
+ if (specifiedRotation == null) {
136
+ var tangent = line.tangentAt(0);
137
+ symbolFrom.attr('rotation', Math.PI / 2 - Math.atan2(
138
+ tangent[1], tangent[0]
139
+ ));
140
+ }
141
+ else {
142
+ symbolFrom.attr('rotation', specifiedRotation);
143
+ }
127
144
  symbolFrom.attr('scale', [invScale * percent, invScale * percent]);
128
145
  }
129
146
  if (symbolTo) {
130
147
  symbolTo.attr('position', toPos);
131
- var tangent = line.tangentAt(1);
132
- symbolTo.attr('rotation', -Math.PI / 2 - Math.atan2(
133
- tangent[1], tangent[0]
134
- ));
148
+ // Fix #12388
149
+ // when symbol is set to be 'arrow' in markLine,
150
+ // symbolRotate value will be ignored, and compulsively use tangent angle.
151
+ // rotate by default if symbol rotation is not specified
152
+ var specifiedRotation = symbolTo.__specifiedRotation;
153
+ if (specifiedRotation == null) {
154
+ var tangent = line.tangentAt(1);
155
+ symbolTo.attr('rotation', -Math.PI / 2 - Math.atan2(
156
+ tangent[1], tangent[0]
157
+ ));
158
+ }
159
+ else {
160
+ symbolTo.attr('rotation', specifiedRotation);
161
+ }
135
162
  symbolTo.attr('scale', [invScale * percent, invScale * percent]);
136
163
  }
137
164
 
@@ -461,4 +488,4 @@ lineProto.setLinePoints = function (points) {
461
488
 
462
489
  zrUtil.inherits(Line, graphic.Group);
463
490
 
464
- export default Line;
491
+ export default Line;
@@ -238,7 +238,7 @@ symbolProto._updateCommon = function (data, idx, symbolSize, seriesScope) {
238
238
  }
239
239
  else {
240
240
  symbolPath.setStyle({
241
- opacity: null,
241
+ opacity: 1,
242
242
  shadowBlur: null,
243
243
  shadowOffsetX: null,
244
244
  shadowOffsetY: null,
@@ -394,4 +394,4 @@ symbolProto.fadeOut = function (cb, opt) {
394
394
 
395
395
  zrUtil.inherits(SymbolClz, graphic.Group);
396
396
 
397
- export default SymbolClz;
397
+ export default SymbolClz;
@@ -39,10 +39,12 @@ export default function (nodes, edges, seriesModel, directed, beforeLink) {
39
39
  var linkNameList = [];
40
40
  var validEdges = [];
41
41
  var linkCount = 0;
42
+
42
43
  for (var i = 0; i < edges.length; i++) {
43
44
  var link = edges[i];
44
45
  var source = link.source;
45
46
  var target = link.target;
47
+
46
48
  // addEdge may fail when source or target not exists
47
49
  if (graph.addEdge(source, target, linkCount)) {
48
50
  validEdges.push(link);
@@ -89,6 +91,5 @@ export default function (nodes, edges, seriesModel, directed, beforeLink) {
89
91
 
90
92
  // Update dataIndex of nodes and edges because invalid edge may be removed
91
93
  graph.update();
92
-
93
94
  return graph;
94
95
  }
@@ -0,0 +1,229 @@
1
+ /*
2
+ * Licensed to the Apache Software Foundation (ASF) under one
3
+ * or more contributor license agreements. See the NOTICE file
4
+ * distributed with this work for additional information
5
+ * regarding copyright ownership. The ASF licenses this file
6
+ * to you under the Apache License, Version 2.0 (the
7
+ * "License"); you may not use this file except in compliance
8
+ * with the License. You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing,
13
+ * software distributed under the License is distributed on an
14
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ * KIND, either express or implied. See the License for the
16
+ * specific language governing permissions and limitations
17
+ * under the License.
18
+ */
19
+
20
+ import * as zrUtil from 'zrender/src/core/util';
21
+
22
+ var KEY_DELIMITER = '-->';
23
+ /**
24
+ * params handler
25
+ * @param {module:echarts/model/SeriesModel} seriesModel
26
+ * @returns {*}
27
+ */
28
+ var getAutoCurvenessParams = function (seriesModel) {
29
+ return seriesModel.get('autoCurveness') || null;
30
+ };
31
+
32
+ /**
33
+ * Generate a list of edge curvatures, 20 is the default
34
+ * @param {module:echarts/model/SeriesModel} seriesModel
35
+ * @param {number} appendLength
36
+ * @return 20 => [0, -0.2, 0.2, -0.4, 0.4, -0.6, 0.6, -0.8, 0.8, -1, 1, -1.2, 1.2, -1.4, 1.4, -1.6, 1.6, -1.8, 1.8, -2]
37
+ */
38
+ var createCurveness = function (seriesModel, appendLength) {
39
+ var autoCurvenessParmas = getAutoCurvenessParams(seriesModel);
40
+ var length = 20;
41
+ var curvenessList = [];
42
+
43
+ // handler the function set
44
+ if (typeof autoCurvenessParmas === 'number') {
45
+ length = autoCurvenessParmas;
46
+ }
47
+ else if (zrUtil.isArray(autoCurvenessParmas)) {
48
+ seriesModel.__curvenessList = autoCurvenessParmas;
49
+ return;
50
+ }
51
+
52
+ // append length
53
+ if (appendLength > length) {
54
+ length = appendLength;
55
+ }
56
+
57
+ // make sure the length is even
58
+ var len = length % 2 ? length + 2 : length + 3;
59
+ curvenessList = [];
60
+
61
+ for (var i = 0; i < len; i++) {
62
+ curvenessList.push((i % 2 ? i + 1 : i) / 10 * (i % 2 ? -1 : 1));
63
+ }
64
+ seriesModel.__curvenessList = curvenessList;
65
+ };
66
+
67
+ /**
68
+ * Create different cache key data in the positive and negative directions, in order to set the curvature later
69
+ * @param {number|string|module:echarts/data/Graph.Node} n1
70
+ * @param {number|string|module:echarts/data/Graph.Node} n2
71
+ * @param {module:echarts/model/SeriesModel} seriesModel
72
+ * @returns {string} key
73
+ */
74
+ var getKeyOfEdges = function (n1, n2, seriesModel) {
75
+ var source = [n1.id, n1.dataIndex].join('.');
76
+ var target = [n2.id, n2.dataIndex].join('.');
77
+ return [seriesModel.uid, source, target].join(KEY_DELIMITER);
78
+ };
79
+
80
+ /**
81
+ * get opposite key
82
+ * @param {string} key
83
+ * @returns {string}
84
+ */
85
+ var getOppositeKey = function (key) {
86
+ var keys = key.split(KEY_DELIMITER);
87
+ return [keys[0], keys[2], keys[1]].join(KEY_DELIMITER);
88
+ };
89
+
90
+ /**
91
+ * get edgeMap with key
92
+ * @param edge
93
+ * @param {module:echarts/model/SeriesModel} seriesModel
94
+ */
95
+ var getEdgeFromMap = function (edge, seriesModel) {
96
+ var key = getKeyOfEdges(edge.node1, edge.node2, seriesModel);
97
+ return seriesModel.__edgeMap[key];
98
+ };
99
+
100
+ /**
101
+ * calculate all cases total length
102
+ * @param edge
103
+ * @param seriesModel
104
+ * @returns {number}
105
+ */
106
+ var getTotalLengthBetweenNodes = function (edge, seriesModel) {
107
+ var len = getEdgeMapLengthWithKey(getKeyOfEdges(edge.node1, edge.node2, seriesModel), seriesModel);
108
+ var lenV = getEdgeMapLengthWithKey(getKeyOfEdges(edge.node2, edge.node1, seriesModel), seriesModel);
109
+
110
+ return len + lenV;
111
+ };
112
+
113
+ /**
114
+ *
115
+ * @param key
116
+ */
117
+ var getEdgeMapLengthWithKey = function (key, seriesModel) {
118
+ var edgeMap = seriesModel.__edgeMap;
119
+ return edgeMap[key] ? edgeMap[key].length : 0;
120
+ };
121
+
122
+ /**
123
+ * Count the number of edges between the same two points, used to obtain the curvature table and the parity of the edge
124
+ * @see /graph/GraphSeries.js@getInitialData
125
+ * @param {module:echarts/model/SeriesModel} seriesModel
126
+ */
127
+ export function initCurvenessList(seriesModel) {
128
+ if (!getAutoCurvenessParams(seriesModel)) {
129
+ return;
130
+ }
131
+
132
+ seriesModel.__curvenessList = [];
133
+ seriesModel.__edgeMap = {};
134
+ // calc the array of curveness List
135
+ createCurveness(seriesModel);
136
+ }
137
+
138
+ /**
139
+ * set edgeMap with key
140
+ * @param {number|string|module:echarts/data/Graph.Node} n1
141
+ * @param {number|string|module:echarts/data/Graph.Node} n2
142
+ * @param {module:echarts/model/SeriesModel} seriesModel
143
+ * @param {number} index
144
+ */
145
+ export function createEdgeMapForCurveness(n1, n2, seriesModel, index) {
146
+ if (!getAutoCurvenessParams(seriesModel)) {
147
+ return;
148
+ }
149
+
150
+ var key = getKeyOfEdges(n1, n2, seriesModel);
151
+ var edgeMap = seriesModel.__edgeMap;
152
+ var oppositeEdges = edgeMap[getOppositeKey(key)];
153
+ // set direction
154
+ if (edgeMap[key] && !oppositeEdges) {
155
+ edgeMap[key].isForward = true;
156
+ }
157
+ else if (oppositeEdges && edgeMap[key]) {
158
+ oppositeEdges.isForward = true;
159
+ edgeMap[key].isForward = false;
160
+ }
161
+
162
+ edgeMap[key] = edgeMap[key] || [];
163
+ edgeMap[key].push(index);
164
+ }
165
+
166
+ /**
167
+ * get curvature for edge
168
+ * @param edge
169
+ * @param {module:echarts/model/SeriesModel} seriesModel
170
+ * @param index
171
+ */
172
+ export function getCurvenessForEdge(edge, seriesModel, index, needReverse) {
173
+ var autoCurvenessParams = getAutoCurvenessParams(seriesModel);
174
+ var isArrayParam = zrUtil.isArray(autoCurvenessParams);
175
+ if (!autoCurvenessParams) {
176
+ return null;
177
+ }
178
+
179
+ var edgeArray = getEdgeFromMap(edge, seriesModel);
180
+ if (!edgeArray) {
181
+ return null;
182
+ }
183
+
184
+ var edgeIndex = -1;
185
+ for (var i = 0; i < edgeArray.length; i++) {
186
+ if (edgeArray[i] === index) {
187
+ edgeIndex = i;
188
+ break;
189
+ }
190
+ }
191
+ // if totalLen is Longer createCurveness
192
+ var totalLen = getTotalLengthBetweenNodes(edge, seriesModel);
193
+ createCurveness(seriesModel, totalLen);
194
+
195
+ edge.lineStyle = edge.lineStyle || {};
196
+ // if is opposite edge, must set curvenss to opposite number
197
+ var curKey = getKeyOfEdges(edge.node1, edge.node2, seriesModel);
198
+ var curvenessList = seriesModel.__curvenessList;
199
+ // if pass array no need parity
200
+ var parityCorrection = isArrayParam ? 0 : totalLen % 2 ? 0 : 1;
201
+
202
+ if (!edgeArray.isForward) {
203
+ // the opposite edge show outside
204
+ var oppositeKey = getOppositeKey(curKey);
205
+ var len = getEdgeMapLengthWithKey(oppositeKey, seriesModel);
206
+ var resValue = curvenessList[edgeIndex + len + parityCorrection];
207
+ // isNeedReverse, simple, force type need reverse the curveness in the junction of the forword and the opposite
208
+ if (needReverse) {
209
+ // set as array may make the parity handle with the len of opposite
210
+ if (isArrayParam) {
211
+ if (autoCurvenessParams && autoCurvenessParams[0] === 0) {
212
+ return (len + parityCorrection) % 2 ? resValue : -resValue;
213
+ }
214
+ else {
215
+ return ((len % 2 ? 0 : 1) + parityCorrection) % 2 ? resValue : -resValue;
216
+ }
217
+ }
218
+ else {
219
+ return (len + parityCorrection) % 2 ? resValue : -resValue;
220
+ }
221
+ }
222
+ else {
223
+ return curvenessList[edgeIndex + len + parityCorrection];
224
+ }
225
+ }
226
+ else {
227
+ return curvenessList[parityCorrection + edgeIndex];
228
+ }
229
+ }
@@ -80,8 +80,6 @@ var LinesSeries = SeriesModel.extend({
80
80
  },
81
81
 
82
82
  mergeOption: function (option) {
83
- // The input data may be null/undefined.
84
- option.data = option.data || [];
85
83
 
86
84
  compatEc2(option);
87
85
 
@@ -333,4 +331,4 @@ var LinesSeries = SeriesModel.extend({
333
331
  }
334
332
  });
335
333
 
336
- export default LinesSeries;
334
+ export default LinesSeries;
@@ -131,7 +131,7 @@ var MapSeries = SeriesModel.extend({
131
131
  *
132
132
  * @param {number} dataIndex
133
133
  */
134
- formatTooltip: function (dataIndex) {
134
+ formatTooltip: function (dataIndex, multipleSeries, dataType, renderMode) {
135
135
  // FIXME orignalData and data is a bit confusing
136
136
  var data = this.getData();
137
137
  var formattedValue = addCommas(this.getRawValue(dataIndex));
@@ -149,7 +149,8 @@ var MapSeries = SeriesModel.extend({
149
149
  }
150
150
  }
151
151
 
152
- return seriesNames.join(', ') + '<br />'
152
+ var newLine = renderMode === 'html' ? '<br/>' : '\n';
153
+ return seriesNames.join(', ') + newLine
153
154
  + encodeHTML(name + ' : ' + formattedValue);
154
155
  },
155
156
 
@@ -49,16 +49,17 @@ var RadarSeries = SeriesModel.extend({
49
49
  });
50
50
  },
51
51
 
52
- formatTooltip: function (dataIndex) {
52
+ formatTooltip: function (dataIndex, multipleSeries, dataType, renderMode) {
53
53
  var data = this.getData();
54
54
  var coordSys = this.coordinateSystem;
55
55
  var indicatorAxes = coordSys.getIndicatorAxes();
56
56
  var name = this.getData().getName(dataIndex);
57
- return encodeHTML(name === '' ? this.name : name) + '<br/>'
57
+ var newLine = renderMode === 'html' ? '<br/>' : '\n';
58
+ return encodeHTML(name === '' ? this.name : name) + newLine
58
59
  + zrUtil.map(indicatorAxes, function (axis, idx) {
59
60
  var val = data.get(data.mapDimension(axis.dim), dataIndex);
60
61
  return encodeHTML(axis.name + ' : ' + val);
61
- }).join('<br />');
62
+ }).join(newLine);
62
63
  },
63
64
 
64
65
  /**
@@ -52,12 +52,14 @@ export default echarts.extendChartView({
52
52
  var symbolPath = symbolUtil.createSymbol(
53
53
  symbolType, -1, -1, 2, 2, color
54
54
  );
55
+ var symbolRotate = data.getItemVisual(idx, 'symbolRotate') || 0;
55
56
  symbolPath.attr({
56
57
  style: {
57
58
  strokeNoScale: true
58
59
  },
59
60
  z2: 100,
60
- scale: [symbolSize[0] / 2, symbolSize[1] / 2]
61
+ scale: [symbolSize[0] / 2, symbolSize[1] / 2],
62
+ rotation: symbolRotate * Math.PI / 180 || 0
61
63
  });
62
64
  return symbolPath;
63
65
  }
@@ -226,4 +228,4 @@ export default echarts.extendChartView({
226
228
  },
227
229
 
228
230
  dispose: function () {}
229
- });
231
+ });
@@ -203,9 +203,13 @@ SunburstPieceProto._updateLabel = function (seriesModel, visualColor, state) {
203
203
  : itemModel.getModel(state + '.label');
204
204
  var labelHoverModel = itemModel.getModel('emphasis.label');
205
205
 
206
+ var labelFormatter = labelModel.get('formatter');
207
+ // Use normal formatter if no state formatter is defined
208
+ var labelState = labelFormatter ? state : 'normal';
209
+
206
210
  var text = zrUtil.retrieve(
207
211
  seriesModel.getFormattedLabel(
208
- this.node.dataIndex, state, null, null, 'label'
212
+ this.node.dataIndex, labelState, null, null, 'label'
209
213
  ),
210
214
  this.node.name
211
215
  );
@@ -20,6 +20,7 @@
20
20
  import * as zrUtil from 'zrender/src/core/util';
21
21
  import SeriesModel from '../../model/Series';
22
22
  import Tree from '../../data/Tree';
23
+ import Model from '../../model/Model';
23
24
  import {wrapTreePathInfo} from '../helper/treeHelper';
24
25
 
25
26
  export default SeriesModel.extend({
@@ -37,18 +38,25 @@ export default SeriesModel.extend({
37
38
 
38
39
  completeTreeValue(root);
39
40
 
40
- var levels = option.levels || [];
41
-
42
- // levels = option.levels = setDefault(levels, ecModel);
43
-
44
- var treeOption = {};
45
-
46
- treeOption.levels = levels;
41
+ var levelModels = zrUtil.map(option.levels || [], function (levelDefine) {
42
+ return new Model(levelDefine, this, ecModel);
43
+ }, this);
47
44
 
48
45
  // Make sure always a new tree is created when setOption,
49
46
  // in TreemapView, we check whether oldTree === newTree
50
47
  // to choose mappings approach among old shapes and new shapes.
51
- return Tree.createTree(root, this, treeOption).data;
48
+ var tree = Tree.createTree(root, this, beforeLink);
49
+
50
+ function beforeLink(nodeData) {
51
+ nodeData.wrapMethod('getItemModel', function (model, idx) {
52
+ var node = tree.getNodeByDataIndex(idx);
53
+ var levelModel = levelModels[node.depth];
54
+ levelModel && (model.parentModel = levelModel);
55
+ return model;
56
+ });
57
+ }
58
+
59
+ return tree.data;
52
60
  },
53
61
 
54
62
  optionUpdated: function () {
@@ -63,52 +63,46 @@ var ThemeRiverSeries = SeriesModel.extend({
63
63
  */
64
64
  fixData: function (data) {
65
65
  var rawDataLength = data.length;
66
+ /**
67
+ * Make sure every layer data get the same keys.
68
+ * The value index tells which layer has visited.
69
+ * {
70
+ * 2014/01/01: -1
71
+ * }
72
+ */
73
+ var timeValueKeys = {};
66
74
 
67
75
  // grouped data by name
68
76
  var groupResult = groupData(data, function (item) {
77
+ if (!timeValueKeys.hasOwnProperty(item[0])) {
78
+ timeValueKeys[item[0]] = -1;
79
+ }
69
80
  return item[2];
70
81
  });
71
82
  var layData = [];
72
83
  groupResult.buckets.each(function (items, key) {
73
84
  layData.push({name: key, dataList: items});
74
85
  });
75
-
76
86
  var layerNum = layData.length;
77
- var largestLayer = -1;
78
- var index = -1;
79
- for (var i = 0; i < layerNum; ++i) {
80
- var len = layData[i].dataList.length;
81
- if (len > largestLayer) {
82
- largestLayer = len;
83
- index = i;
84
- }
85
- }
86
87
 
87
88
  for (var k = 0; k < layerNum; ++k) {
88
- if (k === index) {
89
- continue;
90
- }
91
89
  var name = layData[k].name;
92
- for (var j = 0; j < largestLayer; ++j) {
93
- var timeValue = layData[index].dataList[j][0];
94
- var length = layData[k].dataList.length;
95
- var keyIndex = -1;
96
- for (var l = 0; l < length; ++l) {
97
- var value = layData[k].dataList[l][0];
98
- if (value === timeValue) {
99
- keyIndex = l;
100
- break;
101
- }
102
- }
103
- if (keyIndex === -1) {
90
+ for (var j = 0; j < layData[k].dataList.length; ++j) {
91
+ var timeValue = layData[k].dataList[j][0];
92
+ timeValueKeys[timeValue] = k;
93
+ }
94
+
95
+ for (var timeValue in timeValueKeys) {
96
+ if (timeValueKeys.hasOwnProperty(timeValue) && timeValueKeys[timeValue] !== k) {
97
+ timeValueKeys[timeValue] = k;
104
98
  data[rawDataLength] = [];
105
99
  data[rawDataLength][0] = timeValue;
106
100
  data[rawDataLength][1] = 0;
107
101
  data[rawDataLength][2] = name;
108
102
  rawDataLength++;
109
-
110
103
  }
111
104
  }
105
+
112
106
  }
113
107
  return data;
114
108
  },
@@ -293,4 +287,4 @@ var ThemeRiverSeries = SeriesModel.extend({
293
287
  }
294
288
  });
295
289
 
296
- export default ThemeRiverSeries;
290
+ export default ThemeRiverSeries;
@@ -45,7 +45,7 @@ export default SeriesModel.extend({
45
45
  var leaves = option.leaves || {};
46
46
  var leavesModel = new Model(leaves, this, this.ecModel);
47
47
 
48
- var tree = Tree.createTree(root, this, {}, beforeLink);
48
+ var tree = Tree.createTree(root, this, beforeLink);
49
49
 
50
50
  function beforeLink(nodeData) {
51
51
  nodeData.wrapMethod('getItemModel', function (model, idx) {