UNPKG

@formant/ava-react

Version:

React components of AVA.

119 lines (117 loc) 4.91 kB
var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/NarrativeTextVis/chore/exporter/helpers/transformHtml.ts var transformHtml_exports = {}; __export(transformHtml_exports, { transformHtml: () => transformHtml }); module.exports = __toCommonJS(transformHtml_exports); var import_canvg = require("canvg"); var import_constants = require("../../../constants"); function isNegativeArrow(svgElement) { var _a; return (_a = svgElement == null ? void 0 : svgElement.parentElement) == null ? void 0 : _a.className.includes(`${import_constants.NTV_PREFIX_CLS}-value-negative`); } function isPositiveArrow(svgElement) { var _a; return (_a = svgElement.parentElement) == null ? void 0 : _a.className.includes(`${import_constants.NTV_PREFIX_CLS}-value-positive`); } function isEyeIcon(svgElement) { var _a, _b; return ((_a = svgElement.parentElement) == null ? void 0 : _a.className.includes("anticon-eye")) || ((_b = svgElement.parentElement) == null ? void 0 : _b.className.includes("anticon-eye-invisible")); } function transformArrowToText(svgElement, html) { let newHtml = html; const svgHtml = svgElement.outerHTML; if (isNegativeArrow(svgElement)) { newHtml = newHtml.replace(svgHtml, "-"); } if (isPositiveArrow(svgElement)) { newHtml = newHtml.replace(svgHtml, "+"); } return newHtml; } async function svgToPngUrl(data, canvas) { const { svg } = data; const ctx = canvas == null ? void 0 : canvas.getContext("2d"); if (ctx) { const v = await import_canvg.Canvg.from(ctx, svg); await v.render(); } const pngUrl = canvas == null ? void 0 : canvas.toDataURL(); return pngUrl; } async function svgToImageHtml(svgElement, svgHtml, canvas) { const { width, height } = svgElement.getBBox() || {}; const imageUrl = await svgToPngUrl({ width, height, svg: svgHtml }, canvas); const imageHtml = `<img alt="${import_constants.NTV_IMG_ALT}" src="${imageUrl}" width="${width}" height="${height}"/>`; return imageHtml; } function canvasToImageHtml(canvasElement, imgExtra) { const pngUrl = canvasElement.toDataURL(); const { width, height } = canvasElement || {}; const baseImageHtml = `<img alt="${import_constants.NTV_IMG_ALT}" src="${pngUrl}" width="${width}" height="${height}" />`; const imageHtml = (imgExtra == null ? void 0 : imgExtra.jumpUrl) ? `<a href="${imgExtra.jumpUrl}">${baseImageHtml}</a>` : baseImageHtml; return imageHtml; } async function transformHtml({ elements = [], imageExtra, replaceType = "image" }) { var _a; let originalHtml = ""; for (let i = 0; i < elements.length; i += 1) { const element = ((_a = elements.item) == null ? void 0 : _a.call(elements, i)) || (elements == null ? void 0 : elements[i]); originalHtml += element == null ? void 0 : element.outerHTML; } let newHtml = originalHtml; const canvasForCopy = document.createElement("canvas"); for (let i = 0; i < elements.length; i += 1) { const element = elements[i]; const svgElements = element.getElementsByTagName("svg"); const canvasElements = element.getElementsByTagName("canvas"); for (let k = 0; k < canvasElements.length; k += 1) { const canvasElement = canvasElements[k]; const elemHtml = canvasElement.outerHTML; if (replaceType === "image") { const imageHtml = canvasToImageHtml(canvasElement, imageExtra); newHtml = newHtml.replace(elemHtml, imageHtml); } } for (let j = 0; j < svgElements.length; j += 1) { const svgElement = svgElements[j]; const svgHtml = svgElement.outerHTML; if (replaceType === "image") { if (isNegativeArrow(svgElement) || isPositiveArrow(svgElement)) { newHtml = transformArrowToText(svgElement, newHtml); } else if (!isEyeIcon(svgElement)) { const imageHtml = await svgToImageHtml(svgElement, svgHtml, canvasForCopy); newHtml = newHtml.replace(svgHtml, imageHtml); } } else if (replaceType === "text") { newHtml = transformArrowToText(svgElements[j], newHtml); } } } return newHtml; } // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { transformHtml });