diff --git a/demo/2-declaritive-styles.ts b/demo/2-declaritive-styles.ts index 04502264a3..eaf39daffe 100644 --- a/demo/2-declaritive-styles.ts +++ b/demo/2-declaritive-styles.ts @@ -1,13 +1,13 @@ // Example on how to customise the look at feel using Styles // Import from 'docx' rather than '../build' if you install from npm import * as fs from "fs"; -import { Document, HeadingLevel, Packer, Paragraph, Styles, TextRun, UnderlineType } from "../build"; +import { Document, HeadingLevel, Packer, Paragraph, TextRun, UnderlineType } from "../build"; const doc = new Document({ creator: "Clippy", title: "Sample Document", description: "A brief example of using docx", - styles: new Styles({ + styles: { paragraphStyles: [ { id: "Heading1", @@ -81,7 +81,7 @@ const doc = new Document({ quickFormat: true, }, ], - }), + }, }); const numberedAbstract = doc.Numbering.createAbstractNumbering(); diff --git a/src/file/core-properties/properties.ts b/src/file/core-properties/properties.ts index 7d3e447523..a99c74d98f 100644 --- a/src/file/core-properties/properties.ts +++ b/src/file/core-properties/properties.ts @@ -1,6 +1,7 @@ import { XmlComponent } from "file/xml-components"; + import { DocumentAttributes } from "../document/document-attributes"; -import { Styles } from "../styles"; +import { IStylesOptions } from "../styles"; import { Created, Creator, Description, Keywords, LastModifiedBy, Modified, Revision, Subject, Title } from "./components"; export interface IPropertiesOptions { @@ -12,7 +13,7 @@ export interface IPropertiesOptions { readonly lastModifiedBy?: string; readonly revision?: string; readonly externalStyles?: string; - readonly styles?: Styles; + readonly styles?: IStylesOptions; } export class CoreProperties extends XmlComponent { diff --git a/src/file/file.ts b/src/file/file.ts index f68760328d..ccf5fe374c 100644 --- a/src/file/file.ts +++ b/src/file/file.ts @@ -97,10 +97,15 @@ export class File { const stylesFactory = new ExternalStylesFactory(); this.styles = stylesFactory.newInstance(options.externalStyles); } else if (options.styles) { - this.styles = options.styles; + const stylesFactory = new DefaultStylesFactory(); + const defaultStyles = stylesFactory.newInstance(); + this.styles = new Styles({ + ...defaultStyles, + ...options.styles, + }); } else { const stylesFactory = new DefaultStylesFactory(); - this.styles = stylesFactory.newInstance(); + this.styles = new Styles(stylesFactory.newInstance()); } this.addDefaultRelationships(); diff --git a/src/file/styles/factory.ts b/src/file/styles/factory.ts index d43f46b732..f5bca8248d 100644 --- a/src/file/styles/factory.ts +++ b/src/file/styles/factory.ts @@ -1,5 +1,5 @@ import { DocumentAttributes } from "../document/document-attributes"; -import { Styles } from "./styles"; +import { IStylesOptions } from "./styles"; import { DocumentDefaults } from "./defaults"; import { @@ -18,7 +18,7 @@ import { } from "./style"; export class DefaultStylesFactory { - public newInstance(): Styles { + public newInstance(): IStylesOptions { const documentAttributes = new DocumentAttributes({ mc: "http://schemas.openxmlformats.org/markup-compatibility/2006", r: "http://schemas.openxmlformats.org/officeDocument/2006/relationships", @@ -27,7 +27,7 @@ export class DefaultStylesFactory { w15: "http://schemas.microsoft.com/office/word/2012/wordml", Ignorable: "w14 w15", }); - const styles = new Styles({ + return { initialStyles: documentAttributes, importedStyles: [ new DocumentDefaults(), @@ -76,9 +76,6 @@ export class DefaultStylesFactory { new FootnoteText({}), new FootnoteTextChar({}), ], - }); - styles.createDocumentDefaults(); - - return styles; + }; } } diff --git a/src/file/styles/styles.ts b/src/file/styles/styles.ts index 6e5baa8f2a..064411e419 100644 --- a/src/file/styles/styles.ts +++ b/src/file/styles/styles.ts @@ -1,12 +1,11 @@ import { BaseXmlComponent, ImportedXmlComponent, XmlComponent } from "file/xml-components"; -import { DocumentDefaults } from "./defaults"; import { CharacterStyle, ParagraphStyle } from "./style"; import { ICharacterStyleOptions } from "./style/character-style"; import { IParagraphStyleOptions } from "./style/paragraph-style"; export * from "./border"; -interface IStylesOptions { +export interface IStylesOptions { readonly initialStyles?: BaseXmlComponent; readonly paragraphStyles?: IParagraphStyleOptions[]; readonly characterStyles?: ICharacterStyleOptions[]; @@ -21,6 +20,12 @@ export class Styles extends XmlComponent { this.root.push(options.initialStyles); } + if (options.importedStyles) { + for (const style of options.importedStyles) { + this.root.push(style); + } + } + if (options.paragraphStyles) { for (const style of options.paragraphStyles) { this.root.push(new ParagraphStyle(style)); @@ -32,17 +37,5 @@ export class Styles extends XmlComponent { this.root.push(new CharacterStyle(style)); } } - - if (options.importedStyles) { - for (const style of options.importedStyles) { - this.root.push(style); - } - } - } - - public createDocumentDefaults(): DocumentDefaults { - const defaults = new DocumentDefaults(); - this.root.push(defaults); - return defaults; } }