(
elOption: AxisPointerElementOptions,
axisModel: AxisBaseModel,
axisPointerModel: AxisPointerModel,
api: ExtensionAPI,
labelPos: {
align?: ZRTextAlign
verticalAlign?: ZRTextVerticalAlign
position: number[]
}
)
| 73 | * @param {Function} labelPos {align, verticalAlign, position} |
| 74 | */ |
| 75 | export function buildLabelElOption( |
| 76 | elOption: AxisPointerElementOptions, |
| 77 | axisModel: AxisBaseModel, |
| 78 | axisPointerModel: AxisPointerModel, |
| 79 | api: ExtensionAPI, |
| 80 | labelPos: { |
| 81 | align?: ZRTextAlign |
| 82 | verticalAlign?: ZRTextVerticalAlign |
| 83 | position: number[] |
| 84 | } |
| 85 | ) { |
| 86 | const value = axisPointerModel.get('value'); |
| 87 | const text = getValueLabel( |
| 88 | value, axisModel.axis, axisModel.ecModel, |
| 89 | axisPointerModel.get('seriesDataIndices'), |
| 90 | { |
| 91 | precision: axisPointerModel.get(['label', 'precision']), |
| 92 | formatter: axisPointerModel.get(['label', 'formatter']) |
| 93 | } |
| 94 | ); |
| 95 | const labelModel = axisPointerModel.getModel('label'); |
| 96 | const paddings = formatUtil.normalizeCssArray(labelModel.get('padding') || 0); |
| 97 | |
| 98 | const font = labelModel.getFont(); |
| 99 | const textRect = textContain.getBoundingRect(text, font); |
| 100 | |
| 101 | const position = labelPos.position; |
| 102 | const width = textRect.width + paddings[1] + paddings[3]; |
| 103 | const height = textRect.height + paddings[0] + paddings[2]; |
| 104 | |
| 105 | // Adjust by align. |
| 106 | const align = labelPos.align; |
| 107 | align === 'right' && (position[0] -= width); |
| 108 | align === 'center' && (position[0] -= width / 2); |
| 109 | const verticalAlign = labelPos.verticalAlign; |
| 110 | verticalAlign === 'bottom' && (position[1] -= height); |
| 111 | verticalAlign === 'middle' && (position[1] -= height / 2); |
| 112 | |
| 113 | // Not overflow ec container |
| 114 | confineInContainer(position, width, height, api); |
| 115 | |
| 116 | let bgColor = labelModel.get('backgroundColor') as ZRColor; |
| 117 | if (!bgColor || bgColor === 'auto') { |
| 118 | bgColor = axisModel.get(['axisLine', 'lineStyle', 'color']); |
| 119 | } |
| 120 | |
| 121 | elOption.label = { |
| 122 | // shape: {x: 0, y: 0, width: width, height: height, r: labelModel.get('borderRadius')}, |
| 123 | x: position[0], |
| 124 | y: position[1], |
| 125 | style: createTextStyle(labelModel, { |
| 126 | text: text, |
| 127 | font: font, |
| 128 | fill: labelModel.getTextColor(), |
| 129 | padding: paddings, |
| 130 | backgroundColor: bgColor as ColorString |
| 131 | }), |
| 132 | // Label should be over axisPointer. |
no test coverage detected
searching dependent graphs…