Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
missman
incubator-echarts
提交
b49ce0d3
I
incubator-echarts
项目概览
missman
/
incubator-echarts
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
I
incubator-echarts
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
b49ce0d3
编写于
3月 14, 2020
作者:
P
pissang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ts: add types for marker. more strict makeInner type. add isCoordinateSystemType
上级
d3a7d182
变更
37
隐藏空白更改
内联
并排
Showing
37 changed file
with
906 addition
and
450 deletion
+906
-450
src/chart/bar/BarView.ts
src/chart/bar/BarView.ts
+3
-5
src/chart/heatmap/HeatmapView.ts
src/chart/heatmap/HeatmapView.ts
+5
-9
src/chart/helper/SymbolDraw.ts
src/chart/helper/SymbolDraw.ts
+1
-1
src/chart/lines/LinesSeries.ts
src/chart/lines/LinesSeries.ts
+6
-6
src/component/axis/axisSplitHelper.ts
src/component/axis/axisSplitHelper.ts
+2
-1
src/component/axisPointer/BaseAxisPointer.ts
src/component/axisPointer/BaseAxisPointer.ts
+1
-1
src/component/axisPointer/axisTrigger.ts
src/component/axisPointer/axisTrigger.ts
+2
-1
src/component/axisPointer/globalListener.ts
src/component/axisPointer/globalListener.ts
+1
-1
src/component/dataZoom/DataZoomModel.ts
src/component/dataZoom/DataZoomModel.ts
+0
-2
src/component/dataZoom/history.ts
src/component/dataZoom/history.ts
+1
-1
src/component/dataZoom/roams.ts
src/component/dataZoom/roams.ts
+1
-1
src/component/marker/MarkAreaModel.ts
src/component/marker/MarkAreaModel.ts
+71
-6
src/component/marker/MarkAreaView.ts
src/component/marker/MarkAreaView.ts
+123
-85
src/component/marker/MarkLineModel.ts
src/component/marker/MarkLineModel.ts
+100
-6
src/component/marker/MarkLineView.ts
src/component/marker/MarkLineView.ts
+169
-123
src/component/marker/MarkPointModel.ts
src/component/marker/MarkPointModel.ts
+58
-6
src/component/marker/MarkPointView.ts
src/component/marker/MarkPointView.ts
+56
-47
src/component/marker/MarkerModel.ts
src/component/marker/MarkerModel.ts
+131
-35
src/component/marker/MarkerView.ts
src/component/marker/MarkerView.ts
+46
-21
src/component/marker/markerHelper.ts
src/component/marker/markerHelper.ts
+66
-51
src/component/visualMap/VisualMapModel.ts
src/component/visualMap/VisualMapModel.ts
+0
-2
src/coord/CoordinateSystem.ts
src/coord/CoordinateSystem.ts
+6
-0
src/coord/axisCommonTypes.ts
src/coord/axisCommonTypes.ts
+1
-1
src/coord/geo/geoJSONLoader.ts
src/coord/geo/geoJSONLoader.ts
+1
-1
src/coord/geo/geoSVGLoader.ts
src/coord/geo/geoSVGLoader.ts
+1
-1
src/coord/polar/AngleAxis.ts
src/coord/polar/AngleAxis.ts
+1
-1
src/data/DataDimensionInfo.ts
src/data/DataDimensionInfo.ts
+1
-1
src/data/List.ts
src/data/List.ts
+5
-7
src/model/Component.ts
src/model/Component.ts
+1
-1
src/model/Model.ts
src/model/Model.ts
+3
-1
src/model/Series.ts
src/model/Series.ts
+6
-1
src/model/mixin/colorPalette.ts
src/model/mixin/colorPalette.ts
+1
-1
src/util/graphic.ts
src/util/graphic.ts
+1
-1
src/util/model.ts
src/util/model.ts
+6
-6
src/util/types.ts
src/util/types.ts
+10
-0
src/view/Chart.ts
src/view/Chart.ts
+1
-1
src/view/Component.ts
src/view/Component.ts
+18
-15
未找到文件。
src/chart/bar/BarView.ts
浏览文件 @
b49ce0d3
...
...
@@ -37,6 +37,7 @@ import type Axis2D from '../../coord/cartesian/Axis2D';
import
type
Cartesian2D
from
'
../../coord/cartesian/Cartesian2D
'
;
import
type
{
RectLike
}
from
'
zrender/src/core/BoundingRect
'
;
import
type
Model
from
'
../../model/Model
'
;
import
{
isCoordinateSystemType
}
from
'
../../coord/CoordinateSystem
'
;
const
BAR_BORDER_WIDTH_QUERY
=
[
'
itemStyle
'
,
'
borderWidth
'
]
as
const
;
const
_eventPos
=
[
0
,
0
];
...
...
@@ -53,12 +54,9 @@ type RectLayout = RectShape;
type
BarPossiblePath
=
Sector
|
Rect
|
Sausage
function
isCartesian2D
(
coord
:
CoordSysOfBar
):
coord
is
Cartesian2D
{
return
coord
.
type
===
'
cartesian2d
'
;
}
function
getClipArea
(
coord
:
CoordSysOfBar
,
data
:
List
)
{
if
(
isC
artesian2D
(
coord
))
{
if
(
isC
oordinateSystemType
<
Cartesian2D
>
(
coord
,
'
cartesian2d
'
))
{
var
coordSysClipArea
=
coord
.
getArea
&&
coord
.
getArea
();
var
baseAxis
=
coord
.
getBaseAxis
();
// When boundaryGap is false or using time axis. bar may exceed the grid.
...
...
@@ -744,7 +742,7 @@ function createBackgroundShape(
layout
:
SectorLayout
|
RectLayout
,
coord
:
CoordSysOfBar
):
SectorShape
|
RectShape
{
if
(
isC
artesian2D
(
coord
))
{
if
(
isC
oordinateSystemType
<
Cartesian2D
>
(
coord
,
'
cartesian2d
'
))
{
const
rectShape
=
layout
as
RectShape
;
const
coordLayout
=
coord
.
getArea
();
return
{
...
...
src/chart/heatmap/HeatmapView.ts
浏览文件 @
b49ce0d3
...
...
@@ -28,9 +28,9 @@ import type ExtensionAPI from '../../ExtensionAPI';
import
type
VisualMapModel
from
'
../../component/visualMap/VisualMapModel
'
;
import
type
PiecewiseModel
from
'
../../component/visualMap/PiecewiseModel
'
;
import
type
ContinuousModel
from
'
../../component/visualMap/ContinuousModel
'
;
import
type
Cartesian2D
from
'
../../coord/cartesian/Cartesian2D
'
;
import
{
CoordinateSystem
}
from
'
../../coord/CoordinateSystem
'
;
import
{
CoordinateSystem
,
isCoordinateSystemType
}
from
'
../../coord/CoordinateSystem
'
;
import
{
StageHandlerProgressParams
,
Dictionary
,
OptionDataValue
}
from
'
../../util/types
'
;
import
Cartesian2D
from
'
../../coord/cartesian/Cartesian2D
'
;
// Coord can be 'geo' 'bmap' 'amap' 'leaflet'...
interface
GeoLikeCoordSys
extends
CoordinateSystem
{
...
...
@@ -38,10 +38,6 @@ interface GeoLikeCoordSys extends CoordinateSystem {
getViewRect
():
graphic
.
BoundingRect
}
function
isCartesian2D
(
coord
:
CoordinateSystem
):
coord
is
Cartesian2D
{
return
coord
.
type
===
'
cartesian2d
'
;
}
function
getIsInPiecewiseRange
(
dataExtent
:
number
[],
pieceList
:
ReturnType
<
PiecewiseModel
[
'
getPieceList
'
]
>
,
...
...
@@ -166,7 +162,7 @@ class HeatmapView extends ChartView {
var
width
;
var
height
;
if
(
isC
artesian2D
(
coordSys
))
{
if
(
isC
oordinateSystemType
<
Cartesian2D
>
(
coordSys
,
'
cartesian2d
'
))
{
var
xAxis
=
coordSys
.
getAxis
(
'
x
'
);
var
yAxis
=
coordSys
.
getAxis
(
'
y
'
);
...
...
@@ -191,7 +187,7 @@ class HeatmapView extends ChartView {
var
labelModel
=
seriesModel
.
getModel
(
'
label
'
);
var
hoverLabelModel
=
seriesModel
.
getModel
([
'
emphasis
'
,
'
label
'
]);
var
dataDims
=
isC
artesian2D
(
coordSys
)
var
dataDims
=
isC
oordinateSystemType
<
Cartesian2D
>
(
coordSys
,
'
cartesian2d
'
)
?
[
data
.
mapDimension
(
'
x
'
),
data
.
mapDimension
(
'
y
'
),
...
...
@@ -205,7 +201,7 @@ class HeatmapView extends ChartView {
for
(
var
idx
=
start
;
idx
<
end
;
idx
++
)
{
var
rect
;
if
(
isC
artesian2D
(
coordSys
))
{
if
(
isC
oordinateSystemType
<
Cartesian2D
>
(
coordSys
,
'
cartesian2d
'
))
{
// Ignore empty data
if
(
isNaN
(
data
.
get
(
dataDims
[
2
],
idx
)
as
number
))
{
continue
;
...
...
src/chart/helper/SymbolDraw.ts
浏览文件 @
b49ce0d3
...
...
@@ -79,7 +79,7 @@ interface RippleEffectOption {
}
// TODO Separate series and item?
export
interface
SymbolDrawItemModelOption
extends
SymbolOptionMixin
{
export
interface
SymbolDrawItemModelOption
extends
SymbolOptionMixin
<
object
>
{
itemStyle
?:
ItemStyleOption
label
?:
LabelOption
emphasis
?:
{
...
...
src/chart/lines/LinesSeries.ts
浏览文件 @
b49ce0d3
...
...
@@ -32,9 +32,9 @@ import {
SeriesOnPolarOptionMixin
,
SeriesOnCalendarOptionMixin
,
SeriesLargeOptionMixin
,
LabelOption
,
LineStyleOption
,
OptionDataValue
OptionDataValue
,
LineLabelOption
}
from
'
../../util/types
'
;
import
GlobalModel
from
'
../../model/Global
'
;
import
type
{
LineDrawModelOption
}
from
'
../helper/LineDraw
'
;
...
...
@@ -95,11 +95,11 @@ export interface LinesDataItemOption {
value
?:
LinesValue
lineStyle
?:
LinesLineStyleOption
label
?:
LabelOption
label
?:
L
ineL
abelOption
emphasis
?:
{
lineStyle
?:
LineStyleOption
label
?:
LabelOption
label
?:
L
ineL
abelOption
}
}
...
...
@@ -128,11 +128,11 @@ export interface LinesSeriesOption extends SeriesOption,
*/
clip
?:
boolean
label
?:
LabelOption
label
?:
L
ineL
abelOption
lineStyle
?:
LinesLineStyleOption
emphasis
?:
{
label
?:
LabelOption
label
?:
L
ineL
abelOption
lineStyle
?:
LineStyleOption
}
...
...
src/component/axis/axisSplitHelper.ts
浏览文件 @
b49ce0d3
...
...
@@ -25,11 +25,12 @@ import type SingleAxisView from './SingleAxisView';
import
type
CartesianAxisView
from
'
./CartesianAxisView
'
;
import
type
SingleAxisModel
from
'
../../coord/single/AxisModel
'
;
import
type
CartesianAxisModel
from
'
../../coord/cartesian/AxisModel
'
;
import
AxisView
from
'
./AxisView
'
;
const
inner
=
makeInner
<
{
// Hash map of color index
splitAreaColors
:
zrUtil
.
HashMap
<
number
>
}
>
();
}
,
AxisView
>
();
export
function
rectCoordAxisBuildSplitArea
(
axisView
:
SingleAxisView
|
CartesianAxisView
,
...
...
src/component/axisPointer/BaseAxisPointer.ts
浏览文件 @
b49ce0d3
...
...
@@ -38,7 +38,7 @@ var inner = makeInner<{
lastProp
?:
DisplayableProps
labelEl
?:
graphic
.
Rect
pointerEl
?:
Displayable
}
>
();
}
,
Element
>
();
var
clone
=
zrUtil
.
clone
;
var
bind
=
zrUtil
.
bind
;
...
...
src/component/axisPointer/axisTrigger.ts
浏览文件 @
b49ce0d3
...
...
@@ -25,10 +25,11 @@ import ExtensionAPI from '../../ExtensionAPI';
import
{
Dictionary
,
Payload
,
CommonAxisPointerOption
}
from
'
../../util/types
'
;
import
AxisPointerModel
,
{
AxisPointerOption
}
from
'
./AxisPointerModel
'
;
import
{
each
,
curry
,
bind
,
extend
,
Curry1
}
from
'
zrender/src/core/util
'
;
import
{
ZRenderType
}
from
'
zrender/src/zrender
'
;
var
inner
=
makeInner
<
{
axisPointerLastHighlights
:
Dictionary
<
BatchItem
>
}
>
();
}
,
ZRenderType
>
();
type
AxisValue
=
CommonAxisPointerOption
[
'
value
'
];
...
...
src/component/axisPointer/globalListener.ts
浏览文件 @
b49ce0d3
...
...
@@ -56,7 +56,7 @@ interface Pendings {
hideTip
:
HideTipPayload
[]
}
const
inner
=
makeInner
<
InnerStore
>
();
const
inner
=
makeInner
<
InnerStore
,
ZRenderType
>
();
const
each
=
zrUtil
.
each
;
/**
...
...
src/component/dataZoom/DataZoomModel.ts
浏览文件 @
b49ce0d3
...
...
@@ -669,6 +669,4 @@ function retrieveRawOption<T extends DataZoomOption>(option: T) {
return
ret
;
}
ComponentModel
.
registerClass
(
DataZoomModel
);
export
default
DataZoomModel
;
\ No newline at end of file
src/component/dataZoom/history.ts
浏览文件 @
b49ce0d3
...
...
@@ -32,7 +32,7 @@ type Store = {
snapshots
:
StoreSnapshot
[]
}
const
inner
=
makeInner
<
Store
>
();
const
inner
=
makeInner
<
Store
,
GlobalModel
>
();
/**
* @param ecModel
...
...
src/component/dataZoom/roams.ts
浏览文件 @
b49ce0d3
...
...
@@ -61,7 +61,7 @@ interface PayloadBatch {
type
Store
=
Dictionary
<
Record
>
const
inner
=
makeInner
<
Store
>
();
const
inner
=
makeInner
<
Store
,
ExtensionAPI
>
();
export
function
register
(
api
:
ExtensionAPI
,
dataZoomInfo
:
DataZoomInfo
)
{
var
store
=
inner
(
api
);
...
...
src/component/marker/MarkAreaModel.ts
浏览文件 @
b49ce0d3
...
...
@@ -17,15 +17,76 @@
* under the License.
*/
// @ts-nocheck
import
MarkerModel
,
{
MarkerOption
,
MarkerStatisticType
,
MarkerPositionOption
}
from
'
./MarkerModel
'
;
import
{
LabelOption
,
ItemStyleOption
}
from
'
../../util/types
'
;
import
ComponentModel
from
'
../../model/Component
'
;
import
GlobalModel
from
'
../../model/Global
'
;
import
MarkerModel
from
'
./MarkerModel
'
;
interface
MarkAreaDataItemOptionBase
{
name
?:
string
export
default
MarkerModel
.
extend
({
itemStyle
?:
ItemStyleOption
label
?:
LabelOption
type
:
'
markArea
'
,
emphasis
?:
{
itemStyle
?:
ItemStyleOption
label
?:
LabelOption
}
}
// 1D markArea for horizontal or vertical. Similar to markLine
export
interface
MarkArea1DDataItemOption
extends
MarkAreaDataItemOptionBase
{
xAxis
?:
number
yAxis
?:
number
type
?:
MarkerStatisticType
valueIndex
?:
number
valueDim
?:
string
}
// 2D markArea on any direction. Similar to markLine
interface
MarkArea2DDataItemDimOption
extends
MarkAreaDataItemOptionBase
,
MarkerPositionOption
{
}
export
type
MarkArea2DDataItemOption
=
[
// Start point
MarkArea2DDataItemDimOption
,
// End point
MarkArea2DDataItemDimOption
]
export
interface
MarkAreaOption
extends
MarkerOption
{
precision
?:
number
defaultOption
:
{
itemStyle
?:
ItemStyleOption
label
?:
LabelOption
emphasis
?:
{
itemStyle
?:
ItemStyleOption
label
?:
LabelOption
}
data
?:
(
MarkArea1DDataItemOption
|
MarkArea2DDataItemOption
)[]
}
class
MarkAreaModel
extends
MarkerModel
<
MarkAreaOption
>
{
static
type
=
'
markArea
'
type
=
MarkAreaModel
.
type
createMarkerModelFromSeries
(
markerOpt
:
MarkAreaOption
,
masterMarkerModel
:
MarkAreaModel
,
ecModel
:
GlobalModel
)
{
return
new
MarkAreaModel
(
markerOpt
,
masterMarkerModel
,
ecModel
);
}
static
defaultOption
:
MarkAreaOption
=
{
zlevel
:
0
,
// PENDING
z
:
1
,
...
...
@@ -52,4 +113,8 @@ export default MarkerModel.extend({
}
}
}
});
\ No newline at end of file
}
ComponentModel
.
registerClass
(
MarkAreaModel
);
export
default
MarkAreaModel
;
\ No newline at end of file
src/component/marker/MarkAreaView.ts
浏览文件 @
b49ce0d3
...
...
@@ -17,23 +17,52 @@
* under the License.
*/
//
@ts-nocheck
//
TODO Optimize on polar
// TODO Better on polar
import
*
as
zrUtil
from
'
zrender/src/core/util
'
;
import
*
as
colorUtil
from
'
zrender/src/tool/color
'
;
import
List
from
'
../../data/List
'
;
import
*
as
numberUtil
from
'
../../util/number
'
;
import
*
as
graphic
from
'
../../util/graphic
'
;
import
*
as
markerHelper
from
'
./markerHelper
'
;
import
MarkerView
from
'
./MarkerView
'
;
import
{
retrieve
,
mergeAll
,
map
,
defaults
,
curry
,
filter
,
HashMap
}
from
'
zrender/src/core/util
'
;
import
{
ScaleDataValue
,
ParsedValue
}
from
'
../../util/types
'
;
import
{
CoordinateSystem
,
isCoordinateSystemType
}
from
'
../../coord/CoordinateSystem
'
;
import
MarkAreaModel
,
{
MarkArea2DDataItemOption
}
from
'
./MarkAreaModel
'
;
import
SeriesModel
from
'
../../model/Series
'
;
import
Cartesian2D
from
'
../../coord/cartesian/Cartesian2D
'
;
import
DataDimensionInfo
from
'
../../data/DataDimensionInfo
'
;
import
ComponentView
from
'
../../view/Component
'
;
import
GlobalModel
from
'
../../model/Global
'
;
import
ExtensionAPI
from
'
../../ExtensionAPI
'
;
import
MarkerModel
from
'
./MarkerModel
'
;
import
{
makeInner
}
from
'
../../util/model
'
;
interface
MarkAreaDrawGroup
{
group
:
graphic
.
Group
}
const
inner
=
makeInner
<
{
data
:
List
<
MarkAreaModel
>
},
MarkAreaDrawGroup
>
();
// Merge two ends option into one.
type
MarkAreaMergedItemOption
=
Omit
<
MarkArea2DDataItemOption
[
number
],
'
coord
'
>
&
{
coord
:
MarkArea2DDataItemOption
[
number
][
'
coord
'
][]
x0
:
number
|
string
y0
:
number
|
string
x1
:
number
|
string
y1
:
number
|
string
}
var
markAreaTransform
=
function
(
seriesModel
,
coordSys
,
maModel
,
item
)
{
var
markAreaTransform
=
function
(
seriesModel
:
SeriesModel
,
coordSys
:
CoordinateSystem
,
maModel
:
MarkAreaModel
,
item
:
MarkArea2DDataItemOption
):
MarkAreaMergedItemOption
{
var
lt
=
markerHelper
.
dataTransform
(
seriesModel
,
item
[
0
]);
var
rb
=
markerHelper
.
dataTransform
(
seriesModel
,
item
[
1
]);
var
retrieve
=
zrUtil
.
retrieve
;
// FIXME make sure lt is less than rb
var
ltCoord
=
lt
.
coord
;
...
...
@@ -45,7 +74,7 @@ var markAreaTransform = function (seriesModel, coordSys, maModel, item) {
rbCoord
[
1
]
=
retrieve
(
rbCoord
[
1
],
Infinity
);
// Merge option into one
var
result
=
zrUtil
.
mergeAll
([{},
lt
,
rb
]);
var
result
:
MarkAreaMergedItemOption
=
mergeAll
([{},
lt
,
rb
]);
result
.
coord
=
[
lt
.
coord
,
rb
.
coord
...
...
@@ -57,20 +86,25 @@ var markAreaTransform = function (seriesModel, coordSys, maModel, item) {
return
result
;
};
function
isInifinity
(
val
)
{
return
!
isNaN
(
val
)
&&
!
isFinite
(
val
);
function
isInifinity
(
val
:
ScaleDataValue
)
{
return
!
isNaN
(
val
as
number
)
&&
!
isFinite
(
val
as
number
);
}
// If a markArea has one dim
function
ifMarkLineHasOnlyDim
(
dimIndex
,
fromCoord
,
toCoord
,
coordSys
)
{
function
ifMarkAreaHasOnlyDim
(
dimIndex
:
number
,
fromCoord
:
ScaleDataValue
[],
toCoord
:
ScaleDataValue
[],
coordSys
:
CoordinateSystem
)
{
var
otherDimIndex
=
1
-
dimIndex
;
return
isInifinity
(
fromCoord
[
otherDimIndex
])
&&
isInifinity
(
toCoord
[
otherDimIndex
]);
}
function
markAreaFilter
(
coordSys
,
item
)
{
function
markAreaFilter
(
coordSys
:
CoordinateSystem
,
item
:
MarkAreaMergedItemOption
)
{
var
fromCoord
=
item
.
coord
[
0
];
var
toCoord
=
item
.
coord
[
1
];
if
(
coordSys
.
type
===
'
cartesian2d
'
)
{
if
(
isCoordinateSystemType
<
Cartesian2D
>
(
coordSys
,
'
cartesian2d
'
)
)
{
// In case
// {
// markArea: {
...
...
@@ -79,8 +113,8 @@ function markAreaFilter(coordSys, item) {
// }
if
(
fromCoord
&&
toCoord
&&
(
ifMark
Line
HasOnlyDim
(
1
,
fromCoord
,
toCoord
,
coordSys
)
||
ifMark
Line
HasOnlyDim
(
0
,
fromCoord
,
toCoord
,
coordSys
))
&&
(
ifMark
Area
HasOnlyDim
(
1
,
fromCoord
,
toCoord
,
coordSys
)
||
ifMark
Area
HasOnlyDim
(
0
,
fromCoord
,
toCoord
,
coordSys
))
)
{
return
true
;
}
...
...
@@ -98,9 +132,15 @@ function markAreaFilter(coordSys, item) {
}
// dims can be ['x0', 'y0'], ['x1', 'y1'], ['x0', 'y1'], ['x1', 'y0']
function
getSingleMarkerEndPoint
(
data
,
idx
,
dims
,
seriesModel
,
api
)
{
function
getSingleMarkerEndPoint
(
data
:
List
<
MarkAreaModel
>
,
idx
:
number
,
dims
:
typeof
dimPermutations
[
number
],
seriesModel
:
SeriesModel
,
api
:
ExtensionAPI
)
{
var
coordSys
=
seriesModel
.
coordinateSystem
;
var
itemModel
=
data
.
getItemModel
(
idx
);
var
itemModel
=
data
.
getItemModel
<
MarkAreaMergedItemOption
>
(
idx
);
var
point
;
var
xPx
=
numberUtil
.
parsePercent
(
itemModel
.
get
(
dims
[
0
]),
api
.
getWidth
());
...
...
@@ -117,17 +157,17 @@ function getSingleMarkerEndPoint(data, idx, dims, seriesModel, api) {
);
}
else
{
var
x
=
data
.
get
(
dims
[
0
],
idx
);
var
y
=
data
.
get
(
dims
[
1
],
idx
);
var
x
=
data
.
get
(
dims
[
0
],
idx
)
as
number
;
var
y
=
data
.
get
(
dims
[
1
],
idx
)
as
number
;
var
pt
=
[
x
,
y
];
coordSys
.
clampData
&&
coordSys
.
clampData
(
pt
,
pt
);
point
=
coordSys
.
dataToPoint
(
pt
,
true
);
}
if
(
coordSys
.
type
===
'
cartesian2d
'
)
{
if
(
isCoordinateSystemType
<
Cartesian2D
>
(
coordSys
,
'
cartesian2d
'
)
)
{
var
xAxis
=
coordSys
.
getAxis
(
'
x
'
);
var
yAxis
=
coordSys
.
getAxis
(
'
y
'
);
var
x
=
data
.
get
(
dims
[
0
],
idx
);
var
y
=
data
.
get
(
dims
[
1
],
idx
);
var
x
=
data
.
get
(
dims
[
0
],
idx
)
as
number
;
var
y
=
data
.
get
(
dims
[
1
],
idx
)
as
number
;
if
(
isInifinity
(
x
))
{
point
[
0
]
=
xAxis
.
toGlobalCoord
(
xAxis
.
getExtent
()[
dims
[
0
]
===
'
x0
'
?
0
:
1
]);
}
...
...
@@ -148,49 +188,39 @@ function getSingleMarkerEndPoint(data, idx, dims, seriesModel, api) {
return
point
;
}
var
dimPermutations
=
[[
'
x0
'
,
'
y0
'
],
[
'
x1
'
,
'
y0
'
],
[
'
x1
'
,
'
y1
'
],
[
'
x0
'
,
'
y1
'
]];
MarkerView
.
extend
({
type
:
'
markArea
'
,
// updateLayout: function (markAreaModel, ecModel, api) {
// ecModel.eachSeries(function (seriesModel) {
// var maModel = seriesModel.markAreaModel;
// if (maModel) {
// var areaData = maModel.getData();
// areaData.each(function (idx) {
// var points = zrUtil.map(dimPermutations, function (dim) {
// return getSingleMarkerEndPoint(areaData, idx, dim, seriesModel, api);
// });
// // Layout
// areaData.setItemLayout(idx, points);
// var el = areaData.getItemGraphicEl(idx);
// el.setShape('points', points);
// });
// }
// }, this);
// },
updateTransform
:
function
(
markAreaModel
,
ecModel
,
api
)
{
var
dimPermutations
=
[[
'
x0
'
,
'
y0
'
],
[
'
x1
'
,
'
y0
'
],
[
'
x1
'
,
'
y1
'
],
[
'
x0
'
,
'
y1
'
]]
as
const
;
class
MarkAreaView
extends
MarkerView
{
static
type
=
'
markArea
'
type
=
MarkAreaView
.
type
markerGroupMap
:
HashMap
<
MarkAreaDrawGroup
>
updateTransform
(
markAreaModel
:
MarkAreaModel
,
ecModel
:
GlobalModel
,
api
:
ExtensionAPI
)
{
ecModel
.
eachSeries
(
function
(
seriesModel
)
{
var
maModel
=
seriesModel
.
markAreaModel
;
var
maModel
=
MarkerModel
.
getMarkerModelFromSeries
(
seriesModel
,
'
markArea
'
)
;
if
(
maModel
)
{
var
areaData
=
maModel
.
getData
();
areaData
.
each
(
function
(
idx
)
{
var
points
=
zrUtil
.
map
(
dimPermutations
,
function
(
dim
)
{
var
points
=
map
(
dimPermutations
,
function
(
dim
)
{
return
getSingleMarkerEndPoint
(
areaData
,
idx
,
dim
,
seriesModel
,
api
);
});
// Layout
areaData
.
setItemLayout
(
idx
,
points
);
var
el
=
areaData
.
getItemGraphicEl
(
idx
);
var
el
=
areaData
.
getItemGraphicEl
(
idx
)
as
graphic
.
Rect
;
el
.
setShape
(
'
points
'
,
points
);
});
}
},
this
);
}
,
}
renderSeries
:
function
(
seriesModel
,
maModel
,
ecModel
,
api
)
{
renderSeries
(
seriesModel
:
SeriesModel
,
maModel
:
MarkAreaModel
,
ecModel
:
GlobalModel
,
api
:
ExtensionAPI
)
{
var
coordSys
=
seriesModel
.
coordinateSystem
;
var
seriesId
=
seriesModel
.
id
;
var
seriesData
=
seriesModel
.
getData
();
...
...
@@ -200,7 +230,7 @@ MarkerView.extend({
||
areaGroupMap
.
set
(
seriesId
,
{
group
:
new
graphic
.
Group
()});
this
.
group
.
add
(
polygonGroup
.
group
);
polygonGroup
.
__keep
=
true
;
this
.
markKeep
(
polygonGroup
)
;
var
areaData
=
createList
(
coordSys
,
seriesModel
,
maModel
);
...
...
@@ -210,7 +240,7 @@ MarkerView.extend({
// Update visual and layout of line
areaData
.
each
(
function
(
idx
)
{
// Layout
areaData
.
setItemLayout
(
idx
,
zrUtil
.
map
(
dimPermutations
,
function
(
dim
)
{
areaData
.
setItemLayout
(
idx
,
map
(
dimPermutations
,
function
(
dim
)
{
return
getSingleMarkerEndPoint
(
areaData
,
idx
,
dim
,
seriesModel
,
api
);
}));
...
...
@@ -221,7 +251,7 @@ MarkerView.extend({
});
areaData
.
diff
(
polygonGroup
.
__
data
)
areaData
.
diff
(
inner
(
polygonGroup
).
data
)
.
add
(
function
(
idx
)
{
var
polygon
=
new
graphic
.
Polygon
({
shape
:
{
...
...
@@ -232,7 +262,7 @@ MarkerView.extend({
polygonGroup
.
group
.
add
(
polygon
);
})
.
update
(
function
(
newIdx
,
oldIdx
)
{
var
polygon
=
polygonGroup
.
__data
.
getItemGraphicEl
(
oldIdx
)
;
var
polygon
=
inner
(
polygonGroup
).
data
.
getItemGraphicEl
(
oldIdx
)
as
graphic
.
Polygon
;
graphic
.
updateProps
(
polygon
,
{
shape
:
{
points
:
areaData
.
getItemLayout
(
newIdx
)
...
...
@@ -242,18 +272,18 @@ MarkerView.extend({
areaData
.
setItemGraphicEl
(
newIdx
,
polygon
);
})
.
remove
(
function
(
idx
)
{
var
polygon
=
polygonGroup
.
__
data
.
getItemGraphicEl
(
idx
);
var
polygon
=
inner
(
polygonGroup
).
data
.
getItemGraphicEl
(
idx
);
polygonGroup
.
group
.
remove
(
polygon
);
})
.
execute
();
areaData
.
eachItemGraphicEl
(
function
(
polygon
,
idx
)
{
var
itemModel
=
areaData
.
getItemModel
(
idx
);
areaData
.
eachItemGraphicEl
(
function
(
polygon
:
graphic
.
Polygon
,
idx
)
{
var
itemModel
=
areaData
.
getItemModel
<
MarkAreaMergedItemOption
>
(
idx
);
var
labelModel
=
itemModel
.
getModel
(
'
label
'
);
var
labelHoverModel
=
itemModel
.
getModel
(
'
emphasis.label
'
);
var
labelHoverModel
=
itemModel
.
getModel
(
[
'
emphasis
'
,
'
label
'
]
);
var
color
=
areaData
.
getItemVisual
(
idx
,
'
color
'
);
polygon
.
useStyle
(
zrUtil
.
defaults
(
defaults
(
itemModel
.
getModel
(
'
itemStyle
'
).
getItemStyle
(),
{
fill
:
colorUtil
.
modifyAlpha
(
color
,
0.4
),
...
...
@@ -262,7 +292,7 @@ MarkerView.extend({
)
);
polygon
.
hoverStyle
=
itemModel
.
getModel
(
'
emphasis.itemStyle
'
).
getItemStyle
();
polygon
.
hoverStyle
=
itemModel
.
getModel
(
[
'
emphasis
'
,
'
itemStyle
'
]
).
getItemStyle
();
graphic
.
setLabelStyle
(
polygon
.
style
,
polygon
.
hoverStyle
,
labelModel
,
labelHoverModel
,
...
...
@@ -277,36 +307,36 @@ MarkerView.extend({
graphic
.
setHoverStyle
(
polygon
,
{});
polygon
.
dataModel
=
maModel
;
graphic
.
getECData
(
polygon
)
.
dataModel
=
maModel
;
});
polygonGroup
.
__
data
=
areaData
;
inner
(
polygonGroup
).
data
=
areaData
;
polygonGroup
.
group
.
silent
=
maModel
.
get
(
'
silent
'
)
||
seriesModel
.
get
(
'
silent
'
);
}
});
/**
* @inner
* @param {module:echarts/coord/*} coordSys
* @param {module:echarts/model/Series} seriesModel
* @param {module:echarts/model/Model} mpModel
*/
function
createList
(
coordSys
,
seriesModel
,
maModel
)
{
var
coordDimsInfos
;
var
areaData
;
}
function
createList
(
coordSys
:
CoordinateSystem
,
seriesModel
:
SeriesModel
,
maModel
:
MarkAreaModel
)
{
var
coordDimsInfos
:
DataDimensionInfo
[];
var
areaData
:
List
<
MarkAreaModel
>
;
var
dims
=
[
'
x0
'
,
'
y0
'
,
'
x1
'
,
'
y1
'
];
if
(
coordSys
)
{
coordDimsInfos
=
zrUtil
.
map
(
coordSys
&&
coordSys
.
dimensions
,
function
(
coordDim
)
{
coordDimsInfos
=
map
(
coordSys
&&
coordSys
.
dimensions
,
function
(
coordDim
)
{
var
data
=
seriesModel
.
getData
();
var
info
=
data
.
getDimensionInfo
(
data
.
mapDimension
(
coordDim
)
)
||
{};
// In map series data don't have lng and lat dimension. Fallback to same with coordSys
return
zrUtil
.
defaults
({
name
:
coordDim
},
info
);
return
defaults
({
name
:
coordDim
},
info
);
});
areaData
=
new
List
(
zrUtil
.
map
(
dims
,
function
(
dim
,
idx
)
{
areaData
=
new
List
(
map
(
dims
,
function
(
dim
,
idx
)
{
return
{
name
:
dim
,
type
:
coordDimsInfos
[
idx
%
2
].
type
...
...
@@ -321,21 +351,29 @@ function createList(coordSys, seriesModel, maModel) {
areaData
=
new
List
(
coordDimsInfos
,
maModel
);
}
var
optData
=
zrUtil
.
map
(
maModel
.
get
(
'
data
'
),
zrUtil
.
curry
(
var
optData
=
map
(
maModel
.
get
(
'
data
'
),
curry
(
markAreaTransform
,
seriesModel
,
coordSys
,
maModel
));
if
(
coordSys
)
{
optData
=
zrUtil
.
filter
(
optData
,
zrUtil
.
curry
(
markAreaFilter
,
coordSys
)
optData
=
filter
(
optData
,
curry
(
markAreaFilter
,
coordSys
)
);
}
var
dimValueGetter
=
coordSys
?
function
(
item
,
dimName
,
dataIndex
,
dimIndex
)
{
return
item
.
coord
[
Math
.
floor
(
dimIndex
/
2
)][
dimIndex
%
2
];
}
:
function
(
item
)
{
var
dimValueGetter
=
coordSys
?
function
(
item
:
MarkAreaMergedItemOption
,
dimName
:
string
,
dataIndex
:
number
,
dimIndex
:
number
)
{
// TODO should convert to ParsedValue?
return
item
.
coord
[
Math
.
floor
(
dimIndex
/
2
)][
dimIndex
%
2
]
as
ParsedValue
;
}
:
function
(
item
:
MarkAreaMergedItemOption
)
{
return
item
.
value
;
};
areaData
.
initData
(
optData
,
null
,
dimValueGetter
);
areaData
.
hasItemOption
=
true
;
return
areaData
;
}
\ No newline at end of file
}
ComponentView
.
registerClass
(
MarkAreaView
);
\ No newline at end of file
src/component/marker/MarkLineModel.ts
浏览文件 @
b49ce0d3
...
...
@@ -17,15 +17,105 @@
* under the License.
*/
// @ts-nocheck
import
MarkerModel
,
{
MarkerOption
,
MarkerStatisticType
,
MarkerPositionOption
}
from
'
./MarkerModel
'
;
import
ComponentModel
from
'
../../model/Component
'
;
import
GlobalModel
from
'
../../model/Global
'
;
import
{
LineStyleOption
,
LineLabelOption
,
SymbolOptionMixin
,
ItemStyleOption
}
from
'
../../util/types
'
;
import
MarkerModel
from
'
./MarkerModel
'
;
interface
MarkLineDataItemOptionBase
{
name
?:
string
export
default
MarkerModel
.
extend
({
lineStyle
?:
LineStyleOption
/**
* itemStyle for symbol
*/
itemStyle
?:
ItemStyleOption
label
?:
LineLabelOption
type
:
'
markLine
'
,
emphasis
?:
{
itemStyle
?:
ItemStyleOption
lineStyle
?:
LineStyleOption
label
?:
LineLabelOption
}
}
// 1D markLine for horizontal or vertical
export
interface
MarkLine1DDataItemOption
extends
MarkLineDataItemOptionBase
{
// On cartesian coordinate system
xAxis
?:
number
yAxis
?:
number
// Use statistic method
type
?:
MarkerStatisticType
/**
* When using statistic method with type.
* valueIndex and valueDim can be specify which dim the statistic is used on.
*/
valueIndex
?:
number
valueDim
?:
string
/**
* Symbol for both two ends
*/
symbol
?:
string
[]
|
string
symbolSize
?:
number
[]
|
number
}
// 2D markLine on any direction
interface
MarkLine2DDataItemDimOption
extends
MarkLineDataItemOptionBase
,
SymbolOptionMixin
,
MarkerPositionOption
{
}
export
type
MarkLine2DDataItemOption
=
[
// Start point
MarkLine2DDataItemDimOption
,
// End point
MarkLine2DDataItemDimOption
]
export
interface
MarkLineOption
extends
MarkerOption
{
symbol
?:
string
[]
|
string
symbolSize
?:
number
[]
|
number
/**
* Precision used on statistic method
*/
precision
?:
number
defaultOption
:
{
/**
* itemStyle for symbol.
*/
itemStyle
?:
ItemStyleOption
lineStyle
?:
LineStyleOption
label
?:
LineLabelOption
emphasis
?:
{
itemStyle
?:
ItemStyleOption
lineStyle
?:
LineStyleOption
label
?:
LineLabelOption
}
data
?:
(
MarkLine1DDataItemOption
|
MarkLine2DDataItemOption
)[]
}
class
MarkLineModel
extends
MarkerModel
<
MarkLineOption
>
{
static
type
=
'
markLine
'
type
=
MarkLineModel
.
type
createMarkerModelFromSeries
(
markerOpt
:
MarkLineOption
,
masterMarkerModel
:
MarkLineModel
,
ecModel
:
GlobalModel
)
{
return
new
MarkLineModel
(
markerOpt
,
masterMarkerModel
,
ecModel
);
}
static
defaultOption
:
MarkLineOption
=
{
zlevel
:
0
,
z
:
5
,
...
...
@@ -56,4 +146,8 @@ export default MarkerModel.extend({
},
animationEasing
:
'
linear
'
}
});
\ No newline at end of file
}
ComponentModel
.
registerClass
(
MarkLineModel
);
export
default
MarkLineModel
;
\ No newline at end of file
src/component/marker/MarkLineView.ts
浏览文件 @
b49ce0d3
...
...
@@ -17,101 +17,161 @@
* under the License.
*/
// @ts-nocheck
import
*
as
zrUtil
from
'
zrender/src/core/util
'
;
import
List
from
'
../../data/List
'
;
import
*
as
numberUtil
from
'
../../util/number
'
;
import
*
as
markerHelper
from
'
./markerHelper
'
;
import
LineDraw
from
'
../../chart/helper/LineDraw
'
;
import
MarkerView
from
'
./MarkerView
'
;
import
{
getStackedDimension
}
from
'
../../data/helper/dataStackHelper
'
;
var
markLineTransform
=
function
(
seriesModel
,
coordSys
,
mlModel
,
item
)
{
import
{
CoordinateSystem
,
isCoordinateSystemType
}
from
'
../../coord/CoordinateSystem
'
;
import
MarkLineModel
,
{
MarkLine2DDataItemOption
,
MarkLineOption
}
from
'
./MarkLineModel
'
;
import
{
ScaleDataValue
}
from
'
../../util/types
'
;
import
SeriesModel
from
'
../../model/Series
'
;
import
{
__DEV__
}
from
'
../../config
'
;
import
{
getECData
}
from
'
../../util/graphic
'
;
import
ExtensionAPI
from
'
../../ExtensionAPI
'
;
import
Cartesian2D
from
'
../../coord/cartesian/Cartesian2D
'
;
import
GlobalModel
from
'
../../model/Global
'
;
import
MarkerModel
from
'
./MarkerModel
'
;
import
{
isArray
,
retrieve
,
clone
,
extend
,
logError
,
merge
,
map
,
defaults
,
curry
,
filter
,
HashMap
}
from
'
zrender/src/core/util
'
;
import
ComponentView
from
'
../../view/Component
'
;
import
{
makeInner
}
from
'
../../util/model
'
;
// Item option for configuring line and each end of symbol.
// Line option. be merged from configuration of two ends.
type
MarkLineMergedItemOption
=
MarkLine2DDataItemOption
[
number
]
const
inner
=
makeInner
<
{
// from data
from
:
List
<
MarkLineModel
>
// to data
to
:
List
<
MarkLineModel
>
},
MarkLineModel
>
();
var
markLineTransform
=
function
(
seriesModel
:
SeriesModel
,
coordSys
:
CoordinateSystem
,
mlModel
:
MarkLineModel
,
item
:
MarkLineOption
[
'
data
'
][
number
]
)
{
var
data
=
seriesModel
.
getData
();
// Special type markLine like 'min', 'max', 'average', 'median'
var
mlType
=
item
.
type
;
if
(
!
zrUtil
.
isArray
(
item
)
&&
(
let
itemArray
:
MarkLineMergedItemOption
[];
if
(
!
isArray
(
item
))
{
// Special type markLine like 'min', 'max', 'average', 'median'
var
mlType
=
item
.
type
;
if
(
mlType
===
'
min
'
||
mlType
===
'
max
'
||
mlType
===
'
average
'
||
mlType
===
'
median
'
// In case
// data: [{
// yAxis: 10
// }]
||
(
item
.
xAxis
!=
null
||
item
.
yAxis
!=
null
)
)
)
{
var
valueAxis
;
var
value
;
)
{
if
(
item
.
yAxis
!=
null
||
item
.
xAxis
!=
null
)
{
valueAxis
=
coordSys
.
getAxis
(
item
.
yAxis
!=
null
?
'
y
'
:
'
x
'
);
value
=
zrUtil
.
retrieve
(
item
.
yAxis
,
item
.
xAxis
);
}
else
{
var
axisInfo
=
markerHelper
.
getAxisInfo
(
item
,
data
,
coordSys
,
seriesModel
);
valueAxis
=
axisInfo
.
valueAxis
;
var
valueDataDim
=
getStackedDimension
(
data
,
axisInfo
.
valueDataDim
);
value
=
markerHelper
.
numCalculate
(
data
,
valueDataDim
,
mlType
);
}
var
valueIndex
=
valueAxis
.
dim
===
'
x
'
?
0
:
1
;
var
baseIndex
=
1
-
valueIndex
;
var
valueAxis
;
var
value
;
var
mlFrom
=
zrUtil
.
clone
(
item
);
var
mlTo
=
{};
if
(
item
.
yAxis
!=
null
||
item
.
xAxis
!=
null
)
{
valueAxis
=
coordSys
.
getAxis
(
item
.
yAxis
!=
null
?
'
y
'
:
'
x
'
);
value
=
retrieve
(
item
.
yAxis
,
item
.
xAxis
);
}
else
{
var
axisInfo
=
markerHelper
.
getAxisInfo
(
item
,
data
,
coordSys
,
seriesModel
);
valueAxis
=
axisInfo
.
valueAxis
;
var
valueDataDim
=
getStackedDimension
(
data
,
axisInfo
.
valueDataDim
);
value
=
markerHelper
.
numCalculate
(
data
,
valueDataDim
,
mlType
);
}
var
valueIndex
=
valueAxis
.
dim
===
'
x
'
?
0
:
1
;
var
baseIndex
=
1
-
valueIndex
;
mlFrom
.
type
=
null
;
// Normized to 2d data with start and end point
var
mlFrom
=
clone
(
item
)
as
MarkLine2DDataItemOption
[
number
];
var
mlTo
=
{
coord
:
[]
}
as
MarkLine2DDataItemOption
[
number
];
mlFrom
.
coord
=
[];
mlTo
.
coord
=
[];
mlFrom
.
coord
[
baseIndex
]
=
-
Infinity
;
mlTo
.
coord
[
baseIndex
]
=
Infinity
;
mlFrom
.
type
=
null
;
var
precision
=
mlModel
.
get
(
'
precision
'
);
if
(
precision
>=
0
&&
typeof
value
===
'
number
'
)
{
value
=
+
value
.
toFixed
(
Math
.
min
(
precision
,
20
));
}
mlFrom
.
coord
=
[];
mlFrom
.
coord
[
baseIndex
]
=
-
Infinity
;
mlTo
.
coord
[
baseIndex
]
=
Infinity
;
mlFrom
.
coord
[
valueIndex
]
=
mlTo
.
coord
[
valueIndex
]
=
value
;
var
precision
=
mlModel
.
get
(
'
precision
'
);
if
(
precision
>=
0
&&
typeof
value
===
'
number
'
)
{
value
=
+
value
.
toFixed
(
Math
.
min
(
precision
,
20
));
}
item
=
[
mlFrom
,
mlTo
,
{
// Extra option for tooltip and label
type
:
mlType
,
valueIndex
:
item
.
valueIndex
,
// Force to use the value of calculated value.
value
:
value
}];
mlFrom
.
coord
[
valueIndex
]
=
mlTo
.
coord
[
valueIndex
]
=
value
;
itemArray
=
[
mlFrom
,
mlTo
,
{
// Extra option for tooltip and label
type
:
mlType
,
valueIndex
:
item
.
valueIndex
,
// Force to use the value of calculated value.
value
:
value
}];
}
else
{
// Invalid data
if
(
__DEV__
)
{
logError
(
'
Invalid markLine data.
'
);
}
itemArray
=
[];
}
}
else
{
itemArray
=
item
;
}
i
tem
=
[
markerHelper
.
dataTransform
(
seriesModel
,
item
[
0
]),
markerHelper
.
dataTransform
(
seriesModel
,
item
[
1
]),
zrUtil
.
extend
({},
item
[
2
])
const
normalizedI
tem
=
[
markerHelper
.
dataTransform
(
seriesModel
,
item
Array
[
0
]),
markerHelper
.
dataTransform
(
seriesModel
,
item
Array
[
1
]),
extend
({},
itemArray
[
2
])
];
// Avoid line data type is extended by from(to) data type
item
[
2
].
type
=
item
[
2
].
type
||
''
;
normalizedItem
[
2
].
type
=
normalizedItem
[
2
].
type
||
null
;
// Merge from option and to option into line option
zrUtil
.
merge
(
item
[
2
],
i
tem
[
0
]);
zrUtil
.
merge
(
item
[
2
],
i
tem
[
1
]);
merge
(
normalizedItem
[
2
],
normalizedI
tem
[
0
]);
merge
(
normalizedItem
[
2
],
normalizedI
tem
[
1
]);
return
i
tem
;
return
normalizedI
tem
;
};
function
isInifinity
(
val
)
{
return
!
isNaN
(
val
)
&&
!
isFinite
(
val
);
function
isInifinity
(
val
:
ScaleDataValue
)
{
return
!
isNaN
(
val
as
number
)
&&
!
isFinite
(
val
as
number
);
}
// If a markLine has one dim
function
ifMarkLineHasOnlyDim
(
dimIndex
,
fromCoord
,
toCoord
,
coordSys
)
{
function
ifMarkLineHasOnlyDim
(
dimIndex
:
number
,
fromCoord
:
ScaleDataValue
[],
toCoord
:
ScaleDataValue
[],
coordSys
:
CoordinateSystem
)
{
var
otherDimIndex
=
1
-
dimIndex
;
var
dimName
=
coordSys
.
dimensions
[
dimIndex
];
return
isInifinity
(
fromCoord
[
otherDimIndex
])
&&
isInifinity
(
toCoord
[
otherDimIndex
])
&&
fromCoord
[
dimIndex
]
===
toCoord
[
dimIndex
]
&&
coordSys
.
getAxis
(
dimName
).
containData
(
fromCoord
[
dimIndex
]);
}
function
markLineFilter
(
coordSys
,
item
)
{
function
markLineFilter
(
coordSys
:
CoordinateSystem
,
item
:
MarkLine2DDataItemOption
)
{
if
(
coordSys
.
type
===
'
cartesian2d
'
)
{
var
fromCoord
=
item
[
0
].
coord
;
var
toCoord
=
item
[
1
].
coord
;
...
...
@@ -134,10 +194,14 @@ function markLineFilter(coordSys, item) {
}
function
updateSingleMarkerEndLayout
(
data
,
idx
,
isFrom
,
seriesModel
,
api
data
:
List
<
MarkLineModel
>
,
idx
:
number
,
isFrom
:
boolean
,
seriesModel
:
SeriesModel
,
api
:
ExtensionAPI
)
{
var
coordSys
=
seriesModel
.
coordinateSystem
;
var
itemModel
=
data
.
getItemModel
(
idx
);
var
itemModel
=
data
.
getItemModel
<
MarkLine2DDataItemOption
[
number
]
>
(
idx
);
var
point
;
var
xPx
=
numberUtil
.
parsePercent
(
itemModel
.
get
(
'
x
'
),
api
.
getWidth
());
...
...
@@ -168,7 +232,7 @@ function updateSingleMarkerEndLayout(
// type: 'average'
// }]
// }
if
(
coordSys
.
type
===
'
cartesian2d
'
)
{
if
(
isCoordinateSystemType
<
Cartesian2D
>
(
coordSys
,
'
cartesian2d
'
)
)
{
var
xAxis
=
coordSys
.
getAxis
(
'
x
'
);
var
yAxis
=
coordSys
.
getAxis
(
'
y
'
);
var
dims
=
coordSys
.
dimensions
;
...
...
@@ -192,43 +256,20 @@ function updateSingleMarkerEndLayout(
data
.
setItemLayout
(
idx
,
point
);
}
export
default
MarkerView
.
extend
({
type
:
'
markLine
'
,
// updateLayout: function (markLineModel, ecModel, api) {
// ecModel.eachSeries(function (seriesModel) {
// var mlModel = seriesModel.markLineModel;
// if (mlModel) {
// var mlData = mlModel.getData();
// var fromData = mlModel.__from;
// var toData = mlModel.__to;
// // Update visual and layout of from symbol and to symbol
// fromData.each(function (idx) {
// updateSingleMarkerEndLayout(fromData, idx, true, seriesModel, api);
// updateSingleMarkerEndLayout(toData, idx, false, seriesModel, api);
// });
// // Update layout of line
// mlData.each(function (idx) {
// mlData.setItemLayout(idx, [
// fromData.getItemLayout(idx),
// toData.getItemLayout(idx)
// ]);
// });
// this.markerGroupMap.get(seriesModel.id).updateLayout();
// }
// }, this);
// },
updateTransform
:
function
(
markLineModel
,
ecModel
,
api
)
{
class
MarkLineView
extends
MarkerView
{
static
type
=
'
markLine
'
type
=
MarkLineView
.
type
markerGroupMap
:
HashMap
<
LineDraw
>
updateTransform
(
markLineModel
:
MarkLineModel
,
ecModel
:
GlobalModel
,
api
:
ExtensionAPI
)
{
ecModel
.
eachSeries
(
function
(
seriesModel
)
{
var
mlModel
=
seriesModel
.
m
arkLineModel
;
var
mlModel
=
MarkerModel
.
getMarkerModelFromSeries
(
seriesModel
,
'
markLine
'
)
as
M
arkLineModel
;
if
(
mlModel
)
{
var
mlData
=
mlModel
.
getData
();
var
fromData
=
mlModel
.
__
from
;
var
toData
=
mlModel
.
__
to
;
var
fromData
=
inner
(
mlModel
).
from
;
var
toData
=
inner
(
mlModel
).
to
;
// Update visual and layout of from symbol and to symbol
fromData
.
each
(
function
(
idx
)
{
updateSingleMarkerEndLayout
(
fromData
,
idx
,
true
,
seriesModel
,
api
);
...
...
@@ -246,9 +287,14 @@ export default MarkerView.extend({
}
},
this
);
}
,
}
renderSeries
:
function
(
seriesModel
,
mlModel
,
ecModel
,
api
)
{
renderSeries
(
seriesModel
:
SeriesModel
,
mlModel
:
MarkLineModel
,
ecModel
:
GlobalModel
,
api
:
ExtensionAPI
)
{
var
coordSys
=
seriesModel
.
coordinateSystem
;
var
seriesId
=
seriesModel
.
id
;
var
seriesData
=
seriesModel
.
getData
();
...
...
@@ -264,17 +310,17 @@ export default MarkerView.extend({
var
toData
=
mlData
.
to
;
var
lineData
=
mlData
.
line
;
mlModel
.
__
from
=
fromData
;
mlModel
.
__
to
=
toData
;
inner
(
mlModel
).
from
=
fromData
;
inner
(
mlModel
).
to
=
toData
;
// Line data for tooltip and formatter
mlModel
.
setData
(
lineData
);
var
symbolType
=
mlModel
.
get
(
'
symbol
'
);
var
symbolSize
=
mlModel
.
get
(
'
symbolSize
'
);
if
(
!
zrUtil
.
isArray
(
symbolType
))
{
if
(
!
isArray
(
symbolType
))
{
symbolType
=
[
symbolType
,
symbolType
];
}
if
(
typeof
symbolSize
===
'
number
'
)
{
if
(
!
isArray
(
symbolSize
)
)
{
symbolSize
=
[
symbolSize
,
symbolSize
];
}
...
...
@@ -286,7 +332,7 @@ export default MarkerView.extend({
// Update visual and layout of line
lineData
.
each
(
function
(
idx
)
{
var
lineColor
=
lineData
.
getItemModel
(
idx
).
get
(
'
lineStyle.color
'
);
var
lineColor
=
lineData
.
getItemModel
<
MarkLineMergedItemOption
>
(
idx
).
get
([
'
lineStyle
'
,
'
color
'
]
);
lineData
.
setItemVisual
(
idx
,
{
color
:
lineColor
||
fromData
.
getItemVisual
(
idx
,
'
color
'
)
});
...
...
@@ -309,46 +355,44 @@ export default MarkerView.extend({
// FIXME
mlData
.
line
.
eachItemGraphicEl
(
function
(
el
,
idx
)
{
el
.
traverse
(
function
(
child
)
{
child
.
dataModel
=
mlModel
;
getECData
(
child
)
.
dataModel
=
mlModel
;
});
});
function
updateDataVisualAndLayout
(
data
,
idx
,
isFrom
)
{
var
itemModel
=
data
.
getItemModel
(
idx
);
function
updateDataVisualAndLayout
(
data
:
List
<
MarkLineModel
>
,
idx
:
number
,
isFrom
:
boolean
)
{
var
itemModel
=
data
.
getItemModel
<
MarkLineMergedItemOption
>
(
idx
);
updateSingleMarkerEndLayout
(
data
,
idx
,
isFrom
,
seriesModel
,
api
);
data
.
setItemVisual
(
idx
,
{
symbolSize
:
itemModel
.
get
(
'
symbolSize
'
)
||
symbolSize
[
isFrom
?
0
:
1
],
symbol
:
itemModel
.
get
(
'
symbol
'
,
true
)
||
symbolType
[
isFrom
?
0
:
1
],
color
:
itemModel
.
get
(
'
itemStyle.color
'
)
||
seriesData
.
getVisual
(
'
color
'
)
symbolSize
:
itemModel
.
get
(
'
symbolSize
'
)
||
(
symbolSize
as
number
[])
[
isFrom
?
0
:
1
],
symbol
:
itemModel
.
get
(
'
symbol
'
,
true
)
||
(
symbolType
as
string
[])
[
isFrom
?
0
:
1
],
color
:
itemModel
.
get
(
[
'
itemStyle
'
,
'
color
'
]
)
||
seriesData
.
getVisual
(
'
color
'
)
});
}
lineDraw
.
__keep
=
true
;
this
.
markKeep
(
lineDraw
)
;
lineDraw
.
group
.
silent
=
mlModel
.
get
(
'
silent
'
)
||
seriesModel
.
get
(
'
silent
'
);
}
}
);
}
/**
* @inner
* @param {module:echarts/coord/*} coordSys
* @param {module:echarts/model/Series} seriesModel
* @param {module:echarts/model/Model} mpModel
*/
function
createList
(
coordSys
,
seriesModel
,
mlModel
)
{
function
createList
(
coordSys
:
CoordinateSystem
,
seriesModel
:
SeriesModel
,
mlModel
:
MarkLineModel
)
{
var
coordDimsInfos
;
if
(
coordSys
)
{
coordDimsInfos
=
zrUtil
.
map
(
coordSys
&&
coordSys
.
dimensions
,
function
(
coordDim
)
{
coordDimsInfos
=
map
(
coordSys
&&
coordSys
.
dimensions
,
function
(
coordDim
)
{
var
info
=
seriesModel
.
getData
().
getDimensionInfo
(
seriesModel
.
getData
().
mapDimension
(
coordDim
)
)
||
{};
// In map series data don't have lng and lat dimension. Fallback to same with coordSys
return
zrUtil
.
defaults
({
name
:
coordDim
},
info
);
return
defaults
({
name
:
coordDim
},
info
);
});
}
else
{
...
...
@@ -363,33 +407,33 @@ function createList(coordSys, seriesModel, mlModel) {
// No dimensions
var
lineData
=
new
List
([],
mlModel
);
var
optData
=
zrUtil
.
map
(
mlModel
.
get
(
'
data
'
),
zrUtil
.
curry
(
var
optData
=
map
(
mlModel
.
get
(
'
data
'
),
curry
(
markLineTransform
,
seriesModel
,
coordSys
,
mlModel
));
if
(
coordSys
)
{
optData
=
zrUtil
.
filter
(
optData
,
zrUtil
.
curry
(
markLineFilter
,
coordSys
)
optData
=
filter
(
optData
,
curry
(
markLineFilter
,
coordSys
)
);
}
var
dimValueGetter
=
coordSys
?
markerHelper
.
dimValueGetter
:
function
(
item
)
{
var
dimValueGetter
=
coordSys
?
markerHelper
.
dimValueGetter
:
function
(
item
:
MarkLineMergedItemOption
)
{
return
item
.
value
;
};
fromData
.
initData
(
zrUtil
.
map
(
optData
,
function
(
item
)
{
map
(
optData
,
function
(
item
)
{
return
item
[
0
];
}),
null
,
dimValueGetter
);
toData
.
initData
(
zrUtil
.
map
(
optData
,
function
(
item
)
{
map
(
optData
,
function
(
item
)
{
return
item
[
1
];
}),
null
,
dimValueGetter
);
lineData
.
initData
(
zrUtil
.
map
(
optData
,
function
(
item
)
{
map
(
optData
,
function
(
item
)
{
return
item
[
2
];
})
);
...
...
@@ -401,3 +445,5 @@ function createList(coordSys, seriesModel, mlModel) {
line
:
lineData
};
}
ComponentView
.
registerClass
(
MarkLineView
);
src/component/marker/MarkPointModel.ts
浏览文件 @
b49ce0d3
...
...
@@ -17,15 +17,63 @@
* under the License.
*/
// @ts-nocheck
import
MarkerModel
,
{
MarkerOption
,
MarkerPositionOption
}
from
'
./MarkerModel
'
;
import
ComponentModel
from
'
../../model/Component
'
;
import
GlobalModel
from
'
../../model/Global
'
;
import
{
SymbolOptionMixin
,
ItemStyleOption
,
LabelOption
,
CallbackDataParams
}
from
'
../../util/types
'
;
import
List
from
'
../../data/List
'
;
import
MarkerModel
from
'
./MarkerModel
'
;
// interface MarkPointCallbackDataParams extends CallbackDataParams {
// componentType: 'markPoint'
// componentSubType: never
// }
export
default
MarkerModel
.
extend
({
export
interface
MarkPointDataItemOption
extends
// TODO should not support callback in data
SymbolOptionMixin
<
CallbackDataParams
>
,
MarkerPositionOption
{
name
:
string
type
:
'
markPoint
'
,
itemStyle
?:
ItemStyleOption
label
?:
LabelOption
defaultOption
:
{
emphasis
?:
{
itemStyle
?:
ItemStyleOption
label
?:
LabelOption
}
}
export
interface
MarkPointOption
extends
MarkerOption
,
SymbolOptionMixin
<
CallbackDataParams
>
{
precision
?:
number
itemStyle
?:
ItemStyleOption
label
?:
LabelOption
emphasis
?:
{
itemStyle
?:
ItemStyleOption
label
?:
LabelOption
}
data
?:
MarkPointDataItemOption
[]
}
class
MarkPointModel
extends
MarkerModel
<
MarkPointOption
>
{
static
type
=
'
markPoint
'
type
=
MarkPointModel
.
type
createMarkerModelFromSeries
(
markerOpt
:
MarkPointOption
,
masterMarkerModel
:
MarkPointModel
,
ecModel
:
GlobalModel
)
{
return
new
MarkPointModel
(
markerOpt
,
masterMarkerModel
,
ecModel
);
}
static
defaultOption
:
MarkPointOption
=
{
zlevel
:
0
,
z
:
5
,
symbol
:
'
pin
'
,
...
...
@@ -48,4 +96,8 @@ export default MarkerModel.extend({
}
}
}
});
\ No newline at end of file
}
ComponentModel
.
registerClass
(
MarkPointModel
);
export
default
MarkPointModel
;
\ No newline at end of file
src/component/marker/MarkPointView.ts
浏览文件 @
b49ce0d3
...
...
@@ -17,19 +17,30 @@
* under the License.
*/
// @ts-nocheck
import
*
as
zrUtil
from
'
zrender/src/core/util
'
;
import
SymbolDraw
from
'
../../chart/helper/SymbolDraw
'
;
import
*
as
numberUtil
from
'
../../util/number
'
;
import
List
from
'
../../data/List
'
;
import
*
as
markerHelper
from
'
./markerHelper
'
;
import
MarkerView
from
'
./MarkerView
'
;
function
updateMarkerLayout
(
mpData
,
seriesModel
,
api
)
{
import
ComponentView
from
'
../../view/Component
'
;
import
{
CoordinateSystem
}
from
'
../../coord/CoordinateSystem
'
;
import
SeriesModel
from
'
../../model/Series
'
;
import
MarkPointModel
,
{
MarkPointDataItemOption
}
from
'
./MarkPointModel
'
;
import
GlobalModel
from
'
../../model/Global
'
;
import
MarkerModel
from
'
./MarkerModel
'
;
import
ExtensionAPI
from
'
../../ExtensionAPI
'
;
import
{
HashMap
,
isFunction
,
map
,
defaults
,
filter
,
curry
}
from
'
zrender/src/core/util
'
;
import
{
getECData
}
from
'
../../util/graphic
'
;
function
updateMarkerLayout
(
mpData
:
List
<
MarkPointModel
>
,
seriesModel
:
SeriesModel
,
api
:
ExtensionAPI
)
{
var
coordSys
=
seriesModel
.
coordinateSystem
;
mpData
.
each
(
function
(
idx
)
{
var
itemModel
=
mpData
.
getItemModel
(
idx
);
mpData
.
each
(
function
(
idx
:
number
)
{
var
itemModel
=
mpData
.
getItemModel
<
MarkPointDataItemOption
>
(
idx
);
var
point
;
var
xPx
=
numberUtil
.
parsePercent
(
itemModel
.
get
(
'
x
'
),
api
.
getWidth
());
var
yPx
=
numberUtil
.
parsePercent
(
itemModel
.
get
(
'
y
'
),
api
.
getHeight
());
...
...
@@ -62,31 +73,31 @@ function updateMarkerLayout(mpData, seriesModel, api) {
});
}
export
default
MarkerView
.
extend
(
{
class
MarkPointView
extends
MarkerView
{
type
:
'
markPoint
'
,
static
type
=
'
markPoint
'
// updateLayout: function (markPointModel, ecModel, api) {
// ecModel.eachSeries(function (seriesModel) {
// var mpModel = seriesModel.markPointModel;
// if (mpModel) {
// updateMarkerLayout(mpModel.getData(), seriesModel, api);
// this.markerGroupMap.get(seriesModel.id).updateLayout(mpModel);
// }
// }, this);
// },
markerGroupMap
:
HashMap
<
SymbolDraw
>
updateTransform
:
function
(
markPointModel
,
ecModel
,
api
)
{
updateTransform
(
markPointModel
:
MarkPointModel
,
ecModel
:
GlobalModel
,
api
:
ExtensionAPI
)
{
ecModel
.
eachSeries
(
function
(
seriesModel
)
{
var
mpModel
=
seriesModel
.
m
arkPointModel
;
var
mpModel
=
MarkerModel
.
getMarkerModelFromSeries
(
seriesModel
,
'
markPoint
'
)
as
M
arkPointModel
;
if
(
mpModel
)
{
updateMarkerLayout
(
mpModel
.
getData
(),
seriesModel
,
api
);
this
.
markerGroupMap
.
get
(
seriesModel
.
id
).
updateLayout
(
mpModel
);
updateMarkerLayout
(
mpModel
.
getData
(),
seriesModel
,
api
);
this
.
markerGroupMap
.
get
(
seriesModel
.
id
).
updateLayout
();
}
},
this
);
}
,
}
renderSeries
:
function
(
seriesModel
,
mpModel
,
ecModel
,
api
)
{
renderSeries
(
seriesModel
:
SeriesModel
,
mpModel
:
MarkPointModel
,
ecModel
:
GlobalModel
,
api
:
ExtensionAPI
)
{
var
coordSys
=
seriesModel
.
coordinateSystem
;
var
seriesId
=
seriesModel
.
id
;
var
seriesData
=
seriesModel
.
getData
();
...
...
@@ -103,19 +114,17 @@ export default MarkerView.extend({
updateMarkerLayout
(
mpModel
.
getData
(),
seriesModel
,
api
);
mpData
.
each
(
function
(
idx
)
{
var
itemModel
=
mpData
.
getItemModel
(
idx
);
var
itemModel
=
mpData
.
getItemModel
<
MarkPointDataItemOption
>
(
idx
);
var
symbol
=
itemModel
.
getShallow
(
'
symbol
'
);
var
symbolSize
=
itemModel
.
getShallow
(
'
symbolSize
'
);
var
isFnSymbol
=
zrUtil
.
isFunction
(
symbol
);
var
isFnSymbolSize
=
zrUtil
.
isFunction
(
symbolSize
);
if
(
isF
nSymbol
||
isFnSymbolSize
)
{
if
(
isF
unction
(
symbol
)
||
isFunction
(
symbolSize
)
)
{
var
rawIdx
=
mpModel
.
getRawValue
(
idx
);
var
dataParams
=
mpModel
.
getDataParams
(
idx
);
if
(
isF
nSymbol
)
{
if
(
isF
unction
(
symbol
)
)
{
symbol
=
symbol
(
rawIdx
,
dataParams
);
}
if
(
isF
nSymbolSize
)
{
if
(
isF
unction
(
symbolSize
)
)
{
// FIXME 这里不兼容 ECharts 2.x,2.x 貌似参数是整个数据?
symbolSize
=
symbolSize
(
rawIdx
,
dataParams
);
}
...
...
@@ -124,7 +133,7 @@ export default MarkerView.extend({
mpData
.
setItemVisual
(
idx
,
{
symbol
:
symbol
,
symbolSize
:
symbolSize
,
color
:
itemModel
.
get
(
'
itemStyle.color
'
)
color
:
itemModel
.
get
(
[
'
itemStyle
'
,
'
color
'
]
)
||
seriesData
.
getVisual
(
'
color
'
)
});
});
...
...
@@ -137,31 +146,29 @@ export default MarkerView.extend({
// FIXME
mpData
.
eachItemGraphicEl
(
function
(
el
)
{
el
.
traverse
(
function
(
child
)
{
child
.
dataModel
=
mpModel
;
getECData
(
child
)
.
dataModel
=
mpModel
;
});
});
symbolDraw
.
__keep
=
true
;
this
.
markKeep
(
symbolDraw
)
;
symbolDraw
.
group
.
silent
=
mpModel
.
get
(
'
silent
'
)
||
seriesModel
.
get
(
'
silent
'
);
}
});
/**
* @inner
* @param {module:echarts/coord/*} [coordSys]
* @param {module:echarts/model/Series} seriesModel
* @param {module:echarts/model/Model} mpModel
*/
function
createList
(
coordSys
,
seriesModel
,
mpModel
)
{
}
function
createList
(
coordSys
:
CoordinateSystem
,
seriesModel
:
SeriesModel
,
mpModel
:
MarkPointModel
)
{
var
coordDimsInfos
;
if
(
coordSys
)
{
coordDimsInfos
=
zrUtil
.
map
(
coordSys
&&
coordSys
.
dimensions
,
function
(
coordDim
)
{
coordDimsInfos
=
map
(
coordSys
&&
coordSys
.
dimensions
,
function
(
coordDim
)
{
var
info
=
seriesModel
.
getData
().
getDimensionInfo
(
seriesModel
.
getData
().
mapDimension
(
coordDim
)
)
||
{};
// In map series data don't have lng and lat dimension. Fallback to same with coordSys
return
zrUtil
.
defaults
({
name
:
coordDim
},
info
);
return
defaults
({
name
:
coordDim
},
info
);
});
}
else
{
...
...
@@ -172,20 +179,22 @@ function createList(coordSys, seriesModel, mpModel) {
}
var
mpData
=
new
List
(
coordDimsInfos
,
mpModel
);
var
dataOpt
=
zrUtil
.
map
(
mpModel
.
get
(
'
data
'
),
zrUtil
.
curry
(
var
dataOpt
=
map
(
mpModel
.
get
(
'
data
'
),
curry
(
markerHelper
.
dataTransform
,
seriesModel
));
if
(
coordSys
)
{
dataOpt
=
zrUtil
.
filter
(
dataOpt
,
zrUtil
.
curry
(
markerHelper
.
dataFilter
,
coordSys
)
dataOpt
=
filter
(
dataOpt
,
curry
(
markerHelper
.
dataFilter
,
coordSys
)
);
}
mpData
.
initData
(
dataOpt
,
null
,
coordSys
?
markerHelper
.
dimValueGetter
:
function
(
item
)
{
coordSys
?
markerHelper
.
dimValueGetter
:
function
(
item
:
MarkPointDataItemOption
)
{
return
item
.
value
;
}
);
return
mpData
;
}
ComponentView
.
registerClass
(
MarkPointView
);
\ No newline at end of file
src/component/marker/MarkerModel.ts
浏览文件 @
b49ce0d3
...
...
@@ -17,32 +17,108 @@
* under the License.
*/
// @ts-nocheck
import
{
__DEV__
}
from
'
../../config
'
;
import
*
as
echarts
from
'
../../echarts
'
;
import
*
as
zrUtil
from
'
zrender/src/core/util
'
;
import
env
from
'
zrender/src/core/env
'
;
import
*
as
modelUtil
from
'
../../util/model
'
;
import
*
as
formatUtil
from
'
../../util/format
'
;
import
DataFormatMixin
from
'
../../model/mixin/dataFormat
'
;
import
ComponentModel
from
'
../../model/Component
'
;
import
SeriesModel
from
'
../../model/Series
'
;
import
{
DisplayStateHostOption
,
ComponentOption
,
AnimationOptionMixin
,
Dictionary
,
CommonTooltipOption
,
ScaleDataValue
}
from
'
../../util/types
'
;
import
Model
from
'
../../model/Model
'
;
import
GlobalModel
from
'
../../model/Global
'
;
import
List
from
'
../../data/List
'
;
import
{
makeInner
,
defaultEmphasis
}
from
'
../../util/model
'
;
var
addCommas
=
formatUtil
.
addCommas
;
var
encodeHTML
=
formatUtil
.
encodeHTML
;
function
fillLabel
(
opt
)
{
modelUtil
.
defaultEmphasis
(
opt
,
'
label
'
,
[
'
show
'
]);
function
fillLabel
(
opt
:
DisplayStateHostOption
)
{
defaultEmphasis
(
opt
,
'
label
'
,
[
'
show
'
]);
}
var
MarkerModel
=
echarts
.
extendComponentModel
({
type
:
'
marker
'
,
export
type
MarkerStatisticType
=
'
average
'
|
'
min
'
|
'
max
'
|
'
median
'
;
/**
* Option to specify where to put the marker.
*/
export
interface
MarkerPositionOption
{
// Priority: x/y > coord(xAxis, yAxis) > type
// Absolute position, px or percent string
x
?:
number
|
string
y
?:
number
|
string
/**
* Coord on any coordinate system
*/
coord
?:
(
ScaleDataValue
|
MarkerStatisticType
)[]
// On cartesian coordinate system
xAxis
?:
ScaleDataValue
yAxis
?:
ScaleDataValue
// On polar coordinate system
radiusAxis
?:
ScaleDataValue
angleAxis
?:
ScaleDataValue
// Use statistic method
type
?:
MarkerStatisticType
/**
* When using statistic method with type.
* valueIndex and valueDim can be specify which dim the statistic is used on.
*/
valueIndex
?:
number
valueDim
?:
string
dependencies
:
[
'
series
'
,
'
grid
'
,
'
polar
'
,
'
geo
'
],
/**
* Value to be displayed as label. Totally optional
*/
value
?:
string
|
number
}
export
interface
MarkerOption
extends
ComponentOption
,
AnimationOptionMixin
{
silent
?:
boolean
data
?:
unknown
[]
tooltip
?:
CommonTooltipOption
<
unknown
>
&
{
trigger
?:
'
item
'
|
'
axis
'
|
boolean
|
'
none
'
}
}
// { [componentType]: MarkerModel }
const
inner
=
makeInner
<
Dictionary
<
MarkerModel
>
,
SeriesModel
>
();
abstract
class
MarkerModel
<
Opts
extends
MarkerOption
=
MarkerOption
>
extends
ComponentModel
<
Opts
>
{
static
type
=
'
marker
'
type
=
MarkerModel
.
type
/**
* If marker model is created by self from series
*/
createdBySelf
=
false
static
readonly
dependencies
=
[
'
series
'
,
'
grid
'
,
'
polar
'
,
'
geo
'
]
__hostSeries
:
SeriesModel
private
_data
:
List
/**
* @overrite
*/
init
:
function
(
option
,
parentModel
,
ec
Model
)
{
init
(
option
:
Opts
,
parentModel
:
Model
,
ecModel
:
Global
Model
)
{
if
(
__DEV__
)
{
if
(
this
.
type
===
'
marker
'
)
{
...
...
@@ -51,38 +127,37 @@ var MarkerModel = echarts.extendComponentModel({
}
this
.
mergeDefaultAndTheme
(
option
,
ecModel
);
this
.
_mergeOption
(
option
,
ecModel
,
false
,
true
);
}
,
}
/**
* @return {boolean}
*/
isAnimationEnabled
:
function
()
{
isAnimationEnabled
():
boolean
{
if
(
env
.
node
)
{
return
false
;
}
var
hostSeries
=
this
.
__hostSeries
;
return
this
.
getShallow
(
'
animation
'
)
&&
hostSeries
&&
hostSeries
.
isAnimationEnabled
();
}
,
}
/**
* @overrite
*/
mergeOption
:
function
(
newOpt
,
ec
Model
)
{
mergeOption
(
newOpt
:
Opts
,
ecModel
:
Global
Model
)
{
this
.
_mergeOption
(
newOpt
,
ecModel
,
false
,
false
);
}
,
}
_mergeOption
:
function
(
newOpt
,
ecModel
,
createdBySelf
,
isInit
)
{
var
MarkerModel
=
this
.
constructor
;
var
modelPropName
=
this
.
mainType
+
'
Model
'
;
_mergeOption
(
newOpt
:
Opts
,
ecModel
:
GlobalModel
,
createdBySelf
?:
boolean
,
isInit
?:
boolean
)
{
var
componentType
=
this
.
mainType
;
if
(
!
createdBySelf
)
{
ecModel
.
eachSeries
(
function
(
seriesModel
)
{
var
markerOpt
=
seriesModel
.
get
(
this
.
mainType
,
true
);
// mainType can be markPoint, markLine, markArea
var
markerOpt
=
seriesModel
.
get
(
this
.
mainType
as
any
,
true
)
as
Opts
;
var
markerModel
=
seriesModel
[
modelPropNam
e
];
var
markerModel
=
inner
(
seriesModel
)[
componentTyp
e
];
if
(
!
markerOpt
||
!
markerOpt
.
data
)
{
seriesModel
[
modelPropNam
e
]
=
null
;
inner
(
seriesModel
)[
componentTyp
e
]
=
null
;
return
;
}
if
(
!
markerModel
)
{
...
...
@@ -101,9 +176,12 @@ var MarkerModel = echarts.extendComponentModel({
}
});
markerModel
=
new
MarkerModel
(
markerModel
=
this
.
createMarkerModelFromSeries
(
markerOpt
,
this
,
ecModel
);
// markerModel = new ImplementedMarkerModel(
// markerOpt, this, ecModel
// );
zrUtil
.
extend
(
markerModel
,
{
mainType
:
this
.
mainType
,
...
...
@@ -118,16 +196,16 @@ var MarkerModel = echarts.extendComponentModel({
else
{
markerModel
.
_mergeOption
(
markerOpt
,
ecModel
,
true
);
}
seriesModel
[
modelPropNam
e
]
=
markerModel
;
inner
(
seriesModel
)[
componentTyp
e
]
=
markerModel
;
},
this
);
}
}
,
}
formatTooltip
:
function
(
dataIndex
)
{
formatTooltip
(
dataIndex
:
number
)
{
var
data
=
this
.
getData
();
var
value
=
this
.
getRawValue
(
dataIndex
);
var
formattedValue
=
zrUtil
.
isArray
(
value
)
?
zrUtil
.
map
(
value
,
addCommas
).
join
(
'
,
'
)
:
addCommas
(
value
);
?
zrUtil
.
map
(
value
,
addCommas
).
join
(
'
,
'
)
:
addCommas
(
value
as
number
);
var
name
=
data
.
getName
(
dataIndex
);
var
html
=
encodeHTML
(
this
.
name
);
if
(
value
!=
null
||
name
)
{
...
...
@@ -143,17 +221,35 @@ var MarkerModel = echarts.extendComponentModel({
html
+=
encodeHTML
(
formattedValue
);
}
return
html
;
}
,
}
getData
:
function
()
{
return
this
.
_data
;
}
,
getData
():
List
<
this
>
{
return
this
.
_data
as
List
<
this
>
;
}
setData
:
function
(
data
)
{
setData
(
data
:
List
)
{
this
.
_data
=
data
;
}
});
/**
* Create slave marker model from series.
*/
abstract
createMarkerModelFromSeries
(
markerOpt
:
Opts
,
masterMarkerModel
:
MarkerModel
,
ecModel
:
GlobalModel
):
MarkerModel
static
getMarkerModelFromSeries
(
seriesModel
:
SeriesModel
,
// Support three types of markers. Strict check.
componentType
:
'
markLine
'
|
'
markPoint
'
|
'
markArea
'
)
{
return
inner
(
seriesModel
)[
componentType
];
}
}
interface
MarkerModel
<
Opts
extends
MarkerOption
=
MarkerOption
>
extends
DataFormatMixin
{}
zrUtil
.
mixin
(
MarkerModel
,
DataFormatMixin
.
prototype
);
export
default
MarkerModel
;
\ No newline at end of file
src/component/marker/MarkerView.ts
浏览文件 @
b49ce0d3
...
...
@@ -17,40 +17,65 @@
* under the License.
*/
// @ts-nocheck
import
ComponentView
from
'
../../view/Component
'
;
import
{
HashMap
,
createHashMap
}
from
'
zrender/src/core/util
'
;
import
MarkerModel
from
'
./MarkerModel
'
;
import
GlobalModel
from
'
../../model/Global
'
;
import
ExtensionAPI
from
'
../../ExtensionAPI
'
;
import
{
makeInner
}
from
'
../../util/model
'
;
import
SeriesModel
from
'
../../model/Series
'
;
import
{
Group
}
from
'
zrender/src/export
'
;
import
*
as
echarts
from
'
../../echarts
'
;
import
*
as
zrUtil
from
'
zrender/src/core/util
'
;
const
inner
=
makeInner
<
{
keep
:
boolean
},
MarkerDraw
>
();
export
default
echarts
.
extendComponentView
({
interface
MarkerDraw
{
group
:
Group
}
abstract
class
MarkerView
extends
ComponentView
{
type
:
'
marker
'
,
static
type
=
'
marker
'
type
=
MarkerView
.
type
init
:
function
()
{
/**
* Markline grouped by series
* @private
* @type {module:zrender/core/util.HashMap}
*/
this
.
markerGroupMap
=
zrUtil
.
createHashMap
();
},
/**
* Markline grouped by series
*/
markerGroupMap
:
HashMap
<
MarkerDraw
>
render
:
function
(
markerModel
,
ecModel
,
api
)
{
init
()
{
this
.
markerGroupMap
=
createHashMap
();
}
render
(
markerModel
:
MarkerModel
,
ecModel
:
GlobalModel
,
api
:
ExtensionAPI
)
{
var
markerGroupMap
=
this
.
markerGroupMap
;
markerGroupMap
.
each
(
function
(
item
)
{
i
tem
.
__
keep
=
false
;
i
nner
(
item
).
keep
=
false
;
});
var
markerModelKey
=
this
.
type
+
'
Model
'
;
ecModel
.
eachSeries
(
function
(
seriesModel
)
{
var
markerModel
=
seriesModel
[
markerModelKey
];
var
markerModel
=
MarkerModel
.
getMarkerModelFromSeries
(
seriesModel
,
this
.
type
as
'
markPoint
'
|
'
markLine
'
|
'
markArea
'
);
markerModel
&&
this
.
renderSeries
(
seriesModel
,
markerModel
,
ecModel
,
api
);
},
this
);
markerGroupMap
.
each
(
function
(
item
)
{
!
i
tem
.
__
keep
&&
this
.
group
.
remove
(
item
.
group
);
!
i
nner
(
item
).
keep
&&
this
.
group
.
remove
(
item
.
group
);
},
this
);
},
}
markKeep
(
drawGroup
:
MarkerDraw
)
{
inner
(
drawGroup
).
keep
=
true
;
}
abstract
renderSeries
(
seriesModel
:
SeriesModel
,
markerModel
:
MarkerModel
,
ecModel
:
GlobalModel
,
api
:
ExtensionAPI
):
void
}
renderSeries
:
function
()
{}
});
\ No newline at end of file
export
default
MarkerView
;
\ No newline at end of file
src/component/marker/markerHelper.ts
浏览文件 @
b49ce0d3
...
...
@@ -17,20 +17,29 @@
* under the License.
*/
// @ts-nocheck
import
*
as
zrUtil
from
'
zrender/src/core/util
'
;
import
*
as
numberUtil
from
'
../../util/number
'
;
import
{
isDimensionStacked
}
from
'
../../data/helper/dataStackHelper
'
;
import
SeriesModel
from
'
../../model/Series
'
;
import
List
from
'
../../data/List
'
;
import
{
MarkerStatisticType
,
MarkerPositionOption
}
from
'
./MarkerModel
'
;
import
{
indexOf
,
curry
,
clone
,
isArray
}
from
'
zrender/src/core/util
'
;
import
Axis
from
'
../../coord/Axis
'
;
import
{
CoordinateSystem
}
from
'
../../coord/CoordinateSystem
'
;
import
{
ScaleDataValue
,
ParsedValue
}
from
'
../../util/types
'
;
var
indexOf
=
zrUtil
.
indexOf
;
interface
MarkerAxisInfo
{
valueDataDim
:
string
valueAxis
:
Axis
baseAxis
:
Axis
baseDataDim
:
string
}
function
hasXOrY
(
item
)
{
return
!
(
isNaN
(
parseFloat
(
item
.
x
))
&&
isNaN
(
parseFloat
(
item
.
y
)));
function
hasXOrY
(
item
:
MarkerPositionOption
)
{
return
!
(
isNaN
(
parseFloat
(
item
.
x
as
string
))
&&
isNaN
(
parseFloat
(
item
.
y
as
string
)));
}
function
hasXAndY
(
item
)
{
return
!
isNaN
(
parseFloat
(
item
.
x
))
&&
!
isNaN
(
parseFloat
(
item
.
y
));
function
hasXAndY
(
item
:
MarkerPositionOption
)
{
return
!
isNaN
(
parseFloat
(
item
.
x
as
string
))
&&
!
isNaN
(
parseFloat
(
item
.
y
as
string
));
}
// Make it simple, do not visit all stacked value to count precision.
...
...
@@ -58,16 +67,21 @@ function hasXAndY(item) {
// }
function
markerTypeCalculatorWithExtent
(
mlType
,
data
,
otherDataDim
,
targetDataDim
,
otherCoordIndex
,
targetCoordIndex
)
{
var
coordArr
=
[];
markerType
:
MarkerStatisticType
,
data
:
List
,
otherDataDim
:
string
,
targetDataDim
:
string
,
otherCoordIndex
:
number
,
targetCoordIndex
:
number
):
[
ParsedValue
[],
ParsedValue
]
{
var
coordArr
:
ParsedValue
[]
=
[];
var
stacked
=
isDimensionStacked
(
data
,
targetDataDim
/*, otherDataDim*/
);
var
calcDataDim
=
stacked
?
data
.
getCalculationInfo
(
'
stackResultDimension
'
)
:
targetDataDim
;
var
value
=
numCalculate
(
data
,
calcDataDim
,
m
l
Type
);
var
value
=
numCalculate
(
data
,
calcDataDim
,
m
arker
Type
);
var
dataIndex
=
data
.
indicesOfNearest
(
calcDataDim
,
value
)[
0
];
coordArr
[
otherCoordIndex
]
=
data
.
get
(
otherDataDim
,
dataIndex
);
...
...
@@ -77,37 +91,18 @@ function markerTypeCalculatorWithExtent(
var
precision
=
numberUtil
.
getPrecision
(
data
.
get
(
targetDataDim
,
dataIndex
));
precision
=
Math
.
min
(
precision
,
20
);
if
(
precision
>=
0
)
{
coordArr
[
targetCoordIndex
]
=
+
coordArr
[
targetCoordIndex
]
.
toFixed
(
precision
);
coordArr
[
targetCoordIndex
]
=
+
(
coordArr
[
targetCoordIndex
]
as
number
)
.
toFixed
(
precision
);
}
return
[
coordArr
,
coordArrValue
];
}
var
curry
=
zrUtil
.
curry
;
// TODO Specified percent
var
markerTypeCalculator
=
{
/**
* @method
* @param {module:echarts/data/List} data
* @param {string} baseAxisDim
* @param {string} valueAxisDim
*/
min
:
curry
(
markerTypeCalculatorWithExtent
,
'
min
'
),
/**
* @method
* @param {module:echarts/data/List} data
* @param {string} baseAxisDim
* @param {string} valueAxisDim
*/
max
:
curry
(
markerTypeCalculatorWithExtent
,
'
max
'
),
/**
* @method
* @param {module:echarts/data/List} data
* @param {string} baseAxisDim
* @param {string} valueAxisDim
*/
average
:
curry
(
markerTypeCalculatorWithExtent
,
'
average
'
)
average
:
curry
(
markerTypeCalculatorWithExtent
,
'
average
'
),
median
:
curry
(
markerTypeCalculatorWithExtent
,
'
median
'
)
};
/**
...
...
@@ -119,7 +114,10 @@ var markerTypeCalculator = {
* @param {Object} item
* @return {Object}
*/
export
function
dataTransform
(
seriesModel
,
item
)
{
export
function
dataTransform
(
seriesModel
:
SeriesModel
,
item
:
MarkerPositionOption
)
{
var
data
=
seriesModel
.
getData
();
var
coordSys
=
seriesModel
.
coordinateSystem
;
...
...
@@ -128,13 +126,13 @@ export function dataTransform(seriesModel, item) {
// `yAxis` to specify the coord on each dimension
// parseFloat first because item.x and item.y can be percent string like '20%'
if
(
item
&&
!
hasXAndY
(
item
)
&&
!
zrUtil
.
isArray
(
item
.
coord
)
&&
coordSys
)
{
if
(
item
&&
!
hasXAndY
(
item
)
&&
!
isArray
(
item
.
coord
)
&&
coordSys
)
{
var
dims
=
coordSys
.
dimensions
;
var
axisInfo
=
getAxisInfo
(
item
,
data
,
coordSys
,
seriesModel
);
// Clone the option
// Transform the properties xAxis, yAxis, radiusAxis, angleAxis, geoCoord to value
item
=
zrUtil
.
clone
(
item
);
item
=
clone
(
item
);
if
(
item
.
type
&&
markerTypeCalculator
[
item
.
type
]
...
...
@@ -161,8 +159,8 @@ export function dataTransform(seriesModel, item) {
];
// Each coord support max, min, average
for
(
var
i
=
0
;
i
<
2
;
i
++
)
{
if
(
markerTypeCalculator
[
coord
[
i
]])
{
coord
[
i
]
=
numCalculate
(
data
,
data
.
mapDimension
(
dims
[
i
]),
coord
[
i
]);
if
(
markerTypeCalculator
[
coord
[
i
]
as
MarkerStatisticType
])
{
coord
[
i
]
=
numCalculate
(
data
,
data
.
mapDimension
(
dims
[
i
]),
coord
[
i
]
as
MarkerStatisticType
);
}
}
item
.
coord
=
coord
;
...
...
@@ -171,8 +169,13 @@ export function dataTransform(seriesModel, item) {
return
item
;
}
export
function
getAxisInfo
(
item
,
data
,
coordSys
,
seriesModel
)
{
var
ret
=
{};
export
function
getAxisInfo
(
item
:
MarkerPositionOption
,
data
:
List
,
coordSys
:
CoordinateSystem
,
seriesModel
:
SeriesModel
)
{
var
ret
=
{}
as
MarkerAxisInfo
;
if
(
item
.
valueIndex
!=
null
||
item
.
valueDim
!=
null
)
{
ret
.
valueDataDim
=
item
.
valueIndex
!=
null
...
...
@@ -191,7 +194,7 @@ export function getAxisInfo(item, data, coordSys, seriesModel) {
return
ret
;
}
function
dataDimToCoordDim
(
seriesModel
,
dataDim
)
{
function
dataDimToCoordDim
(
seriesModel
:
SeriesModel
,
dataDim
:
string
)
{
var
data
=
seriesModel
.
getData
();
var
dimensions
=
data
.
dimensions
;
dataDim
=
data
.
getDimension
(
dataDim
);
...
...
@@ -206,29 +209,41 @@ function dataDimToCoordDim(seriesModel, dataDim) {
/**
* Filter data which is out of coordinateSystem range
* [dataFilter description]
* @param {module:echarts/coord/*} [coordSys]
* @param {Object} item
* @return {boolean}
*/
export
function
dataFilter
(
coordSys
,
item
)
{
export
function
dataFilter
(
// Currently only polar and cartesian has containData.
coordSys
:
CoordinateSystem
&
{
containData
?(
data
:
ScaleDataValue
[]):
boolean
},
item
:
MarkerPositionOption
)
{
// Alwalys return true if there is no coordSys
return
(
coordSys
&&
coordSys
.
containData
&&
item
.
coord
&&
!
hasXOrY
(
item
))
?
coordSys
.
containData
(
item
.
coord
)
:
true
;
}
export
function
dimValueGetter
(
item
,
dimName
,
dataIndex
,
dimIndex
)
{
export
function
dimValueGetter
(
item
:
MarkerPositionOption
,
dimName
:
string
,
dataIndex
:
number
,
dimIndex
:
number
)
{
// x, y, radius, angle
if
(
dimIndex
<
2
)
{
return
item
.
coord
&&
item
.
coord
[
dimIndex
];
return
item
.
coord
&&
item
.
coord
[
dimIndex
]
as
ParsedValue
;
}
return
item
.
value
;
}
export
function
numCalculate
(
data
,
valueDataDim
,
type
)
{
export
function
numCalculate
(
data
:
List
,
valueDataDim
:
string
,
type
:
MarkerStatisticType
)
{
if
(
type
===
'
average
'
)
{
var
sum
=
0
;
var
count
=
0
;
data
.
each
(
valueDataDim
,
function
(
val
,
idx
)
{
data
.
each
(
valueDataDim
,
function
(
val
:
number
,
idx
)
{
if
(
!
isNaN
(
val
))
{
sum
+=
val
;
count
++
;
...
...
@@ -241,6 +256,6 @@ export function numCalculate(data, valueDataDim, type) {
}
else
{
// max & min
return
data
.
getDataExtent
(
valueDataDim
,
true
)[
type
===
'
max
'
?
1
:
0
];
return
data
.
getDataExtent
(
valueDataDim
)[
type
===
'
max
'
?
1
:
0
];
}
}
src/component/visualMap/VisualMapModel.ts
浏览文件 @
b49ce0d3
...
...
@@ -613,6 +613,4 @@ class VisualMapModel<Opts extends VisualMapOption = VisualMapOption> extends Com
}
}
ComponentModel
.
registerClass
(
VisualMapModel
);
export
default
VisualMapModel
;
src/coord/CoordinateSystem.ts
浏览文件 @
b49ce0d3
...
...
@@ -161,3 +161,9 @@ export interface CoordinateSystemHostModel extends ComponentModel {
export
interface
CoordinateSystemClipArea
{
contain
(
x
:
number
,
y
:
number
):
boolean
}
export
function
isCoordinateSystemType
<
T
extends
CoordinateSystem
,
S
=
T
[
'
type
'
]
>
(
coordSys
:
CoordinateSystem
,
type
:
S
):
coordSys
is
T
{
return
(
coordSys
.
type
as
unknown
as
S
)
===
type
;
}
src/coord/axisCommonTypes.ts
浏览文件 @
b49ce0d3
...
...
@@ -19,7 +19,7 @@
import
{
TextCommonOption
,
LineStyleOption
,
OrdinalRawValue
,
ZRColor
,
AreaStyleOption
,
ComponentOption
,
OptionDataValue
,
ColorString
,
AreaStyleOption
,
ComponentOption
,
ColorString
,
AnimationOptionMixin
,
Dictionary
}
from
'
../util/types
'
;
...
...
src/coord/geo/geoJSONLoader.ts
浏览文件 @
b49ce0d3
...
...
@@ -37,7 +37,7 @@ type MapRecordInner = {
};
};
var
inner
=
makeInner
<
MapRecordInner
>
();
var
inner
=
makeInner
<
MapRecordInner
,
GeoJSONMapRecord
>
();
export
default
{
...
...
src/coord/geo/geoSVGLoader.ts
浏览文件 @
b49ce0d3
...
...
@@ -33,7 +33,7 @@ type MapRecordInner = {
originRootHostKey
:
string
;
};
var
inner
=
makeInner
<
MapRecordInner
>
();
var
inner
=
makeInner
<
MapRecordInner
,
SVGMapRecord
>
();
export
default
{
...
...
src/coord/polar/AngleAxis.ts
浏览文件 @
b49ce0d3
...
...
@@ -28,7 +28,7 @@ import { AngleAxisModel } from './AxisModel';
var
inner
=
makeInner
<
{
lastAutoInterval
:
number
lastTickCount
:
number
}
>
();
}
,
AngleAxisModel
>
();
interface
AngleAxis
{
dataToAngle
:
Axis
[
'
dataToCoord
'
]
...
...
src/data/DataDimensionInfo.ts
浏览文件 @
b49ce0d3
...
...
@@ -28,7 +28,7 @@ class DataDimensionInfo {
* `dataCtors` of `data/List`.
* Optional.
*/
type
:
DimensionType
;
type
?
:
DimensionType
;
/**
* Dimension name.
...
...
src/data/List.ts
浏览文件 @
b49ce0d3
...
...
@@ -748,13 +748,13 @@ class List<HostModel extends Model = Model> {
* @param dimensions If ignored, using all dimensions.
*/
getValues
(
idx
:
number
):
ParsedValue
[];
getValues
(
dimensions
:
DimensionName
[],
idx
:
number
):
ParsedValue
[];
getValues
(
dimensions
:
DimensionName
[]
|
number
,
idx
?:
number
):
ParsedValue
[]
{
getValues
(
dimensions
:
readonly
DimensionName
[],
idx
:
number
):
ParsedValue
[];
getValues
(
dimensions
:
readonly
DimensionName
[]
|
number
,
idx
?:
number
):
ParsedValue
[]
{
var
values
=
[];
if
(
!
zrUtil
.
isArray
(
dimensions
))
{
// stack = idx;
idx
=
dimensions
;
idx
=
dimensions
as
number
;
dimensions
=
this
.
dimensions
;
}
...
...
@@ -894,11 +894,9 @@ class List<HostModel extends Model = Model> {
// TODO
// Use quick select?
// immutability & sort
var
sortedDimDataArray
=
[].
concat
(
dimDataArray
).
sort
(
function
(
a
,
b
)
{
var
sortedDimDataArray
=
dimDataArray
.
sort
(
function
(
a
:
number
,
b
:
number
)
{
return
a
-
b
;
});
})
as
number
[]
;
var
len
=
this
.
count
();
// calculate median
return
len
===
0
...
...
src/model/Component.ts
浏览文件 @
b49ce0d3
...
...
@@ -43,7 +43,7 @@ import {
var
inner
=
makeInner
<
{
defaultOption
:
ComponentOption
}
>
();
}
,
ComponentModel
>
();
class
ComponentModel
<
Opt
extends
ComponentOption
=
ComponentOption
>
extends
Model
<
Opt
>
{
...
...
src/model/Model.ts
浏览文件 @
b49ce0d3
...
...
@@ -36,7 +36,9 @@ import { ModelOption } from '../util/types';
import
{
Dictionary
}
from
'
zrender/src/core/types
'
;
var
mixin
=
zrUtil
.
mixin
;
var
inner
=
makeInner
<
{
getParent
(
path
:
string
|
string
[]):
Model
}
>
();
var
inner
=
makeInner
<
{
getParent
(
path
:
string
|
string
[]):
Model
},
Model
>
();
// Since model.option can be not only `Dictionary` but also primary types,
// we do this conditional type to avoid getting type 'never';
...
...
src/model/Series.ts
浏览文件 @
b49ce0d3
...
...
@@ -59,7 +59,7 @@ import { GradientObject } from 'zrender/src/graphic/Gradient';
var
inner
=
modelUtil
.
makeInner
<
{
data
:
List
dataBeforeProcessed
:
List
}
>
();
}
,
SeriesModel
>
();
interface
SeriesModel
{
/**
...
...
@@ -86,6 +86,11 @@ interface SeriesModel {
dataIndices
:
number
[],
nestestValue
:
any
};
/**
* Get position for marker
*/
getMarkerPosition
(
value
:
ScaleDataValue
[]):
number
[]
}
class
SeriesModel
<
Opt
extends
SeriesOption
=
SeriesOption
>
extends
ComponentModel
<
Opt
>
{
...
...
src/model/mixin/colorPalette.ts
浏览文件 @
b49ce0d3
...
...
@@ -25,7 +25,7 @@ import { Dictionary } from 'zrender/src/core/types';
var
inner
=
makeInner
<
{
colorIdx
:
number
colorNameMap
:
Dictionary
<
ZRColor
>
}
>
();
}
,
ColorPaletteMixin
>
();
function
getNearestColorPalette
(
colors
:
ZRColor
[][],
requestColorNum
:
number
...
...
src/util/graphic.ts
浏览文件 @
b49ce0d3
...
...
@@ -1540,7 +1540,7 @@ export interface ECData {
dataType
?:
string
;
}
export
const
getECData
=
makeInner
<
ECData
>
();
export
const
getECData
=
makeInner
<
ECData
,
Element
>
();
// Register built-in shapes. These shapes might be overwirtten
// by users, although we do not recommend that.
...
...
src/util/model.ts
浏览文件 @
b49ce0d3
...
...
@@ -466,14 +466,14 @@ export function queryDataIndex(data: List, payload: Payload & {
*
* @return {Function}
*/
export
function
makeInner
<
T
>
()
{
// Consider different scope by es module import.
var
key
=
'
__
\
0ec_inner_
'
+
innerUniqueIndex
++
+
'
_
'
+
Math
.
random
().
toFixed
(
5
);
return
function
(
hostObj
:
any
):
T
{
return
hostObj
[
key
]
||
(
hostObj
[
key
]
=
{});
export
function
makeInner
<
T
,
Host
extends
object
>
()
{
var
key
=
'
__ec_inner_
'
+
innerUniqueIndex
++
;
return
function
(
hostObj
:
Host
):
T
{
return
(
hostObj
as
any
)[
key
]
||
((
hostObj
as
any
)[
key
]
=
{});
};
}
var
innerUniqueIndex
=
0
;
// A random start point.
var
innerUniqueIndex
=
Math
.
round
(
Math
.
random
()
*
5
);
/**
* If string, e.g., 'geo', means {geoIndex: 0}.
...
...
src/util/types.ts
浏览文件 @
b49ce0d3
...
...
@@ -763,6 +763,16 @@ export interface LabelOption extends TextCommonOption {
* Option for labels on line, like markLine, lines
*/
export
interface
LineLabelOption
extends
Omit
<
LabelOption
,
'
distance
'
>
{
position
?:
'
start
'
|
'
middle
'
|
'
end
'
|
'
insideStartTop
'
|
'
insideStartBottom
'
|
'
insideMiddleTop
'
|
'
insideMiddleBottom
'
|
'
insideEndTop
'
|
'
insideEndBottom
'
|
'
insideMiddleBottom
'
/**
* Distance can be an array.
* Which will specify horizontal and vertical distance respectively
...
...
src/view/Chart.ts
浏览文件 @
b49ce0d3
...
...
@@ -38,7 +38,7 @@ import List from '../data/List';
var
inner
=
modelUtil
.
makeInner
<
{
updateMethod
:
keyof
ChartView
}
>
();
}
,
Payload
>
();
var
renderPlanner
=
createRenderPlanner
();
interface
ChartView
{
...
...
src/view/Component.ts
浏览文件 @
b49ce0d3
...
...
@@ -26,6 +26,24 @@ import ExtensionAPI from '../ExtensionAPI';
import
{
Payload
,
ViewRootGroup
,
ECEvent
,
EventQueryItem
}
from
'
../util/types
'
;
import
Element
from
'
zrender/src/Element
'
;
interface
ComponentView
{
/**
* Implement it if needed.
*/
updateTransform
(
seriesModel
:
ComponentModel
,
ecModel
:
GlobalModel
,
api
:
ExtensionAPI
,
payload
:
Payload
):
void
|
{
update
:
true
};
/**
* Pass only when return `true`.
* Implement it if needed.
*/
filterForExposedEvent
(
eventType
:
string
,
query
:
EventQueryItem
,
targetEl
:
Element
,
packedEvent
:
ECEvent
):
boolean
;
}
class
ComponentView
{
// [Caution]: for compat the previous "class extend"
...
...
@@ -56,14 +74,6 @@ class ComponentView {
dispose
(
ecModel
:
GlobalModel
,
api
:
ExtensionAPI
):
void
{}
/**
* Pass only when return `true`.
* Implement it if needed.
*/
filterForExposedEvent
:
(
eventType
:
string
,
query
:
EventQueryItem
,
targetEl
:
Element
,
packedEvent
:
ECEvent
)
=>
boolean
;
updateView
(
model
:
ComponentModel
,
ecModel
:
GlobalModel
,
api
:
ExtensionAPI
,
payload
:
Payload
):
void
{
// Do nothing;
}
...
...
@@ -76,13 +86,6 @@ class ComponentView {
// Do nothing;
}
/**
* Implement it if needed.
*/
updateTransform
:
(
seriesModel
:
ComponentModel
,
ecModel
:
GlobalModel
,
api
:
ExtensionAPI
,
payload
:
Payload
)
=>
void
|
{
update
:
true
};
static
registerClass
:
clazzUtil
.
ClassManager
[
'
registerClass
'
];
};
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录