145 lines
4.7 KiB
JavaScript
145 lines
4.7 KiB
JavaScript
/* *
|
|
*
|
|
* !!!!!!! 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;
|