highcharts
Version:
JavaScript charting framework
117 lines (116 loc) • 3.02 kB
JavaScript
/* *
*
* Highcharts variwide module
*
* (c) 2010-2024 Torstein Honsi
*
* License: www.highcharts.com/license
*
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
*
* */
;
import H from '../../Core/Globals.js';
const { composed } = H;
import U from '../../Core/Utilities.js';
const { addEvent, pushUnique, wrap } = U;
/* *
*
* Functions
*
* */
/**
* @private
*/
function compose(AxisClass, TickClass) {
if (pushUnique(composed, 'Variwide')) {
const tickProto = TickClass.prototype;
addEvent(AxisClass, 'afterDrawCrosshair', onAxisAfterDrawCrosshair);
addEvent(AxisClass, 'afterRender', onAxisAfterRender);
addEvent(TickClass, 'afterGetPosition', onTickAfterGetPosition);
tickProto.postTranslate = tickPostTranslate;
wrap(tickProto, 'getLabelPosition', wrapTickGetLabelPosition);
}
}
/**
* Same width as the category (#8083)
* @private
*/
function onAxisAfterDrawCrosshair(e) {
if (this.variwide && this.cross) {
this.cross.attr('stroke-width', (e.point && e.point.crosshairWidth));
}
}
/**
* On a vertical axis, apply anti-collision logic to the labels.
* @private
*/
function onAxisAfterRender() {
const axis = this;
if (this.variwide) {
this.chart.labelCollectors.push(function () {
return axis.tickPositions
.filter((pos) => !!axis.ticks[pos].label)
.map((pos, i) => {
const label = axis.ticks[pos].label;
label.labelrank = axis.zData[i];
return label;
});
});
}
}
/**
* @private
*/
function onTickAfterGetPosition(e) {
const axis = this.axis, xOrY = axis.horiz ? 'x' : 'y';
if (axis.variwide) {
this[xOrY + 'Orig'] = e.pos[xOrY];
this.postTranslate(e.pos, xOrY, this.pos);
}
}
/**
* @private
*/
function tickPostTranslate(xy, xOrY, index) {
const axis = this.axis;
let pos = xy[xOrY] - axis.pos;
if (!axis.horiz) {
pos = axis.len - pos;
}
pos = axis.series[0].postTranslate(index, pos);
if (!axis.horiz) {
pos = axis.len - pos;
}
xy[xOrY] = axis.pos + pos;
}
/**
* @private
*/
function wrapTickGetLabelPosition(proceed, _x, _y, _label, horiz,
/* eslint-disable @typescript-eslint/no-unused-vars */
_labelOptions, _tickmarkOffset, _index
/* eslint-enable @typescript-eslint/no-unused-vars */
) {
const args = Array.prototype.slice.call(arguments, 1), xOrY = horiz ? 'x' : 'y';
// Replace the x with the original x
if (this.axis.variwide &&
typeof this[xOrY + 'Orig'] === 'number') {
args[horiz ? 0 : 1] = this[xOrY + 'Orig'];
}
const xy = proceed.apply(this, args);
// Post-translate
if (this.axis.variwide && this.axis.categories) {
this.postTranslate(xy, xOrY, this.pos);
}
return xy;
}
/* *
*
* Default Export
*
* */
const VariwideComposition = {
compose
};
export default VariwideComposition;