docx
Version:
Easily generate .docx files with JS/TS with a nice declarative API. Works for Node and on the Browser.
76 lines (64 loc) • 2.27 kB
text/typescript
// http://officeopenxml.com/WPtableBorders.php
import { BorderElement, BorderStyle, IBorderOptions } from "file/border";
import { XmlComponent } from "file/xml-components";
export interface ITableBordersOptions {
readonly top?: IBorderOptions;
readonly bottom?: IBorderOptions;
readonly left?: IBorderOptions;
readonly right?: IBorderOptions;
readonly insideHorizontal?: IBorderOptions;
readonly insideVertical?: IBorderOptions;
}
const NONE_BORDER = {
style: BorderStyle.NONE,
size: 0,
color: "auto",
};
const DEFAULT_BORDER = {
style: BorderStyle.SINGLE,
size: 4,
color: "auto",
};
export class TableBorders extends XmlComponent {
public static readonly NONE = {
top: NONE_BORDER,
bottom: NONE_BORDER,
left: NONE_BORDER,
right: NONE_BORDER,
insideHorizontal: NONE_BORDER,
insideVertical: NONE_BORDER,
};
constructor(options: ITableBordersOptions) {
super("w:tblBorders");
if (options.top) {
this.root.push(new BorderElement("w:top", options.top));
} else {
this.root.push(new BorderElement("w:top", DEFAULT_BORDER));
}
if (options.left) {
this.root.push(new BorderElement("w:left", options.left));
} else {
this.root.push(new BorderElement("w:left", DEFAULT_BORDER));
}
if (options.bottom) {
this.root.push(new BorderElement("w:bottom", options.bottom));
} else {
this.root.push(new BorderElement("w:bottom", DEFAULT_BORDER));
}
if (options.right) {
this.root.push(new BorderElement("w:right", options.right));
} else {
this.root.push(new BorderElement("w:right", DEFAULT_BORDER));
}
if (options.insideHorizontal) {
this.root.push(new BorderElement("w:insideH", options.insideHorizontal));
} else {
this.root.push(new BorderElement("w:insideH", DEFAULT_BORDER));
}
if (options.insideVertical) {
this.root.push(new BorderElement("w:insideV", options.insideVertical));
} else {
this.root.push(new BorderElement("w:insideV", DEFAULT_BORDER));
}
}
}