// http://officeopenxml.com/WPtableGrid.php import { Paragraph } from "file/paragraph"; import { IXmlableObject, XmlComponent } from "file/xml-components"; import { ITableShadingAttributesProperties } from "../shading"; import { Table } from "../table"; import { ITableCellMarginOptions } from "./cell-margin/table-cell-margins"; import { TableCellBorders, VerticalAlign, VMergeType } from "./table-cell-components"; import { TableCellProperties } from "./table-cell-properties"; export class TableCell extends XmlComponent { private readonly properties: TableCellProperties; constructor() { super("w:tc"); this.properties = new TableCellProperties(); this.root.push(this.properties); } public addParagraph(content: Paragraph): TableCell { this.root.push(content); return this; } public addTable(content: Table): TableCell { this.root.push(content); return this; } public prepForXml(): IXmlableObject | undefined { // Cells must end with a paragraph if (!(this.root[this.root.length - 1] instanceof Paragraph)) { this.createParagraph(); } return super.prepForXml(); } public createParagraph(text?: string): Paragraph { const para = new Paragraph(text); this.addParagraph(para); return para; } public setVerticalAlign(type: VerticalAlign): TableCell { this.properties.setVerticalAlign(type); return this; } public addGridSpan(cellSpan: number): TableCell { this.properties.addGridSpan(cellSpan); return this; } public addVerticalMerge(type: VMergeType): TableCell { this.properties.addVerticalMerge(type); return this; } public setMargins(margins: ITableCellMarginOptions): TableCell { this.properties.addMargins(margins); return this; } public setShading(attrs: ITableShadingAttributesProperties): TableCell { this.properties.setShading(attrs); return this; } public get Borders(): TableCellBorders { return this.properties.Borders; } public get Properties(): TableCellProperties { return this.properties; } }