From ceb3e8e3dd2825e7d716f6ef0fe707e92691a472 Mon Sep 17 00:00:00 2001 From: David Hudson Date: Mon, 5 Sep 2016 19:40:22 +0900 Subject: [PATCH] [Enhancement] Add IE, Opera, Safari support for canvas.toBlob() This is currently being used for exporting plots to PNG/JPG. --- .../plot/src/services/ExportImageService.js | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/platform/features/plot/src/services/ExportImageService.js b/platform/features/plot/src/services/ExportImageService.js index 37300686a9..21b56e2bda 100644 --- a/platform/features/plot/src/services/ExportImageService.js +++ b/platform/features/plot/src/services/ExportImageService.js @@ -101,6 +101,30 @@ define( return defer.promise; } + /** + * canvas.toBlob() not supported in IE < 10, Opera, and Safari. This polyfill + * implements the method in browsers that would not otherwise support it. + * https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob + */ + function polyfillToBlob() { + if (!HTMLCanvasElement.prototype.toBlob) { + Object.defineProperty(HTMLCanvasElement.prototype, "toBlob", { + value: function (callback, type, quality) { + + var binStr = atob(this.toDataURL(type, quality).split(',')[1]), + len = binStr.length, + arr = new Uint8Array(len); + + for (var i = 0; i < len; i++) { + arr[i] = binStr.charCodeAt(i); + } + + callback(new Blob([arr], {type: type || "image/png"})); + } + }); + } + } + ExportImageService.prototype.exportPDF = function (element, filename) { return renderElement(element, "jpeg").then(function (img) { var pdf = new self.jsPDF("l", "px", [element.offsetHeight, element.offsetWidth]); @@ -121,6 +145,8 @@ define( }); }; + polyfillToBlob(); + return ExportImageService; } );