@formant/ava-react
Version:
React components of AVA.
119 lines (117 loc) • 4.91 kB
JavaScript
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
});