Skip to content

Commit 0b5541d

Browse files
committed
Reuse logic in center pad calculation
1 parent d8ea0b3 commit 0b5541d

4 files changed

Lines changed: 37 additions & 51 deletions

File tree

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { Table } from "../../models/table";
2+
import { Cell } from "../../models/cell";
3+
import { BasePadCalculator } from "../basePadCalculator";
4+
5+
export abstract class CenterPadCalculator extends BasePadCalculator {
6+
public getLeftPadding(paddingChar: string, table: Table, row: number, column: number): string {
7+
return paddingChar.repeat(Math.floor(this.totalPadCount(table, column, row)));
8+
}
9+
10+
public getRightPadding(paddingChar: string, table: Table, row: number, column: number): string {
11+
return paddingChar.repeat(Math.ceil(this.totalPadCount(table, column, row)));
12+
}
13+
14+
protected totalPadCount(table: Table, column: number, row: number): number {
15+
const longestColumnLength = table.getLongestColumnLengths()[column];
16+
let padCount = longestColumnLength > 0
17+
? longestColumnLength - table.rows[row][column].getLength()
18+
: 1;
19+
padCount += this.extraPadCount(table);
20+
return padCount / 2;
21+
}
22+
23+
protected abstract extraPadCount(table: Table): number;
24+
}
Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,9 @@
1-
import { BasePadCalculator } from "../basePadCalculator";
21
import { Table } from "../../models/table";
3-
import { Cell } from "../../models/cell";
2+
import { CenterPadCalculator } from "./centerPadCalculator";
43

5-
export class FirstColumnPadCalculator extends BasePadCalculator {
6-
public getLeftPadding(paddingChar: string, table: Table, row: number, column: number): string {
7-
return paddingChar.repeat(Math.floor(this.totalPadCount(table, column, row)));
8-
}
9-
10-
public getRightPadding(paddingChar: string, table: Table, row: number, column: number): string {
11-
return paddingChar.repeat(Math.ceil(this.totalPadCount(table, column, row)));
12-
}
4+
export class FirstColumnPadCalculator extends CenterPadCalculator {
135

14-
private totalPadCount(table: Table, column: number, row: number): number {
15-
const longestColumnLength = table.getLongestColumnLengths()[column];
16-
let padCount = longestColumnLength > 0
17-
? longestColumnLength - table.rows[row][column].getLength()
18-
: 1;
19-
padCount++;
20-
if (table.hasLeftBorder)
21-
padCount++;
22-
return padCount / 2;
6+
protected extraPadCount(table: Table): number {
7+
return table.hasLeftBorder ? 2 : 1;
238
}
249
}
Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,14 @@
1-
import { BasePadCalculator } from "../basePadCalculator";
21
import { Table } from "../../models/table";
3-
import { Cell } from "../../models/cell";
2+
import { CenterPadCalculator } from "./centerPadCalculator";
43

5-
export class LastColumnPadCalculator extends BasePadCalculator {
6-
public getLeftPadding(paddingChar: string, table: Table, row: number, column: number): string {
7-
return paddingChar.repeat(Math.floor(this.totalPadCount(table, column, row)));
8-
}
4+
export class LastColumnPadCalculator extends CenterPadCalculator {
95

106
public getRightPadding(paddingChar: string, table: Table, row: number, column: number): string {
117
if (!table.hasRightBorder) return "";
12-
return paddingChar.repeat(Math.ceil(this.totalPadCount(table, column, row)));
8+
return super.getRightPadding(paddingChar, table, row, column);
139
}
1410

15-
private totalPadCount(table: Table, column: number, row: number): number {
16-
const longestColumnLength = table.getLongestColumnLengths()[column];
17-
let padCount = longestColumnLength > 0
18-
? longestColumnLength - table.rows[row][column].getLength()
19-
: 1;
20-
padCount += 2;
21-
return padCount / 2;
11+
protected extraPadCount(table: Table): number {
12+
return 2;
2213
}
2314
}
Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,8 @@
1-
import { BasePadCalculator } from "../basePadCalculator";
21
import { Table } from "../../models/table";
3-
import { Cell } from "../../models/cell";
2+
import { CenterPadCalculator } from "./centerPadCalculator";
43

5-
export class MiddleColumnPadCalculator extends BasePadCalculator {
6-
public getLeftPadding(paddingChar: string, table: Table, row: number, column: number): string {
7-
return paddingChar.repeat(Math.floor(this.totalPadCount(table, column, row)));
8-
}
9-
10-
public getRightPadding(paddingChar: string, table: Table, row: number, column: number): string {
11-
return paddingChar.repeat(Math.ceil(this.totalPadCount(table, column, row)));
12-
}
13-
14-
private totalPadCount(table: Table, column: number, row: number): number {
15-
const longestColumnLength = table.getLongestColumnLengths()[column];
16-
let padCount = longestColumnLength > 0
17-
? longestColumnLength - table.rows[row][column].getLength()
18-
: 1;
19-
padCount += 2;
20-
return padCount / 2;
4+
export class MiddleColumnPadCalculator extends CenterPadCalculator {
5+
protected extraPadCount(table: Table): number {
6+
return 2;
217
}
228
}

0 commit comments

Comments
 (0)