diff --git a/ts/styles/style/attributes.ts b/ts/styles/style/attributes.ts deleted file mode 100644 index c6ec627404..0000000000 --- a/ts/styles/style/attributes.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { XmlAttributeComponent, XmlComponent } from "../../docx/xml-components"; - -interface IStyleAttributesProperties { - type?: string; - styleId?: string; - default?: string; - customStyle?: string; - val?: string; -} - -export class StyleAttributes extends XmlAttributeComponent { - private _attr: IStyleAttributesProperties; - - constructor(properties: IStyleAttributesProperties) { - super({ - type: "w:type", - styleId: "w:styleId", - default: "w:default", - customStyle: "w:customStyle", - val: "w:val", - }, properties); - } -} diff --git a/ts/styles/style/components.ts b/ts/styles/style/components.ts index 17751bb32a..596a112852 100644 --- a/ts/styles/style/components.ts +++ b/ts/styles/style/components.ts @@ -1,13 +1,22 @@ -import { XmlComponent } from "../../docx/xml-components"; -import { StyleAttributes } from "./attributes"; +import { XmlAttributeComponent, XmlComponent } from "../../docx/xml-components"; + +interface IComponentAttributes { + val: string; +} + +class ComponentAttributes extends XmlAttributeComponent { + private _attr: IComponentAttributes; + + constructor(properties: IComponentAttributes) { + super({val: "w:val"}, properties); + } +} export class Name extends XmlComponent { constructor(value: string) { super("w:name"); - this.root.push(new StyleAttributes({ - val: value, - })); + this.root.push(new ComponentAttributes({val: value})); } } @@ -15,9 +24,7 @@ export class BasedOn extends XmlComponent { constructor(value: string) { super("w:basedOn"); - this.root.push(new StyleAttributes({ - val: value, - })); + this.root.push(new ComponentAttributes({val: value})); } } @@ -25,10 +32,7 @@ export class Next extends XmlComponent { constructor(value: string) { super("w:next"); - this.root.push(new StyleAttributes({ - styleId: "1", - val: value, - })); + this.root.push(new ComponentAttributes({val: value})); } } @@ -36,9 +40,7 @@ export class Link extends XmlComponent { constructor(value: string) { super("w:link"); - this.root.push(new StyleAttributes({ - val: value, - })); + this.root.push(new ComponentAttributes({val: value})); } } @@ -46,9 +48,8 @@ export class UiPriority extends XmlComponent { constructor(value: string) { super("w:uiPriority"); - this.root.push(new StyleAttributes({ - val: value, - })); + // TODO: this value should be a ST_DecimalNumber + this.root.push(new ComponentAttributes({val: value})); } } diff --git a/ts/styles/style/index.ts b/ts/styles/style/index.ts index 6d916a1507..7730c039e3 100644 --- a/ts/styles/style/index.ts +++ b/ts/styles/style/index.ts @@ -1,15 +1,34 @@ import { ParagraphProperties } from "../../docx/paragraph/properties"; import { RunProperties } from "../../docx/run/properties"; -import { XmlComponent } from "../../docx/xml-components"; +import { XmlAttributeComponent, XmlComponent } from "../../docx/xml-components"; -import { StyleAttributes } from "./attributes"; import { BasedOn, Name, Next, QuickFormat } from "./components"; +export interface IStyleAttributes { + type?: string; + styleId?: string; + default?: boolean; + customStyle?: string; +} + +class StyleAttributes extends XmlAttributeComponent { + private _attr: IStyleAttributes; + + constructor(properties: IStyleAttributes) { + super({ + type: "w:type", + styleId: "w:styleId", + default: "w:default", + customStyle: "w:customStyle", + }, properties); + } +} + export class Style extends XmlComponent { - constructor(attributes: StyleAttributes) { + constructor(attributes: IStyleAttributes) { super("w:style"); - this.root.push(attributes); + this.root.push(new StyleAttributes(attributes)); } public push(styleSegment: XmlComponent): void { @@ -23,12 +42,7 @@ export class ParagraphStyle extends Style { private runProperties: RunProperties; constructor(styleId: string) { - - const attributes = new StyleAttributes({ - type: "paragraph", - styleId: styleId, - }); - super(attributes); + super({type: "paragraph", styleId: styleId}); this.paragraphProperties = new ParagraphProperties(); this.runProperties = new RunProperties(); this.root.push(this.paragraphProperties); diff --git a/ts/tests/stylesTest.ts b/ts/tests/stylesTest.ts index 06fc29e645..e448b3e2a1 100644 --- a/ts/tests/stylesTest.ts +++ b/ts/tests/stylesTest.ts @@ -1,5 +1,8 @@ -import { assert } from "chai"; +import { assert, expect } from "chai"; +import { Formatter } from "../export/formatter"; import { Styles } from "../styles"; +import { Style } from "../styles/style"; +import * as components from "../styles/style/components"; describe("Styles", () => { let styles: Styles; @@ -9,10 +12,59 @@ describe("Styles", () => { }); describe("#constructor()", () => { - it("should create styles with correct rootKey", () => { const newJson = JSON.parse(JSON.stringify(styles)); assert.equal(newJson.rootKey, "w:styles"); }); }); }); + +describe("Style", () => { + describe("#constructor()", () => { + it("should set the given properties", () => { + const style = new Style({ + type: "paragraph", + styleId: "myStyleId", + default: true, + }); + const tree = new Formatter().format(style); + expect(tree).to.deep.equal({ + "w:style": [ + {_attr: {"w:type": "paragraph", "w:styleId": "myStyleId", "w:default": true}}, + ], + }); + }); + }); +}); + +describe("Style components", () => { + it("Name#constructor", () => { + const style = new components.Name("Style Name"); + const tree = new Formatter().format(style); + expect(tree).to.deep.equal({"w:name": [{_attr: {"w:val": "Style Name"}}]}); + }); + + it("BasedOn#constructor", () => { + const style = new components.BasedOn("otherId"); + const tree = new Formatter().format(style); + expect(tree).to.deep.equal({"w:basedOn": [{_attr: {"w:val": "otherId"}}]}); + }); + + it("Next#constructor", () => { + const style = new components.Next("otherId"); + const tree = new Formatter().format(style); + expect(tree).to.deep.equal({"w:next": [{_attr: {"w:val": "otherId"}}]}); + }); + + it("Link#constructor", () => { + const style = new components.Link("otherId"); + const tree = new Formatter().format(style); + expect(tree).to.deep.equal({"w:link": [{_attr: {"w:val": "otherId"}}]}); + }); + + it("UiPriority#constructor", () => { + const style = new components.UiPriority("123"); + const tree = new Formatter().format(style); + expect(tree).to.deep.equal({"w:uiPriority": [{_attr: {"w:val": "123"}}]}); + }); +});