Merge pull request #460 from dolanmiu/feat/table-alignment

Overlap option for tables
This commit is contained in:
Dolan
2019-11-24 03:35:26 +00:00
committed by GitHub
8 changed files with 79 additions and 3 deletions

View File

@ -3,6 +3,7 @@
import * as fs from "fs"; import * as fs from "fs";
import { import {
Document, Document,
OverlapType,
Packer, Packer,
Paragraph, Paragraph,
RelativeHorizontalPosition, RelativeHorizontalPosition,
@ -43,6 +44,7 @@ const table = new Table({
verticalAnchor: TableAnchorType.MARGIN, verticalAnchor: TableAnchorType.MARGIN,
relativeHorizontalPosition: RelativeHorizontalPosition.RIGHT, relativeHorizontalPosition: RelativeHorizontalPosition.RIGHT,
relativeVerticalPosition: RelativeVerticalPosition.BOTTOM, relativeVerticalPosition: RelativeVerticalPosition.BOTTOM,
overlap: OverlapType.NEVER,
}, },
width: { width: {
size: 4535, size: 4535,

View File

@ -1,4 +1,5 @@
// http://officeopenxml.com/WPalignment.php // http://officeopenxml.com/WPalignment.php
// http://officeopenxml.com/WPtableAlignment.php
import { XmlAttributeComponent, XmlComponent } from "file/xml-components"; import { XmlAttributeComponent, XmlComponent } from "file/xml-components";
export enum AlignmentType { export enum AlignmentType {

View File

@ -2,3 +2,4 @@ export * from "./table-properties";
export * from "./table-float-properties"; export * from "./table-float-properties";
export * from "./table-layout"; export * from "./table-layout";
export * from "./table-borders"; export * from "./table-borders";
export * from "./table-overlap";

View File

@ -3,11 +3,12 @@ import { expect } from "chai";
import { Formatter } from "export/formatter"; import { Formatter } from "export/formatter";
import { RelativeHorizontalPosition, RelativeVerticalPosition, TableAnchorType, TableFloatProperties } from "./table-float-properties"; import { RelativeHorizontalPosition, RelativeVerticalPosition, TableAnchorType, TableFloatProperties } from "./table-float-properties";
import { OverlapType } from "./table-overlap";
describe("Table Float Properties", () => { describe("Table Float Properties", () => {
describe("#constructor", () => { describe("#constructor", () => {
it("should construct a TableFloatProperties with all options", () => { it("should construct a TableFloatProperties with all options", () => {
const tfp = new TableFloatProperties({ const properties = new TableFloatProperties({
horizontalAnchor: TableAnchorType.MARGIN, horizontalAnchor: TableAnchorType.MARGIN,
verticalAnchor: TableAnchorType.PAGE, verticalAnchor: TableAnchorType.PAGE,
absoluteHorizontalPosition: 10, absoluteHorizontalPosition: 10,
@ -19,8 +20,32 @@ describe("Table Float Properties", () => {
leftFromText: 50, leftFromText: 50,
rightFromText: 60, rightFromText: 60,
}); });
const tree = new Formatter().format(tfp); const tree = new Formatter().format(properties);
expect(tree).to.be.deep.equal(DEFAULT_TFP); 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",
},
},
},
],
});
}); });
}); });
}); });

View File

@ -1,5 +1,7 @@
import { XmlAttributeComponent, XmlComponent } from "file/xml-components"; import { XmlAttributeComponent, XmlComponent } from "file/xml-components";
import { OverlapType, TableOverlap } from "./table-overlap";
export enum TableAnchorType { export enum TableAnchorType {
MARGIN = "margin", MARGIN = "margin",
PAGE = "page", 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. * 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 rightFromText?: number;
readonly overlap?: OverlapType;
} }
export class TableFloatOptionsAttributes extends XmlAttributeComponent<ITableFloatOptions> { export class TableFloatOptionsAttributes extends XmlAttributeComponent<ITableFloatOptions> {
@ -130,5 +133,9 @@ export class TableFloatProperties extends XmlComponent {
constructor(options: ITableFloatOptions) { constructor(options: ITableFloatOptions) {
super("w:tblpPr"); super("w:tblpPr");
this.root.push(new TableFloatOptionsAttributes(options)); this.root.push(new TableFloatOptionsAttributes(options));
if (options.overlap) {
this.root.push(new TableOverlap(options.overlap));
}
} }
} }

View File

@ -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",
},
},
});
});
});
});

View File

@ -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 }));
}
}

View File

@ -1,3 +1,4 @@
// http://officeopenxml.com/WPtableProperties.php
import { IgnoreIfEmptyXmlComponent } from "file/xml-components"; import { IgnoreIfEmptyXmlComponent } from "file/xml-components";
import { Alignment, AlignmentType } from "../../paragraph"; import { Alignment, AlignmentType } from "../../paragraph";