merge with upstream master
This commit is contained in:
@ -4,18 +4,18 @@ var doc = new docx.Document();
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
var paragraph1 = new docx.Paragraph().bidi();
|
var paragraph1 = new docx.Paragraph().bidirectional();
|
||||||
var textRun1 = new docx.TextRun("שלום עולם").rtl();
|
var textRun1 = new docx.TextRun("שלום עולם").rightToLeft();
|
||||||
paragraph1.addRun(textRun1);
|
paragraph1.addRun(textRun1);
|
||||||
doc.addParagraph(paragraph1);
|
doc.addParagraph(paragraph1);
|
||||||
|
|
||||||
var paragraph2 = new docx.Paragraph().bidi();
|
var paragraph2 = new docx.Paragraph().bidirectional();
|
||||||
var textRun2 = new docx.TextRun("שלום עולם").bold().rtl();
|
var textRun2 = new docx.TextRun("שלום עולם").bold().rightToLeft();
|
||||||
paragraph2.addRun(textRun2);
|
paragraph2.addRun(textRun2);
|
||||||
doc.addParagraph(paragraph2);
|
doc.addParagraph(paragraph2);
|
||||||
|
|
||||||
var paragraph3 = new docx.Paragraph().bidi();
|
var paragraph3 = new docx.Paragraph().bidirectional();
|
||||||
var textRun3 = new docx.TextRun("שלום עולם").italic().rtl();
|
var textRun3 = new docx.TextRun("שלום עולם").italic().rightToLeft();
|
||||||
paragraph3.addRun(textRun3);
|
paragraph3.addRun(textRun3);
|
||||||
doc.addParagraph(paragraph3);
|
doc.addParagraph(paragraph3);
|
||||||
|
|
||||||
|
@ -15,6 +15,9 @@ const image5 = docx.Media.addImage(doc, "./demo/images/pizza.gif");
|
|||||||
const imageBase64Data = `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`
|
const imageBase64Data = `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`
|
||||||
const image6 = docx.Media.addImageFromBuffer(doc, Buffer.from(imageBase64Data, 'base64'), 100, 100);
|
const image6 = docx.Media.addImageFromBuffer(doc, Buffer.from(imageBase64Data, 'base64'), 100, 100);
|
||||||
|
|
||||||
|
// I am adding an image to the paragraph rather than the document to make the image inline
|
||||||
|
paragraph.addImage(image5);
|
||||||
|
|
||||||
doc.addImage(image);
|
doc.addImage(image);
|
||||||
doc.addImage(image2);
|
doc.addImage(image2);
|
||||||
doc.addImage(image3);
|
doc.addImage(image3);
|
||||||
|
@ -3,4 +3,7 @@ export interface IPacker {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Needed because of: https://github.com/s-panferov/awesome-typescript-loader/issues/432
|
// Needed because of: https://github.com/s-panferov/awesome-typescript-loader/issues/432
|
||||||
|
/**
|
||||||
|
* @ignore
|
||||||
|
*/
|
||||||
export const WORKAROUND = "";
|
export const WORKAROUND = "";
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
|
// tslint:disable:no-string-literal
|
||||||
|
|
||||||
import { expect } from "chai";
|
import { expect } from "chai";
|
||||||
import { Formatter } from "../../export/formatter";
|
import { Formatter } from "../../export/formatter";
|
||||||
import { ContentTypes } from "./content-types";
|
import { ContentTypes } from "./content-types";
|
||||||
|
|
||||||
describe("ContentTypes", () => {
|
describe("ContentTypes", () => {
|
||||||
let contentTypes: ContentTypes;
|
let contentTypes: ContentTypes;
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { IXmlableObject, XmlComponent } from "file/xml-components";
|
import { IXmlableObject, XmlComponent } from "file/xml-components";
|
||||||
import { Paragraph, ParagraphProperties } from "../..";
|
import { Paragraph, ParagraphProperties } from "../..";
|
||||||
import { SectionProperties, SectionPropertiesOptions } from "./section-properties";
|
import { SectionProperties, SectionPropertiesOptions } from "./section-properties/section-properties";
|
||||||
|
|
||||||
export class Body extends XmlComponent {
|
export class Body extends XmlComponent {
|
||||||
private readonly defaultSection: SectionProperties;
|
private readonly defaultSection: SectionProperties;
|
||||||
|
@ -3,3 +3,4 @@ export * from "./footer-reference";
|
|||||||
export * from "./header-reference";
|
export * from "./header-reference";
|
||||||
export * from "./page-size";
|
export * from "./page-size";
|
||||||
export * from "./page-number";
|
export * from "./page-number";
|
||||||
|
export * from "./page-border";
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
export * from "./page-borders";
|
@ -0,0 +1,91 @@
|
|||||||
|
import { expect } from "chai";
|
||||||
|
|
||||||
|
import { Formatter } from "../../../../../export/formatter";
|
||||||
|
import { BorderStyle } from "../../../../styles";
|
||||||
|
import { PageBorderDisplay, PageBorders, PageBorderZOrder } from "./page-borders";
|
||||||
|
|
||||||
|
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" },
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
@ -0,0 +1,104 @@
|
|||||||
|
// http://officeopenxml.com/WPsectionBorders.php
|
||||||
|
import { IXmlableObject, XmlAttributeComponent, XmlComponent } 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 IPageBorderConfiguration {
|
||||||
|
style?: BorderStyle;
|
||||||
|
size?: number;
|
||||||
|
color?: string;
|
||||||
|
space?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface IPageBordersOptions {
|
||||||
|
pageBorders?: IPageBorderAttributes;
|
||||||
|
pageBorderTop?: IPageBorderConfiguration;
|
||||||
|
pageBorderRight?: IPageBorderConfiguration;
|
||||||
|
pageBorderBottom?: IPageBorderConfiguration;
|
||||||
|
pageBorderLeft?: IPageBorderConfiguration;
|
||||||
|
}
|
||||||
|
|
||||||
|
class PageBordeAttributes extends XmlAttributeComponent<IPageBorderConfiguration> {
|
||||||
|
protected xmlKeys = {
|
||||||
|
style: "w:val",
|
||||||
|
size: "w:size",
|
||||||
|
color: "w:color",
|
||||||
|
space: "w:space",
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
class PageBorder extends XmlComponent {
|
||||||
|
constructor(key: string, options: IPageBorderConfiguration) {
|
||||||
|
super(key);
|
||||||
|
|
||||||
|
this.root.push(new PageBordeAttributes(options));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class PageBordersAttributes extends XmlAttributeComponent<IPageBorderAttributes> {
|
||||||
|
protected xmlKeys = {
|
||||||
|
display: "w:display",
|
||||||
|
offsetFrom: "w:offsetFrom",
|
||||||
|
zOrder: "w:zOrder",
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export class PageBorders extends XmlComponent {
|
||||||
|
constructor(options?: IPageBordersOptions) {
|
||||||
|
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() : "";
|
||||||
|
}
|
||||||
|
}
|
@ -1,8 +1,8 @@
|
|||||||
import { expect } from "chai";
|
import { expect } from "chai";
|
||||||
|
|
||||||
import { Formatter } from "../../../../export/formatter";
|
import { Formatter } from "../../../../export/formatter";
|
||||||
|
import { FooterReferenceType, PageBorderOffsetFrom, PageNumberFormat } from "./";
|
||||||
import { SectionProperties } from "./section-properties";
|
import { SectionProperties } from "./section-properties";
|
||||||
import { FooterReferenceType, PageNumberFormat } from ".";
|
|
||||||
|
|
||||||
describe("SectionProperties", () => {
|
describe("SectionProperties", () => {
|
||||||
describe("#constructor()", () => {
|
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" } }],
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// http://officeopenxml.com/WPsection.php
|
// http://officeopenxml.com/WPsection.php
|
||||||
import { XmlComponent } from "file/xml-components";
|
import { XmlComponent } from "file/xml-components";
|
||||||
import { FooterReferenceType, IPageNumberTypeAttributes, PageNumberFormat, PageNumberType } from "./";
|
import { FooterReferenceType, IPageBordersOptions, IPageNumberTypeAttributes, PageBorders, PageNumberFormat, PageNumberType } from "./";
|
||||||
import { Columns } from "./columns/columns";
|
import { Columns } from "./columns/columns";
|
||||||
import { IColumnsAttributes } from "./columns/columns-attributes";
|
import { IColumnsAttributes } from "./columns/columns-attributes";
|
||||||
import { DocumentGrid } from "./doc-grid/doc-grid";
|
import { DocumentGrid } from "./doc-grid/doc-grid";
|
||||||
@ -12,7 +12,6 @@ import { PageMargin } from "./page-margin/page-margin";
|
|||||||
import { IPageMarginAttributes } from "./page-margin/page-margin-attributes";
|
import { IPageMarginAttributes } from "./page-margin/page-margin-attributes";
|
||||||
import { PageSize } from "./page-size/page-size";
|
import { PageSize } from "./page-size/page-size";
|
||||||
import { IPageSizeAttributes, PageOrientation } from "./page-size/page-size-attributes";
|
import { IPageSizeAttributes, PageOrientation } from "./page-size/page-size-attributes";
|
||||||
// import { TitlePage } from "./title-page/title-page";
|
|
||||||
|
|
||||||
export type SectionPropertiesOptions = IPageSizeAttributes &
|
export type SectionPropertiesOptions = IPageSizeAttributes &
|
||||||
IPageMarginAttributes &
|
IPageMarginAttributes &
|
||||||
@ -20,7 +19,8 @@ export type SectionPropertiesOptions = IPageSizeAttributes &
|
|||||||
IDocGridAttributesProperties &
|
IDocGridAttributesProperties &
|
||||||
IHeaderOptions &
|
IHeaderOptions &
|
||||||
IFooterOptions &
|
IFooterOptions &
|
||||||
IPageNumberTypeAttributes;
|
IPageNumberTypeAttributes &
|
||||||
|
IPageBordersOptions;
|
||||||
|
|
||||||
export class SectionProperties extends XmlComponent {
|
export class SectionProperties extends XmlComponent {
|
||||||
private readonly options: SectionPropertiesOptions;
|
private readonly options: SectionPropertiesOptions;
|
||||||
@ -47,6 +47,11 @@ export class SectionProperties extends XmlComponent {
|
|||||||
footerId: 0,
|
footerId: 0,
|
||||||
pageNumberStart: undefined,
|
pageNumberStart: undefined,
|
||||||
pageNumberFormatType: PageNumberFormat.DECIMAL,
|
pageNumberFormatType: PageNumberFormat.DECIMAL,
|
||||||
|
pageBorders: undefined,
|
||||||
|
pageBorderTop: undefined,
|
||||||
|
pageBorderRight: undefined,
|
||||||
|
pageBorderBottom: undefined,
|
||||||
|
pageBorderLeft: undefined,
|
||||||
};
|
};
|
||||||
|
|
||||||
const mergedOptions = {
|
const mergedOptions = {
|
||||||
@ -84,6 +89,24 @@ export class SectionProperties extends XmlComponent {
|
|||||||
|
|
||||||
this.root.push(new PageNumberType(mergedOptions.pageNumberStart, mergedOptions.pageNumberFormatType));
|
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;
|
this.options = mergedOptions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ import { XmlComponent } from "file/xml-components";
|
|||||||
import { Paragraph } from "../paragraph";
|
import { Paragraph } from "../paragraph";
|
||||||
import { Table } from "../table";
|
import { Table } from "../table";
|
||||||
import { Body } from "./body";
|
import { Body } from "./body";
|
||||||
import { SectionPropertiesOptions } from "./body/section-properties/section-properties";
|
import { SectionPropertiesOptions } from "./body/section-properties";
|
||||||
import { DocumentAttributes } from "./document-attributes";
|
import { DocumentAttributes } from "./document-attributes";
|
||||||
|
|
||||||
export class Document extends XmlComponent {
|
export class Document extends XmlComponent {
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { assert } from "chai";
|
import { assert } from "chai";
|
||||||
|
|
||||||
import { SimplePos } from "./simple-pos";
|
|
||||||
import { Utility } from "../../../tests/utility";
|
import { Utility } from "../../../tests/utility";
|
||||||
|
import { SimplePos } from "./simple-pos";
|
||||||
|
|
||||||
describe("SimplePos", () => {
|
describe("SimplePos", () => {
|
||||||
describe("#constructor()", () => {
|
describe("#constructor()", () => {
|
||||||
|
@ -2,14 +2,13 @@ import { AppProperties } from "./app-properties/app-properties";
|
|||||||
import { ContentTypes } from "./content-types/content-types";
|
import { ContentTypes } from "./content-types/content-types";
|
||||||
import { CoreProperties, IPropertiesOptions } from "./core-properties";
|
import { CoreProperties, IPropertiesOptions } from "./core-properties";
|
||||||
import { Document } from "./document";
|
import { Document } from "./document";
|
||||||
import { FooterReferenceType, HeaderReference, HeaderReferenceType } from "./document/body/section-properties";
|
import { FooterReferenceType, HeaderReference, HeaderReferenceType, SectionPropertiesOptions } from "./document/body/section-properties";
|
||||||
import { SectionPropertiesOptions } from "./document/body/section-properties/section-properties";
|
|
||||||
import { FooterWrapper } from "./footer-wrapper";
|
import { FooterWrapper } from "./footer-wrapper";
|
||||||
import { FootNotes } from "./footnotes";
|
import { FootNotes } from "./footnotes";
|
||||||
import { HeaderWrapper } from "./header-wrapper";
|
import { HeaderWrapper } from "./header-wrapper";
|
||||||
import { Media } from "./media";
|
import { Image, Media } from "./media";
|
||||||
import { Numbering } from "./numbering";
|
import { Numbering } from "./numbering";
|
||||||
import { Bookmark, Hyperlink, Image, Paragraph } from "./paragraph";
|
import { Bookmark, Hyperlink, Paragraph } from "./paragraph";
|
||||||
import { Relationships } from "./relationships";
|
import { Relationships } from "./relationships";
|
||||||
import { Styles } from "./styles";
|
import { Styles } from "./styles";
|
||||||
import { ExternalStylesFactory } from "./styles/external-styles-factory";
|
import { ExternalStylesFactory } from "./styles/external-styles-factory";
|
||||||
@ -126,19 +125,19 @@ export class File {
|
|||||||
|
|
||||||
public createImage(filePath: string): Image {
|
public createImage(filePath: string): Image {
|
||||||
const image = Media.addImage(this, filePath);
|
const image = Media.addImage(this, filePath);
|
||||||
this.document.addParagraph(image);
|
this.document.addParagraph(image.Paragraph);
|
||||||
|
|
||||||
return image;
|
return image;
|
||||||
}
|
}
|
||||||
|
|
||||||
public addImage(image: Image): File {
|
public addImage(image: Image): File {
|
||||||
this.document.addParagraph(image);
|
this.document.addParagraph(image.Paragraph);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public createImageFromBuffer(buffer: Buffer, width?: number, height?: number): Image {
|
public createImageFromBuffer(buffer: Buffer, width?: number, height?: number): Image {
|
||||||
const image = Media.addImageFromBuffer(this, buffer, width, height);
|
const image = Media.addImageFromBuffer(this, buffer, width, height);
|
||||||
this.document.addParagraph(image);
|
this.document.addParagraph(image.Paragraph);
|
||||||
|
|
||||||
return image;
|
return image;
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { XmlComponent } from "file/xml-components";
|
import { XmlComponent } from "file/xml-components";
|
||||||
import { Footer } from "./footer/footer";
|
import { Footer } from "./footer/footer";
|
||||||
import { Media } from "./media";
|
import { Image, Media } from "./media";
|
||||||
import { Image, Paragraph } from "./paragraph";
|
import { ImageParagraph, Paragraph } from "./paragraph";
|
||||||
import { Relationships } from "./relationships";
|
import { Relationships } from "./relationships";
|
||||||
import { Table } from "./table";
|
import { Table } from "./table";
|
||||||
|
|
||||||
@ -43,11 +43,11 @@ export class FooterWrapper {
|
|||||||
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",
|
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",
|
||||||
`media/${mediaData.fileName}`,
|
`media/${mediaData.fileName}`,
|
||||||
);
|
);
|
||||||
this.addImage(new Image(mediaData));
|
this.addImage(new Image(new ImageParagraph(mediaData)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public addImage(image: Image): FooterWrapper {
|
public addImage(image: Image): FooterWrapper {
|
||||||
this.footer.addParagraph(image);
|
this.footer.addParagraph(image.Paragraph);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { XmlComponent } from "file/xml-components";
|
import { XmlComponent } from "file/xml-components";
|
||||||
import { Header } from "./header/header";
|
import { Header } from "./header/header";
|
||||||
import { Media } from "./media";
|
import { Image, Media } from "./media";
|
||||||
import { Image, Paragraph } from "./paragraph";
|
import { ImageParagraph, Paragraph } from "./paragraph";
|
||||||
import { Relationships } from "./relationships";
|
import { Relationships } from "./relationships";
|
||||||
import { Table } from "./table";
|
import { Table } from "./table";
|
||||||
|
|
||||||
@ -43,11 +43,11 @@ export class HeaderWrapper {
|
|||||||
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",
|
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",
|
||||||
`media/${mediaData.fileName}`,
|
`media/${mediaData.fileName}`,
|
||||||
);
|
);
|
||||||
this.addImage(new Image(mediaData));
|
this.addImage(new Image(new ImageParagraph(mediaData)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public addImage(image: Image): HeaderWrapper {
|
public addImage(image: Image): HeaderWrapper {
|
||||||
this.header.addParagraph(image);
|
this.header.addParagraph(image.Paragraph);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,4 +20,7 @@ export interface IMediaData {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Needed because of: https://github.com/s-panferov/awesome-typescript-loader/issues/432
|
// Needed because of: https://github.com/s-panferov/awesome-typescript-loader/issues/432
|
||||||
|
/**
|
||||||
|
* @ignore
|
||||||
|
*/
|
||||||
export const WORKAROUND2 = "";
|
export const WORKAROUND2 = "";
|
||||||
|
17
src/file/media/image.ts
Normal file
17
src/file/media/image.ts
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
import { ImageParagraph, PictureRun } from "../paragraph";
|
||||||
|
|
||||||
|
export class Image {
|
||||||
|
constructor(private readonly paragraph: ImageParagraph) {}
|
||||||
|
|
||||||
|
public get Paragraph(): ImageParagraph {
|
||||||
|
return this.paragraph;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get Run(): PictureRun {
|
||||||
|
return this.paragraph.Run;
|
||||||
|
}
|
||||||
|
|
||||||
|
public scale(factorX: number, factorY?: number): void {
|
||||||
|
this.paragraph.Run.scale(factorX, factorY);
|
||||||
|
}
|
||||||
|
}
|
@ -1,2 +1,3 @@
|
|||||||
export * from "./media";
|
export * from "./media";
|
||||||
export * from "./data";
|
export * from "./data";
|
||||||
|
export * from "./image";
|
||||||
|
@ -4,8 +4,9 @@ import * as path from "path";
|
|||||||
|
|
||||||
import { File } from "../file";
|
import { File } from "../file";
|
||||||
import { IDrawingOptions } from "../drawing";
|
import { IDrawingOptions } from "../drawing";
|
||||||
import { Image } from "../paragraph";
|
import { ImageParagraph } from "../paragraph";
|
||||||
import { IMediaData } from "./data";
|
import { IMediaData } from "./data";
|
||||||
|
import { Image } from "./image";
|
||||||
|
|
||||||
interface IHackedFile {
|
interface IHackedFile {
|
||||||
currentRelationshipId: number;
|
currentRelationshipId: number;
|
||||||
@ -21,7 +22,7 @@ export class Media {
|
|||||||
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",
|
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",
|
||||||
`media/${mediaData.fileName}`,
|
`media/${mediaData.fileName}`,
|
||||||
);
|
);
|
||||||
return new Image(mediaData, drawingOptions);
|
return new Image(new ImageParagraph(mediaData, drawingOptions));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static addImageFromBuffer(file: File, buffer: Buffer, width?: number, height?: number, drawingOptions?: IDrawingOptions): Image {
|
public static addImageFromBuffer(file: File, buffer: Buffer, width?: number, height?: number, drawingOptions?: IDrawingOptions): Image {
|
||||||
@ -40,7 +41,7 @@ export class Media {
|
|||||||
`media/${mediaData.fileName}`,
|
`media/${mediaData.fileName}`,
|
||||||
);
|
);
|
||||||
|
|
||||||
return new Image(mediaData, drawingOptions);
|
return new Image(new ImageParagraph(mediaData, drawingOptions));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static generateId(): string {
|
private static generateId(): string {
|
||||||
@ -106,12 +107,12 @@ export class Media {
|
|||||||
fileName: key,
|
fileName: key,
|
||||||
dimensions: {
|
dimensions: {
|
||||||
pixels: {
|
pixels: {
|
||||||
x: dimensions.width,
|
x: Math.round(dimensions.width),
|
||||||
y: dimensions.height,
|
y: Math.round(dimensions.height),
|
||||||
},
|
},
|
||||||
emus: {
|
emus: {
|
||||||
x: dimensions.width * 9525,
|
x: Math.round(dimensions.width * 9525),
|
||||||
y: dimensions.height * 9525,
|
y: Math.round(dimensions.height * 9525),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -1,2 +1,3 @@
|
|||||||
export * from "./numbering";
|
export * from "./numbering";
|
||||||
export * from "./abstract-numbering";
|
export * from "./abstract-numbering";
|
||||||
|
export * from "./level";
|
||||||
|
@ -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 {
|
export class LevelBase extends XmlComponent {
|
||||||
private readonly paragraphProperties: ParagraphProperties;
|
private readonly paragraphProperties: ParagraphProperties;
|
||||||
private readonly runProperties: RunProperties;
|
private readonly runProperties: RunProperties;
|
||||||
@ -93,6 +110,11 @@ export class LevelBase extends XmlComponent {
|
|||||||
this.root.push(this.runProperties);
|
this.root.push(this.runProperties);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public setSuffix(value: LevelSuffix): LevelBase {
|
||||||
|
this.root.push(new Suffix(value));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public addParagraphProperty(property: XmlComponent): Level {
|
public addParagraphProperty(property: XmlComponent): Level {
|
||||||
this.paragraphProperties.push(property);
|
this.paragraphProperties.push(property);
|
||||||
return this;
|
return this;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { XmlComponent } from "file/xml-components";
|
import { XmlComponent } from "file/xml-components";
|
||||||
|
|
||||||
export class Bidi extends XmlComponent {
|
export class Bidirectional extends XmlComponent {
|
||||||
constructor() {
|
constructor() {
|
||||||
super("w:bidi");
|
super("w:bidi");
|
||||||
}
|
}
|
@ -2,13 +2,13 @@
|
|||||||
import { assert, expect } from "chai";
|
import { assert, expect } from "chai";
|
||||||
|
|
||||||
import { Formatter } from "../../export/formatter";
|
import { Formatter } from "../../export/formatter";
|
||||||
import { Image } from "./image";
|
import { ImageParagraph } from "./image";
|
||||||
|
|
||||||
describe("Image", () => {
|
describe("Image", () => {
|
||||||
let image: Image;
|
let image: ImageParagraph;
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
image = new Image({
|
image = new ImageParagraph({
|
||||||
referenceId: 0,
|
referenceId: 0,
|
||||||
stream: new Buffer(""),
|
stream: new Buffer(""),
|
||||||
path: "",
|
path: "",
|
||||||
|
@ -3,7 +3,7 @@ import { IMediaData } from "../media";
|
|||||||
import { Paragraph } from "./paragraph";
|
import { Paragraph } from "./paragraph";
|
||||||
import { PictureRun } from "./run";
|
import { PictureRun } from "./run";
|
||||||
|
|
||||||
export class Image extends Paragraph {
|
export class ImageParagraph extends Paragraph {
|
||||||
private readonly pictureRun: PictureRun;
|
private readonly pictureRun: PictureRun;
|
||||||
|
|
||||||
constructor(imageData: IMediaData, drawingOptions?: IDrawingOptions) {
|
constructor(imageData: IMediaData, drawingOptions?: IDrawingOptions) {
|
||||||
@ -15,4 +15,8 @@ export class Image extends Paragraph {
|
|||||||
public scale(factorX: number, factorY?: number): void {
|
public scale(factorX: number, factorY?: number): void {
|
||||||
this.pictureRun.scale(factorX, factorY);
|
this.pictureRun.scale(factorX, factorY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public get Run(): PictureRun {
|
||||||
|
return this.pictureRun;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -339,9 +339,9 @@ describe("Paragraph", () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("#bidi", () => {
|
describe("#bidirectional", () => {
|
||||||
it("set paragraph right to left layout", () => {
|
it("set paragraph right to left layout", () => {
|
||||||
paragraph.bidi();
|
paragraph.bidirectional();
|
||||||
const tree = new Formatter().format(paragraph);
|
const tree = new Formatter().format(paragraph);
|
||||||
expect(tree).to.deep.equal({
|
expect(tree).to.deep.equal({
|
||||||
"w:p": [{ "w:pPr": [{ "w:bidi": [] }] }],
|
"w:p": [{ "w:pPr": [{ "w:bidi": [] }] }],
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
// http://officeopenxml.com/WPparagraph.php
|
// http://officeopenxml.com/WPparagraph.php
|
||||||
import { FootnoteReferenceRun } from "file/footnotes/footnote/run/reference-run";
|
import { FootnoteReferenceRun } from "file/footnotes/footnote/run/reference-run";
|
||||||
import { IMediaData } from "file/media";
|
import { Image } from "file/media";
|
||||||
import { Num } from "file/numbering/num";
|
import { Num } from "file/numbering/num";
|
||||||
import { XmlComponent } from "file/xml-components";
|
import { XmlComponent } from "file/xml-components";
|
||||||
|
|
||||||
import { Alignment } from "./formatting/alignment";
|
import { Alignment } from "./formatting/alignment";
|
||||||
import { Bidi } from "./formatting/bidi";
|
import { Bidirectional } from "./formatting/bidirectional";
|
||||||
import { ThematicBreak } from "./formatting/border";
|
import { ThematicBreak } from "./formatting/border";
|
||||||
import { Indent } from "./formatting/indent";
|
import { Indent } from "./formatting/indent";
|
||||||
import { KeepLines, KeepNext } from "./formatting/keep";
|
import { KeepLines, KeepNext } from "./formatting/keep";
|
||||||
@ -54,9 +54,10 @@ export class Paragraph extends XmlComponent {
|
|||||||
return run;
|
return run;
|
||||||
}
|
}
|
||||||
|
|
||||||
public createPictureRun(imageData: IMediaData): PictureRun {
|
public addImage(image: Image): PictureRun {
|
||||||
const run = new PictureRun(imageData);
|
const run = image.Run;
|
||||||
this.addRun(run);
|
this.addRun(run);
|
||||||
|
|
||||||
return run;
|
return run;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -217,8 +218,8 @@ export class Paragraph extends XmlComponent {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bidi(): Paragraph {
|
public bidirectional(): Paragraph {
|
||||||
this.properties.push(new Bidi());
|
this.properties.push(new Bidirectional());
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,7 @@ export class Bold extends XmlComponent {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class BoldCs extends XmlComponent {
|
export class BoldComplexScript extends XmlComponent {
|
||||||
constructor() {
|
constructor() {
|
||||||
super("w:bCs");
|
super("w:bCs");
|
||||||
this.root.push(
|
this.root.push(
|
||||||
@ -36,7 +36,7 @@ export class Italics extends XmlComponent {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class ItalicsCs extends XmlComponent {
|
export class ItalicsComplexScript extends XmlComponent {
|
||||||
constructor() {
|
constructor() {
|
||||||
super("w:iCs");
|
super("w:iCs");
|
||||||
this.root.push(
|
this.root.push(
|
||||||
@ -146,7 +146,7 @@ export class Size extends XmlComponent {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class SizeCs extends XmlComponent {
|
export class SizeComplexScript extends XmlComponent {
|
||||||
constructor(size: number) {
|
constructor(size: number) {
|
||||||
super("w:szCs");
|
super("w:szCs");
|
||||||
this.root.push(
|
this.root.push(
|
||||||
@ -157,7 +157,7 @@ export class SizeCs extends XmlComponent {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class RTL extends XmlComponent {
|
export class RightToLeft extends XmlComponent {
|
||||||
constructor() {
|
constructor() {
|
||||||
super("w:rtl");
|
super("w:rtl");
|
||||||
this.root.push(
|
this.root.push(
|
||||||
|
@ -147,7 +147,7 @@ describe("Run", () => {
|
|||||||
|
|
||||||
describe("#rtl", () => {
|
describe("#rtl", () => {
|
||||||
it("should set the run to the RTL mode", () => {
|
it("should set the run to the RTL mode", () => {
|
||||||
run.rtl();
|
run.rightToLeft();
|
||||||
const tree = new Formatter().format(run);
|
const tree = new Formatter().format(run);
|
||||||
expect(tree).to.deep.equal({
|
expect(tree).to.deep.equal({
|
||||||
"w:r": [{ "w:rPr": [{ "w:rtl": [{ _attr: { "w:val": true } }] }] }],
|
"w:r": [{ "w:rPr": [{ "w:rtl": [{ _attr: { "w:val": true } }] }] }],
|
||||||
|
@ -1,7 +1,18 @@
|
|||||||
// http://officeopenxml.com/WPtext.php
|
// http://officeopenxml.com/WPtext.php
|
||||||
import { Break } from "./break";
|
import { Break } from "./break";
|
||||||
import { Caps, SmallCaps } from "./caps";
|
import { Caps, SmallCaps } from "./caps";
|
||||||
import { Bold, BoldCs, Color, DoubleStrike, Italics, ItalicsCs, RTL, Size, SizeCs, Strike } from "./formatting";
|
import {
|
||||||
|
Bold,
|
||||||
|
BoldComplexScript,
|
||||||
|
Color,
|
||||||
|
DoubleStrike,
|
||||||
|
Italics,
|
||||||
|
ItalicsComplexScript,
|
||||||
|
RightToLeft,
|
||||||
|
Size,
|
||||||
|
SizeComplexScript,
|
||||||
|
Strike,
|
||||||
|
} from "./formatting";
|
||||||
import { Begin, End, Page, Separate } from "./page-number";
|
import { Begin, End, Page, Separate } from "./page-number";
|
||||||
import { RunProperties } from "./properties";
|
import { RunProperties } from "./properties";
|
||||||
import { RunFonts } from "./run-fonts";
|
import { RunFonts } from "./run-fonts";
|
||||||
@ -23,13 +34,13 @@ export class Run extends XmlComponent {
|
|||||||
|
|
||||||
public bold(): Run {
|
public bold(): Run {
|
||||||
this.properties.push(new Bold());
|
this.properties.push(new Bold());
|
||||||
this.properties.push(new BoldCs());
|
this.properties.push(new BoldComplexScript());
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public italic(): Run {
|
public italic(): Run {
|
||||||
this.properties.push(new Italics());
|
this.properties.push(new Italics());
|
||||||
this.properties.push(new ItalicsCs());
|
this.properties.push(new ItalicsComplexScript());
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -45,12 +56,12 @@ export class Run extends XmlComponent {
|
|||||||
|
|
||||||
public size(size: number): Run {
|
public size(size: number): Run {
|
||||||
this.properties.push(new Size(size));
|
this.properties.push(new Size(size));
|
||||||
this.properties.push(new SizeCs(size));
|
this.properties.push(new SizeComplexScript(size));
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public rtl(): Run {
|
public rightToLeft(): Run {
|
||||||
this.properties.push(new RTL());
|
this.properties.push(new RightToLeft());
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
29
src/file/styles/border/border-style.ts
Normal file
29
src/file/styles/border/border-style.ts
Normal file
@ -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",
|
||||||
|
}
|
1
src/file/styles/border/index.ts
Normal file
1
src/file/styles/border/index.ts
Normal file
@ -0,0 +1 @@
|
|||||||
|
export * from "./border-style";
|
@ -1,5 +1,5 @@
|
|||||||
import { XmlComponent } from "file/xml-components";
|
import { XmlComponent } from "file/xml-components";
|
||||||
import { Size, SizeCs } from "../../paragraph/run/formatting";
|
import { Size, SizeComplexScript } from "../../paragraph/run/formatting";
|
||||||
import { RunProperties } from "../../paragraph/run/properties";
|
import { RunProperties } from "../../paragraph/run/properties";
|
||||||
import { RunFonts } from "../../paragraph/run/run-fonts";
|
import { RunFonts } from "../../paragraph/run/run-fonts";
|
||||||
|
|
||||||
@ -14,7 +14,7 @@ export class RunPropertiesDefaults extends XmlComponent {
|
|||||||
|
|
||||||
public size(size: number): RunPropertiesDefaults {
|
public size(size: number): RunPropertiesDefaults {
|
||||||
this.properties.push(new Size(size));
|
this.properties.push(new Size(size));
|
||||||
this.properties.push(new SizeCs(size));
|
this.properties.push(new SizeComplexScript(size));
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,6 +10,17 @@ describe("External styles factory", () => {
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
<w:styles xmlns:mc="first" xmlns:r="second">
|
<w:styles xmlns:mc="first" xmlns:r="second">
|
||||||
<w:docDefaults>
|
<w:docDefaults>
|
||||||
|
<w:rPrDefault>
|
||||||
|
<w:rPr>
|
||||||
|
<w:rFonts w:ascii="Arial" w:eastAsiaTheme="minorHAnsi" w:hAnsi="Arial" w:cstheme="minorHAnsi"/>
|
||||||
|
<w:lang w:val="en-US" w:eastAsia="en-US" w:bidi="ar-SA"/>
|
||||||
|
</w:rPr>
|
||||||
|
</w:rPrDefault>
|
||||||
|
<w:pPrDefault>
|
||||||
|
<w:pPr>
|
||||||
|
<w:spacing w:after="160" w:line="259" w:lineRule="auto"/>
|
||||||
|
</w:pPr>
|
||||||
|
</w:pPrDefault>
|
||||||
</w:docDefaults>
|
</w:docDefaults>
|
||||||
|
|
||||||
<w:latentStyles w:defLockedState="1" w:defUIPriority="99">
|
<w:latentStyles w:defLockedState="1" w:defUIPriority="99">
|
||||||
@ -37,6 +48,7 @@ describe("External styles factory", () => {
|
|||||||
|
|
||||||
describe("#parse", () => {
|
describe("#parse", () => {
|
||||||
it("should parse w:styles attributes", () => {
|
it("should parse w:styles attributes", () => {
|
||||||
|
// tslint:disable-next-line:no-any
|
||||||
const importedStyle = new ExternalStylesFactory().newInstance(externalStyles) as any;
|
const importedStyle = new ExternalStylesFactory().newInstance(externalStyles) as any;
|
||||||
|
|
||||||
expect(importedStyle.rootKey).to.equal("w:styles");
|
expect(importedStyle.rootKey).to.equal("w:styles");
|
||||||
@ -47,12 +59,69 @@ describe("External styles factory", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("should parse other child elements of w:styles", () => {
|
it("should parse other child elements of w:styles", () => {
|
||||||
|
// tslint:disable-next-line:no-any
|
||||||
const importedStyle = new ExternalStylesFactory().newInstance(externalStyles) as any;
|
const importedStyle = new ExternalStylesFactory().newInstance(externalStyles) as any;
|
||||||
|
|
||||||
expect(importedStyle.root.length).to.equal(5);
|
expect(importedStyle.root.length).to.equal(5);
|
||||||
expect(importedStyle.root[1]).to.eql({
|
expect(importedStyle.root[1]).to.eql({
|
||||||
|
deleted: false,
|
||||||
|
root: [
|
||||||
|
{
|
||||||
|
deleted: false,
|
||||||
|
root: [
|
||||||
|
{
|
||||||
|
deleted: false,
|
||||||
|
root: [
|
||||||
|
{
|
||||||
|
_attr: {
|
||||||
|
"w:ascii": "Arial",
|
||||||
|
"w:cstheme": "minorHAnsi",
|
||||||
|
"w:eastAsiaTheme": "minorHAnsi",
|
||||||
|
"w:hAnsi": "Arial",
|
||||||
|
},
|
||||||
deleted: false,
|
deleted: false,
|
||||||
root: [],
|
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",
|
rootKey: "w:docDefaults",
|
||||||
});
|
});
|
||||||
expect(importedStyle.root[2]).to.eql({
|
expect(importedStyle.root[2]).to.eql({
|
||||||
@ -67,6 +136,7 @@ describe("External styles factory", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("should parse styles elements", () => {
|
it("should parse styles elements", () => {
|
||||||
|
// tslint:disable-next-line:no-any
|
||||||
const importedStyle = new ExternalStylesFactory().newInstance(externalStyles) as any;
|
const importedStyle = new ExternalStylesFactory().newInstance(externalStyles) as any;
|
||||||
|
|
||||||
expect(importedStyle.root.length).to.equal(5);
|
expect(importedStyle.root.length).to.equal(5);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import * as fastXmlParser from "fast-xml-parser";
|
import * as fastXmlParser from "fast-xml-parser";
|
||||||
import { convertToXmlComponent, ImportedRootElementAttributes, ImportedXmlComponent, parseOptions } from "file/xml-components";
|
import { convertToXmlComponent, ImportedRootElementAttributes, parseOptions } from "file/xml-components";
|
||||||
import { Styles } from "./";
|
import { Styles } from "./";
|
||||||
|
|
||||||
export class ExternalStylesFactory {
|
export class ExternalStylesFactory {
|
||||||
@ -34,7 +34,12 @@ export class ExternalStylesFactory {
|
|||||||
Object.keys(xmlStyles)
|
Object.keys(xmlStyles)
|
||||||
.filter((element) => element !== "_attr" && element !== "w:style")
|
.filter((element) => element !== "_attr" && element !== "w:style")
|
||||||
.forEach((element) => {
|
.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
|
// convert the styles one by one
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { BaseXmlComponent, XmlComponent } from "file/xml-components";
|
import { BaseXmlComponent, XmlComponent } from "file/xml-components";
|
||||||
import { DocumentDefaults } from "./defaults";
|
import { DocumentDefaults } from "./defaults";
|
||||||
import { ParagraphStyle } from "./style";
|
import { ParagraphStyle } from "./style";
|
||||||
|
export * from "./border";
|
||||||
|
|
||||||
export class Styles extends XmlComponent {
|
export class Styles extends XmlComponent {
|
||||||
constructor(initialStyles?: BaseXmlComponent) {
|
constructor(initialStyles?: BaseXmlComponent) {
|
||||||
|
@ -74,7 +74,7 @@ export class ParagraphStyle extends Style {
|
|||||||
|
|
||||||
public size(twips: number): ParagraphStyle {
|
public size(twips: number): ParagraphStyle {
|
||||||
this.addRunProperty(new formatting.Size(twips));
|
this.addRunProperty(new formatting.Size(twips));
|
||||||
this.addRunProperty(new formatting.SizeCs(twips));
|
this.addRunProperty(new formatting.SizeComplexScript(twips));
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -283,7 +283,7 @@ export class CharacterStyle extends Style {
|
|||||||
|
|
||||||
public size(twips: number): CharacterStyle {
|
public size(twips: number): CharacterStyle {
|
||||||
this.addRunProperty(new formatting.Size(twips));
|
this.addRunProperty(new formatting.Size(twips));
|
||||||
this.addRunProperty(new formatting.SizeCs(twips));
|
this.addRunProperty(new formatting.SizeComplexScript(twips));
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
import { expect } from "chai";
|
import { expect } from "chai";
|
||||||
|
|
||||||
import { TableCellBorders, BorderStyle, TableCellWidth, WidthType } from "./table-cell";
|
|
||||||
import { Formatter } from "../../export/formatter";
|
import { Formatter } from "../../export/formatter";
|
||||||
|
import { BorderStyle } from "../styles";
|
||||||
|
import { TableCellBorders, TableCellWidth, WidthType } from "./table-cell";
|
||||||
|
|
||||||
describe("TableCellBorders", () => {
|
describe("TableCellBorders", () => {
|
||||||
describe("#prepForXml", () => {
|
describe("#prepForXml", () => {
|
||||||
|
@ -1,34 +1,5 @@
|
|||||||
import { IXmlableObject, XmlAttributeComponent, XmlComponent } from "file/xml-components";
|
import { IXmlableObject, XmlAttributeComponent, XmlComponent } from "file/xml-components";
|
||||||
|
import { BorderStyle } from "../styles";
|
||||||
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",
|
|
||||||
}
|
|
||||||
|
|
||||||
interface ICellBorder {
|
interface ICellBorder {
|
||||||
style: BorderStyle;
|
style: BorderStyle;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { expect } from "chai";
|
import { expect } from "chai";
|
||||||
import { ImportedXmlComponent, convertToXmlComponent } from "./";
|
import { convertToXmlComponent, ImportedXmlComponent } from "./";
|
||||||
|
|
||||||
const xmlString = `
|
const xmlString = `
|
||||||
<w:p w:one="value 1" w:two="value 2">
|
<w:p w:one="value 1" w:two="value 2">
|
||||||
@ -15,6 +15,7 @@ const xmlString = `
|
|||||||
</w:p>
|
</w:p>
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
// tslint:disable:object-literal-key-quotes
|
||||||
const importedXmlElement = {
|
const importedXmlElement = {
|
||||||
"w:p": {
|
"w:p": {
|
||||||
_attr: { "w:one": "value 1", "w:two": "value 2" },
|
_attr: { "w:one": "value 1", "w:two": "value 2" },
|
||||||
@ -22,6 +23,7 @@ const importedXmlElement = {
|
|||||||
"w:r": [{ _attr: { active: "true" }, "w:t": "Text 1" }, { _attr: { active: "true" }, "w:t": "Text 2" }],
|
"w:r": [{ _attr: { active: "true" }, "w:t": "Text 1" }, { _attr: { active: "true" }, "w:t": "Text 2" }],
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
// tslint:enable:object-literal-key-quotes
|
||||||
|
|
||||||
const convertedXmlElement = {
|
const convertedXmlElement = {
|
||||||
deleted: false,
|
deleted: false,
|
||||||
|
@ -3,4 +3,7 @@ export interface IXmlableObject extends Object {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Needed because of: https://github.com/s-panferov/awesome-typescript-loader/issues/432
|
// Needed because of: https://github.com/s-panferov/awesome-typescript-loader/issues/432
|
||||||
export const WORKAROUND3 = "workaround";
|
/**
|
||||||
|
* @ignore
|
||||||
|
*/
|
||||||
|
export const WORKAROUND3 = "";
|
||||||
|
@ -21,7 +21,6 @@
|
|||||||
"exclude": [
|
"exclude": [
|
||||||
"node_modules",
|
"node_modules",
|
||||||
"tests",
|
"tests",
|
||||||
"**/*.spec.ts",
|
|
||||||
"**/_*"
|
"**/_*"
|
||||||
],
|
],
|
||||||
"typedocOptions": {
|
"typedocOptions": {
|
||||||
|
Reference in New Issue
Block a user