docxtemplater
Version:
Generate docx, pptx, and xlsx from templates (Word, Powerpoint and Excel documents), from Node.js, the Browser and the command line
72 lines (70 loc) • 2.07 kB
JavaScript
;
var _require = require("./errors.js"),
throwUnimplementedTagType = _require.throwUnimplementedTagType,
XTScopeParserError = _require.XTScopeParserError;
var _require2 = require("./doc-utils.js"),
pushArray = _require2.pushArray;
var getResolvedId = require("./get-resolved-id.js");
function moduleRender(part, options) {
for (var _i2 = 0, _options$modules2 = options.modules; _i2 < _options$modules2.length; _i2++) {
var _module = _options$modules2[_i2];
var 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);
};
var errors = [];
var parts = [];
for (var i = 0, len = compiled.length; i < len; i++) {
var part = compiled[i];
options.index = i;
options.resolvedId = getResolvedId(part, options);
var moduleRendered = void 0;
try {
moduleRendered = moduleRender(part, options);
} catch (e) {
if (e instanceof XTScopeParserError) {
errors.push(e);
parts.push(part);
continue;
}
throw e;
}
if (moduleRendered) {
if (moduleRendered.errors) {
pushArray(errors, moduleRendered.errors);
}
parts.push(moduleRendered);
continue;
}
if (part.type === "content" || part.type === "tag") {
parts.push(part);
continue;
}
throwUnimplementedTagType(part, i);
}
// This is done in two steps because for some files, it is possible to #edit-value-backwards
var totalParts = [];
for (var _i4 = 0; _i4 < parts.length; _i4++) {
var value = parts[_i4].value;
if (value instanceof Array) {
pushArray(totalParts, value);
} else if (value) {
totalParts.push(value);
}
}
return {
errors: errors,
parts: totalParts
};
}
module.exports = render;