Fix naming
This commit is contained in:
@ -10,9 +10,9 @@ import {
|
||||
IHeaderOptions,
|
||||
SectionPropertiesOptions,
|
||||
} from "./document/body/section-properties";
|
||||
import { FooterWrapper } from "./footer-wrapper";
|
||||
import { FooterWrapper, IDocumentFooter } from "./footer-wrapper";
|
||||
import { FootNotes } from "./footnotes";
|
||||
import { HeaderWrapper } from "./header-wrapper";
|
||||
import { HeaderWrapper, IDocumentHeader } from "./header-wrapper";
|
||||
import { Image, Media } from "./media";
|
||||
import { Numbering } from "./numbering";
|
||||
import { Bookmark, Hyperlink, Paragraph } from "./paragraph";
|
||||
@ -22,9 +22,6 @@ import { ExternalStylesFactory } from "./styles/external-styles-factory";
|
||||
import { DefaultStylesFactory } from "./styles/factory";
|
||||
import { Table } from "./table";
|
||||
|
||||
type DocumentHeaders = Array<{ header: HeaderWrapper; type: HeaderReferenceType }>;
|
||||
type DocumentFooters = Array<{ footer: FooterWrapper; type: FooterReferenceType }>;
|
||||
|
||||
export class File {
|
||||
private readonly document: Document;
|
||||
private readonly styles: Styles;
|
||||
@ -33,8 +30,8 @@ export class File {
|
||||
private readonly media: Media;
|
||||
private readonly docRelationships: Relationships;
|
||||
private readonly fileRelationships: Relationships;
|
||||
private readonly documentHeaders: DocumentHeaders = [];
|
||||
private readonly documentFooters: DocumentFooters = [];
|
||||
private readonly headers: IDocumentHeader[] = [];
|
||||
private readonly footers: IDocumentFooter[] = [];
|
||||
|
||||
private readonly footNotes: FootNotes;
|
||||
|
||||
@ -128,7 +125,7 @@ export class File {
|
||||
this.footNotes = new FootNotes();
|
||||
|
||||
const headersOptions: IHeaderOptions[] = [];
|
||||
for (const documentHeader of this.documentHeaders) {
|
||||
for (const documentHeader of this.headers) {
|
||||
headersOptions.push({
|
||||
headerId: documentHeader.header.Header.ReferenceId,
|
||||
headerType: documentHeader.type,
|
||||
@ -136,7 +133,7 @@ export class File {
|
||||
}
|
||||
|
||||
const footersOptions: IFooterOptions[] = [];
|
||||
for (const documentFooter of this.documentFooters) {
|
||||
for (const documentFooter of this.footers) {
|
||||
footersOptions.push({
|
||||
footerId: documentFooter.footer.Footer.ReferenceId,
|
||||
footerType: documentFooter.type,
|
||||
@ -244,7 +241,7 @@ export class File {
|
||||
}
|
||||
|
||||
public getFooterByReferenceNumber(refId: number): FooterWrapper {
|
||||
const entry = this.documentFooters.map((item) => item.footer).find((h) => h.Footer.ReferenceId === refId);
|
||||
const entry = this.footers.map((item) => item.footer).find((h) => h.Footer.ReferenceId === refId);
|
||||
if (entry) {
|
||||
return entry;
|
||||
}
|
||||
@ -252,7 +249,7 @@ export class File {
|
||||
}
|
||||
|
||||
public getHeaderByReferenceNumber(refId: number): HeaderWrapper {
|
||||
const entry = this.documentHeaders.map((item) => item.header).find((h) => h.Header.ReferenceId === refId);
|
||||
const entry = this.headers.map((item) => item.header).find((h) => h.Header.ReferenceId === refId);
|
||||
if (entry) {
|
||||
return entry;
|
||||
}
|
||||
@ -260,23 +257,23 @@ export class File {
|
||||
}
|
||||
|
||||
private addHeaderToDocument(header: HeaderWrapper, type: HeaderReferenceType = HeaderReferenceType.DEFAULT): void {
|
||||
this.documentHeaders.push({ header, type });
|
||||
this.headers.push({ header, type });
|
||||
this.docRelationships.createRelationship(
|
||||
header.Header.ReferenceId,
|
||||
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/header",
|
||||
`header${this.documentHeaders.length}.xml`,
|
||||
`header${this.headers.length}.xml`,
|
||||
);
|
||||
this.contentTypes.addHeader(this.documentHeaders.length);
|
||||
this.contentTypes.addHeader(this.headers.length);
|
||||
}
|
||||
|
||||
private addFooterToDocument(footer: FooterWrapper, type: FooterReferenceType = FooterReferenceType.DEFAULT): void {
|
||||
this.documentFooters.push({ footer, type });
|
||||
this.footers.push({ footer, type });
|
||||
this.docRelationships.createRelationship(
|
||||
footer.Footer.ReferenceId,
|
||||
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer",
|
||||
`footer${this.documentFooters.length}.xml`,
|
||||
`footer${this.footers.length}.xml`,
|
||||
);
|
||||
this.contentTypes.addFooter(this.documentFooters.length);
|
||||
this.contentTypes.addFooter(this.footers.length);
|
||||
}
|
||||
|
||||
public get Document(): Document {
|
||||
@ -308,19 +305,19 @@ export class File {
|
||||
}
|
||||
|
||||
public get Header(): HeaderWrapper {
|
||||
return this.documentHeaders[0].header;
|
||||
return this.headers[0].header;
|
||||
}
|
||||
|
||||
public get Headers(): HeaderWrapper[] {
|
||||
return this.documentHeaders.map((item) => item.header);
|
||||
return this.headers.map((item) => item.header);
|
||||
}
|
||||
|
||||
public get Footer(): FooterWrapper {
|
||||
return this.documentFooters[0].footer;
|
||||
return this.footers[0].footer;
|
||||
}
|
||||
|
||||
public get Footers(): FooterWrapper[] {
|
||||
return this.documentFooters.map((item) => item.footer);
|
||||
return this.footers.map((item) => item.footer);
|
||||
}
|
||||
|
||||
public get ContentTypes(): ContentTypes {
|
||||
|
@ -1,11 +1,17 @@
|
||||
import { IMediaData } from "file/media";
|
||||
import { XmlComponent } from "file/xml-components";
|
||||
import { FooterReferenceType } from "./document";
|
||||
import { Footer } from "./footer/footer";
|
||||
import { Image, Media } from "./media";
|
||||
import { ImageParagraph, Paragraph } from "./paragraph";
|
||||
import { Relationships } from "./relationships";
|
||||
import { Table } from "./table";
|
||||
|
||||
export interface IDocumentFooter {
|
||||
footer: FooterWrapper;
|
||||
type: FooterReferenceType;
|
||||
}
|
||||
|
||||
export class FooterWrapper {
|
||||
private readonly footer: Footer;
|
||||
private readonly relationships: Relationships;
|
||||
|
@ -1,11 +1,17 @@
|
||||
import { IMediaData } from "file/media";
|
||||
import { XmlComponent } from "file/xml-components";
|
||||
import { HeaderReferenceType } from "./document";
|
||||
import { Header } from "./header/header";
|
||||
import { Image, Media } from "./media";
|
||||
import { ImageParagraph, Paragraph } from "./paragraph";
|
||||
import { Relationships } from "./relationships";
|
||||
import { Table } from "./table";
|
||||
|
||||
export interface IDocumentHeader {
|
||||
header: HeaderWrapper;
|
||||
type: HeaderReferenceType;
|
||||
}
|
||||
|
||||
export class HeaderWrapper {
|
||||
private readonly header: Header;
|
||||
private readonly relationships: Relationships;
|
||||
|
@ -3,8 +3,8 @@ import * as JSZip from "jszip";
|
||||
|
||||
import { FooterReferenceType } from "file/document/body/section-properties/footer-reference";
|
||||
import { HeaderReferenceType } from "file/document/body/section-properties/header-reference";
|
||||
import { FooterWrapper } from "file/footer-wrapper";
|
||||
import { HeaderWrapper } from "file/header-wrapper";
|
||||
import { FooterWrapper, IDocumentFooter } from "file/footer-wrapper";
|
||||
import { HeaderWrapper, IDocumentHeader } from "file/header-wrapper";
|
||||
import { convertToXmlComponent, ImportedXmlComponent, parseOptions } from "file/xml-components";
|
||||
|
||||
const schemeToType = {
|
||||
@ -18,19 +18,16 @@ interface IDocumentRefs {
|
||||
footers: Array<{ id: number; type: FooterReferenceType }>;
|
||||
}
|
||||
|
||||
interface IRelationFileInfo {
|
||||
interface IRelationshipFileInfo {
|
||||
id: number;
|
||||
targetFile: string;
|
||||
type: "header" | "footer" | "image";
|
||||
}
|
||||
|
||||
type DocumentHeaders = Array<{ type: HeaderReferenceType; header: HeaderWrapper }>;
|
||||
type DocumentFooters = Array<{ type: FooterReferenceType; footer: FooterWrapper }>;
|
||||
|
||||
export interface ITemplateDocument {
|
||||
currentRelationshipId: number;
|
||||
headers: DocumentHeaders;
|
||||
footers: DocumentFooters;
|
||||
headers: IDocumentHeader[];
|
||||
footers: IDocumentFooter[];
|
||||
}
|
||||
|
||||
export class ImportDocx {
|
||||
@ -47,12 +44,12 @@ export class ImportDocx {
|
||||
const documentRefs: IDocumentRefs = this.extractDocumentRefs(await documentContent.async("text"));
|
||||
|
||||
const relationshipContent = zipContent.files["word/_rels/document.xml.rels"];
|
||||
const documentRelations: IRelationFileInfo[] = this.findReferenceFiles(await relationshipContent.async("text"));
|
||||
const documentRelationships: IRelationshipFileInfo[] = this.findReferenceFiles(await relationshipContent.async("text"));
|
||||
|
||||
const headers: DocumentHeaders = [];
|
||||
const headers: IDocumentHeader[] = [];
|
||||
for (const headerRef of documentRefs.headers) {
|
||||
const headerKey = "w:hdr";
|
||||
const relationFileInfo = documentRelations.find((rel) => rel.id === headerRef.id);
|
||||
const relationFileInfo = documentRelationships.find((rel) => rel.id === headerRef.id);
|
||||
if (relationFileInfo === null || !relationFileInfo) {
|
||||
throw new Error(`Can not find target file for id ${headerRef.id}`);
|
||||
}
|
||||
@ -67,10 +64,10 @@ export class ImportDocx {
|
||||
headers.push({ type: headerRef.type, header });
|
||||
}
|
||||
|
||||
const footers: DocumentFooters = [];
|
||||
const footers: IDocumentFooter[] = [];
|
||||
for (const footerRef of documentRefs.footers) {
|
||||
const footerKey = "w:ftr";
|
||||
const relationFileInfo = documentRelations.find((rel) => rel.id === footerRef.id);
|
||||
const relationFileInfo = documentRelationships.find((rel) => rel.id === footerRef.id);
|
||||
if (relationFileInfo === null || !relationFileInfo) {
|
||||
throw new Error(`Can not find target file for id ${footerRef.id}`);
|
||||
}
|
||||
@ -88,11 +85,11 @@ export class ImportDocx {
|
||||
}
|
||||
|
||||
public async addImagesToWrapper(
|
||||
relationFile: IRelationFileInfo,
|
||||
relationFile: IRelationshipFileInfo,
|
||||
zipContent: JSZip,
|
||||
wrapper: HeaderWrapper | FooterWrapper,
|
||||
): Promise<void> {
|
||||
let wrapperImagesReferences: IRelationFileInfo[] = [];
|
||||
let wrapperImagesReferences: IRelationshipFileInfo[] = [];
|
||||
const refFile = zipContent.files[`word/_rels/${relationFile.targetFile}.rels`];
|
||||
if (refFile) {
|
||||
const xmlRef = await refFile.async("text");
|
||||
@ -104,12 +101,12 @@ export class ImportDocx {
|
||||
}
|
||||
}
|
||||
|
||||
public findReferenceFiles(xmlData: string): IRelationFileInfo[] {
|
||||
public findReferenceFiles(xmlData: string): IRelationshipFileInfo[] {
|
||||
const xmlObj = fastXmlParser.parse(xmlData, parseOptions);
|
||||
const relationXmlArray = Array.isArray(xmlObj.Relationships.Relationship)
|
||||
? xmlObj.Relationships.Relationship
|
||||
: [xmlObj.Relationships.Relationship];
|
||||
const relations: IRelationFileInfo[] = relationXmlArray
|
||||
const relations: IRelationshipFileInfo[] = relationXmlArray
|
||||
.map((item) => {
|
||||
return {
|
||||
id: this.parseRefId(item._attr.Id),
|
||||
|
Reference in New Issue
Block a user