docxtemplater
Version:
docx and pptx generator working with templates and data (like Mustache, for Word and Powerpoint documents)
71 lines (54 loc) • 1.57 kB
JavaScript
;
var _require = require("./doc-utils.js"),
concatArrays = _require.concatArrays,
utf8ToWord = _require.utf8ToWord;
var _require2 = require("./errors.js"),
throwUnimplementedTagType = _require2.throwUnimplementedTagType;
function moduleRender(part, options) {
var moduleRendered;
for (var i = 0, l = options.modules.length; i < l; i++) {
var _module = options.modules[i];
moduleRendered = _module.render(part, options);
if (moduleRendered) {
return moduleRendered;
}
}
return false;
}
function render(options) {
var baseNullGetter = options.baseNullGetter;
var compiled = options.compiled,
scopeManager = options.scopeManager;
options.nullGetter = function (part, sm) {
return baseNullGetter(part, sm || scopeManager);
};
if (!options.prefix) {
options.prefix = "";
}
if (options.index) {
options.prefix = options.prefix + options.index + "-";
}
var errors = [];
var parts = compiled.map(function (part, i) {
options.index = i;
var moduleRendered = moduleRender(part, options);
if (moduleRendered) {
if (moduleRendered.errors) {
errors = concatArrays([errors, moduleRendered.errors]);
}
return moduleRendered.value;
}
if (part.type === "content" || part.type === "tag") {
if (part.position === "insidetag") {
return utf8ToWord(part.value);
}
return part.value;
}
throwUnimplementedTagType(part, i);
});
return {
errors: errors,
parts: parts
};
}
module.exports = render;