docx
Version:
Easily generate .docx files with JS/TS with a nice declarative API. Works for Node and on the Browser.
48 lines (43 loc) • 1.6 kB
text/typescript
// http://officeopenxml.com/WPtableWidth.php
import { measurementOrPercentValue } from "file/values";
import { XmlAttributeComponent, XmlComponent } from "file/xml-components";
// <xsd:simpleType name="ST_TblWidth">
// <xsd:restriction base="xsd:string">
// <xsd:enumeration value="nil"/>
// <xsd:enumeration value="pct"/>
// <xsd:enumeration value="dxa"/>
// <xsd:enumeration value="auto"/>
// </xsd:restriction>
// </xsd:simpleType>
export enum WidthType {
/** Auto. */
AUTO = "auto",
/** Value is in twentieths of a point */
DXA = "dxa",
/** No (empty) value. */
NIL = "nil",
/** Value is in percentage. */
PERCENTAGE = "pct",
}
// <xsd:complexType name="CT_TblWidth">
// <xsd:attribute name="w" type="ST_MeasurementOrPercent"/>
// <xsd:attribute name="type" type="ST_TblWidth"/>
// </xsd:complexType>
export interface ITableWidthProperties {
readonly size: string | number;
readonly type?: WidthType;
}
class TableWidthAttributes extends XmlAttributeComponent<ITableWidthProperties> {
protected readonly xmlKeys = { type: "w:type", size: "w:w" };
}
export class TableWidthElement extends XmlComponent {
constructor(name: string, { type = WidthType.AUTO, size }: ITableWidthProperties) {
super(name);
// super("w:tblW");
let tableWidthValue = size;
if (type === WidthType.PERCENTAGE && typeof size === "number") {
tableWidthValue = `${size}%`;
}
this.root.push(new TableWidthAttributes({ type: type, size: measurementOrPercentValue(tableWidthValue) }));
}
}