277 lines
10 KiB
JavaScript
277 lines
10 KiB
JavaScript
"use strict";
|
|
|
|
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
var _require = require("lodash"),
|
|
cloneDeep = _require.cloneDeep;
|
|
var _require2 = require("../utils.js"),
|
|
resolveSoon = _require2.resolveSoon,
|
|
cleanRecursive = _require2.cleanRecursive,
|
|
createDocV3 = _require2.createDocV3,
|
|
captureLogs = _require2.captureLogs,
|
|
makeDocxV3 = _require2.makeDocxV3,
|
|
createXmlTemplaterDocxNoRender = _require2.createXmlTemplaterDocxNoRender,
|
|
expect = _require2.expect,
|
|
shouldBeSame = _require2.shouldBeSame,
|
|
expectToThrow = _require2.expectToThrow,
|
|
wrapMultiError = _require2.wrapMultiError,
|
|
expectToThrowAsync = _require2.expectToThrowAsync;
|
|
var Errors = require("../../errors.js");
|
|
var rawXMLValue = require("../data/raw-xml-pptx.js");
|
|
describe("V3 API", function () {
|
|
beforeEach(function () {
|
|
this.deprecations = null;
|
|
this.capture = captureLogs();
|
|
});
|
|
afterEach(function () {
|
|
this.capture.stop();
|
|
if (this.deprecations != null) {
|
|
var logs = this.capture.logs();
|
|
var _loop = function _loop() {
|
|
var deprecation = _this$deprecations2[_i2];
|
|
var found = logs.some(function (log) {
|
|
if (log.indexOf(deprecation) !== -1) {
|
|
return true;
|
|
}
|
|
});
|
|
if (!found) {
|
|
throw new Error("Expected to get deprecation '".concat(deprecation, "'"));
|
|
}
|
|
};
|
|
for (var _i2 = 0, _this$deprecations2 = this.deprecations; _i2 < _this$deprecations2.length; _i2++) {
|
|
_loop();
|
|
}
|
|
}
|
|
});
|
|
it("should work with setOptions", function () {
|
|
this.deprecations = ["Deprecated docxtemplater constructor with no arguments, view upgrade guide : https://docxtemplater.com/docs/api/#upgrade-guide", 'Deprecated method ".setOptions", view upgrade guide : https://docxtemplater.com/docs/api/#upgrade-guide', 'Deprecated method ".attachModule", view upgrade guide : https://docxtemplater.com/docs/api/#upgrade-guide', 'Deprecated method ".loadZip", view upgrade guide : https://docxtemplater.com/docs/api/#upgrade-guide'];
|
|
var doc = createDocV3("tag-multiline.docx");
|
|
expect(function () {
|
|
return doc.setOptions();
|
|
}).to["throw"]("setOptions should be called with an object as first parameter");
|
|
});
|
|
it("should work when the delimiters are passed", function () {
|
|
this.deprecations = ['Deprecated method ".setData", view upgrade guide : https://docxtemplater.com/docs/api/#upgrade-guide'];
|
|
var options = {
|
|
delimiters: {
|
|
start: "<",
|
|
end: ">"
|
|
}
|
|
};
|
|
var doc = createDocV3("delimiter-gt.docx", options);
|
|
doc.setData({
|
|
user: "John"
|
|
});
|
|
doc.render();
|
|
expect(doc.getFullText()).to.be.equal("Hello John");
|
|
});
|
|
it("should work when setting from the Docxtemplater interface", function () {
|
|
var doc = createDocV3("tag-example.docx", {
|
|
parser: function parser(tag) {
|
|
return _defineProperty({}, "get", function get(scope) {
|
|
return scope[tag].toUpperCase();
|
|
});
|
|
}
|
|
});
|
|
doc.render({
|
|
first_name: "Hipp",
|
|
last_name: "Edgar",
|
|
phone: "0652455478",
|
|
description: "New Website"
|
|
});
|
|
expect(doc.getFullText()).to.be.equal("EDGAR HIPP");
|
|
expect(doc.getFullText("word/header1.xml")).to.be.equal("EDGAR HIPP0652455478NEW WEBSITE");
|
|
expect(doc.getFullText("word/footer1.xml")).to.be.equal("EDGARHIPP0652455478");
|
|
});
|
|
it("should work with simple raw pptx async", function () {
|
|
this.deprecations = ['Deprecated method ".compile", view upgrade guide : https://docxtemplater.com/docs/api/#upgrade-guide, stack', 'Deprecated method ".resolveData", view upgrade guide : https://docxtemplater.com/docs/api/#upgrade-guide', 'Deprecated method ".loadZip", view upgrade guide : https://docxtemplater.com/docs/api/#upgrade-guide'];
|
|
var scope, meta, tag;
|
|
var calls = 0;
|
|
var doc = createDocV3("raw-xml-example.pptx", {
|
|
parser: function parser(t) {
|
|
tag = t;
|
|
return {
|
|
get: function get(s, m) {
|
|
scope = s;
|
|
meta = m.meta;
|
|
calls++;
|
|
return scope[tag];
|
|
}
|
|
};
|
|
}
|
|
});
|
|
doc.compile();
|
|
return doc.resolveData({
|
|
raw: resolveSoon(rawXMLValue)
|
|
}).then(function () {
|
|
doc.render();
|
|
expect(calls).to.equal(1);
|
|
expect(meta).to.be.an("object");
|
|
expect(meta.part).to.be.an("object");
|
|
expect(meta.part.expanded).to.be.an("array");
|
|
expect(doc.getFullText()).to.be.equal("Hello World");
|
|
shouldBeSame({
|
|
doc: doc,
|
|
expectedName: "expected-raw-xml-example.pptx"
|
|
});
|
|
});
|
|
});
|
|
it("should fail when tag unclosed", function () {
|
|
var content = "<w:t>{user {name}</w:t>";
|
|
var expectedError = {
|
|
name: "TemplateError",
|
|
message: "Unclosed tag",
|
|
properties: {
|
|
file: "word/document.xml",
|
|
id: "unclosed_tag",
|
|
context: "{user ",
|
|
xtag: "user",
|
|
offset: 0
|
|
}
|
|
};
|
|
expectToThrow(function () {
|
|
return makeDocxV3(content, {
|
|
errorLogging: false
|
|
}).compile();
|
|
}, Errors.XTTemplateError, wrapMultiError(expectedError));
|
|
});
|
|
it("should show error when running resolveData before compile", function () {
|
|
var content = "<w:t>{#users}{user}{/}</w:t>";
|
|
var expectedError = {
|
|
name: "InternalError",
|
|
message: "You must run `.compile()` before running `.resolveData()`",
|
|
properties: {
|
|
id: "resolve_before_compile"
|
|
}
|
|
};
|
|
var doc = makeDocxV3(content);
|
|
return expectToThrowAsync(function () {
|
|
return doc.resolveData();
|
|
}, Errors.XTInternalError, expectedError);
|
|
});
|
|
it("should resolve with simple table", function () {
|
|
var doc = createDocV3("table-complex2-example.docx");
|
|
doc.compile();
|
|
return doc.resolveData({
|
|
table1: [{
|
|
t1data1: "t1-1row-data1",
|
|
t1data2: "t1-1row-data2",
|
|
t1data3: "t1-1row-data3",
|
|
t1data4: "t1-1row-data4"
|
|
}, {
|
|
t1data1: "t1-2row-data1",
|
|
t1data2: "t1-2row-data2",
|
|
t1data3: "t1-2row-data3",
|
|
t1data4: "t1-2row-data4"
|
|
}, {
|
|
t1data1: "t1-3row-data1",
|
|
t1data2: "t1-3row-data2",
|
|
t1data3: "t1-3row-data3",
|
|
t1data4: "t1-3row-data4"
|
|
}],
|
|
t1total1: "t1total1-data",
|
|
t1total2: "t1total2-data",
|
|
t1total3: "t1total3-data"
|
|
}).then(function (resolved) {
|
|
var myresolved = cloneDeep(resolved);
|
|
cleanRecursive(myresolved);
|
|
expect(myresolved).to.be.deep.equal([{
|
|
tag: "t1total1",
|
|
value: "t1total1-data"
|
|
}, {
|
|
tag: "t1total2",
|
|
value: "t1total2-data"
|
|
}, {
|
|
tag: "t1total3",
|
|
value: "t1total3-data"
|
|
}, {
|
|
tag: "table1",
|
|
value: [[{
|
|
tag: "t1data1",
|
|
value: "t1-1row-data1"
|
|
}, {
|
|
tag: "t1data2",
|
|
value: "t1-1row-data2"
|
|
}, {
|
|
tag: "t1data3",
|
|
value: "t1-1row-data3"
|
|
}, {
|
|
tag: "t1data4",
|
|
value: "t1-1row-data4"
|
|
}], [{
|
|
tag: "t1data1",
|
|
value: "t1-2row-data1"
|
|
}, {
|
|
tag: "t1data2",
|
|
value: "t1-2row-data2"
|
|
}, {
|
|
tag: "t1data3",
|
|
value: "t1-2row-data3"
|
|
}, {
|
|
tag: "t1data4",
|
|
value: "t1-2row-data4"
|
|
}], [{
|
|
tag: "t1data1",
|
|
value: "t1-3row-data1"
|
|
}, {
|
|
tag: "t1data2",
|
|
value: "t1-3row-data2"
|
|
}, {
|
|
tag: "t1data3",
|
|
value: "t1-3row-data3"
|
|
}, {
|
|
tag: "t1data4",
|
|
value: "t1-3row-data4"
|
|
}]]
|
|
}]);
|
|
doc.render();
|
|
expect(doc.getFullText()).to.be.equal("TABLE1COLUMN1COLUMN2COLUMN3COLUMN4t1-1row-data1t1-1row-data2t1-1row-data3t1-1row-data4t1-2row-data1t1-2row-data2t1-2row-data3t1-2row-data4t1-3row-data1t1-3row-data2t1-3row-data3t1-3row-data4TOTALt1total1-datat1total2-datat1total3-data");
|
|
});
|
|
});
|
|
describe("Using the resolveOffset property", function () {
|
|
it("should work", function () {
|
|
var content = "<w:t>{#loop_first}{#loop_second}{name_inner} {name_outer}{/loop_second}{/loop_first}</w:t>";
|
|
var xmlt = createXmlTemplaterDocxNoRender(content, {}).compile();
|
|
return xmlt.resolveData({
|
|
loop_first: [1],
|
|
loop_second: [{
|
|
name_inner: "John"
|
|
}],
|
|
name_outer: "Henry"
|
|
}).then(function () {
|
|
var sm = xmlt.scopeManagers["word/document.xml"];
|
|
expect(sm.finishedResolving).to.equal(true);
|
|
sm.scopePath.unshift("aaa");
|
|
sm.scopePathItem.unshift(122);
|
|
sm.scopePathLength.unshift(144);
|
|
sm.scopeLindex.unshift(555);
|
|
sm.resolveOffset = 1;
|
|
var part = {
|
|
value: "loop_first",
|
|
lIndex: 3
|
|
};
|
|
var part2 = {
|
|
value: "loop_second",
|
|
lIndex: 6
|
|
};
|
|
var val;
|
|
function loopOver(scope, i, length) {
|
|
var ssm = sm.createSubScopeManager(scope, part.value, i, part, length);
|
|
val = ssm.getValue("loop_second", {
|
|
part: part2
|
|
});
|
|
}
|
|
sm.loopOver("loop_first", loopOver, false, {
|
|
part: {
|
|
value: "loop_first",
|
|
lIndex: 3
|
|
}
|
|
});
|
|
expect(val[0][0].tag).to.equal("name_inner");
|
|
expect(val[0][0].value).to.equal("John");
|
|
});
|
|
});
|
|
});
|
|
}); |