Appearance
@jtopo/core / Link
Class: Link
连线对象,有起点和终端;
创建和设置起止, 有以下形式:
js
import {Link} from "@jtopo/core";
// 示例1
let link = new Link('text', 开始节点, 结束节点, 开始锚点名称, 结束锚点名称);
let link = new Link('text', beginNode, endNode, 'lm', 'center');
// 示例2
let link = new Link('text', 开始锚点, 结束锚点);
let link = new Link('text', beginNode.getAnchor('lm'), endNode.getAnchor('center'));
// 示例3
let link = new Link();
link.text = 'text';
link.setBegin(beginNode.getAnchor('lm'));
link.setEnd(endNode.getAnchor('auto'));
// 示例4
let link = new Link('text', beginNode, {x: 10, y:20});
let link = new Link('text', {x:0, y:0}, {x: 10, y:20});
Hierarchy
↳
Link
↳↳
LShapeLink
↳↳
ZShapeLink
↳↳
ArcLink
↳↳
BezierLink
↳↳
PathLink
↳↳
AutoFoldLink
Implements
Table of contents
Constructors
Properties
- afterRender
- attributes
- beforeRender
- beginArrow
- children
- classList
- className
- data
- deep
- destroyed
- draggable
- dropAllowed
- endArrow
- id
- inLinks
- isLayer
- isNode
- isSelected
- label
- name
- outLinks
- ownerLayer
- parent
- pointerEnabled
- points
- selectedStyle
- serializeable
- showSelected
- style
- title
- type
Accessors
- begin
- beginOffset
- bottom
- end
- endOffset
- height
- left
- right
- rotation
- scaleX
- scaleY
- skewX
- skewY
- text
- top
- visible
- width
- x
- y
- z
- zIndex
Methods
- addChild
- addChildren
- addClass
- addEventListener
- changeParent
- clearStyles
- contains
- destroy
- dispatchEvent
- draw
- getAABB
- getAnchor
- getAttribute
- getBeginArrow
- getBeginPoint
- getChildren
- getComputedStyle
- getEndArrow
- getEndPoint
- getInLinks
- getLabel
- getLinks
- getLocalPoint
- getOutLinks
- getPoint
- getPoints
- getRoot
- getSegmentAnchor
- getSegmentCount
- getShape
- getStyle
- getWorldTransform
- hasChild
- hasChildren
- hasClass
- hasListener
- hide
- hideAllChildren
- hitTest
- isConnected
- isVisible
- localToWorldXY
- markDirty
- pickable
- querySelector
- querySelectorAll
- removeAllChildren
- removeAllClass
- removeAttribute
- removeChild
- removeChildren
- removeClass
- removeEventListener
- removeFromParent
- rotate
- scale
- setAttribute
- setAttributes
- setBegin
- setBeginArrow
- setEnd
- setEndArrow
- setLabel
- setStyle
- setStyles
- setZIndex
- show
- showAllChildren
- toJSON
- translate
- translateWith
- unlink
- unlinkBegin
- unlinkEnd
- update
- updateMatrix
- updateZIndex
- worldToLocalXY
Constructors
constructor
new Link(text?
, begin?
, end?
, beginAnchorName?
, endAnchorName?
)
Parameters
Name | Type | Description |
---|---|---|
text? | string | 文本 |
begin? | LinkBeginTarget | 开始对象 |
end? | LinkEndTarget | 结束对象 |
beginAnchorName? | ConnectToNodeAnchorType | ConnectToLinkAnchorType | 开始节点对象的'定位点', 可为空,默认为"center" |
endAnchorName? | ConnectToNodeAnchorType | ConnectToLinkAnchorType | 结束节点对象的'定位点', 可为空,默认为"center" |
Overrides
Properties
afterRender
Optional
afterRender: Function
渲染后回调
Inherited from
attributes
Readonly
attributes: Object
Since
2.6.0 存放自定义属性(用于定义节点类型,和业务数据无关)
Index signature
▪ [key: string
]: any
Inherited from
beforeRender
Optional
beforeRender: Function
渲染前回调
js
obj.beforeRender = function(){
if(this.x < 0){
this.x = 0;
}
//...
}
Inherited from
beginArrow
Optional
beginArrow: Node
开始箭头对象
children
Readonly
children: NE
[]
子节点(直接下级)
Inherited from
classList
Readonly
classList: string
[]
通过addClass添加的样式名称列表
Inherited from
className
Readonly
className: string
Overrides
NE.className
data
Optional
data: any
通常存放业务含义的数据
为了安全考虑,防止与对象属性冲突,用户最好使用该对象 用户附加到该对象的自定义属性
Since
2.4.0
Inherited from
deep
deep: number
层级深度, Layer为0,下面第一层子节点为1,依次类推
只读
Inherited from
destroyed
Readonly
destroyed: boolean
是否已经被销毁
Inherited from
draggable
draggable: boolean
是否可拖拽
Inherited from
dropAllowed
dropAllowed: boolean
是否可以作为拖拽目标
Since
2.4.0
Inherited from
endArrow
Optional
endArrow: Node
结束箭头对象
id
Optional
id: string
| number
id, 标识,由开发人员控制和设计
Inherited from
inLinks
Readonly
inLinks: Link
[]
所有以本对象为结束点的Link对象数组
Inherited from
isLayer
Optional
Readonly
isLayer: boolean
是否是Layer对象, 可以使用 instanceof 替代
Inherited from
isNode
Readonly
isNode: boolean
是否是Node对象, 可以使用 instanceof 替代
Inherited from
isSelected
Readonly
isSelected: boolean
是否被选中了
Inherited from
label
Optional
label: Node
连线中间的的文本对象(Node), 可能为空.
只有第一次为link.text赋值后,label对象就不为空了。
link.text和 node.text 有差异:
- text 在 Node对象中是一个简单的 字符串属性
- text 在 Link对象中,是 get/set函数,来修改和读取link.label对象的text属性
link.label.text = '123'; 的简写就是:link.text = '123';
name
Optional
name: string
名称,可以在编辑时指定,运行时通过名称获取对象的引用
Inherited from
outLinks
Readonly
outLinks: Link
[]
所有以本对象为开始点的Link对象数组
Inherited from
ownerLayer
Optional
ownerLayer: Layer
所属的Layer
Since
2.6.0
Inherited from
parent
Optional
parent: NE
上级对象
Inherited from
pointerEnabled
pointerEnabled: boolean
是否响应(鼠标、触摸屏指针),为false的时候,不响应动作
Since
2.6.0
Inherited from
points
points: PointLike
[]
link相关点坐标集合,link父对象为参考坐标系
selectedStyle
Optional
selectedStyle: NodeSelectedStyleOptionsType
| LinkSelectedStyleOptionsType
选中时的样式,如果不设置将使用默认的
Inherited from
serializeable
serializeable: boolean
是否可序列化,默认true 如果为false,序列化时将跳过该对象
Inherited from
showSelected
showSelected: boolean
是否显示选中的效果,默认显示
Inherited from
style
Readonly
style: Style
样式
Inherited from
title
Optional
title: string
鼠标指向时显示的提示信息,和HTML中dom元素的title属性作用相同
Inherited from
type
Optional
type: string
类型,自定义类型
可用于自定义节点,区分节点类型
比用data属性更方便一点
Inherited from
Accessors
begin
get
begin(): AnchorProxy
连线的开始对象
Returns
beginOffset
set
beginOffset(offset
): void
Parameters
Name | Type |
---|---|
offset | number |
Returns
void
bottom
get
bottom(): number
Since
2.4.0
Returns
number
Inherited from
NE.bottom
set
bottom(v
): void
Parameters
Name | Type |
---|---|
v | number |
Returns
void
Inherited from
NE.bottom
end
get
end(): AnchorProxy
连线的结束对象
Returns
endOffset
set
endOffset(offset
): void
Parameters
Name | Type |
---|---|
offset | number |
Returns
void
height
get
height(): number
Returns
number
Inherited from
NE.height
set
height(v
): void
设置高度
注意:高度不能为0
Parameters
Name | Type |
---|---|
v | number |
Returns
void
Inherited from
NE.height
left
get
left(): number
Since
2.4.0
Returns
number
Inherited from
NE.left
set
left(v
): void
Parameters
Name | Type |
---|---|
v | number |
Returns
void
Inherited from
NE.left
right
get
right(): number
Since
2.4.0
Returns
number
Inherited from
NE.right
set
right(v
): void
Parameters
Name | Type |
---|---|
v | number |
Returns
void
Inherited from
NE.right
rotation
get
rotation(): number
旋转角度 (弧度)
Returns
number
Inherited from
NE.rotation
set
rotation(v
): void
设置旋转角度 (弧度)
Parameters
Name | Type |
---|---|
v | number |
Returns
void
Inherited from
NE.rotation
scaleX
get
scaleX(): number
Returns
number
Inherited from
NE.scaleX
set
scaleX(v
): void
Parameters
Name | Type |
---|---|
v | number |
Returns
void
Inherited from
NE.scaleX
scaleY
get
scaleY(): number
Returns
number
Inherited from
NE.scaleY
set
scaleY(v
): void
Parameters
Name | Type |
---|---|
v | number |
Returns
void
Inherited from
NE.scaleY
skewX
get
skewX(): number
Returns
number
Inherited from
NE.skewX
set
skewX(v
): void
Parameters
Name | Type |
---|---|
v | number |
Returns
void
Inherited from
NE.skewX
skewY
get
skewY(): number
Returns
number
Inherited from
NE.skewY
set
skewY(v
): void
Parameters
Name | Type |
---|---|
v | number |
Returns
void
Inherited from
NE.skewY
text
get
text(): string
文本节点的text别名
link.text和 node.text 有差异:
- text 在 Node对象中是一个简单的 字符串属性
- text 在 Link对象中,是 get/set函数,来修改和读取link.label对象的text属性
link.label.text = '123'; 的简写就是:link.text = '123';
如果link.text为null, link.label 对象也为null.
Returns
string
set
text(v
): void
Parameters
Name | Type |
---|---|
v | string |
Returns
void
top
get
top(): number
Since
2.4.0
Returns
number
Inherited from
NE.top
set
top(v
): void
Parameters
Name | Type |
---|---|
v | number |
Returns
void
Inherited from
NE.top
visible
get
visible(): boolean
Returns
boolean
Inherited from
NE.visible
set
visible(v
): void
Parameters
Name | Type |
---|---|
v | boolean |
Returns
void
Inherited from
NE.visible
width
get
width(): number
Returns
number
Inherited from
NE.width
set
width(v
): void
设置宽度
注意:宽度不能为0
Parameters
Name | Type |
---|---|
v | number |
Returns
void
Inherited from
NE.width
x
get
x(): number
Returns
number
Inherited from
NE.x
set
x(v
): void
Parameters
Name | Type |
---|---|
v | number |
Returns
void
Inherited from
NE.x
y
get
y(): number
Returns
number
Inherited from
NE.y
set
y(v
): void
Parameters
Name | Type |
---|---|
v | number |
Returns
void
Inherited from
NE.y
z
get
z(): number
Returns
number
Inherited from
NE.z
set
z(v
): void
Parameters
Name | Type |
---|---|
v | number |
Returns
void
Inherited from
NE.z
zIndex
get
zIndex(): number
Returns
number
Inherited from
NE.zIndex
set
zIndex(v
): void
设置zInde 相同父节点下的兄弟节点之间才有意义
Parameters
Name | Type |
---|---|
v | number |
Returns
void
Inherited from
NE.zIndex
Methods
addChild
addChild(child
): Link
增加子对象
Parameters
Name | Type |
---|---|
child | NE |
Returns
Overrides
addChildren
addChildren(childs
): Link
一次性增加多个对象, 比单个增加速度快很多,数量越多越明显!
注意:避免互为子节点、重复添加。
Parameters
Name | Type |
---|---|
childs | NE [] |
Returns
Inherited from
addClass
addClass(styleName
): Link
增加一个样式
js
obj.addClass('.focus');
Parameters
Name | Type |
---|---|
styleName | string |
Returns
Inherited from
addEventListener
addEventListener(type
, callback
): void
Parameters
Name | Type |
---|---|
type | string |
callback | Function |
Returns
void
Inherited from
changeParent
changeParent(newParent
): Link
修改父对象但保持屏幕坐标不变
Parameters
Name | Type |
---|---|
newParent | NE |
Returns
Overrides
clearStyles
clearStyles(): Link
清除通过css或setStyles定义的所有样式
Returns
Inherited from
contains
contains(targe
): boolean
方法返回一个布尔值,表示一个对象是否是给定节点的后代,即该节点本身、其直接子节点(children)、子节点的直接子节点等。 备注: 节点包含在自身内部。
Parameters
Name | Type |
---|---|
targe | NE |
Returns
boolean
Inherited from
destroy
destroy(): void
销毁,释放相关的资源引用,一旦销毁,对象不能再被访问,访问就会报错。
注意:销毁后,所有事件回调、动画、定时器等均不能再访问,否则会报错。
Returns
void
Overrides
dispatchEvent
dispatchEvent(event
): void
分发事件
Parameters
Name | Type |
---|---|
event | Event | EventBase |
Returns
void
Inherited from
draw
draw(ctx
): Link
绘制
Parameters
Name | Type |
---|---|
ctx | CanvasRenderingContext2D |
Returns
Overrides
getAABB
getAABB(recursive?
): Rectangle
获取对象在Layer中的aabb包围盒 (包围盒是世界坐标系)
Parameters
Name | Type | Description |
---|---|---|
recursive? | boolean | 是否将子节点包含在内 |
Returns
Inherited from
getAnchor
getAnchor(name
): AnchorProxy
根据名称获取并生成一个 ‘锚点‘
Parameters
Name | Type |
---|---|
name | string |
Returns
getAttribute
getAttribute(name
, defaultValue?
): any
读取某个属性值
js
// 例如:
let v1 = obj.getAttribute('foo'); //如果foo属性不存在,则返回undefined
let v2 = obj.getAttribute('bar', 123); //如果bar属性不存在,则返回123
Parameters
Name | Type | Description |
---|---|---|
name | string | |
defaultValue? | any | 如果属性值为空时的默认替代 |
Returns
any
Inherited from
getBeginArrow
getBeginArrow(): Node
获取开始箭头对象
Returns
getBeginPoint
getBeginPoint(): PointLike
获取连线的开始点坐标
Returns
getChildren
getChildren(): NE
[]
获取所有子对象
Returns
NE
[]
Inherited from
getComputedStyle
getComputedStyle(): Style
获取:主题、自定义样式类、css方法三者层叠后的样式结果
(只读,不要修改返回的对象)
Returns
Inherited from
getEndArrow
getEndArrow(): Node
获取结束箭头对象
Returns
getEndPoint
getEndPoint(): PointLike
获取连线的结束点坐标
Returns
getInLinks
getInLinks(): Link
[]
Returns
Link
[]
Overrides
getLabel
getLabel(): Node
Returns
getLinks
getLinks(): Link
[]
获取所有连接到本对象的Link
Returns
Link
[]
Inherited from
getLocalPoint
getLocalPoint(t
, segIndex?
): PointLike
获取对象上某一点(本地坐标系)
Parameters
Name | Type | Description |
---|---|---|
t | number | [0-1] 在线段上的比例 |
segIndex? | number | 线段索引(Node是矩形,有4条线段,索引:[0-3])可选项 |
Returns
Inherited from
getOutLinks
getOutLinks(): Link
[]
Returns
Link
[]
Overrides
getPoint
getPoint(t
, segIndex?
): PointLike
获取对象上某一点
Parameters
Name | Type | Description |
---|---|---|
t | number | [0-1] 在线段上的比例 |
segIndex? | number | 线段索引(矩形,有4条线段,索引:[0-3])可选项 |
Returns
Inherited from
getPoints
getPoints(): PointLike
[]
Returns
getRoot
getRoot(): Link
获取'root'对象, 沿着parent一直向上追溯 , 直到parent为null或Layer对象结束
Returns
Inherited from
getSegmentAnchor
getSegmentAnchor(t
, segIndex
): AnchorProxy
获取并生成线段上某个位置的 ’锚点’
Parameters
Name | Type |
---|---|
t | number |
segIndex | number |
Returns
getSegmentCount
getSegmentCount(): number
获取连线段数量
Returns
number
getShape
getShape(): Shape
获取形状对象
Returns
Inherited from
getStyle
getStyle(name
): any
读取某个样式的值
Parameters
Name | Type |
---|---|
name | string |
Returns
any
Inherited from
getWorldTransform
getWorldTransform(): Transform
获取世界坐标系变换
Returns
Transform
Inherited from
hasChild
hasChild(child
): boolean
是否拥有某个下级子对象
Parameters
Name | Type |
---|---|
child | NE |
Returns
boolean
Inherited from
hasChildren
hasChildren(): boolean
是否拥有子对象
Returns
boolean
Inherited from
hasClass
hasClass(styleName
): boolean
检测是否拥有某个样式类
js
node.hasClass('.focus');
Since
2.4.0
Parameters
Name | Type |
---|---|
styleName | string |
Returns
boolean
Inherited from
hasListener
hasListener(type
): boolean
是否有该类型的监听
Parameters
Name | Type |
---|---|
type | string |
Returns
boolean
Inherited from
hide
hide(): Link
隐藏
Returns
Inherited from
hideAllChildren
hideAllChildren(): Link
隐藏所有下级节点
Returns
Inherited from
hitTest
hitTest(x
, y
): boolean
Parameters
Name | Type |
---|---|
x | number |
y | number |
Returns
boolean
isConnected
isConnected(): boolean
是否被任意Link连接到
Since
2.4.0
Returns
boolean
Inherited from
isVisible
isVisible(): boolean
判断是否可见
Returns
boolean
Inherited from
localToWorldXY
localToWorldXY(x
, y
): Object
将一个本地坐标转到世界坐标系
Since
2.5.0
Parameters
Name | Type |
---|---|
x | number |
y | number |
Returns
Object
Name | Type |
---|---|
x | number |
y | number |
Inherited from
markDirty
markDirty(): void
标记矩阵脏, 需要重新计算触发重绘
Returns
void
Inherited from
pickable
pickable(): boolean
是否可被拾取到,默认返回:pointerEnabled 属性
js
pickable() {
return this.pointerEnabled;
}
Returns
boolean
Inherited from
querySelector
querySelector(querySelector
): NE
功能类似querySelectorAll,但只返回第一个满足条件的对象或者null
Parameters
Name | Type |
---|---|
querySelector | string | (child : Node | Link ) => boolean |
Returns
Inherited from
querySelectorAll
querySelectorAll(querySelector?
): NE
[]
对象选择器
语法兼容DOM的Selector API标准(并不支持标准里的所有语法)
支持的语法形式如下:
js
//obj.querySelector(类名称), 例如:
let ellipseNodes = layer.querySelectorAll('EllipseNode');
let links = layer.querySelector('Link');
//obj.querySelector(样式名称),例如:
let serverNodes = layer.querySelectorAll('.server');
let activedObjs = layer.querySelectorAll('.active');
let arr = layer.querySelectorAll(obj => obj.x > 20 && obj.y < 100);
//obj.querySelector(ID);
let obj = layer.querySelectorAll('#123')[0];
//obj.querySelector([属性名称=""]);
let arr = layer.querySelectorAll('[text="abc"]');
let arr2 = layer.querySelectorAll('[draggable=true]');
// obj.querySelector(类名称|样式名称[属性名称=""]);
let obj = layer.querySelector('TextNode[x<=-200]');
let obj2 = layer.querySelector('.server[text="X86"]');
Parameters
Name | Type |
---|---|
querySelector? | string | (child : Node | Link ) => boolean |
Returns
NE
[]
Inherited from
removeAllChildren
removeAllChildren(): Link
移除所有子对象
Returns
Inherited from
removeAllClass
removeAllClass(): Link
移除所有通过addClass添加的样式
js
obj.removeAllClass();
Returns
Inherited from
removeAttribute
removeAttribute(name
): void
移除一个属性
js
// 例如:
obj.removeAttribute('foo');
Parameters
Name | Type |
---|---|
name | string |
Returns
void
Inherited from
removeChild
removeChild(child
): Link
移除一个子对象
Parameters
Name | Type |
---|---|
child | NE |
Returns
Inherited from
removeChildren
removeChildren(childs
): Link
Parameters
Name | Type |
---|---|
childs | NE [] |
Returns
Inherited from
removeClass
removeClass(styleName
): void
移除一个样式
js
obj.removeClass('.focus');
Parameters
Name | Type |
---|---|
styleName | string |
Returns
void
Inherited from
removeEventListener
removeEventListener(type
, callback
): void
Parameters
Name | Type |
---|---|
type | string |
callback | Function |
Returns
void
Inherited from
removeFromParent
removeFromParent(): Link
从父级移除, 并断开连接
Returns
Overrides
rotate
rotate(angle
): Link
Parameters
Name | Type |
---|---|
angle | number |
Returns
Inherited from
scale
scale(x
, y
): Link
Parameters
Name | Type |
---|---|
x | number |
y | number |
Returns
Inherited from
setAttribute
setAttribute(name
, value
): void
设置自定义属性
Parameters
Name | Type |
---|---|
name | string |
value | any |
Returns
void
Inherited from
setAttributes
setAttributes(attrs
): Link
一次性设置多个属性
js
// 一次性设置多个属性
obj.setAttributes({
foo: 'abc',
bar: false
});
Parameters
Name | Type |
---|---|
attrs | string | { [key: string] : any ; } |
Returns
Inherited from
setBegin
setBegin(linkTarget
, positionName?
): void
设置连线的开始点
Parameters
Name | Type | Description |
---|---|---|
linkTarget | LinkTarget | 连接对象 |
positionName? | ConnectToNodeAnchorType | ConnectToLinkAnchorType | 端点 |
Returns
void
setBeginArrow
setBeginArrow(node
): Link
设置开始端的箭头
Parameters
Name | Type |
---|---|
node | Node |
Returns
setEnd
setEnd(linkTarget
, positionName?
): void
设置连线的结束点
Parameters
Name | Type | Description |
---|---|---|
linkTarget | LinkTarget | 连接对象 |
positionName? | ConnectToNodeAnchorType | ConnectToLinkAnchorType | 端点 |
Returns
void
setEndArrow
setEndArrow(node
): Link
设置结束端的箭头
Parameters
Name | Type |
---|---|
node | Node |
Returns
setLabel
setLabel(textOrNode
): Node
| Link
设置文本标签
Parameters
Name | Type | Description |
---|---|---|
textOrNode | string | Node | 文字或者Node对象 |
Returns
setStyle
setStyle(styleName
, value
): Link
设置某一个样式
Parameters
Name | Type |
---|---|
styleName | StyleKeyType |
value | any |
Returns
Inherited from
setStyles
setStyles(styles
): Link
背景和边框的设置语法参考css样式, 图形绘制的语法使用cavnas属性设置,如下:
js
node.setStyles({
// 用类似css语法设置节点的:边框、字体、背景 的属性
border: '10px gray',
borderRadius: 10,
font: 'bold 20px serif',
color: 'gray',
backgroundColor: "rgba(128,128,128,0.2)",
// 内边距(边框和图形的间距)
padding: 10,
// 用Canvas绘图属性来设置节点内图形的:填充、画笔粗细、颜色、字体位置
strokeStyle: 'gray',
fillStyle: 'rgba(0,0,255,0.2)',
lineWidth: 3,
textPosition: 'center',
textBaseline: 'middle',
});
Parameters
Name | Type |
---|---|
styles | PartStyleOptionType |
Returns
Inherited from
setZIndex
setZIndex(index
): void
设置zIndex
当两个同⽗元素z-index相同时,后⾯的元素显⽰在上⾯
Parameters
Name | Type | Description |
---|---|---|
index | number | 建议范围 [1, 999] |
Returns
void
Inherited from
show
show(): Link
显示
Returns
Inherited from
showAllChildren
showAllChildren(): Link
显示所有下级节点
Returns
Inherited from
toJSON
toJSON(): any
Returns
any
Inherited from
translate
translate(x
, y
): Link
Parameters
Name | Type |
---|---|
x | number |
y | number |
Returns
Inherited from
translateWith
translateWith(dx
, dy
): Link
增量式平移
Parameters
Name | Type |
---|---|
dx | number |
dy | number |
Returns
Overrides
unlink
unlink(): void
断开开始和
Returns
void
unlinkBegin
unlinkBegin(): void
断开开始连接
Returns
void
unlinkEnd
unlinkEnd(): void
断开结束连接
Returns
void
update
update(): void
请求更新画面
Returns
void
Inherited from
updateMatrix
updateMatrix(): Link
Returns
Inherited from
updateZIndex
updateZIndex(): Link
更新直接下级子对象的zIndex
Returns
Inherited from
worldToLocalXY
worldToLocalXY(x
, y
): Object
将一个世界坐标转到本地坐标系
Since
2.6.0
Parameters
Name | Type |
---|---|
x | number |
y | number |
Returns
Object
Name | Type |
---|---|
x | number |
y | number |