diff --git a/src/share/content_renderer.js b/src/share/content_renderer.js
index cc456bc2e..ae4694c4a 100644
--- a/src/share/content_renderer.js
+++ b/src/share/content_renderer.js
@@ -24,7 +24,7 @@ function getContent(note) {
} else if (note.type === 'code') {
renderCode(result);
} else if (note.type === 'mermaid') {
- renderMermaid(result);
+ renderMermaid(result, note);
} else if (note.type === 'image' || note.type === 'canvas') {
renderImage(result, note);
} else if (note.type === 'file') {
@@ -126,15 +126,14 @@ function renderCode(result) {
}
}
-function renderMermaid(result) {
+function renderMermaid(result, note) {
result.content = `
-
${escapeHtml(result.content)}
+
Chart source
${escapeHtml(result.content)}
`
- result.header += ``;
}
function renderImage(result, note) {
diff --git a/src/share/routes.js b/src/share/routes.js
index 462ad1aeb..af5a3d214 100644
--- a/src/share/routes.js
+++ b/src/share/routes.js
@@ -105,6 +105,27 @@ function checkNoteAccess(noteId, req, res) {
return false;
}
+function renderImageAttachment(image, res, attachmentName) {
+ let svgString = ''
+ const attachment = image.getAttachmentByTitle(attachmentName);
+
+ if (attachment) {
+ svgString = attachment.getContent();
+ } else {
+ // backwards compatibility, before attachments, the SVG was stored in the main note content as a separate key
+ const contentSvg = image.getJsonContentSafely()?.svg;
+
+ if (contentSvg) {
+ svgString = contentSvg;
+ }
+ }
+
+ const svg = svgString
+ res.set('Content-Type', "image/svg+xml");
+ res.set("Cache-Control", "no-cache, no-store, must-revalidate");
+ res.send(svg);
+}
+
function register(router) {
function renderNote(note, req, res) {
if (!note) {
@@ -209,37 +230,18 @@ function register(router) {
return;
}
- if (!["image", "canvas"].includes(image.type)) {
- return res.status(400)
- .json({ message: "Requested note is not a shareable image" });
- } else if (image.type === "canvas") {
- /**
- * special "image" type. the canvas is actually type application/json
- * to avoid bitrot and enable usage as referenced image the svg is included.
- */
- let svgString = ''
- const attachment = image.getAttachmentByTitle('canvas-export.svg');
-
- if (attachment) {
- svgString = attachment.getContent();
- } else {
- // backwards compatibility, before attachments, the SVG was stored in the main note content as a separate key
- const contentSvg = image.getJsonContentSafely()?.svg;
-
- if (contentSvg) {
- svgString = contentSvg;
- }
- }
-
- const svg = svgString
- res.set('Content-Type', "image/svg+xml");
- res.set("Cache-Control", "no-cache, no-store, must-revalidate");
- res.send(svg);
- } else {
+ if (image.type === 'image') {
// normal image
res.set('Content-Type', image.mime);
addNoIndexHeader(image, res);
res.send(image.getContent());
+ } else if (image.type === "canvas") {
+ renderImageAttachment(image, res, 'canvas-export.svg');
+ } else if (image.type === 'mermaid') {
+ renderImageAttachment(image, res, 'mermaid-export.svg');
+ } else {
+ return res.status(400)
+ .json({ message: "Requested note is not a shareable image" });
}
});