From ace237989cb77968a1ecdb5ac7067092bcf1dd8b Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sun, 1 Sep 2024 23:20:41 +0300 Subject: [PATCH] client: Reduce code duplication --- src/public/app/services/utils.js | 23 ++++++++++++++++++- src/public/app/widgets/mermaid.js | 16 ++----------- .../app/widgets/type_widgets/mind_map.js | 16 ++----------- 3 files changed, 26 insertions(+), 29 deletions(-) diff --git a/src/public/app/services/utils.js b/src/public/app/services/utils.js index 7cbdfb351..6422fa236 100644 --- a/src/public/app/services/utils.js +++ b/src/public/app/services/utils.js @@ -508,6 +508,26 @@ function createImageSrcUrl(note) { return `api/images/${note.noteId}/${encodeURIComponent(note.title)}?timestamp=${Date.now()}`; } +/** + * Given a string representation of an SVG, triggers a download of the file on the client device. + * + * @param {string} nameWithoutExtension the name of the file. The .svg suffix is automatically added to it. + * @param {string} svgContent the content of the SVG file download. + */ +function downloadSvg(nameWithoutExtension, svgContent) { + const filename = `${nameWithoutExtension}.svg`; + const element = document.createElement('a'); + element.setAttribute('href', `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svgContent)}`); + element.setAttribute('download', filename); + + element.style.display = 'none'; + document.body.appendChild(element); + + element.click(); + + document.body.removeChild(element); +} + export default { reloadFrontendApp, parseDate, @@ -547,5 +567,6 @@ export default { escapeRegExp, areObjectsEqual, copyHtmlToClipboard, - createImageSrcUrl + createImageSrcUrl, + downloadSvg }; diff --git a/src/public/app/widgets/mermaid.js b/src/public/app/widgets/mermaid.js index cab971860..204133d54 100644 --- a/src/public/app/widgets/mermaid.js +++ b/src/public/app/widgets/mermaid.js @@ -1,6 +1,7 @@ import libraryLoader from "../services/library_loader.js"; import NoteContextAwareWidget from "./note_context_aware_widget.js"; import server from "../services/server.js"; +import utils from "../services/utils.js"; const TPL = `