package.es-modules.Series.Pictorial.PictorialUtilities.js Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of highcharts Show documentation
Show all versions of highcharts Show documentation
JavaScript charting framework
The newest version!
/* *
*
* (c) 2010-2024 Torstein Honsi, Magdalena Gut
*
* License: www.highcharts.com/license
*
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
*
* */
import U from '../../Core/Utilities.js';
const { defined } = U;
/**
*
*/
function rescalePatternFill(element, stackHeight, width, height, borderWidth = 1) {
const fill = element && element.attr('fill'), match = fill && fill.match(/url\(([^)]+)\)/);
if (match) {
const patternPath = document.querySelector(`${match[1]} path`);
if (patternPath) {
let bBox = patternPath.getBBox();
// Firefox (v108/Mac) is unable to detect the bounding box within
// defs. Without this block, the pictorial is not rendered.
if (bBox.width === 0) {
const parent = patternPath.parentElement;
// Temporarily append it to the root
element.renderer.box.appendChild(patternPath);
bBox = patternPath.getBBox();
parent.appendChild(patternPath);
}
let scaleX = 1 / (bBox.width + borderWidth);
const scaleY = stackHeight / height / bBox.height, aspectRatio = bBox.width / bBox.height, pointAspectRatio = width / stackHeight, x = -bBox.width / 2;
if (aspectRatio < pointAspectRatio) {
scaleX = scaleX * aspectRatio / pointAspectRatio;
}
patternPath.setAttribute('stroke-width', borderWidth / (width * scaleX));
patternPath.setAttribute('transform', 'translate(0.5, 0)' +
`scale(${scaleX} ${scaleY}) ` +
`translate(${x + borderWidth * scaleX / 2}, ${-bBox.y})`);
}
}
}
/**
*
*/
function getStackMetrics(yAxis, shape) {
let height = yAxis.len, y = 0;
if (shape && defined(shape.max)) {
y = yAxis.toPixels(shape.max, true);
height = yAxis.len - y;
}
return {
height,
y
};
}
/**
*
*/
function invertShadowGroup(shadowGroup, yAxis) {
const inverted = yAxis.chart.inverted;
if (inverted) {
shadowGroup.attr({
rotation: inverted ? 90 : 0,
scaleX: inverted ? -1 : 1
});
}
}
export default { rescalePatternFill, invertShadowGroup, getStackMetrics };