]> git.ipfire.org Git - thirdparty/Chart.js.git/commitdiff
Skip ticks by callback value as documented (#8914)
authorJukka Kurkela <jukka.kurkela@gmail.com>
Sat, 17 Apr 2021 11:28:33 +0000 (14:28 +0300)
committerGitHub <noreply@github.com>
Sat, 17 Apr 2021 11:28:33 +0000 (07:28 -0400)
src/core/core.scale.js
test/fixtures/core.scale/ticks/skip-by-callback.js [new file with mode: 0644]
test/fixtures/core.scale/ticks/skip-by-callback.png [new file with mode: 0644]

index cca092319beadeda621021c3a3ec618a59b7875e..c5c6a98a762415aa085af671b5623e50c12329ec 100644 (file)
@@ -550,6 +550,14 @@ export default class Scale extends Element {
       tick = ticks[i];
       tick.label = call(tickOpts.callback, [tick.value, i, ticks], me);
     }
+    // Ticks should be skipped when callback returns null or undef, so lets remove those.
+    for (i = 0; i < ilen; i++) {
+      if (isNullOrUndef(ticks[i].label)) {
+        ticks.splice(i, 1);
+        ilen--;
+        i--;
+      }
+    }
   }
   afterTickToLabelConversion() {
     call(this.options.afterTickToLabelConversion, [this]);
diff --git a/test/fixtures/core.scale/ticks/skip-by-callback.js b/test/fixtures/core.scale/ticks/skip-by-callback.js
new file mode 100644 (file)
index 0000000..53232bf
--- /dev/null
@@ -0,0 +1,44 @@
+module.exports = {
+  description: 'https://github.com/chartjs/Chart.js/issues/8892',
+  config: {
+    type: 'line',
+    data: {
+      labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
+      datasets: [
+        {
+          data: [12, 19, 3, 5, 2, 3],
+        },
+        {
+          data: [7, 11, 5, 8, 3, 7],
+        }
+      ]
+    },
+    options: {
+      scales: {
+        x: {
+          ticks: {
+            callback: function(val, index) {
+              if (index === 1) {
+                return undefined;
+              }
+              if (index === 3) {
+                return null;
+              }
+              return this.getLabelForValue(val);
+            }
+          }
+        },
+        y: {
+          ticks: {
+            callback: function(val, index) {
+              return index % 2 === 0 ? '' + val : null;
+            }
+          }
+        }
+      },
+    }
+  },
+  options: {
+    spriteText: true
+  }
+};
diff --git a/test/fixtures/core.scale/ticks/skip-by-callback.png b/test/fixtures/core.scale/ticks/skip-by-callback.png
new file mode 100644 (file)
index 0000000..d6608d1
Binary files /dev/null and b/test/fixtures/core.scale/ticks/skip-by-callback.png differ