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
@@ -0,0 +1,258 @@
1
+
2
+ /*
3
+ * Licensed to the Apache Software Foundation (ASF) under one
4
+ * or more contributor license agreements. See the NOTICE file
5
+ * distributed with this work for additional information
6
+ * regarding copyright ownership. The ASF licenses this file
7
+ * to you under the Apache License, Version 2.0 (the
8
+ * "License"); you may not use this file except in compliance
9
+ * with the License. You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing,
14
+ * software distributed under the License is distributed on an
15
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
+ * KIND, either express or implied. See the License for the
17
+ * specific language governing permissions and limitations
18
+ * under the License.
19
+ */
20
+
21
+ var zrUtil = require("zrender/lib/core/util");
22
+
23
+ /*
24
+ * Licensed to the Apache Software Foundation (ASF) under one
25
+ * or more contributor license agreements. See the NOTICE file
26
+ * distributed with this work for additional information
27
+ * regarding copyright ownership. The ASF licenses this file
28
+ * to you under the Apache License, Version 2.0 (the
29
+ * "License"); you may not use this file except in compliance
30
+ * with the License. You may obtain a copy of the License at
31
+ *
32
+ * http://www.apache.org/licenses/LICENSE-2.0
33
+ *
34
+ * Unless required by applicable law or agreed to in writing,
35
+ * software distributed under the License is distributed on an
36
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
37
+ * KIND, either express or implied. See the License for the
38
+ * specific language governing permissions and limitations
39
+ * under the License.
40
+ */
41
+ var KEY_DELIMITER = '-->';
42
+ /**
43
+ * params handler
44
+ * @param {module:echarts/model/SeriesModel} seriesModel
45
+ * @returns {*}
46
+ */
47
+
48
+ var getAutoCurvenessParams = function (seriesModel) {
49
+ return seriesModel.get('autoCurveness') || null;
50
+ };
51
+ /**
52
+ * Generate a list of edge curvatures, 20 is the default
53
+ * @param {module:echarts/model/SeriesModel} seriesModel
54
+ * @param {number} appendLength
55
+ * @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]
56
+ */
57
+
58
+
59
+ var createCurveness = function (seriesModel, appendLength) {
60
+ var autoCurvenessParmas = getAutoCurvenessParams(seriesModel);
61
+ var length = 20;
62
+ var curvenessList = []; // handler the function set
63
+
64
+ if (typeof autoCurvenessParmas === 'number') {
65
+ length = autoCurvenessParmas;
66
+ } else if (zrUtil.isArray(autoCurvenessParmas)) {
67
+ seriesModel.__curvenessList = autoCurvenessParmas;
68
+ return;
69
+ } // append length
70
+
71
+
72
+ if (appendLength > length) {
73
+ length = appendLength;
74
+ } // make sure the length is even
75
+
76
+
77
+ var len = length % 2 ? length + 2 : length + 3;
78
+ curvenessList = [];
79
+
80
+ for (var i = 0; i < len; i++) {
81
+ curvenessList.push((i % 2 ? i + 1 : i) / 10 * (i % 2 ? -1 : 1));
82
+ }
83
+
84
+ seriesModel.__curvenessList = curvenessList;
85
+ };
86
+ /**
87
+ * Create different cache key data in the positive and negative directions, in order to set the curvature later
88
+ * @param {number|string|module:echarts/data/Graph.Node} n1
89
+ * @param {number|string|module:echarts/data/Graph.Node} n2
90
+ * @param {module:echarts/model/SeriesModel} seriesModel
91
+ * @returns {string} key
92
+ */
93
+
94
+
95
+ var getKeyOfEdges = function (n1, n2, seriesModel) {
96
+ var source = [n1.id, n1.dataIndex].join('.');
97
+ var target = [n2.id, n2.dataIndex].join('.');
98
+ return [seriesModel.uid, source, target].join(KEY_DELIMITER);
99
+ };
100
+ /**
101
+ * get opposite key
102
+ * @param {string} key
103
+ * @returns {string}
104
+ */
105
+
106
+
107
+ var getOppositeKey = function (key) {
108
+ var keys = key.split(KEY_DELIMITER);
109
+ return [keys[0], keys[2], keys[1]].join(KEY_DELIMITER);
110
+ };
111
+ /**
112
+ * get edgeMap with key
113
+ * @param edge
114
+ * @param {module:echarts/model/SeriesModel} seriesModel
115
+ */
116
+
117
+
118
+ var getEdgeFromMap = function (edge, seriesModel) {
119
+ var key = getKeyOfEdges(edge.node1, edge.node2, seriesModel);
120
+ return seriesModel.__edgeMap[key];
121
+ };
122
+ /**
123
+ * calculate all cases total length
124
+ * @param edge
125
+ * @param seriesModel
126
+ * @returns {number}
127
+ */
128
+
129
+
130
+ var getTotalLengthBetweenNodes = function (edge, seriesModel) {
131
+ var len = getEdgeMapLengthWithKey(getKeyOfEdges(edge.node1, edge.node2, seriesModel), seriesModel);
132
+ var lenV = getEdgeMapLengthWithKey(getKeyOfEdges(edge.node2, edge.node1, seriesModel), seriesModel);
133
+ return len + lenV;
134
+ };
135
+ /**
136
+ *
137
+ * @param key
138
+ */
139
+
140
+
141
+ var getEdgeMapLengthWithKey = function (key, seriesModel) {
142
+ var edgeMap = seriesModel.__edgeMap;
143
+ return edgeMap[key] ? edgeMap[key].length : 0;
144
+ };
145
+ /**
146
+ * Count the number of edges between the same two points, used to obtain the curvature table and the parity of the edge
147
+ * @see /graph/GraphSeries.js@getInitialData
148
+ * @param {module:echarts/model/SeriesModel} seriesModel
149
+ */
150
+
151
+
152
+ function initCurvenessList(seriesModel) {
153
+ if (!getAutoCurvenessParams(seriesModel)) {
154
+ return;
155
+ }
156
+
157
+ seriesModel.__curvenessList = [];
158
+ seriesModel.__edgeMap = {}; // calc the array of curveness List
159
+
160
+ createCurveness(seriesModel);
161
+ }
162
+ /**
163
+ * set edgeMap with key
164
+ * @param {number|string|module:echarts/data/Graph.Node} n1
165
+ * @param {number|string|module:echarts/data/Graph.Node} n2
166
+ * @param {module:echarts/model/SeriesModel} seriesModel
167
+ * @param {number} index
168
+ */
169
+
170
+
171
+ function createEdgeMapForCurveness(n1, n2, seriesModel, index) {
172
+ if (!getAutoCurvenessParams(seriesModel)) {
173
+ return;
174
+ }
175
+
176
+ var key = getKeyOfEdges(n1, n2, seriesModel);
177
+ var edgeMap = seriesModel.__edgeMap;
178
+ var oppositeEdges = edgeMap[getOppositeKey(key)]; // set direction
179
+
180
+ if (edgeMap[key] && !oppositeEdges) {
181
+ edgeMap[key].isForward = true;
182
+ } else if (oppositeEdges && edgeMap[key]) {
183
+ oppositeEdges.isForward = true;
184
+ edgeMap[key].isForward = false;
185
+ }
186
+
187
+ edgeMap[key] = edgeMap[key] || [];
188
+ edgeMap[key].push(index);
189
+ }
190
+ /**
191
+ * get curvature for edge
192
+ * @param edge
193
+ * @param {module:echarts/model/SeriesModel} seriesModel
194
+ * @param index
195
+ */
196
+
197
+
198
+ function getCurvenessForEdge(edge, seriesModel, index, needReverse) {
199
+ var autoCurvenessParams = getAutoCurvenessParams(seriesModel);
200
+ var isArrayParam = zrUtil.isArray(autoCurvenessParams);
201
+
202
+ if (!autoCurvenessParams) {
203
+ return null;
204
+ }
205
+
206
+ var edgeArray = getEdgeFromMap(edge, seriesModel);
207
+
208
+ if (!edgeArray) {
209
+ return null;
210
+ }
211
+
212
+ var edgeIndex = -1;
213
+
214
+ for (var i = 0; i < edgeArray.length; i++) {
215
+ if (edgeArray[i] === index) {
216
+ edgeIndex = i;
217
+ break;
218
+ }
219
+ } // if totalLen is Longer createCurveness
220
+
221
+
222
+ var totalLen = getTotalLengthBetweenNodes(edge, seriesModel);
223
+ createCurveness(seriesModel, totalLen);
224
+ edge.lineStyle = edge.lineStyle || {}; // if is opposite edge, must set curvenss to opposite number
225
+
226
+ var curKey = getKeyOfEdges(edge.node1, edge.node2, seriesModel);
227
+ var curvenessList = seriesModel.__curvenessList; // if pass array no need parity
228
+
229
+ var parityCorrection = isArrayParam ? 0 : totalLen % 2 ? 0 : 1;
230
+
231
+ if (!edgeArray.isForward) {
232
+ // the opposite edge show outside
233
+ var oppositeKey = getOppositeKey(curKey);
234
+ var len = getEdgeMapLengthWithKey(oppositeKey, seriesModel);
235
+ var resValue = curvenessList[edgeIndex + len + parityCorrection]; // isNeedReverse, simple, force type need reverse the curveness in the junction of the forword and the opposite
236
+
237
+ if (needReverse) {
238
+ // set as array may make the parity handle with the len of opposite
239
+ if (isArrayParam) {
240
+ if (autoCurvenessParams && autoCurvenessParams[0] === 0) {
241
+ return (len + parityCorrection) % 2 ? resValue : -resValue;
242
+ } else {
243
+ return ((len % 2 ? 0 : 1) + parityCorrection) % 2 ? resValue : -resValue;
244
+ }
245
+ } else {
246
+ return (len + parityCorrection) % 2 ? resValue : -resValue;
247
+ }
248
+ } else {
249
+ return curvenessList[edgeIndex + len + parityCorrection];
250
+ }
251
+ } else {
252
+ return curvenessList[parityCorrection + edgeIndex];
253
+ }
254
+ }
255
+
256
+ exports.initCurvenessList = initCurvenessList;
257
+ exports.createEdgeMapForCurveness = createEdgeMapForCurveness;
258
+ exports.getCurvenessForEdge = getCurvenessForEdge;
@@ -106,8 +106,6 @@ var LinesSeries = SeriesModel.extend({
106
106
  LinesSeries.superApply(this, 'init', arguments);
107
107
  },
108
108
  mergeOption: function (option) {
109
- // The input data may be null/undefined.
110
- option.data = option.data || [];
111
109
  compatEc2(option);
112
110
 
113
111
  if (option.data) {
@@ -153,7 +153,7 @@ var MapSeries = SeriesModel.extend({
153
153
  *
154
154
  * @param {number} dataIndex
155
155
  */
156
- formatTooltip: function (dataIndex) {
156
+ formatTooltip: function (dataIndex, multipleSeries, dataType, renderMode) {
157
157
  // FIXME orignalData and data is a bit confusing
158
158
  var data = this.getData();
159
159
  var formattedValue = addCommas(this.getRawValue(dataIndex));
@@ -170,7 +170,8 @@ var MapSeries = SeriesModel.extend({
170
170
  }
171
171
  }
172
172
 
173
- return seriesNames.join(', ') + '<br />' + encodeHTML(name + ' : ' + formattedValue);
173
+ var newLine = renderMode === 'html' ? '<br/>' : '\n';
174
+ return seriesNames.join(', ') + newLine + encodeHTML(name + ' : ' + formattedValue);
174
175
  },
175
176
 
176
177
  /**
@@ -64,15 +64,16 @@ var RadarSeries = SeriesModel.extend({
64
64
  generateCoordCount: Infinity
65
65
  });
66
66
  },
67
- formatTooltip: function (dataIndex) {
67
+ formatTooltip: function (dataIndex, multipleSeries, dataType, renderMode) {
68
68
  var data = this.getData();
69
69
  var coordSys = this.coordinateSystem;
70
70
  var indicatorAxes = coordSys.getIndicatorAxes();
71
71
  var name = this.getData().getName(dataIndex);
72
- return encodeHTML(name === '' ? this.name : name) + '<br/>' + zrUtil.map(indicatorAxes, function (axis, idx) {
72
+ var newLine = renderMode === 'html' ? '<br/>' : '\n';
73
+ return encodeHTML(name === '' ? this.name : name) + newLine + zrUtil.map(indicatorAxes, function (axis, idx) {
73
74
  var val = data.get(data.mapDimension(axis.dim), dataIndex);
74
75
  return encodeHTML(axis.name + ' : ' + val);
75
- }).join('<br />');
76
+ }).join(newLine);
76
77
  },
77
78
 
78
79
  /**
@@ -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
  }
@@ -188,7 +188,10 @@ SunburstPieceProto._updateLabel = function (seriesModel, visualColor, state) {
188
188
  var normalModel = itemModel.getModel('label');
189
189
  var labelModel = state === 'normal' || state === 'emphasis' ? normalModel : itemModel.getModel(state + '.label');
190
190
  var labelHoverModel = itemModel.getModel('emphasis.label');
191
- 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);
192
195
 
193
196
  if (getLabelAttr('show') === false) {
194
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();
@@ -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;
@@ -66,7 +66,7 @@ var _default = SeriesModel.extend({
66
66
  };
67
67
  var leaves = option.leaves || {};
68
68
  var leavesModel = new Model(leaves, this, this.ecModel);
69
- var tree = Tree.createTree(root, this, {}, beforeLink);
69
+ var tree = Tree.createTree(root, this, beforeLink);
70
70
 
71
71
  function beforeLink(nodeData) {
72
72
  nodeData.wrapMethod('getItemModel', function (model, idx) {
@@ -467,9 +467,9 @@ function drawEdge(seriesModel, node, virtualRoot, symbolEl, sourceOldLayout, sou
467
467
 
468
468
  graphic.updateProps(edge, {
469
469
  shape: getEdgeShape(seriesScope, sourceLayout, targetLayout),
470
- style: {
470
+ style: zrUtil.defaults({
471
471
  opacity: 1
472
- }
472
+ }, seriesScope.lineStyle)
473
473
  }, seriesModel);
474
474
  }
475
475
  } else if (edgeShape === 'polyline') {
@@ -503,9 +503,9 @@ function drawEdge(seriesModel, node, virtualRoot, symbolEl, sourceOldLayout, sou
503
503
  parentPoint: [targetLayout.x, targetLayout.y],
504
504
  childPoints: childPoints
505
505
  },
506
- style: {
506
+ style: zrUtil.defaults({
507
507
  opacity: 1
508
- }
508
+ }, seriesScope.lineStyle)
509
509
  }, seriesModel);
510
510
  }
511
511
  } else {}
@@ -226,21 +226,30 @@ var _default = SeriesModel.extend({
226
226
  children: option.data
227
227
  };
228
228
  completeTreeValue(root);
229
- var levels = option.levels || [];
229
+ var levels = option.levels || []; // Used in "visual priority" in `treemapVisual.js`.
230
+ // This way is a little tricky, must satisfy the precondition:
231
+ // 1. There is no `treeNode.getModel('itemStyle.xxx')` used.
232
+ // 2. The `Model.prototype.getModel()` will not use any clone-like way.
233
+
234
+ var designatedVisualItemStyle = this.designatedVisualItemStyle = {};
235
+ var designatedVisualModel = new Model({
236
+ itemStyle: designatedVisualItemStyle
237
+ }, this, ecModel);
230
238
  levels = option.levels = setDefault(levels, ecModel);
231
239
  var levelModels = zrUtil.map(levels || [], function (levelDefine) {
232
- return new Model(levelDefine, this, ecModel);
240
+ return new Model(levelDefine, designatedVisualModel, ecModel);
233
241
  }, this); // Make sure always a new tree is created when setOption,
234
242
  // in TreemapView, we check whether oldTree === newTree
235
243
  // to choose mappings approach among old shapes and new shapes.
236
244
 
237
- var tree = Tree.createTree(root, this, null, beforeLink);
245
+ var tree = Tree.createTree(root, this, beforeLink);
238
246
 
239
247
  function beforeLink(nodeData) {
240
248
  nodeData.wrapMethod('getItemModel', function (model, idx) {
241
249
  var node = tree.getNodeByDataIndex(idx);
242
- var levelModel = levelModels[node.depth];
243
- levelModel && (model.parentModel = levelModel);
250
+ var levelModel = levelModels[node.depth]; // If no levelModel, we also need `designatedVisualModel`.
251
+
252
+ model.parentModel = levelModel || designatedVisualModel;
244
253
  return model;
245
254
  });
246
255
  }
@@ -445,7 +445,7 @@ function position(row, rowFixedLength, rect, halfGapWidth, flush) {
445
445
 
446
446
  rect[xy[idx1WhenH]] += rowOtherLength;
447
447
  rect[wh[idx1WhenH]] -= rowOtherLength;
448
- } // Return [containerWidth, containerHeight] as defualt.
448
+ } // Return [containerWidth, containerHeight] as default.
449
449
 
450
450
 
451
451
  function estimateRootSize(seriesModel, targetInfo, viewRoot, containerWidth, containerHeight) {
@@ -49,21 +49,17 @@ var _default = {
49
49
  reset: function (seriesModel, ecModel, api, payload) {
50
50
  var tree = seriesModel.getData().tree;
51
51
  var root = tree.root;
52
- var seriesItemStyleModel = seriesModel.getModel(ITEM_STYLE_NORMAL);
53
52
 
54
53
  if (root.isRemoved()) {
55
54
  return;
56
55
  }
57
56
 
58
- var levelItemStyles = zrUtil.map(tree.levelModels, function (levelModel) {
59
- return levelModel ? levelModel.get(ITEM_STYLE_NORMAL) : null;
60
- });
61
57
  travelTree(root, // Visual should calculate from tree root but not view root.
62
- {}, levelItemStyles, seriesItemStyleModel, seriesModel.getViewRoot().getAncestors(), seriesModel);
58
+ {}, seriesModel.getViewRoot().getAncestors(), seriesModel);
63
59
  }
64
60
  };
65
61
 
66
- function travelTree(node, designatedVisual, levelItemStyles, seriesItemStyleModel, viewRootAncestors, seriesModel) {
62
+ function travelTree(node, designatedVisual, viewRootAncestors, seriesModel) {
67
63
  var nodeModel = node.getModel();
68
64
  var nodeLayout = node.getLayout(); // Optimize
69
65
 
@@ -72,8 +68,7 @@ function travelTree(node, designatedVisual, levelItemStyles, seriesItemStyleMode
72
68
  }
73
69
 
74
70
  var nodeItemStyleModel = node.getModel(ITEM_STYLE_NORMAL);
75
- var levelItemStyle = levelItemStyles[node.depth];
76
- var visuals = buildVisuals(nodeItemStyleModel, designatedVisual, levelItemStyle, seriesItemStyleModel); // calculate border color
71
+ var visuals = buildVisuals(nodeItemStyleModel, designatedVisual, seriesModel); // calculate border color
77
72
 
78
73
  var borderColor = nodeItemStyleModel.get('borderColor');
79
74
  var borderColorSaturation = nodeItemStyleModel.get('borderColorSaturation');
@@ -99,21 +94,20 @@ function travelTree(node, designatedVisual, levelItemStyles, seriesItemStyleMode
99
94
  // If higher than viewRoot, only ancestors of viewRoot is needed to visit.
100
95
  if (child.depth >= viewRootAncestors.length || child === viewRootAncestors[child.depth]) {
101
96
  var childVisual = mapVisual(nodeModel, visuals, child, index, mapping, seriesModel);
102
- travelTree(child, childVisual, levelItemStyles, seriesItemStyleModel, viewRootAncestors, seriesModel);
97
+ travelTree(child, childVisual, viewRootAncestors, seriesModel);
103
98
  }
104
99
  });
105
100
  }
106
101
  }
107
102
 
108
- function buildVisuals(nodeItemStyleModel, designatedVisual, levelItemStyle, seriesItemStyleModel) {
103
+ function buildVisuals(nodeItemStyleModel, designatedVisual, seriesModel) {
109
104
  var visuals = zrUtil.extend({}, designatedVisual);
105
+ var designatedVisualItemStyle = seriesModel.designatedVisualItemStyle;
110
106
  zrUtil.each(['color', 'colorAlpha', 'colorSaturation'], function (visualName) {
111
107
  // Priority: thisNode > thisLevel > parentNodeDesignated > seriesModel
112
- var val = nodeItemStyleModel.get(visualName, true); // Ignore parent
113
-
114
- val == null && levelItemStyle && (val = levelItemStyle[visualName]);
115
- val == null && (val = designatedVisual[visualName]);
116
- val == null && (val = seriesItemStyleModel.get(visualName));
108
+ designatedVisualItemStyle[visualName] = designatedVisual[visualName];
109
+ var val = nodeItemStyleModel.get(visualName);
110
+ designatedVisualItemStyle[visualName] = null;
117
111
  val != null && (visuals[visualName] = val);
118
112
  });
119
113
  return visuals;
@@ -179,7 +179,7 @@ function processOnAxis(axisInfo, newValue, updaters, dontSnap, outputFinder) {
179
179
  var payloadInfo = buildPayloadsBySeries(newValue, axisInfo);
180
180
  var payloadBatch = payloadInfo.payloadBatch;
181
181
  var snapToValue = payloadInfo.snapToValue; // Fill content of event obj for echarts.connect.
182
- // By defualt use the first involved series data as a sample to connect.
182
+ // By default use the first involved series data as a sample to connect.
183
183
 
184
184
  if (payloadBatch[0] && outputFinder.seriesIndex == null) {
185
185
  zrUtil.extend(outputFinder, payloadBatch[0]);
@@ -428,7 +428,7 @@ var ScrollableLegendView = LegendView.extend({
428
428
  contentGroup.eachChild(function (child, idx) {
429
429
  var legendDataIdx = child.__legendDataIndex; // FIXME
430
430
  // If the given targetDataIndex (from model) is illegal,
431
- // we use defualtIndex. But the index on the legend model and
431
+ // we use defaultIndex. But the index on the legend model and
432
432
  // action payload is still illegal. That case will not be
433
433
  // changed until some scenario requires.
434
434