UNPKG

take-shot

Version:
98 lines 3.66 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.embedImages = void 0; const embed_resources_1 = require("./embed-resources"); const util_1 = require("./util"); const dataurl_1 = require("./dataurl"); const mimes_1 = require("./mimes"); async function embedProp(propName, node) { const propValue = node.style?.getPropertyValue(propName); if (propValue) { const cssString = await (0, embed_resources_1.embedResources)(propValue, null); node.style.setProperty(propName, cssString, node.style.getPropertyPriority(propName)); return true; } return false; } async function embedBackground(clonedNode) { if (!(await embedProp('background', clonedNode))) { await embedProp('background-image', clonedNode); } if (!(await embedProp('mask', clonedNode))) { await embedProp('mask-image', clonedNode); } } async function embedImageNode(clonedNode, placeholder) { const isImageElement = (0, util_1.isInstanceOfElement)(clonedNode, HTMLImageElement); if ( // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore !(isImageElement && !(0, dataurl_1.isDataUrl)(clonedNode.src)) && !((0, util_1.isInstanceOfElement)(clonedNode, SVGImageElement) && !(0, dataurl_1.isDataUrl)(clonedNode.href.baseVal))) { return; } // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore const url = isImageElement ? clonedNode.src : clonedNode.href.baseVal; const dataURL = await (0, dataurl_1.resourceToDataURL)(url, (0, mimes_1.getMimeType)(url), placeholder); await new Promise((resolve) => { clonedNode.onload = resolve; clonedNode.onerror = (e) => { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore clonedNode.src = placeholder || ''; console.log('onerror ===>', e); }; const image = clonedNode; if (image.decode) { image.decode = resolve; } if (image.loading === 'lazy') { image.loading = 'eager'; } if (isImageElement) { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore clonedNode.srcset = ''; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore clonedNode.src = dataURL; } else { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore clonedNode.href.baseVal = dataURL; } }); } async function embedChildren(clonedNode, placeholder) { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore const children = (0, util_1.toArray)(clonedNode.childNodes); const deferreds = children.map((child) => embedImages(child, placeholder)); await Promise.all(deferreds).then(() => clonedNode); } async function embedImages(clonedNode, placeholder) { if ((0, util_1.isInstanceOfElement)(clonedNode, Element)) { try { await embedBackground(clonedNode); } catch (e) { console.log('embedBackground ===>', e); } try { await embedImageNode(clonedNode, placeholder); } catch (e) { console.log('embedImageNode ===>', e); } try { await embedChildren(clonedNode, placeholder); } catch (e) { console.log('embedChildren ===>', e); } } } exports.embedImages = embedImages; //# sourceMappingURL=embed-images.js.map