From f793cf3c074a7937a7f98ec563971de02add5a1c Mon Sep 17 00:00:00 2001 From: Steven Giesel Date: Sun, 13 Sep 2026 18:37:13 +0200 Subject: [PATCH 1/2] feat: External link support and language indicator --- .../CopyCodeBlockToClipboardExtension.cs | 10 +++ .../Features/ExternalLinkExtension.cs | 40 ++++++++++++ .../Features/MarkdownConverter.cs | 1 + src/LinkDotNet.Blog.Web/wwwroot/css/basic.css | 5 ++ .../Web/Features/MarkdownConverterTests.cs | 62 +++++++++++++++++++ 5 files changed, 118 insertions(+) create mode 100644 src/LinkDotNet.Blog.Web/Features/ExternalLinkExtension.cs diff --git a/src/LinkDotNet.Blog.Web/Features/CopyCodeBlockToClipboardExtension.cs b/src/LinkDotNet.Blog.Web/Features/CopyCodeBlockToClipboardExtension.cs index a45561f5..72c69826 100644 --- a/src/LinkDotNet.Blog.Web/Features/CopyCodeBlockToClipboardExtension.cs +++ b/src/LinkDotNet.Blog.Web/Features/CopyCodeBlockToClipboardExtension.cs @@ -24,6 +24,12 @@ public static MarkdownPipelineBuilder UseLazyLoadImages(this MarkdownPipelineBui pipeline.Extensions.Add(new LazyLoadImageExtension()); return pipeline; } + + public static MarkdownPipelineBuilder UseExternalLinks(this MarkdownPipelineBuilder pipeline) + { + pipeline.Extensions.Add(new ExternalLinkExtension()); + return pipeline; + } } internal sealed class CopyCodeBlockToClipboardExtension : IMarkdownExtension @@ -55,6 +61,10 @@ internal sealed class CustomCodeBlockRenderer : CodeBlockRenderer protected override void Write(HtmlRenderer renderer, CodeBlock obj) { renderer.Write("""
"""); + if (obj is FencedCodeBlock { Info.Length: > 0 } fenced) + { + renderer.Write($"""{fenced.Info}"""); + } renderer.Write("""