This is an automated email from the ASF dual-hosted git repository.
shenyi pushed a commit to branch typescript
in repository https://gitbox.apache.org/repos/asf/incubator-echarts.git
The following commit(s) were added to refs/heads/typescript by this push:
new 6c589a9 ts: more strict getItemModel type
6c589a9 is described below
commit 6c589a9f71dddf8963561dd14f98b555721e2667
Author: pissang <[email protected]>
AuthorDate: Fri Mar 6 21:32:22 2020 +0800
ts: more strict getItemModel type
---
src/chart/boxplot/boxplotVisual.ts | 4 +-
src/chart/effectScatter/EffectScatterSeries.ts | 25 +--
src/chart/graph/GraphSeries.ts | 9 +-
src/chart/graph/GraphView.ts | 11 +-
src/chart/graph/categoryFilter.ts | 4 +-
src/chart/graph/categoryVisual.ts | 34 ++--
src/chart/graph/createView.ts | 4 +-
src/chart/graph/edgeVisual.ts | 4 +-
src/chart/graph/forceLayout.ts | 8 +-
src/chart/graph/simpleLayoutHelper.ts | 6 +-
src/chart/heatmap/HeatmapView.ts | 4 +-
src/chart/helper/EffectSymbol.ts | 15 +-
src/chart/lines/LinesSeries.ts | 216 ++++++++++++++++++-------
src/chart/lines/linesLayout.ts | 111 ++++++-------
src/chart/lines/linesVisual.ts | 26 +--
src/chart/parallel/ParallelSeries.ts | 2 +-
src/chart/scatter/ScatterSeries.ts | 1 +
src/data/Graph.ts | 14 +-
src/data/List.ts | 7 +-
src/data/Tree.ts | 8 +-
src/model/Series.ts | 8 +-
src/util/types.ts | 4 +-
src/visual/seriesColor.ts | 36 ++---
23 files changed, 349 insertions(+), 212 deletions(-)
diff --git a/src/chart/boxplot/boxplotVisual.ts
b/src/chart/boxplot/boxplotVisual.ts
index 8443c18..ba75c13 100644
--- a/src/chart/boxplot/boxplotVisual.ts
+++ b/src/chart/boxplot/boxplotVisual.ts
@@ -19,7 +19,7 @@
import GlobalModel from '../../model/Global';
import ExtensionAPI from '../../ExtensionAPI';
-import BoxplotSeriesModel from './BoxplotSeries';
+import BoxplotSeriesModel, { BoxplotDataItemOption } from './BoxplotSeries';
var borderColorQuery = ['itemStyle', 'borderColor'] as const;
@@ -42,7 +42,7 @@ export default function (ecModel: GlobalModel, api:
ExtensionAPI) {
// Only visible series has each data be visual encoded
if (!ecModel.isSeriesFiltered(seriesModel)) {
data.each(function (idx) {
- var itemModel = data.getItemModel(idx);
+ var itemModel = data.getItemModel<BoxplotDataItemOption>(idx);
data.setItemVisual(
idx,
{color: itemModel.get(borderColorQuery, true)}
diff --git a/src/chart/effectScatter/EffectScatterSeries.ts
b/src/chart/effectScatter/EffectScatterSeries.ts
index bbbb8d3..9d1196c 100644
--- a/src/chart/effectScatter/EffectScatterSeries.ts
+++ b/src/chart/effectScatter/EffectScatterSeries.ts
@@ -37,6 +37,17 @@ import List from '../../data/List';
type ScatterDataValue = OptionDataValue | OptionDataValue[]
+interface RippleEffect {
+ period?: number
+ /**
+ * Scale of ripple
+ */
+ scale?: number
+
+ brushType?: 'fill' | 'stroke'
+
+ color?: ZRColor
+}
export interface EffectScatterDataItemOption extends SymbolOptionMixin {
name?: string
@@ -49,6 +60,8 @@ export interface EffectScatterDataItemOption extends
SymbolOptionMixin {
itemStyle?: ItemStyleOption
label?: LabelOption
}
+
+ rippleEffect?: RippleEffect
}
export interface EffectScatterSeriesOption extends SeriesOption,
@@ -67,17 +80,7 @@ export interface EffectScatterSeriesOption extends
SeriesOption,
/**
* Ripple effect config
*/
- rippleEffect?: {
- period?: number
- /**
- * Scale of ripple
- */
- scale?: number
-
- brushType?: 'fill' | 'stroke'
-
- color?: ZRColor
- }
+ rippleEffect?: RippleEffect
data?: (EffectScatterDataItemOption | OptionDataValue)[]
}
diff --git a/src/chart/graph/GraphSeries.ts b/src/chart/graph/GraphSeries.ts
index a2be48d..b2d55e7 100644
--- a/src/chart/graph/GraphSeries.ts
+++ b/src/chart/graph/GraphSeries.ts
@@ -79,7 +79,10 @@ export interface GraphNodeItemOption extends
SymbolOptionMixin {
*/
fixed?: boolean
- category?: number
+ /**
+ * Index or name of category
+ */
+ category?: number | string
draggable?: boolean
@@ -112,6 +115,10 @@ export interface GraphEdgeItemOption {
symbol?: string | string[]
symbolSize?: number | number[]
+
+ ignoreForceLayout?: boolean
+
+ focusNodeAdjacency?: boolean
}
export interface GraphCategoryItemOption extends SymbolOptionMixin {
diff --git a/src/chart/graph/GraphView.ts b/src/chart/graph/GraphView.ts
index 12f3f6a..0963f01 100644
--- a/src/chart/graph/GraphView.ts
+++ b/src/chart/graph/GraphView.ts
@@ -29,7 +29,7 @@ import {getNodeGlobalScale} from './graphHelper';
import ChartView from '../../view/Chart';
import GlobalModel from '../../model/Global';
import ExtensionAPI from '../../ExtensionAPI';
-import GraphSeriesModel, { GraphNodeItemOption } from './GraphSeries';
+import GraphSeriesModel, { GraphNodeItemOption, GraphEdgeItemOption } from
'./GraphSeries';
import { CoordinateSystem } from '../../coord/CoordinateSystem';
import View from '../../coord/View';
import { GraphNode, GraphEdge } from '../../data/Graph';
@@ -59,7 +59,8 @@ function getItemOpacity(
opacityPath: typeof nodeOpacityPath | typeof lineOpacityPath
): number {
var opacity = item.getVisual('opacity');
- return opacity != null ? opacity : item.getModel().get(opacityPath);
+ return opacity != null
+ ? opacity : item.getModel<any>().get(opacityPath);
}
function fadeOutItem(
@@ -236,7 +237,7 @@ class GraphView extends ChartView {
(el as any)[FOCUS_ADJACENCY] && el.off('mouseover', (el as
any)[FOCUS_ADJACENCY]);
(el as any)[UNFOCUS_ADJACENCY] && el.off('mouseout', (el as
any)[UNFOCUS_ADJACENCY]);
- if (edge.getModel().get('focusNodeAdjacency')) {
+ if
(edge.getModel<GraphEdgeItemOption>().get('focusNodeAdjacency')) {
el.on('mouseover', (el as any)[FOCUS_ADJACENCY] = function () {
graphView._clearTimer();
api.dispatchAction({
@@ -256,8 +257,8 @@ class GraphView extends ChartView {
var cx = data.getLayout('cx');
var cy = data.getLayout('cy');
data.eachItemGraphicEl(function (el: Symbol, idx) {
- var itemModel = data.getItemModel(idx);
- var labelRotate = itemModel.get('label.rotate') || 0;
+ var itemModel = data.getItemModel<GraphNodeItemOption>(idx);
+ var labelRotate = itemModel.get(['label', 'rotate']) || 0;
var symbolPath = el.getSymbolPath();
if (circularRotateLabel) {
var pos = data.getItemLayout(idx);
diff --git a/src/chart/graph/categoryFilter.ts
b/src/chart/graph/categoryFilter.ts
index 66b6b4e..11edc30 100644
--- a/src/chart/graph/categoryFilter.ts
+++ b/src/chart/graph/categoryFilter.ts
@@ -18,7 +18,7 @@
*/
import GlobalModel from '../../model/Global';
-import GraphSeriesModel from './GraphSeries';
+import GraphSeriesModel, { GraphNodeItemOption } from './GraphSeries';
import type LegendModel from '../../component/legend/LegendModel';
export default function (ecModel: GlobalModel) {
@@ -36,7 +36,7 @@ export default function (ecModel: GlobalModel) {
var categoryNames = categoriesData.mapArray(categoriesData.getName);
data.filterSelf(function (idx) {
- var model = data.getItemModel(idx);
+ var model = data.getItemModel<GraphNodeItemOption>(idx);
var category = model.getShallow('category');
if (category != null) {
if (typeof category === 'number') {
diff --git a/src/chart/graph/categoryVisual.ts
b/src/chart/graph/categoryVisual.ts
index 2ee40b1..7803c6c 100644
--- a/src/chart/graph/categoryVisual.ts
+++ b/src/chart/graph/categoryVisual.ts
@@ -18,7 +18,7 @@
*/
import GlobalModel from '../../model/Global';
-import GraphSeriesModel from './GraphSeries';
+import GraphSeriesModel, { GraphNodeItemOption } from './GraphSeries';
import { Dictionary, ColorString } from '../../util/types';
export default function (ecModel: GlobalModel) {
@@ -34,17 +34,23 @@ export default function (ecModel: GlobalModel) {
var name = categoriesData.getName(idx);
// Add prefix to avoid conflict with Object.prototype.
categoryNameIdxMap['ec-' + name] = idx;
- var itemModel = categoriesData.getItemModel(idx);
+ var itemModel =
categoriesData.getItemModel<GraphNodeItemOption>(idx);
- var color = itemModel.get('itemStyle.color')
+ var color = itemModel.get(['itemStyle', 'color'])
|| seriesModel.getColorFromPalette(name, paletteScope);
categoriesData.setItemVisual(idx, 'color', color);
- var itemStyleList = ['opacity', 'symbol', 'symbolSize',
'symbolKeepAspect'];
- for (var i = 0; i < itemStyleList.length; i++) {
- var itemStyle = itemModel.getShallow(itemStyleList[i], true);
- if (itemStyle != null) {
- categoriesData.setItemVisual(idx, itemStyleList[i],
itemStyle);
+ var opacity = itemModel.get(['itemStyle', 'opacity']);
+ if (opacity != null) {
+ categoriesData.setItemVisual(idx, 'opacity', opacity);
+ }
+
+ var symbolVisualList = ['symbol', 'symbolSize',
'symbolKeepAspect'] as const;
+
+ for (var i = 0; i < symbolVisualList.length; i++) {
+ var symbolVisual = itemModel.getShallow(symbolVisualList[i],
true);
+ if (symbolVisual != null) {
+ categoriesData.setItemVisual(idx, symbolVisualList[i],
symbolVisual);
}
}
});
@@ -52,20 +58,20 @@ export default function (ecModel: GlobalModel) {
// Assign category color to visual
if (categoriesData.count()) {
data.each(function (idx) {
- var model = data.getItemModel(idx);
+ var model = data.getItemModel<GraphNodeItemOption>(idx);
var category = model.getShallow('category');
if (category != null) {
if (typeof category === 'string') {
category = categoryNameIdxMap['ec-' + category];
}
- var itemStyleList = ['color', 'opacity', 'symbol',
'symbolSize', 'symbolKeepAspect'];
+ var visualList = ['color', 'opacity', 'symbol',
'symbolSize', 'symbolKeepAspect'] as const;
- for (var i = 0; i < itemStyleList.length; i++) {
- if (data.getItemVisual(idx, itemStyleList[i], true) ==
null) {
+ for (var i = 0; i < visualList.length; i++) {
+ if (data.getItemVisual(idx, visualList[i], true) ==
null) {
data.setItemVisual(
- idx, itemStyleList[i],
- categoriesData.getItemVisual(category,
itemStyleList[i])
+ idx, visualList[i],
+ categoriesData.getItemVisual(category,
visualList[i])
);
}
}
diff --git a/src/chart/graph/createView.ts b/src/chart/graph/createView.ts
index ceaa7ab..bca60e2 100644
--- a/src/chart/graph/createView.ts
+++ b/src/chart/graph/createView.ts
@@ -21,7 +21,7 @@
import View from '../../coord/View';
import {getLayoutRect} from '../../util/layout';
import * as bbox from 'zrender/src/core/bbox';
-import GraphSeriesModel from './GraphSeries';
+import GraphSeriesModel, { GraphNodeItemOption } from './GraphSeries';
import ExtensionAPI from '../../ExtensionAPI';
import GlobalModel from '../../model/Global';
import { extend } from 'zrender/src/core/util';
@@ -44,7 +44,7 @@ export default function (ecModel: GlobalModel, api:
ExtensionAPI) {
var data = seriesModel.getData();
var positions = data.mapArray(function (idx) {
- var itemModel = data.getItemModel(idx);
+ var itemModel = data.getItemModel<GraphNodeItemOption>(idx);
return [+itemModel.get('x'), +itemModel.get('y')];
});
diff --git a/src/chart/graph/edgeVisual.ts b/src/chart/graph/edgeVisual.ts
index e5fb1d7..ffa0eb6 100644
--- a/src/chart/graph/edgeVisual.ts
+++ b/src/chart/graph/edgeVisual.ts
@@ -18,7 +18,7 @@
*/
import GlobalModel from '../../model/Global';
-import GraphSeriesModel from './GraphSeries';
+import GraphSeriesModel, { GraphEdgeItemOption } from './GraphSeries';
function normalize(a: string | number | (string | number)[]): (string |
number)[] {
if (!(a instanceof Array)) {
@@ -45,7 +45,7 @@ export default function (ecModel: GlobalModel) {
edgeData.setVisual('opacity', seriesModel.get(opacityQuery));
edgeData.each(function (idx) {
- var itemModel = edgeData.getItemModel(idx);
+ var itemModel = edgeData.getItemModel<GraphEdgeItemOption>(idx);
var edge = graph.getEdgeByIndex(idx);
var symbolType = normalize(itemModel.getShallow('symbol', true));
var symbolSize = normalize(itemModel.getShallow('symbolSize',
true));
diff --git a/src/chart/graph/forceLayout.ts b/src/chart/graph/forceLayout.ts
index e7501ee..1ffecec 100644
--- a/src/chart/graph/forceLayout.ts
+++ b/src/chart/graph/forceLayout.ts
@@ -24,7 +24,7 @@ import {linearMap} from '../../util/number';
import * as vec2 from 'zrender/src/core/vector';
import * as zrUtil from 'zrender/src/core/util';
import GlobalModel from '../../model/Global';
-import GraphSeriesModel from './GraphSeries';
+import GraphSeriesModel, { GraphNodeItemOption, GraphEdgeItemOption } from
'./GraphSeries';
export interface ForceLayoutInstance {
step(cb: (stopped: boolean) => void): void
@@ -82,7 +82,7 @@ export default function (ecModel: GlobalModel) {
return {
w: rep,
rep: rep,
- fixed: nodeData.getItemModel(idx).get('fixed'),
+ fixed:
nodeData.getItemModel<GraphNodeItemOption>(idx).get('fixed'),
p: (!point || isNaN(point[0]) || isNaN(point[1])) ? null :
point
};
});
@@ -92,12 +92,12 @@ export default function (ecModel: GlobalModel) {
if (isNaN(d)) {
d = (edgeLengthArr[0] + edgeLengthArr[1]) / 2;
}
- var edgeModel = edge.getModel();
+ var edgeModel = edge.getModel<GraphEdgeItemOption>();
return {
n1: nodes[edge.node1.dataIndex],
n2: nodes[edge.node2.dataIndex],
d: d,
- curveness: edgeModel.get('lineStyle.curveness') || 0,
+ curveness: edgeModel.get(['lineStyle', 'curveness']) || 0,
ignoreForceLayout: edgeModel.get('ignoreForceLayout')
};
});
diff --git a/src/chart/graph/simpleLayoutHelper.ts
b/src/chart/graph/simpleLayoutHelper.ts
index 9a5abcc..58d5cae 100644
--- a/src/chart/graph/simpleLayoutHelper.ts
+++ b/src/chart/graph/simpleLayoutHelper.ts
@@ -18,7 +18,7 @@
*/
import * as vec2 from 'zrender/src/core/vector';
-import GraphSeriesModel from './GraphSeries';
+import GraphSeriesModel, { GraphNodeItemOption, GraphEdgeItemOption } from
'./GraphSeries';
import Graph from '../../data/Graph';
export function simpleLayout(seriesModel: GraphSeriesModel) {
@@ -29,7 +29,7 @@ export function simpleLayout(seriesModel: GraphSeriesModel) {
var graph = seriesModel.getGraph();
graph.eachNode(function (node) {
- var model = node.getModel();
+ var model = node.getModel<GraphNodeItemOption>();
node.setLayout([+model.get('x'), +model.get('y')]);
});
@@ -38,7 +38,7 @@ export function simpleLayout(seriesModel: GraphSeriesModel) {
export function simpleLayoutEdge(graph: Graph) {
graph.eachEdge(function (edge) {
- var curveness = edge.getModel().get('lineStyle.curveness') || 0;
+ var curveness = edge.getModel<GraphEdgeItemOption>().get(['lineStyle',
'curveness']) || 0;
var p1 = vec2.clone(edge.node1.getLayout());
var p2 = vec2.clone(edge.node2.getLayout());
var points = [p1, p2];
diff --git a/src/chart/heatmap/HeatmapView.ts b/src/chart/heatmap/HeatmapView.ts
index 90b98c7..f023eaa 100644
--- a/src/chart/heatmap/HeatmapView.ts
+++ b/src/chart/heatmap/HeatmapView.ts
@@ -22,7 +22,7 @@ import * as graphic from '../../util/graphic';
import HeatmapLayer from './HeatmapLayer';
import * as zrUtil from 'zrender/src/core/util';
import ChartView from '../../view/Chart';
-import HeatmapSeriesModel from './HeatmapSeries';
+import HeatmapSeriesModel, { HeatmapDataItemOption } from './HeatmapSeries';
import type GlobalModel from '../../model/Global';
import type ExtensionAPI from '../../ExtensionAPI';
import type VisualMapModel from '../../component/visualMap/VisualMapModel';
@@ -245,7 +245,7 @@ class HeatmapView extends ChartView {
});
}
- var itemModel = data.getItemModel(idx);
+ var itemModel = data.getItemModel<HeatmapDataItemOption>(idx);
// Optimization for large datset
if (data.hasItemOption) {
diff --git a/src/chart/helper/EffectSymbol.ts b/src/chart/helper/EffectSymbol.ts
index fed7d5d..618e368 100644
--- a/src/chart/helper/EffectSymbol.ts
+++ b/src/chart/helper/EffectSymbol.ts
@@ -30,6 +30,7 @@ import SymbolClz from './Symbol';
import List from '../../data/List';
import type { ZRColor } from '../../util/types';
import type Displayable from 'zrender/src/graphic/Displayable';
+import { EffectScatterDataItemOption } from
'../effectScatter/EffectScatterSeries';
var EFFECT_RIPPLE_NUMBER = 3;
@@ -175,7 +176,7 @@ class EffectSymbol extends Group {
(this.childAt(0) as SymbolClz).updateData(data, idx);
var rippleGroup = this.childAt(1);
- var itemModel = data.getItemModel(idx);
+ var itemModel = data.getItemModel<EffectScatterDataItemOption>(idx);
var symbolType = data.getItemVisual(idx, 'symbol');
var symbolSize = normalizeSymbolSize(data.getItemVisual(idx,
'symbolSize'));
var color = data.getItemVisual(idx, 'color');
@@ -197,15 +198,15 @@ class EffectSymbol extends Group {
var effectCfg: RippleEffectCfg = {};
effectCfg.showEffectOn = seriesModel.get('showEffectOn');
- effectCfg.rippleScale = itemModel.get('rippleEffect.scale');
- effectCfg.brushType = itemModel.get('rippleEffect.brushType');
- effectCfg.period = itemModel.get('rippleEffect.period') * 1000;
+ effectCfg.rippleScale = itemModel.get(['rippleEffect', 'scale']);
+ effectCfg.brushType = itemModel.get(['rippleEffect', 'brushType']);
+ effectCfg.period = itemModel.get(['rippleEffect', 'period']) * 1000;
effectCfg.effectOffset = idx / data.count();
- effectCfg.z = itemModel.getShallow('z') || 0;
- effectCfg.zlevel = itemModel.getShallow('zlevel') || 0;
+ effectCfg.z = seriesModel.getShallow('z') || 0;
+ effectCfg.zlevel = seriesModel.getShallow('zlevel') || 0;
effectCfg.symbolType = symbolType;
effectCfg.color = color;
- effectCfg.rippleEffectColor = itemModel.get('rippleEffect.color');
+ effectCfg.rippleEffectColor = itemModel.get(['rippleEffect', 'color']);
this.off('mouseover').off('mouseout').off('emphasis').off('normal');
diff --git a/src/chart/lines/LinesSeries.ts b/src/chart/lines/LinesSeries.ts
index 0801875..40f79af 100644
--- a/src/chart/lines/LinesSeries.ts
+++ b/src/chart/lines/LinesSeries.ts
@@ -17,8 +17,6 @@
* under the License.
*/
-// @ts-nocheck
-
/* global Uint32Array, Float64Array, Float32Array */
import {__DEV__} from '../../config';
@@ -27,22 +25,35 @@ import List from '../../data/List';
import { concatArray, mergeAll, map } from 'zrender/src/core/util';
import {encodeHTML} from '../../util/format';
import CoordinateSystem from '../../CoordinateSystem';
+import {
+ SeriesOption,
+ SeriesOnCartesianOptionMixin,
+ SeriesOnGeoOptionMixin,
+ SeriesOnPolarOptionMixin,
+ SeriesOnCalendarOptionMixin,
+ ColorString,
+ SeriesLargeOptionMixin,
+ LabelOption,
+ LineStyleOption,
+ OptionDataValue
+} from '../../util/types';
+import GlobalModel from '../../model/Global';
var Uint32Arr = typeof Uint32Array === 'undefined' ? Array : Uint32Array;
var Float64Arr = typeof Float64Array === 'undefined' ? Array : Float64Array;
-function compatEc2(seriesOpt) {
+function compatEc2(seriesOpt: LinesSeriesOption) {
var data = seriesOpt.data;
- if (data && data[0] && data[0][0] && data[0][0].coord) {
+ if (data && data[0] && (data as LegacyDataItemOption[][])[0][0] && (data
as LegacyDataItemOption[][])[0][0].coord) {
if (__DEV__) {
console.warn('Lines data configuration has been changed to'
+ ' { coords:[[1,2],[2,3]] }');
}
- seriesOpt.data = map(data, function (itemOpt) {
+ seriesOpt.data = map(data as LegacyDataItemOption[][], function
(itemOpt) {
var coords = [
itemOpt[0].coord, itemOpt[1].coord
];
- var target = {
+ var target: LinesDataItemOption = {
coords: coords
};
if (itemOpt[0].name) {
@@ -56,15 +67,113 @@ function compatEc2(seriesOpt) {
}
}
-var LinesSeries = SeriesModel.extend({
+type LinesCoords = number[][]
+
+type LinesValue = OptionDataValue | OptionDataValue[]
+
+interface LinesLineStyleOption extends LineStyleOption {
+ curveness?: number
+}
+
+// @deprecated
+interface LegacyDataItemOption {
+ coord: number[]
+ name: string
+}
+
+export interface LinesDataItemOption {
+ name?: string
+
+ fromName?: string
+ toName?: string
+
+ symbol?: string[] | string
+ symbolSize?: number[] | number
+
+ coords?: LinesCoords
+
+ value?: LinesValue
+
+ lineStyle?: LinesLineStyleOption
+ label?: LabelOption
+
+ emphasis?: {
+ lineStyle?: LineStyleOption
+ label?: LabelOption
+ }
+}
+
+export interface LinesSeriesOption extends SeriesOption,
+ SeriesOnCartesianOptionMixin, SeriesOnGeoOptionMixin,
SeriesOnPolarOptionMixin,
+ SeriesOnCalendarOptionMixin, SeriesLargeOptionMixin {
+
+ coordinateSystem?: string
+ hoverAnimation?: boolean
+
+ symbol?: string[] | string
+ symbolSize?: number[] | number
+
+ effect?: {
+ show?: boolean
+ period?: number
+ delay?: number | ((idx: number) => number)
+ /**
+ * If move with constant speed px/sec
+ * period will be ignored if this property is > 0,
+ */
+ constantSpeed?: number
+
+ symbol?: string
+ symbolSize?: number | number[]
+ loop?: boolean
+ /**
+ * Length of trail, 0 - 1
+ */
+ trailLength?: number
+ /**
+ * Default to be same with lineStyle.color
+ */
+ color?: ColorString
+ }
+
+ /**
+ * If lines are polyline
+ * polyline not support curveness, label, animation
+ */
+ polyline?: boolean
+ /**
+ * If clip the overflow.
+ * Available when coordinateSystem is cartesian or polar.
+ */
+ clip?: boolean
+
+ label?: LabelOption
+ lineStyle?: LinesLineStyleOption
+
+ emphasis?: {
+ label?: LabelOption
+ lineStyle?: LineStyleOption
+ }
+
+ data?: LinesDataItemOption[]
+ // Stored as a flat array. In format
+ // Points Count(2) | x | y | x | y | Points Count(3) | x | y | x | y
| x | y |
+ | ArrayLike<number>
+}
+
+class LinesSeriesModel extends SeriesModel<LinesSeriesOption> {
+
+ static readonly type = 'series.lines'
+ readonly type = LinesSeriesModel.type
- type: 'series.lines',
+ static readonly dependencies = ['grid', 'polar', 'geo', 'calendar']
- dependencies: ['grid', 'polar'],
+ visualColorAccessPath: ['lineStyle', 'color']
- visualColorAccessPath: 'lineStyle.color',
+ private _flatCoords: ArrayLike<number>
+ private _flatCoordsOffset: ArrayLike<number>
- init: function (option) {
+ init(option: LinesSeriesOption) {
// The input data may be null/undefined.
option.data = option.data || [];
@@ -78,10 +187,10 @@ var LinesSeries = SeriesModel.extend({
option.data = new Float32Array(result.count);
}
- LinesSeries.superApply(this, 'init', arguments);
- },
+ super.init.apply(this, arguments as any);
+ }
- mergeOption: function (option) {
+ mergeOption(option: LinesSeriesOption) {
// The input data may be null/undefined.
option.data = option.data || [];
@@ -97,10 +206,10 @@ var LinesSeries = SeriesModel.extend({
}
}
- LinesSeries.superApply(this, 'mergeOption', arguments);
- },
+ super.mergeOption.apply(this, arguments as any);
+ }
- appendData: function (params) {
+ appendData(params: Pick<LinesSeriesOption, 'data'>) {
var result = this._processFlatCoordsArray(params.data);
if (result.flatCoords) {
if (!this._flatCoords) {
@@ -115,10 +224,10 @@ var LinesSeries = SeriesModel.extend({
}
this.getRawData().appendData(params.data);
- },
+ }
- _getCoordsFromItemModel: function (idx) {
- var itemModel = this.getData().getItemModel(idx);
+ _getCoordsFromItemModel(idx: number) {
+ var itemModel = this.getData().getItemModel<LinesDataItemOption>(idx);
var coords = (itemModel.option instanceof Array)
? itemModel.option : itemModel.getShallow('coords');
@@ -130,18 +239,18 @@ var LinesSeries = SeriesModel.extend({
}
}
return coords;
- },
+ }
- getLineCoordsCount: function (idx) {
+ getLineCoordsCount(idx: number) {
if (this._flatCoordsOffset) {
return this._flatCoordsOffset[idx * 2 + 1];
}
else {
return this._getCoordsFromItemModel(idx).length;
}
- },
+ }
- getLineCoords: function (idx, out) {
+ getLineCoords(idx: number, out: number[][]) {
if (this._flatCoordsOffset) {
var offset = this._flatCoordsOffset[idx * 2];
var len = this._flatCoordsOffset[idx * 2 + 1];
@@ -161,9 +270,9 @@ var LinesSeries = SeriesModel.extend({
}
return coords.length;
}
- },
+ }
- _processFlatCoordsArray: function (data) {
+ _processFlatCoordsArray(data: LinesSeriesOption['data']) {
var startOffset = 0;
if (this._flatCoords) {
startOffset = this._flatCoords.length;
@@ -173,21 +282,21 @@ var LinesSeries = SeriesModel.extend({
if (typeof data[0] === 'number') {
var len = data.length;
// Store offset and len of each segment
- var coordsOffsetAndLenStorage = new Uint32Arr(len);
- var coordsStorage = new Float64Arr(len);
+ var coordsOffsetAndLenStorage = new Uint32Arr(len) as Uint32Array;
+ var coordsStorage = new Float64Arr(len) as Float64Array;
var coordsCursor = 0;
var offsetCursor = 0;
var dataCount = 0;
for (var i = 0; i < len;) {
dataCount++;
- var count = data[i++];
+ var count = data[i++] as number;
// Offset
coordsOffsetAndLenStorage[offsetCursor++] = coordsCursor +
startOffset;
// Len
coordsOffsetAndLenStorage[offsetCursor++] = count;
for (var k = 0; k < count; k++) {
- var x = data[i++];
- var y = data[i++];
+ var x = data[i++] as number;
+ var y = data[i++] as number;
coordsStorage[coordsCursor++] = x;
coordsStorage[coordsCursor++] = y;
@@ -211,9 +320,9 @@ var LinesSeries = SeriesModel.extend({
flatCoords: null,
count: data.length
};
- },
+ }
- getInitialData: function (option, ecModel) {
+ getInitialData(option: LinesSeriesOption, ecModel: GlobalModel) {
if (__DEV__) {
var CoordSys = CoordinateSystem.get(option.coordinateSystem);
if (!CoordSys) {
@@ -239,11 +348,11 @@ var LinesSeries = SeriesModel.extend({
});
return lineData;
- },
+ }
- formatTooltip: function (dataIndex) {
+ formatTooltip(dataIndex: number) {
var data = this.getData();
- var itemModel = data.getItemModel(dataIndex);
+ var itemModel = data.getItemModel<LinesDataItemOption>(dataIndex);
var name = itemModel.get('name');
if (name) {
return name;
@@ -255,29 +364,29 @@ var LinesSeries = SeriesModel.extend({
toName != null && html.push(toName);
return encodeHTML(html.join(' > '));
- },
+ }
- preventIncremental: function () {
- return !!this.get('effect.show');
- },
+ preventIncremental() {
+ return !!this.get(['effect', 'show']);
+ }
- getProgressive: function () {
+ getProgressive() {
var progressive = this.option.progressive;
if (progressive == null) {
return this.option.large ? 1e4 : this.get('progressive');
}
return progressive;
- },
+ }
- getProgressiveThreshold: function () {
+ getProgressiveThreshold() {
var progressiveThreshold = this.option.progressiveThreshold;
if (progressiveThreshold == null) {
return this.option.large ? 2e4 : this.get('progressiveThreshold');
}
return progressiveThreshold;
- },
+ }
- defaultOption: {
+ static defaultOption: LinesSeriesOption = {
coordinateSystem: 'geo',
zlevel: 0,
z: 2,
@@ -296,30 +405,19 @@ var LinesSeries = SeriesModel.extend({
effect: {
show: false,
period: 4,
- // Animation delay. support callback
- // delay: 0,
- // If move with constant speed px/sec
- // period will be ignored if this property is > 0,
constantSpeed: 0,
symbol: 'circle',
symbolSize: 3,
loop: true,
- // Length of trail, 0 - 1
trailLength: 0.2
- // Same with lineStyle.color
- // color
},
large: false,
// Available when large is true
largeThreshold: 2000,
- // If lines are polyline
- // polyline not support curveness, label, animation
polyline: false,
- // If clip the overflow.
- // Available when coordinateSystem is cartesian or polar.
clip: true,
label: {
@@ -333,6 +431,8 @@ var LinesSeries = SeriesModel.extend({
opacity: 0.5
}
}
-});
+}
+
+SeriesModel.registerClass(LinesSeriesModel);
-export default LinesSeries;
\ No newline at end of file
+export default LinesSeriesModel;
\ No newline at end of file
diff --git a/src/chart/lines/linesLayout.ts b/src/chart/lines/linesLayout.ts
index a041a1b..8d5c613 100644
--- a/src/chart/lines/linesLayout.ts
+++ b/src/chart/lines/linesLayout.ts
@@ -17,82 +17,83 @@
* under the License.
*/
-// @ts-nocheck
-
/* global Float32Array */
import createRenderPlanner from '../helper/createRenderPlanner';
+import { StageHandler } from '../../util/types';
+import LinesSeriesModel, {LinesDataItemOption} from './LinesSeries';
-export default {
+const linesLayout: StageHandler = {
seriesType: 'lines',
plan: createRenderPlanner(),
- reset: function (seriesModel) {
+ reset: function (seriesModel: LinesSeriesModel) {
var coordSys = seriesModel.coordinateSystem;
var isPolyline = seriesModel.get('polyline');
var isLarge = seriesModel.pipelineContext.large;
+ return {
+ progress(params, lineData) {
+ var lineCoords: number[][] = [];
+ if (isLarge) {
+ var points;
+ var segCount = params.end - params.start;
+ if (isPolyline) {
+ var totalCoordsCount = 0;
+ for (var i = params.start; i < params.end; i++) {
+ totalCoordsCount +=
seriesModel.getLineCoordsCount(i);
+ }
+ points = new Float32Array(segCount + totalCoordsCount
* 2);
+ }
+ else {
+ points = new Float32Array(segCount * 4);
+ }
- function progress(params, lineData) {
- var lineCoords = [];
- if (isLarge) {
- var points;
- var segCount = params.end - params.start;
- if (isPolyline) {
- var totalCoordsCount = 0;
+ var offset = 0;
+ var pt: number[] = [];
for (var i = params.start; i < params.end; i++) {
- totalCoordsCount += seriesModel.getLineCoordsCount(i);
+ var len = seriesModel.getLineCoords(i, lineCoords);
+ if (isPolyline) {
+ points[offset++] = len;
+ }
+ for (var k = 0; k < len; k++) {
+ pt = coordSys.dataToPoint(lineCoords[k], false,
pt);
+ points[offset++] = pt[0];
+ points[offset++] = pt[1];
+ }
}
- points = new Float32Array(segCount + totalCoordsCount * 2);
- }
- else {
- points = new Float32Array(segCount * 4);
- }
- var offset = 0;
- var pt = [];
- for (var i = params.start; i < params.end; i++) {
- var len = seriesModel.getLineCoords(i, lineCoords);
- if (isPolyline) {
- points[offset++] = len;
- }
- for (var k = 0; k < len; k++) {
- pt = coordSys.dataToPoint(lineCoords[k], false, pt);
- points[offset++] = pt[0];
- points[offset++] = pt[1];
- }
+ lineData.setLayout('linesPoints', points);
}
+ else {
+ for (var i = params.start; i < params.end; i++) {
+ var itemModel =
lineData.getItemModel<LinesDataItemOption>(i);
+ var len = seriesModel.getLineCoords(i, lineCoords);
- lineData.setLayout('linesPoints', points);
- }
- else {
- for (var i = params.start; i < params.end; i++) {
- var itemModel = lineData.getItemModel(i);
- var len = seriesModel.getLineCoords(i, lineCoords);
-
- var pts = [];
- if (isPolyline) {
- for (var j = 0; j < len; j++) {
- pts.push(coordSys.dataToPoint(lineCoords[j]));
+ var pts = [];
+ if (isPolyline) {
+ for (var j = 0; j < len; j++) {
+ pts.push(coordSys.dataToPoint(lineCoords[j]));
+ }
}
- }
- else {
- pts[0] = coordSys.dataToPoint(lineCoords[0]);
- pts[1] = coordSys.dataToPoint(lineCoords[1]);
+ else {
+ pts[0] = coordSys.dataToPoint(lineCoords[0]);
+ pts[1] = coordSys.dataToPoint(lineCoords[1]);
- var curveness = itemModel.get('lineStyle.curveness');
- if (+curveness) {
- pts[2] = [
- (pts[0][0] + pts[1][0]) / 2 - (pts[0][1] -
pts[1][1]) * curveness,
- (pts[0][1] + pts[1][1]) / 2 - (pts[1][0] -
pts[0][0]) * curveness
- ];
+ var curveness = itemModel.get(['lineStyle',
'curveness']);
+ if (+curveness) {
+ pts[2] = [
+ (pts[0][0] + pts[1][0]) / 2 - (pts[0][1] -
pts[1][1]) * curveness,
+ (pts[0][1] + pts[1][1]) / 2 - (pts[1][0] -
pts[0][0]) * curveness
+ ];
+ }
}
+ lineData.setItemLayout(i, pts);
}
- lineData.setItemLayout(i, pts);
}
}
- }
-
- return { progress: progress };
+ };
}
-};
\ No newline at end of file
+};
+
+export default linesLayout;
\ No newline at end of file
diff --git a/src/chart/lines/linesVisual.ts b/src/chart/lines/linesVisual.ts
index ed2c379..fd84a0b 100644
--- a/src/chart/lines/linesVisual.ts
+++ b/src/chart/lines/linesVisual.ts
@@ -17,21 +17,25 @@
* under the License.
*/
-// @ts-nocheck
+import { StageHandler } from '../../util/types';
+import List from '../../data/List';
+import LinesSeriesModel, { LinesDataItemOption } from './LinesSeries';
+import Model from '../../model/Model';
-
-function normalize(a) {
+function normalize(a: string | string[]): string[]
+function normalize(a: number | number[]): number[]
+function normalize(a: string | number | (string | number)[]): (string |
number)[] {
if (!(a instanceof Array)) {
a = [a, a];
}
return a;
}
-var opacityQuery = 'lineStyle.opacity'.split('.');
+var opacityQuery = ['lineStyle', 'opacity'] as const;
-export default {
+const linesVisual: StageHandler = {
seriesType: 'lines',
- reset: function (seriesModel, ecModel, api) {
+ reset(seriesModel: LinesSeriesModel) {
var symbolType = normalize(seriesModel.get('symbol'));
var symbolSize = normalize(seriesModel.get('symbolSize'));
var data = seriesModel.getData();
@@ -42,8 +46,8 @@ export default {
data.setVisual('toSymbolSize', symbolSize && symbolSize[1]);
data.setVisual('opacity', seriesModel.get(opacityQuery));
- function dataEach(data, idx) {
- var itemModel = data.getItemModel(idx);
+ function dataEach(data: List<LinesSeriesModel>, idx: number): void {
+ var itemModel = data.getItemModel(idx) as
Model<LinesDataItemOption>;
var symbolType = normalize(itemModel.getShallow('symbol', true));
var symbolSize = normalize(itemModel.getShallow('symbolSize',
true));
var opacity = itemModel.get(opacityQuery);
@@ -56,6 +60,10 @@ export default {
data.setItemVisual(idx, 'opacity', opacity);
}
- return {dataEach: data.hasItemOption ? dataEach : null};
+ return {
+ dataEach: data.hasItemOption ? dataEach : null
+ };
}
};
+
+export default linesVisual;
\ No newline at end of file
diff --git a/src/chart/parallel/ParallelSeries.ts
b/src/chart/parallel/ParallelSeries.ts
index d98aab0..9f0d6f3 100644
--- a/src/chart/parallel/ParallelSeries.ts
+++ b/src/chart/parallel/ParallelSeries.ts
@@ -29,7 +29,7 @@ export default SeriesModel.extend({
dependencies: ['parallel'],
- visualColorAccessPath: 'lineStyle.color',
+ visualColorAccessPath: ['lineStyle', 'color'],
getInitialData: function (option, ecModel) {
var source = this.getSource();
diff --git a/src/chart/scatter/ScatterSeries.ts
b/src/chart/scatter/ScatterSeries.ts
index f5cd3df..b143d3d 100644
--- a/src/chart/scatter/ScatterSeries.ts
+++ b/src/chart/scatter/ScatterSeries.ts
@@ -74,6 +74,7 @@ export interface ScatterSeriesOption extends SeriesOption,
}
data?: (ScatterDataItemOption | OptionDataValue)[]
+ | ArrayLike<number> // Can be a flattern array
}
diff --git a/src/data/Graph.ts b/src/data/Graph.ts
index 6322319..e52e2f2 100644
--- a/src/data/Graph.ts
+++ b/src/data/Graph.ts
@@ -365,14 +365,16 @@ class GraphNode {
}
// TODO: TYPE Same type with Model#getModel
- getModel(path?: string | string[]): Model {
+ getModel<T = unknown>(): Model<T>
+ getModel<T = unknown, S extends keyof T= keyof T>(path: S): Model<T[S]>
+ getModel<T = unknown>(path?: string): Model {
if (this.dataIndex < 0) {
return;
}
var graph = this.hostGraph;
- var itemModel = graph.data.getItemModel(this.dataIndex);
+ var itemModel = graph.data.getItemModel<T>(this.dataIndex);
- return itemModel.getModel(path as [string]);
+ return itemModel.getModel(path as any);
}
}
@@ -397,14 +399,16 @@ class GraphEdge {
this.dataIndex = dataIndex == null ? -1 : dataIndex;
}
- getModel(path?: string | string[]): Model {
+ getModel<T = unknown>(): Model<T>
+ getModel<T = unknown, S extends keyof T= keyof T>(path: S): Model<T[S]>
+ getModel<T = unknown>(path?: string): Model {
if (this.dataIndex < 0) {
return;
}
var graph = this.hostGraph;
var itemModel = graph.edgeData.getItemModel(this.dataIndex);
- return itemModel.getModel(path as [string]);
+ return itemModel.getModel(path as any);
}
}
diff --git a/src/data/List.ts b/src/data/List.ts
index 37be86c..4cc72de 100644
--- a/src/data/List.ts
+++ b/src/data/List.ts
@@ -35,7 +35,7 @@ import {ArrayLike, Dictionary, FunctionPropertyNames} from
'zrender/src/core/typ
import Element from 'zrender/src/Element';
import {
DimensionIndex, DimensionName, ECElement, DimensionLoose, OptionDataItem,
- ParsedValue, ParsedValueNumeric, OrdinalNumber, DimensionUserOuput,
ModelOption
+ ParsedValue, ParsedValueNumeric, OrdinalNumber, DimensionUserOuput,
ModelOption, OptionDataValue
} from '../util/types';
import {parseDate} from '../util/number';
import {isDataItemOption} from '../util/model';
@@ -1564,7 +1564,10 @@ class List<HostModel extends Model = Model> {
* Get model of one data item.
*/
// TODO: Type of data item
- getItemModel(idx: number): Model {
+ getItemModel<ItemOpts extends unknown = unknown>(idx: number):
Model<ItemOpts
+ // Extract item option with value key. FIXME will cause incompatitable
issue
+ // Extract<HostModel['option']['data'][number], { value?: any }>
+ > {
var hostModel = this.hostModel;
var dataItem = this.getRawDataItem(idx) as ModelOption;
return new Model(dataItem, hostModel, hostModel && hostModel.ecModel);
diff --git a/src/data/Tree.ts b/src/data/Tree.ts
index c9c0e85..2f70196 100644
--- a/src/data/Tree.ts
+++ b/src/data/Tree.ts
@@ -205,7 +205,9 @@ class TreeNode {
}
// TODO: TYPE Same type with Model#getModel
- getModel(path: readonly string[] | string) {
+ getModel<T = unknown>(): Model<T>
+ getModel<T = unknown, S extends keyof T= keyof T>(path: S): Model<T[S]>
+ getModel<T = unknown>(path?: string): Model {
if (this.dataIndex < 0) {
return;
}
@@ -217,8 +219,8 @@ class TreeNode {
leavesModel = this.getLeavesModel();
}
return itemModel.getModel(
- path as [string],
- (levelModel || leavesModel || hostTree.hostModel).getModel(path as
[string])
+ path as any,
+ (levelModel || leavesModel || hostTree.hostModel).getModel(path as
any)
);
}
// TODO: TYPE More specific model
diff --git a/src/model/Series.ts b/src/model/Series.ts
index acb70db..027614c 100644
--- a/src/model/Series.ts
+++ b/src/model/Series.ts
@@ -104,10 +104,10 @@ class SeriesModel<Opt extends SeriesOption =
SeriesOption> extends ComponentMode
legendVisualProvider: LegendVisualProvider;
// Access path of color for visual
- visualColorAccessPath: string;
+ visualColorAccessPath: string[];
// Access path of borderColor for visual
- visualBorderColorAccessPath: string;
+ visualBorderColorAccessPath: string[];
readonly preventUsingHoverLayer: boolean;
@@ -115,8 +115,8 @@ class SeriesModel<Opt extends SeriesOption = SeriesOption>
extends ComponentMode
var proto = SeriesModel.prototype;
proto.type = 'series.__base__';
proto.seriesIndex = 0;
- proto.visualColorAccessPath = 'itemStyle.color';
- proto.visualBorderColorAccessPath = 'itemStyle.borderColor';
+ proto.visualColorAccessPath = ['itemStyle', 'color'];
+ proto.visualBorderColorAccessPath = ['itemStyle', 'borderColor'];
})();
diff --git a/src/util/types.ts b/src/util/types.ts
index 6667c53..4497d95 100644
--- a/src/util/types.ts
+++ b/src/util/types.ts
@@ -629,6 +629,8 @@ export interface SymbolOptionMixin<T = unknown> {
symbolRotate?: number
symbolKeepAspect?: boolean
+
+ symbolOffset?: number[]
}
/**
@@ -751,7 +753,7 @@ export interface LabelOption extends TextCommonOption {
// x, y can be both percent string or number px.
position?: string | (number | string)[]
distance?: number
- rotate?: number | boolean
+ rotate?: number
offset?: number[]
// TODO: TYPE not all label support formatter
diff --git a/src/visual/seriesColor.ts b/src/visual/seriesColor.ts
index f5bd265..5c6009a 100644
--- a/src/visual/seriesColor.ts
+++ b/src/visual/seriesColor.ts
@@ -17,8 +17,6 @@
* under the License.
*/
-// @ts-nocheck
-
import Gradient from 'zrender/src/graphic/Gradient';
import {isFunction} from 'zrender/src/core/util';
import { StageHandler } from '../util/types';
@@ -28,9 +26,10 @@ const seriesColorTask: StageHandler = {
performRawSeries: true,
reset: function (seriesModel, ecModel) {
var data = seriesModel.getData();
- var colorAccessPath = (seriesModel.visualColorAccessPath ||
'itemStyle.color').split('.');
+ var colorAccessPath = seriesModel.visualColorAccessPath
+ || ['itemStyle', 'color'];
// Set in itemStyle
- var color = seriesModel.get(colorAccessPath);
+ var color = seriesModel.get(colorAccessPath as any);
var colorCallback = (isFunction(color) && !(color instanceof Gradient))
? color : null;
// Default color
@@ -43,8 +42,8 @@ const seriesColorTask: StageHandler = {
data.setVisual('color', color);
- var borderColorAccessPath = (seriesModel.visualBorderColorAccessPath
|| 'itemStyle.borderColor').split('.');
- var borderColor = seriesModel.get(borderColorAccessPath);
+ var borderColorAccessPath = seriesModel.visualBorderColorAccessPath ||
['itemStyle', 'borderColor'];
+ var borderColor = seriesModel.get(borderColorAccessPath as any);
data.setVisual('borderColor', borderColor);
// Only visible series has each data be visual encoded
@@ -57,20 +56,19 @@ const seriesColorTask: StageHandler = {
});
}
- // itemStyle in each data item
- var dataEach = function (data, idx) {
- var itemModel = data.getItemModel(idx);
- var color = itemModel.get(colorAccessPath, true);
- var borderColor = itemModel.get(borderColorAccessPath, true);
- if (color != null) {
- data.setItemVisual(idx, 'color', color);
- }
- if (borderColor != null) {
- data.setItemVisual(idx, 'borderColor', borderColor);
- }
+ return {
+ dataEach: data.hasItemOption ? function (data, idx) {
+ var itemModel = data.getItemModel(idx);
+ var color = itemModel.get(colorAccessPath as any, true);
+ var borderColor = itemModel.get(borderColorAccessPath as
any, true);
+ if (color != null) {
+ data.setItemVisual(idx, 'color', color);
+ }
+ if (borderColor != null) {
+ data.setItemVisual(idx, 'borderColor', borderColor);
+ }
+ } : null
};
-
- return { dataEach: data.hasItemOption ? dataEach : null };
}
}
};
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]