From: etimberg Date: Sun, 25 Jun 2017 13:06:22 +0000 (-0400) Subject: When all datasets are hidden, the linear scale defaults to a range of 0 - 1. X-Git-Tag: v2.7.0~1^2~72 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ccb2898539af6f79108ce22e8b276a1498c3bee2;p=thirdparty%2FChart.js.git When all datasets are hidden, the linear scale defaults to a range of 0 - 1. If `ticks.min` was set this would not set the range correctly. Added a test to cover this case as well --- diff --git a/src/scales/scale.linear.js b/src/scales/scale.linear.js index da7c58cd1..c9a6af41e 100644 --- a/src/scales/scale.linear.js +++ b/src/scales/scale.linear.js @@ -124,8 +124,8 @@ module.exports = function(Chart) { }); } - me.min = isFinite(me.min) ? me.min : DEFAULT_MIN; - me.max = isFinite(me.max) ? me.max : DEFAULT_MAX; + me.min = isFinite(me.min) && !isNaN(me.min) ? me.min : DEFAULT_MIN; + me.max = isFinite(me.max) && !isNaN(me.max) ? me.max : DEFAULT_MAX; // Common base implementation to handle ticks.min, ticks.max, ticks.beginAtZero this.handleTickRangeOptions(); diff --git a/src/scales/scale.linearbase.js b/src/scales/scale.linearbase.js index dba0a6f09..28cde52d6 100644 --- a/src/scales/scale.linearbase.js +++ b/src/scales/scale.linearbase.js @@ -27,6 +27,9 @@ module.exports = function(Chart) { } } + var setMin = tickOpts.min !== undefined || tickOpts.suggestedMin !== undefined; + var setMax = tickOpts.max !== undefined || tickOpts.suggestedMax !== undefined; + if (tickOpts.min !== undefined) { me.min = tickOpts.min; } else if (tickOpts.suggestedMin !== undefined) { @@ -47,6 +50,20 @@ module.exports = function(Chart) { } } + if (setMin !== setMax) { + // We set the min or the max but not both. + // So ensure that our range is good + // Inverted or 0 length range can happen when + // ticks.min is set, and no datasets are visible + if (me.min >= me.max) { + if (setMin) { + me.max = me.min + 1; + } else { + me.min = me.max - 1; + } + } + } + if (me.min === me.max) { me.max++; diff --git a/test/specs/scale.linear.tests.js b/test/specs/scale.linear.tests.js index 2a80c99a2..5b37a0c11 100644 --- a/test/specs/scale.linear.tests.js +++ b/test/specs/scale.linear.tests.js @@ -877,4 +877,33 @@ describe('Linear Scale', function() { expect(chart.scales['x-axis-0'].min).toEqual(0); expect(chart.scales['x-axis-0'].max).toEqual(1); }); + + it('max and min value should be valid when min is set and all datasets are hidden', function() { + var barData = { + labels: ['S1', 'S2', 'S3'], + datasets: [{ + label: 'dataset 1', + backgroundColor: '#382765', + data: [2500, 2000, 1500], + hidden: true, + }] + }; + + var chart = window.acquireChart({ + type: 'horizontalBar', + data: barData, + options: { + scales: { + xAxes: [{ + ticks: { + min: 20 + } + }] + } + } + }); + + expect(chart.scales['x-axis-0'].min).toEqual(20); + expect(chart.scales['x-axis-0'].max).toEqual(21); + }); });