diff --git a/demo/34-floating-tables.ts b/demo/34-floating-tables.ts index dadf80f9da..aa8128de7e 100644 --- a/demo/34-floating-tables.ts +++ b/demo/34-floating-tables.ts @@ -3,6 +3,7 @@ import * as fs from "fs"; import { Document, + OverlapType, Packer, Paragraph, RelativeHorizontalPosition, @@ -43,6 +44,7 @@ const table = new Table({ verticalAnchor: TableAnchorType.MARGIN, relativeHorizontalPosition: RelativeHorizontalPosition.RIGHT, relativeVerticalPosition: RelativeVerticalPosition.BOTTOM, + overlap: OverlapType.NEVER, }, width: { size: 4535, diff --git a/src/file/paragraph/formatting/alignment.ts b/src/file/paragraph/formatting/alignment.ts index 8acf41ee4b..117b584a01 100644 --- a/src/file/paragraph/formatting/alignment.ts +++ b/src/file/paragraph/formatting/alignment.ts @@ -1,4 +1,5 @@ // http://officeopenxml.com/WPalignment.php +// http://officeopenxml.com/WPtableAlignment.php import { XmlAttributeComponent, XmlComponent } from "file/xml-components"; export enum AlignmentType { diff --git a/src/file/table/table-properties/index.ts b/src/file/table/table-properties/index.ts index aefcc9e0aa..c5b5935d7f 100644 --- a/src/file/table/table-properties/index.ts +++ b/src/file/table/table-properties/index.ts @@ -2,3 +2,4 @@ export * from "./table-properties"; export * from "./table-float-properties"; export * from "./table-layout"; export * from "./table-borders"; +export * from "./table-overlap"; diff --git a/src/file/table/table-properties/table-float-properties.spec.ts b/src/file/table/table-properties/table-float-properties.spec.ts index a1422d871b..10d38f31f3 100644 --- a/src/file/table/table-properties/table-float-properties.spec.ts +++ b/src/file/table/table-properties/table-float-properties.spec.ts @@ -3,11 +3,12 @@ import { expect } from "chai"; import { Formatter } from "export/formatter"; import { RelativeHorizontalPosition, RelativeVerticalPosition, TableAnchorType, TableFloatProperties } from "./table-float-properties"; +import { OverlapType } from "./table-overlap"; describe("Table Float Properties", () => { describe("#constructor", () => { it("should construct a TableFloatProperties with all options", () => { - const tfp = new TableFloatProperties({ + const properties = new TableFloatProperties({ horizontalAnchor: TableAnchorType.MARGIN, verticalAnchor: TableAnchorType.PAGE, absoluteHorizontalPosition: 10, @@ -19,8 +20,32 @@ describe("Table Float Properties", () => { leftFromText: 50, rightFromText: 60, }); - const tree = new Formatter().format(tfp); - expect(tree).to.be.deep.equal(DEFAULT_TFP); + const tree = new Formatter().format(properties); + expect(tree).to.deep.equal(DEFAULT_TFP); + }); + + it("should add overlap", () => { + const properties = new TableFloatProperties({ + overlap: OverlapType.NEVER, + }); + const tree = new Formatter().format(properties); + + expect(tree).to.deep.equal({ + "w:tblpPr": [ + { + _attr: { + overlap: "never", + }, + }, + { + "w:tblOverlap": { + _attr: { + "w:val": "never", + }, + }, + }, + ], + }); }); }); }); diff --git a/src/file/table/table-properties/table-float-properties.ts b/src/file/table/table-properties/table-float-properties.ts index a1053c4ab2..2b97d86c1c 100644 --- a/src/file/table/table-properties/table-float-properties.ts +++ b/src/file/table/table-properties/table-float-properties.ts @@ -1,5 +1,7 @@ import { XmlAttributeComponent, XmlComponent } from "file/xml-components"; +import { OverlapType, TableOverlap } from "./table-overlap"; + export enum TableAnchorType { MARGIN = "margin", PAGE = "page", @@ -109,6 +111,7 @@ export interface ITableFloatOptions { * to the right of the table. The value is in twentieths of a point. If omitted, the value is assumed to be zero. */ readonly rightFromText?: number; + readonly overlap?: OverlapType; } export class TableFloatOptionsAttributes extends XmlAttributeComponent { @@ -130,5 +133,9 @@ export class TableFloatProperties extends XmlComponent { constructor(options: ITableFloatOptions) { super("w:tblpPr"); this.root.push(new TableFloatOptionsAttributes(options)); + + if (options.overlap) { + this.root.push(new TableOverlap(options.overlap)); + } } } diff --git a/src/file/table/table-properties/table-overlap.spec.ts b/src/file/table/table-properties/table-overlap.spec.ts new file mode 100644 index 0000000000..80ddd13e3d --- /dev/null +++ b/src/file/table/table-properties/table-overlap.spec.ts @@ -0,0 +1,22 @@ +import { expect } from "chai"; + +import { Formatter } from "export/formatter"; + +import { OverlapType, TableOverlap } from "./table-overlap"; + +describe("TableOverlap", () => { + describe("#constructor", () => { + it("sets the width attribute to the value given", () => { + const tableOverlap = new TableOverlap(OverlapType.OVERLAP); + const tree = new Formatter().format(tableOverlap); + + expect(tree).to.deep.equal({ + "w:tblOverlap": { + _attr: { + "w:val": "overlap", + }, + }, + }); + }); + }); +}); diff --git a/src/file/table/table-properties/table-overlap.ts b/src/file/table/table-properties/table-overlap.ts new file mode 100644 index 0000000000..387cf27943 --- /dev/null +++ b/src/file/table/table-properties/table-overlap.ts @@ -0,0 +1,17 @@ +import { XmlAttributeComponent, XmlComponent } from "file/xml-components"; + +export enum OverlapType { + NEVER = "never", + OVERLAP = "overlap", +} + +class TableOverlapAttributes extends XmlAttributeComponent<{ readonly val: OverlapType }> { + protected readonly xmlKeys = { val: "w:val" }; +} + +export class TableOverlap extends XmlComponent { + constructor(type: OverlapType) { + super("w:tblOverlap"); + this.root.push(new TableOverlapAttributes({ val: type })); + } +} diff --git a/src/file/table/table-properties/table-properties.ts b/src/file/table/table-properties/table-properties.ts index f78d225cbd..8a7d000d5b 100644 --- a/src/file/table/table-properties/table-properties.ts +++ b/src/file/table/table-properties/table-properties.ts @@ -1,3 +1,4 @@ +// http://officeopenxml.com/WPtableProperties.php import { IgnoreIfEmptyXmlComponent } from "file/xml-components"; import { Alignment, AlignmentType } from "../../paragraph";