diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/ContentFragment.cshtml b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/ContentFragment.cshtml
index 1fe1d67791..3ac2080529 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/ContentFragment.cshtml
+++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/ContentFragment.cshtml
@@ -1,6 +1,7 @@
@using Microsoft.AspNetCore.Mvc.ViewComponents
@using Volo.Abp.Data
@using Volo.Abp.Reflection
+@using Volo.CmsKit.Contents
@using Volo.CmsKit.Web.Renderers;
@using Volo.CmsKit.Web.Pages.CmsKit.Components.Contents;
@@ -11,11 +12,11 @@
@foreach (var contentFragment in Model.ContentDto.ContentFragments)
{
- if (contentFragment.Type == "Markdown")
+ if (contentFragment.Type == ContentConsts.Markdown)
{
@Html.Raw(await MarkdownRenderer.RenderAsync(contentFragment.GetProperty("Content")))
}
- else if (contentFragment.Type == "Widget")
+ else if (contentFragment.Type == ContentConsts.Widget)
{
var componentName = contentFragment.GetProperty("Type");
var descriptor = ViewComponentSelector.SelectComponent(componentName);
diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/ContentFragmentViewComponent.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/ContentFragmentViewComponent.cs
index d276165982..e89bd6846d 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/ContentFragmentViewComponent.cs
+++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/ContentFragmentViewComponent.cs
@@ -14,7 +14,7 @@ public class ContentFragmentViewComponent : AbpViewComponent
{
public IContent ContentDto { get; set; }
- public virtual async Task InvokeAsync(IContent contentDto)
+ public virtual IViewComponentResult Invoke(IContent contentDto)
{
return View("~/Pages/CmsKit/Components/Contents/ContentFragment.cshtml", new ContentFragmentViewComponent() { ContentDto = contentDto });
}
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 9dd5555051..772e7a8531 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
@@ -19,6 +19,9 @@ public class MarkdownToHtmlRenderer : IMarkdownToHtmlRenderer, ITransientDepende
{
MarkdownPipeline = markdownPipeline;
_htmlSanitizer = new HtmlSanitizer();
+ _htmlSanitizer.AllowedAttributes.Add("class");
+ _htmlSanitizer.AllowedAttributes.Add("data-bs-toggle");
+ _htmlSanitizer.AllowedAttributes.Add("data-bs-target");
}
public Task RenderAsync(string rawMarkdown, bool allowHtmlTags = true, bool preventXSS = true, string referralLinks = null)
diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml
index edb03a12bd..c45dde17cb 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml
+++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml
@@ -1,8 +1,6 @@
@page
-@using Volo.Abp.Data
@using Volo.Abp.Users;
-@using Volo.CmsKit.Public.Blogs
@using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Blogs.BlogPostComment
@using Volo.CmsKit.Public.Web.Pages
@using Volo.Abp.GlobalFeatures
@@ -10,16 +8,15 @@
@using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.ReactionSelection
@using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Rating
@using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Tags
-@using Volo.CmsKit.Web.Renderers
@using Volo.Abp.AspNetCore.Mvc.UI.Packages.HighlightJs
@using Volo.CmsKit.Contents
+@using Volo.CmsKit.Web.Pages.CmsKit.Components.Contents
@inherits CmsKitPublicPageBase
@model Volo.CmsKit.Public.Web.Pages.Public.CmsKit.Blogs.BlogPostModel
@inject ICurrentUser CurrentUser
-@inject IMarkdownToHtmlRenderer MarkdownRenderer
@{
string dummyImageSource = "https://dummyimage.com/1280x720/a3a3a3/fff.png?text=" + Model.ViewModel.Title;
@@ -70,17 +67,10 @@
@Model.ViewModel.CreationTime
- @foreach (var contentFragment in Model.ViewModel.ContentFragments)
+ @(await Component.InvokeAsync(typeof(ContentFragmentViewComponent), new DefaultContentDto
{
- if (contentFragment.Type == ContentConsts.Markdown)
- {
- @Html.Raw(await MarkdownRenderer.RenderAsync(contentFragment.GetProperty("Content"), allowHtmlTags: true, preventXSS: true))
- }
- else if (contentFragment.Type == ContentConsts.Widget)
- {
- @await Component.InvokeAsync(contentFragment.GetProperty("Type"), contentFragment.ExtraProperties.ConvertToDynamicObject())
- }
- }
+ ContentFragments = Model.ViewModel.ContentFragments
+ }))
@if (Model.ViewModel.LastModificationTime != null)
{
diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Pages/Index.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Pages/Index.cshtml
index e14733695a..44ac5332b6 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Pages/Index.cshtml
+++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Pages/Index.cshtml
@@ -1,15 +1,9 @@
@page
@addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI.Bootstrap
@using Volo.CmsKit.Contents
-@using System.Dynamic
-@using Volo.Abp.Data
-@using Volo.Abp.AspNetCore.Mvc.UI.Packages.HighlightJs;
-@using Volo.Abp.AspNetCore.Mvc.UI.Widgets;
-@using Volo.CmsKit.Web.Renderers
+@using Volo.CmsKit.Web.Pages.CmsKit.Components.Contents
@model Volo.CmsKit.Public.Web.Pages.Public.CmsKit.Pages.IndexModel
-@inject IMarkdownToHtmlRenderer MarkdownRenderer
-
@section styles{
@@ -27,17 +21,10 @@
- @foreach (ContentFragment contentFragment in Model.ViewModel.ContentFragments)
+ @(await Component.InvokeAsync(typeof(ContentFragmentViewComponent), new DefaultContentDto
{
- if (contentFragment.Type == ContentConsts.Markdown)
- {
- @Html.Raw(await MarkdownRenderer.RenderAsync(contentFragment.GetProperty("Content"), allowHtmlTags: true, preventXSS: true))
- }
- else if (contentFragment.Type == ContentConsts.Widget)
- {
- @await Component.InvokeAsync(contentFragment.GetProperty("Type"), contentFragment.ExtraProperties.ConvertToDynamicObject())
- }
- }
+ ContentFragments = Model.ViewModel.ContentFragments
+ }))