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