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({
styles: {
paragraphStyles: [
{
id: "Heading1",
name: "Heading 1",
basedOn: "Normal",
next: "Normal",
quickFormat: true,
default: {
heading1: {
run: {
font: "Calibri",
size: 52,
@ -40,12 +35,7 @@ const doc = new Document({
spacing: { line: 340 },
},
},
{
id: "Heading2",
name: "Heading 2",
basedOn: "Normal",
next: "Normal",
quickFormat: true,
heading2: {
run: {
font: "Calibri",
size: 26,
@ -55,12 +45,7 @@ const doc = new Document({
spacing: { line: 340 },
},
},
{
id: "Heading3",
name: "Heading 3",
basedOn: "Normal",
next: "Normal",
quickFormat: true,
heading3: {
run: {
font: "Calibri",
size: 26,
@ -70,12 +55,7 @@ const doc = new Document({
spacing: { line: 276 },
},
},
{
id: "Heading4",
name: "Heading 4",
basedOn: "Normal",
next: "Normal",
quickFormat: true,
heading4: {
run: {
font: "Calibri",
size: 26,
@ -85,6 +65,8 @@ const doc = new Document({
alignment: AlignmentType.JUSTIFIED,
},
},
},
paragraphStyles: [
{
id: "normalPara",
name: "Normal Para",
@ -139,12 +121,6 @@ const doc = new Document({
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",
description: "A brief example of using docx",
styles: {
paragraphStyles: [
{
id: "Heading1",
name: "Heading 1",
basedOn: "Normal",
next: "Normal",
quickFormat: true,
default: {
heading1: {
run: {
size: 28,
bold: true,
@ -27,12 +22,7 @@ const doc = new Document({
},
},
},
{
id: "Heading2",
name: "Heading 2",
basedOn: "Normal",
next: "Normal",
quickFormat: true,
heading2: {
run: {
size: 26,
bold: true,
@ -48,6 +38,13 @@ const doc = new Document({
},
},
},
listParagraph: {
run: {
color: '#FF0000'
}
}
},
paragraphStyles: [
{
id: "aside",
name: "Aside",
@ -75,12 +72,6 @@ const doc = new Document({
spacing: { line: 276, before: 20 * 72 * 0.1, after: 20 * 72 * 0.05 },
},
},
{
id: "ListParagraph",
name: "List Paragraph",
basedOn: "Normal",
quickFormat: true,
},
],
},
numbering: {

View File

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

View File

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