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()"
>
-
+