Skip to content

Commit

Permalink
fix: updated documentrels xml generation
Browse files Browse the repository at this point in the history
  • Loading branch information
privateOmega committed May 28, 2020
1 parent f413ad8 commit 433e4b4
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 12 deletions.
51 changes: 44 additions & 7 deletions src/docx-document.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import {
generateCoreXML,
generateStylesXML,
generateNumberingXMLTemplate,
generateDocumentRelsXML,
generateDocumentRelsXMLTemplate,
} from './schemas';
import { renderDocumentFile } from './helpers';
import generateDocumentTemplate from '../template/document.template';
Expand Down Expand Up @@ -106,7 +106,6 @@ class DocxDocument {
return generateStylesXML(stylingInstancesXML);
}

// eslint-disable-next-line class-methods-use-this
generateNumberingXML() {
const numberingXML = create(
{ encoding: 'UTF-8', standalone: true },
Expand Down Expand Up @@ -137,20 +136,58 @@ class DocxDocument {
return numberingXML.toString({ prettyPrint: true });
}

// eslint-disable-next-line class-methods-use-this
generateDocumentRelsXML() {
// TODO: Convert documentRels array into appropriate XML
const documentRelationshipsXML = '';
const documentRelsXML = create(
{ encoding: 'UTF-8', standalone: true },
generateDocumentRelsXMLTemplate()
);

return generateDocumentRelsXML(documentRelationshipsXML);
this.documentRelsObjects.forEach(
// eslint-disable-next-line array-callback-return
({ relationshipId, type, target, targetMode }) => {
const relationshipFragment = fragment()
.ele('Relationship')
.att('Id', `rId${relationshipId}`)
.att('Type', type)
.att('Target', target)
.att('TargetMode', targetMode)
.up();
documentRelsXML.root().import(relationshipFragment);
}
);

return documentRelsXML.toString({ prettyPrint: true });
}

createOrderedList(ordered = false) {
createNumbering(ordered = false) {
this.lastNumberingId += 1;
this.numberingObjects.push({ numberingId: this.lastNumberingId, ordered });

return this.lastNumberingId;
}

createDocumentRelationships(type, target, targetMode = 'External') {
this.lastDocumentRelsId += 1;
let relationshipType;
switch (type) {
case 'hyperlink':
relationshipType = 'http://schemas.microsoft.com/office/2006/relationships/hyperlink';
break;
case 'image':
relationshipType = 'http://schemas.microsoft.com/office/2006/relationships/image';
break;
default:
break;
}
this.numberingObjects.push({
relationshipId: this.lastDocumentRelsId,
type: relationshipType,
target,
targetMode,
});

return this.lastDocumentRelsId;
}
}

export default DocxDocument;
2 changes: 1 addition & 1 deletion src/helpers/render-document-file.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ function findXMLEquivalent(docxDocumentInstance, vNode, xmlFragment) {
case 'ol':
case 'ul':
// eslint-disable-next-line no-case-declarations
const numberingId = docxDocumentInstance.createOrderedList(vNode.tagName === 'ol');
const numberingId = docxDocumentInstance.createNumbering(vNode.tagName === 'ol');
// eslint-disable-next-line no-plusplus
for (let index = 0; index < vNode.children.length; index++) {
const childVNode = vNode.children[index];
Expand Down
5 changes: 2 additions & 3 deletions src/schemas/documentRels.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
const generateDocumentRelsXML = (documentRelationshipsXML = '') => {
const generateDocumentRelsXMLTemplate = () => {
return `
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
${documentRelationshipsXML}
</Relationships>
`;
};

export default generateDocumentRelsXML;
export default generateDocumentRelsXMLTemplate;
2 changes: 1 addition & 1 deletion src/schemas/index.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
export { default as contentTypesXML } from './content-types';
export { default as generateCoreXML } from './core';
export { default as generateDocumentRelsXML } from './documentRels';
export { default as generateDocumentRelsXMLTemplate } from './documentRels';
export { default as relsXML } from './rels';
export { default as generateNumberingXMLTemplate } from './numbering';
export { default as generateStylesXML } from './styles';

0 comments on commit 433e4b4

Please sign in to comment.