[Testing] Convert blob to proper format. Inject FileReader.

Issue #967
This commit is contained in:
David Hudson 2016-09-12 16:58:21 +09:00
parent 0f1d685ae6
commit 3093ab8067

View File

@ -45,7 +45,7 @@ define(
* @param {constant} EXPORT_IMAGE_TIMEOUT time in milliseconds before a timeout error is returned * @param {constant} EXPORT_IMAGE_TIMEOUT time in milliseconds before a timeout error is returned
* @constructor * @constructor
*/ */
function ExportImageService($q, $timeout, $log, EXPORT_IMAGE_TIMEOUT, injHtml2Canvas, injJsPDF, injSaveAs) { function ExportImageService($q, $timeout, $log, EXPORT_IMAGE_TIMEOUT, injHtml2Canvas, injJsPDF, injSaveAs, injFileReader) {
self.$q = $q; self.$q = $q;
self.$timeout = $timeout; self.$timeout = $timeout;
self.$log = $log; self.$log = $log;
@ -53,6 +53,7 @@ define(
self.html2canvas = injHtml2Canvas || html2canvas; self.html2canvas = injHtml2Canvas || html2canvas;
self.jsPDF = injJsPDF || jsPDF; self.jsPDF = injJsPDF || jsPDF;
self.saveAs = injSaveAs || saveAs; self.saveAs = injSaveAs || saveAs;
self.reader = injFileReader || new FileReader();
} }
/** /**
@ -64,8 +65,14 @@ define(
*/ */
function renderElement(element, type) { function renderElement(element, type) {
var defer = self.$q.defer(), var defer = self.$q.defer(),
validTypes = ["png", "jpg", "jpeg"],
renderTimeout; renderTimeout;
if (validTypes.indexOf(type) === -1) {
self.$log.error("Invalid type requested. Try: (" + validTypes.join(",") + ")");
return;
}
renderTimeout = self.$timeout(function () { renderTimeout = self.$timeout(function () {
defer.reject("html2canvas timed out"); defer.reject("html2canvas timed out");
self.$log.warn("html2canvas timed out"); self.$log.warn("html2canvas timed out");
@ -75,18 +82,14 @@ define(
self.html2canvas(element, { self.html2canvas(element, {
onrendered: function (canvas) { onrendered: function (canvas) {
switch (type.toLowerCase()) { switch (type.toLowerCase()) {
case "blob":
canvas.toBlob(defer.resolve);
break;
case "png": case "png":
defer.resolve(canvas.toDataURL("image/png", 1.0)); canvas.toBlob(defer.resolve, "image/png");
break; break;
default: default:
case "jpg": case "jpg":
case "jpeg": case "jpeg":
defer.resolve(canvas.toDataURL("image/jpeg", 1.0)); canvas.toBlob(defer.resolve, "image/jpeg");
break; break;
} }
} }
@ -133,9 +136,12 @@ define(
*/ */
ExportImageService.prototype.exportPDF = function (element, filename) { ExportImageService.prototype.exportPDF = function (element, filename) {
return renderElement(element, "jpeg").then(function (img) { return renderElement(element, "jpeg").then(function (img) {
var pdf = new self.jsPDF("l", "px", [element.offsetHeight, element.offsetWidth]); self.reader.readAsDataURL(img);
pdf.addImage(img, "JPEG", 0, 0, element.offsetWidth, element.offsetHeight); self.reader.onloadend = function() {
pdf.save(filename); var pdf = new self.jsPDF("l", "px", [element.offsetHeight, element.offsetWidth]);
pdf.addImage(reader.result, "JPEG", 0, 0, element.offsetWidth, element.offsetHeight);
pdf.save(filename);
};
}); });
}; };
@ -146,7 +152,7 @@ define(
* @returns {promise} * @returns {promise}
*/ */
ExportImageService.prototype.exportJPG = function (element, filename) { ExportImageService.prototype.exportJPG = function (element, filename) {
return renderElement(element, "blob").then(function (img) { return renderElement(element, "jpeg").then(function (img) {
self.saveAs(img, filename); self.saveAs(img, filename);
}); });
}; };
@ -158,7 +164,7 @@ define(
* @returns {promise} * @returns {promise}
*/ */
ExportImageService.prototype.exportPNG = function (element, filename) { ExportImageService.prototype.exportPNG = function (element, filename) {
return renderElement(element, "blob").then(function (img) { return renderElement(element, "png").then(function (img) {
self.saveAs(img, filename); self.saveAs(img, filename);
}); });
}; };