From 1437df7de1cd403affdbb96f61909e8c2577c292 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sun, 1 Sep 2024 22:36:50 +0300 Subject: [PATCH] client,server: Set up SVG rendering for mindmap --- src/public/app/services/content_renderer.js | 2 +- src/public/app/widgets/type_widgets/mind_map.js | 12 +++++++++++- src/routes/api/image.ts | 4 +++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/public/app/services/content_renderer.js b/src/public/app/services/content_renderer.js index 6d090bc369..9d72855033 100644 --- a/src/public/app/services/content_renderer.js +++ b/src/public/app/services/content_renderer.js @@ -34,7 +34,7 @@ async function getRenderedContent(entity, options = {}) { else if (type === 'code') { await renderCode(entity, $renderedContent); } - else if (type === 'image' || type === 'canvas') { + else if (['image', 'canvas', 'mindMap'].includes(type)) { renderImage(entity, $renderedContent, options); } else if (!options.tooltip && ['file', 'pdf', 'audio', 'video'].includes(type)) { diff --git a/src/public/app/widgets/type_widgets/mind_map.js b/src/public/app/widgets/type_widgets/mind_map.js index bf7b89ad54..36fd884e8b 100644 --- a/src/public/app/widgets/type_widgets/mind_map.js +++ b/src/public/app/widgets/type_widgets/mind_map.js @@ -83,8 +83,18 @@ export default class MindMapWidget extends TypeWidget { return; } + const svgContent = await this.mind.exportSvg().text(); return { - content: mind.getDataString() + content: mind.getDataString(), + attachments: [ + { + role: "image", + title: "mindmap-export.svg", + mime: "image/svg+xml", + content: svgContent, + position: 0 + } + ] }; } diff --git a/src/routes/api/image.ts b/src/routes/api/image.ts index 14167de708..f6db84ca7c 100644 --- a/src/routes/api/image.ts +++ b/src/routes/api/image.ts @@ -25,7 +25,7 @@ function returnImageInt(image: BNote | BRevision | null, res: Response) { if (!image) { res.set('Content-Type', 'image/png'); return res.send(fs.readFileSync(`${RESOURCE_DIR}/db/image-deleted.png`)); - } else if (!["image", "canvas", "mermaid"].includes(image.type)) { + } else if (![ "image", "canvas", "mermaid", "mindMap" ].includes(image.type)) { return res.sendStatus(400); } @@ -33,6 +33,8 @@ function returnImageInt(image: BNote | BRevision | null, res: Response) { renderSvgAttachment(image, res, 'canvas-export.svg'); } else if (image.type === 'mermaid') { renderSvgAttachment(image, res, 'mermaid-export.svg'); + } else if (image.type === "mindMap") { + renderSvgAttachment(image, res, 'mindmap-export.svg'); } else { res.set('Content-Type', image.mime); res.set("Cache-Control", "no-cache, no-store, must-revalidate");