Skip to content

Commit

Permalink
Time: limit offset to sane values, gen >= 2 ticks (#8560)
Browse files Browse the repository at this point in the history
  • Loading branch information
kurkle committed Mar 2, 2021
1 parent 118cff7 commit 08b76b0
Show file tree
Hide file tree
Showing 4 changed files with 87 additions and 4 deletions.
10 changes: 6 additions & 4 deletions src/scales/scale.time.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import adapters from '../core/core.adapters';
import {isFinite, isNullOrUndef, mergeIf, valueOrDefault} from '../helpers/helpers.core';
import {toRadians, isNumber} from '../helpers/helpers.math';
import {toRadians, isNumber, _limitValue} from '../helpers/helpers.math';
import Scale from '../core/core.scale';
import {_arrayUnique, _filterBetween, _lookup} from '../helpers/helpers.collection';

Expand Down Expand Up @@ -379,6 +379,8 @@ export default class TimeScale extends Scale {
end = (last - me.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;
}
}
start = _limitValue(start, 0, 0.25);
end = _limitValue(end, 0, 0.25);

me._offsets = {start, end, factor: 1 / (start + 1 + end)};
}
Expand All @@ -404,7 +406,7 @@ export default class TimeScale extends Scale {
const hasWeekday = isNumber(weekday) || weekday === true;
const ticks = {};
let first = min;
let time;
let time, count;

// For 'week' unit, handle the first day of week option
if (hasWeekday) {
Expand All @@ -420,11 +422,11 @@ export default class TimeScale extends Scale {
}

const timestamps = options.ticks.source === 'data' && me.getDataTimestamps();
for (time = first; time < max; time = +adapter.add(time, stepSize, minor)) {
for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {
addTick(ticks, time, timestamps);
}

if (time === max || options.bounds === 'ticks') {
if (time === max || options.bounds === 'ticks' || count === 1) {
addTick(ticks, time, timestamps);
}

Expand Down
Binary file modified test/fixtures/controller.bar/bar-thickness-flex-offset.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
81 changes: 81 additions & 0 deletions test/fixtures/scale.time/offset-with-no-ticks.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
const data = {
datasets: [
{
data: [
{
x: moment('15/10/2020', 'DD/MM/YYYY').valueOf(),
y: 55
},
{
x: moment('18/10/2020', 'DD/MM/YYYY').valueOf(),
y: 10
},
{
x: moment('19/10/2020', 'DD/MM/YYYY').valueOf(),
y: 15
}
],
backgroundColor: 'blue'
},
{
data: [
{
x: moment('15/10/2020', 'DD/MM/YYYY').valueOf(),
y: 6
},
{
x: moment('18/10/2020', 'DD/MM/YYYY').valueOf(),
y: 11
},
{
x: moment('19/10/2020', 'DD/MM/YYYY').valueOf(),
y: 16
}
],
backgroundColor: 'green',
},
{
data: [
{
x: moment('15/10/2020', 'DD/MM/YYYY').valueOf(),
y: 7
},
{
x: moment('18/10/2020', 'DD/MM/YYYY').valueOf(),
y: 12
},
{
x: moment('19/10/2020', 'DD/MM/YYYY').valueOf(),
y: 17
}
],
backgroundColor: 'red',
}
]
};

module.exports = {
description: 'https://github.com/chartjs/Chart.js/issues/7991',
config: {
type: 'bar',
data,
options: {
scales: {
x: {
type: 'time',
// offset: false,
time: {
unit: 'month',
},
},
y: {
display: false
}
}
}
},
options: {
spriteText: true,
canvas: {width: 256, height: 128}
}
};
Binary file added test/fixtures/scale.time/offset-with-no-ticks.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 08b76b0

Please sign in to comment.