From 9510153940a08a84c85af5fa4332e7291e83bfe2 Mon Sep 17 00:00:00 2001 From: Salih Date: Mon, 23 Jan 2023 13:50:14 +0300 Subject: [PATCH] CMS-KIT: add link types to links in comments as optional --- .../Volo.CmsKit.Web.Unified/Pages/Index.cshtml | 2 +- .../Renderers/IMarkdownToHtmlRenderer.cs | 2 +- .../Renderers/MarkdownToHtmlRenderer.cs | 17 ++++++++++++++++- .../Commenting/CommentingViewComponent.cs | 9 +++++++-- 4 files changed, 25 insertions(+), 5 deletions(-) diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Pages/Index.cshtml b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Pages/Index.cshtml index eee29c4cbb..8cf7ea242a 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Pages/Index.cshtml +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Pages/Index.cshtml @@ -60,7 +60,7 @@ @if (GlobalFeatureManager.Instance.IsEnabled()) { - @await Component.InvokeAsync(typeof(CommentingViewComponent), new {entityType = "quote", entityId = "1"}) + @await Component.InvokeAsync(typeof(CommentingViewComponent), new {entityType = "quote", entityId = "1", rels = new [] {"nofollow"}}) } diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Renderers/IMarkdownToHtmlRenderer.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Renderers/IMarkdownToHtmlRenderer.cs index 565437af7e..f8316cc537 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Renderers/IMarkdownToHtmlRenderer.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Renderers/IMarkdownToHtmlRenderer.cs @@ -4,5 +4,5 @@ namespace Volo.CmsKit.Web.Renderers; public interface IMarkdownToHtmlRenderer { - Task RenderAsync(string rawMarkdown, bool allowHtmlTags = true, bool preventXSS = true); + Task RenderAsync(string rawMarkdown, bool allowHtmlTags = true, bool preventXSS = true, string[] rels = null); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Renderers/MarkdownToHtmlRenderer.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Renderers/MarkdownToHtmlRenderer.cs index 83317c2111..0a548722b3 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Renderers/MarkdownToHtmlRenderer.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Renderers/MarkdownToHtmlRenderer.cs @@ -20,7 +20,7 @@ public class MarkdownToHtmlRenderer : IMarkdownToHtmlRenderer, ITransientDepende _htmlSanitizer = new HtmlSanitizer(); } - public Task RenderAsync(string rawMarkdown, bool allowHtmlTags = true, bool preventXSS = true) + public Task RenderAsync(string rawMarkdown, bool allowHtmlTags = true, bool preventXSS = true, string[] rels = null) { if (!allowHtmlTags) { @@ -33,10 +33,25 @@ public class MarkdownToHtmlRenderer : IMarkdownToHtmlRenderer, ITransientDepende { html = _htmlSanitizer.Sanitize(html); } + + if(rels != null && rels.Any()) + { + html = AddRelToLinks(html, rels); + } return Task.FromResult(html); } + private string AddRelToLinks(string html, string[] rels) + { + var rel = string.Join(" ", rels); + var regex = new Regex(")", RegexOptions.IgnoreCase | + RegexOptions.Singleline | + RegexOptions.Multiline | + RegexOptions.Compiled); + return regex.Replace(html, $" GetCodeBlockIndices(string markdownText) { diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/CommentingViewComponent.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/CommentingViewComponent.cs index bdf8d3ffa0..f8f0e5f43f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/CommentingViewComponent.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/CommentingViewComponent.cs @@ -59,7 +59,8 @@ public class CommentingViewComponent : AbpViewComponent public virtual async Task InvokeAsync( string entityType, - string entityId) + string entityId, + IEnumerable rels = null) { var comments = (await CommentPublicAppService .GetListAsync(entityType, entityId)).Items; @@ -70,6 +71,7 @@ public class CommentingViewComponent : AbpViewComponent { EntityId = entityId, EntityType = entityType, + Rels = rels, LoginUrl = loginUrl, Comments = comments.OrderByDescending(i => i.CreationTime).ToList() }; @@ -98,11 +100,12 @@ public class CommentingViewComponent : AbpViewComponent private async Task ConvertMarkdownTextsToHtml(CommentingViewModel viewModel) { viewModel.RawCommentTexts = new Dictionary(); + var rels = viewModel.Rels?.ToArray(); foreach (var comment in viewModel.Comments) { viewModel.RawCommentTexts.Add(comment.Id, comment.Text); - comment.Text = await MarkdownToHtmlRenderer.RenderAsync(comment.Text, allowHtmlTags: false, preventXSS: true); + comment.Text = await MarkdownToHtmlRenderer.RenderAsync(comment.Text, allowHtmlTags: false, preventXSS: true, rels: rels); foreach (var reply in comment.Replies) { @@ -117,6 +120,8 @@ public class CommentingViewComponent : AbpViewComponent public string EntityType { get; set; } public string EntityId { get; set; } + + public IEnumerable Rels { get; set; } public string LoginUrl { get; set; }