UNPKG

highcharts

Version:
144 lines (143 loc) 5.51 kB
/* * * * (c) 2010-2025 Torstein Honsi * * License: www.highcharts.com/license * * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!! * * */ 'use strict'; import CandlestickSeriesDefaults from './CandlestickSeriesDefaults.js'; import SeriesRegistry from '../../Core/Series/SeriesRegistry.js'; const { column: ColumnSeries, ohlc: OHLCSeries } = SeriesRegistry.seriesTypes; import U from '../../Core/Utilities.js'; const { crisp, merge } = U; /* * * * Class * * */ /** * The candlestick series type. * * @private * @class * @name Highcharts.seriesTypes.candlestick * * @augments Highcharts.seriesTypes.ohlc */ class CandlestickSeries extends OHLCSeries { /* * * * Functions * * */ /** * Postprocess mapping between options and SVG attributes * * @private * @function Highcharts.seriesTypes.candlestick#pointAttribs */ pointAttribs(point, state) { const attribs = ColumnSeries.prototype.pointAttribs.call(this, point, state), options = this.options, isUp = point.open < point.close, stroke = options.lineColor || this.color, color = point.color || this.color; // (#14826) attribs['stroke-width'] = options.lineWidth; attribs.fill = point.options.color || (isUp ? (options.upColor || color) : color); attribs.stroke = point.options.lineColor || (isUp ? (options.upLineColor || stroke) : stroke); // Select or hover states if (state) { const stateOptions = options.states[state]; attribs.fill = stateOptions.color || attribs.fill; attribs.stroke = stateOptions.lineColor || attribs.stroke; attribs['stroke-width'] = stateOptions.lineWidth || attribs['stroke-width']; } return attribs; } /** * Draw the data points. * * @private * @function Highcharts.seriesTypes.candlestick#drawPoints */ drawPoints() { const series = this, points = series.points, chart = series.chart, reversedYAxis = series.yAxis.reversed; for (const point of points) { let graphic = point.graphic, plotOpen, plotClose, topBox, bottomBox, hasTopWhisker, hasBottomWhisker, crispX, path, halfWidth; const isNew = !graphic; if (typeof point.plotY !== 'undefined') { if (!graphic) { point.graphic = graphic = chart.renderer.path() .add(series.group); } if (!series.chart.styledMode) { graphic .attr(series.pointAttribs(point, (point.selected && 'select'))) // #3897 .shadow(series.options.shadow); } // Crisp vector coordinates const strokeWidth = graphic.strokeWidth(); // #2596: crispX = crisp(point.plotX || 0, strokeWidth); plotOpen = point.plotOpen; plotClose = point.plotClose; topBox = Math.min(plotOpen, plotClose); bottomBox = Math.max(plotOpen, plotClose); halfWidth = Math.round(point.shapeArgs.width / 2); hasTopWhisker = reversedYAxis ? bottomBox !== point.yBottom : Math.round(topBox) !== Math.round(point.plotHigh || 0); hasBottomWhisker = reversedYAxis ? Math.round(topBox) !== Math.round(point.plotHigh || 0) : bottomBox !== point.yBottom; topBox = crisp(topBox, strokeWidth); bottomBox = crisp(bottomBox, strokeWidth); // Create the path. Due to a bug in Chrome 49, the path is // first instantiated with no values, then the values // pushed. For unknown reasons, instantiating the path array // with all the values would lead to a crash when updating // frequently (#5193). path = []; path.push(['M', crispX - halfWidth, bottomBox], ['L', crispX - halfWidth, topBox], ['L', crispX + halfWidth, topBox], ['L', crispX + halfWidth, bottomBox], ['Z'], // Ensure a nice rectangle #2602 ['M', crispX, topBox], [ 'L', // #460, #2094 crispX, hasTopWhisker ? Math.round(reversedYAxis ? point.yBottom : point.plotHigh) : topBox ], ['M', crispX, bottomBox], [ 'L', // #460, #2094 crispX, hasBottomWhisker ? Math.round(reversedYAxis ? point.plotHigh : point.yBottom) : bottomBox ]); graphic[isNew ? 'attr' : 'animate']({ d: path }) .addClass(point.getClassName(), true); } } } } /* * * * Static Properties * * */ CandlestickSeries.defaultOptions = merge(OHLCSeries.defaultOptions, { tooltip: OHLCSeries.defaultOptions.tooltip }, CandlestickSeriesDefaults); SeriesRegistry.registerSeriesType('candlestick', CandlestickSeries); /* * * * Default Export * * */ export default CandlestickSeries;