Skip to content

Commit

Permalink
Merge pull request #183 from 1904labs/release-3-4-0
Browse files Browse the repository at this point in the history
Package release 3.4.0
  • Loading branch information
IDisposable authored Aug 21, 2024
2 parents e0cc616 + 52b3fb1 commit 68e143a
Show file tree
Hide file tree
Showing 14 changed files with 592 additions and 125 deletions.
4 changes: 2 additions & 2 deletions dist/dom-to-image-more.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/dom-to-image-more.min.js.map

Large diffs are not rendered by default.

585 changes: 489 additions & 96 deletions package-lock.json

Large diffs are not rendered by default.

11 changes: 7 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
{
"name": "dom-to-image-more",
"version": "3.3.1",
"version": "3.4.0",
"description": "Generates an image from a DOM node using HTML5 canvas and SVG",
"main": "dist/dom-to-image-more.min.js",
"devDependencies": {
"chai": "^4.3.10",
"eslint": "^9.8.0",
"eslint": "^9.9.0",
"grunt": "^1.6.1",
"grunt-cli": "^1.5.0",
"grunt-contrib-jshint": "^3.2.0",
Expand All @@ -19,7 +19,7 @@
"karma-firefox-launcher": "^2.1.3",
"karma-mocha": "^2.0.1",
"karma-mocha-reporter": "^2.2.5",
"mocha": "^10.7.0",
"mocha": "^10.7.3",
"prettier": "^3.3.3",
"semver": "^7.6.3"
},
Expand Down Expand Up @@ -65,7 +65,10 @@
"Nate Stuyvesant @nstuyvesant",
"King Wang @eachmawzw",
"TMM Schmit @tmmschmit",
"Aravind @codesculpture"
"Aravind @codesculpture",
"Shi Wenyu @cWenyu",
"David Burns @davidburns573",
"Yujia Cheng @YujiaCheng1996"
],
"license": "MIT",
"bugs": {
Expand Down
81 changes: 75 additions & 6 deletions spec/dom-to-image-more.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -273,16 +273,21 @@

it('should render web fonts', function (done) {
this.timeout(5000);
loadTestPage(
'fonts/dom-node.html',
'fonts/style.css',
'fonts/control-image'
)
loadTestPage('fonts/dom-node.html','fonts/style.css', 'fonts/control-image')
.then(renderToPngAndCheck)
.then(done)
.catch(done);
});

it('should not copy web font', function (done) {
this.timeout(5000);
loadTestPage('fonts/dom-node.html', 'fonts/style.css', 'fonts/control-image-no-font')
.then(() => renderToPng(domNode(), { disableEmbedFonts: true }))
.then(check)
.then(done)
.catch(done);
});

it('should render images', function (done) {
this.timeout(30000);
loadTestPage('images/dom-node.html', 'images/style.css')
Expand Down Expand Up @@ -571,10 +576,12 @@
const controlUrl = getImageDataURL(controlImage(), 'image/png');

if (imageUrl !== controlUrl) {
var escapedImage = escapeImage(image.src);

console.debug(`
<html>
<body>
<h2>Source</h2>\n<img src='${image.src}'/>
<h2>Source</h2>\n<img src='${escapedImage}'/>
<h2>Output</h2>\n<img src='${imageUrl}'/>
<h2>Control</h2>\n<img src='${controlUrl}'/>
</body>
Expand All @@ -586,6 +593,68 @@
controlUrl,
'rendered and control images should be same'
);

function escapeImage(image) {
if (image.indexOf('image/svg') >= 0){
const svgStart = image.indexOf('<svg');
const svgEnd = image.lastIndexOf('</svg>');
const prefix = image.substring(0, svgStart);
const postfix = image.substring(svgEnd + 6);
const embeddedSvg = image.substring(svgStart, svgEnd + 6);
const escapedSvg = escapeHtml(embeddedSvg);
return prefix + escapedSvg + postfix;
} else {
return image;
}
}
}

const matchHtmlRegExp = /["'&<>]/;
function escapeHtml(string) {
var str = '' + string;
var match = matchHtmlRegExp.exec(str);

if (!match) {
return str;
}

var escape;
var html = '';
var index = 0;
var lastIndex = 0;

for (index = match.index; index < str.length; index++) {
switch (str.charCodeAt(index)) {
case 34: // "
escape = '&quot;';
break;
case 38: // &
escape = '&amp;';
break;
case 39: // '
escape = '&#39;';
break;
case 60: // <
escape = '&lt;';
break;
case 62: // >
escape = '&gt;';
break;
default:
continue;
}

if (lastIndex !== index) {
html += str.substring(lastIndex, index);
}

lastIndex = index + 1;
html += escape;
}

return lastIndex !== index
? html + str.substring(lastIndex, index)
: html;
}

function getImageDataURL(image, mimetype) {
Expand Down
2 changes: 1 addition & 1 deletion spec/resources/background-clip/control-image

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion spec/resources/defaultStyles/control-image

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion spec/resources/fonts/control-image
Original file line number Diff line number Diff line change
@@ -1 +1 @@
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAAAXNSR0IArs4c6QAAEkxJREFUeF7tnWesFsUXxg9iLGCJiIoSe0PF+EFjT4wNC3aNAjYM2DCKPVaMHSVWFCxgL7FCwC5FbFHRGCsYNeoHwWjU2Ctinvn/92busmV23vfI3rPPJnzh7p53znPmtzM7M2em28KFCxcKLypABTIV6EZAWDOoQL4CBIS1gwoUKEBAWD2oAAFhHaACcQqwBYnTjU81RAEC0pBA0804BQhInG58qiEKEJCGBJpuxilAQOJ041MNUYCANCTQdDNOAQISpxufaogCBKQhgaabcQoQkDjd+FRDFCAgDQk03YxTgIDE6canGqIAAWlIoOlmnAIEJE43PtUQBQhIQwJNN+MUICBxuvGphihAQBoSaLoZpwABidONTzVEAQLSkEDTzTgFCEicbmaewq5PjzzyiJx99tmywQYbyA033CCbbbZZsH///POPPPTQQ3Luuee652+++WbZeOONg5+v+40tA3L//ffLEUccUejnJZdcIhdeeGHHPZdeeqmMGjWq8Jn77rtP1llnHdlxxx2jNdxjjz0E5Vt55ZWdjZCypp/J+/Fvv/1WDj/8cHn22WdL/cB9sRcq4EcffSRTp06VGTNmyOzZs+W7776TXr16yfbbby9777237LffftK3b9+on/jiiy9kyJAh8uqrr7rnt9lmG5kwYYL079+/1B7K9sADD8iIESPkp59+cvefdtppMnr0aFlqqaVKn+8KN7QMCJyEUB9//LGcccYZ8uSTT3YIff3118vWW28tSyyxxCJa/P333y7YEPT11193fx84cKBcc801suGGG3Z6Zv78+XLRRRfJ7bff7u4777zz5PTTT8/UF2V599135eqrr5Zu3bp1AgQP4I2Jsp5yyikdlRtvvDFjxshuu+0myy67bKW4/fbbb3LPPffICSec0PEcKsw555zjKm2W76E/8Pnnnzu/YX/w4MEydOhQ2WKLLWTJJZeUr7/+Wl544QW58847Ze7cua6SQv9VVlkl1Ly7Lw1IKCRZcBCQEukRyKOPPtrdhcDiHypp0eW3JnfffbccddRRmbc///zzMmDAAPe3dIuU9cBnn30mp556qgMOTX/6uu666zogCy1rnh9+Jdt8883l4Ycfln79+lWqqP7NgHjSpEkd5UO3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
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAAAXNSR0IArs4c6QAAEy5JREFUeF7tnQWsXEUfxadYobh7gQYvWqC4BYoVgkOKFEJxpxCKWylQIDjFg7u3uDvBQosGCxK8uHu//Ca5L7v37e6V3X497+35J1/4+vbO3DPnP+eO/md6TJgwYUKwmQEzUJOBHhaIa4YZqM+ABeLaYQYaMGCBuHqYAQvEdcAMlGPALUg53pyqTRiwQNrE0S5mOQYskHK8OVWbMGCBtImjXcxyDFgg5XhzqjZhwAJpE0e7mOUYsEDK8eZUbcKABdImjnYxyzFggZTjzanahAELpE0c7WKWY8ACKcebU7UJAxZImzjaxSzHgAVSjjenahMGLJA2cbSLWY4BC6Qcb07VJgxYIG3iaBezHAMWSDnenKpNGLBA2sTRLmY5BiyQcrx1q1THHXdcOPfcc0OfPn3CVVddFZZddtnc5ePUqCOOOCJcfPHFMf1NN90UFltssdzp1R9sWiDff/996N27d/jll19qlnWqqaYKY8aMCRtssEHH76+//nro379/+OOPP2qmmWaaacLYsWPDHHPMEZZYYonw5ZdfluJxxx13DNddd11H2gcffDBss802dbHy3oMOOiiceuqpud633nrrhccffzzUOlqsR48eEf+4cePCnHPOmSu/Wg/Bw5133hmeffbZ8P777wf4/v3338NMM80U819ppZXCOuusE7bddtvQq1evwu957733wqKLLtqRbpZZZgmPPvpoWG655TLzotx77rlnuPzyyzue3WGHHcL111+fmbarPNC0QJKCfvLJJ+GCCy4IZ5xxRvwTguCrtPDCC4cpppiiEx///fdf+PDDD8MJJ5zQUYl32223cPTRR4eFFlooUMES+/nnn8NZZ50Vn8X69esXK0Q9Q3jnnXde2GSTTaoEkjz/2Wefhd133z088MAD8U/ku9dee4W55pqrsN+orE888UR8F0YeiGbBBRcMU089deH8kgSIAUyPPfZY5A8+N9poozDvvPOG6aabLowfPz689dZb4fbbbw/vvPNOoGLzJT/ssMOquMsC8O6773b64s8666zxvcsss0zd5IgDfJdddlnVM+mPUtb71X9vmUAoKF+SPfbYI5Z5l112ic11lh1zzDFhxIgR8bHhw4cH/l3LiubNV3W++earKRDy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
Loading

0 comments on commit 68e143a

Please sign in to comment.