Skip to content

Commit 06bc839

Browse files
benmccannsimonbrunel
authored andcommitted
Ignore invalid log scale min and max (chartjs#6058)
1 parent ae23fbf commit 06bc839

File tree

2 files changed

+71
-4
lines changed

2 files changed

+71
-4
lines changed

src/scales/scale.logarithmic.js

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,11 @@ var defaultConfig = {
6262
}
6363
};
6464

65+
// TODO(v3): change this to positiveOrDefault
66+
function nonNegativeOrDefault(value, defaultValue) {
67+
return helpers.isFinite(value) && value >= 0 ? value : defaultValue;
68+
}
69+
6570
module.exports = Scale.extend({
6671
determineDataLimits: function() {
6772
var me = this;
@@ -174,8 +179,8 @@ module.exports = Scale.extend({
174179
var DEFAULT_MIN = 1;
175180
var DEFAULT_MAX = 10;
176181

177-
me.min = valueOrDefault(tickOpts.min, me.min);
178-
me.max = valueOrDefault(tickOpts.max, me.max);
182+
me.min = nonNegativeOrDefault(tickOpts.min, me.min);
183+
me.max = nonNegativeOrDefault(tickOpts.max, me.max);
179184

180185
if (me.min === me.max) {
181186
if (me.min !== 0 && me.min !== null) {
@@ -211,8 +216,8 @@ module.exports = Scale.extend({
211216
var reverse = !me.isHorizontal();
212217

213218
var generationOptions = {
214-
min: tickOpts.min,
215-
max: tickOpts.max
219+
min: nonNegativeOrDefault(tickOpts.min),
220+
max: nonNegativeOrDefault(tickOpts.max)
216221
};
217222
var ticks = me.ticks = generateTicks(generationOptions, me);
218223

test/specs/scale.logarithmic.tests.js

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -477,6 +477,68 @@ describe('Logarithmic Scale tests', function() {
477477
expect(yScale.ticks[tickCount - 1]).toBe(10);
478478
});
479479

480+
it('should ignore negative min and max options', function() {
481+
var chart = window.acquireChart({
482+
type: 'bar',
483+
data: {
484+
datasets: [{
485+
data: [1, 1, 1, 2, 1, 0]
486+
}],
487+
labels: []
488+
},
489+
options: {
490+
scales: {
491+
yAxes: [{
492+
id: 'yScale',
493+
type: 'logarithmic',
494+
ticks: {
495+
min: -10,
496+
max: -1010,
497+
callback: function(value) {
498+
return value;
499+
}
500+
}
501+
}]
502+
}
503+
}
504+
});
505+
506+
var yScale = chart.scales.yScale;
507+
expect(yScale.min).toBe(0);
508+
expect(yScale.max).toBe(2);
509+
});
510+
511+
it('should ignore invalid min and max options', function() {
512+
var chart = window.acquireChart({
513+
type: 'bar',
514+
data: {
515+
datasets: [{
516+
data: [1, 1, 1, 2, 1, 0]
517+
}],
518+
labels: []
519+
},
520+
options: {
521+
scales: {
522+
yAxes: [{
523+
id: 'yScale',
524+
type: 'logarithmic',
525+
ticks: {
526+
min: '',
527+
max: false,
528+
callback: function(value) {
529+
return value;
530+
}
531+
}
532+
}]
533+
}
534+
}
535+
});
536+
537+
var yScale = chart.scales.yScale;
538+
expect(yScale.min).toBe(0);
539+
expect(yScale.max).toBe(2);
540+
});
541+
480542
it('should generate tick marks', function() {
481543
var chart = window.acquireChart({
482544
type: 'bar',

0 commit comments

Comments
 (0)