Commit 6e9e94bf authored by Hamza's avatar Hamza

adding the possibility to jio to send parameters to wkhtmltopdf while...

adding the possibility to jio to send parameters to wkhtmltopdf while converting a html to a pdf using cloudooo
parent 5d72e7e1
......@@ -61,7 +61,7 @@ ${LINTDIR}/queries/query.js: ${SRCDIR}/queries/query.js
${LINTDIR}/${TESTDIR}/jio.storage/%.js: ${TESTDIR}/jio.storage/%.js
@mkdir -p $(@D)
${JSLINT} ${LINTOPTS} --predef QUnit --predef RSVP --predef jIO $<
${JSLINT} ${LINTOPTS} --predef QUnit --predef RSVP --predef window --predef jIO --predef ArrayBuffer --predef Uint8Array $<
@cat $< > $@
${LINTDIR}/${TESTDIR}/queries/%.js: ${TESTDIR}/queries/%.js
......
......@@ -26,19 +26,45 @@
var parser = new DOMParser(),
serializer = new XMLSerializer();
function makeXmlRpcRequest(file, from, to) {
function makeXmlRpcRequest(file, from, to, conversion_kw) {
var xml = parser.parseFromString(
'<?xml version="1.0" encoding="UTF-8"?><methodCall>' +
'<methodName>convertFile</methodName><params>' +
'<param><value><string></string></value></param>' +
'<param><value><string></string></value></param>' +
'<param><value><string></string></value></param></params></methodCall>',
'<param><value><string></string></value></param>' +
'<param><value><boolean>0</boolean></value></param>' +
'<param><value><boolean>0</boolean></value></param>' +
'<param><struct></struct></param>' +
'</params></methodCall>',
'text/xml'
),
element_value,
member,
key,
struct = xml.getElementsByTagName('struct'),
string_list = xml.getElementsByTagName('string');
string_list[0].textContent = file;
string_list[1].textContent = from;
string_list[2].textContent = to;
if (conversion_kw) {
for (key in conversion_kw) {
if (conversion_kw.hasOwnProperty(key)) {
element_value = parser.parseFromString(
'<' + conversion_kw[key][1] + '></' + conversion_kw[key][1] + '>',
'text/xml'
).firstChild;
member = parser.parseFromString(
'<member><name></name><value></value></member>',
'text/xml'
).firstChild;
element_value.textContent = conversion_kw[key][0];
member.getElementsByTagName('name')[0].textContent = key;
member.getElementsByTagName('value')[0].appendChild(element_value);
struct[0].appendChild(member);
}
}
}
return serializer.serializeToString(xml);
}
......@@ -47,7 +73,7 @@
* from a format to another
* return converted blob.
**/
function convert(url, blob, from, to) {
function convert(url, blob, from, to, conversion_kw) {
return new RSVP.Queue()
.push(function () {
return jIO.util.readBlobAsDataURL(blob);
......@@ -59,7 +85,8 @@
data: makeXmlRpcRequest(
result.target.result.split('base64,')[1],
from,
to
to,
conversion_kw
)
});
})
......@@ -109,11 +136,13 @@
return this._sub_storage.getAttachment.apply(this._sub_storage, arguments);
};
CloudoooStorage.prototype.putAttachment = function (id, name, blob) {
CloudoooStorage.prototype.putAttachment = function (id, name, blob,
conversion_kw
) {
var storage = this;
return storage.get(id)
.push(function (doc) {
return convert(storage._url, blob, doc.from, doc.to);
return convert(storage._url, blob, doc.from, doc.to, conversion_kw);
})
.push(function (converted_blob) {
return storage._sub_storage.putAttachment(id, name, converted_blob);
......
......@@ -20,7 +20,8 @@
/*jslint nomen: true*/
/*global jIO, Blob, sinon, DOMParser, XMLSerializer*/
(function (jIO, Blob, sinon, DOMParser, XMLSerializer) {
(function (window, jIO, Blob, sinon, DOMParser, XMLSerializer,
ArrayBuffer, Uint8Array) {
"use strict";
var test = QUnit.test,
stop = QUnit.stop,
......@@ -392,8 +393,11 @@
'<methodName>convertFile</methodName><params><param><value>' +
'<string>ZG9jdW1lbnRfZG9jeF9mb3JtYXQ=</string></value></param>' +
'<param><value><string>docx</string></value></param>' +
'<param><value><string>docy' +
'</string></value></param></params></methodCall>',
'<param><value><string>docy</string></value></param>' +
'<param><value><boolean>0</boolean></value></param>' +
'<param><value><boolean>0</boolean></value></param>' +
'<param><struct></struct></param>' +
'</params></methodCall>',
'text/xml'
));
......@@ -414,7 +418,7 @@
return {from: "docx", to: "docy"};
};
return jio.putAttachment("bar", "data", blob_convert)
return jio.putAttachment("bar", "data", blob_convert, {})
.then(function () {
equal(server.requests.length, 1, "Requests Length");
equal(server.requests[0].method, "POST", "Request Method");
......@@ -460,8 +464,11 @@
'<methodName>convertFile</methodName><params><param><value>' +
'<string>ZG9jdW1lbnRfZG9jeF9mb3JtYXQ=</string></value></param>' +
'<param><value><string>docx</string></value></param>' +
'<param><value><string>docy' +
'</string></value></param></params></methodCall>',
'<param><value><string>docy</string></value></param>' +
'<param><value><boolean>0</boolean></value></param>' +
'<param><value><boolean>0</boolean></value></param>' +
'<param><struct></struct></param>' +
'</params></methodCall>',
'text/xml'
));
......@@ -474,7 +481,7 @@
return {from: "docx", to: "docy"};
};
return jio.putAttachment("bar", "data", blob)
return jio.putAttachment("bar", "data", blob, {})
.fail(function (error) {
equal(server.requests.length, 1, "Requests Length");
equal(server.requests[0].method, "POST", "Request Method");
......@@ -493,4 +500,137 @@
});
});
}(jIO, Blob, sinon, DOMParser, XMLSerializer));
test("putAttachment convert from html to pdf", function () {
stop();
expect(8);
var server = this.server,
jio = this.jio,
b64str = ['JVBERi0xLjQKMSAwIG9iago8PAovVGl0bGUgKP7/KQovQ3JlYXRvciAo/v8',
'AdwBrAGgAdABtAGwAdABvAHAAZABmACAAMAAuADEAMgAuADQpCi9Qcm9kdWNlciA',
'o/v8AUQB0ACAANAAuADgALgA3KQovQ3JlYXRpb25EYXRlIChEOjIwMTkwOTEwMTQ',
'wMTA4KzAyJzAwJykKPj4KZW5kb2JqCjMgMCBvYmoKPDwKL1R5cGUgL0V4dEdTdGF',
'0ZQovU0EgdHJ1ZQovU00gMC4wMgovY2EgMS4wCi9DQSAxLjAKL0FJUyBmYWxzZQo',
'vU01hc2sgL05vbmU+PgplbmRvYmoKNCAwIG9iagpbL1BhdHRlcm4gL0RldmljZVJH',
'Ql0KZW5kb2JqCjYgMCBvYmoKPDwKL1R5cGUgL0NhdGFsb2cKL1BhZ2VzIDIgMCBS',
'Cj4+CmVuZG9iago1IDAgb2JqCjw8Ci9UeXBlIC9QYWdlCi9QYXJlbnQgMiAwIFIK',
'L0NvbnRlbnRzIDcgMCBSCi9SZXNvdXJjZXMgOSAwIFIKL0Fubm90cyAxMCAwIFIK',
'L01lZGlhQm94IFswIDAgNTk1IDg0Ml0KPj4KZW5kb2JqCjkgMCBvYmoKPDwKL0Nv',
'bG9yU3BhY2UgPDwKL1BDU3AgNCAwIFIKL0NTcCAvRGV2aWNlUkdCCi9DU3BnIC9E',
'ZXZpY2VHcmF5Cj4+Ci9FeHRHU3RhdGUgPDwKL0dTYSAzIDAgUgo+PgovUGF0',
'dGVybiA8PAo+PgovRm9udCA8PAo+PgovWE9iamVjdCA8PAo+Pgo+PgplbmRvYmoK',
'MTAgMCBvYmoKWyBdCmVuZG9iago3IDAgb2JqCjw8Ci9MZW5ndGggOCAwIFIKL0Zp',
'bHRlciAvRmxhdGVEZWNvZGUKPj4Kc3RyZWFtCnicpU89C8IwEN3vV9wsmFyutknn',
'DoKDUDI4iINEUMQWSwf/vhcSIdRNE8j7yPHyorf+jNcZdeefGDJ2HkjZmtLCuNel',
'wU5ljs5UmWMYYMIJeujljDjBJzVlzGEEnd6D5PhuL+yFjDtRdzyeBC45Ig4MYI1V',
'Md7UIh+lNLRpVNOa1olPSxmHb3BY4Sg9SDki5oork7ostFT/q+rPP/2+5CIb',
'e3gDFWBZbwplbmRzdHJlYW0KZW5kb2JqCjggMCBvYmoKMTY4CmVuZG9iagoyIDAg',
'b2JqCjw8Ci9UeXBlIC9QYWdlcwovS2lkcyAKWwo1IDAgUgpdCi9Db3VudCAxCi9Q',
'cm9jU2V0IFsvUERGIC9UZXh0IC9JbWFnZUIgL0ltYWdlQ10KPj4KZW5kb2JqCnhy',
'ZWYKMCAxMQowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMDkgMDAwMDAgbiAK',
'MDAwMDAwMDg5OSAwMDAwMCBuIAowMDAwMDAwMTYzIDAwMDAwIG4gCjAwMDAwMDAy',
'NTggMDAwMDAgbiAKMDAwMDAwMDM0NCAwMDAwMCBuIAowMDAwMDAwMjk1IDAw',
'MDAwIG4gCjAwMDAwMDA2MzggMDAwMDAgbiAKMDAwMDAwMDg4MCAwMDAwMCBuIAow',
'MDAwMDAwNDYzIDAwMDAwIG4gCjAwMDAwMDA2MTggMDAwMDAgbiAKdHJhaWxlcgo8',
'PAovU2l6ZSAxMQovSW5mbyAxIDAgUgovUm9vdCA2IDAgUgo+PgpzdGFydHhyZWYK',
'OTk3CiUlRU9GCg=='].join(""),
binary = window.atob(b64str),
len = binary.length,
buffer = new ArrayBuffer(len),
view = new Uint8Array(buffer),
b64str_convert = 'PGh0bWw+PGhlYWQ+PC9oZWFkPgoKICA8Ym9keSBjbGFzcz0icG' +
'FuZS1jb250ZW50Ij48L2JvZHk+PC9odG1sPg==',
binary2 = window.atob(b64str_convert),
len2 = binary2.length,
buffer2 = new ArrayBuffer(len2),
view2 = new Uint8Array(buffer2),
result = serializer.serializeToString(parser.parseFromString(
'<?xml version="1.0" encoding="UTF-8"?><methodCall>' +
'<methodName>convertFile</methodName><params><param><value>' +
'<string>PGh0bWw+PGhlYWQ+PC9oZWFkPgoKICA8Ym9keSBjbGFzcz0icG' +
'FuZS1jb250ZW50Ij48L2JvZHk+PC9odG1sPg==</string></value></param>' +
'<param><value><string>html</string></value></param>' +
'<param><value><string>pdf</string></value></param>' +
'<param><value><boolean>0</boolean></value></param>' +
'<param><value><boolean>0</boolean></value></param>' +
'<param><struct><member><name>encoding</name>' +
'<value><string>utf8</string></value></member></struct></param>' +
'</params></methodCall>',
'text/xml'
)),
i,
blob,
blob_convert;
for (i = 0; i < len; i += 1) {
view[i] = binary.charCodeAt(i);
}
for (i = 0; i < len2; i += 1) {
view2[i] = binary2.charCodeAt(i);
}
blob = new Blob([view], { type: "pdf" });
blob_convert = new Blob([view2], {type: "html" });
this.server.respondWith("POST", cloudooo_url, [200, {
"Content-Type": "text/xml"
}, '<?xml version="1.0"?>' +
'<string>JVBERi0xLjQKMSAwIG9iago8PAovVGl0bGUgKP7/KQovQ3JlYXRvciAo' +
'/v8AdwBrAGgAdABtAGwAdABvAHAAZABmACAAMAAuADEAMgAuADQpCi9Qcm9kdWNl' +
'ciAo/v8AUQB0ACAANAAuADgALgA3KQovQ3JlYXRpb25EYXRlIChEOjIwMTkwOTEw' +
'MTQwMTA4KzAyJzAwJykKPj4KZW5kb2JqCjMgMCBvYmoKPDwKL1R5cGUgL0V4dEdT' +
'dGF0ZQovU0EgdHJ1ZQovU00gMC4wMgovY2EgMS4wCi9DQSAxLjAKL0FJUyBmYWxz' +
'ZQovU01hc2sgL05vbmU+PgplbmRvYmoKNCAwIG9iagpbL1BhdHRlcm4gL0RldmljZVJH' +
'Ql0KZW5kb2JqCjYgMCBvYmoKPDwKL1R5cGUgL0NhdGFsb2cKL1BhZ2VzIDIgMCBS' +
'Cj4+CmVuZG9iago1IDAgb2JqCjw8Ci9UeXBlIC9QYWdlCi9QYXJlbnQgMiAwIFIK' +
'L0NvbnRlbnRzIDcgMCBSCi9SZXNvdXJjZXMgOSAwIFIKL0Fubm90cyAxMCAwIFIK' +
'L01lZGlhQm94IFswIDAgNTk1IDg0Ml0KPj4KZW5kb2JqCjkgMCBvYmoKPDwKL0Nv' +
'bG9yU3BhY2UgPDwKL1BDU3AgNCAwIFIKL0NTcCAvRGV2aWNlUkdCCi9DU3BnIC9E' +
'ZXZpY2VHcmF5Cj4+Ci9FeHRHU3RhdGUgPDwKL0dTYSAzIDAgUgo+PgovUGF0' +
'dGVybiA8PAo+PgovRm9udCA8PAo+PgovWE9iamVjdCA8PAo+Pgo+PgplbmRvYmoK' +
'MTAgMCBvYmoKWyBdCmVuZG9iago3IDAgb2JqCjw8Ci9MZW5ndGggOCAwIFIKL0Zp' +
'bHRlciAvRmxhdGVEZWNvZGUKPj4Kc3RyZWFtCnicpU89C8IwEN3vV9wsmFyutknn' +
'DoKDUDI4iINEUMQWSwf/vhcSIdRNE8j7yPHyorf+jNcZdeefGDJ2HkjZmtLCuNel' +
'wU5ljs5UmWMYYMIJeujljDjBJzVlzGEEnd6D5PhuL+yFjDtRdzyeBC45Ig4MYI1V' +
'Md7UIh+lNLRpVNOa1olPSxmHb3BY4Sg9SDki5oork7ostFT/q+rPP/2+5CIb' +
'e3gDFWBZbwplbmRzdHJlYW0KZW5kb2JqCjggMCBvYmoKMTY4CmVuZG9iagoyIDAg' +
'b2JqCjw8Ci9UeXBlIC9QYWdlcwovS2lkcyAKWwo1IDAgUgpdCi9Db3VudCAxCi9Q' +
'cm9jU2V0IFsvUERGIC9UZXh0IC9JbWFnZUIgL0ltYWdlQ10KPj4KZW5kb2JqCnhy' +
'ZWYKMCAxMQowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMDkgMDAwMDAgbiAK' +
'MDAwMDAwMDg5OSAwMDAwMCBuIAowMDAwMDAwMTYzIDAwMDAwIG4gCjAwMDAwMDAy' +
'NTggMDAwMDAgbiAKMDAwMDAwMDM0NCAwMDAwMCBuIAowMDAwMDAwMjk1IDAw' +
'MDAwIG4gCjAwMDAwMDA2MzggMDAwMDAgbiAKMDAwMDAwMDg4MCAwMDAwMCBuIAow' +
'MDAwMDAwNDYzIDAwMDAwIG4gCjAwMDAwMDA2MTggMDAwMDAgbiAKdHJhaWxlcgo8' +
'PAovU2l6ZSAxMQovSW5mbyAxIDAgUgovUm9vdCA2IDAgUgo+PgpzdGFydHhyZWYK' +
'OTk3CiUlRU9GCg==</string>']);
Storage200.prototype.putAttachment = function (id, name, blob2) {
equal(id, "bar", "putAttachment 200 called");
equal(name, "data", "putAttachment 200 called");
deepEqual(blob2, blob, "putAttachment 200 called");
return "OK";
};
Storage200.prototype.get = function (id) {
equal(id, "bar", "get 200 called");
return {from: "html", to: "pdf"};
};
return jio.putAttachment("bar", "data", blob_convert,
{"encoding": ["utf8", "string"]})
.then(function () {
equal(server.requests.length, 1, "Requests Length");
equal(server.requests[0].method, "POST", "Request Method");
equal(server.requests[0].url, cloudooo_url, "Request Url");
deepEqual(
server.requests[0].requestBody,
result,
"Request Body"
);
})
.fail(function (error) {
ok(false, error);
})
.always(function () {
start();
});
});
}(window, jIO, Blob, sinon, DOMParser, XMLSerializer, ArrayBuffer, Uint8Array));
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment