Make fixed layout declaritive
This commit is contained in:
@ -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);
|
||||
|
@ -27,8 +27,6 @@ class BorderProperty extends XmlComponent {
|
||||
sz: options.size,
|
||||
});
|
||||
this.root.push(attrs);
|
||||
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,2 +1,3 @@
|
||||
export * from "./table-properties";
|
||||
export * from "./table-float-properties";
|
||||
export * from "./table-layout";
|
||||
|
@ -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" } } }],
|
||||
|
@ -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 {
|
||||
|
@ -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", () => {
|
||||
|
@ -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<number>(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;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user