From 26b44bac6049d59de18b540e33735a388f305213 Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Thu, 30 Apr 2020 03:53:01 +0300 Subject: [PATCH] closes #3793 --- .../HtmlConverting/HtmlNormalizer.cs | 46 +++++++++++++++++++ .../MarkdownDocumentToHtmlConverter.cs | 5 +- .../Pages/Documents/Project/Index.cshtml.cs | 2 + 3 files changed, 52 insertions(+), 1 deletion(-) diff --git a/modules/docs/src/Volo.Docs.Web/HtmlConverting/HtmlNormalizer.cs b/modules/docs/src/Volo.Docs.Web/HtmlConverting/HtmlNormalizer.cs index 6f0a680ce2..1689a209fe 100644 --- a/modules/docs/src/Volo.Docs.Web/HtmlConverting/HtmlNormalizer.cs +++ b/modules/docs/src/Volo.Docs.Web/HtmlConverting/HtmlNormalizer.cs @@ -35,5 +35,51 @@ namespace Volo.Docs.HtmlConverting { return Regex.Replace(content, "", "", RegexOptions.IgnoreCase); } + + /// + /// Wraps an image with a tag that's clickable to open the image in a new browser tab. + /// + public static string WrapImagesWithinAnchors(string html) + { + try + { + return Regex.Replace(html, "", match => + { + var link = match.Groups[1].Value; + var imgTag = match.Groups[0].Value; + var title = GetTitleFromTag(imgTag); + + return $"\"{title}\""; + }); + + } + catch + { + // ignored + return html; + } + } + + private static string GetTitleFromTag(string imgTag) + { + if (string.IsNullOrWhiteSpace(imgTag)) + { + return null; + } + + var match = Regex.Match(imgTag, @"\stitle\s?\=\s?(\""|')(.+?)(\""|')", RegexOptions.Multiline); + if (match.Success && match.Groups.Count > 2) + { + return match.Groups[2].ToString().Trim(); + } + + match = Regex.Match(imgTag, @"\salt\s*\=\s*(\""|')(.*?)(\""|')", RegexOptions.Multiline); + if (match.Success && match.Groups.Count > 2) + { + return match.Groups[2].ToString().Trim(); + } + + return null; + } } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Web/Markdown/MarkdownDocumentToHtmlConverter.cs b/modules/docs/src/Volo.Docs.Web/Markdown/MarkdownDocumentToHtmlConverter.cs index 12dec9b304..9942c52309 100644 --- a/modules/docs/src/Volo.Docs.Web/Markdown/MarkdownDocumentToHtmlConverter.cs +++ b/modules/docs/src/Volo.Docs.Web/Markdown/MarkdownDocumentToHtmlConverter.cs @@ -44,7 +44,10 @@ namespace Volo.Docs.Markdown languageCode ); - return _markdownConverter.ConvertToHtml(content); + var html = _markdownConverter.ConvertToHtml(content); + + return html; + // return HtmlNormalizer.WrapImagesWithinAnchors(html); } protected virtual string NormalizeLinks( diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs index b1d1c021f1..0acd12531f 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs @@ -400,6 +400,8 @@ namespace Volo.Docs.Pages.Documents.Project Document.LocalDirectory ); + content = HtmlNormalizer.WrapImagesWithinAnchors(content); + //todo find a way to make it on client in prismJS configuration (eg: map C# => csharp) content = HtmlNormalizer.ReplaceCodeBlocksLanguage( content,