echarts 3.5.1 → 3.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/LICENSE +21 -18
- package/README.md +10 -0
- package/dist/echarts.common.js +11010 -9830
- package/dist/echarts.common.min.js +13 -13
- package/dist/echarts.js +13291 -10852
- package/dist/echarts.min.js +22 -21
- package/dist/echarts.simple.js +9904 -8990
- package/dist/echarts.simple.min.js +9 -10
- package/index.js +1 -0
- package/lib/ExtensionAPI.js +2 -4
- package/lib/chart/bar/BarView.js +141 -49
- package/lib/chart/bar/BaseBarSeries.js +2 -6
- package/lib/chart/bar.js +1 -0
- package/lib/chart/boxplot/BoxplotSeries.js +1 -1
- package/lib/chart/boxplot/boxplotLayout.js +23 -7
- package/lib/chart/candlestick/CandlestickSeries.js +3 -22
- package/lib/chart/candlestick/candlestickLayout.js +23 -7
- package/lib/chart/custom.js +442 -0
- package/lib/chart/funnel/funnelLayout.js +10 -3
- package/lib/chart/gauge/GaugeView.js +1 -1
- package/lib/chart/graph/GraphView.js +15 -9
- package/lib/chart/graph/categoryVisual.js +3 -2
- package/lib/chart/heatmap/HeatmapLayer.js +1 -1
- package/lib/chart/heatmap/HeatmapView.js +75 -73
- package/lib/chart/helper/Symbol.js +8 -31
- package/lib/chart/helper/createListFromArray.js +15 -10
- package/lib/chart/helper/labelHelper.js +48 -0
- package/lib/chart/helper/whiskerBoxCommon.js +25 -44
- package/lib/chart/map/mapDataStatistic.js +9 -8
- package/lib/chart/parallel/ParallelSeries.js +2 -0
- package/lib/chart/parallel/ParallelView.js +13 -12
- package/lib/chart/parallel/parallelVisual.js +9 -1
- package/lib/chart/pie/pieLayout.js +25 -17
- package/lib/chart/radar/RadarSeries.js +1 -1
- package/lib/chart/sankey/sankeyLayout.js +1 -1
- package/lib/chart/scatter/ScatterSeries.js +2 -3
- package/lib/chart/themeRiver/ThemeRiverSeries.js +6 -5
- package/lib/chart/themeRiver/themeRiverVisual.js +1 -1
- package/lib/chart/treemap/TreemapSeries.js +3 -3
- package/lib/chart/treemap/TreemapView.js +1 -1
- package/lib/chart/treemap/treemapLayout.js +6 -1
- package/lib/component/axis/AxisBuilder.js +53 -34
- package/lib/component/axis/ParallelAxisView.js +45 -37
- package/lib/component/axisPointer/AxisPointerModel.js +1 -1
- package/lib/component/axisPointer/BaseAxisPointer.js +20 -15
- package/lib/component/axisPointer/CartesianAxisPointer.js +9 -6
- package/lib/component/axisPointer/PolarAxisPointer.js +10 -8
- package/lib/component/axisPointer/SingleAxisPointer.js +11 -7
- package/lib/component/axisPointer/axisTrigger.js +87 -72
- package/lib/component/axisPointer/viewHelper.js +6 -3
- package/lib/component/axisPointer.js +2 -2
- package/lib/component/brush/BrushModel.js +6 -4
- package/lib/component/brush/BrushView.js +1 -1
- package/lib/component/brush/visualEncoding.js +6 -4
- package/lib/component/calendar/CalendarView.js +5 -5
- package/lib/component/dataZoom/AxisProxy.js +76 -13
- package/lib/component/dataZoom/DataZoomModel.js +21 -5
- package/lib/component/dataZoom/InsideZoomModel.js +4 -1
- package/lib/component/dataZoom/InsideZoomView.js +17 -27
- package/lib/component/dataZoom/SliderZoomView.js +63 -26
- package/lib/component/dataZoom/roams.js +9 -4
- package/lib/component/graphic.js +13 -12
- package/lib/component/helper/BrushController.js +75 -114
- package/lib/component/helper/BrushTargetManager.js +16 -8
- package/lib/component/helper/MapDraw.js +25 -11
- package/lib/component/helper/RoamController.js +111 -139
- package/lib/component/helper/brushHelper.js +25 -213
- package/lib/component/helper/cursorHelper.js +21 -0
- package/lib/component/helper/roamHelper.js +54 -0
- package/lib/component/helper/selectableMixin.js +7 -7
- package/lib/component/helper/sliderMove.js +66 -37
- package/lib/component/legend/LegendView.js +6 -6
- package/lib/component/legend/legendAction.js +1 -1
- package/lib/component/marker/MarkAreaView.js +3 -6
- package/lib/component/marker/MarkLineView.js +3 -5
- package/lib/component/marker/MarkPointView.js +3 -5
- package/lib/component/marker/MarkerView.js +10 -12
- package/lib/component/marker/markerHelper.js +1 -1
- package/lib/component/parallel.js +94 -29
- package/lib/component/polar.js +5 -0
- package/lib/component/timeline/SliderTimelineView.js +1 -1
- package/lib/component/toolbox/feature/Brush.js +7 -0
- package/lib/component/toolbox/feature/DataZoom.js +17 -4
- package/lib/component/tooltip/TooltipView.js +92 -20
- package/lib/component/visualMap/ContinuousView.js +6 -4
- package/lib/coord/Axis.js +34 -2
- package/lib/coord/axisDefault.js +4 -1
- package/lib/coord/axisHelper.js +32 -26
- package/lib/coord/axisModelCommonMixin.js +1 -1
- package/lib/coord/calendar/Calendar.js +14 -17
- package/lib/coord/calendar/prepareCustom.js +31 -0
- package/lib/coord/cartesian/Axis2D.js +0 -12
- package/lib/coord/cartesian/Cartesian2D.js +1 -0
- package/lib/coord/cartesian/Grid.js +5 -2
- package/lib/coord/cartesian/prepareCustom.js +36 -0
- package/lib/coord/geo/Geo.js +9 -14
- package/lib/coord/geo/GeoModel.js +5 -5
- package/lib/coord/geo/geoCreator.js +3 -3
- package/lib/coord/geo/parseGeoJson.js +11 -4
- package/lib/coord/geo/prepareCustom.js +36 -0
- package/lib/coord/parallel/Parallel.js +225 -101
- package/lib/coord/parallel/ParallelModel.js +7 -1
- package/lib/coord/polar/Polar.js +2 -1
- package/lib/coord/polar/prepareCustom.js +53 -0
- package/lib/coord/single/Single.js +9 -8
- package/lib/coord/single/SingleAxis.js +0 -27
- package/lib/coord/single/prepareCustom.js +33 -0
- package/lib/data/DataDiffer.js +2 -1
- package/lib/data/Graph.js +11 -7
- package/lib/data/List.js +59 -20
- package/lib/data/helper/completeDimensions.js +184 -23
- package/lib/echarts.js +68 -36
- package/lib/helper.js +1 -8
- package/lib/layout/barGrid.js +91 -19
- package/lib/layout/barPolar.js +286 -0
- package/lib/layout/points.js +22 -16
- package/lib/model/Global.js +34 -31
- package/lib/model/Series.js +41 -29
- package/lib/model/globalDefault.js +4 -1
- package/lib/model/mixin/colorPalette.js +2 -1
- package/lib/model/mixin/textStyle.js +7 -13
- package/lib/scale/Interval.js +46 -76
- package/lib/scale/Log.js +5 -7
- package/lib/scale/Scale.js +10 -1
- package/lib/scale/Time.js +34 -12
- package/lib/scale/helper.js +93 -0
- package/lib/util/format.js +20 -9
- package/lib/util/graphic.js +70 -8
- package/lib/util/layout.js +7 -3
- package/lib/util/model.js +63 -7
- package/lib/util/number.js +59 -19
- package/lib/util/throttle.js +14 -3
- package/map/js/world.js +1 -1
- package/map/json/world.json +1 -1
- package/package.json +3 -3
- package/src/ExtensionAPI.js +2 -4
- package/src/chart/bar/BarView.js +141 -49
- package/src/chart/bar/BaseBarSeries.js +2 -6
- package/src/chart/bar.js +1 -0
- package/src/chart/boxplot/BoxplotSeries.js +1 -1
- package/src/chart/boxplot/boxplotLayout.js +23 -7
- package/src/chart/candlestick/CandlestickSeries.js +3 -22
- package/src/chart/candlestick/candlestickLayout.js +23 -7
- package/src/chart/custom.js +442 -0
- package/src/chart/funnel/funnelLayout.js +10 -4
- package/src/chart/gauge/GaugeView.js +1 -1
- package/src/chart/graph/GraphView.js +15 -9
- package/src/chart/graph/categoryVisual.js +3 -2
- package/src/chart/heatmap/HeatmapLayer.js +1 -1
- package/src/chart/heatmap/HeatmapView.js +75 -73
- package/src/chart/helper/Symbol.js +8 -31
- package/src/chart/helper/createListFromArray.js +15 -10
- package/src/chart/helper/labelHelper.js +49 -0
- package/src/chart/helper/whiskerBoxCommon.js +25 -44
- package/src/chart/map/mapDataStatistic.js +9 -8
- package/src/chart/parallel/ParallelSeries.js +2 -0
- package/src/chart/parallel/ParallelView.js +13 -12
- package/src/chart/parallel/parallelVisual.js +9 -1
- package/src/chart/pie/pieLayout.js +25 -17
- package/src/chart/radar/RadarSeries.js +1 -1
- package/src/chart/sankey/sankeyLayout.js +1 -1
- package/src/chart/scatter/ScatterSeries.js +2 -3
- package/src/chart/themeRiver/ThemeRiverSeries.js +6 -5
- package/src/chart/themeRiver/themeRiverVisual.js +1 -1
- package/src/chart/treemap/TreemapSeries.js +3 -3
- package/src/chart/treemap/TreemapView.js +1 -1
- package/src/chart/treemap/treemapLayout.js +6 -1
- package/src/component/axis/AxisBuilder.js +53 -34
- package/src/component/axis/ParallelAxisView.js +45 -37
- package/src/component/axisPointer/AxisPointerModel.js +1 -1
- package/src/component/axisPointer/BaseAxisPointer.js +20 -15
- package/src/component/axisPointer/CartesianAxisPointer.js +9 -6
- package/src/component/axisPointer/PolarAxisPointer.js +10 -8
- package/src/component/axisPointer/SingleAxisPointer.js +11 -7
- package/src/component/axisPointer/axisTrigger.js +87 -72
- package/src/component/axisPointer/viewHelper.js +6 -3
- package/src/component/axisPointer.js +2 -2
- package/src/component/brush/BrushModel.js +6 -4
- package/src/component/brush/BrushView.js +1 -1
- package/src/component/brush/visualEncoding.js +6 -4
- package/src/component/calendar/CalendarView.js +5 -5
- package/src/component/dataZoom/AxisProxy.js +76 -13
- package/src/component/dataZoom/DataZoomModel.js +21 -5
- package/src/component/dataZoom/InsideZoomModel.js +4 -1
- package/src/component/dataZoom/InsideZoomView.js +17 -27
- package/src/component/dataZoom/SliderZoomView.js +63 -26
- package/src/component/dataZoom/roams.js +9 -4
- package/src/component/graphic.js +13 -12
- package/src/component/helper/BrushController.js +75 -114
- package/src/component/helper/BrushTargetManager.js +16 -8
- package/src/component/helper/MapDraw.js +25 -11
- package/src/component/helper/RoamController.js +111 -139
- package/src/component/helper/brushHelper.js +41 -0
- package/src/component/helper/cursorHelper.js +22 -0
- package/src/component/helper/roamHelper.js +55 -0
- package/src/component/helper/selectableMixin.js +7 -7
- package/src/component/helper/sliderMove.js +66 -37
- package/src/component/legend/LegendView.js +6 -6
- package/src/component/legend/legendAction.js +1 -1
- package/src/component/marker/MarkAreaView.js +3 -6
- package/src/component/marker/MarkLineView.js +3 -5
- package/src/component/marker/MarkPointView.js +3 -5
- package/src/component/marker/MarkerView.js +10 -12
- package/src/component/marker/markerHelper.js +1 -1
- package/src/component/parallel.js +94 -29
- package/src/component/polar.js +5 -0
- package/src/component/timeline/SliderTimelineView.js +1 -1
- package/src/component/toolbox/feature/Brush.js +7 -0
- package/src/component/toolbox/feature/DataZoom.js +17 -4
- package/src/component/tooltip/TooltipView.js +92 -20
- package/src/component/visualMap/ContinuousView.js +6 -4
- package/src/coord/Axis.js +34 -2
- package/src/coord/axisDefault.js +4 -1
- package/src/coord/axisHelper.js +32 -26
- package/src/coord/axisModelCommonMixin.js +1 -1
- package/src/coord/calendar/Calendar.js +14 -17
- package/src/coord/calendar/prepareCustom.js +32 -0
- package/src/coord/cartesian/Axis2D.js +0 -12
- package/src/coord/cartesian/Cartesian2D.js +1 -0
- package/src/coord/cartesian/Grid.js +5 -2
- package/src/coord/cartesian/prepareCustom.js +37 -0
- package/src/coord/geo/Geo.js +9 -14
- package/src/coord/geo/GeoModel.js +5 -5
- package/src/coord/geo/geoCreator.js +3 -3
- package/src/coord/geo/parseGeoJson.js +11 -4
- package/src/coord/geo/prepareCustom.js +37 -0
- package/src/coord/parallel/Parallel.js +225 -101
- package/src/coord/parallel/ParallelModel.js +7 -1
- package/src/coord/polar/Polar.js +2 -1
- package/src/coord/polar/prepareCustom.js +54 -0
- package/src/coord/single/Single.js +9 -8
- package/src/coord/single/SingleAxis.js +0 -27
- package/src/coord/single/prepareCustom.js +34 -0
- package/src/data/DataDiffer.js +2 -1
- package/src/data/Graph.js +11 -7
- package/src/data/List.js +59 -20
- package/src/data/helper/completeDimensions.js +184 -23
- package/src/echarts.js +68 -36
- package/src/helper.js +1 -8
- package/src/layout/barGrid.js +91 -19
- package/src/layout/barPolar.js +287 -0
- package/src/layout/points.js +22 -16
- package/src/model/Global.js +34 -31
- package/src/model/Series.js +41 -29
- package/src/model/globalDefault.js +4 -1
- package/src/model/mixin/colorPalette.js +2 -1
- package/src/model/mixin/textStyle.js +7 -13
- package/src/scale/Interval.js +46 -76
- package/src/scale/Log.js +5 -7
- package/src/scale/Scale.js +10 -1
- package/src/scale/Time.js +34 -12
- package/src/scale/helper.js +94 -0
- package/src/util/format.js +20 -9
- package/src/util/graphic.js +70 -8
- package/src/util/layout.js +7 -3
- package/src/util/model.js +63 -7
- package/src/util/number.js +59 -19
- package/src/util/throttle.js +14 -3
- package/src/coord/cartesian/axisLabelInterval.js +0 -26
- package/theme/default.js +0 -23
- package/theme/halloween.js +0 -528
package/src/model/Series.js
CHANGED
|
@@ -182,7 +182,7 @@ define(function(require) {
|
|
|
182
182
|
* @return {Array.<string>} dimensions on the axis.
|
|
183
183
|
*/
|
|
184
184
|
coordDimToDataDim: function (coordDim) {
|
|
185
|
-
return
|
|
185
|
+
return modelUtil.coordDimToDataDim(this.getData(), coordDim);
|
|
186
186
|
},
|
|
187
187
|
|
|
188
188
|
/**
|
|
@@ -192,7 +192,7 @@ define(function(require) {
|
|
|
192
192
|
* @return {string}
|
|
193
193
|
*/
|
|
194
194
|
dataDimToCoordDim: function (dataDim) {
|
|
195
|
-
return dataDim;
|
|
195
|
+
return modelUtil.dataDimToCoordDim(this.getData(), dataDim);
|
|
196
196
|
},
|
|
197
197
|
|
|
198
198
|
/**
|
|
@@ -216,35 +216,46 @@ define(function(require) {
|
|
|
216
216
|
*/
|
|
217
217
|
formatTooltip: function (dataIndex, multipleSeries, dataType) {
|
|
218
218
|
function formatArrayValue(value) {
|
|
219
|
-
var
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
var dimType = dimInfo && dimInfo.type;
|
|
224
|
-
var valStr;
|
|
219
|
+
var vertially = zrUtil.reduce(value, function (vertially, val, idx) {
|
|
220
|
+
var dimItem = data.getDimensionInfo(idx);
|
|
221
|
+
return vertially |= dimItem.tooltip !== false && dimItem.tooltipName != null;
|
|
222
|
+
}, 0);
|
|
225
223
|
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
224
|
+
var result = [];
|
|
225
|
+
var tooltipDims = modelUtil.otherDimToDataDim(data, 'tooltip');
|
|
226
|
+
|
|
227
|
+
tooltipDims.length
|
|
228
|
+
? zrUtil.each(tooltipDims, function (dimIdx) {
|
|
229
|
+
setEachItem(data.get(dimIdx, dataIndex), dimIdx);
|
|
230
|
+
})
|
|
231
|
+
// By default, all dims is used on tooltip.
|
|
232
|
+
: zrUtil.each(value, setEachItem);
|
|
233
|
+
|
|
234
|
+
function setEachItem(val, dimIdx) {
|
|
235
|
+
var dimInfo = data.getDimensionInfo(dimIdx);
|
|
236
|
+
// If `dimInfo.tooltip` is not set, show tooltip.
|
|
237
|
+
if (!dimInfo || dimInfo.otherDims.tooltip === false) {
|
|
238
|
+
return;
|
|
234
239
|
}
|
|
240
|
+
var dimType = dimInfo.type;
|
|
241
|
+
var valStr = (vertially ? '- ' + (dimInfo.tooltipName || dimInfo.name) + ': ' : '')
|
|
242
|
+
+ (dimType === 'ordinal'
|
|
243
|
+
? val + ''
|
|
244
|
+
: dimType === 'time'
|
|
245
|
+
? (multipleSeries ? '' : formatUtil.formatTime('yyyy/MM/dd hh:mm:ss', val))
|
|
246
|
+
: addCommas(val)
|
|
247
|
+
);
|
|
248
|
+
valStr && result.push(encodeHTML(valStr));
|
|
249
|
+
}
|
|
235
250
|
|
|
236
|
-
|
|
237
|
-
});
|
|
238
|
-
|
|
239
|
-
return result.join(', ');
|
|
251
|
+
return (vertially ? '<br/>' : '') + result.join(vertially ? '<br/>' : ', ');
|
|
240
252
|
}
|
|
241
253
|
|
|
242
254
|
var data = get(this, 'data');
|
|
243
255
|
|
|
244
256
|
var value = this.getRawValue(dataIndex);
|
|
245
|
-
var formattedValue =
|
|
246
|
-
|
|
247
|
-
);
|
|
257
|
+
var formattedValue = zrUtil.isArray(value)
|
|
258
|
+
? formatArrayValue(value) : encodeHTML(addCommas(value));
|
|
248
259
|
var name = data.getName(dataIndex);
|
|
249
260
|
|
|
250
261
|
var color = data.getItemVisual(dataIndex, 'color');
|
|
@@ -253,8 +264,7 @@ define(function(require) {
|
|
|
253
264
|
}
|
|
254
265
|
color = color || 'transparent';
|
|
255
266
|
|
|
256
|
-
var colorEl =
|
|
257
|
-
+ 'border-radius:10px;width:9px;height:9px;background-color:' + encodeHTML(color) + '"></span>';
|
|
267
|
+
var colorEl = formatUtil.getTooltipMarker(color);
|
|
258
268
|
|
|
259
269
|
var seriesName = this.name;
|
|
260
270
|
// FIXME
|
|
@@ -262,14 +272,16 @@ define(function(require) {
|
|
|
262
272
|
// Not show '-'
|
|
263
273
|
seriesName = '';
|
|
264
274
|
}
|
|
275
|
+
seriesName = seriesName
|
|
276
|
+
? encodeHTML(seriesName) + (!multipleSeries ? '<br/>' : ': ')
|
|
277
|
+
: '';
|
|
265
278
|
return !multipleSeries
|
|
266
|
-
?
|
|
279
|
+
? seriesName + colorEl
|
|
267
280
|
+ (name
|
|
268
|
-
? encodeHTML(name) + '
|
|
281
|
+
? encodeHTML(name) + ': ' + formattedValue
|
|
269
282
|
: formattedValue
|
|
270
283
|
)
|
|
271
|
-
|
|
272
|
-
: (colorEl + encodeHTML(this.name) + ' : ' + formattedValue);
|
|
284
|
+
: colorEl + seriesName + formattedValue;
|
|
273
285
|
},
|
|
274
286
|
|
|
275
287
|
/**
|
|
@@ -51,6 +51,9 @@ define(function () {
|
|
|
51
51
|
// `progressiveThreshold`, otherwise hover will cause restart of progressive,
|
|
52
52
|
// which is unexpected.
|
|
53
53
|
// see example <echarts/test/heatmap-large.html>.
|
|
54
|
-
hoverLayerThreshold: 3000
|
|
54
|
+
hoverLayerThreshold: 3000,
|
|
55
|
+
|
|
56
|
+
// See: module:echarts/scale/Time
|
|
57
|
+
useUTC: false
|
|
55
58
|
};
|
|
56
59
|
});
|
|
@@ -14,7 +14,8 @@ define(function (require) {
|
|
|
14
14
|
scope = scope || this;
|
|
15
15
|
var colorIdx = get(scope, 'colorIdx') || 0;
|
|
16
16
|
var colorNameMap = get(scope, 'colorNameMap') || set(scope, 'colorNameMap', {});
|
|
17
|
-
|
|
17
|
+
// Use `hasOwnProperty` to avoid conflict with Object.prototype.
|
|
18
|
+
if (colorNameMap.hasOwnProperty(name)) {
|
|
18
19
|
return colorNameMap[name];
|
|
19
20
|
}
|
|
20
21
|
var colorPalette = this.get('color', true) || [];
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
define(function (require) {
|
|
2
2
|
|
|
3
3
|
var textContain = require('zrender/contain/text');
|
|
4
|
-
|
|
5
|
-
function getShallow(model, path) {
|
|
6
|
-
return model && model.getShallow(path);
|
|
7
|
-
}
|
|
4
|
+
var graphicUtil = require('../../util/graphic');
|
|
8
5
|
|
|
9
6
|
return {
|
|
10
7
|
/**
|
|
@@ -22,15 +19,12 @@ define(function (require) {
|
|
|
22
19
|
* @return {string}
|
|
23
20
|
*/
|
|
24
21
|
getFont: function () {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
this.getShallow('
|
|
30
|
-
|
|
31
|
-
(this.getShallow('fontSize') || getShallow(gTextStyleModel, 'fontSize') || 12) + 'px',
|
|
32
|
-
this.getShallow('fontFamily') || getShallow(gTextStyleModel, 'fontFamily') || 'sans-serif'
|
|
33
|
-
].join(' ');
|
|
22
|
+
return graphicUtil.getFont({
|
|
23
|
+
fontStyle: this.getShallow('fontStyle'),
|
|
24
|
+
fontWeight: this.getShallow('fontWeight'),
|
|
25
|
+
fontSize: this.getShallow('fontSize'),
|
|
26
|
+
fontFamily: this.getShallow('fontFamily')
|
|
27
|
+
}, this.ecModel);
|
|
34
28
|
},
|
|
35
29
|
|
|
36
30
|
getTextRect: function (text) {
|
package/src/scale/Interval.js
CHANGED
|
@@ -8,12 +8,10 @@ define(function (require) {
|
|
|
8
8
|
var numberUtil = require('../util/number');
|
|
9
9
|
var formatUtil = require('../util/format');
|
|
10
10
|
var Scale = require('./Scale');
|
|
11
|
+
var helper = require('./helper');
|
|
11
12
|
|
|
12
|
-
var
|
|
13
|
-
var mathCeil = Math.ceil;
|
|
13
|
+
var roundNumber = numberUtil.round;
|
|
14
14
|
|
|
15
|
-
var getPrecisionSafe = numberUtil.getPrecisionSafe;
|
|
16
|
-
var roundingErrorFix = numberUtil.round;
|
|
17
15
|
/**
|
|
18
16
|
* @alias module:echarts/coord/scale/Interval
|
|
19
17
|
* @constructor
|
|
@@ -49,8 +47,10 @@ define(function (require) {
|
|
|
49
47
|
* Get interval
|
|
50
48
|
*/
|
|
51
49
|
getInterval: function () {
|
|
52
|
-
if (
|
|
53
|
-
this.
|
|
50
|
+
if (__DEV__) {
|
|
51
|
+
if (this._interval == null) {
|
|
52
|
+
throw new Error('`nice` should be called firstly' );
|
|
53
|
+
}
|
|
54
54
|
}
|
|
55
55
|
return this._interval;
|
|
56
56
|
},
|
|
@@ -69,43 +69,14 @@ define(function (require) {
|
|
|
69
69
|
* @return {Array.<number>}
|
|
70
70
|
*/
|
|
71
71
|
getTicks: function () {
|
|
72
|
-
if (
|
|
73
|
-
this.
|
|
74
|
-
|
|
75
|
-
var interval = this._interval;
|
|
76
|
-
var extent = this._extent;
|
|
77
|
-
var ticks = [];
|
|
78
|
-
|
|
79
|
-
// Consider this case: using dataZoom toolbox, zoom and zoom.
|
|
80
|
-
var safeLimit = 10000;
|
|
81
|
-
|
|
82
|
-
if (interval) {
|
|
83
|
-
var niceExtent = this._niceExtent;
|
|
84
|
-
var precision = this._intervalPrecision = getPrecisionSafe(interval);
|
|
85
|
-
// FIXME
|
|
86
|
-
precision += 2;
|
|
87
|
-
|
|
88
|
-
if (extent[0] < niceExtent[0]) {
|
|
89
|
-
ticks.push(extent[0]);
|
|
90
|
-
}
|
|
91
|
-
var tick = niceExtent[0];
|
|
92
|
-
|
|
93
|
-
while (tick <= niceExtent[1]) {
|
|
94
|
-
ticks.push(tick);
|
|
95
|
-
// Avoid rounding error
|
|
96
|
-
tick = roundingErrorFix(tick + interval, precision);
|
|
97
|
-
if (ticks.length > safeLimit) {
|
|
98
|
-
return [];
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
// Consider this case: the last item of ticks is smaller
|
|
102
|
-
// than niceExtent[1] and niceExtent[1] === extent[1].
|
|
103
|
-
if (extent[1] > (ticks.length ? ticks[ticks.length - 1] : niceExtent[1])) {
|
|
104
|
-
ticks.push(extent[1]);
|
|
72
|
+
if (__DEV__) {
|
|
73
|
+
if (this._interval == null) {
|
|
74
|
+
throw new Error('`nice` should be called firstly' );
|
|
105
75
|
}
|
|
106
76
|
}
|
|
107
|
-
|
|
108
|
-
|
|
77
|
+
return helper.intervalScaleGetTicks(
|
|
78
|
+
this._interval, this._extent, this._niceExtent, this._intervalPrecision
|
|
79
|
+
);
|
|
109
80
|
},
|
|
110
81
|
|
|
111
82
|
/**
|
|
@@ -125,15 +96,27 @@ define(function (require) {
|
|
|
125
96
|
* @param {Object} [opt]
|
|
126
97
|
* @param {number|string} [opt.precision] If 'auto', use nice presision.
|
|
127
98
|
* @param {boolean} [opt.pad] returns 1.50 but not 1.5 if precision is 2.
|
|
128
|
-
* @return {
|
|
99
|
+
* @return {string}
|
|
129
100
|
*/
|
|
130
101
|
getLabel: function (data, opt) {
|
|
102
|
+
if (data == null) {
|
|
103
|
+
return '';
|
|
104
|
+
}
|
|
105
|
+
|
|
131
106
|
var precision = opt && opt.precision;
|
|
132
|
-
|
|
107
|
+
|
|
108
|
+
if (precision == null) {
|
|
109
|
+
precision = numberUtil.getPrecisionSafe(data) || 0;
|
|
110
|
+
}
|
|
111
|
+
else if (precision === 'auto') {
|
|
133
112
|
// Should be more precise then tick.
|
|
134
|
-
precision
|
|
135
|
-
data = roundingErrorFix(data, precision, opt && opt.pad);
|
|
113
|
+
precision = this._intervalPrecision;
|
|
136
114
|
}
|
|
115
|
+
|
|
116
|
+
// (1) If `precision` is set, 12.005 should be display as '12.00500'.
|
|
117
|
+
// (2) Use roundNumber (toFixed) to avoid scientific notation like '3.5e-7'.
|
|
118
|
+
data = roundNumber(data, precision, true);
|
|
119
|
+
|
|
137
120
|
return formatUtil.addCommas(data);
|
|
138
121
|
},
|
|
139
122
|
|
|
@@ -141,8 +124,9 @@ define(function (require) {
|
|
|
141
124
|
* Update interval and extent of intervals for nice ticks
|
|
142
125
|
*
|
|
143
126
|
* @param {number} [splitNumber = 5] Desired number of ticks
|
|
127
|
+
* @param {number} [minInterval]
|
|
144
128
|
*/
|
|
145
|
-
niceTicks: function (splitNumber) {
|
|
129
|
+
niceTicks: function (splitNumber, minInterval) {
|
|
146
130
|
splitNumber = splitNumber || 5;
|
|
147
131
|
var extent = this._extent;
|
|
148
132
|
var span = extent[1] - extent[0];
|
|
@@ -156,36 +140,22 @@ define(function (require) {
|
|
|
156
140
|
extent.reverse();
|
|
157
141
|
}
|
|
158
142
|
|
|
159
|
-
|
|
160
|
-
// var niceSpan = numberUtil.nice(span, false);
|
|
161
|
-
var step = roundingErrorFix(
|
|
162
|
-
numberUtil.nice(span / splitNumber, true),
|
|
163
|
-
Math.max(
|
|
164
|
-
getPrecisionSafe(extent[0]),
|
|
165
|
-
getPrecisionSafe(extent[1])
|
|
166
|
-
// extent may be [0, 1], and step should have 1 more digits.
|
|
167
|
-
// To make it safe we add 2 more digits
|
|
168
|
-
) + 2
|
|
169
|
-
);
|
|
170
|
-
|
|
171
|
-
var precision = getPrecisionSafe(step) + 2;
|
|
172
|
-
// Niced extent inside original extent
|
|
173
|
-
var niceExtent = [
|
|
174
|
-
roundingErrorFix(mathCeil(extent[0] / step) * step, precision),
|
|
175
|
-
roundingErrorFix(mathFloor(extent[1] / step) * step, precision)
|
|
176
|
-
];
|
|
143
|
+
var result = helper.intervalScaleNiceTicks(extent, splitNumber, minInterval);
|
|
177
144
|
|
|
178
|
-
this.
|
|
179
|
-
this.
|
|
145
|
+
this._intervalPrecision = result.intervalPrecision;
|
|
146
|
+
this._interval = result.interval;
|
|
147
|
+
this._niceExtent = result.niceTickExtent;
|
|
180
148
|
},
|
|
181
149
|
|
|
182
150
|
/**
|
|
183
151
|
* Nice extent.
|
|
184
|
-
* @param {
|
|
185
|
-
* @param {
|
|
186
|
-
* @param {boolean} [
|
|
152
|
+
* @param {Object} opt
|
|
153
|
+
* @param {number} [opt.splitNumber = 5] Given approx tick number
|
|
154
|
+
* @param {boolean} [opt.fixMin=false]
|
|
155
|
+
* @param {boolean} [opt.fixMax=false]
|
|
156
|
+
* @param {boolean} [opt.minInterval=false]
|
|
187
157
|
*/
|
|
188
|
-
niceExtent: function (
|
|
158
|
+
niceExtent: function (opt) {
|
|
189
159
|
var extent = this._extent;
|
|
190
160
|
// If extent start and end are same, expand them
|
|
191
161
|
if (extent[0] === extent[1]) {
|
|
@@ -197,7 +167,7 @@ define(function (require) {
|
|
|
197
167
|
// Plus data are all 100 and axis extent are [100, 100].
|
|
198
168
|
// Extend to the both side will cause expanded max is larger than fixed max.
|
|
199
169
|
// So only expand to the smaller side.
|
|
200
|
-
if (!fixMax) {
|
|
170
|
+
if (!opt.fixMax) {
|
|
201
171
|
extent[1] += expandSize / 2;
|
|
202
172
|
extent[0] -= expandSize / 2;
|
|
203
173
|
}
|
|
@@ -216,16 +186,16 @@ define(function (require) {
|
|
|
216
186
|
extent[1] = 1;
|
|
217
187
|
}
|
|
218
188
|
|
|
219
|
-
this.niceTicks(splitNumber);
|
|
189
|
+
this.niceTicks(opt.splitNumber, opt.minInterval);
|
|
220
190
|
|
|
221
191
|
// var extent = this._extent;
|
|
222
192
|
var interval = this._interval;
|
|
223
193
|
|
|
224
|
-
if (!fixMin) {
|
|
225
|
-
extent[0] =
|
|
194
|
+
if (!opt.fixMin) {
|
|
195
|
+
extent[0] = roundNumber(Math.floor(extent[0] / interval) * interval);
|
|
226
196
|
}
|
|
227
|
-
if (!fixMax) {
|
|
228
|
-
extent[1] =
|
|
197
|
+
if (!opt.fixMax) {
|
|
198
|
+
extent[1] = roundNumber(Math.ceil(extent[1] / interval) * interval);
|
|
229
199
|
}
|
|
230
200
|
}
|
|
231
201
|
});
|
package/src/scale/Log.js
CHANGED
|
@@ -158,16 +158,14 @@ define(function (require) {
|
|
|
158
158
|
|
|
159
159
|
/**
|
|
160
160
|
* Nice extent.
|
|
161
|
-
* @
|
|
162
|
-
* @param {boolean} [fixMin=false]
|
|
163
|
-
* @param {boolean} [fixMax=false]
|
|
161
|
+
* @override
|
|
164
162
|
*/
|
|
165
|
-
niceExtent: function (
|
|
166
|
-
intervalScaleProto.niceExtent.call(this,
|
|
163
|
+
niceExtent: function (opt) {
|
|
164
|
+
intervalScaleProto.niceExtent.call(this, opt);
|
|
167
165
|
|
|
168
166
|
var originalScale = this._originalScale;
|
|
169
|
-
originalScale.__fixMin = fixMin;
|
|
170
|
-
originalScale.__fixMax = fixMax;
|
|
167
|
+
originalScale.__fixMin = opt.fixMin;
|
|
168
|
+
originalScale.__fixMax = opt.fixMax;
|
|
171
169
|
}
|
|
172
170
|
|
|
173
171
|
});
|
package/src/scale/Scale.js
CHANGED
|
@@ -6,7 +6,12 @@ define(function (require) {
|
|
|
6
6
|
|
|
7
7
|
var clazzUtil = require('../util/clazz');
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
/**
|
|
10
|
+
* @param {Object} [setting]
|
|
11
|
+
*/
|
|
12
|
+
function Scale(setting) {
|
|
13
|
+
this._setting = setting || {};
|
|
14
|
+
|
|
10
15
|
/**
|
|
11
16
|
* Extent
|
|
12
17
|
* @type {Array.<number>}
|
|
@@ -39,6 +44,10 @@ define(function (require) {
|
|
|
39
44
|
return val;
|
|
40
45
|
};
|
|
41
46
|
|
|
47
|
+
scaleProto.getSetting = function (name) {
|
|
48
|
+
return this._setting[name];
|
|
49
|
+
};
|
|
50
|
+
|
|
42
51
|
scaleProto.contain = function (val) {
|
|
43
52
|
var extent = this._extent;
|
|
44
53
|
return val >= extent[0] && val <= extent[1];
|
package/src/scale/Time.js
CHANGED
|
@@ -5,9 +5,20 @@
|
|
|
5
5
|
|
|
6
6
|
define(function (require) {
|
|
7
7
|
|
|
8
|
+
// [About UTC and local time zone]:
|
|
9
|
+
// In most cases, `number.parseDate` will treat input data string as local time
|
|
10
|
+
// (except time zone is specified in time string). And `format.formateTime` returns
|
|
11
|
+
// local time by default. option.useUTC is false by default. This design have
|
|
12
|
+
// concidered these common case:
|
|
13
|
+
// (1) Time that is persistent in server is in UTC, but it is needed to be diplayed
|
|
14
|
+
// in local time by default.
|
|
15
|
+
// (2) By default, the input data string (e.g., '2011-01-02') should be displayed
|
|
16
|
+
// as its original time, without any time difference.
|
|
17
|
+
|
|
8
18
|
var zrUtil = require('zrender/core/util');
|
|
9
19
|
var numberUtil = require('../util/number');
|
|
10
20
|
var formatUtil = require('../util/format');
|
|
21
|
+
var scaleHelper = require('./helper');
|
|
11
22
|
|
|
12
23
|
var IntervalScale = require('./Interval');
|
|
13
24
|
|
|
@@ -41,17 +52,21 @@ define(function (require) {
|
|
|
41
52
|
var TimeScale = IntervalScale.extend({
|
|
42
53
|
type: 'time',
|
|
43
54
|
|
|
44
|
-
|
|
55
|
+
/**
|
|
56
|
+
* @override
|
|
57
|
+
*/
|
|
45
58
|
getLabel: function (val) {
|
|
46
59
|
var stepLvl = this._stepLvl;
|
|
47
60
|
|
|
48
61
|
var date = new Date(val);
|
|
49
62
|
|
|
50
|
-
return formatUtil.formatTime(stepLvl[0], date);
|
|
63
|
+
return formatUtil.formatTime(stepLvl[0], date, this.getSetting('useUTC'));
|
|
51
64
|
},
|
|
52
65
|
|
|
53
|
-
|
|
54
|
-
|
|
66
|
+
/**
|
|
67
|
+
* @override
|
|
68
|
+
*/
|
|
69
|
+
niceExtent: function (opt) {
|
|
55
70
|
var extent = this._extent;
|
|
56
71
|
// If extent start and end are same, expand them
|
|
57
72
|
if (extent[0] === extent[1]) {
|
|
@@ -66,21 +81,25 @@ define(function (require) {
|
|
|
66
81
|
extent[0] = extent[1] - ONE_DAY;
|
|
67
82
|
}
|
|
68
83
|
|
|
69
|
-
this.niceTicks(
|
|
84
|
+
this.niceTicks(opt.splitNumber);
|
|
70
85
|
|
|
71
86
|
// var extent = this._extent;
|
|
72
87
|
var interval = this._interval;
|
|
73
88
|
|
|
74
|
-
if (!fixMin) {
|
|
89
|
+
if (!opt.fixMin) {
|
|
75
90
|
extent[0] = numberUtil.round(mathFloor(extent[0] / interval) * interval);
|
|
76
91
|
}
|
|
77
|
-
if (!fixMax) {
|
|
92
|
+
if (!opt.fixMax) {
|
|
78
93
|
extent[1] = numberUtil.round(mathCeil(extent[1] / interval) * interval);
|
|
79
94
|
}
|
|
80
95
|
},
|
|
81
96
|
|
|
82
|
-
|
|
97
|
+
/**
|
|
98
|
+
* @override
|
|
99
|
+
*/
|
|
83
100
|
niceTicks: function (approxTickNum) {
|
|
101
|
+
var timezoneOffset = this.getSetting('useUTC')
|
|
102
|
+
? 0 : numberUtil.getTimezoneOffset() * 60 * 1000;
|
|
84
103
|
approxTickNum = approxTickNum || 10;
|
|
85
104
|
|
|
86
105
|
var extent = this._extent;
|
|
@@ -103,10 +122,12 @@ define(function (require) {
|
|
|
103
122
|
}
|
|
104
123
|
|
|
105
124
|
var niceExtent = [
|
|
106
|
-
mathCeil(extent[0] / interval) * interval,
|
|
107
|
-
mathFloor(extent[1] / interval) * interval
|
|
125
|
+
Math.round(mathCeil((extent[0] - timezoneOffset) / interval) * interval + timezoneOffset),
|
|
126
|
+
Math.round(mathFloor((extent[1] - timezoneOffset)/ interval) * interval + timezoneOffset)
|
|
108
127
|
];
|
|
109
128
|
|
|
129
|
+
scaleHelper.fixExtent(niceExtent, extent);
|
|
130
|
+
|
|
110
131
|
this._stepLvl = level;
|
|
111
132
|
// Interval will be used in getTicks
|
|
112
133
|
this._interval = interval;
|
|
@@ -151,10 +172,11 @@ define(function (require) {
|
|
|
151
172
|
];
|
|
152
173
|
|
|
153
174
|
/**
|
|
175
|
+
* @param {module:echarts/model/Model}
|
|
154
176
|
* @return {module:echarts/scale/Time}
|
|
155
177
|
*/
|
|
156
|
-
TimeScale.create = function () {
|
|
157
|
-
return new TimeScale();
|
|
178
|
+
TimeScale.create = function (model) {
|
|
179
|
+
return new TimeScale({useUTC: model.ecModel.get('useUTC')});
|
|
158
180
|
};
|
|
159
181
|
|
|
160
182
|
return TimeScale;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* For testable.
|
|
3
|
+
*/
|
|
4
|
+
define(function (require) {
|
|
5
|
+
|
|
6
|
+
var numberUtil = require('../util/number');
|
|
7
|
+
|
|
8
|
+
var roundNumber = numberUtil.round;
|
|
9
|
+
|
|
10
|
+
var helper = {};
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @param {Array.<number>} extent Both extent[0] and extent[1] should be valid number.
|
|
14
|
+
* Should be extent[0] < extent[1].
|
|
15
|
+
* @param {number} splitNumber splitNumber should be >= 1.
|
|
16
|
+
* @param {number} [minInterval]
|
|
17
|
+
* @return {Object} {interval, intervalPrecision, niceTickExtent}
|
|
18
|
+
*/
|
|
19
|
+
helper.intervalScaleNiceTicks = function (extent, splitNumber, minInterval) {
|
|
20
|
+
var result = {};
|
|
21
|
+
var span = extent[1] - extent[0];
|
|
22
|
+
|
|
23
|
+
var interval = result.interval = numberUtil.nice(span / splitNumber, true);
|
|
24
|
+
if (minInterval != null && interval < minInterval) {
|
|
25
|
+
interval = result.interval = minInterval;
|
|
26
|
+
}
|
|
27
|
+
// Tow more digital for tick.
|
|
28
|
+
var precision = result.intervalPrecision = numberUtil.getPrecisionSafe(interval) + 2;
|
|
29
|
+
// Niced extent inside original extent
|
|
30
|
+
var niceTickExtent = result.niceTickExtent = [
|
|
31
|
+
roundNumber(Math.ceil(extent[0] / interval) * interval, precision),
|
|
32
|
+
roundNumber(Math.floor(extent[1] / interval) * interval, precision)
|
|
33
|
+
];
|
|
34
|
+
|
|
35
|
+
helper.fixExtent(niceTickExtent, extent);
|
|
36
|
+
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
function clamp(niceTickExtent, idx, extent) {
|
|
41
|
+
niceTickExtent[idx] = Math.max(Math.min(niceTickExtent[idx], extent[1]), extent[0]);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// In some cases (e.g., splitNumber is 1), niceTickExtent may be out of extent.
|
|
45
|
+
helper.fixExtent = function (niceTickExtent, extent) {
|
|
46
|
+
!isFinite(niceTickExtent[0]) && (niceTickExtent[0] = extent[0]);
|
|
47
|
+
!isFinite(niceTickExtent[1]) && (niceTickExtent[1] = extent[1]);
|
|
48
|
+
clamp(niceTickExtent, 0, extent);
|
|
49
|
+
clamp(niceTickExtent, 1, extent);
|
|
50
|
+
if (niceTickExtent[0] > niceTickExtent[1]) {
|
|
51
|
+
niceTickExtent[0] = niceTickExtent[1];
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
helper.intervalScaleGetTicks = function (interval, extent, niceTickExtent, intervalPrecision) {
|
|
56
|
+
var ticks = [];
|
|
57
|
+
|
|
58
|
+
// If interval is 0, return [];
|
|
59
|
+
if (!interval) {
|
|
60
|
+
return ticks;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// Consider this case: using dataZoom toolbox, zoom and zoom.
|
|
64
|
+
var safeLimit = 10000;
|
|
65
|
+
|
|
66
|
+
if (extent[0] < niceTickExtent[0]) {
|
|
67
|
+
ticks.push(extent[0]);
|
|
68
|
+
}
|
|
69
|
+
var tick = niceTickExtent[0];
|
|
70
|
+
|
|
71
|
+
while (tick <= niceTickExtent[1]) {
|
|
72
|
+
ticks.push(tick);
|
|
73
|
+
// Avoid rounding error
|
|
74
|
+
tick = roundNumber(tick + interval, intervalPrecision);
|
|
75
|
+
if (tick === ticks[ticks.length - 1]) {
|
|
76
|
+
// Consider out of safe float point, e.g.,
|
|
77
|
+
// -3711126.9907707 + 2e-10 === -3711126.9907707
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
if (ticks.length > safeLimit) {
|
|
81
|
+
return [];
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// Consider this case: the last item of ticks is smaller
|
|
85
|
+
// than niceTickExtent[1] and niceTickExtent[1] === extent[1].
|
|
86
|
+
if (extent[1] > (ticks.length ? ticks[ticks.length - 1] : niceTickExtent[1])) {
|
|
87
|
+
ticks.push(extent[1]);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
return ticks;
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
return helper;
|
|
94
|
+
});
|