Merge branch 'master' into feat/footnotes
# Conflicts: # demo/demo16.js # src/file/file.ts
This commit is contained in:
75
src/export/packer/compiler.spec.ts
Normal file
75
src/export/packer/compiler.spec.ts
Normal file
@ -0,0 +1,75 @@
|
||||
/* tslint:disable:typedef space-before-function-paren */
|
||||
import * as fs from "fs";
|
||||
import * as JSZip from "jszip";
|
||||
|
||||
import { expect } from "chai";
|
||||
import { File } from "../../file";
|
||||
import { Compiler } from "./compiler";
|
||||
|
||||
describe("Compiler", () => {
|
||||
let compiler: Compiler;
|
||||
let file: File;
|
||||
|
||||
beforeEach(() => {
|
||||
file = new File();
|
||||
compiler = new Compiler(file);
|
||||
});
|
||||
|
||||
describe("#compile()", () => {
|
||||
it("should pack all the content", async function() {
|
||||
this.timeout(99999999);
|
||||
const fileName = "build/tests/test.docx";
|
||||
await compiler.compile(fs.createWriteStream(fileName));
|
||||
|
||||
const docxFile = fs.readFileSync(fileName);
|
||||
const zipFile: JSZip = await JSZip.loadAsync(docxFile);
|
||||
const fileNames = Object.keys(zipFile.files).map((f) => zipFile.files[f].name);
|
||||
|
||||
expect(fileNames).is.an.instanceof(Array);
|
||||
expect(fileNames).has.length(12);
|
||||
expect(fileNames).to.include("word/document.xml");
|
||||
expect(fileNames).to.include("word/styles.xml");
|
||||
expect(fileNames).to.include("docProps/core.xml");
|
||||
expect(fileNames).to.include("docProps/app.xml");
|
||||
expect(fileNames).to.include("word/numbering.xml");
|
||||
expect(fileNames).to.include("word/header1.xml");
|
||||
expect(fileNames).to.include("word/_rels/header1.xml.rels");
|
||||
expect(fileNames).to.include("word/footer1.xml");
|
||||
expect(fileNames).to.include("word/_rels/footer1.xml.rels");
|
||||
expect(fileNames).to.include("word/_rels/document.xml.rels");
|
||||
expect(fileNames).to.include("[Content_Types].xml");
|
||||
expect(fileNames).to.include("_rels/.rels");
|
||||
});
|
||||
|
||||
it("should pack all additional headers and footers", async function() {
|
||||
file.createFooter();
|
||||
file.createFooter();
|
||||
file.createHeader();
|
||||
file.createHeader();
|
||||
|
||||
this.timeout(99999999);
|
||||
const fileName = "build/tests/test2.docx";
|
||||
await compiler.compile(fs.createWriteStream(fileName));
|
||||
|
||||
const docxFile = fs.readFileSync(fileName);
|
||||
const zipFile: JSZip = await JSZip.loadAsync(docxFile);
|
||||
const fileNames = Object.keys(zipFile.files).map((f) => zipFile.files[f].name);
|
||||
|
||||
expect(fileNames).is.an.instanceof(Array);
|
||||
expect(fileNames).has.length(20);
|
||||
|
||||
expect(fileNames).to.include("word/header1.xml");
|
||||
expect(fileNames).to.include("word/_rels/header1.xml.rels");
|
||||
expect(fileNames).to.include("word/header2.xml");
|
||||
expect(fileNames).to.include("word/_rels/header2.xml.rels");
|
||||
expect(fileNames).to.include("word/header3.xml");
|
||||
expect(fileNames).to.include("word/_rels/header3.xml.rels");
|
||||
expect(fileNames).to.include("word/footer1.xml");
|
||||
expect(fileNames).to.include("word/_rels/footer1.xml.rels");
|
||||
expect(fileNames).to.include("word/footer2.xml");
|
||||
expect(fileNames).to.include("word/_rels/footer2.xml.rels");
|
||||
expect(fileNames).to.include("word/footer3.xml");
|
||||
expect(fileNames).to.include("word/_rels/footer3.xml.rels");
|
||||
});
|
||||
});
|
||||
});
|
@ -33,11 +33,6 @@ export class Compiler {
|
||||
const xmlNumbering = xml(this.formatter.format(this.file.Numbering));
|
||||
const xmlRelationships = xml(this.formatter.format(this.file.DocumentRelationships));
|
||||
const xmlFileRelationships = xml(this.formatter.format(this.file.FileRelationships));
|
||||
const xmlHeader = xml(this.formatter.format(this.file.Header.Header));
|
||||
const xmlHeader2 = xml(this.formatter.format(this.file.firstPageHeader.Header));
|
||||
const xmlFooter = xml(this.formatter.format(this.file.Footer.Footer));
|
||||
const xmlHeaderRelationships = xml(this.formatter.format(this.file.Header.Relationships));
|
||||
const xmlFooterRelationships = xml(this.formatter.format(this.file.Footer.Relationships));
|
||||
const xmlContentTypes = xml(this.formatter.format(this.file.ContentTypes));
|
||||
const xmlAppProperties = xml(this.formatter.format(this.file.AppProperties));
|
||||
const xmlFootnotes = xml(this.formatter.format(this.file.FootNotes));
|
||||
@ -62,17 +57,29 @@ export class Compiler {
|
||||
name: "word/numbering.xml",
|
||||
});
|
||||
|
||||
this.archive.append(xmlHeader, {
|
||||
name: "word/header1.xml",
|
||||
});
|
||||
// headers
|
||||
for (let i = 0; i < this.file.Headers.length; i++) {
|
||||
const element = this.file.Headers[i];
|
||||
this.archive.append(xml(this.formatter.format(element.Header)), {
|
||||
name: `word/header${i + 1}.xml`,
|
||||
});
|
||||
|
||||
this.archive.append(xmlHeader2, {
|
||||
name: "word/header2.xml",
|
||||
});
|
||||
this.archive.append(xml(this.formatter.format(element.Relationships)), {
|
||||
name: `word/_rels/header${i + 1}.xml.rels`,
|
||||
});
|
||||
}
|
||||
|
||||
this.archive.append(xmlFooter, {
|
||||
name: "word/footer1.xml",
|
||||
});
|
||||
// footers
|
||||
for (let i = 0; i < this.file.Footers.length; i++) {
|
||||
const element = this.file.Footers[i];
|
||||
this.archive.append(xml(this.formatter.format(element.Footer)), {
|
||||
name: `word/footer${i + 1}.xml`,
|
||||
});
|
||||
|
||||
this.archive.append(xml(this.formatter.format(element.Relationships)), {
|
||||
name: `word/_rels/footer${i + 1}.xml.rels`,
|
||||
});
|
||||
}
|
||||
|
||||
this.archive.append(xmlFootnotes, {
|
||||
name: "word/footnotes.xml",
|
||||
@ -82,14 +89,6 @@ export class Compiler {
|
||||
name: "word/_rels/document.xml.rels",
|
||||
});
|
||||
|
||||
this.archive.append(xmlHeaderRelationships, {
|
||||
name: "word/_rels/header1.xml.rels",
|
||||
});
|
||||
|
||||
this.archive.append(xmlFooterRelationships, {
|
||||
name: "word/_rels/footer1.xml.rels",
|
||||
});
|
||||
|
||||
this.archive.append(xmlContentTypes, {
|
||||
name: "[Content_Types].xml",
|
||||
});
|
||||
|
Reference in New Issue
Block a user