diff --git a/demo/demo34.ts b/demo/demo34.ts index 678094988f..365fc00845 100644 --- a/demo/demo34.ts +++ b/demo/demo34.ts @@ -9,6 +9,7 @@ import { RelativeVerticalPosition, Table, TableAnchorType, + TableLayoutType, WidthType, } from "../build"; @@ -25,10 +26,10 @@ const table = new Table({ }, width: 4535, widthUnitType: WidthType.DXA, + layout: TableLayoutType.FIXED, }); -doc.addTable(table); -table.setFixedWidthLayout(); +doc.add(table); table.getCell(0, 0).addParagraph(new Paragraph("Hello")); table.getRow(0).mergeCells(0, 1); diff --git a/src/file/paragraph/formatting/border.ts b/src/file/paragraph/formatting/border.ts index d44bc51c06..9fdb9b65c3 100644 --- a/src/file/paragraph/formatting/border.ts +++ b/src/file/paragraph/formatting/border.ts @@ -27,8 +27,6 @@ class BorderProperty extends XmlComponent { sz: options.size, }); this.root.push(attrs); - - return this; } } diff --git a/src/file/table/table-properties/index.ts b/src/file/table/table-properties/index.ts index 913c3a7839..dde973ee7a 100644 --- a/src/file/table/table-properties/index.ts +++ b/src/file/table/table-properties/index.ts @@ -1,2 +1,3 @@ export * from "./table-properties"; export * from "./table-float-properties"; +export * from "./table-layout"; diff --git a/src/file/table/table-properties/table-properties.spec.ts b/src/file/table/table-properties/table-properties.spec.ts index c5bc54d2b9..dbd1c6b371 100644 --- a/src/file/table/table-properties/table-properties.spec.ts +++ b/src/file/table/table-properties/table-properties.spec.ts @@ -3,6 +3,7 @@ import { expect } from "chai"; import { Formatter } from "export/formatter"; import { WidthType } from "../table-cell"; +import { TableLayoutType } from "./table-layout"; import { TableProperties } from "./table-properties"; describe("TableProperties", () => { @@ -35,9 +36,10 @@ describe("TableProperties", () => { }); }); - describe("#setFixedWidthLayout", () => { + describe("#setLayout", () => { it("sets the table to fixed width layout", () => { - const tp = new TableProperties().setFixedWidthLayout(); + const tp = new TableProperties(); + tp.setLayout(TableLayoutType.FIXED); const tree = new Formatter().format(tp); expect(tree).to.deep.equal({ "w:tblPr": [{ "w:tblLayout": { _attr: { "w:type": "fixed" } } }], diff --git a/src/file/table/table-properties/table-properties.ts b/src/file/table/table-properties/table-properties.ts index 4067b2b3dc..fd1f844978 100644 --- a/src/file/table/table-properties/table-properties.ts +++ b/src/file/table/table-properties/table-properties.ts @@ -23,9 +23,8 @@ export class TableProperties extends IgnoreIfEmptyXmlComponent { return this; } - public setFixedWidthLayout(): TableProperties { - this.root.push(new TableLayout(TableLayoutType.FIXED)); - return this; + public setLayout(type: TableLayoutType): void { + this.root.push(new TableLayout(type)); } public setBorder(): TableProperties { diff --git a/src/file/table/table.spec.ts b/src/file/table/table.spec.ts index de814ace20..70fc2db165 100644 --- a/src/file/table/table.spec.ts +++ b/src/file/table/table.spec.ts @@ -9,6 +9,7 @@ import { Table } from "./table"; import { RelativeHorizontalPosition, RelativeVerticalPosition, TableAnchorType } from "./table-properties"; import { EMPTY_OBJECT } from "file/xml-components"; +import { TableLayoutType } from "./table-properties/table-layout"; const DEFAULT_TABLE_PROPERTIES = { "w:tblCellMar": [ @@ -134,6 +135,22 @@ describe("Table", () => { ], }); }); + + it("sets the table to fixed width layout", () => { + const table = new Table({ + rows: 1, + columns: 1, + layout: TableLayoutType.FIXED, + }); + const tree = new Formatter().format(table); + expect(tree) + .to.have.property("w:tbl") + .which.is.an("array") + .with.has.length.at.least(1); + expect(tree["w:tbl"][0]).to.deep.equal({ + "w:tblPr": [DEFAULT_TABLE_PROPERTIES, BORDERS, WIDTHS, { "w:tblLayout": { _attr: { "w:type": "fixed" } } }], + }); + }); }); describe("#getRow and Row#getCell", () => { @@ -252,23 +269,6 @@ describe("Table", () => { // }); // }); - describe("#setFixedWidthLayout", () => { - it("sets the table to fixed width layout", () => { - const table = new Table({ - rows: 1, - columns: 1, - }).setFixedWidthLayout(); - const tree = new Formatter().format(table); - expect(tree) - .to.have.property("w:tbl") - .which.is.an("array") - .with.has.length.at.least(1); - expect(tree["w:tbl"][0]).to.deep.equal({ - "w:tblPr": [DEFAULT_TABLE_PROPERTIES, BORDERS, WIDTHS, { "w:tblLayout": { _attr: { "w:type": "fixed" } } }], - }); - }); - }); - describe("Cell", () => { describe("#prepForXml", () => { it("inserts a paragraph at the end of the cell if it is empty", () => { diff --git a/src/file/table/table.ts b/src/file/table/table.ts index 9a99ce0408..c56bc4d62c 100644 --- a/src/file/table/table.ts +++ b/src/file/table/table.ts @@ -5,6 +5,7 @@ import { TableGrid } from "./grid"; import { TableCell, WidthType } from "./table-cell"; import { TableColumn } from "./table-column"; import { ITableFloatOptions, TableProperties } from "./table-properties"; +import { TableLayoutType } from "./table-properties/table-layout"; import { TableRow } from "./table-row"; /* 0-width columns don't get rendered correctly, so we need @@ -30,6 +31,7 @@ export interface ITableOptions { readonly left?: number; }; readonly float?: ITableFloatOptions; + readonly layout?: TableLayoutType; } export class Table extends XmlComponent { @@ -44,6 +46,7 @@ export class Table extends XmlComponent { columnWidths = Array(columns).fill(100), margins: { marginUnitType, top, bottom, right, left } = { marginUnitType: WidthType.AUTO, top: 0, bottom: 0, right: 0, left: 0 }, float, + layout, }: ITableOptions) { super("w:tbl"); this.properties = new TableProperties(); @@ -73,6 +76,10 @@ export class Table extends XmlComponent { if (float) { this.properties.setTableFloatProperties(float); } + + if (layout) { + this.properties.setLayout(layout); + } } public getRow(index: number): TableRow { @@ -94,9 +101,4 @@ export class Table extends XmlComponent { public getCell(row: number, col: number): TableCell { return this.getRow(row).getCell(col); } - - public setFixedWidthLayout(): Table { - this.properties.setFixedWidthLayout(); - return this; - } }