diff --git a/ts/numbering/level.ts b/ts/numbering/level.ts index 02f0896f21..bc59625212 100644 --- a/ts/numbering/level.ts +++ b/ts/numbering/level.ts @@ -1,3 +1,4 @@ +import * as paragraph from "../docx/paragraph/formatting"; import { ParagraphProperties } from "../docx/paragraph/properties"; import { RunProperties } from "../docx/run/properties"; import { Attributes, XmlAttributeComponent, XmlComponent } from "../docx/xml-components"; @@ -86,4 +87,51 @@ export class Level extends XmlComponent { this.runProperties.push(property); return this; } + + // --------------------- Paragraph formatting ------------------------ // + + public center(): Level { + this.addParagraphProperty(new paragraph.Alignment("center")); + return this; + } + + public left(): Level { + this.addParagraphProperty(new paragraph.Alignment("left")); + return this; + } + + public right(): Level { + this.addParagraphProperty(new paragraph.Alignment("right")); + return this; + } + + public justified(): Level { + this.addParagraphProperty(new paragraph.Alignment("both")); + return this; + } + + public thematicBreak(): Level { + this.addParagraphProperty(new paragraph.ThematicBreak()); + return this; + } + + public maxRightTabStop(): Level { + this.addParagraphProperty(new paragraph.MaxRightTabStop()); + return this; + } + + public leftTabStop(position: number): Level { + this.addParagraphProperty(new paragraph.LeftTabStop(position)); + return this; + } + + public indent(left: number, hanging?: number): Level { + this.addParagraphProperty(new paragraph.Indent(left, hanging)); + return this; + } + + public spacing(params: paragraph.ISpacingProperties): Level { + this.addParagraphProperty(new paragraph.Spacing(params)); + return this; + }; } diff --git a/ts/tests/numberingTest.ts b/ts/tests/numberingTest.ts index 00bd6afb10..210cbe8a43 100644 --- a/ts/tests/numberingTest.ts +++ b/ts/tests/numberingTest.ts @@ -105,5 +105,122 @@ describe("AbstractNumbering", () => { expect(tree["w:lvl"]).to.include({ "w:numFmt": [{ _attr: { "w:val": "lowerLetter" } }] }); expect(tree["w:lvl"]).to.include({ "w:lvlText": [{ _attr: { "w:val": "%1)" } }] }); }); + + describe("formatting methods: paragraph properties", () => { + it("#indent", () => { + const abstractNumbering = new AbstractNumbering(1); + const level = abstractNumbering.createLevel(0, "lowerLetter", "%0.") + .indent(720); + const tree = new Formatter().format(level); + expect(tree["w:lvl"]).to.include({ + "w:pPr": [{"w:ind": [{_attr: {"w:left": 720}}]}], + }); + }); + + it("#spacing", () => { + const abstractNumbering = new AbstractNumbering(1); + const level = abstractNumbering.createLevel(0, "lowerLetter", "%0.") + .spacing({before: 50, after: 150}); + const tree = new Formatter().format(level); + expect(tree["w:lvl"]).to.include({ + "w:pPr": [ + {"w:spacing": [{_attr: {"w:before": 50, "w:after": 150}}]}, + ], + }); + }); + + it("#center", () => { + const abstractNumbering = new AbstractNumbering(1); + const level = abstractNumbering.createLevel(0, "lowerLetter", "%0.") + .center(); + const tree = new Formatter().format(level); + expect(tree["w:lvl"]).to.include({ + "w:pPr": [ + {"w:jc": [{_attr: {"w:val": "center"}}]}, + ], + }); + }); + + it("#left", () => { + const abstractNumbering = new AbstractNumbering(1); + const level = abstractNumbering.createLevel(0, "lowerRoman", "%0.", "left") + .left(); + const tree = new Formatter().format(level); + expect(tree["w:lvl"]).to.include({ + "w:pPr": [ + {"w:jc": [{_attr: {"w:val": "left"}}]}, + ], + }); + }); + + it("#right", () => { + const abstractNumbering = new AbstractNumbering(1); + const level = abstractNumbering.createLevel(0, "lowerRoman", "%0.") + .right(); + const tree = new Formatter().format(level); + expect(tree["w:lvl"]).to.include({ + "w:pPr": [ + {"w:jc": [{_attr: {"w:val": "right"}}]}, + ], + }); + }); + + it("#justified", () => { + const abstractNumbering = new AbstractNumbering(1); + const level = abstractNumbering.createLevel(0, "lowerRoman", "%0.") + .justified(); + const tree = new Formatter().format(level); + expect(tree["w:lvl"]).to.include({ + "w:pPr": [ + {"w:jc": [{_attr: {"w:val": "both"}}]}, + ], + }); + }); + + it("#thematicBreak", () => { + const abstractNumbering = new AbstractNumbering(1); + const level = abstractNumbering.createLevel(0, "lowerRoman", "%0.") + .thematicBreak(); + const tree = new Formatter().format(level); + expect(tree["w:lvl"]).to.include({ + "w:pPr": [ + {"w:pBdr": [{"w:bottom": [{_attr: { + "w:color": "auto", + "w:space": "1", + "w:val": "single", + "w:sz": "6", + }}]}]}, + ], + }); + }); + + it("#leftTabStop", () => { + const abstractNumbering = new AbstractNumbering(1); + const level = abstractNumbering.createLevel(0, "lowerRoman", "%0.") + .leftTabStop(1200); + const tree = new Formatter().format(level); + expect(tree["w:lvl"]).to.include({ + "w:pPr": [ + {"w:tabs": [ + {"w:tab": [{_attr: {"w:val": "left", "w:pos": 1200}}]}, + ]}, + ], + }); + }); + + it("#maxRightTabStop", () => { + const abstractNumbering = new AbstractNumbering(1); + const level = abstractNumbering.createLevel(0, "lowerRoman", "%0.") + .maxRightTabStop(); + const tree = new Formatter().format(level); + expect(tree["w:lvl"]).to.include({ + "w:pPr": [ + {"w:tabs": [ + {"w:tab": [{_attr: {"w:val": "right", "w:pos": 9026}}]}, + ]}, + ], + }); + }); + }); }); });