highcharts
Version:
JavaScript charting framework
128 lines (127 loc) • 3.45 kB
JavaScript
/* *
*
* (c) 2010-2025 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 OHLCPoint from './OHLCPoint.js';
import OHLCSeriesDefaults from './OHLCSeriesDefaults.js';
import SeriesRegistry from '../../Core/Series/SeriesRegistry.js';
const { hlc: HLCSeries } = SeriesRegistry.seriesTypes;
import U from '../../Core/Utilities.js';
const { addEvent, crisp, extend, merge, pushUnique } = U;
/* *
*
* Functions
*
* */
/**
* @private
*/
function onSeriesAfterSetOptions(e) {
const options = e.options, dataGrouping = options.dataGrouping;
if (dataGrouping &&
options.useOhlcData &&
options.id !== 'highcharts-navigator-series') {
dataGrouping.approximation = 'ohlc';
}
}
/**
* Add useOhlcData option
* @private
*/
function onSeriesInit(eventOptions) {
// eslint-disable-next-line no-invalid-this
const series = this, options = eventOptions.options;
if (options.useOhlcData &&
options.id !== 'highcharts-navigator-series') {
extend(series, {
pointValKey: OHLCSeries.prototype.pointValKey,
// Keys: ohlcProto.keys, // @todo potentially nonsense
pointArrayMap: OHLCSeries.prototype.pointArrayMap,
toYData: OHLCSeries.prototype.toYData
});
}
}
/* *
*
* Class
*
* */
/**
* The ohlc series type.
*
* @private
* @class
* @name Highcharts.seriesTypes.ohlc
*
* @augments Highcharts.Series
*/
class OHLCSeries extends HLCSeries {
/* *
*
* Static Functions
*
* */
static compose(SeriesClass, ..._args) {
if (pushUnique(composed, 'OHLCSeries')) {
addEvent(SeriesClass, 'afterSetOptions', onSeriesAfterSetOptions);
addEvent(SeriesClass, 'init', onSeriesInit);
}
}
/* *
*
* Functions
*
* */
getPointPath(point, graphic) {
const path = super.getPointPath(point, graphic), strokeWidth = graphic.strokeWidth(), crispX = crisp(point.plotX || 0, strokeWidth), halfWidth = Math.round(point.shapeArgs.width / 2);
if (point.open !== null) {
const plotOpen = crisp(point.plotOpen, strokeWidth);
path.push(['M', crispX, plotOpen], ['L', crispX - halfWidth, plotOpen]);
super.extendStem(path, strokeWidth / 2, plotOpen);
}
return path;
}
/**
* Postprocess mapping between options and SVG attributes
* @private
*/
pointAttribs(point, state) {
const attribs = super.pointAttribs.call(this, point, state), options = this.options;
delete attribs.fill;
if (!point.options.color &&
options.upColor &&
point.open < point.close) {
attribs.stroke = options.upColor;
}
return attribs;
}
toYData(point) {
// Return a plain array for speedy calculation
return [point.open, point.high, point.low, point.close];
}
}
/* *
*
* Static Properties
*
* */
OHLCSeries.defaultOptions = merge(HLCSeries.defaultOptions, OHLCSeriesDefaults);
extend(OHLCSeries.prototype, {
pointClass: OHLCPoint,
pointArrayMap: ['open', 'high', 'low', 'close']
});
SeriesRegistry.registerSeriesType('ohlc', OHLCSeries);
/* *
*
* Default Export
*
* */
export default OHLCSeries;