Skip to content

Commit 68e143a

Browse files
authored
Merge pull request #183 from 1904labs/release-3-4-0
Package release 3.4.0
2 parents e0cc616 + 52b3fb1 commit 68e143a

14 files changed

Lines changed: 592 additions & 125 deletions

File tree

dist/dom-to-image-more.min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/dom-to-image-more.min.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package-lock.json

Lines changed: 489 additions & 96 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
{
22
"name": "dom-to-image-more",
3-
"version": "3.3.1",
3+
"version": "3.4.0",
44
"description": "Generates an image from a DOM node using HTML5 canvas and SVG",
55
"main": "dist/dom-to-image-more.min.js",
66
"devDependencies": {
77
"chai": "^4.3.10",
8-
"eslint": "^9.8.0",
8+
"eslint": "^9.9.0",
99
"grunt": "^1.6.1",
1010
"grunt-cli": "^1.5.0",
1111
"grunt-contrib-jshint": "^3.2.0",
@@ -19,7 +19,7 @@
1919
"karma-firefox-launcher": "^2.1.3",
2020
"karma-mocha": "^2.0.1",
2121
"karma-mocha-reporter": "^2.2.5",
22-
"mocha": "^10.7.0",
22+
"mocha": "^10.7.3",
2323
"prettier": "^3.3.3",
2424
"semver": "^7.6.3"
2525
},
@@ -65,7 +65,10 @@
6565
"Nate Stuyvesant @nstuyvesant",
6666
"King Wang @eachmawzw",
6767
"TMM Schmit @tmmschmit",
68-
"Aravind @codesculpture"
68+
"Aravind @codesculpture",
69+
"Shi Wenyu @cWenyu",
70+
"David Burns @davidburns573",
71+
"Yujia Cheng @YujiaCheng1996"
6972
],
7073
"license": "MIT",
7174
"bugs": {

spec/dom-to-image-more.spec.js

Lines changed: 75 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -273,16 +273,21 @@
273273

274274
it('should render web fonts', function (done) {
275275
this.timeout(5000);
276-
loadTestPage(
277-
'fonts/dom-node.html',
278-
'fonts/style.css',
279-
'fonts/control-image'
280-
)
276+
loadTestPage('fonts/dom-node.html','fonts/style.css', 'fonts/control-image')
281277
.then(renderToPngAndCheck)
282278
.then(done)
283279
.catch(done);
284280
});
285281

282+
it('should not copy web font', function (done) {
283+
this.timeout(5000);
284+
loadTestPage('fonts/dom-node.html', 'fonts/style.css', 'fonts/control-image-no-font')
285+
.then(() => renderToPng(domNode(), { disableEmbedFonts: true }))
286+
.then(check)
287+
.then(done)
288+
.catch(done);
289+
});
290+
286291
it('should render images', function (done) {
287292
this.timeout(30000);
288293
loadTestPage('images/dom-node.html', 'images/style.css')
@@ -571,10 +576,12 @@
571576
const controlUrl = getImageDataURL(controlImage(), 'image/png');
572577

573578
if (imageUrl !== controlUrl) {
579+
var escapedImage = escapeImage(image.src);
580+
574581
console.debug(`
575582
<html>
576583
<body>
577-
<h2>Source</h2>\n<img src='${image.src}'/>
584+
<h2>Source</h2>\n<img src='${escapedImage}'/>
578585
<h2>Output</h2>\n<img src='${imageUrl}'/>
579586
<h2>Control</h2>\n<img src='${controlUrl}'/>
580587
</body>
@@ -586,6 +593,68 @@
586593
controlUrl,
587594
'rendered and control images should be same'
588595
);
596+
597+
function escapeImage(image) {
598+
if (image.indexOf('image/svg') >= 0){
599+
const svgStart = image.indexOf('<svg');
600+
const svgEnd = image.lastIndexOf('</svg>');
601+
const prefix = image.substring(0, svgStart);
602+
const postfix = image.substring(svgEnd + 6);
603+
const embeddedSvg = image.substring(svgStart, svgEnd + 6);
604+
const escapedSvg = escapeHtml(embeddedSvg);
605+
return prefix + escapedSvg + postfix;
606+
} else {
607+
return image;
608+
}
609+
}
610+
}
611+
612+
const matchHtmlRegExp = /["'&<>]/;
613+
function escapeHtml(string) {
614+
var str = '' + string;
615+
var match = matchHtmlRegExp.exec(str);
616+
617+
if (!match) {
618+
return str;
619+
}
620+
621+
var escape;
622+
var html = '';
623+
var index = 0;
624+
var lastIndex = 0;
625+
626+
for (index = match.index; index < str.length; index++) {
627+
switch (str.charCodeAt(index)) {
628+
case 34: // "
629+
escape = '&quot;';
630+
break;
631+
case 38: // &
632+
escape = '&amp;';
633+
break;
634+
case 39: // '
635+
escape = '&#39;';
636+
break;
637+
case 60: // <
638+
escape = '&lt;';
639+
break;
640+
case 62: // >
641+
escape = '&gt;';
642+
break;
643+
default:
644+
continue;
645+
}
646+
647+
if (lastIndex !== index) {
648+
html += str.substring(lastIndex, index);
649+
}
650+
651+
lastIndex = index + 1;
652+
html += escape;
653+
}
654+
655+
return lastIndex !== index
656+
? html + str.substring(lastIndex, index)
657+
: html;
589658
}
590659

591660
function getImageDataURL(image, mimetype) {

spec/resources/background-clip/control-image

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

spec/resources/defaultStyles/control-image

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

spec/resources/fonts/control-image

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +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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
1+
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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

0 commit comments

Comments
 (0)