summaryrefslogtreecommitdiff
path: root/ext/console/02_console.js
diff options
context:
space:
mode:
Diffstat (limited to 'ext/console/02_console.js')
-rw-r--r--ext/console/02_console.js19
1 files changed, 15 insertions, 4 deletions
diff --git a/ext/console/02_console.js b/ext/console/02_console.js
index 40ff2e25d..178b3955b 100644
--- a/ext/console/02_console.js
+++ b/ext/console/02_console.js
@@ -191,13 +191,17 @@
return width;
}
- function renderRow(row, columnWidths) {
+ function renderRow(row, columnWidths, columnRightAlign) {
let out = tableChars.left;
for (let i = 0; i < row.length; i++) {
const cell = row[i];
const len = getStringWidth(cell);
- const needed = columnWidths[i] - len;
- out += `${cell}${StringPrototypeRepeat(" ", needed)}`;
+ const padding = StringPrototypeRepeat(" ", columnWidths[i] - len);
+ if (columnRightAlign?.[i]) {
+ out += `${padding}${cell}`;
+ } else {
+ out += `${cell}${padding}`;
+ }
if (i !== row.length - 1) {
out += tableChars.middle;
}
@@ -206,6 +210,11 @@
return out;
}
+ function canRightAlign(value) {
+ const isNumber = !isNaN(value);
+ return isNumber;
+ }
+
function cliTable(head, columns) {
const rows = [];
const columnWidths = ArrayPrototypeMap(head, (h) => getStringWidth(h));
@@ -214,6 +223,7 @@
(n, a) => MathMax(n, a.length),
0,
);
+ const columnRightAlign = new Array(columnWidths.length).fill(true);
for (let i = 0; i < head.length; i++) {
const column = columns[i];
@@ -225,6 +235,7 @@
const width = columnWidths[i] || 0;
const counted = getStringWidth(value);
columnWidths[i] = MathMax(width, counted);
+ columnRightAlign[i] &= canRightAlign(value);
}
}
@@ -244,7 +255,7 @@
`${tableChars.rightMiddle}\n`;
for (const row of rows) {
- result += `${renderRow(row, columnWidths)}\n`;
+ result += `${renderRow(row, columnWidths, columnRightAlign)}\n`;
}
result +=