diff --git a/package.json b/package.json index ea116d0efc..7907d3ae25 100644 --- a/package.json +++ b/package.json @@ -41,10 +41,10 @@ "jsdoc": "^3.3.2", "karma": "5.1.1", "karma-chrome-launcher": "3.1.0", - "karma-firefox-launcher": "1.3.0", "karma-cli": "2.0.0", "karma-coverage": "2.0.3", "karma-coverage-istanbul-reporter": "3.0.3", + "karma-firefox-launcher": "1.3.0", "karma-html-reporter": "0.2.7", "karma-jasmine": "3.3.1", "karma-sourcemap-loader": "0.3.7", @@ -60,7 +60,7 @@ "moment-timezone": "0.5.28", "node-bourbon": "^4.2.3", "node-sass": "^4.14.1", - "painterro": "^1.0.35", + "painterro": "^1.2.56", "printj": "^1.2.1", "raw-loader": "^0.5.1", "request": "^2.69.0", diff --git a/src/adapter/services/ExportImageService.js b/src/adapter/services/ExportImageService.js index 37ddcfddfe..014e4a911e 100644 --- a/src/adapter/services/ExportImageService.js +++ b/src/adapter/services/ExportImageService.js @@ -48,12 +48,12 @@ define( * Converts an HTML element into a PNG or JPG Blob. * @private * @param {node} element that will be converted to an image - * @param {string} type of image to convert the element to. + * @param {object} options Image options. * @returns {promise} */ - ExportImageService.prototype.renderElement = function (element, imageType, className) { + ExportImageService.prototype.renderElement = function (element, {imageType, className, thumbnailSize}) { + const self = this; const dialogService = this.dialogService; - const dialog = dialogService.showBlockingMessage({ title: "Capturing...", hint: "Capturing an image", @@ -90,7 +90,16 @@ define( dialog.dismiss(); return new Promise(function (resolve, reject) { - return canvas.toBlob(resolve, mimeType); + if (thumbnailSize) { + const thumbnail = self.getThumbnail(canvas, mimeType, thumbnailSize); + + return canvas.toBlob(blob => resolve({ + blob, + thumbnail + }), mimeType); + } + + return canvas.toBlob(blob => resolve({ blob }), mimeType); }); }, function (error) { console.log('error capturing image', error); @@ -109,6 +118,17 @@ define( }); }; + ExportImageService.prototype.getThumbnail = function (canvas, mimeType, size) { + const thumbnailCanvas = document.createElement('canvas'); + thumbnailCanvas.setAttribute('width', size.width); + thumbnailCanvas.setAttribute('height', size.height); + const ctx = thumbnailCanvas.getContext('2d'); + ctx.globalCompositeOperation = "copy"; + ctx.drawImage(canvas, 0, 0, canvas.width, canvas.height, 0, 0, size.width, size.height); + + return thumbnailCanvas.toDataURL(mimeType); + }; + /** * Takes a screenshot of a DOM node and exports to JPG. * @param {node} element to be exported @@ -119,9 +139,13 @@ define( ExportImageService.prototype.exportJPG = function (element, filename, className) { const processedFilename = replaceDotsWithUnderscores(filename); - return this.renderElement(element, "jpg", className).then(function (img) { - saveAs(img, processedFilename); - }); + return this.renderElement(element, { + imageType: 'jpg', + className + }) + .then(function (img) { + saveAs(img.blob, processedFilename); + }); }; /** @@ -134,9 +158,13 @@ define( ExportImageService.prototype.exportPNG = function (element, filename, className) { const processedFilename = replaceDotsWithUnderscores(filename); - return this.renderElement(element, "png", className).then(function (img) { - saveAs(img, processedFilename); - }); + return this.renderElement(element, { + imageType: 'png', + className + }) + .then(function (img) { + saveAs(img.blob, processedFilename); + }); }; /** @@ -146,8 +174,12 @@ define( * @returns {promise} */ - ExportImageService.prototype.exportPNGtoSRC = function (element, className) { - return this.renderElement(element, "png", className); + ExportImageService.prototype.exportPNGtoSRC = function (element, options) { + + return this.renderElement(element, { + imageType: 'png', + ...options + }); }; function replaceDotsWithUnderscores(filename) { diff --git a/src/plugins/notebook/components/NotebookEmbed.vue b/src/plugins/notebook/components/NotebookEmbed.vue index 1bfe89d204..98abfc5eb2 100644 --- a/src/plugins/notebook/components/NotebookEmbed.vue +++ b/src/plugins/notebook/components/NotebookEmbed.vue @@ -4,7 +4,7 @@ class="c-ne__embed__snap-thumb" @click="openSnapshot()" > - +
@@ -25,11 +25,14 @@