]> git.ipfire.org Git - thirdparty/Chart.js.git/commitdiff
Ignore invalid log scale min and max (#6058)
authorBen McCann <322311+benmccann@users.noreply.github.com>
Sun, 24 Feb 2019 09:59:21 +0000 (01:59 -0800)
committerSimon Brunel <simonbrunel@users.noreply.github.com>
Sun, 24 Feb 2019 09:59:21 +0000 (10:59 +0100)
src/scales/scale.logarithmic.js
test/specs/scale.logarithmic.tests.js

index e52f714a81fe1fc5715c6566fe86c5d27210ac29..06b206df27ce729e80270ff9a2a4b5531930c23d 100644 (file)
@@ -62,6 +62,11 @@ var defaultConfig = {
        }
 };
 
+// TODO(v3): change this to positiveOrDefault
+function nonNegativeOrDefault(value, defaultValue) {
+       return helpers.isFinite(value) && value >= 0 ? value : defaultValue;
+}
+
 module.exports = Scale.extend({
        determineDataLimits: function() {
                var me = this;
@@ -174,8 +179,8 @@ module.exports = Scale.extend({
                var DEFAULT_MIN = 1;
                var DEFAULT_MAX = 10;
 
-               me.min = valueOrDefault(tickOpts.min, me.min);
-               me.max = valueOrDefault(tickOpts.max, me.max);
+               me.min = nonNegativeOrDefault(tickOpts.min, me.min);
+               me.max = nonNegativeOrDefault(tickOpts.max, me.max);
 
                if (me.min === me.max) {
                        if (me.min !== 0 && me.min !== null) {
@@ -211,8 +216,8 @@ module.exports = Scale.extend({
                var reverse = !me.isHorizontal();
 
                var generationOptions = {
-                       min: tickOpts.min,
-                       max: tickOpts.max
+                       min: nonNegativeOrDefault(tickOpts.min),
+                       max: nonNegativeOrDefault(tickOpts.max)
                };
                var ticks = me.ticks = generateTicks(generationOptions, me);
 
index cb44f108d36eb3ae2b6b3af1794d49dedfa46e15..dd7c7cce94a6b117304fe7530db0c0d7a8fe18dc 100644 (file)
@@ -477,6 +477,68 @@ describe('Logarithmic Scale tests', function() {
                expect(yScale.ticks[tickCount - 1]).toBe(10);
        });
 
+       it('should ignore negative min and max options', function() {
+               var chart = window.acquireChart({
+                       type: 'bar',
+                       data: {
+                               datasets: [{
+                                       data: [1, 1, 1, 2, 1, 0]
+                               }],
+                               labels: []
+                       },
+                       options: {
+                               scales: {
+                                       yAxes: [{
+                                               id: 'yScale',
+                                               type: 'logarithmic',
+                                               ticks: {
+                                                       min: -10,
+                                                       max: -1010,
+                                                       callback: function(value) {
+                                                               return value;
+                                                       }
+                                               }
+                                       }]
+                               }
+                       }
+               });
+
+               var yScale = chart.scales.yScale;
+               expect(yScale.min).toBe(0);
+               expect(yScale.max).toBe(2);
+       });
+
+       it('should ignore invalid min and max options', function() {
+               var chart = window.acquireChart({
+                       type: 'bar',
+                       data: {
+                               datasets: [{
+                                       data: [1, 1, 1, 2, 1, 0]
+                               }],
+                               labels: []
+                       },
+                       options: {
+                               scales: {
+                                       yAxes: [{
+                                               id: 'yScale',
+                                               type: 'logarithmic',
+                                               ticks: {
+                                                       min: '',
+                                                       max: false,
+                                                       callback: function(value) {
+                                                               return value;
+                                                       }
+                                               }
+                                       }]
+                               }
+                       }
+               });
+
+               var yScale = chart.scales.yScale;
+               expect(yScale.min).toBe(0);
+               expect(yScale.max).toBe(2);
+       });
+
        it('should generate tick marks', function() {
                var chart = window.acquireChart({
                        type: 'bar',