Open blog external links in new tab
This commit is contained in:
parent
3eca70a102
commit
39a3af8c04
5 changed files with 60 additions and 45 deletions
|
@ -1,37 +0,0 @@
|
|||
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>");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,11 +1,9 @@
|
|||
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 class BlogRendererExtension : IMarkdownExtension {
|
||||
public void Setup(MarkdownPipelineBuilder pipeline) {
|
||||
|
||||
}
|
||||
|
@ -15,8 +13,8 @@ namespace Website.Markdig.Extensions {
|
|||
var originalRenderer = htmlRenderer.ObjectRenderers.FindExact<LinkInlineRenderer>();
|
||||
if (originalRenderer != null)
|
||||
htmlRenderer.ObjectRenderers.Remove(originalRenderer);
|
||||
var blogImageRenderer = new BlogImageRenderer(originalRenderer);
|
||||
htmlRenderer.ObjectRenderers.AddIfNotAlready(blogImageRenderer);
|
||||
var blogRenderer = new BlogLinkAndImageRenderer(originalRenderer);
|
||||
htmlRenderer.ObjectRenderers.AddIfNotAlready(blogRenderer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
54
Website.Markdig.Extensions/BlogLinkAndImageRenderer.cs
Normal file
54
Website.Markdig.Extensions/BlogLinkAndImageRenderer.cs
Normal file
|
@ -0,0 +1,54 @@
|
|||
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<LinkInline> {
|
||||
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(@"<div class=""blog-post__image-container--container"">");
|
||||
renderer.Write(@"<div class=""blog-post__image-container"">");
|
||||
renderer.Write($@"<img src=""{link.Url}"" alt=""");
|
||||
RenderChildren(renderer, link);
|
||||
renderer.Write(@""" class=""blog-post__image-container--image"">");
|
||||
renderer.Write(@"<span class=""blog-post__image-container--tagline"">");
|
||||
RenderChildren(renderer, link);
|
||||
renderer.Write(@"</span>");
|
||||
renderer.Write(@"</div>");
|
||||
renderer.Write(@"</div>");
|
||||
}
|
||||
|
||||
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<KeyValuePair<string, string>>();
|
||||
htmlAttributes.Properties.Add(new KeyValuePair<string, string>("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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -2,8 +2,8 @@ using Markdig;
|
|||
|
||||
namespace Website.Markdig.Extensions {
|
||||
public static class MarkdownPipelineBuilderExtensions {
|
||||
public static MarkdownPipelineBuilder UseBlogImageRenderer(this MarkdownPipelineBuilder pipeline) {
|
||||
pipeline.Extensions.Add(new BlogImageRendererExtension());
|
||||
public static MarkdownPipelineBuilder UseBlogRenderer(this MarkdownPipelineBuilder pipeline) {
|
||||
pipeline.Extensions.Add(new BlogRendererExtension());
|
||||
return pipeline;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,7 +24,7 @@ namespace Website.ViewModels
|
|||
.UseAutoLinks()
|
||||
.UseSoftlineBreakAsHardlineBreak()
|
||||
.UseHighlightJs()
|
||||
.UseBlogImageRenderer()
|
||||
.UseBlogRenderer()
|
||||
.Build();
|
||||
|
||||
public int Id { get; }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue