/* * * * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!! * * */ 'use strict'; import H from '../../parts/Globals.js'; import U from '../../parts/Utilities.js'; var merge = U.merge; var Annotation = H.Annotation, MockPoint = Annotation.MockPoint, ControlPoint = Annotation.ControlPoint; /* eslint-disable no-invalid-this, valid-jsdoc */ var CrookedLine = function () { Annotation.apply(this, arguments); }; H.extendAnnotation(CrookedLine, null, { /** * Overrides default setter to get axes from typeOptions. * @private */ setClipAxes: function () { this.clipXAxis = this.chart.xAxis[this.options.typeOptions.xAxis]; this.clipYAxis = this.chart.yAxis[this.options.typeOptions.yAxis]; }, getPointsOptions: function () { var typeOptions = this.options.typeOptions; return typeOptions.points.map(function (pointOptions) { pointOptions.xAxis = typeOptions.xAxis; pointOptions.yAxis = typeOptions.yAxis; return pointOptions; }); }, getControlPointsOptions: function () { return this.getPointsOptions(); }, addControlPoints: function () { this.getControlPointsOptions().forEach(function (pointOptions, i) { var controlPoint = new ControlPoint(this.chart, this, merge(this.options.controlPointOptions, pointOptions.controlPoint), i); this.controlPoints.push(controlPoint); pointOptions.controlPoint = controlPoint.options; }, this); }, addShapes: function () { var typeOptions = this.options.typeOptions, shape = this.initShape(merge(typeOptions.line, { type: 'path', points: this.points.map(function (_point, i) { return function (target) { return target.annotation.points[i]; }; }) }), false); typeOptions.line = shape.options; } }, /** * A crooked line annotation. * * @sample highcharts/annotations-advanced/crooked-line/ * Crooked line * * @product highstock * @optionparent annotations.crookedLine */ { /** * @extends annotations.labelOptions * @apioption annotations.crookedLine.labelOptions */ /** * @extends annotations.shapeOptions * @apioption annotations.crookedLine.shapeOptions */ /** * Additional options for an annotation with the type. */ typeOptions: { /** * This number defines which xAxis the point is connected to. * It refers to either the axis id or the index of the axis * in the xAxis array. */ xAxis: 0, /** * This number defines which yAxis the point is connected to. * It refers to either the axis id or the index of the axis * in the xAxis array. */ yAxis: 0, /** * @type {Array<*>} * @apioption annotations.crookedLine.typeOptions.points */ /** * The x position of the point. * * @type {number} * @apioption annotations.crookedLine.typeOptions.points.x */ /** * The y position of the point. * * @type {number} * @apioption annotations.crookedLine.typeOptions.points.y */ /** * @type {number} * @excluding positioner, events * @apioption annotations.crookedLine.typeOptions.points.controlPoint */ /** * Line options. * * @excluding height, point, points, r, type, width */ line: { fill: 'none' } }, /** * @excluding positioner, events */ controlPointOptions: { positioner: function (target) { var graphic = this.graphic, xy = MockPoint.pointToPixels(target.points[this.index]); return { x: xy.x - graphic.width / 2, y: xy.y - graphic.height / 2 }; }, events: { drag: function (e, target) { if (target.chart.isInsidePlot(e.chartX - target.chart.plotLeft, e.chartY - target.chart.plotTop)) { var translation = this.mouseMoveToTranslation(e); target.translatePoint(translation.x, translation.y, this.index); // Update options: target.options.typeOptions.points[this.index].x = target.points[this.index].x; target.options.typeOptions.points[this.index].y = target.points[this.index].y; target.redraw(false); } } } } }); Annotation.types.crookedLine = CrookedLine; export default CrookedLine;