From 4f22850ea92b28576430c1bf1cbd0d9620b87422 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 5 Apr 2025 01:56:31 +0300 Subject: [PATCH] feat(import/export): import reference links --- src/services/export/markdown.spec.ts | 6 ++++++ src/services/import/markdown.spec.ts | 12 ++++++++++++ src/services/import/markdown.ts | 11 +++++++++++ 3 files changed, 29 insertions(+) diff --git a/src/services/export/markdown.spec.ts b/src/services/export/markdown.spec.ts index 17989d5ed..5f14314fd 100644 --- a/src/services/export/markdown.spec.ts +++ b/src/services/export/markdown.spec.ts @@ -238,4 +238,10 @@ describe("Markdown export", () => { expect(markdownExportService.toMarkdown(html)).toBe(expected); }); + it("exports reference links as normal links", () => { + const html = /*html*/`

Canvas

`; + const expected = `[Canvas](../../Canvas.html)`; + expect(markdownExportService.toMarkdown(html)).toBe(expected); + }); + }); diff --git a/src/services/import/markdown.spec.ts b/src/services/import/markdown.spec.ts index b8c0949bc..9ef6233e5 100644 --- a/src/services/import/markdown.spec.ts +++ b/src/services/import/markdown.spec.ts @@ -145,4 +145,16 @@ second line 2
  1. Hello
  2. { + const input = `[Google](https://www.google.com)`; + const expected = /*html*/`

    Google

    `; + expect(markdownService.renderToHtml(input, "Title")).toStrictEqual(expected); + }); + + it("imports back to reference links", () => { + const input = `[Canvas](../../Canvas.html)`; + const expected = /*html*/`

    Canvas

    `; + expect(markdownService.renderToHtml(input, "Title")).toStrictEqual(expected); + }); + }); diff --git a/src/services/import/markdown.ts b/src/services/import/markdown.ts index 57bf58dd6..3dcd2784c 100644 --- a/src/services/import/markdown.ts +++ b/src/services/import/markdown.ts @@ -64,6 +64,17 @@ class CustomMarkdownRenderer extends Renderer { return `
    ${body}
    `; } + link(data: Tokens.Link): string { + let html = super.link(data); + + // Rewrite local/relative links back to reference links. + if (data.href.indexOf("://") === -1) { + html = html.replace(/^