]> git.ipfire.org Git - thirdparty/Chart.js.git/commitdiff
[feat] support crossAlign on mirrored y-axis (#9563)
authorAlex Van Liew <snoozbuster@outlook.com>
Wed, 18 Aug 2021 11:48:36 +0000 (04:48 -0700)
committerGitHub <noreply@github.com>
Wed, 18 Aug 2021 11:48:36 +0000 (07:48 -0400)
13 files changed:
src/core/core.scale.js
test/fixtures/core.scale/crossAlignment/mirror-cross-align-left-center.js [new file with mode: 0644]
test/fixtures/core.scale/crossAlignment/mirror-cross-align-left-center.png [new file with mode: 0644]
test/fixtures/core.scale/crossAlignment/mirror-cross-align-left-far.js [new file with mode: 0644]
test/fixtures/core.scale/crossAlignment/mirror-cross-align-left-far.png [new file with mode: 0644]
test/fixtures/core.scale/crossAlignment/mirror-cross-align-left-near.js [new file with mode: 0644]
test/fixtures/core.scale/crossAlignment/mirror-cross-align-left-near.png [new file with mode: 0644]
test/fixtures/core.scale/crossAlignment/mirror-cross-align-right-center.js [new file with mode: 0644]
test/fixtures/core.scale/crossAlignment/mirror-cross-align-right-center.png [new file with mode: 0644]
test/fixtures/core.scale/crossAlignment/mirror-cross-align-right-far.js [new file with mode: 0644]
test/fixtures/core.scale/crossAlignment/mirror-cross-align-right-far.png [new file with mode: 0644]
test/fixtures/core.scale/crossAlignment/mirror-cross-align-right-near.js [new file with mode: 0644]
test/fixtures/core.scale/crossAlignment/mirror-cross-align-right-near.png [new file with mode: 0644]

index 7eaa656c6ce40829ce1bbddcfd9ccce954081580..dd8e1bfd27b1f6d6a715c480e7c0c181d36029e7 100644 (file)
@@ -1344,8 +1344,17 @@ export default class Scale extends Element {
 
     if (position === 'left') {
       if (mirror) {
-        textAlign = 'left';
         x = me.right + padding;
+
+        if (crossAlign === 'near') {
+          textAlign = 'left';
+        } else if (crossAlign === 'center') {
+          textAlign = 'center';
+          x += (widest / 2);
+        } else {
+          textAlign = 'right';
+          x += widest;
+        }
       } else {
         x = me.right - tickAndPadding;
 
@@ -1361,8 +1370,17 @@ export default class Scale extends Element {
       }
     } else if (position === 'right') {
       if (mirror) {
-        textAlign = 'right';
         x = me.left + padding;
+
+        if (crossAlign === 'near') {
+          textAlign = 'right';
+        } else if (crossAlign === 'center') {
+          textAlign = 'center';
+          x -= (widest / 2);
+        } else {
+          textAlign = 'left';
+          x -= widest;
+        }
       } else {
         x = me.left + tickAndPadding;
 
diff --git a/test/fixtures/core.scale/crossAlignment/mirror-cross-align-left-center.js b/test/fixtures/core.scale/crossAlignment/mirror-cross-align-left-center.js
new file mode 100644 (file)
index 0000000..8c0af63
--- /dev/null
@@ -0,0 +1,30 @@
+module.exports = {
+  config: {
+    type: 'bar',
+    data: {
+      datasets: [{
+        data: [1, 2, 3],
+      }],
+      labels: ['Long long label 1', 'Label2', 'Label3']
+    },
+    options: {
+      indexAxis: 'y',
+      scales: {
+        y: {
+          position: 'left',
+          ticks: {
+            mirror: true,
+            crossAlign: 'center',
+          },
+        },
+      }
+    }
+  },
+  options: {
+    spriteText: true,
+    canvas: {
+      height: 256,
+      width: 512
+    }
+  }
+};
diff --git a/test/fixtures/core.scale/crossAlignment/mirror-cross-align-left-center.png b/test/fixtures/core.scale/crossAlignment/mirror-cross-align-left-center.png
new file mode 100644 (file)
index 0000000..f64fdbe
Binary files /dev/null and b/test/fixtures/core.scale/crossAlignment/mirror-cross-align-left-center.png differ
diff --git a/test/fixtures/core.scale/crossAlignment/mirror-cross-align-left-far.js b/test/fixtures/core.scale/crossAlignment/mirror-cross-align-left-far.js
new file mode 100644 (file)
index 0000000..c5f2e23
--- /dev/null
@@ -0,0 +1,30 @@
+module.exports = {
+  config: {
+    type: 'bar',
+    data: {
+      datasets: [{
+        data: [1, 2, 3],
+      }],
+      labels: ['Long long label 1', 'Label2', 'Label3']
+    },
+    options: {
+      indexAxis: 'y',
+      scales: {
+        y: {
+          position: 'left',
+          ticks: {
+            mirror: true,
+            crossAlign: 'far',
+          },
+        },
+      }
+    }
+  },
+  options: {
+    spriteText: true,
+    canvas: {
+      height: 256,
+      width: 512
+    }
+  }
+};
diff --git a/test/fixtures/core.scale/crossAlignment/mirror-cross-align-left-far.png b/test/fixtures/core.scale/crossAlignment/mirror-cross-align-left-far.png
new file mode 100644 (file)
index 0000000..daf5104
Binary files /dev/null and b/test/fixtures/core.scale/crossAlignment/mirror-cross-align-left-far.png differ
diff --git a/test/fixtures/core.scale/crossAlignment/mirror-cross-align-left-near.js b/test/fixtures/core.scale/crossAlignment/mirror-cross-align-left-near.js
new file mode 100644 (file)
index 0000000..c525a1b
--- /dev/null
@@ -0,0 +1,30 @@
+module.exports = {
+  config: {
+    type: 'bar',
+    data: {
+      datasets: [{
+        data: [1, 2, 3],
+      }],
+      labels: ['Long long label 1', 'Label2', 'Label3']
+    },
+    options: {
+      indexAxis: 'y',
+      scales: {
+        y: {
+          position: 'left',
+          ticks: {
+            mirror: true,
+            crossAlign: 'near',
+          },
+        },
+      }
+    }
+  },
+  options: {
+    spriteText: true,
+    canvas: {
+      height: 256,
+      width: 512
+    }
+  }
+};
diff --git a/test/fixtures/core.scale/crossAlignment/mirror-cross-align-left-near.png b/test/fixtures/core.scale/crossAlignment/mirror-cross-align-left-near.png
new file mode 100644 (file)
index 0000000..39edd49
Binary files /dev/null and b/test/fixtures/core.scale/crossAlignment/mirror-cross-align-left-near.png differ
diff --git a/test/fixtures/core.scale/crossAlignment/mirror-cross-align-right-center.js b/test/fixtures/core.scale/crossAlignment/mirror-cross-align-right-center.js
new file mode 100644 (file)
index 0000000..d9472b2
--- /dev/null
@@ -0,0 +1,30 @@
+module.exports = {
+  config: {
+    type: 'bar',
+    data: {
+      datasets: [{
+        data: [1, 2, 3],
+      }],
+      labels: ['Long long label 1', 'Label2', 'Label3']
+    },
+    options: {
+      indexAxis: 'y',
+      scales: {
+        y: {
+          position: 'right',
+          ticks: {
+            mirror: true,
+            crossAlign: 'center',
+          },
+        },
+      }
+    }
+  },
+  options: {
+    spriteText: true,
+    canvas: {
+      height: 256,
+      width: 512
+    }
+  }
+};
diff --git a/test/fixtures/core.scale/crossAlignment/mirror-cross-align-right-center.png b/test/fixtures/core.scale/crossAlignment/mirror-cross-align-right-center.png
new file mode 100644 (file)
index 0000000..6b41efc
Binary files /dev/null and b/test/fixtures/core.scale/crossAlignment/mirror-cross-align-right-center.png differ
diff --git a/test/fixtures/core.scale/crossAlignment/mirror-cross-align-right-far.js b/test/fixtures/core.scale/crossAlignment/mirror-cross-align-right-far.js
new file mode 100644 (file)
index 0000000..6e187c0
--- /dev/null
@@ -0,0 +1,30 @@
+module.exports = {
+  config: {
+    type: 'bar',
+    data: {
+      datasets: [{
+        data: [1, 2, 3],
+      }],
+      labels: ['Long long label 1', 'Label2', 'Label3']
+    },
+    options: {
+      indexAxis: 'y',
+      scales: {
+        y: {
+          position: 'right',
+          ticks: {
+            mirror: true,
+            crossAlign: 'far',
+          },
+        },
+      }
+    }
+  },
+  options: {
+    spriteText: true,
+    canvas: {
+      height: 256,
+      width: 512
+    }
+  }
+};
diff --git a/test/fixtures/core.scale/crossAlignment/mirror-cross-align-right-far.png b/test/fixtures/core.scale/crossAlignment/mirror-cross-align-right-far.png
new file mode 100644 (file)
index 0000000..9929045
Binary files /dev/null and b/test/fixtures/core.scale/crossAlignment/mirror-cross-align-right-far.png differ
diff --git a/test/fixtures/core.scale/crossAlignment/mirror-cross-align-right-near.js b/test/fixtures/core.scale/crossAlignment/mirror-cross-align-right-near.js
new file mode 100644 (file)
index 0000000..03dc7f0
--- /dev/null
@@ -0,0 +1,30 @@
+module.exports = {
+  config: {
+    type: 'bar',
+    data: {
+      datasets: [{
+        data: [1, 2, 3],
+      }],
+      labels: ['Long long label 1', 'Label2', 'Label3']
+    },
+    options: {
+      indexAxis: 'y',
+      scales: {
+        y: {
+          position: 'right',
+          ticks: {
+            mirror: true,
+            crossAlign: 'near',
+          },
+        },
+      }
+    }
+  },
+  options: {
+    spriteText: true,
+    canvas: {
+      height: 256,
+      width: 512
+    }
+  }
+};
diff --git a/test/fixtures/core.scale/crossAlignment/mirror-cross-align-right-near.png b/test/fixtures/core.scale/crossAlignment/mirror-cross-align-right-near.png
new file mode 100644 (file)
index 0000000..bbefddc
Binary files /dev/null and b/test/fixtures/core.scale/crossAlignment/mirror-cross-align-right-near.png differ