]> git.ipfire.org Git - thirdparty/Chart.js.git/commitdiff
Time: limit offset to sane values, gen >= 2 ticks (#8560)
authorJukka Kurkela <jukka.kurkela@gmail.com>
Tue, 2 Mar 2021 22:00:03 +0000 (00:00 +0200)
committerGitHub <noreply@github.com>
Tue, 2 Mar 2021 22:00:03 +0000 (17:00 -0500)
src/scales/scale.time.js
test/fixtures/controller.bar/bar-thickness-flex-offset.png
test/fixtures/scale.time/offset-with-no-ticks.js [new file with mode: 0644]
test/fixtures/scale.time/offset-with-no-ticks.png [new file with mode: 0644]

index 04df0ae1d20e92198791fe2f42b610fb26b949d3..8e400db3f09022d593fd5cabb1756dc10f47330d 100644 (file)
@@ -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';
 
@@ -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)};
   }
@@ -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) {
@@ -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);
     }
 
index e20cc4eb450c8f90b94da145252619ba60cec024..59171e08cf33886b432f5122c94d9c573d1b697c 100644 (file)
Binary files a/test/fixtures/controller.bar/bar-thickness-flex-offset.png and b/test/fixtures/controller.bar/bar-thickness-flex-offset.png differ
diff --git a/test/fixtures/scale.time/offset-with-no-ticks.js b/test/fixtures/scale.time/offset-with-no-ticks.js
new file mode 100644 (file)
index 0000000..010dd51
--- /dev/null
@@ -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}
+  }
+};
diff --git a/test/fixtures/scale.time/offset-with-no-ticks.png b/test/fixtures/scale.time/offset-with-no-ticks.png
new file mode 100644 (file)
index 0000000..9bea4ec
Binary files /dev/null and b/test/fixtures/scale.time/offset-with-no-ticks.png differ