echarts 4.5.0 → 4.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/dist/echarts-en.common.js +1790 -774
  2. package/dist/echarts-en.common.min.js +1 -1
  3. package/dist/echarts-en.js +2029 -849
  4. package/dist/echarts-en.js.map +1 -1
  5. package/dist/echarts-en.min.js +1 -1
  6. package/dist/echarts-en.simple.js +1676 -691
  7. package/dist/echarts-en.simple.min.js +1 -1
  8. package/dist/echarts.common.js +1790 -774
  9. package/dist/echarts.common.min.js +1 -1
  10. package/dist/echarts.js +2029 -849
  11. package/dist/echarts.js.map +1 -1
  12. package/dist/echarts.min.js +1 -1
  13. package/dist/echarts.simple.js +1676 -691
  14. package/dist/echarts.simple.min.js +1 -1
  15. package/lib/chart/bar/BarView.js +11 -1
  16. package/lib/chart/bar/BaseBarSeries.js +3 -1
  17. package/lib/chart/effectScatter/EffectScatterSeries.js +3 -1
  18. package/lib/chart/funnel/FunnelSeries.js +15 -5
  19. package/lib/chart/gauge/GaugeSeries.js +0 -2
  20. package/lib/chart/graph/GraphSeries.js +9 -4
  21. package/lib/chart/graph/GraphView.js +28 -8
  22. package/lib/chart/heatmap/HeatmapView.js +4 -4
  23. package/lib/chart/helper/createListFromArray.js +14 -8
  24. package/lib/chart/helper/whiskerBoxCommon.js +22 -16
  25. package/lib/chart/line/LineSeries.js +3 -1
  26. package/lib/chart/line/LineView.js +8 -2
  27. package/lib/chart/map/MapSeries.js +8 -1
  28. package/lib/chart/pie/PieSeries.js +27 -6
  29. package/lib/chart/pie/PieView.js +1 -1
  30. package/lib/chart/pie/labelLayout.js +102 -19
  31. package/lib/chart/pie/pieLayout.js +19 -7
  32. package/lib/chart/radar/RadarSeries.js +3 -3
  33. package/lib/chart/sankey/SankeyView.js +28 -9
  34. package/lib/chart/scatter/ScatterSeries.js +3 -1
  35. package/lib/chart/themeRiver/ThemeRiverSeries.js +3 -3
  36. package/lib/chart/tree/TreeSeries.js +15 -1
  37. package/lib/component/axis/AngleAxisView.js +64 -7
  38. package/lib/component/axis/AxisBuilder.js +63 -24
  39. package/lib/component/axis/CartesianAxisView.js +55 -11
  40. package/lib/component/axis/RadiusAxisView.js +36 -4
  41. package/lib/component/dataZoom/SliderZoomView.js +4 -10
  42. package/lib/component/helper/BrushController.js +33 -43
  43. package/lib/component/legend/LegendModel.js +3 -3
  44. package/lib/component/legend/LegendView.js +17 -13
  45. package/lib/component/toolbox/ToolboxView.js +5 -1
  46. package/lib/component/toolbox/feature/MagicType.js +19 -14
  47. package/lib/coord/Axis.js +30 -2
  48. package/lib/coord/axisDefault.js +21 -2
  49. package/lib/data/DataDimensionInfo.js +157 -0
  50. package/lib/data/List.js +25 -19
  51. package/lib/data/Tree.js +2 -1
  52. package/lib/data/helper/completeDimensions.js +43 -32
  53. package/lib/data/helper/createDimensions.js +2 -0
  54. package/lib/data/helper/sourceHelper.js +214 -114
  55. package/lib/echarts.js +2 -2
  56. package/lib/layout/barGrid.js +2 -3
  57. package/lib/model/Series.js +3 -3
  58. package/lib/model/referHelper.js +40 -12
  59. package/lib/scale/Interval.js +87 -2
  60. package/lib/scale/Log.js +9 -2
  61. package/lib/scale/helper.js +1 -43
  62. package/lib/theme/dark.js +3 -0
  63. package/lib/util/graphic.js +1 -2
  64. package/lib/visual/LegendVisualProvider.js +75 -0
  65. package/lib/visual/dataColor.js +2 -12
  66. package/lib/visual/seriesColor.js +15 -7
  67. package/map/json/province/tianjin.json +1 -1
  68. package/package.json +3 -2
  69. package/src/chart/bar/BarView.js +12 -2
  70. package/src/chart/bar/BaseBarSeries.js +1 -1
  71. package/src/chart/effectScatter/EffectScatterSeries.js +1 -1
  72. package/src/chart/funnel/FunnelSeries.js +11 -4
  73. package/src/chart/gauge/GaugeSeries.js +0 -1
  74. package/src/chart/graph/GraphSeries.js +8 -3
  75. package/src/chart/graph/GraphView.js +26 -8
  76. package/src/chart/heatmap/HeatmapView.js +4 -4
  77. package/src/chart/helper/createListFromArray.js +13 -8
  78. package/src/chart/helper/whiskerBoxCommon.js +21 -16
  79. package/src/chart/line/LineSeries.js +1 -1
  80. package/src/chart/line/LineView.js +6 -1
  81. package/src/chart/map/MapSeries.js +5 -1
  82. package/src/chart/pie/PieSeries.js +26 -5
  83. package/src/chart/pie/PieView.js +1 -1
  84. package/src/chart/pie/labelLayout.js +114 -22
  85. package/src/chart/pie/pieLayout.js +20 -7
  86. package/src/chart/radar/RadarSeries.js +5 -3
  87. package/src/chart/sankey/SankeyView.js +26 -9
  88. package/src/chart/scatter/ScatterSeries.js +1 -1
  89. package/src/chart/themeRiver/ThemeRiverSeries.js +4 -3
  90. package/src/chart/tree/TreeSeries.js +12 -1
  91. package/src/component/axis/AngleAxisView.js +75 -7
  92. package/src/component/axis/AxisBuilder.js +78 -33
  93. package/src/component/axis/CartesianAxisView.js +58 -11
  94. package/src/component/axis/RadiusAxisView.js +37 -4
  95. package/src/component/dataZoom/SliderZoomView.js +4 -9
  96. package/src/component/helper/BrushController.js +40 -47
  97. package/src/component/legend/LegendModel.js +3 -3
  98. package/src/component/legend/LegendView.js +18 -12
  99. package/src/component/toolbox/ToolboxView.js +5 -0
  100. package/src/component/toolbox/feature/MagicType.js +18 -13
  101. package/src/coord/Axis.js +29 -2
  102. package/src/coord/axisDefault.js +25 -1
  103. package/src/data/DataDimensionInfo.js +135 -0
  104. package/src/data/List.js +29 -16
  105. package/src/data/Tree.js +3 -1
  106. package/src/data/helper/completeDimensions.js +49 -30
  107. package/src/data/helper/createDimensions.js +2 -0
  108. package/src/data/helper/sourceHelper.js +216 -124
  109. package/src/echarts.js +2 -2
  110. package/src/layout/barGrid.js +6 -3
  111. package/src/model/Series.js +3 -3
  112. package/src/model/referHelper.js +34 -11
  113. package/src/scale/Interval.js +84 -4
  114. package/src/scale/Log.js +9 -2
  115. package/src/scale/helper.js +1 -39
  116. package/src/theme/dark.js +3 -0
  117. package/src/util/graphic.js +1 -2
  118. package/src/visual/LegendVisualProvider.js +55 -0
  119. package/src/visual/dataColor.js +0 -13
  120. package/src/visual/seriesColor.js +13 -7
  121. package/theme/azul.js +163 -0
  122. package/theme/bee-inspired.js +178 -0
  123. package/theme/blue.js +178 -0
  124. package/theme/caravan.js +178 -0
  125. package/theme/carp.js +163 -0
  126. package/theme/cool.js +180 -0
  127. package/theme/dark-blue.js +168 -0
  128. package/theme/dark-bold.js +168 -0
  129. package/theme/dark-digerati.js +168 -0
  130. package/theme/dark-fresh-cut.js +168 -0
  131. package/theme/dark-mushroom.js +168 -0
  132. package/theme/dark.js +69 -62
  133. package/theme/eduardo.js +178 -0
  134. package/theme/forest.js +163 -0
  135. package/theme/fresh-cut.js +163 -0
  136. package/theme/fruit.js +178 -0
  137. package/theme/gray.js +220 -0
  138. package/theme/green.js +222 -0
  139. package/theme/helianthus.js +263 -0
  140. package/theme/infographic.js +72 -57
  141. package/theme/inspired.js +163 -0
  142. package/theme/jazz.js +163 -0
  143. package/theme/london.js +163 -0
  144. package/theme/macarons.js +80 -57
  145. package/theme/macarons2.js +251 -0
  146. package/theme/mint.js +155 -0
  147. package/theme/red-velvet.js +163 -0
  148. package/theme/red.js +225 -0
  149. package/theme/roma.js +55 -22
  150. package/theme/royal.js +163 -0
  151. package/theme/sakura.js +140 -0
  152. package/theme/shine.js +52 -45
  153. package/theme/tech-blue.js +180 -0
  154. package/theme/vintage.js +37 -23
