Skip to content

Commit 23db60f

Browse files
committed
Add right alignment pad content calculation
1 parent 594530d commit 23db60f

19 files changed

Lines changed: 152 additions & 17 deletions

src/padCalculation/basePadCalculator.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Table } from "../models/table";
22
import { Cell } from "../models/cell";
33

44
export abstract class BasePadCalculator {
5-
public abstract getLeftPadding(paddingChar: string, table: Table, cell: Cell): string;
5+
public abstract getLeftPadding(paddingChar: string, table: Table, row: number, column: number): string;
66
public abstract getRightPadding(paddingChar: string, table: Table, row: number, column: number): string;
77

88
protected baseGetRightPadding(paddingChar: string, table: Table, row: number, column: number): string {

src/padCalculation/contentPadCalculator.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ export class ContentPadCalculator implements PadCalculator {
1010
{ }
1111

1212
public getLeftPadding(table: Table, row: number, column: number): string {
13-
return this._padCalculatorSelector.select(table, column).getLeftPadding(this._paddingChar, table, table.rows[row][column]);
13+
return this._padCalculatorSelector.select(table, column).getLeftPadding(this._paddingChar, table, row, column);
1414
}
1515

1616
public getRightPadding(table: Table, row: number, column: number): string {

src/padCalculation/left/firstColumnPadCalculator.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { Table } from "../../models/table";
33
import { Cell } from "../../models/cell";
44

55
export class FirstColumnPadCalculator extends BasePadCalculator {
6-
public getLeftPadding(paddingChar: string, table: Table, cell: Cell): string {
6+
public getLeftPadding(paddingChar: string, table: Table, row: number, column: number): string {
77
return table.hasLeftBorder ? paddingChar : "";
88
}
99
public getRightPadding(paddingChar: string, table: Table, row: number, column: number): string {

src/padCalculation/left/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export * from "./firstColumnPadCalculator"
2+
export * from "./middleColumnPadCalculator"
3+
export * from "./lastColumnPadCalculator"

src/padCalculation/left/lastColumnPadCalculator.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import { Table } from "../../models/table";
33
import { Cell } from "../../models/cell";
44

55
export class LastColumnPadCalculator extends BasePadCalculator {
6-
public getLeftPadding(paddingChar: string, table: Table, cell: Cell): string {
7-
return (cell.getValue() == "" && !table.hasRightBorder) ? "" : paddingChar;
6+
public getLeftPadding(paddingChar: string, table: Table, row: number, column: number): string {
7+
return (table.rows[row][column].getValue() == "" && !table.hasRightBorder) ? "" : paddingChar;
88
}
99

1010
public getRightPadding(paddingChar: string, table: Table, row: number, column: number): string {

src/padCalculation/left/middleColumnPadCalculator.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { Table } from "../../models/table";
33
import { Cell } from "../../models/cell";
44

55
export class MiddleColumnPadCalculator extends BasePadCalculator {
6-
public getLeftPadding(paddingChar: string, table: Table, cell: Cell): string {
6+
public getLeftPadding(paddingChar: string, table: Table, row: number, column: number): string {
77
return paddingChar;
88
}
99
public getRightPadding(paddingChar: string, table: Table, row: number, column: number): string {
Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,27 @@
11
import { Table } from "../models/table";
22
import { BasePadCalculator } from "./basePadCalculator";
3-
import { FirstColumnPadCalculator } from "./left/firstColumnPadCalculator";
4-
import { LastColumnPadCalculator } from "./left/lastColumnPadCalculator";
5-
import { MiddleColumnPadCalculator } from "./left/middleColumnPadCalculator";
3+
import * as LeftAlignment from "./left";
4+
import * as RightAlignment from "./right";
5+
import { Alignment } from "../models/alignment";
66

77
export class PadCalculatorSelector {
88
public select(table: Table, column: number) : BasePadCalculator {
9-
if (column == 0) return new FirstColumnPadCalculator();
10-
if (column == table.columnCount - 1) return new LastColumnPadCalculator();
11-
return new MiddleColumnPadCalculator();
9+
switch (table.alignments[column]) {
10+
case Alignment.Center: return this.leftAlignmentPadCalculator(table, column);
11+
case Alignment.Right: return this.rightAlignmentPadCalculator(table, column);
12+
default: return this.leftAlignmentPadCalculator(table, column);
13+
}
14+
}
15+
16+
private leftAlignmentPadCalculator(table: Table, column: number) : BasePadCalculator {
17+
if (column == 0) return new LeftAlignment.FirstColumnPadCalculator();
18+
if (column == table.columnCount - 1) return new LeftAlignment.LastColumnPadCalculator();
19+
return new LeftAlignment.MiddleColumnPadCalculator();
20+
}
21+
22+
private rightAlignmentPadCalculator(table: Table, column: number) : BasePadCalculator {
23+
if (column == 0) return new RightAlignment.FirstColumnPadCalculator();
24+
if (column == table.columnCount - 1) return new RightAlignment.LastColumnPadCalculator();
25+
return new RightAlignment.MiddleColumnPadCalculator();
1226
}
1327
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { BasePadCalculator } from "../basePadCalculator";
2+
import { Table } from "../../models/table";
3+
import { Cell } from "../../models/cell";
4+
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;
23+
}
24+
}

src/padCalculation/right/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export * from "./firstColumnPadCalculator"
2+
export * from "./middleColumnPadCalculator"
3+
export * from "./lastColumnPadCalculator"
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { BasePadCalculator } from "../basePadCalculator";
2+
import { Table } from "../../models/table";
3+
import { Cell } from "../../models/cell";
4+
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+
21+
public getRightPadding(paddingChar: string, table: Table, row: number, column: number): string {
22+
return table.hasLeftBorder ? paddingChar : "";
23+
}
24+
}

0 commit comments

Comments
 (0)