docxtemplater
Version:
docx and pptx generator working with templates and data (like Mustache, for Word and Powerpoint documents)
89 lines (81 loc) • 2.95 kB
JavaScript
;
var loopModule = require("./modules/loop.js");
var spacePreserveModule = require("./modules/space-preserve.js");
var rawXmlModule = require("./modules/rawxml.js");
var expandPairTrait = require("./modules/expand-pair-trait.js");
var render = require("./modules/render.js");
function PptXFileTypeConfig() {
return {
getTemplatedFiles: function getTemplatedFiles(zip) {
var slideTemplates = zip.file(/ppt\/(slideMasters)\/(slideMaster)\d+\.xml/).map(function (file) {
return file.name;
});
return slideTemplates.concat(["ppt/presentation.xml", "docProps/app.xml", "docProps/core.xml"]);
},
textPath: function textPath() {
return "ppt/slides/slide1.xml";
},
tagsXmlTextArray: ["Company", "HyperlinkBase", "Manager", "cp:category", "cp:keywords", "dc:creator", "dc:description", "dc:subject", "dc:title", "a:t", "m:t", "vt:lpstr"],
tagsXmlLexedArray: ["p:sp", "a:tc", "a:tr", "a:table", "a:p", "a:r", "a:rPr", "p:txBody", "a:txBody", "a:off", "a:ext", "p:graphicFrame", "p:xfrm", "a16:rowId"],
expandTags: [{
contains: "a:tc",
expand: "a:tr"
}],
onParagraphLoop: [{
contains: "a:p",
expand: "a:p",
onlyTextInTag: true
}],
tagRawXml: "p:sp",
baseModules: [loopModule, expandPairTrait, rawXmlModule, render],
tagShouldContain: [{
tag: "p:txBody",
shouldContain: ["a:p"],
value: "<a:p></a:p>"
}, {
tag: "a:txBody",
shouldContain: ["a:p"],
value: "<a:p></a:p>"
}]
};
}
function DocXFileTypeConfig() {
return {
getTemplatedFiles: function getTemplatedFiles(zip) {
var baseTags = ["docProps/core.xml", "docProps/app.xml", "word/settings.xml"];
var headerFooters = zip.file(/word\/(header|footer)\d+\.xml/).map(function (file) {
return file.name;
});
return headerFooters.concat(baseTags);
},
textPath: function textPath(doc) {
return doc.targets[0];
},
tagsXmlTextArray: ["Company", "HyperlinkBase", "Manager", "cp:category", "cp:keywords", "dc:creator", "dc:description", "dc:subject", "dc:title", "w:t", "m:t", "vt:lpstr"],
tagsXmlLexedArray: ["w:proofState", "w:tc", "w:tr", "w:table", "w:p", "w:r", "w:br", "w:rPr", "w:pPr", "w:spacing", "w:sdtContent", "w:drawing", "w:sectPr", "w:type", "w:headerReference", "w:footerReference"],
expandTags: [{
contains: "w:tc",
expand: "w:tr"
}],
onParagraphLoop: [{
contains: "w:p",
expand: "w:p",
onlyTextInTag: true
}],
tagRawXml: "w:p",
baseModules: [loopModule, spacePreserveModule, expandPairTrait, rawXmlModule, render],
tagShouldContain: [{
tag: "w:tc",
shouldContain: ["w:p"],
value: "<w:p></w:p>"
}, {
tag: "w:sdtContent",
shouldContain: ["w:p", "w:r"],
value: "<w:p></w:p>"
}]
};
}
module.exports = {
docx: DocXFileTypeConfig,
pptx: PptXFileTypeConfig
};