@@ -20,6 +20,10 @@
20
20
 
21
21
  var textContain = require("zrender/lib/contain/text");
22
22
 
23
+ var _number = require("../../util/number");
24
+
25
+ var parsePercent = _number.parsePercent;
26
+
23
27
  /*
24
28
  * Licensed to the Apache Software Foundation (ASF) under one
25
29
  * or more contributor license agreements. See the NOTICE file
@@ -41,13 +45,17 @@ var textContain = require("zrender/lib/contain/text");
41
45
  // FIXME emphasis label position is not same with normal label position
42
46
  var RADIAN = Math.PI / 180;
43
47
 
44
- function adjustSingleSide(list, cx, cy, r, dir, viewWidth, viewHeight) {
48
+ function adjustSingleSide(list, cx, cy, r, dir, viewWidth, viewHeight, viewLeft, viewTop, farthestX) {
45
49
  list.sort(function (a, b) {
46
50
  return a.y - b.y;
47
51
  });
48
52
 
49
53
  function shiftDown(start, end, delta, dir) {
50
54
  for (var j = start; j < end; j++) {
55
+ if (list[j].y + delta > viewTop + viewHeight) {
56
+ break;
57
+ }
58
+
51
59
  list[j].y += delta;
52
60
 
53
61
  if (j > start && j + 1 < end && list[j + 1].y > list[j].y + list[j].height) {
@@ -61,6 +69,10 @@ function adjustSingleSide(list, cx, cy, r, dir, viewWidth, viewHeight) {
61
69
 
62
70
  function shiftUp(end, delta) {
63
71
  for (var j = end; j >= 0; j--) {
72
+ if (list[j].y - delta < viewTop) {
73
+ break;
74
+ }
75
+
64
76
  list[j].y -= delta;
65
77
 
66
78
  if (j > 0 && list[j].y > list[j - 1].y + list[j - 1].height) {
@@ -78,6 +90,10 @@ function adjustSingleSide(list, cx, cy, r, dir, viewWidth, viewHeight) {
78
90
  : 0; // up
79
91
 
80
92
  for (var i = 0, l = list.length; i < l; i++) {
93
+ if (list[i].labelAlignTo !== 'none') {
94
+ continue;
95
+ }
96
+
81
97
  var deltaY = Math.abs(list[i].y - cy);
82
98
  var length = list[i].len;
83
99
  var length2 = list[i].len2;
@@ -105,6 +121,12 @@ function adjustSingleSide(list, cx, cy, r, dir, viewWidth, viewHeight) {
105
121
  var downList = [];
106
122
 
107
123
  for (var i = 0; i < len; i++) {
124
+ if (list[i].position === 'outer' && list[i].labelAlignTo === 'labelLine') {
125
+ var dx = list[i].x - farthestX;
126
+ list[i].linePoints[1][0] += dx;
127
+ list[i].x = farthestX;
128
+ }
129
+
108
130
  delta = list[i].y - lastY;
109
131
 
110
132
  if (delta < 0) {
@@ -130,9 +152,11 @@ function adjustSingleSide(list, cx, cy, r, dir, viewWidth, viewHeight) {
130
152
  changeX(downList, true, cx, cy, r, dir);
131
153
  }
132
154
 
133
- function avoidOverlap(labelLayoutList, cx, cy, r, viewWidth, viewHeight) {
155
+ function avoidOverlap(labelLayoutList, cx, cy, r, viewWidth, viewHeight, viewLeft, viewTop) {
134
156
  var leftList = [];
135
157
  var rightList = [];
158
+ var leftmostX = Number.MAX_VALUE;
159
+ var rightmostX = -Number.MAX_VALUE;
136
160
 
137
161
  for (var i = 0; i < labelLayoutList.length; i++) {
138
162
  if (isPositionCenter(labelLayoutList[i])) {
@@ -140,33 +164,72 @@ function avoidOverlap(labelLayoutList, cx, cy, r, viewWidth, viewHeight) {
140
164
  }
141
165
 
142
166
  if (labelLayoutList[i].x < cx) {
167
+ leftmostX = Math.min(leftmostX, labelLayoutList[i].x);
143
168
  leftList.push(labelLayoutList[i]);
144
169
  } else {
170
+ rightmostX = Math.max(rightmostX, labelLayoutList[i].x);
145
171
  rightList.push(labelLayoutList[i]);
146
172
  }
147
173
  }
148
174
 
149
- adjustSingleSide(rightList, cx, cy, r, 1, viewWidth, viewHeight);
150
- adjustSingleSide(leftList, cx, cy, r, -1, viewWidth, viewHeight);
175
+ adjustSingleSide(rightList, cx, cy, r, 1, viewWidth, viewHeight, viewLeft, viewTop, rightmostX);
176
+ adjustSingleSide(leftList, cx, cy, r, -1, viewWidth, viewHeight, viewLeft, viewTop, leftmostX);
151
177
 
152
178
  for (var i = 0; i < labelLayoutList.length; i++) {
153
- if (isPositionCenter(labelLayoutList[i])) {
179
+ var layout = labelLayoutList[i];
180
+
181
+ if (isPositionCenter(layout)) {
154
182
  continue;
155
183
  }
156
184
 
157
- var linePoints = labelLayoutList[i].linePoints;
185
+ var linePoints = layout.linePoints;
158
186
 
159
187
  if (linePoints) {
188
+ var isAlignToEdge = layout.labelAlignTo === 'edge';
189
+ var realTextWidth = layout.textRect.width;
190
+ var targetTextWidth;
191
+
192
+ if (isAlignToEdge) {
193
+ if (layout.x < cx) {
194
+ targetTextWidth = linePoints[2][0] - layout.labelDistance - viewLeft - layout.labelMargin;
195
+ } else {
196
+ targetTextWidth = viewLeft + viewWidth - layout.labelMargin - linePoints[2][0] - layout.labelDistance;
197
+ }
198
+ } else {
199
+ if (layout.x < cx) {
200
+ targetTextWidth = layout.x - viewLeft - layout.bleedMargin;
201
+ } else {
202
+ targetTextWidth = viewLeft + viewWidth - layout.x - layout.bleedMargin;
203
+ }
204
+ }
205
+
206
+ if (targetTextWidth < layout.textRect.width) {
207
+ layout.text = textContain.truncateText(layout.text, targetTextWidth, layout.font);
208
+
209
+ if (layout.labelAlignTo === 'edge') {
210
+ realTextWidth = textContain.getWidth(layout.text, layout.font);
211
+ }
212
+ }
213
+
160
214
  var dist = linePoints[1][0] - linePoints[2][0];
161
215
 
162
- if (labelLayoutList[i].x < cx) {
163
- linePoints[2][0] = labelLayoutList[i].x + 3;
216
+ if (isAlignToEdge) {
217
+ if (layout.x < cx) {
218
+ linePoints[2][0] = viewLeft + layout.labelMargin + realTextWidth + layout.labelDistance;
219
+ } else {
220
+ linePoints[2][0] = viewLeft + viewWidth - layout.labelMargin - realTextWidth - layout.labelDistance;
221
+ }
164
222
  } else {
165
- linePoints[2][0] = labelLayoutList[i].x - 3;
223
+ if (layout.x < cx) {
224
+ linePoints[2][0] = layout.x + layout.labelDistance;
225
+ } else {
226
+ linePoints[2][0] = layout.x - layout.labelDistance;
227
+ }
228
+
229
+ linePoints[1][0] = linePoints[2][0] + dist;
166
230
  }
167
231
 
168
- linePoints[1][1] = linePoints[2][1] = labelLayoutList[i].y;
169
- linePoints[1][0] = linePoints[2][0] + dist;
232
+ linePoints[1][1] = linePoints[2][1] = layout.y;
170
233
  }
171
234
  }
172
235
  }
@@ -176,7 +239,7 @@ function isPositionCenter(layout) {
176
239
  return layout.position === 'center';
177
240
  }
178
241
 
179
- function _default(seriesModel, r, viewWidth, viewHeight, sum) {
242
+ function _default(seriesModel, r, viewWidth, viewHeight, viewLeft, viewTop) {
180
243
  var data = seriesModel.getData();
181
244
  var labelLayoutList = [];
182
245
  var cx;
@@ -189,9 +252,16 @@ function _default(seriesModel, r, viewWidth, viewHeight, sum) {
189
252
  var labelModel = itemModel.getModel('label'); // Use position in normal or emphasis
190
253
 
191
254
  var labelPosition = labelModel.get('position') || itemModel.get('emphasis.label.position');
255
+ var labelDistance = labelModel.get('distanceToLabelLine');
256
+ var labelAlignTo = labelModel.get('alignTo');
257
+ var labelMargin = parsePercent(labelModel.get('margin'), viewWidth);
258
+ var bleedMargin = labelModel.get('bleedMargin');
259
+ var font = labelModel.getFont();
192
260
  var labelLineModel = itemModel.getModel('labelLine');
193
261
  var labelLineLen = labelLineModel.get('length');
262
+ labelLineLen = parsePercent(labelLineLen, viewWidth);
194
263
  var labelLineLen2 = labelLineModel.get('length2');
264
+ labelLineLen2 = parsePercent(labelLineLen2, viewWidth);
195
265
 
196
266
  if (layout.angle < minShowLabelRadian) {
197
267
  return;
@@ -206,6 +276,8 @@ function _default(seriesModel, r, viewWidth, viewHeight, sum) {
206
276
  var textAlign;
207
277
  cx = layout.cx;
208
278
  cy = layout.cy;
279
+ var text = seriesModel.getFormattedLabel(idx, 'normal') || data.getName(idx);
280
+ var textRect = textContain.getBoundingRect(text, font, textAlign, 'top');
209
281
  var isLabelInside = labelPosition === 'inside' || labelPosition === 'inner';
210
282
 
211
283
  if (labelPosition === 'center') {
@@ -224,15 +296,21 @@ function _default(seriesModel, r, viewWidth, viewHeight, sum) {
224
296
  var y2 = y1 + dy * (labelLineLen + r - layout.r);
225
297
  var x3 = x2 + (dx < 0 ? -1 : 1) * labelLineLen2;
226
298
  var y3 = y2;
227
- textX = x3 + (dx < 0 ? -5 : 5);
299
+
300
+ if (labelAlignTo === 'edge') {
301
+ // Adjust textX because text align of edge is opposite
302
+ textX = dx < 0 ? viewLeft + labelMargin : viewLeft + viewWidth - labelMargin;
303
+ } else {
304
+ textX = x3 + (dx < 0 ? -labelDistance : labelDistance);
305
+ }
306
+
228
307
  textY = y3;
229
308
  linePoints = [[x1, y1], [x2, y2], [x3, y3]];
230
309
  }
231
310
 
232
- textAlign = isLabelInside ? 'center' : dx > 0 ? 'left' : 'right';
311
+ textAlign = isLabelInside ? 'center' : labelAlignTo === 'edge' ? dx > 0 ? 'right' : 'left' : dx > 0 ? 'left' : 'right';
233
312
  }
234
313
 
235
- var font = labelModel.getFont();
236
314
  var labelRotate;
237
315
  var rotate = labelModel.get('rotate');
238
316
 
@@ -242,8 +320,6 @@ function _default(seriesModel, r, viewWidth, viewHeight, sum) {
242
320
  labelRotate = rotate ? dx < 0 ? -midAngle + Math.PI : -midAngle : 0;
243
321
  }
244
322
 
245
- var text = seriesModel.getFormattedLabel(idx, 'normal') || data.getName(idx);
246
- var textRect = textContain.getBoundingRect(text, font, textAlign, 'top');
247
323
  hasLabelRotate = !!labelRotate;
248
324
  layout.label = {
249
325
  x: textX,
@@ -256,7 +332,14 @@ function _default(seriesModel, r, viewWidth, viewHeight, sum) {
256
332
  textAlign: textAlign,
257
333
  verticalAlign: 'middle',
258
334
  rotation: labelRotate,
259
- inside: isLabelInside
335
+ inside: isLabelInside,
336
+ labelDistance: labelDistance,
337
+ labelAlignTo: labelAlignTo,
338
+ labelMargin: labelMargin,
339
+ bleedMargin: bleedMargin,
340
+ textRect: textRect,
341
+ text: text,
342
+ font: font
260
343
  }; // Not layout the inside label
261
344
 
262
345
  if (!isLabelInside) {
@@ -265,7 +348,7 @@ function _default(seriesModel, r, viewWidth, viewHeight, sum) {
265
348
  });
266
349
 
267
350
  if (!hasLabelRotate && seriesModel.get('avoidLabelOverlap')) {
268
- avoidOverlap(labelLayoutList, cx, cy, r, viewWidth, viewHeight);
351
+ avoidOverlap(labelLayoutList, cx, cy, r, viewWidth, viewHeight, viewLeft, viewTop);
269
352
  }
270
353
  }
271
354
 
@@ -23,6 +23,8 @@ var _number = require("../../util/number");
23
23
  var parsePercent = _number.parsePercent;
24
24
  var linearMap = _number.linearMap;
25
25
 
26
+ var layout = require("../../util/layout");
27
+
26
28
  var labelLayout = require("./labelLayout");
27
29
 
28
30
  var zrUtil = require("zrender/lib/core/util");
@@ -48,10 +50,18 @@ var zrUtil = require("zrender/lib/core/util");
48
50
  var PI2 = Math.PI * 2;
49
51
  var RADIAN = Math.PI / 180;
50
52
 
53
+ function getViewRect(seriesModel, api) {
54
+ return layout.getLayoutRect(seriesModel.getBoxLayoutParams(), {
55
+ width: api.getWidth(),
56
+ height: api.getHeight()
57
+ });
58
+ }
59
+
51
60
  function _default(seriesType, ecModel, api, payload) {
52
61
  ecModel.eachSeriesByType(seriesType, function (seriesModel) {
53
62
  var data = seriesModel.getData();
54
63
  var valueDim = data.mapDimension('value');
64
+ var viewRect = getViewRect(seriesModel, api);
55
65
  var center = seriesModel.get('center');
56
66
  var radius = seriesModel.get('radius');
57
67
 
@@ -63,11 +73,11 @@ function _default(seriesType, ecModel, api, payload) {
63
73
  center = [center, center];
64
74
  }
65
75
 
66
- var width = api.getWidth();
67
- var height = api.getHeight();
76
+ var width = parsePercent(viewRect.width, api.getWidth());
77
+ var height = parsePercent(viewRect.height, api.getHeight());
68
78
  var size = Math.min(width, height);
69
- var cx = parsePercent(center[0], width);
70
- var cy = parsePercent(center[1], height);
79
+ var cx = parsePercent(center[0], width) + viewRect.x;
80
+ var cy = parsePercent(center[1], height) + viewRect.y;
71
81
  var r0 = parsePercent(radius[0], size / 2);
72
82
  var r = parsePercent(radius[1], size / 2);
73
83
  var startAngle = -seriesModel.get('startAngle') * RADIAN;
@@ -102,7 +112,8 @@ function _default(seriesType, ecModel, api, payload) {
102
112
  cx: cx,
103
113
  cy: cy,
104
114
  r0: r0,
105
- r: roseType ? NaN : r
115
+ r: roseType ? NaN : r,
116
+ viewRect: viewRect
106
117
  });
107
118
  return;
108
119
  } // FIXME 兼容 2.0 但是 roseType 是 area 的时候才是这样?
@@ -130,7 +141,8 @@ function _default(seriesType, ecModel, api, payload) {
130
141
  cx: cx,
131
142
  cy: cy,
132
143
  r0: r0,
133
- r: roseType ? linearMap(value, extent, [r0, r]) : r
144
+ r: roseType ? linearMap(value, extent, [r0, r]) : r,
145
+ viewRect: viewRect
134
146
  });
135
147
  currentAngle = endAngle;
136
148
  }); // Some sector is constrained by minAngle
@@ -164,7 +176,7 @@ function _default(seriesType, ecModel, api, payload) {
164
176
  }
165
177
  }
166
178
 
167
- labelLayout(seriesModel, r, width, height);
179
+ labelLayout(seriesModel, r, viewRect.width, viewRect.height, viewRect.x, viewRect.y);
168
180
  });
169
181
  }
170
182
 
@@ -28,6 +28,8 @@ var _format = require("../../util/format");
28
28
 
29
29
  var encodeHTML = _format.encodeHTML;
30
30
 
31
+ var LegendVisualProvider = require("../../visual/LegendVisualProvider");
32
+
31
33
  /*
32
34
  * Licensed to the Apache Software Foundation (ASF) under one
33
35
  * or more contributor license agreements. See the NOTICE file
@@ -54,9 +56,7 @@ var RadarSeries = SeriesModel.extend({
54
56
  RadarSeries.superApply(this, 'init', arguments); // Enable legend selection for each data item
55
57
  // Use a function instead of direct access because data reference may changed
56
58
 
57
- this.legendDataProvider = function () {
58
- return this.getRawData();
59
- };
59
+ this.legendVisualProvider = new LegendVisualProvider(zrUtil.bind(this.getData, this), zrUtil.bind(this.getRawData, this));
60
60
  },
61
61
  getInitialData: function (option, ecModel) {
62
62
  return createListSimply(this, {
@@ -269,6 +269,8 @@ var _default = echarts.extendChartView({
269
269
  if (itemModel.get('focusNodeAdjacency')) {
270
270
  el.off('mouseover').on('mouseover', function () {
271
271
  if (!sankeyView._focusAdjacencyDisabled) {
272
+ sankeyView._clearTimer();
273
+
272
274
  api.dispatchAction({
273
275
  type: 'focusNodeAdjacency',
274
276
  seriesId: seriesModel.id,
@@ -278,10 +280,7 @@ var _default = echarts.extendChartView({
278
280
  });
279
281
  el.off('mouseout').on('mouseout', function () {
280
282
  if (!sankeyView._focusAdjacencyDisabled) {
281
- api.dispatchAction({
282
- type: 'unfocusNodeAdjacency',
283
- seriesId: seriesModel.id
284
- });
283
+ sankeyView._dispatchUnfocus(api);
285
284
  }
286
285
  });
287
286
  }
@@ -292,6 +291,8 @@ var _default = echarts.extendChartView({
292
291
  if (edgeModel.get('focusNodeAdjacency')) {
293
292
  el.off('mouseover').on('mouseover', function () {
294
293
  if (!sankeyView._focusAdjacencyDisabled) {
294
+ sankeyView._clearTimer();
295
+
295
296
  api.dispatchAction({
296
297
  type: 'focusNodeAdjacency',
297
298
  seriesId: seriesModel.id,
@@ -301,10 +302,7 @@ var _default = echarts.extendChartView({
301
302
  });
302
303
  el.off('mouseout').on('mouseout', function () {
303
304
  if (!sankeyView._focusAdjacencyDisabled) {
304
- api.dispatchAction({
305
- type: 'unfocusNodeAdjacency',
306
- seriesId: seriesModel.id
307
- });
305
+ sankeyView._dispatchUnfocus(api);
308
306
  }
309
307
  });
310
308
  }
@@ -318,7 +316,28 @@ var _default = echarts.extendChartView({
318
316
 
319
317
  this._data = seriesModel.getData();
320
318
  },
321
- dispose: function () {},
319
+ dispose: function () {
320
+ this._clearTimer();
321
+ },
322
+ _dispatchUnfocus: function (api) {
323
+ var self = this;
324
+
325
+ this._clearTimer();
326
+
327
+ this._unfocusDelayTimer = setTimeout(function () {
328
+ self._unfocusDelayTimer = null;
329
+ api.dispatchAction({
330
+ type: 'unfocusNodeAdjacency',
331
+ seriesId: self._model.id
332
+ });
333
+ }, 500);
334
+ },
335
+ _clearTimer: function () {
336
+ if (this._unfocusDelayTimer) {
337
+ clearTimeout(this._unfocusDelayTimer);
338
+ this._unfocusDelayTimer = null;
339
+ }
340
+ },
322
341
  focusNodeAdjacency: function (seriesModel, ecModel, api, payload) {
323
342
  var data = this._model.getData();
324
343
 
@@ -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 () {
@@ -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
  /**
@@ -65,7 +65,21 @@ var _default = SeriesModel.extend({
65
65
  var leaves = option.leaves || {};
66
66
  var treeOption = {};
67
67
  treeOption.leaves = leaves;
68
- var tree = Tree.createTree(root, this, treeOption);
68
+ var tree = Tree.createTree(root, this, treeOption, beforeLink);
69
+
70
+ function beforeLink(nodeData) {
71
+ nodeData.wrapMethod('getItemModel', function (model, idx) {
72
+ var node = tree.getNodeByDataIndex(idx);
73
+ var leavesModel = node.getLeavesModel();
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) {
@@ -46,7 +46,7 @@ var AxisBuilder = require("./AxisBuilder");
46
46
  * specific language governing permissions and limitations
47
47
  * under the License.
48
48
  */
