using System.Collections.Generic; using Markdig.Renderers; using Markdig.Renderers.Html; using Markdig.Renderers.Html.Inlines; using Markdig.Syntax.Inlines; namespace Website.Markdig.Extensions { public class BlogLinkAndImageRenderer : HtmlObjectRenderer { private readonly LinkInlineRenderer _baseRenderer; public BlogLinkAndImageRenderer(LinkInlineRenderer baseRenderer) { _baseRenderer = baseRenderer; } private static void RenderChildren(HtmlRenderer renderer, LinkInline link) { var wasEnableHtmlForInline = renderer.EnableHtmlForInline; renderer.EnableHtmlForInline = false; renderer.WriteChildren(link); renderer.EnableHtmlForInline = wasEnableHtmlForInline; } private static void RenderImage(HtmlRenderer renderer, LinkInline link) { renderer.Write(@"
"); renderer.Write(@"
"); renderer.Write($@""); renderer.Write(@""); RenderChildren(renderer, link); renderer.Write(@""); renderer.Write(@"
"); renderer.Write(@"
"); } private void RenderLink(HtmlRenderer renderer, LinkInline link) { if (link.Url.StartsWith("http") || link.Url.StartsWith("//")) { var htmlAttributes = link.GetAttributes(); if (htmlAttributes.Properties == null) htmlAttributes.Properties = new List>(); htmlAttributes.Properties.Add(new KeyValuePair("target", "_blank")); } _baseRenderer.Write(renderer, link); } protected override void Write(HtmlRenderer renderer, LinkInline link) { link.Url = link.GetDynamicUrl != null ? link.GetDynamicUrl() ?? link.Url : link.Url; if (link.IsImage) RenderImage(renderer, link); else RenderLink(renderer, link); } } }