}
};
+// 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;
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) {
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);
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',