49
- var elementList = ['axisLine', 'axisLabel', 'axisTick', 'splitLine', 'splitArea'];
49
+ var elementList = ['axisLine', 'axisLabel', 'axisTick', 'minorTick', 'splitLine', 'minorSplitLine', 'splitArea'];
50
50
 
51
51
  function getAxisLineShape(polar, rExtent, angle) {
52
52
  rExtent[1] > rExtent[0] && (rExtent = rExtent.slice().reverse());
@@ -89,6 +89,7 @@ var _default = AxisView.extend({
89
89
  var polar = angleAxis.polar;
90
90
  var radiusExtent = polar.getRadiusAxis().getExtent();
91
91
  var ticksAngles = angleAxis.getTicksCoords();
92
+ var minorTickAngles = angleAxis.getMinorTicksCoords();
92
93
  var labels = zrUtil.map(angleAxis.getViewLabels(), function (labelItem) {
93
94
  var labelItem = zrUtil.clone(labelItem);
94
95
  labelItem.coord = angleAxis.dataToCoord(labelItem.tickValue);
@@ -98,7 +99,7 @@ var _default = AxisView.extend({
98
99
  fixAngleOverlap(ticksAngles);
99
100
  zrUtil.each(elementList, function (name) {
100
101
  if (angleAxisModel.get(name + '.show') && (!angleAxis.scale.isBlank() || name === 'axisLine')) {
101
- this['_' + name](angleAxisModel, polar, ticksAngles, radiusExtent, labels);
102
+ this['_' + name](angleAxisModel, polar, ticksAngles, minorTickAngles, radiusExtent, labels);
102
103
  }
103
104
  }, this);
104
105
  },
@@ -106,7 +107,7 @@ var _default = AxisView.extend({
106
107
  /**
107
108
  * @private
108
109
  */
109
- _axisLine: function (angleAxisModel, polar, ticksAngles, radiusExtent) {
110
+ _axisLine: function (angleAxisModel, polar, ticksAngles, minorTickAngles, radiusExtent) {
110
111
  var lineStyleModel = angleAxisModel.getModel('axisLine.lineStyle'); // extent id of the axis radius (r0 and r)
111
112
 
112
113
  var rId = getRadiusIdx(polar);
@@ -145,7 +146,7 @@ var _default = AxisView.extend({
145
146
  /**
146
147
  * @private
147
148
  */
148
- _axisTick: function (angleAxisModel, polar, ticksAngles, radiusExtent) {
149
+ _axisTick: function (angleAxisModel, polar, ticksAngles, minorTickAngles, radiusExtent) {
149
150
  var tickModel = angleAxisModel.getModel('axisTick');
150
151
  var tickLen = (tickModel.get('inside') ? -1 : 1) * tickModel.get('length');
151
152
  var radius = radiusExtent[getRadiusIdx(polar)];
@@ -164,7 +165,36 @@ var _default = AxisView.extend({
164
165
  /**
165
166
  * @private
166
167
  */
167
- _axisLabel: function (angleAxisModel, polar, ticksAngles, radiusExtent, labels) {
168
+ _minorTick: function (angleAxisModel, polar, tickAngles, minorTickAngles, radiusExtent) {
169
+ if (!minorTickAngles.length) {
170
+ return;
171
+ }
172
+
173
+ var tickModel = angleAxisModel.getModel('axisTick');
174
+ var minorTickModel = angleAxisModel.getModel('minorTick');
175
+ var tickLen = (tickModel.get('inside') ? -1 : 1) * minorTickModel.get('length');
176
+ var radius = radiusExtent[getRadiusIdx(polar)];
177
+ var lines = [];
178
+
179
+ for (var i = 0; i < minorTickAngles.length; i++) {
180
+ for (var k = 0; k < minorTickAngles[i].length; k++) {
181
+ lines.push(new graphic.Line({
182
+ shape: getAxisLineShape(polar, [radius, radius + tickLen], minorTickAngles[i][k].coord)
183
+ }));
184
+ }
185
+ }
186
+
187
+ this.group.add(graphic.mergePath(lines, {
188
+ style: zrUtil.defaults(minorTickModel.getModel('lineStyle').getLineStyle(), zrUtil.defaults(tickModel.getLineStyle(), {
189
+ stroke: angleAxisModel.get('axisLine.lineStyle.color')
190
+ }))
191
+ }));
192
+ },
193
+
194
+ /**
195
+ * @private
196
+ */
197
+ _axisLabel: function (angleAxisModel, polar, ticksAngles, minorTickAngles, radiusExtent, labels) {
168
198
  var rawCategoryData = angleAxisModel.getCategories(true);
169
199
  var commonLabelModel = angleAxisModel.getModel('axisLabel');
170
200
  var labelMargin = commonLabelModel.get('margin');
@@ -208,7 +238,7 @@ var _default = AxisView.extend({
208
238
  /**
209
239
  * @private
210
240
  */
211
- _splitLine: function (angleAxisModel, polar, ticksAngles, radiusExtent) {
241
+ _splitLine: function (angleAxisModel, polar, ticksAngles, minorTickAngles, radiusExtent) {
212
242
  var splitLineModel = angleAxisModel.getModel('splitLine');
213
243
  var lineStyleModel = splitLineModel.getModel('lineStyle');
214
244
  var lineColors = lineStyleModel.get('color');
@@ -240,7 +270,34 @@ var _default = AxisView.extend({
240
270
  /**
241
271
  * @private
242
272
  */
243
- _splitArea: function (angleAxisModel, polar, ticksAngles, radiusExtent) {
273
+ _minorSplitLine: function (angleAxisModel, polar, ticksAngles, minorTickAngles, radiusExtent) {
274
+ if (!minorTickAngles.length) {
275
+ return;
276
+ }
277
+
278
+ var minorSplitLineModel = angleAxisModel.getModel('minorSplitLine');
279
+ var lineStyleModel = minorSplitLineModel.getModel('lineStyle');
280
+ var lines = [];
281
+
282
+ for (var i = 0; i < minorTickAngles.length; i++) {
283
+ for (var k = 0; k < minorTickAngles[i].length; k++) {
284
+ lines.push(new graphic.Line({
285
+ shape: getAxisLineShape(polar, radiusExtent, minorTickAngles[i][k].coord)
286
+ }));
287
+ }
288
+ }
289
+
290
+ this.group.add(graphic.mergePath(lines, {
291
+ style: lineStyleModel.getLineStyle(),
292
+ silent: true,
293
+ z: angleAxisModel.get('z')
294
+ }));
295
+ },
296
+
297
+ /**
298
+ * @private
299
+ */
300
+ _splitArea: function (angleAxisModel, polar, ticksAngles, minorTickAngles, radiusExtent) {
244
301
  if (!ticksAngles.length) {
245
302
  return;
246
303
  }