From 364011b49c679c50ce6a5df7e20b07d4cd4acf28 Mon Sep 17 00:00:00 2001 From: purocean Date: Tue, 6 Dec 2022 23:41:20 +0800 Subject: [PATCH] feat(plantuml): support svg --- src/main/server/index.ts | 7 ++++--- src/main/server/plantuml.ts | 8 ++++---- src/renderer/plugins/markdown-plantuml.ts | 2 +- src/renderer/services/setting.ts | 12 ++++++++++-- 4 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/main/server/index.ts b/src/main/server/index.ts index 08a8d1e5..83530639 100644 --- a/src/main/server/index.ts +++ b/src/main/server/index.ts @@ -185,10 +185,11 @@ const searchFile = async (ctx: any, next: any) => { } const plantumlGen = async (ctx: any, next: any) => { - if (ctx.path.startsWith('/api/plantuml/png')) { - ctx.type = 'image/png' + if (ctx.path.startsWith('/api/plantuml')) { try { - ctx.body = await plantuml(ctx.query.data) + const { type, content } = await plantuml(ctx.query.data) + ctx.type = type + ctx.body = content ctx.set('cache-control', 'max-age=86400') // 1 day. } catch (error) { ctx.body = error diff --git a/src/main/server/plantuml.ts b/src/main/server/plantuml.ts index 30568380..5d52fdf3 100644 --- a/src/main/server/plantuml.ts +++ b/src/main/server/plantuml.ts @@ -15,7 +15,7 @@ function plantumlBase64 (base64: string) { return base64.split('').map(x => map[x] || '').join('') } -export default async function (data: string) { +export default async function (data: string): Promise<{ content: any, type: string }> { const code = pako.inflateRaw(Buffer.from(data, 'base64')) const api = config.get('plantuml-api', 'local') @@ -37,14 +37,14 @@ export default async function (data: string) { puml.in.write(code) puml.in.end() - return puml.out + return { content: puml.out, type: 'image/png' } } else { - return new Promise((resolve, reject) => { + return new Promise((resolve, reject) => { request({ url: api.replace('{data}', plantumlBase64(data)), encoding: null }, function (err: any, res: any) { if (err) { reject(err) } else { - resolve(res.body) + resolve({ content: res.body, type: res.headers['content-type'] }) } }) }) diff --git a/src/renderer/plugins/markdown-plantuml.ts b/src/renderer/plugins/markdown-plantuml.ts index 2d843c60..d6d2dc3d 100644 --- a/src/renderer/plugins/markdown-plantuml.ts +++ b/src/renderer/plugins/markdown-plantuml.ts @@ -9,7 +9,7 @@ import { DOM_ATTR_NAME } from '@fe/support/args' const emptySrc = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=' -const baseUrl = location.origin + '/api/plantuml/png' +const baseUrl = location.origin + '/api/plantuml' const MarkdownItPlugin = function umlPlugin (md: Markdown, options: any) { function generateSourceDefault (umlCode: string) { diff --git a/src/renderer/services/setting.ts b/src/renderer/services/setting.ts index f87bca4d..21473657 100644 --- a/src/renderer/services/setting.ts +++ b/src/renderer/services/setting.ts @@ -123,9 +123,17 @@ const schema: Schema = { defaultValue: 'local', title: 'T_setting-panel.schema.plantuml-api', type: 'string', - enum: ['local', 'https://www.plantuml.com/plantuml/png/{data}'], + enum: [ + 'local', + 'https://www.plantuml.com/plantuml/png/{data}', + 'https://www.plantuml.com/plantuml/svg/{data}', + ], options: { - enum_titles: ['Local - Need Java and Graphviz', 'Online (plantuml.com)'], + enum_titles: [ + 'Local - Need Java and Graphviz', + 'Online (plantuml.com) - PNG', + 'Online (plantuml.com) - SVG', + ], }, required: true, group: 'other',