Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Expose ability to adjust the cloned node before generating image. #164

Merged
merged 3 commits into from
Feb 14, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -195,8 +195,8 @@ Are you facing a [CORS policy](https://developer.mozilla.org/en-US/docs/Web/HTTP
issue in your app? Don't worry, there are alternative solutions to this problem that you
can explore. Here are some options to consider:

1. **Use the option.corsImg support by passing images** With this option, you can setup
a proxy service that will process the requests in a safe CORS context.
1. **Use the option.corsImg support by passing images** With this option, you can setup a
proxy service that will process the requests in a safe CORS context.

2. **Use third-party services like [allOrigins](https://allorigins.win/).** With this
service, you can fetch the source code or an image in base64 format from any website.
Expand Down
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.

481 changes: 292 additions & 189 deletions package-lock.json

Large diffs are not rendered by default.

12 changes: 6 additions & 6 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
{
"name": "dom-to-image-more",
"version": "3.2.0",
"version": "3.3.0-rc",
"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": "^8.50.0",
"eslint": "^8.56.0",
"grunt": "^1.6.1",
"grunt-cli": "^1.4.3",
"grunt-contrib-jshint": "^3.2.0",
Expand All @@ -19,14 +19,14 @@
"karma-firefox-launcher": "^2.1.2",
"karma-mocha": "^2.0.1",
"karma-mocha-reporter": "^2.2.5",
"mocha": "^10.2.0",
"prettier": "^3.0.3",
"semver": "^7.5.4"
"mocha": "^10.3.0",
"prettier": "^3.2.5",
"semver": "^7.6.0"
},
"scripts": {
"format": "eslint src --fix && prettier --write .",
"lint": "eslint --max-warnings=0 src && prettier --check .",
"test": "grunt test",
"test": "grunt test --debug",
"build": "grunt",
"build:ci": "grunt ci",
"beta-version-patch": "npm version $(semver $npm_package_version -i prerelease --preid beta)",
Expand Down
24 changes: 23 additions & 1 deletion spec/dom-to-image-more.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,29 @@
assert.ok(domtoimage);
});

describe('regression', function () {
describe('features', function () {
it('should handle adjustClonedNode', function (done) {
function oncloned(_node, clone, after) {
/* jshint unused:false */
if(!after) {
if (clone.id === 'element') {
clone.style.transform = 'translateY(100px)';
}
}
return clone;
}

loadTestPage(
'eventing/dom-node.html',
'eventing/style.css',
'eventing/control-image'
)
.then(() => renderToPng(domNode(), { adjustClonedNode: oncloned }))
.then(check)
.then(done)
.catch(done);
});

it('should render to svg', function (done) {
loadTestPage(
'small/dom-node.html',
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.

1 change: 1 addition & 0 deletions spec/resources/eventing/control-image
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
data:image/png;base64,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gAABQXcDBAgQIEAgICDogRE9gQABAgQICLobIECAAAECAQFBD4zoCQQIECBAQNDdAAECBAgQCAgIemBETyBAgAABAoLuBggQIECAQEBA0AMjegIBAgQIEBB0N0CAAAECBAICgh4Y0RMIECBAgICguwECBAgQIBAQEPTAiJ5AgAABAgQE3Q0QIECAAIGAgKAHRvQEAgQIECAg6G6AAAECBAgEBAQ9MKInECBAgAABQXcDBAgQIEAgICDogRE9gQABAgQICLobIECAAAECAQFBD4zoCQQIECBAQNDdAAECBAgQCAgIemBETyBAgAABAoLuBggQIECAQEBA0AMjegIBAgQIEBB0N0CAAAECBAICgh4Y0RMIECBAgICguwECBAgQIBAQEPTAiJ5AgAABAgQE3Q0QIECAAIGAgKAHRvQEAgQIECAg6G6AAAECBAgEBAQ9MKInECBAgAABQXcDBAgQIEAgICDogRE9gQABAgQICLobIECAAAECAQFBD4zoCQQIECBAQNDdAAECBAgQCAgIemBETyBAgAABAoLuBggQIECAQEBA0AMjegIBAgQIEBB0N0CAAAECBAICgh4Y0RMIECBAgICguwECBAgQIBAQEPTAiJ5AgAABAgQE3Q0QIECAAIGAgKAHRvQEAgQIECAg6G6AAAECBAgEBAQ9MKInECBAgAABQXcDBAgQIEAgICDogRE9gQABAgQICLobIECAAAECAQFBD4zoCQQIECBAQNDdAAECBAgQCAgIemBETyBAgAABAoLuBggQIECAQEBA0AMjegIBAgQIEBB0N0CAAAECBAICgh4Y0RMIECBAgICguwECBAgQIBAQEPTAiJ5AgAABAgQE3Q0QIECAAIGAgKAHRvQEAgQIECAg6G6AAAECBAgEBAQ9MKInECBAgAABQXcDBAgQIEAgICDogRE9gQABAgQICLobIECAAAECAQFBD4zoCQQIECBAQNDdAAECBAgQCAgIemBETyBAgAABAoLuBggQIECAQEBA0AMjegIBAgQIEBB0N0CAAAECBAICgh4Y0RMIECBAgICguwECBAgQIBAQEPTAiJ5AgAABAgQE3Q0QIECAAIGAgKAHRvQEAgQIECAg6G6AAAECBAgEBAQ9MKInECBAgAABQXcDBAgQIEAgICDogRE9gQABAgQICLobIECAAAECAQFBD4zoCQQIECBAQNDdAAECBAgQCAgIemBETyBAgAABAoLuBggQIECAQEBA0AMjegIBAgQIEBB0N0CAAAECBAICgh4Y0RMIECBAgICguwECBAgQIBAQEPTAiJ5AgAABAgQE3Q0QIECAAIGAgKAHRvQEAgQIECAg6G6AAAECBAgEBAQ9MKInECBAgAABQXcDBAgQIEAgICDogRE9gQABAgQICLobIECAAAECAQFBD4zoCQQIECBAQNDdAAECBAgQCAgIemBETyBAgAABAoLuBggQIECAQEBA0AMjegIBAgQIEBB0N0CAAAECBAICgh4Y0RMIECBAgICguwECBAgQIBAQEPTAiJ5AgAABAgQE3Q0QIECAAIGAgKAHRvQEAgQIECAg6G6AAAECBAgEBAQ9MKInECBAgAABQXcDBAgQIEAgICDogRE9gQABAgQICLobIECAAAECAQFBD4zoCQQIECBAQNDdAAECBAgQCAgIemBETyBAgAABAoLuBggQIECAQEBA0AMjegIBAgQIEBB0N0CAAAECBAICgh4Y0RMIECBAgICguwECBAgQIBAQEPTAiJ5AgAABAgQE3Q0QIECAAIGAgKAHRvQEAgQIECAg6G6AAAECBAgEBAQ9MKInECBAgAABQXcDBAgQIEAgICDogRE9gQABAgQICLobIECAAAECAQFBD4zoCQQIECBAQNDdAAECBAgQCAgIemBETyBAgAABAoLuBggQIECAQEBA0AMjegIBAgQIEBB0N0CAAAECBAICgh4Y0RMIECBAgICguwECBAgQIBAQEPTAiJ5AgAABAgQE3Q0QIECAAIGAgKAHRvQEAgQIECAg6G6AAAECBAgEBAQ9MKInECBAgAABQXcDBAgQIEAgICDogRE9gQABAgQICLobIECAAAECAQFBD4zoCQQIECBAQNDdAAECBAgQCAgIemBETyBAgAABAoLuBggQIECAQEBA0AMjegIBAgQIEBB0N0CAAAECBAICgh4Y0RMIECBAgICguwECBAgQIBAQEPTAiJ5AgAABAgQE3Q0QIECAAIGAgKAHRvQEAgQIECAg6G6AAAECBAgEBAQ9MKInECBAgAABQXcDBAgQIEAgICDogRE9gQABAgQICLobIECAAAECAQFBD4zoCQQIECBAQNDdAAECBAgQCAgIemBETyBAgAABAoLuBggQIECAQEBA0AMjegIBAgQIEBB0N0CAAAECBAICgh4Y0RMIECBAgICguwECBAgQIBAQEPTAiJ5AgAABAgQE3Q0QIECAAIGAgKAHRvQEAgQIECAg6G6AAAECBAgEBAQ9MKInECBAgAABQXcDBAgQIEAgICDogRE9gQABAgQICLobIECAAAECAQFBD4zoCQQIECBAQNDdAAECBAgQCAgIemBETyBAgAABAoLuBggQIECAQEBA0AMjegIBAgQIEBB0N0CAAAECBAICgh4Y0RMIECBAgICguwECBAgQIBAQEPTAiJ5AgAABAgQE3Q0QIECAAIGAgKAHRvQEAgQIECAg6G6AAAECBAgEBAQ9MKInECBAgAABQXcDBAgQIEAgICDogRE9gQABAgQICLobIECAAAECAQFBD4zoCQQIECBAQNDdAAECBAgQCAgIemBETyBAgAABAoLuBggQIECAQEBA0AMjegIBAgQIEBB0N0CAAAECBAICgh4Y0RMIECBAgICguwECBAgQIBAQEPTAiJ5AgAABAgQE3Q0QIECAAIGAgKAHRvQEAgQIECAg6G6AAAECBAgEBAQ9MKInECBAgAABQXcDBAgQIEAgICDogRE9gQABAgQICLobIECAAAECAQFBD4zoCQQIECBAQNDdAAECBAgQCAgIemBETyBAgAABAoLuBggQIECAQEBA0AMjegIBAgQIEBB0N0CAAAECBAICgh4Y0RMIECBAgICguwECBAgQIBAQEPTAiJ5AgAABAgQE3Q0QIECAAIGAgKAHRvQEAgQIECAg6G6AAAECBAgEBAQ9MKInECBAgAABQXcDBAgQIEAgICDogRE9gQABAgQICLobIECAAAECAQFBD4zoCQQIECBAQNDdAAECBAgQCAgIemBETyBAgAABAoLuBggQIECAQEBA0AMjegIBAgQIEBB0N0CAAAECBAICgh4Y0RMIECBAgICguwECBAgQIBAQEPTAiJ5AgAABAgQE3Q0QIECAAIGAgKAHRvQEAgQIECAg6G6AAAECBAgEBAQ9MKInECBAgAABQXcDBAgQIEAgICDogRE9gQABAgQICLobIECAAAECAQFBD4zoCQQIECBAQNDdAAECBAgQCAgIemBETyBAgAABAoLuBggQIECAQEBA0AMjegIBAgQIEBB0N0CAAAECBAICgh4Y0RMIECBAgICguwECBAgQIBAQEPTAiJ5AgAABAgQE3Q0QIECAAIGAgKAHRvQEAgQIECAg6G6AAAECBAgEBAQ9MKInECBAgAABQXcDBAgQIEAgICDogRE9gQABAgQICLobIECAAAECAQFBD4zoCQQIECBAQNDdAAECBAgQCAgIemBETyBAgAABAoLuBggQIECAQEBA0AMjegIBAgQIEBB0N0CAAAECBAICgh4Y0RMIECBAgICguwECBAgQIBAQEPTAiJ5AgAABAgQE3Q0QIECAAIGAgKAHRvQEAgQIECAg6G6AAAECBAgEBAQ9MKInECBAgAABQXcDBAgQIEAgICDogRE9gQABAgQICLobIECAAAECAQFBD4zoCQQIECBAQNDdAAECBAgQCAgIemBETyBAgAABAoLuBggQIECAQEBA0AMjegIBAgQIEBB0N0CAAAECBAICgh4Y0RMIECBAgICguwECBAgQIBAQEPTAiJ5AgAABAgQE3Q0QIECAAIGAgKAHRvQEAgQIECAg6G6AAAECBAgEBAQ9MKInECBAgAABQXcDBAgQIEAgICDogRE9gQABAgQICLobIECAAAECAQFBD4zoCQQIECBAQNDdAAECBAgQCAj8ArcjSkn3E5VoAAAAAElFTkSuQmCC
1 change: 1 addition & 0 deletions spec/resources/eventing/dom-node.html
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<div id="element" style="width: 100px; height: 100px; background-color: green"></div>
5 changes: 5 additions & 0 deletions spec/resources/eventing/style.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#dom-node {
width: 500px;
height: 500px;
background-color: blue;
}
4 changes: 3 additions & 1 deletion spec/resources/fonts/web-fonts/embedded.css
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
@font-face {
font-family: 'Font1';
src: url('data:application/x-font-woff2;base64,AAA') format('woff2'), local(Arial);
src:
url('data:application/x-font-woff2;base64,AAA') format('woff2'),
local(Arial);
font-weight: normal;
font-style: normal;
}
6 changes: 4 additions & 2 deletions spec/resources/fonts/web-fonts/remote.css
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
@font-face {
font-family: 'Font1';
src: url('http://fonts.com/font1.woff2') format('woff2'),
url('http://fonts.com/font1.woff') format('woff'), local(Arial);
src:
url('http://fonts.com/font1.woff2') format('woff2'),
url('http://fonts.com/font1.woff') format('woff'),
local(Arial);
font-weight: normal;
font-style: normal;
}
14 changes: 10 additions & 4 deletions spec/resources/fonts/web-fonts/rules.css
Original file line number Diff line number Diff line change
@@ -1,21 +1,27 @@
@font-face {
font-family: 'Font1';
src: url('http://fonts.com/font1.woff') format('woff'),
url('http://fonts.com/font1.woff2') format('woff2'), local('Arial');
src:
url('http://fonts.com/font1.woff') format('woff'),
url('http://fonts.com/font1.woff2') format('woff2'),
local('Arial');
font-weight: normal;
font-style: normal;
}

@font-face {
font-family: 'Font2';
src: url('http://fonts.com/font2.ttf?v1.1.3') format('truetype'), local('Ubuntu');
src:
url('http://fonts.com/font2.ttf?v1.1.3') format('truetype'),
local('Ubuntu');
font-weight: normal;
font-style: normal;
}

@font-face {
font-family: 'Font3';
src: url('data:font/woff2;base64,AAA') format('woff2'), local('Ubuntu');
src:
url('data:font/woff2;base64,AAA') format('woff2'),
local('Ubuntu');
font-weight: normal;
font-style: normal;
}
Expand Down
4 changes: 3 additions & 1 deletion spec/resources/fonts/web-fonts/with-query.css
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
@font-face {
font-family: 'Font1';
src: url('http://fonts.com/font1.woff2?v=4.3.0') format('woff2'), local(Arial);
src:
url('http://fonts.com/font1.woff2?v=4.3.0') format('woff2'),
local(Arial);
font-weight: normal;
font-style: normal;
}
61 changes: 47 additions & 14 deletions src/dom-to-image-more.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
styleCaching: 'strict',
// Default cors config is to request the image address directly
corsImg: undefined,
// Callback for adjustClonedNode eventing (to allow adjusting clone's properties)
adjustClonedNode: undefined,
};

const domtoimage = {
Expand Down Expand Up @@ -83,6 +85,7 @@
* - @param {Enumerator} method - get, post
* - @param {Object} headers - eg: { "Content-Type", "application/json;charset=UTF-8" }
* - @param {Object} data - post payload
* @param {Function} options.adjustClonedNode - callback for adjustClonedNode eventing (to allow adjusting clone's properties)
* @return {Promise} - A promise that is fulfilled with a SVG image data URL
* */
function toSvg(node, options) {
Expand Down Expand Up @@ -266,7 +269,7 @@
domtoimage.impl.options.cacheBust = options.cacheBust;
}

if (typeof(options.corsImg) === 'undefined') {
if (typeof options.corsImg === 'undefined') {
domtoimage.impl.options.corsImg = defaultOptions.corsImg;
} else {
domtoimage.impl.options.corsImg = options.corsImg;
Expand Down Expand Up @@ -352,9 +355,11 @@

return Promise.resolve(node)
.then(makeNodeCopy)
.then(adjustCloneBefore)
.then(function (clone) {
return cloneChildren(clone, getParentOfChildren(node));
})
.then(adjustCloneAfter)
.then(function (clone) {
return processClone(clone, node);
});
Expand All @@ -366,6 +371,20 @@
return original.cloneNode(false);
}

function adjustCloneBefore(clone) {
if (options.adjustClonedNode) {
options.adjustClonedNode(node, clone, false);
}
return Promise.resolve(clone);
}

function adjustCloneAfter(clone) {
if (options.adjustClonedNode) {
options.adjustClonedNode(node, clone, true);
}
return Promise.resolve(clone);
}

function getParentOfChildren(original) {
if (util.isElementHostForOpenShadowRoot(original)) {
return original.shadowRoot; // jump "down" to #shadow-root
Expand Down Expand Up @@ -804,15 +823,27 @@
request.withCredentials = true;
}

if (domtoimage.impl.options.corsImg
&& url.indexOf('http') === 0
&& url.indexOf(window.location.origin) === -1) {
const method = (domtoimage.impl.options.corsImg.method || 'GET').toUpperCase() === 'POST'
? 'POST'
: 'GET';
if (
domtoimage.impl.options.corsImg &&
url.indexOf('http') === 0 &&
url.indexOf(window.location.origin) === -1
) {
const method =
(
domtoimage.impl.options.corsImg.method || 'GET'
).toUpperCase() === 'POST'
? 'POST'
: 'GET';

request.open(
method,
(domtoimage.impl.options.corsImg.url || '').replace(
'#{cors}',
url
),
true
);

request.open(method, (domtoimage.impl.options.corsImg.url || '').replace('#{cors}', url), true);

let isJson = false;
const headers = domtoimage.impl.options.corsImg.headers || {};
Object.keys(headers).forEach(function (key) {
Expand All @@ -822,10 +853,12 @@
request.setRequestHeader(key, headers[key]);
});

const corsData = handleJson(domtoimage.impl.options.corsImg.data || '');

const corsData = handleJson(
domtoimage.impl.options.corsImg.data || ''
);

Object.keys(corsData).forEach(function (key) {
if (typeof(corsData[key]) === 'string') {
if (typeof corsData[key] === 'string') {
corsData[key] = corsData[key].replace('#{cors}', url);
}
});
Expand Down Expand Up @@ -1371,8 +1404,8 @@
const docType = document.doctype;
const docTypeDeclaration = docType
? `<!DOCTYPE ${escapeHTML(docType.name)} ${escapeHTML(
docType.publicId
)} ${escapeHTML(docType.systemId)}`.trim() + '>'
docType.publicId
)} ${escapeHTML(docType.systemId)}`.trim() + '>'
: '';

// Create a hidden sandbox <iframe> element within we can create default HTML elements and query their
Expand Down
Loading