borderDash | Array | `[]` | Default line dash. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash)
borderDashOffset | Number | 0.0 | Default line dash offset. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineDashOffset)
borderJoinStyle | String | 'miter' | Default line join style. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineJoin)
+capBezierPoints | Boolean | true | If true, bezier control points are kept inside the chart. If false, no restriction is enforced.
fill | Boolean | true | If true, the line is filled.
stepped | Boolean | false | If true, the line is shown as a steeped line and 'tension' will be ignored
},
updateBezierControlPoints: function() {
- var meta = this.getMeta();
+ var me = this;
+ var meta = me.getMeta();
+ var area = me.chart.chartArea;
var points = meta.data || [];
var i, ilen, point, model, controlPoints;
+ var needToCap = me.chart.options.elements.line.capBezierPoints;
+ function capIfNecessary(pt, min, max) {
+ return needToCap ? Math.max(Math.min(pt, max), min) : pt;
+ }
+
for (i=0, ilen=points.length; i<ilen; ++i) {
point = points[i];
model = point._model;
meta.dataset._model.tension
);
- model.controlPointPreviousX = controlPoints.previous.x;
- model.controlPointPreviousY = controlPoints.previous.y;
- model.controlPointNextX = controlPoints.next.x;
- model.controlPointNextY = controlPoints.next.y;
+ model.controlPointPreviousX = capIfNecessary(controlPoints.previous.x, area.left, area.right);
+ model.controlPointPreviousY = capIfNecessary(controlPoints.previous.y, area.top, area.bottom);
+ model.controlPointNextX = capIfNecessary(controlPoints.next.x, area.left, area.right);
+ model.controlPointNextY = capIfNecessary(controlPoints.next.y, area.top, area.bottom);
}
},