UNPKG

highcharts

Version:
128 lines (127 loc) 3.45 kB
/* * * * (c) 2010-2025 Torstein Honsi * * License: www.highcharts.com/license * * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!! * * */ 'use strict'; 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;