Skip to content

Commit e37d2d5

Browse files
committed
Improve code reusability for right aligned column pad calculation
1 parent 0b5541d commit e37d2d5

8 files changed

Lines changed: 38 additions & 65 deletions

src/padCalculation/center/centerPadCalculator.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,7 @@ export abstract class CenterPadCalculator extends BasePadCalculator {
2020
return padCount / 2;
2121
}
2222

23-
protected abstract extraPadCount(table: Table): number;
23+
protected extraPadCount(table: Table): number {
24+
return 2;
25+
}
2426
}

src/padCalculation/center/firstColumnPadCalculator.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import { Table } from "../../models/table";
22
import { CenterPadCalculator } from "./centerPadCalculator";
33

44
export class FirstColumnPadCalculator extends CenterPadCalculator {
5-
65
protected extraPadCount(table: Table): number {
76
return table.hasLeftBorder ? 2 : 1;
87
}

src/padCalculation/center/lastColumnPadCalculator.ts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,8 @@ import { Table } from "../../models/table";
22
import { CenterPadCalculator } from "./centerPadCalculator";
33

44
export class LastColumnPadCalculator extends CenterPadCalculator {
5-
65
public getRightPadding(paddingChar: string, table: Table, row: number, column: number): string {
76
if (!table.hasRightBorder) return "";
87
return super.getRightPadding(paddingChar, table, row, column);
98
}
10-
11-
protected extraPadCount(table: Table): number {
12-
return 2;
13-
}
149
}

src/padCalculation/center/middleColumnPadCalculator.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,5 @@ import { Table } from "../../models/table";
22
import { CenterPadCalculator } from "./centerPadCalculator";
33

44
export class MiddleColumnPadCalculator extends CenterPadCalculator {
5-
protected extraPadCount(table: Table): number {
6-
return 2;
7-
}
5+
86
}
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";
32
import { Cell } from "../../models/cell";
3+
import { RightPadCalculator } from "./rightPadCalculator";
44

5-
export class FirstColumnPadCalculator extends BasePadCalculator {
6-
public getLeftPadding(paddingChar: string, table: Table, row: number, column: number): string {
7-
return paddingChar.repeat(
8-
this.getLeftPaddingCount(table.getLongestColumnLengths()[column], table.rows[row][column].getLength(), table.hasLeftBorder)
9-
);
10-
}
11-
12-
private getLeftPaddingCount(longestColumnLength: number, cellTextLength: number, hasLeftBorder: boolean) {
13-
let leftPadCount = longestColumnLength > 0
14-
? longestColumnLength - cellTextLength
15-
: 1;
16-
if (hasLeftBorder)
17-
leftPadCount++;
18-
return leftPadCount;
19-
}
20-
21-
public getRightPadding(paddingChar: string, table: Table, row: number, column: number): string {
22-
return paddingChar;
5+
export class FirstColumnPadCalculator extends RightPadCalculator {
6+
protected extraPadCount(table: Table): number {
7+
return table.hasLeftBorder ? 1 : 0;
238
}
249
}
Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,9 @@
1-
import { BasePadCalculator } from "../basePadCalculator";
21
import { Table } from "../../models/table";
32
import { Cell } from "../../models/cell";
3+
import { RightPadCalculator } from "./rightPadCalculator";
44

5-
export class LastColumnPadCalculator extends BasePadCalculator {
6-
7-
public getLeftPadding(paddingChar: string, table: Table, row: number, column: number): string {
8-
return paddingChar.repeat(
9-
this.getLeftPaddingCount(table.getLongestColumnLengths()[column], table.rows[row][column].getLength(), table.hasLeftBorder)
10-
);
11-
}
12-
13-
private getLeftPaddingCount(longestColumnLength: number, cellTextLength: number, hasLeftBorder: boolean) {
14-
let leftPadCount = longestColumnLength > 0
15-
? longestColumnLength - cellTextLength
16-
: 1;
17-
leftPadCount++;
18-
return leftPadCount;
19-
}
20-
5+
export class LastColumnPadCalculator extends RightPadCalculator {
216
public getRightPadding(paddingChar: string, table: Table, row: number, column: number): string {
22-
return table.hasLeftBorder ? paddingChar : "";
7+
return table.hasLeftBorder ? super.getRightPadding(paddingChar, table, row, column) : "";
238
}
249
}
Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,7 @@
1-
import { BasePadCalculator } from "../basePadCalculator";
21
import { Table } from "../../models/table";
32
import { Cell } from "../../models/cell";
3+
import { RightPadCalculator } from "./rightPadCalculator";
44

5-
export class MiddleColumnPadCalculator extends BasePadCalculator {
6-
public getLeftPadding(paddingChar: string, table: Table, row: number, column: number): string {
7-
return paddingChar.repeat(
8-
this.getLeftPaddingCount(table.getLongestColumnLengths()[column], table.rows[row][column].getLength(), table.hasLeftBorder)
9-
);
10-
}
5+
export class MiddleColumnPadCalculator extends RightPadCalculator {
116

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

0 commit comments

Comments
 (0)