html-to-image
Version:
Generates an image from a DOM node using HTML5 canvas and SVG.
59 lines • 2.82 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import { getBlobFromURL } from './getBlobFromURL';
import { embedResources } from './embedResources';
import { toArray, isDataUrl, toDataURL, getMimeType } from './util';
export function embedImages(clonedNode, options) {
return __awaiter(this, void 0, void 0, function* () {
if (!(clonedNode instanceof Element)) {
return Promise.resolve(clonedNode);
}
return Promise.resolve(clonedNode)
.then((node) => embedBackground(node, options))
.then((node) => embedImageNode(node, options))
.then((node) => embedChildren(node, options));
});
}
function embedBackground(clonedNode, options) {
return __awaiter(this, void 0, void 0, function* () {
const background = clonedNode.style.getPropertyValue('background');
if (!background) {
return Promise.resolve(clonedNode);
}
return Promise.resolve(background)
.then((cssString) => embedResources(cssString, null, options))
.then((cssString) => {
clonedNode.style.setProperty('background', cssString, clonedNode.style.getPropertyPriority('background'));
return clonedNode;
});
});
}
function embedImageNode(clonedNode, options) {
if (!(clonedNode instanceof HTMLImageElement) || isDataUrl(clonedNode.src)) {
return Promise.resolve(clonedNode);
}
return Promise.resolve(clonedNode.src)
.then((url) => getBlobFromURL(url, options))
.then((data) => toDataURL(data, getMimeType(clonedNode.src)))
.then((dataURL) => new Promise((resolve, reject) => {
clonedNode.onload = resolve;
clonedNode.onerror = reject;
clonedNode.src = dataURL;
}))
.then(() => clonedNode, () => clonedNode);
}
function embedChildren(clonedNode, options) {
return __awaiter(this, void 0, void 0, function* () {
const children = toArray(clonedNode.childNodes);
const deferreds = children.map((child) => embedImages(child, options));
return Promise.all(deferreds).then(() => clonedNode);
});
}
//# sourceMappingURL=embedImages.js.map