From 187a67e03e2a2817c464d07e2761b56e216e7af7 Mon Sep 17 00:00:00 2001 From: Sebastian Martinez Date: Tue, 2 Apr 2024 22:32:45 +0200 Subject: [PATCH] Underline markdown links that have emojis --- src/components/Markdown.svelte | 6 +++++- tests/fixtures/repos/markdown.tar.bz2 | Bin 4938 -> 4959 bytes tests/visual/desktop/markdown.spec.ts | 5 +++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/components/Markdown.svelte b/src/components/Markdown.svelte index 3e1920339..75fd61345 100644 --- a/src/components/Markdown.svelte +++ b/src/components/Markdown.svelte @@ -111,7 +111,11 @@ console.warn("Not able to parse url", e); } // Don't underline tags that contain images. - if (e.firstElementChild instanceof HTMLImageElement) { + // Make an exception for emojis. + if ( + e.firstElementChild instanceof HTMLImageElement && + !e.firstElementChild.classList.contains("txt-emoji") + ) { e.classList.add("no-underline"); } } diff --git a/tests/fixtures/repos/markdown.tar.bz2 b/tests/fixtures/repos/markdown.tar.bz2 index 99eb2ec01ce98d18fe57147e3689c7a811814c33..b04bd373950011e04a8b7194f8040465fc913c24 100644 GIT binary patch delta 4782 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 { await expect(page).toHaveScreenshot({ fullPage: true }); }); +test("underline links that contain emojis", async ({ page }) => { + await page.goto(`${markdownUrl}/tree/main/link-files.md`); + await expect(page).toHaveScreenshot({ fullPage: true }); +}); + test("markdown in issues is not overflowing", async ({ page }) => { await page.goto(`${markdownUrl}/issues`, { waitUntil: "networkidle",