82 lines
2.4 KiB
JavaScript
Executable file
82 lines
2.4 KiB
JavaScript
Executable file
"use strict";
|
|
|
|
module.exports = function(Chart, moment) {
|
|
|
|
var helpers = Chart.helpers;
|
|
|
|
Chart.defaults.global.elements.arc = {
|
|
backgroundColor: Chart.defaults.global.defaultColor,
|
|
borderColor: "#fff",
|
|
borderWidth: 2
|
|
};
|
|
|
|
Chart.elements.Arc = Chart.Element.extend({
|
|
inLabelRange: function(mouseX) {
|
|
var vm = this._view;
|
|
|
|
if (vm) {
|
|
return (Math.pow(mouseX - vm.x, 2) < Math.pow(vm.radius + vm.hoverRadius, 2));
|
|
} else {
|
|
return false;
|
|
}
|
|
},
|
|
inRange: function(chartX, chartY) {
|
|
|
|
var vm = this._view;
|
|
|
|
if (vm) {
|
|
var pointRelativePosition = helpers.getAngleFromPoint(vm, {
|
|
x: chartX,
|
|
y: chartY
|
|
});
|
|
|
|
// Put into the range of (-PI/2, 3PI/2]
|
|
var startAngle = vm.startAngle < (-0.5 * Math.PI) ? vm.startAngle + (2.0 * Math.PI) : vm.startAngle > (1.5 * Math.PI) ? vm.startAngle - (2.0 * Math.PI) : vm.startAngle;
|
|
var endAngle = vm.endAngle < (-0.5 * Math.PI) ? vm.endAngle + (2.0 * Math.PI) : vm.endAngle > (1.5 * Math.PI) ? vm.endAngle - (2.0 * Math.PI) : vm.endAngle;
|
|
|
|
//Check if within the range of the open/close angle
|
|
var betweenAngles = (pointRelativePosition.angle >= startAngle && pointRelativePosition.angle <= endAngle),
|
|
withinRadius = (pointRelativePosition.distance >= vm.innerRadius && pointRelativePosition.distance <= vm.outerRadius);
|
|
|
|
return (betweenAngles && withinRadius);
|
|
} else {
|
|
return false;
|
|
}
|
|
},
|
|
tooltipPosition: function() {
|
|
var vm = this._view;
|
|
|
|
var centreAngle = vm.startAngle + ((vm.endAngle - vm.startAngle) / 2),
|
|
rangeFromCentre = (vm.outerRadius - vm.innerRadius) / 2 + vm.innerRadius;
|
|
return {
|
|
x: vm.x + (Math.cos(centreAngle) * rangeFromCentre),
|
|
y: vm.y + (Math.sin(centreAngle) * rangeFromCentre)
|
|
};
|
|
},
|
|
draw: function() {
|
|
|
|
var ctx = this._chart.ctx;
|
|
var vm = this._view;
|
|
|
|
ctx.beginPath();
|
|
|
|
ctx.arc(vm.x, vm.y, vm.outerRadius, vm.startAngle, vm.endAngle);
|
|
|
|
ctx.arc(vm.x, vm.y, vm.innerRadius, vm.endAngle, vm.startAngle, true);
|
|
|
|
ctx.closePath();
|
|
ctx.strokeStyle = vm.borderColor;
|
|
ctx.lineWidth = vm.borderWidth;
|
|
|
|
ctx.fillStyle = vm.backgroundColor;
|
|
|
|
ctx.fill();
|
|
ctx.lineJoin = 'bevel';
|
|
|
|
if (vm.borderWidth) {
|
|
ctx.stroke();
|
|
}
|
|
}
|
|
});
|
|
};
|