From 89e2129ca4693875611c99ce3afa9fb990ac4642 Mon Sep 17 00:00:00 2001 From: Igor Bulovski Date: Thu, 21 Jun 2018 14:50:50 +0200 Subject: [PATCH 01/11] Version bump --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2a6ec009e3..c46e7b1713 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "docx-h4", - "version": "3.2.11", + "version": "3.3.0", "description": "Generate .docx documents with JavaScript (formerly Office-Clippy)", "main": "build/index.js", "scripts": { From 9d3b32a8411863510e35ca7a4415d40c8b933b94 Mon Sep 17 00:00:00 2001 From: Igor Bulovski Date: Mon, 25 Jun 2018 12:53:25 +0200 Subject: [PATCH 02/11] fix: fixed wrong import causing exported SectionProperties class to be unusable --- src/file/document/body/body.ts | 2 +- src/file/document/document.ts | 2 +- src/file/file.ts | 3 +-- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/file/document/body/body.ts b/src/file/document/body/body.ts index 691dfd7518..549ba86f97 100644 --- a/src/file/document/body/body.ts +++ b/src/file/document/body/body.ts @@ -1,5 +1,5 @@ import { XmlComponent, IXmlableObject } from "file/xml-components"; -import { SectionProperties, SectionPropertiesOptions } from "./section-properties/section-properties"; +import { SectionProperties, SectionPropertiesOptions } from "./section-properties"; import { Paragraph, ParagraphProperties } from "../.."; export class Body extends XmlComponent { diff --git a/src/file/document/document.ts b/src/file/document/document.ts index a71bcbffe9..6dbb4decdf 100644 --- a/src/file/document/document.ts +++ b/src/file/document/document.ts @@ -4,7 +4,7 @@ import { XmlComponent } from "file/xml-components"; import { Paragraph, PictureRun } from "../paragraph"; import { Table } from "../table"; import { Body } from "./body"; -import { SectionPropertiesOptions } from "./body/section-properties/section-properties"; +import { SectionPropertiesOptions } from "./body/section-properties"; import { DocumentAttributes } from "./document-attributes"; export class Document extends XmlComponent { diff --git a/src/file/file.ts b/src/file/file.ts index a42e542e33..e805b10ade 100644 --- a/src/file/file.ts +++ b/src/file/file.ts @@ -2,7 +2,6 @@ import { AppProperties } from "./app-properties/app-properties"; import { ContentTypes } from "./content-types/content-types"; import { CoreProperties, IPropertiesOptions } from "./core-properties"; import { Document } from "./document"; -import { SectionPropertiesOptions } from "./document/body/section-properties/section-properties"; import { FooterWrapper } from "./footer-wrapper"; import { HeaderWrapper } from "./header-wrapper"; import { Media } from "./media"; @@ -14,7 +13,7 @@ import { DefaultStylesFactory } from "./styles/factory"; import { ExternalStylesFactory } from "./styles/external-styles-factory"; import { Table } from "./table"; import { IMediaData } from "index"; -import { FooterReferenceType, HeaderReferenceType } from "./document/body/section-properties"; +import { FooterReferenceType, HeaderReferenceType, SectionPropertiesOptions } from "./document/body/section-properties"; export class File { private readonly document: Document; From 52007785afdb6f1e718fa6cb120839540231c743 Mon Sep 17 00:00:00 2001 From: Igor Bulovski Date: Mon, 25 Jun 2018 12:54:36 +0200 Subject: [PATCH 03/11] version bump --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c46e7b1713..446427e152 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "docx-h4", - "version": "3.3.0", + "version": "3.3.1", "description": "Generate .docx documents with JavaScript (formerly Office-Clippy)", "main": "build/index.js", "scripts": { From ed72d60951288e03eab5a08c154ea0243eb3b09a Mon Sep 17 00:00:00 2001 From: Igor Bulovski Date: Wed, 27 Jun 2018 21:55:15 +0200 Subject: [PATCH 04/11] external-styles: create correct XmlComponents from imported style --- .../styles/external-styles-factory.spec.ts | 69 ++++++++++++++++++- src/file/styles/external-styles-factory.ts | 9 ++- 2 files changed, 75 insertions(+), 3 deletions(-) diff --git a/src/file/styles/external-styles-factory.spec.ts b/src/file/styles/external-styles-factory.spec.ts index 861a6f05d8..e34bfbaa8d 100644 --- a/src/file/styles/external-styles-factory.spec.ts +++ b/src/file/styles/external-styles-factory.spec.ts @@ -10,6 +10,17 @@ describe("External styles factory", () => { + + + + + + + + + + + @@ -52,7 +63,63 @@ describe("External styles factory", () => { expect(importedStyle.root.length).to.equal(5); expect(importedStyle.root[1]).to.eql({ deleted: false, - root: [], + root: [ + { + deleted: false, + root: [ + { + deleted: false, + root: [ + { + _attr: { + "w:ascii": "Arial", + "w:cstheme": "minorHAnsi", + "w:eastAsiaTheme": "minorHAnsi", + "w:hAnsi": "Arial", + }, + deleted: false, + root: [], + rootKey: "w:rFonts", + }, + { + _attr: { + "w:bidi": "ar-SA", + "w:eastAsia": "en-US", + "w:val": "en-US", + }, + deleted: false, + root: [], + rootKey: "w:lang", + }, + ], + rootKey: "w:rPr", + }, + ], + rootKey: "w:rPrDefault", + }, + { + deleted: false, + root: [ + { + deleted: false, + root: [ + { + _attr: { + "w:after": "160", + "w:line": "259", + "w:lineRule": "auto", + }, + deleted: false, + root: [], + rootKey: "w:spacing", + }, + ], + rootKey: "w:pPr", + }, + ], + rootKey: "w:pPrDefault", + }, + ], rootKey: "w:docDefaults", }); expect(importedStyle.root[2]).to.eql({ diff --git a/src/file/styles/external-styles-factory.ts b/src/file/styles/external-styles-factory.ts index 9757faf8d9..7f54f03d4e 100644 --- a/src/file/styles/external-styles-factory.ts +++ b/src/file/styles/external-styles-factory.ts @@ -1,6 +1,6 @@ import { Styles } from "./"; import * as fastXmlParser from "fast-xml-parser"; -import { ImportedXmlComponent, ImportedRootElementAttributes, parseOptions, convertToXmlComponent } from "./../../file/xml-components"; +import { ImportedRootElementAttributes, parseOptions, convertToXmlComponent } from "./../../file/xml-components"; export class ExternalStylesFactory { /** @@ -34,7 +34,12 @@ export class ExternalStylesFactory { Object.keys(xmlStyles) .filter((element) => element !== "_attr" && element !== "w:style") .forEach((element) => { - importedStyle.push(new ImportedXmlComponent(element, xmlStyles[element]._attr)); + const converted = convertToXmlComponent(element, xmlStyles[element]); + if (Array.isArray(converted)) { + converted.forEach((c) => importedStyle.push(c)); + } else { + importedStyle.push(converted); + } }); // convert the styles one by one From 55220c147db53afe3eab7a44e56452743b1fa0f6 Mon Sep 17 00:00:00 2001 From: Igor Bulovski Date: Wed, 27 Jun 2018 22:10:11 +0200 Subject: [PATCH 05/11] version bump --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 446427e152..6cb05a6fb8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "docx-h4", - "version": "3.3.1", + "version": "3.3.2", "description": "Generate .docx documents with JavaScript (formerly Office-Clippy)", "main": "build/index.js", "scripts": { From c797ed9c2570a876a54b251728cc1b8061c23110 Mon Sep 17 00:00:00 2001 From: Igor Bulovski Date: Fri, 29 Jun 2018 00:32:01 +0200 Subject: [PATCH 06/11] media: fixed bug when media size can be decimal - produces invalid docx document --- src/file/media/media.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/file/media/media.ts b/src/file/media/media.ts index 7f384f9f98..99a193e88c 100644 --- a/src/file/media/media.ts +++ b/src/file/media/media.ts @@ -23,8 +23,8 @@ export class Media { y: dimensions.height, }, emus: { - x: dimensions.width * 9525, - y: dimensions.height * 9525, + x: Math.round(dimensions.width * 9525), + y: Math.round(dimensions.height * 9525), }, }, }; From 612a2f90ac3910b17aec2a0afb96f9e45754b6a5 Mon Sep 17 00:00:00 2001 From: Igor Bulovski Date: Fri, 29 Jun 2018 16:31:25 +0200 Subject: [PATCH 07/11] version bump --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6cb05a6fb8..1116182ac4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "docx-h4", - "version": "3.3.2", + "version": "3.3.3", "description": "Generate .docx documents with JavaScript (formerly Office-Clippy)", "main": "build/index.js", "scripts": { From 796e0008261e14f0049e9a599ac0a10f9c2edd22 Mon Sep 17 00:00:00 2001 From: Igor Bulovski Date: Tue, 3 Jul 2018 13:48:31 +0200 Subject: [PATCH 08/11] feature: add support for section page borders --- .../document/body/section-properties/index.ts | 1 + .../section-properties/page-border/index.ts | 1 + .../page-border/page-borders.spec.ts | 91 ++++++++++++++++++ .../page-border/page-borders.ts | 94 +++++++++++++++++++ .../section-properties.spec.ts | 15 ++- .../section-properties/section-properties.ts | 28 +++++- src/file/styles/border/border-style.ts | 29 ++++++ src/file/styles/border/index.ts | 1 + src/file/styles/index.ts | 1 + src/file/table/table-cell.spec.ts | 3 +- src/file/table/table-cell.ts | 31 +----- 11 files changed, 261 insertions(+), 34 deletions(-) create mode 100644 src/file/document/body/section-properties/page-border/index.ts create mode 100644 src/file/document/body/section-properties/page-border/page-borders.spec.ts create mode 100644 src/file/document/body/section-properties/page-border/page-borders.ts create mode 100644 src/file/styles/border/border-style.ts create mode 100644 src/file/styles/border/index.ts diff --git a/src/file/document/body/section-properties/index.ts b/src/file/document/body/section-properties/index.ts index f1b5eabb84..cab88ac7c7 100644 --- a/src/file/document/body/section-properties/index.ts +++ b/src/file/document/body/section-properties/index.ts @@ -3,3 +3,4 @@ export * from "./footer-reference"; export * from "./header-reference"; export * from "./page-size"; export * from "./page-number"; +export * from "./page-border"; diff --git a/src/file/document/body/section-properties/page-border/index.ts b/src/file/document/body/section-properties/page-border/index.ts new file mode 100644 index 0000000000..53d8b8ce4b --- /dev/null +++ b/src/file/document/body/section-properties/page-border/index.ts @@ -0,0 +1 @@ +export * from "./page-borders"; diff --git a/src/file/document/body/section-properties/page-border/page-borders.spec.ts b/src/file/document/body/section-properties/page-border/page-borders.spec.ts new file mode 100644 index 0000000000..782280f292 --- /dev/null +++ b/src/file/document/body/section-properties/page-border/page-borders.spec.ts @@ -0,0 +1,91 @@ +import { expect } from "chai"; + +import { Formatter } from "../../../../../export/formatter"; +import { PageBorders, PageBorderDisplay, PageBorderZOrder } from "./page-borders"; +import { BorderStyle } from "../../../../styles"; + +describe("PageBorders", () => { + describe("#constructor()", () => { + it("should create empty element when no options are passed", () => { + const properties = new PageBorders(); + const tree = new Formatter().format(properties); + + expect(tree).to.equal(""); + }); + + it("should create page borders with some configuration", () => { + const properties = new PageBorders({ + pageBorders: { + display: PageBorderDisplay.FIRST_PAGE, + }, + }); + const tree = new Formatter().format(properties); + + expect(Object.keys(tree)).to.deep.equal(["w:pgBorders"]); + expect(tree["w:pgBorders"]).to.be.an.instanceof(Array); + expect(tree["w:pgBorders"][0]).to.deep.equal({ _attr: { "w:display": "firstPage" } }); + }); + + it("should create page borders with full configuration", () => { + const properties = new PageBorders({ + pageBorders: { + display: PageBorderDisplay.FIRST_PAGE, + zOrder: PageBorderZOrder.BACK, + }, + pageBorderTop: { + style: BorderStyle.DOUBLE_WAVE, + size: 10, + color: "001122", + }, + pageBorderRight: { + style: BorderStyle.DOUBLE, + size: 20, + color: "223344", + }, + pageBorderBottom: { + style: BorderStyle.SINGLE, + size: 30, + color: "556677", + }, + pageBorderLeft: { + style: BorderStyle.DOTTED, + size: 40, + color: "889900", + }, + }); + const tree = new Formatter().format(properties); + + expect(Object.keys(tree)).to.deep.equal(["w:pgBorders"]); + expect(tree["w:pgBorders"]).to.be.an.instanceof(Array); + expect(tree["w:pgBorders"][0]).to.deep.equal({ _attr: { "w:display": "firstPage", "w:zOrder": "back" } }); + expect(tree["w:pgBorders"][1]).to.deep.equal({ + "w:top": [ + { + _attr: { "w:color": "001122", "w:size": 10, "w:val": "doubleWave" }, + }, + ], + }); + expect(tree["w:pgBorders"][2]).to.deep.equal({ + "w:right": [ + { + _attr: { "w:color": "223344", "w:size": 20, "w:val": "double" }, + }, + ], + }); + expect(tree["w:pgBorders"][3]).to.deep.equal({ + "w:bottom": [ + { + _attr: { "w:color": "556677", "w:size": 30, "w:val": "single" }, + }, + ], + }); + expect(tree["w:pgBorders"][4]).to.deep.equal({ + "w:left": [ + { + _attr: { "w:color": "889900", "w:size": 40, "w:val": "dotted" }, + }, + ], + }); + }); + }); +}); diff --git a/src/file/document/body/section-properties/page-border/page-borders.ts b/src/file/document/body/section-properties/page-border/page-borders.ts new file mode 100644 index 0000000000..88b6ce98dd --- /dev/null +++ b/src/file/document/body/section-properties/page-border/page-borders.ts @@ -0,0 +1,94 @@ +// http://officeopenxml.com/WPsectionBorders.php +import { XmlComponent, XmlAttributeComponent, IXmlableObject } from "file/xml-components"; +import { BorderStyle } from "../../../../styles"; + +export enum PageBorderDisplay { + ALL_PAGES = "allPages", + FIRST_PAGE = "firstPage", + NOT_FIRST_PAGE = "notFirstPage", +} + +export enum PageBorderOffsetFrom { + PAGE = "page", + TEXT = "text", +} + +export enum PageBorderZOrder { + BACK = "back", + FRONT = "front", +} + +export interface IPageBorderAttributes { + display?: PageBorderDisplay; + offsetFrom?: PageBorderOffsetFrom; + zOrder?: PageBorderZOrder; +} + +export interface PageBorderConfiguration { + style?: BorderStyle; + size?: number; + color?: string; + space?: number; +} + +export type PageBordersOptions = { + pageBorders?: IPageBorderAttributes; + pageBorderTop?: PageBorderConfiguration; + pageBorderRight?: PageBorderConfiguration; + pageBorderBottom?: PageBorderConfiguration; + pageBorderLeft?: PageBorderConfiguration; +}; + +class PageBordeAttributes extends XmlAttributeComponent { + protected xmlKeys = { + style: "w:val", + size: "w:size", + color: "w:color", + space: "w:space", + }; +} + +class PageBorder extends XmlComponent { + constructor(key: string, options: PageBorderConfiguration) { + super(key); + + this.root.push(new PageBordeAttributes(options)); + } +} + +class PageBordersAttributes extends XmlAttributeComponent { + protected xmlKeys = { + display: "w:display", + offsetFrom: "w:offsetFrom", + zOrder: "w:zOrder", + }; +} + +export class PageBorders extends XmlComponent { + constructor(options?: PageBordersOptions) { + super("w:pgBorders"); + + if (!options) return; + + let pageBordersAttributes = {}; + + if (options.pageBorders) { + pageBordersAttributes = { + display: options.pageBorders.display, + offsetFrom: options.pageBorders.offsetFrom, + zOrder: options.pageBorders.zOrder, + }; + } + + this.root.push(new PageBordersAttributes(pageBordersAttributes)); + + if (options.pageBorderTop) this.root.push(new PageBorder("w:top", options.pageBorderTop)); + if (options.pageBorderRight) this.root.push(new PageBorder("w:right", options.pageBorderRight)); + if (options.pageBorderBottom) this.root.push(new PageBorder("w:bottom", options.pageBorderBottom)); + if (options.pageBorderLeft) this.root.push(new PageBorder("w:left", options.pageBorderLeft)); + } + + public prepForXml(): IXmlableObject { + return this.root.length > 0 ? super.prepForXml() : ""; + } +} diff --git a/src/file/document/body/section-properties/section-properties.spec.ts b/src/file/document/body/section-properties/section-properties.spec.ts index 05a49d09d9..b2499bbd63 100644 --- a/src/file/document/body/section-properties/section-properties.spec.ts +++ b/src/file/document/body/section-properties/section-properties.spec.ts @@ -2,7 +2,7 @@ import { expect } from "chai"; import { Formatter } from "../../../../export/formatter"; import { SectionProperties } from "./section-properties"; -import { FooterReferenceType, PageNumberFormat } from "."; +import { FooterReferenceType, PageNumberFormat, PageBorderOffsetFrom } from "."; describe("SectionProperties", () => { describe("#constructor()", () => { @@ -155,5 +155,18 @@ describe("SectionProperties", () => { ], }); }); + + it("should create section properties with page borders", () => { + const properties = new SectionProperties({ + pageBorders: { + offsetFrom: PageBorderOffsetFrom.PAGE, + }, + }); + const tree = new Formatter().format(properties); + expect(Object.keys(tree)).to.deep.equal(["w:sectPr"]); + expect(tree["w:sectPr"][7]).to.deep.equal({ + "w:pgBorders": [{ _attr: { "w:offsetFrom": "page" } }], + }); + }); }); }); diff --git a/src/file/document/body/section-properties/section-properties.ts b/src/file/document/body/section-properties/section-properties.ts index 993812bd5e..bb7a36746c 100644 --- a/src/file/document/body/section-properties/section-properties.ts +++ b/src/file/document/body/section-properties/section-properties.ts @@ -10,7 +10,7 @@ import { PageMargin } from "./page-margin/page-margin"; import { IPageMarginAttributes } from "./page-margin/page-margin-attributes"; import { PageSize } from "./page-size/page-size"; import { IPageSizeAttributes, PageOrientation } from "./page-size/page-size-attributes"; -import { FooterReferenceType, IPageNumberTypeAttributes, PageNumberType, PageNumberFormat } from "."; +import { FooterReferenceType, IPageNumberTypeAttributes, PageNumberType, PageNumberFormat, PageBordersOptions, PageBorders } from "."; import { HeaderReferenceType } from "./header-reference/header-reference-attributes"; export type SectionPropertiesOptions = IPageSizeAttributes & @@ -19,7 +19,8 @@ export type SectionPropertiesOptions = IPageSizeAttributes & IDocGridAttributesProperties & HeaderOptions & FooterOptions & - IPageNumberTypeAttributes; + IPageNumberTypeAttributes & + PageBordersOptions; export class SectionProperties extends XmlComponent { private options: SectionPropertiesOptions; @@ -45,6 +46,11 @@ export class SectionProperties extends XmlComponent { footerId: 0, pageNumberStart: undefined, pageNumberFormatType: PageNumberFormat.DECIMAL, + pageBorders: undefined, + pageBorderTop: undefined, + pageBorderRight: undefined, + pageBorderBottom: undefined, + pageBorderLeft: undefined, }; const mergedOptions = { @@ -81,6 +87,24 @@ export class SectionProperties extends XmlComponent { this.root.push(new PageNumberType(mergedOptions.pageNumberStart, mergedOptions.pageNumberFormatType)); + if ( + mergedOptions.pageBorders || + mergedOptions.pageBorderTop || + mergedOptions.pageBorderRight || + mergedOptions.pageBorderBottom || + mergedOptions.pageBorderLeft + ) { + this.root.push( + new PageBorders({ + pageBorders: mergedOptions.pageBorders, + pageBorderTop: mergedOptions.pageBorderTop, + pageBorderRight: mergedOptions.pageBorderRight, + pageBorderBottom: mergedOptions.pageBorderBottom, + pageBorderLeft: mergedOptions.pageBorderLeft, + }), + ); + } + this.options = mergedOptions; } diff --git a/src/file/styles/border/border-style.ts b/src/file/styles/border/border-style.ts new file mode 100644 index 0000000000..00f4117d31 --- /dev/null +++ b/src/file/styles/border/border-style.ts @@ -0,0 +1,29 @@ +export enum BorderStyle { + SINGLE = "single", + DASH_DOT_STROKED = "dashDotStroked", + DASHED = "dashed", + DASH_SMALL_GAP = "dashSmallGap", + DOT_DASH = "dotDash", + DOT_DOT_DASH = "dotDotDash", + DOTTED = "dotted", + DOUBLE = "double", + DOUBLE_WAVE = "doubleWave", + INSET = "inset", + NIL = "nil", + NONE = "none", + OUTSET = "outset", + THICK = "thick", + THICK_THIN_LARGE_GAP = "thickThinLargeGap", + THICK_THIN_MEDIUM_GAP = "thickThinMediumGap", + THICK_THIN_SMALL_GAP = "thickThinSmallGap", + THIN_THICK_LARGE_GAP = "thinThickLargeGap", + THIN_THICK_MEDIUM_GAP = "thinThickMediumGap", + THIN_THICK_SMALL_GAP = "thinThickSmallGap", + THIN_THICK_THIN_LARGE_GAP = "thinThickThinLargeGap", + THIN_THICK_THIN_MEDIUM_GAP = "thinThickThinMediumGap", + THIN_THICK_THIN_SMALL_GAP = "thinThickThinSmallGap", + THREE_D_EMBOSS = "threeDEmboss", + THREE_D_ENGRAVE = "threeDEngrave", + TRIPLE = "triple", + WAVE = "wave", +} diff --git a/src/file/styles/border/index.ts b/src/file/styles/border/index.ts new file mode 100644 index 0000000000..e62e5f7dcc --- /dev/null +++ b/src/file/styles/border/index.ts @@ -0,0 +1 @@ +export * from "./border-style"; diff --git a/src/file/styles/index.ts b/src/file/styles/index.ts index 5b0bd1b063..7c75699adc 100644 --- a/src/file/styles/index.ts +++ b/src/file/styles/index.ts @@ -1,6 +1,7 @@ import { XmlComponent, BaseXmlComponent } from "file/xml-components"; import { DocumentDefaults } from "./defaults"; import { ParagraphStyle } from "./style"; +export * from "./border"; export class Styles extends XmlComponent { constructor(_initialStyles?: BaseXmlComponent) { diff --git a/src/file/table/table-cell.spec.ts b/src/file/table/table-cell.spec.ts index 01c81848bb..4e69e958a8 100644 --- a/src/file/table/table-cell.spec.ts +++ b/src/file/table/table-cell.spec.ts @@ -1,7 +1,8 @@ import { expect } from "chai"; -import { TableCellBorders, BorderStyle, TableCellWidth, WidthType } from "./table-cell"; +import { TableCellBorders, TableCellWidth, WidthType } from "./table-cell"; import { Formatter } from "../../export/formatter"; +import { BorderStyle } from "../styles"; describe("TableCellBorders", () => { describe("#prepForXml", () => { diff --git a/src/file/table/table-cell.ts b/src/file/table/table-cell.ts index 99282f1125..59101b9af3 100644 --- a/src/file/table/table-cell.ts +++ b/src/file/table/table-cell.ts @@ -1,34 +1,5 @@ import { XmlComponent, XmlAttributeComponent, IXmlableObject } from "file/xml-components"; - -export enum BorderStyle { - SINGLE = "single", - DASH_DOT_STROKED = "dashDotStroked", - DASHED = "dashed", - DASH_SMALL_GAP = "dashSmallGap", - DOT_DASH = "dotDash", - DOT_DOT_DASH = "dotDotDash", - DOTTED = "dotted", - DOUBLE = "double", - DOUBLE_WAVE = "doubleWave", - INSET = "inset", - NIL = "nil", - NONE = "none", - OUTSET = "outset", - THICK = "thick", - THICK_THIN_LARGE_GAP = "thickThinLargeGap", - THICK_THIN_MEDIUM_GAP = "thickThinMediumGap", - THICK_THIN_SMALL_GAP = "thickThinSmallGap", - THIN_THICK_LARGE_GAP = "thinThickLargeGap", - THIN_THICK_MEDIUM_GAP = "thinThickMediumGap", - THIN_THICK_SMALL_GAP = "thinThickSmallGap", - THIN_THICK_THIN_LARGE_GAP = "thinThickThinLargeGap", - THIN_THICK_THIN_MEDIUM_GAP = "thinThickThinMediumGap", - THIN_THICK_THIN_SMALL_GAP = "thinThickThinSmallGap", - THREE_D_EMBOSS = "threeDEmboss", - THREE_D_ENGRAVE = "threeDEngrave", - TRIPLE = "triple", - WAVE = "wave", -} +import { BorderStyle } from "../styles"; interface ICellBorder { style: BorderStyle; From c95e765456ba2b02b468cb0d1447f2be2d8a95a3 Mon Sep 17 00:00:00 2001 From: Igor Bulovski Date: Tue, 3 Jul 2018 14:11:19 +0200 Subject: [PATCH 09/11] Version bump --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1116182ac4..7caa995140 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "docx-h4", - "version": "3.3.3", + "version": "3.3.4", "description": "Generate .docx documents with JavaScript (formerly Office-Clippy)", "main": "build/index.js", "scripts": { From a05abd0eea80bcc78e4fd6dc42535e43258de2d9 Mon Sep 17 00:00:00 2001 From: Igor Bulovski Date: Fri, 6 Jul 2018 18:54:30 +0200 Subject: [PATCH 10/11] numbering: add support to define suffix for numbering level --- src/file/numbering/index.ts | 1 + src/file/numbering/level.ts | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/src/file/numbering/index.ts b/src/file/numbering/index.ts index a861d336ee..d83cffc61c 100644 --- a/src/file/numbering/index.ts +++ b/src/file/numbering/index.ts @@ -1,2 +1,3 @@ export * from "./numbering"; export * from "./abstract-numbering"; +export * from "./level"; diff --git a/src/file/numbering/level.ts b/src/file/numbering/level.ts index bb50bfb2e2..0df90758fb 100644 --- a/src/file/numbering/level.ts +++ b/src/file/numbering/level.ts @@ -60,6 +60,23 @@ class LevelJc extends XmlComponent { } } +export enum LevelSuffix { + NOTHING = "nothing", + SPACE = "space", + TAB = "tab", +} + +class Suffix extends XmlComponent { + constructor(value: LevelSuffix) { + super("w:suff"); + this.root.push( + new Attributes({ + val: value, + }), + ); + } +} + export class LevelBase extends XmlComponent { private readonly paragraphProperties: ParagraphProperties; private readonly runProperties: RunProperties; @@ -93,6 +110,11 @@ export class LevelBase extends XmlComponent { this.root.push(this.runProperties); } + public setSuffix(value: LevelSuffix) { + this.root.push(new Suffix(value)); + return this; + } + public addParagraphProperty(property: XmlComponent): Level { this.paragraphProperties.push(property); return this; From 3da0bb38df000a47126e212684fb5c348b556f8c Mon Sep 17 00:00:00 2001 From: Igor Bulovski Date: Fri, 6 Jul 2018 19:01:23 +0200 Subject: [PATCH 11/11] Version bump --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7caa995140..5d2b6176c1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "docx-h4", - "version": "3.3.4", + "version": "3.3.5", "description": "Generate .docx documents with JavaScript (formerly Office-Clippy)", "main": "build/index.js", "scripts": {