diff --git a/ts/numbering/abstract-numbering.ts b/ts/numbering/abstract-numbering.ts index 12bd98ee08..c0df59e0af 100644 --- a/ts/numbering/abstract-numbering.ts +++ b/ts/numbering/abstract-numbering.ts @@ -1,5 +1,7 @@ import {XmlComponent} from "../docx/xml-components"; import {XmlAttributeComponent} from "../docx/xml-components"; +import {Level} from "./level"; +import {MultiLevelType} from "./multi-level-type"; interface AbstractNumberingAttributesProperties { abstractNumId?: Number, @@ -18,11 +20,16 @@ class AbstractNumberingAttributes extends XmlAttributeComponent { export class AbstractNumbering extends XmlComponent { - constructor() { + constructor(id: number) { super("w:abstractNum"); this.root.push(new AbstractNumberingAttributes({ - abstractNumId: 0, + abstractNumId: id, restartNumberingAfterBreak: 0 })); + this.root.push(new MultiLevelType("hybridMultilevel")); + } + + addLevel(level: Level): void { + this.root.push(level); } } \ No newline at end of file diff --git a/ts/numbering/indent.ts b/ts/numbering/indent.ts new file mode 100644 index 0000000000..5835b4b777 --- /dev/null +++ b/ts/numbering/indent.ts @@ -0,0 +1,27 @@ +import {XmlComponent, XmlAttributeComponent} from "../docx/xml-components"; + +interface IndentAttributesProperties { + left: number; + hanging: number; +} + +class IndentAttributes extends XmlAttributeComponent { + + constructor(properties: IndentAttributesProperties) { + super({ + left: "w:left", + hanging: "w:hanging" + }, properties); + } +} + +export class Indent extends XmlComponent { + + constructor(left: number, hanging: number) { + super("w:ind"); + this.root.push(new IndentAttributes({ + left: left, + hanging: hanging + })); + } +} \ No newline at end of file diff --git a/ts/numbering/index.ts b/ts/numbering/index.ts index 4917561a41..17d1a998b0 100644 --- a/ts/numbering/index.ts +++ b/ts/numbering/index.ts @@ -1,7 +1,12 @@ -import {XmlComponent} from "../docx/xml-components"; +import {MultiPropertyXmlComponent} from "../docx/xml-components"; import {DocumentAttributes} from "../docx/document/document-attributes" +import {AbstractNumbering} from "./abstract-numbering"; +import {Level} from "./level"; +import {Indent} from "./indent"; +import {RunFonts} from "./run-fonts"; +import {Num} from "./num"; -export class Numbering extends XmlComponent { +export class Numbering extends MultiPropertyXmlComponent { constructor() { super("w:numbering"); @@ -24,5 +29,55 @@ export class Numbering extends XmlComponent { wps: "http://schemas.microsoft.com/office/word/2010/wordprocessingShape", Ignorable: "w14 w15 wp14" })); + + var abstractNumbering = new AbstractNumbering(0); + + var level0 = new Level(0, "bullet", "", "left"); + level0.addParagraphProperty(new Indent(720, 360)); + level0.addRunProperty(new RunFonts("Symbol", "default")); + abstractNumbering.addLevel(level0); + + var level1 = new Level(1, "bullet", "o", "left"); + level1.addParagraphProperty(new Indent(1440, 360)); + level1.addRunProperty(new RunFonts("Courier New", "default")); + abstractNumbering.addLevel(level1); + + var level2 = new Level(2, "bullet", "", "left"); + level2.addParagraphProperty(new Indent(2160, 360)); + level2.addRunProperty(new RunFonts("Wingdings", "default")); + abstractNumbering.addLevel(level2); + + var level3 = new Level(3, "bullet", "", "left"); + level3.addParagraphProperty(new Indent(2880, 360)); + level3.addRunProperty(new RunFonts("Symbol", "default")); + abstractNumbering.addLevel(level3); + + var level4 = new Level(4, "bullet", "o", "left"); + level4.addParagraphProperty(new Indent(3600, 360)); + level4.addRunProperty(new RunFonts("Courier New", "default")); + abstractNumbering.addLevel(level4); + + var level5 = new Level(5, "bullet", "", "left"); + level5.addParagraphProperty(new Indent(4320, 360)); + level5.addRunProperty(new RunFonts("Wingdings", "default")); + abstractNumbering.addLevel(level5); + + var level6 = new Level(6, "bullet", "", "left"); + level6.addParagraphProperty(new Indent(5040, 360)); + level6.addRunProperty(new RunFonts("Symbol", "default")); + abstractNumbering.addLevel(level6); + + var level7 = new Level(4, "bullet", "o", "left"); + level7.addParagraphProperty(new Indent(5760, 360)); + level7.addRunProperty(new RunFonts("Courier New", "default")); + abstractNumbering.addLevel(level7); + + var level8 = new Level(5, "bullet", "", "left"); + level8.addParagraphProperty(new Indent(6480, 360)); + level8.addRunProperty(new RunFonts("Wingdings", "default")); + abstractNumbering.addLevel(level8); + + this.root.push(abstractNumbering); + this.root.push(new Num(1, 0)); } } \ No newline at end of file diff --git a/ts/numbering/level.ts b/ts/numbering/level.ts index b6199f7758..554ab9f5ac 100644 --- a/ts/numbering/level.ts +++ b/ts/numbering/level.ts @@ -16,8 +16,6 @@ class LevelAttributes extends XmlAttributeComponent { tentative: "w15:tentative" }, properties); } - - properties } class Start extends XmlComponent { diff --git a/ts/numbering/multi-level-type.ts b/ts/numbering/multi-level-type.ts new file mode 100644 index 0000000000..4a0a291698 --- /dev/null +++ b/ts/numbering/multi-level-type.ts @@ -0,0 +1,11 @@ +import {XmlComponent, Attributes} from "../docx/xml-components"; + +export class MultiLevelType extends XmlComponent { + + constructor(value: string) { + super("w:multiLevelType"); + this.root.push(new Attributes({ + val: value + })); + } +} \ No newline at end of file diff --git a/ts/numbering/num.ts b/ts/numbering/num.ts new file mode 100644 index 0000000000..e5a861824e --- /dev/null +++ b/ts/numbering/num.ts @@ -0,0 +1,35 @@ +import {XmlComponent, Attributes, XmlAttributeComponent} from "../docx/xml-components"; + +class AbstractNumId extends XmlComponent { + + constructor(value: number) { + super("w:abstractNumId"); + this.root.push(new Attributes({ + val: value + })); + } +} + +interface NumAttributesProperties { + numId: number +} + +class NumAttributes extends XmlAttributeComponent { + + constructor(properties: NumAttributesProperties) { + super({ + numId: "w:numId" + }, properties); + } +} + +export class Num extends XmlComponent { + + constructor(numId: number, abstractNumId: number) { + super("w:num"); + this.root.push(new NumAttributes({ + numId: numId + })); + this.root.push(new AbstractNumId(abstractNumId)); + } +} \ No newline at end of file diff --git a/ts/numbering/run-fonts.ts b/ts/numbering/run-fonts.ts new file mode 100644 index 0000000000..6d1e95a547 --- /dev/null +++ b/ts/numbering/run-fonts.ts @@ -0,0 +1,29 @@ +import {XmlComponent, XmlAttributeComponent} from "../docx/xml-components"; + +interface RunFontAttributesProperties { + ascii: string; + hAnsi: string; + hint: string; +} + +class RunFontAttributes extends XmlAttributeComponent { + + constructor(properties: RunFontAttributesProperties) { + super({ + left: "w:left", + hanging: "w:hanging" + }, properties); + } +} + +export class RunFonts extends XmlComponent { + + constructor(ascii: string, hint: string) { + super("w:ind"); + this.root.push(new RunFontAttributes({ + ascii: ascii, + hAnsi: ascii, + hint: hint + })); + } +} \ No newline at end of file