Merge pull request #697 from devoidfury/master

Add defaultStyles option to overwrite the core default styles
This commit is contained in:
Dolan
2020-11-30 23:58:42 +00:00
committed by GitHub
5 changed files with 53 additions and 60 deletions

View File

@ -18,13 +18,8 @@ import {
const doc = new Document({ const doc = new Document({
styles: { styles: {
paragraphStyles: [ default: {
{ heading1: {
id: "Heading1",
name: "Heading 1",
basedOn: "Normal",
next: "Normal",
quickFormat: true,
run: { run: {
font: "Calibri", font: "Calibri",
size: 52, size: 52,
@ -40,12 +35,7 @@ const doc = new Document({
spacing: { line: 340 }, spacing: { line: 340 },
}, },
}, },
{ heading2: {
id: "Heading2",
name: "Heading 2",
basedOn: "Normal",
next: "Normal",
quickFormat: true,
run: { run: {
font: "Calibri", font: "Calibri",
size: 26, size: 26,
@ -55,12 +45,7 @@ const doc = new Document({
spacing: { line: 340 }, spacing: { line: 340 },
}, },
}, },
{ heading3: {
id: "Heading3",
name: "Heading 3",
basedOn: "Normal",
next: "Normal",
quickFormat: true,
run: { run: {
font: "Calibri", font: "Calibri",
size: 26, size: 26,
@ -70,12 +55,7 @@ const doc = new Document({
spacing: { line: 276 }, spacing: { line: 276 },
}, },
}, },
{ heading4: {
id: "Heading4",
name: "Heading 4",
basedOn: "Normal",
next: "Normal",
quickFormat: true,
run: { run: {
font: "Calibri", font: "Calibri",
size: 26, size: 26,
@ -85,6 +65,8 @@ const doc = new Document({
alignment: AlignmentType.JUSTIFIED, alignment: AlignmentType.JUSTIFIED,
}, },
}, },
},
paragraphStyles: [
{ {
id: "normalPara", id: "normalPara",
name: "Normal Para", name: "Normal Para",
@ -139,12 +121,6 @@ const doc = new Document({
spacing: { line: 276, before: 20 * 72 * 0.1, after: 20 * 72 * 0.05 }, spacing: { line: 276, before: 20 * 72 * 0.1, after: 20 * 72 * 0.05 },
}, },
}, },
{
id: "ListParagraph",
name: "List Paragraph",
basedOn: "Normal",
quickFormat: true,
},
], ],
}, },
}); });

View File

@ -8,13 +8,8 @@ const doc = new Document({
title: "Sample Document", title: "Sample Document",
description: "A brief example of using docx", description: "A brief example of using docx",
styles: { styles: {
paragraphStyles: [ default: {
{ heading1: {
id: "Heading1",
name: "Heading 1",
basedOn: "Normal",
next: "Normal",
quickFormat: true,
run: { run: {
size: 28, size: 28,
bold: true, bold: true,
@ -27,12 +22,7 @@ const doc = new Document({
}, },
}, },
}, },
{ heading2: {
id: "Heading2",
name: "Heading 2",
basedOn: "Normal",
next: "Normal",
quickFormat: true,
run: { run: {
size: 26, size: 26,
bold: true, bold: true,
@ -48,6 +38,13 @@ const doc = new Document({
}, },
}, },
}, },
listParagraph: {
run: {
color: '#FF0000'
}
}
},
paragraphStyles: [
{ {
id: "aside", id: "aside",
name: "Aside", name: "Aside",
@ -75,12 +72,6 @@ const doc = new Document({
spacing: { line: 276, before: 20 * 72 * 0.1, after: 20 * 72 * 0.05 }, spacing: { line: 276, before: 20 * 72 * 0.1, after: 20 * 72 * 0.05 },
}, },
}, },
{
id: "ListParagraph",
name: "List Paragraph",
basedOn: "Normal",
quickFormat: true,
},
], ],
}, },
numbering: { numbering: {

View File

@ -106,7 +106,7 @@ export class File {
this.styles = stylesFactory.newInstance(options.externalStyles); this.styles = stylesFactory.newInstance(options.externalStyles);
} else if (options.styles) { } else if (options.styles) {
const stylesFactory = new DefaultStylesFactory(); const stylesFactory = new DefaultStylesFactory();
const defaultStyles = stylesFactory.newInstance(); const defaultStyles = stylesFactory.newInstance(options.styles.default);
this.styles = new Styles({ this.styles = new Styles({
...defaultStyles, ...defaultStyles,
...options.styles, ...options.styles,

View File

@ -1,7 +1,7 @@
import { DocumentAttributes } from "../document/document-attributes"; import { DocumentAttributes } from "../document/document-attributes";
import { IStylesOptions } from "./styles"; import { IStylesOptions } from "./styles";
import { DocumentDefaults } from "./defaults"; import { DocumentDefaults, IDocumentDefaultsOptions } from "./defaults";
import { import {
FootnoteReferenceStyle, FootnoteReferenceStyle,
FootnoteText, FootnoteText,
@ -13,12 +13,30 @@ import {
Heading5Style, Heading5Style,
Heading6Style, Heading6Style,
HyperlinkStyle, HyperlinkStyle,
IBaseCharacterStyleOptions,
IBaseParagraphStyleOptions,
ListParagraph, ListParagraph,
TitleStyle, TitleStyle,
} from "./style"; } from "./style";
export interface IDefaultStylesOptions {
readonly document?: IDocumentDefaultsOptions;
readonly title?: IBaseParagraphStyleOptions;
readonly heading1?: IBaseParagraphStyleOptions;
readonly heading2?: IBaseParagraphStyleOptions;
readonly heading3?: IBaseParagraphStyleOptions;
readonly heading4?: IBaseParagraphStyleOptions;
readonly heading5?: IBaseParagraphStyleOptions;
readonly heading6?: IBaseParagraphStyleOptions;
readonly listParagraph?: IBaseParagraphStyleOptions;
readonly hyperlink?: IBaseCharacterStyleOptions;
readonly footnoteReference?: IBaseCharacterStyleOptions;
readonly footnoteText?: IBaseParagraphStyleOptions;
readonly footnoteTextChar?: IBaseCharacterStyleOptions;
}
export class DefaultStylesFactory { export class DefaultStylesFactory {
public newInstance(): IStylesOptions { public newInstance(options: IDefaultStylesOptions = {}): IStylesOptions {
const documentAttributes = new DocumentAttributes({ const documentAttributes = new DocumentAttributes({
mc: "http://schemas.openxmlformats.org/markup-compatibility/2006", mc: "http://schemas.openxmlformats.org/markup-compatibility/2006",
r: "http://schemas.openxmlformats.org/officeDocument/2006/relationships", r: "http://schemas.openxmlformats.org/officeDocument/2006/relationships",
@ -30,51 +48,58 @@ export class DefaultStylesFactory {
return { return {
initialStyles: documentAttributes, initialStyles: documentAttributes,
importedStyles: [ importedStyles: [
new DocumentDefaults(), new DocumentDefaults(options.document),
new TitleStyle({ new TitleStyle({
run: { run: {
size: 56, size: 56,
}, },
...options.title,
}), }),
new Heading1Style({ new Heading1Style({
run: { run: {
color: "2E74B5", color: "2E74B5",
size: 32, size: 32,
}, },
...options.heading1,
}), }),
new Heading2Style({ new Heading2Style({
run: { run: {
color: "2E74B5", color: "2E74B5",
size: 26, size: 26,
}, },
...options.heading2,
}), }),
new Heading3Style({ new Heading3Style({
run: { run: {
color: "1F4D78", color: "1F4D78",
size: 24, size: 24,
}, },
...options.heading3,
}), }),
new Heading4Style({ new Heading4Style({
run: { run: {
color: "2E74B5", color: "2E74B5",
italics: true, italics: true,
}, },
...options.heading4,
}), }),
new Heading5Style({ new Heading5Style({
run: { run: {
color: "2E74B5", color: "2E74B5",
}, },
...options.heading5,
}), }),
new Heading6Style({ new Heading6Style({
run: { run: {
color: "1F4D78", color: "1F4D78",
}, },
...options.heading6,
}), }),
new ListParagraph({}), new ListParagraph(options.listParagraph || {}),
new HyperlinkStyle({}), new HyperlinkStyle(options.hyperlink || {}),
new FootnoteReferenceStyle({}), new FootnoteReferenceStyle(options.footnoteReference || {}),
new FootnoteText({}), new FootnoteText(options.footnoteText || {}),
new FootnoteTextChar({}), new FootnoteTextChar(options.footnoteTextChar || {}),
], ],
}; };
} }

View File

@ -1,11 +1,12 @@
import { IDefaultStylesOptions } from "file/styles/factory";
import { BaseXmlComponent, ImportedXmlComponent, XmlComponent } from "file/xml-components"; import { BaseXmlComponent, ImportedXmlComponent, XmlComponent } from "file/xml-components";
import { StyleForCharacter, StyleForParagraph } from "./style"; import { StyleForCharacter, StyleForParagraph } from "./style";
import { ICharacterStyleOptions } from "./style/character-style"; import { ICharacterStyleOptions } from "./style/character-style";
import { IParagraphStyleOptions } from "./style/paragraph-style"; import { IParagraphStyleOptions } from "./style/paragraph-style";
export * from "./border"; export * from "./border";
export interface IStylesOptions { export interface IStylesOptions {
readonly default?: IDefaultStylesOptions;
readonly initialStyles?: BaseXmlComponent; readonly initialStyles?: BaseXmlComponent;
readonly paragraphStyles?: IParagraphStyleOptions[]; readonly paragraphStyles?: IParagraphStyleOptions[];
readonly characterStyles?: ICharacterStyleOptions[]; readonly characterStyles?: ICharacterStyleOptions[];