Simplify multiple addXXX methods into a single add method

This commit is contained in:
Dolan
2019-06-25 01:52:02 +01:00
parent c97d15cb9f
commit 384d144a85
6 changed files with 36 additions and 52 deletions

View File

@ -22,20 +22,20 @@ describe("Packer", () => {
heading: HeadingLevel.HEADING_1, heading: HeadingLevel.HEADING_1,
}); });
file.addParagraph( file.add(
new Paragraph({ new Paragraph({
text: "title", text: "title",
heading: HeadingLevel.TITLE, heading: HeadingLevel.TITLE,
}), }),
); );
file.addParagraph(heading); file.add(heading);
file.addParagraph( file.add(
new Paragraph({ new Paragraph({
text: "heading 2", text: "heading 2",
heading: HeadingLevel.HEADING_2, heading: HeadingLevel.HEADING_2,
}), }),
); );
file.addParagraph(paragraph); file.add(paragraph);
packer = new Packer(); packer = new Packer();
}); });

View File

@ -6,6 +6,7 @@ import { Formatter } from "export/formatter";
import { File } from "./file"; import { File } from "./file";
import { Paragraph } from "./paragraph"; import { Paragraph } from "./paragraph";
import { Table } from "./table"; import { Table } from "./table";
import { TableOfContents } from "./table-of-contents";
describe("File", () => { describe("File", () => {
describe("#constructor", () => { describe("#constructor", () => {
@ -83,17 +84,17 @@ describe("File", () => {
it("should call the underlying document's addParagraph", () => { it("should call the underlying document's addParagraph", () => {
const file = new File(); const file = new File();
const spy = sinon.spy(file.Document, "addParagraph"); const spy = sinon.spy(file.Document, "addParagraph");
file.addParagraph(new Paragraph({})); file.add(new Paragraph({}));
expect(spy.called).to.equal(true); expect(spy.called).to.equal(true);
}); });
}); });
describe("#addTable", () => { describe("#add", () => {
it("should call the underlying document's addTable", () => { it("should call the underlying document's addTable", () => {
const wrapper = new File(); const wrapper = new File();
const spy = sinon.spy(wrapper.Document, "addTable"); const spy = sinon.spy(wrapper.Document, "addTable");
wrapper.addTable( wrapper.add(
new Table({ new Table({
rows: 1, rows: 1,
columns: 1, columns: 1,
@ -102,25 +103,20 @@ describe("File", () => {
expect(spy.called).to.equal(true); expect(spy.called).to.equal(true);
}); });
});
describe("#addTableOfContents", () => {
it("should call the underlying document's addTableOfContents", () => { it("should call the underlying document's addTableOfContents", () => {
const wrapper = new File(); const wrapper = new File();
const spy = sinon.spy(wrapper.Document, "addTableOfContents"); const spy = sinon.spy(wrapper.Document, "addTableOfContents");
// tslint:disable-next-line:no-any wrapper.add(new TableOfContents());
wrapper.addTableOfContents({} as any);
expect(spy.called).to.equal(true); expect(spy.called).to.equal(true);
}); });
});
describe("#addImage", () => {
it("should call the underlying document's addImage", () => { it("should call the underlying document's addImage", () => {
const wrapper = new File(); const wrapper = new File();
const spy = sinon.spy(wrapper.Document, "addParagraph"); const spy = sinon.spy(wrapper.Document, "addParagraph");
// tslint:disable-next-line:no-any // tslint:disable-next-line:no-any
wrapper.addImage({} as any); wrapper.add(new Paragraph(""));
expect(spy.called).to.equal(true); expect(spy.called).to.equal(true);
}); });

View File

@ -15,7 +15,7 @@ import { IFileProperties } from "./file-properties";
import { FooterWrapper, IDocumentFooter } from "./footer-wrapper"; import { FooterWrapper, IDocumentFooter } from "./footer-wrapper";
import { FootNotes } from "./footnotes"; import { FootNotes } from "./footnotes";
import { HeaderWrapper, IDocumentHeader } from "./header-wrapper"; import { HeaderWrapper, IDocumentHeader } from "./header-wrapper";
import { Image, Media } from "./media"; import { Media } from "./media";
import { Numbering } from "./numbering"; import { Numbering } from "./numbering";
import { Bookmark, Hyperlink, Paragraph } from "./paragraph"; import { Bookmark, Hyperlink, Paragraph } from "./paragraph";
import { Relationships } from "./relationships"; import { Relationships } from "./relationships";
@ -112,23 +112,19 @@ export class File {
this.settings = new Settings(); this.settings = new Settings();
} }
public addTableOfContents(toc: TableOfContents): File { public add(item: Paragraph | Table | TableOfContents): File {
this.document.addTableOfContents(toc); if (item instanceof Paragraph) {
return this; this.document.addParagraph(item);
} }
public addParagraph(paragraph: Paragraph): File { if (item instanceof Table) {
this.document.addParagraph(paragraph); this.document.addTable(item);
return this; }
}
public addTable(table: Table): File { if (item instanceof TableOfContents) {
this.document.addTable(table); this.document.addTableOfContents(item);
return this; }
}
public addImage(image: Image): File {
this.document.addParagraph(image.Paragraph);
return this; return this;
} }

View File

@ -7,21 +7,19 @@ import { Paragraph } from "./paragraph";
import { Table } from "./table"; import { Table } from "./table";
describe("HeaderWrapper", () => { describe("HeaderWrapper", () => {
describe("#addParagraph", () => { describe("#add", () => {
it("should call the underlying header's addParagraph", () => { it("should call the underlying header's addChildElement for Paragraph", () => {
const wrapper = new HeaderWrapper(new Media(), 1); const wrapper = new HeaderWrapper(new Media(), 1);
const spy = sinon.spy(wrapper.Header, "addParagraph"); const spy = sinon.spy(wrapper.Header, "addChildElement");
wrapper.addParagraph(new Paragraph({})); wrapper.add(new Paragraph({}));
expect(spy.called).to.equal(true); expect(spy.called).to.equal(true);
}); });
});
describe("#addTable", () => { it("should call the underlying header's addChildElement for Table", () => {
it("should call the underlying header's addTable", () => {
const wrapper = new HeaderWrapper(new Media(), 1); const wrapper = new HeaderWrapper(new Media(), 1);
const spy = sinon.spy(wrapper.Header, "addTable"); const spy = sinon.spy(wrapper.Header, "addChildElement");
wrapper.addTable( wrapper.add(
new Table({ new Table({
rows: 1, rows: 1,
columns: 1, columns: 1,
@ -35,7 +33,7 @@ describe("HeaderWrapper", () => {
describe("#addImage", () => { describe("#addImage", () => {
it("should call the underlying header's addImage", () => { it("should call the underlying header's addImage", () => {
const file = new HeaderWrapper(new Media(), 1); const file = new HeaderWrapper(new Media(), 1);
const spy = sinon.spy(file.Header, "addParagraph"); const spy = sinon.spy(file.Header, "add");
// tslint:disable-next-line:no-any // tslint:disable-next-line:no-any
file.addImage({} as any); file.addImage({} as any);

View File

@ -22,16 +22,14 @@ export class HeaderWrapper {
this.relationships = new Relationships(); this.relationships = new Relationships();
} }
public addParagraph(paragraph: Paragraph): void { public add(item: Paragraph | Table): HeaderWrapper {
this.header.addParagraph(paragraph); this.header.addChildElement(item);
}
public addTable(table: Table): void { return this;
this.header.addTable(table);
} }
public addImage(image: Image): HeaderWrapper { public addImage(image: Image): HeaderWrapper {
this.header.addParagraph(image.Paragraph); this.header.add(image.Paragraph);
return this; return this;
} }
@ -47,7 +45,7 @@ export class HeaderWrapper {
): Paragraph { ): Paragraph {
const image = Media.addImage(this, buffer, width, height, drawingOptions); const image = Media.addImage(this, buffer, width, height, drawingOptions);
const paragraph = new Paragraph(image); const paragraph = new Paragraph(image);
this.addParagraph(paragraph); this.add(paragraph);
return paragraph; return paragraph;
} }

View File

@ -49,11 +49,7 @@ export class Header extends InitializableXmlComponent {
return this.refId; return this.refId;
} }
public addParagraph(paragraph: Paragraph): void { public add(item: Paragraph | Table): void {
this.root.push(paragraph); this.root.push(item);
}
public addTable(table: Table): void {
this.root.push(table);
} }
} }