147 lines
5.0 KiB
JavaScript
147 lines
5.0 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, InfinityLine = Annotation.types.infinityLine;
|
|
/* eslint-disable no-invalid-this, valid-jsdoc */
|
|
var Pitchfork = function () {
|
|
InfinityLine.apply(this, arguments);
|
|
};
|
|
Pitchfork.findEdgePoint = function (point, firstAnglePoint, secondAnglePoint) {
|
|
var angle = Math.atan2(secondAnglePoint.plotY - firstAnglePoint.plotY, secondAnglePoint.plotX - firstAnglePoint.plotX), distance = 1e7;
|
|
return {
|
|
x: point.plotX + distance * Math.cos(angle),
|
|
y: point.plotY + distance * Math.sin(angle)
|
|
};
|
|
};
|
|
Pitchfork.middleLineEdgePoint = function (target) {
|
|
var annotation = target.annotation, points = annotation.points;
|
|
return InfinityLine.findEdgePoint(points[0], new MockPoint(annotation.chart, target, annotation.midPointOptions()));
|
|
};
|
|
var outerLineEdgePoint = function (firstPointIndex) {
|
|
return function (target) {
|
|
var annotation = target.annotation, points = annotation.points;
|
|
return Pitchfork.findEdgePoint(points[firstPointIndex], points[0], new MockPoint(annotation.chart, target, annotation.midPointOptions()));
|
|
};
|
|
};
|
|
Pitchfork.topLineEdgePoint = outerLineEdgePoint(1);
|
|
Pitchfork.bottomLineEdgePoint = outerLineEdgePoint(0);
|
|
H.extendAnnotation(Pitchfork, InfinityLine, {
|
|
midPointOptions: function () {
|
|
var points = this.points;
|
|
return {
|
|
x: (points[1].x + points[2].x) / 2,
|
|
y: (points[1].y + points[2].y) / 2,
|
|
xAxis: points[0].series.xAxis,
|
|
yAxis: points[0].series.yAxis
|
|
};
|
|
},
|
|
addShapes: function () {
|
|
this.addLines();
|
|
this.addBackgrounds();
|
|
},
|
|
addLines: function () {
|
|
this.initShape({
|
|
type: 'path',
|
|
points: [
|
|
this.points[0],
|
|
Pitchfork.middleLineEdgePoint
|
|
]
|
|
}, false);
|
|
this.initShape({
|
|
type: 'path',
|
|
points: [
|
|
this.points[1],
|
|
Pitchfork.topLineEdgePoint
|
|
]
|
|
}, false);
|
|
this.initShape({
|
|
type: 'path',
|
|
points: [
|
|
this.points[2],
|
|
Pitchfork.bottomLineEdgePoint
|
|
]
|
|
}, false);
|
|
},
|
|
addBackgrounds: function () {
|
|
var shapes = this.shapes, typeOptions = this.options.typeOptions;
|
|
var innerBackground = this.initShape(merge(typeOptions.innerBackground, {
|
|
type: 'path',
|
|
points: [
|
|
function (target) {
|
|
var annotation = target.annotation, points = annotation.points, midPointOptions = annotation.midPointOptions();
|
|
return {
|
|
x: (points[1].x + midPointOptions.x) / 2,
|
|
y: (points[1].y + midPointOptions.y) / 2,
|
|
xAxis: midPointOptions.xAxis,
|
|
yAxis: midPointOptions.yAxis
|
|
};
|
|
},
|
|
shapes[1].points[1],
|
|
shapes[2].points[1],
|
|
function (target) {
|
|
var annotation = target.annotation, points = annotation.points, midPointOptions = annotation.midPointOptions();
|
|
return {
|
|
x: (midPointOptions.x + points[2].x) / 2,
|
|
y: (midPointOptions.y + points[2].y) / 2,
|
|
xAxis: midPointOptions.xAxis,
|
|
yAxis: midPointOptions.yAxis
|
|
};
|
|
}
|
|
]
|
|
}));
|
|
var outerBackground = this.initShape(merge(typeOptions.outerBackground, {
|
|
type: 'path',
|
|
points: [
|
|
this.points[1],
|
|
shapes[1].points[1],
|
|
shapes[2].points[1],
|
|
this.points[2]
|
|
]
|
|
}));
|
|
typeOptions.innerBackground = innerBackground.options;
|
|
typeOptions.outerBackground = outerBackground.options;
|
|
}
|
|
},
|
|
/**
|
|
* A pitchfork annotation.
|
|
*
|
|
* @sample highcharts/annotations-advanced/pitchfork/
|
|
* Pitchfork
|
|
*
|
|
* @extends annotations.infinityLine
|
|
* @product highstock
|
|
* @optionparent annotations.pitchfork
|
|
*/
|
|
{
|
|
typeOptions: {
|
|
/**
|
|
* Inner background options.
|
|
*
|
|
* @extends annotations.crookedLine.shapeOptions
|
|
* @excluding height, r, type, width
|
|
*/
|
|
innerBackground: {
|
|
fill: 'rgba(130, 170, 255, 0.4)',
|
|
strokeWidth: 0
|
|
},
|
|
/**
|
|
* Outer background options.
|
|
*
|
|
* @extends annotations.crookedLine.shapeOptions
|
|
* @excluding height, r, type, width
|
|
*/
|
|
outerBackground: {
|
|
fill: 'rgba(156, 229, 161, 0.4)',
|
|
strokeWidth: 0
|
|
}
|
|
}
|
|
});
|
|
Annotation.types.pitchfork = Pitchfork;
|
|
export default Pitchfork;
|