diff --git a/demo/demo26.js b/demo/demo26.js index 566c3ea419..e88469c48b 100644 --- a/demo/demo26.js +++ b/demo/demo26.js @@ -10,14 +10,11 @@ let paragraph = new docx.Paragraph("No border!"); doc.addParagraph(paragraph); -let borderParagraph = new docx.Paragraph("I have a border on all but one side!"); -console.log(borderParagraph.Borders); +let borderParagraph = new docx.Paragraph("I have borders on my top and bottom sides!").createBorder(); borderParagraph.Borders.addTopBorder(); borderParagraph.Borders.addBottomBorder(); -borderParagraph.Borders.addLeftBorder(); -console.log(borderParagraph.Borders); doc.addParagraph(borderParagraph); let exporter = new docx.LocalPacker(doc); -exporter.packPdf('My Document'); \ No newline at end of file +exporter.pack('My Document'); \ No newline at end of file diff --git a/src/file/paragraph/formatting/border.ts b/src/file/paragraph/formatting/border.ts index 5a07774024..f37854a3c7 100644 --- a/src/file/paragraph/formatting/border.ts +++ b/src/file/paragraph/formatting/border.ts @@ -2,11 +2,12 @@ import { Attributes, XmlComponent } from "file/xml-components"; class BorderProperty extends XmlComponent { - public setProperties(space: string, value: string, size: string): XmlComponent { + public setProperties(color: string, space: string, value: string, size: string): XmlComponent { const attrs = new Attributes({ + color: color, space: space, val: value, - sz: size + sz: size, }); this.root.push(attrs); @@ -19,33 +20,33 @@ export class Border extends XmlComponent { super("w:pBdr"); } - public addTopBorder(space: string = "1", value: string = "single", size: string = "6"): XmlComponent { + public addTopBorder(color: string = "auto", space: string = "1", value: string = "single", size: string = "6"): XmlComponent { const top = new BorderProperty("w:top"); - top.setProperties(space, value, size); + top.setProperties(color, space, value, size); this.root.push(top); return this; } - public addBottomBorder(space: string = "1", value: string = "single", size: string = "6"): XmlComponent { + public addBottomBorder(color: string = "auto", space: string = "1", value: string = "single", size: string = "6"): XmlComponent { const bottom = new BorderProperty("w:bottom"); - bottom.setProperties(space, value, size); + bottom.setProperties(color, space, value, size); this.root.push(bottom); return this; } - public addLeftBorder(space: string = "1", value: string = "single", size: string = "6"): XmlComponent { + public addLeftBorder(color: string = "auto", space: string = "1", value: string = "single", size: string = "6"): XmlComponent { const left = new BorderProperty("w:left"); - left.setProperties(space, value, size); + left.setProperties(color, space, value, size); this.root.push(left); return this; } - public addRightBorder(space: string = "1", value: string = "single", size: string = "6"): XmlComponent { + public addRightBorder(color: string = "auto", space: string = "1", value: string = "single", size: string = "6"): XmlComponent { const right = new BorderProperty("w:right"); - right.setProperties(space, value, size); + right.setProperties(color, space, value, size); this.root.push(right); return this; @@ -56,6 +57,7 @@ export class ThematicBreak extends XmlComponent { constructor() { super("w:pBdr"); const bottom = new BorderProperty("w:bottom"); + bottom.setProperties("auto", "1", "single", "6"); this.root.push(bottom); } } diff --git a/src/file/paragraph/paragraph.spec.ts b/src/file/paragraph/paragraph.spec.ts index e00fa6167c..2413769b1e 100644 --- a/src/file/paragraph/paragraph.spec.ts +++ b/src/file/paragraph/paragraph.spec.ts @@ -144,6 +144,51 @@ describe("Paragraph", () => { }); }); + describe("#paragraphBorders()", () => { + it("should add a left and right border to a paragraph", () => { + paragraph.createBorder(); + paragraph.Borders.addLeftBorder(); + paragraph.Borders.addRightBorder(); + const tree = new Formatter().format(paragraph); + expect(tree).to.deep.equal({ + "w:p": [ + { + "w:pPr": [ + { + "w:pBdr": [ + { + "w:left": [ + { + _attr: { + "w:color": "auto", + "w:space": "1", + "w:sz": "6", + "w:val": "single", + }, + }, + ], + }, + { + "w:right": [ + { + _attr: { + "w:color": "auto", + "w:space": "1", + "w:sz": "6", + "w:val": "single", + }, + }, + ], + }, + ], + }, + ], + }, + ], + }); + }); + }); + describe("#pageBreak()", () => { it("should add page break to JSON", () => { paragraph.pageBreak(); diff --git a/src/file/paragraph/paragraph.ts b/src/file/paragraph/paragraph.ts index 45693f3cf5..70b8ea9064 100644 --- a/src/file/paragraph/paragraph.ts +++ b/src/file/paragraph/paragraph.ts @@ -6,7 +6,7 @@ import { XmlComponent } from "file/xml-components"; import { Alignment } from "./formatting/alignment"; import { Bidirectional } from "./formatting/bidirectional"; -import { ThematicBreak, Border } from "./formatting/border"; +import { Border, ThematicBreak } from "./formatting/border"; import { Indent } from "./formatting/indent"; import { KeepLines, KeepNext } from "./formatting/keep"; import { PageBreak, PageBreakBefore } from "./formatting/page-break"; @@ -34,6 +34,11 @@ export class Paragraph extends XmlComponent { return this.properties.paragraphBorder; } + public createBorder(): Paragraph { + this.properties.createBorder(); + return this; + } + public addRun(run: Run): Paragraph { this.root.push(run); return this; diff --git a/src/file/paragraph/properties.ts b/src/file/paragraph/properties.ts index a006c40d27..5f0c651246 100644 --- a/src/file/paragraph/properties.ts +++ b/src/file/paragraph/properties.ts @@ -4,10 +4,13 @@ import { Border } from "./formatting/border"; export class ParagraphProperties extends XmlComponent { public paragraphBorder: Border; - + constructor() { super("w:pPr"); this.paragraphBorder = new Border(); + } + + public createBorder(): void { this.push(this.paragraphBorder); }