Render images server side. Remove JS hack to get images to render.

This commit is contained in:
Robert Marshall 2020-04-05 12:16:51 +01:00
parent 5d67e92245
commit 3eca70a102
9 changed files with 107 additions and 35 deletions

View file

@ -0,0 +1,37 @@
using Markdig.Renderers;
using Markdig.Renderers.Html;
using Markdig.Renderers.Html.Inlines;
using Markdig.Syntax.Inlines;
namespace Website.Markdig.Extensions {
public class BlogImageRenderer : HtmlObjectRenderer<LinkInline> {
private readonly LinkInlineRenderer _baseRenderer;
public BlogImageRenderer(LinkInlineRenderer baseRenderer) {
_baseRenderer = baseRenderer;
}
protected override void Write(HtmlRenderer renderer, LinkInline link) {
if (!link.IsImage) {
_baseRenderer.Write(renderer, link);
return;
}
renderer.Write(@"<div class=""blog-post__image-container--container"">");
renderer.Write(@"<div class=""blog-post__image-container"">");
renderer.Write($@"<img src=""{link.Url}"" alt=""");
var wasEnableHtmlForInline = renderer.EnableHtmlForInline;
renderer.EnableHtmlForInline = false;
renderer.WriteChildren(link);
renderer.EnableHtmlForInline = wasEnableHtmlForInline;
renderer.Write(@""" class=""blog-post__image-container--image"">");
renderer.Write(@"<span class=""blog-post__image-container--tagline"">");
renderer.EnableHtmlForInline = false;
renderer.WriteChildren(link);
renderer.EnableHtmlForInline = wasEnableHtmlForInline;
renderer.Write(@"</span>");
renderer.Write(@"</div>");
renderer.Write(@"</div>");
}
}
}

View file

@ -0,0 +1,22 @@
using Markdig;
using Markdig.Renderers;
using Markdig.Renderers.Html;
using Markdig.Renderers.Html.Inlines;
using Markdig.Syntax.Inlines;
namespace Website.Markdig.Extensions {
public class BlogImageRendererExtension : IMarkdownExtension {
public void Setup(MarkdownPipelineBuilder pipeline) {
}
public void Setup(MarkdownPipeline pipeline, IMarkdownRenderer renderer) {
var htmlRenderer = renderer as HtmlRenderer;
var originalRenderer = htmlRenderer.ObjectRenderers.FindExact<LinkInlineRenderer>();
if (originalRenderer != null)
htmlRenderer.ObjectRenderers.Remove(originalRenderer);
var blogImageRenderer = new BlogImageRenderer(originalRenderer);
htmlRenderer.ObjectRenderers.AddIfNotAlready(blogImageRenderer);
}
}
}

View file

@ -0,0 +1,10 @@
using Markdig;
namespace Website.Markdig.Extensions {
public static class MarkdownPipelineBuilderExtensions {
public static MarkdownPipelineBuilder UseBlogImageRenderer(this MarkdownPipelineBuilder pipeline) {
pipeline.Extensions.Add(new BlogImageRendererExtension());
return pipeline;
}
}
}

View file

@ -0,0 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="markdig" Version="0.18.3" />
</ItemGroup>
</Project>