diff --git a/src/elements/element.line.js b/src/elements/element.line.js index e6265a12822..985fa0b24e9 100644 --- a/src/elements/element.line.js +++ b/src/elements/element.line.js @@ -34,17 +34,19 @@ function getLineMethod(options) { return lineTo; } -function pathVars(points, segment, params) { - params = params || {}; +function pathVars(points, segment, params = {}) { const count = points.length; - const start = Math.max(params.start || 0, segment.start); - const end = Math.min(params.end || count - 1, segment.end); + const {start: paramsStart = 0, end: paramsEnd = count - 1} = params; + const {start: segmentStart, end: segmentEnd} = segment; + const start = Math.max(paramsStart, segmentStart); + const end = Math.min(paramsEnd, segmentEnd); + const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd; return { count, start, loop: segment.loop, - ilen: end < start ? count + end - start : end - start + ilen: end < start && !outside ? count + end - start : end - start }; } diff --git a/test/fixtures/controller.line/issue-8902.js b/test/fixtures/controller.line/issue-8902.js new file mode 100644 index 00000000000..cb986380708 --- /dev/null +++ b/test/fixtures/controller.line/issue-8902.js @@ -0,0 +1,30 @@ +module.exports = { + description: 'https://github.com/chartjs/Chart.js/issues/8902', + config: { + type: 'line', + data: { + labels: [1, 2, 3, 4, 5, 6, 7, 8], + datasets: [{ + data: [65, 59, NaN, 48, 56, 57, 40], + borderColor: 'rgb(75, 192, 192)', + }] + }, + options: { + plugins: false, + scales: { + x: { + type: 'linear', + min: 1, + max: 3 + } + } + } + }, + options: { + spriteText: true, + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/controller.line/issue-8902.png b/test/fixtures/controller.line/issue-8902.png new file mode 100644 index 00000000000..c132c579381 Binary files /dev/null and b/test/fixtures/controller.line/issue-8902.png differ