From 0e85c5849ae2b6e1ee69f428dd214d7835052de5 Mon Sep 17 00:00:00 2001 From: malik masis Date: Tue, 19 Jul 2022 23:40:04 +0300 Subject: [PATCH 01/22] catched preview event --- .../Pages/CmsKit/Pages/create.js | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/create.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/create.js index 49a482bf33..46c5fa9e77 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/create.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/create.js @@ -90,7 +90,7 @@ $(function () { var fileUriPrefix = "/api/cms-kit/media/"; initEditor(); - + var editor; function initEditor() { var $editorContainer = $("#ContentEditor"); @@ -133,7 +133,7 @@ $(function () { } }); } - + function uploadFile(blob, callback, source) { var UPPY_OPTIONS = { endpoint: fileUploadUri, @@ -166,11 +166,17 @@ $(function () { }); } - $('#GeneratedWidgetText').on('change',function () { + $('#GeneratedWidgetText').on('change', function () { var txt = $('#GeneratedWidgetText').val(); editor.insertText(txt); }); - + + $('.tab-item').on('click', function () { + if ($(this).attr("aria-label") == 'Preview' && editor.isMarkdownMode()) { + editor.setMarkdown(editor.getMarkdown(), true); + } + }); + function createAddWidgetButton() { const button = document.createElement('button'); From c14bbe3200bde383af337821df8e2f99be2043b0 Mon Sep 17 00:00:00 2001 From: malik masis Date: Thu, 21 Jul 2022 17:53:08 +0300 Subject: [PATCH 02/22] Added Content AppService and Controller --- .../CmsKit/Contents/IContentAppService.cs | 10 +++++++ .../Volo/CmsKit/Contents/ContentAppService.cs | 22 ++++++++++++++ .../Volo/CmsKit/Contents/ContentController.cs | 29 +++++++++++++++++++ .../client-proxies/cms-kit-common-proxy.js | 15 ++++++++++ 4 files changed, 76 insertions(+) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContentAppService.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentAppService.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Contents/ContentController.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContentAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContentAppService.cs new file mode 100644 index 0000000000..ec2b9bcf42 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContentAppService.cs @@ -0,0 +1,10 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp.Application.Services; + +namespace Volo.CmsKit.Contents; + +public interface IContentAppService : IApplicationService +{ + Task> ParseAsync(string content); +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentAppService.cs new file mode 100644 index 0000000000..a227f31e18 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentAppService.cs @@ -0,0 +1,22 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.GlobalFeatures; + +namespace Volo.CmsKit.Contents; + +[RequiresGlobalFeature(typeof(PagesFeature))] +public class ContentAppService : CmsKitAppServiceBase, IContentAppService +{ + protected ContentParser ContentParser { get; } + + public ContentAppService(ContentParser contentParser) + { + ContentParser = contentParser; + } + + public async Task> ParseAsync(string content) + { + return await ContentParser.ParseAsync(content); + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Contents/ContentController.cs b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Contents/ContentController.cs new file mode 100644 index 0000000000..fd7ba47a44 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Contents/ContentController.cs @@ -0,0 +1,29 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Volo.Abp; +using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.GlobalFeatures; + +namespace Volo.CmsKit.Contents; + +[RequiresGlobalFeature(typeof(PagesFeature))] +[RemoteService(Name = CmsKitCommonRemoteServiceConsts.RemoteServiceName)] +[Area(CmsKitCommonRemoteServiceConsts.ModuleName)] +[Route("api/cms-kit/contents")] +public class ContentController : CmsKitControllerBase, IContentAppService +{ + protected IContentAppService ContentAppService { get; } + + public ContentController(IContentAppService contentAppService) + { + ContentAppService = contentAppService; + } + + [HttpGet] + [Route("{parse}")] + public async Task> ParseAsync(string content) + { + return await ContentAppService.ParseAsync(content); + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/wwwroot/client-proxies/cms-kit-common-proxy.js b/modules/cms-kit/src/Volo.CmsKit.Common.Web/wwwroot/client-proxies/cms-kit-common-proxy.js index 27aa1d819e..e7a38d5af4 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/wwwroot/client-proxies/cms-kit-common-proxy.js +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/wwwroot/client-proxies/cms-kit-common-proxy.js @@ -20,6 +20,21 @@ })(); + // controller volo.cmsKit.contents.content + + (function(){ + + abp.utils.createNamespace(window, 'volo.cmsKit.contents.content'); + + volo.cmsKit.contents.content.parse = function(content, parse, ajaxParams) { + return abp.ajax($.extend(true, { + url: abp.appPath + 'api/cms-kit/contents/' + parse + '' + abp.utils.buildQueryString([{ name: 'content', value: content }]) + '', + type: 'GET' + }, ajaxParams)); + }; + + })(); + // controller volo.cmsKit.blogs.blogFeature (function(){ From 08ca8f3d65da8822d50a25cad5d419bf7d0e7377 Mon Sep 17 00:00:00 2001 From: malik masis Date: Thu, 21 Jul 2022 17:53:32 +0300 Subject: [PATCH 03/22] Update ContentParser.cs --- .../Volo/CmsKit/Contents/ContentParser.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentParser.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentParser.cs index 7fe9fe5b60..9c6aafc0d0 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentParser.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentParser.cs @@ -28,10 +28,10 @@ public class ContentParser : ITransientDependency }); } - var parsedList = new List(); + List parsedList = new(); ParseContent(content, parsedList); - var contentFragments = new List(); + List contentFragments = new(); FillContentFragment(content, parsedList, contentFragments); return Task.FromResult(contentFragments); From 1c6bad977fae2a5d1adf6525343301d2f42ea5c5 Mon Sep 17 00:00:00 2001 From: malik masis Date: Thu, 21 Jul 2022 17:53:52 +0300 Subject: [PATCH 04/22] Update Index.cshtml.cs --- .../Pages/Public/CmsKit/Pages/Index.cshtml.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Pages/Index.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Pages/Index.cshtml.cs index 1434eccb4b..2ade3faee1 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Pages/Index.cshtml.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Pages/Index.cshtml.cs @@ -12,9 +12,9 @@ public class IndexModel : CommonPageModel protected IPagePublicAppService PagePublicAppService { get; } - public PageDto PageDto{ get; private set; } + public PageDto PageDto { get; private set; } -public IndexModel(IPagePublicAppService pagePublicAppService) + public IndexModel(IPagePublicAppService pagePublicAppService) { PagePublicAppService = pagePublicAppService; } From fb26e5222e28981cc31b2d664041c9e80ac7080c Mon Sep 17 00:00:00 2001 From: malik masis Date: Thu, 21 Jul 2022 17:54:04 +0300 Subject: [PATCH 05/22] Create ContentsFeature.cs --- .../CmsKit/GlobalFeatures/ContentsFeature.cs | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/ContentsFeature.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/ContentsFeature.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/ContentsFeature.cs new file mode 100644 index 0000000000..ac752a68c4 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/ContentsFeature.cs @@ -0,0 +1,28 @@ +using JetBrains.Annotations; +using Volo.Abp.GlobalFeatures; + +namespace Volo.CmsKit.GlobalFeatures; + +[GlobalFeatureName(Name)] +public class ContentsFeature : GlobalFeature +{ + public const string Name = "CmsKit.Contents"; + + internal ContentsFeature( + [NotNull] GlobalCmsKitFeatures cmsKit + ) : base(cmsKit) + { + + } + + public override void Enable() + { + var userFeature = FeatureManager.Modules.CmsKit().User; + if (!userFeature.IsEnabled) + { + userFeature.Enable(); + } + + base.Enable(); + } +} From ecd140a35f583e42f703568542beed1c88c95c98 Mon Sep 17 00:00:00 2001 From: malik masis Date: Fri, 22 Jul 2022 15:32:23 +0300 Subject: [PATCH 06/22] Moved PageDto from public to common --- .../Volo/CmsKit/Contents}/PageDto.cs | 11 +++++------ .../Volo/CmsKit/Public/Pages/IPagePublicAppService.cs | 1 + .../Public/PublicApplicationAutoMapperProfile.cs | 2 +- .../Volo/CmsKit/Public/Pages/PagesPublicController.cs | 1 + .../Pages/Public/CmsKit/Pages/Index.cshtml.cs | 1 + 5 files changed, 9 insertions(+), 7 deletions(-) rename modules/cms-kit/src/{Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Pages => Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents}/PageDto.cs (74%) diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Pages/PageDto.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/PageDto.cs similarity index 74% rename from modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Pages/PageDto.cs rename to modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/PageDto.cs index a336844289..996a867fcf 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Pages/PageDto.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/PageDto.cs @@ -1,9 +1,8 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; +using System; using Volo.Abp.Application.Dtos; -using Volo.CmsKit.Contents; -namespace Volo.CmsKit.Public.Pages; +namespace Volo.CmsKit.Contents; [Serializable] public class PageDto : EntityDto @@ -13,10 +12,10 @@ public class PageDto : EntityDto public string Slug { get; set; } public string Content { get; set; } - + public List ContentFragments { get; set; } public string Script { get; set; } public string Style { get; set; } -} +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Pages/IPagePublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Pages/IPagePublicAppService.cs index 0b33a91236..230b8ded97 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Pages/IPagePublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Pages/IPagePublicAppService.cs @@ -1,6 +1,7 @@ using JetBrains.Annotations; using System.Threading.Tasks; using Volo.Abp.Application.Services; +using Volo.CmsKit.Contents; namespace Volo.CmsKit.Public.Pages; diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs index 704a03778c..fbd33195f6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs @@ -2,13 +2,13 @@ using Volo.Abp.AutoMapper; using Volo.CmsKit.Blogs; using Volo.CmsKit.Comments; +using Volo.CmsKit.Contents; using Volo.CmsKit.GlobalResources; using Volo.CmsKit.Menus; using Volo.CmsKit.Pages; using Volo.CmsKit.Public.Blogs; using Volo.CmsKit.Public.Comments; using Volo.CmsKit.Public.GlobalResources; -using Volo.CmsKit.Public.Pages; using Volo.CmsKit.Public.Ratings; using Volo.CmsKit.Ratings; using Volo.CmsKit.Users; diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Pages/PagesPublicController.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Pages/PagesPublicController.cs index 763fe7522d..cd65f84c26 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Pages/PagesPublicController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Pages/PagesPublicController.cs @@ -2,6 +2,7 @@ using Microsoft.AspNetCore.Mvc; using Volo.Abp; using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.Contents; using Volo.CmsKit.GlobalFeatures; namespace Volo.CmsKit.Public.Pages; diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Pages/Index.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Pages/Index.cshtml.cs index 2ade3faee1..7ae92d7016 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Pages/Index.cshtml.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Pages/Index.cshtml.cs @@ -1,5 +1,6 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; +using Volo.CmsKit.Contents; using Volo.CmsKit.Public.Pages; using Volo.CmsKit.Web.Pages; From e1b5409bbf4ff1249039fd2db3267bd2291e7e74 Mon Sep 17 00:00:00 2001 From: malik masis Date: Fri, 22 Jul 2022 15:33:31 +0300 Subject: [PATCH 07/22] Copied render from public to common --- .../Renderers/IMarkdownToHtmlRenderer.cs | 8 ++ .../Renderers/MarkdownToHtmlRenderer.cs | 129 ++++++++++++++++++ .../Volo.CmsKit.Common.Web.csproj | 62 +++++---- 3 files changed, 169 insertions(+), 30 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Web/Renderers/IMarkdownToHtmlRenderer.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Web/Renderers/MarkdownToHtmlRenderer.cs 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 new file mode 100644 index 0000000000..98fcda1fac --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Renderers/IMarkdownToHtmlRenderer.cs @@ -0,0 +1,8 @@ +using System.Threading.Tasks; + +namespace Volo.CmsKit.Web.Renderers; + +public interface IMarkdownToHtmlRenderer +{ + Task RenderAsync(string rawMarkdown, bool preventXSS = true); +} 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 new file mode 100644 index 0000000000..639948e801 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Renderers/MarkdownToHtmlRenderer.cs @@ -0,0 +1,129 @@ +using System.Collections.Generic; +using System.Linq; +using System.Text.RegularExpressions; +using Markdig; +using System.Threading.Tasks; +using System.Web; +using Volo.Abp.DependencyInjection; +using Ganss.XSS; + +namespace Volo.CmsKit.Web.Renderers; + +public class MarkdownToHtmlRenderer : IMarkdownToHtmlRenderer, ITransientDependency +{ + private readonly HtmlSanitizer _htmlSanitizer; + protected MarkdownPipeline MarkdownPipeline { get; } + + public MarkdownToHtmlRenderer(MarkdownPipeline markdownPipeline) + { + MarkdownPipeline = markdownPipeline; + _htmlSanitizer = new HtmlSanitizer(); + } + + public async Task RenderAsync(string rawMarkdown, bool preventXSS = false) + { + if (preventXSS) + { + rawMarkdown = EncodeHtmlTags(rawMarkdown, true); + } + + var html = Markdown.ToHtml(rawMarkdown, MarkdownPipeline); + + if (preventXSS) + { + html = _htmlSanitizer.Sanitize(html); + } + + return html; + } + + + private static List GetCodeBlockIndices(string markdownText) + { + var regexObj = new Regex(@"```(\w)*|`(\w)*", RegexOptions.IgnoreCase | + RegexOptions.IgnorePatternWhitespace | + RegexOptions.Singleline | + RegexOptions.Multiline | + RegexOptions.ExplicitCapture); + + var matches = regexObj.Matches(markdownText); + var indices = new List(); + + for (var i = 0; i < matches.Count; i++) + { + if (!indices.Any() || indices.Last().EndIndex.HasValue) + { + indices.Add(new CodeBlockIndexPair(matches[i].Index)); + } + else + { + indices.Last().EndIndex = matches[i].Index; + } + } + + return indices; + } + + /// + /// Encodes html tags. + /// + private static string EncodeHtmlTags(string text, bool dontEncodeCodeBlocks = true) + { + List codeBlockIndices = null; + if (dontEncodeCodeBlocks) + { + codeBlockIndices = GetCodeBlockIndices(text); + } + + return Regex.Replace(text, @"<[^>]*>", match => + { + if (dontEncodeCodeBlocks && codeBlockIndices != null) + { + var isInCodeBlock = false; + foreach (var codeBlock in codeBlockIndices) + { + if (IsInCodeBlock(match.Index, codeBlock.StartIndex, codeBlock.EndIndex)) + { + isInCodeBlock = true; + break; + } + } + + if (isInCodeBlock) + { + return match.ToString(); + } + else + { + return HttpUtility.HtmlEncode(match.ToString()); + } + } + else + { + return HttpUtility.HtmlEncode(match.ToString()); + } + }); + } + + private static bool IsInCodeBlock(int currentIndex, int codeBlockStartIndex, int? codeBlockEndIndex) + { + if (codeBlockEndIndex.HasValue) + { + return (currentIndex >= codeBlockStartIndex && currentIndex <= codeBlockEndIndex); + } + + return currentIndex >= codeBlockStartIndex; + } + + private class CodeBlockIndexPair + { + public int StartIndex { get; private set; } + public int? EndIndex { get; set; } + + public CodeBlockIndexPair(int startIndex, int? endIndex = null) + { + StartIndex = startIndex; + EndIndex = endIndex; + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Volo.CmsKit.Common.Web.csproj b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Volo.CmsKit.Common.Web.csproj index 1ca9a78b27..e717f49be5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Volo.CmsKit.Common.Web.csproj +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Volo.CmsKit.Common.Web.csproj @@ -1,38 +1,40 @@ - - + + - - net6.0 - $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; - true - Library - Volo.CmsKit.Web - true - + + net6.0 + $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; + true + Library + Volo.CmsKit.Web + true + - - - - - + + + + + - - - + + + + + - - - - - - - - - - - - + + + + + + + + + + + + From e470faa88f1ca3a12a661be10032ee338277f073 Mon Sep 17 00:00:00 2001 From: malik masis Date: Fri, 22 Jul 2022 15:40:43 +0300 Subject: [PATCH 08/22] Updated common proxy --- .../Volo/CmsKit/Contents/ContentController.cs | 62 +++++++++++++++++-- .../client-proxies/cms-kit-common-proxy.js | 11 +++- 2 files changed, 67 insertions(+), 6 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Contents/ContentController.cs b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Contents/ContentController.cs index fd7ba47a44..5b535b29f9 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Contents/ContentController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Contents/ContentController.cs @@ -1,6 +1,16 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; +using System.IO; +using System.Text.Encodings.Web; using System.Threading.Tasks; +using Microsoft.AspNetCore.Html; using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Rendering; +using Microsoft.AspNetCore.Mvc.ViewComponents; +using Microsoft.AspNetCore.Mvc.ViewEngines; +using Microsoft.AspNetCore.Mvc.ViewFeatures; +using Microsoft.AspNetCore.Mvc.ViewFeatures.Buffers; +using Microsoft.Extensions.DependencyInjection; using Volo.Abp; using Volo.Abp.GlobalFeatures; using Volo.CmsKit.GlobalFeatures; @@ -11,7 +21,7 @@ namespace Volo.CmsKit.Contents; [RemoteService(Name = CmsKitCommonRemoteServiceConsts.RemoteServiceName)] [Area(CmsKitCommonRemoteServiceConsts.ModuleName)] [Route("api/cms-kit/contents")] -public class ContentController : CmsKitControllerBase, IContentAppService +public class ContentController : Controller, IContentAppService { protected IContentAppService ContentAppService { get; } @@ -21,9 +31,53 @@ public class ContentController : CmsKitControllerBase, IContentAppService } [HttpGet] - [Route("{parse}")] - public async Task> ParseAsync(string content) + [Route("{parseashtml}")] + public async Task ParseAsHtmlAsync(string content) + { + var fragments = await ParseAsync(content); + return await RenderViewComponent("ContentFragment", new PageDto() { ContentFragments = fragments }); + } + public virtual async Task> ParseAsync(string content) { return await ContentAppService.ParseAsync(content); } + + private async Task RenderViewComponent(string viewComponent, object args) + { + var sp = HttpContext.RequestServices; + + var helper = new DefaultViewComponentHelper( + sp.GetRequiredService(), + HtmlEncoder.Default, + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService()); + + using (var writer = new StringWriter()) + { + var context = new ViewContext(ControllerContext, NullView.Instance, ViewData, TempData, writer, new HtmlHelperOptions()); + helper.Contextualize(context); + var result = await helper.InvokeAsync(viewComponent, args); + result.WriteTo(writer, HtmlEncoder.Default); + await writer.FlushAsync(); + return writer.ToString(); + } + } + + internal class NullView : IView + { + public static readonly NullView Instance = new(); + + public string Path => string.Empty; + + public Task RenderAsync(ViewContext context) + { + if (context == null) + { + throw new ArgumentNullException(nameof(context)); + } + + return Task.CompletedTask; + } + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/wwwroot/client-proxies/cms-kit-common-proxy.js b/modules/cms-kit/src/Volo.CmsKit.Common.Web/wwwroot/client-proxies/cms-kit-common-proxy.js index e7a38d5af4..f255ec9d4c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/wwwroot/client-proxies/cms-kit-common-proxy.js +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/wwwroot/client-proxies/cms-kit-common-proxy.js @@ -26,10 +26,17 @@ abp.utils.createNamespace(window, 'volo.cmsKit.contents.content'); - volo.cmsKit.contents.content.parse = function(content, parse, ajaxParams) { + volo.cmsKit.contents.content.parseAsHtml = function(content, parseashtml, ajaxParams) { return abp.ajax($.extend(true, { - url: abp.appPath + 'api/cms-kit/contents/' + parse + '' + abp.utils.buildQueryString([{ name: 'content', value: content }]) + '', + url: abp.appPath + 'api/cms-kit/contents/' + parseashtml + '' + abp.utils.buildQueryString([{ name: 'content', value: content }]) + '', type: 'GET' + }, { dataType: 'text' }, ajaxParams)); + }; + + volo.cmsKit.contents.content.parse = function(content, ajaxParams) { + return abp.ajax($.extend(true, { + url: abp.appPath + 'api/cms-kit/contents' + abp.utils.buildQueryString([{ name: 'content', value: content }]) + '', + type: 'POST' }, ajaxParams)); }; From e79f9402d571e5c8ea40403795cf3785b3acae4f Mon Sep 17 00:00:00 2001 From: malik masis Date: Fri, 22 Jul 2022 15:41:37 +0300 Subject: [PATCH 09/22] Added content fragment vc --- .../Contents/ContentFragment.cshtml | 20 ++++++++++++++ .../Contents/ContentFragmentViewComponent.cs | 26 +++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/ContentFragment.cshtml create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/ContentFragmentViewComponent.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/ContentFragment.cshtml b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/ContentFragment.cshtml new file mode 100644 index 0000000000..994660600a --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/ContentFragment.cshtml @@ -0,0 +1,20 @@ +@using Volo.CmsKit.Web.Contents; +@using System.Dynamic +@using Volo.Abp.Data +@using Volo.CmsKit.Web.Renderers; + +@model ContentFragmentViewComponent + +@inject IMarkdownToHtmlRenderer MarkdownRenderer + +@foreach (var contentFragment in Model.PageDto.ContentFragments) +{ + if (contentFragment.Type == "Markdown") + { + @Html.Raw(await MarkdownRenderer.RenderAsync(contentFragment.GetProperty("Content"))) + } + else if (contentFragment.Type == "Widget") + { + @await Component.InvokeAsync(contentFragment.GetProperty("Type"), contentFragment.ExtraProperties.ConvertToDynamicObject()) + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/ContentFragmentViewComponent.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/ContentFragmentViewComponent.cs new file mode 100644 index 0000000000..e6b7004940 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/ContentFragmentViewComponent.cs @@ -0,0 +1,26 @@ +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Mvc.UI.Widgets; +using Volo.CmsKit.Contents; + +namespace Volo.CmsKit.Web.Contents; + +[Widget( + AutoInitialize = true +)] +[ViewComponent(Name = "ContentFragment")] +public class ContentFragmentViewComponent : ViewComponent +{ + public PageDto PageDto { get; set; } + + public ContentFragmentViewComponent() + { + PageDto = new(); + } + + public virtual async Task InvokeAsync(PageDto pageDto) + { + return View("~/Contents/ContentFragment.cshtml", new ContentFragmentViewComponent() { PageDto = pageDto }); + } +} + From 1ffed21c8001812ec6103b2285c583ddbef31bc6 Mon Sep 17 00:00:00 2001 From: malik masis Date: Fri, 22 Jul 2022 15:42:30 +0300 Subject: [PATCH 10/22] Implemented content fragment vc for Page/Create --- .../Pages/CmsKit/Pages/create.js | 14 ++++++++++++-- .../Pages/Public/CmsKit/Pages/Index.cshtml | 18 +----------------- 2 files changed, 13 insertions(+), 19 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/create.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/create.js index 46c5fa9e77..62d05abd4d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/create.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/create.js @@ -1,6 +1,6 @@ $(function () { var l = abp.localization.getResource("CmsKit"); - + var $createForm = $('#form-page-create'); var $title = $('#ViewModel_Title'); var $slug = $('#ViewModel_Slug'); @@ -173,7 +173,17 @@ $(function () { $('.tab-item').on('click', function () { if ($(this).attr("aria-label") == 'Preview' && editor.isMarkdownMode()) { - editor.setMarkdown(editor.getMarkdown(), true); + + let content = editor.getMarkdown(); + localStorage.setItem('content', content); + + volo.cmsKit.contents.content.parseAsHtml(content).then(function (data) { + editor.setHTML(data); + }); + } + else if ($(this).attr("aria-label") == 'Write'){ + var retrievedObject = localStorage.getItem('content'); + editor.setMarkdown(retrievedObject); } }); 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 2aa3c0ce8b..cc72b8b0c8 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 @@ -2,17 +2,12 @@ @addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI.Bootstrap @using Volo.CmsKit.Contents @using System.Dynamic -@using Volo.CmsKit.Public.Web.Renderers @using Volo.Abp.Data @using Volo.Abp.AspNetCore.Mvc.UI.Packages.HighlightJs; @using Volo.Abp.AspNetCore.Mvc.UI.Widgets; -@inject IMarkdownToHtmlRenderer MarkdownRenderer - - @model Volo.CmsKit.Public.Web.Pages.Public.CmsKit.Pages.IndexModel - @section styles{ @@ -30,18 +25,7 @@ - @foreach (ContentFragment contentFragment in Model.PageDto.ContentFragments) - { - if (contentFragment.Type == ContentConsts.Markdown) - { - @Html.Raw(await MarkdownRenderer.RenderAsync(contentFragment.GetProperty("Content"))) - } - else if (contentFragment.Type == ContentConsts.Widget) - { - @await Component.InvokeAsync(contentFragment.GetProperty("Type"), contentFragment.ExtraProperties.ConvertToDynamicObject()) - } - - } + @await Component.InvokeAsync("ContentFragment", new { pageDto = Model.PageDto }) From c1ab01258388a317992779eef087f2535442d15b Mon Sep 17 00:00:00 2001 From: malik masis Date: Tue, 26 Jul 2022 14:30:36 +0300 Subject: [PATCH 11/22] Added virtual keyword --- .../Volo/CmsKit/Contents/ContentController.cs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Contents/ContentController.cs b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Contents/ContentController.cs index 5b535b29f9..e0bcf5586a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Contents/ContentController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Contents/ContentController.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.IO; using System.Text.Encodings.Web; using System.Threading.Tasks; -using Microsoft.AspNetCore.Html; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Mvc.ViewComponents; @@ -32,14 +31,14 @@ public class ContentController : Controller, IContentAppService [HttpGet] [Route("{parseashtml}")] - public async Task ParseAsHtmlAsync(string content) + public virtual async Task ParseAsHtmlAsync(string content) { var fragments = await ParseAsync(content); return await RenderViewComponent("ContentFragment", new PageDto() { ContentFragments = fragments }); } - public virtual async Task> ParseAsync(string content) + public virtual Task> ParseAsync(string content) { - return await ContentAppService.ParseAsync(content); + return ContentAppService.ParseAsync(content); } private async Task RenderViewComponent(string viewComponent, object args) From ecdf48a98c5217ce656338cc0791515a6e063b8b Mon Sep 17 00:00:00 2001 From: malik masis Date: Tue, 26 Jul 2022 14:30:49 +0300 Subject: [PATCH 12/22] Update CmsKitWebUnifiedModule.cs --- .../CmsKitWebUnifiedModule.cs | 27 +++++++++---------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/CmsKitWebUnifiedModule.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/CmsKitWebUnifiedModule.cs index 4a07c92ca8..e3094a7da8 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/CmsKitWebUnifiedModule.cs +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/CmsKitWebUnifiedModule.cs @@ -1,11 +1,7 @@ using System.IO; -using System.Linq; using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; -using Volo.CmsKit.EntityFrameworkCore; -using Volo.CmsKit.MultiTenancy; -using Volo.CmsKit.Web; using Microsoft.OpenApi.Models; using Volo.Abp; using Volo.Abp.Account; @@ -19,8 +15,8 @@ using Volo.Abp.BlobStoring.Database.EntityFrameworkCore; using Volo.Abp.Data; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore.SqlServer; -using Volo.Abp.FeatureManagement.EntityFrameworkCore; using Volo.Abp.FeatureManagement; +using Volo.Abp.FeatureManagement.EntityFrameworkCore; using Volo.Abp.Identity; using Volo.Abp.Identity.EntityFrameworkCore; using Volo.Abp.Identity.Web; @@ -29,6 +25,7 @@ using Volo.Abp.Modularity; using Volo.Abp.MultiTenancy; using Volo.Abp.PermissionManagement; using Volo.Abp.PermissionManagement.EntityFrameworkCore; +using Volo.Abp.PermissionManagement.HttpApi; using Volo.Abp.PermissionManagement.Identity; using Volo.Abp.SettingManagement.EntityFrameworkCore; using Volo.Abp.Swashbuckle; @@ -38,15 +35,16 @@ using Volo.Abp.TenantManagement.Web; using Volo.Abp.Threading; using Volo.Abp.VirtualFileSystem; using Volo.CmsKit.Admin.Web; -using Volo.CmsKit.Public.Web; -using System; -using Volo.Abp.PermissionManagement.HttpApi; -using Volo.CmsKit.Tags; using Volo.CmsKit.Comments; +using Volo.CmsKit.Contents; +using Volo.CmsKit.EntityFrameworkCore; using Volo.CmsKit.MediaDescriptors; -using Volo.CmsKit.Reactions; +using Volo.CmsKit.MultiTenancy; +using Volo.CmsKit.Public.Web; using Volo.CmsKit.Ratings; -using Volo.CmsKit.Contents; +using Volo.CmsKit.Reactions; +using Volo.CmsKit.Tags; +using Volo.CmsKit.Web; namespace Volo.CmsKit; @@ -93,9 +91,8 @@ public class CmsKitWebUnifiedModule : AbpModule public override void ConfigureServices(ServiceConfigurationContext context) { var hostingEnvironment = context.Services.GetHostingEnvironment(); - var configuration = context.Services.GetConfiguration(); - ConfigureCmsKit(context); + ConfigureCmsKit(); Configure(options => { @@ -156,11 +153,11 @@ public class CmsKitWebUnifiedModule : AbpModule Configure(options => { - options.AddWidget("ExComment", "CommentDate"); + options.AddWidget("ExComment", "CommentDate", "DecisionCommentDate"); }); } - private void ConfigureCmsKit(ServiceConfigurationContext context) + private void ConfigureCmsKit() { Configure(options => { From e0e576a4ba67ff9279b4cd30e9ead572245da580 Mon Sep 17 00:00:00 2001 From: malik masis Date: Tue, 26 Jul 2022 18:29:47 +0300 Subject: [PATCH 13/22] Removed render folder from public --- .../Renderers/IMarkdownToHtmlRenderer.cs | 8 -- .../Renderers/MarkdownToHtmlRenderer.cs | 129 ------------------ 2 files changed, 137 deletions(-) delete mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Web/Renderers/IMarkdownToHtmlRenderer.cs delete mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Web/Renderers/MarkdownToHtmlRenderer.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Renderers/IMarkdownToHtmlRenderer.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Renderers/IMarkdownToHtmlRenderer.cs deleted file mode 100644 index d11e76f6dd..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Renderers/IMarkdownToHtmlRenderer.cs +++ /dev/null @@ -1,8 +0,0 @@ -using System.Threading.Tasks; - -namespace Volo.CmsKit.Public.Web.Renderers; - -public interface IMarkdownToHtmlRenderer -{ - Task RenderAsync(string rawMarkdown, bool preventXSS = true); -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Renderers/MarkdownToHtmlRenderer.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Renderers/MarkdownToHtmlRenderer.cs deleted file mode 100644 index b6fab3c008..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Renderers/MarkdownToHtmlRenderer.cs +++ /dev/null @@ -1,129 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using System.Text.RegularExpressions; -using Markdig; -using System.Threading.Tasks; -using System.Web; -using Volo.Abp.DependencyInjection; -using Ganss.XSS; - -namespace Volo.CmsKit.Public.Web.Renderers; - -public class MarkdownToHtmlRenderer : IMarkdownToHtmlRenderer, ITransientDependency -{ - private readonly HtmlSanitizer _htmlSanitizer; - protected MarkdownPipeline MarkdownPipeline { get; } - - public MarkdownToHtmlRenderer(MarkdownPipeline markdownPipeline) - { - MarkdownPipeline = markdownPipeline; - _htmlSanitizer = new HtmlSanitizer(); - } - - public async Task RenderAsync(string rawMarkdown, bool preventXSS = false) - { - if (preventXSS) - { - rawMarkdown = EncodeHtmlTags(rawMarkdown, true); - } - - var html = Markdown.ToHtml(rawMarkdown, MarkdownPipeline); - - if (preventXSS) - { - html = _htmlSanitizer.Sanitize(html); - } - - return html; - } - - - private static List GetCodeBlockIndices(string markdownText) - { - var regexObj = new Regex(@"```(\w)*|`(\w)*", RegexOptions.IgnoreCase | - RegexOptions.IgnorePatternWhitespace | - RegexOptions.Singleline | - RegexOptions.Multiline | - RegexOptions.ExplicitCapture); - - var matches = regexObj.Matches(markdownText); - var indices = new List(); - - for (var i = 0; i < matches.Count; i++) - { - if (!indices.Any() || indices.Last().EndIndex.HasValue) - { - indices.Add(new CodeBlockIndexPair(matches[i].Index)); - } - else - { - indices.Last().EndIndex = matches[i].Index; - } - } - - return indices; - } - - /// - /// Encodes html tags. - /// - private static string EncodeHtmlTags(string text, bool dontEncodeCodeBlocks = true) - { - List codeBlockIndices = null; - if (dontEncodeCodeBlocks) - { - codeBlockIndices = GetCodeBlockIndices(text); - } - - return Regex.Replace(text, @"<[^>]*>", match => - { - if (dontEncodeCodeBlocks && codeBlockIndices != null) - { - var isInCodeBlock = false; - foreach (var codeBlock in codeBlockIndices) - { - if (IsInCodeBlock(match.Index, codeBlock.StartIndex, codeBlock.EndIndex)) - { - isInCodeBlock = true; - break; - } - } - - if (isInCodeBlock) - { - return match.ToString(); - } - else - { - return HttpUtility.HtmlEncode(match.ToString()); - } - } - else - { - return HttpUtility.HtmlEncode(match.ToString()); - } - }); - } - - private static bool IsInCodeBlock(int currentIndex, int codeBlockStartIndex, int? codeBlockEndIndex) - { - if (codeBlockEndIndex.HasValue) - { - return (currentIndex >= codeBlockStartIndex && currentIndex <= codeBlockEndIndex); - } - - return currentIndex >= codeBlockStartIndex; - } - - private class CodeBlockIndexPair - { - public int StartIndex { get; private set; } - public int? EndIndex { get; set; } - - public CodeBlockIndexPair(int startIndex, int? endIndex = null) - { - StartIndex = startIndex; - EndIndex = endIndex; - } - } -} From d7714c90d7c39a15bf122aa8e896b7d981e9efb5 Mon Sep 17 00:00:00 2001 From: malik masis Date: Tue, 26 Jul 2022 18:31:21 +0300 Subject: [PATCH 14/22] Moved BlogPostPublicDto --- .../CmsKit/Contents}/BlogPostPublicDto.cs | 7 +- .../Public/Blogs/IBlogPostPublicAppService.cs | 6 +- .../BlogPostPublicClientProxy.Generated.cs | 4 +- .../PagesPublicClientProxy.Generated.cs | 6 +- .../Public/Blogs/BlogPostPublicController.cs | 7 +- .../Commenting/CommentingViewComponent.cs | 2 +- .../Pages/Public/CmsKit/Blogs/BlogPost.cshtml | 90 +++++++++---------- .../Public/CmsKit/Blogs/BlogPost.cshtml.cs | 1 + .../Pages/Public/CmsKit/Blogs/Index.cshtml.cs | 8 +- .../Pages/Public/CmsKit/Pages/Index.cshtml | 2 +- 10 files changed, 58 insertions(+), 75 deletions(-) rename modules/cms-kit/src/{Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs => Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents}/BlogPostPublicDto.cs (80%) diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/BlogPostPublicDto.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/BlogPostPublicDto.cs similarity index 80% rename from modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/BlogPostPublicDto.cs rename to modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/BlogPostPublicDto.cs index 695f50836e..d00a6364f1 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/BlogPostPublicDto.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/BlogPostPublicDto.cs @@ -1,13 +1,12 @@ using System; using System.Collections.Generic; using Volo.Abp.Application.Dtos; -using Volo.CmsKit.Contents; using Volo.CmsKit.Users; -namespace Volo.CmsKit.Public.Blogs; +namespace Volo.CmsKit.Contents; [Serializable] -public class BlogPostPublicDto : AuditedEntityDto +public class BlogPostPublicDto : AuditedEntityDto, IContent { public Guid BlogId { get; set; } @@ -24,4 +23,4 @@ public class BlogPostPublicDto : AuditedEntityDto public Guid? CoverImageMediaId { get; set; } public CmsUserDto Author { get; set; } -} +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs index 42161f884c..b60b500cfe 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs @@ -1,10 +1,10 @@ -using System.Collections.Generic; -using JetBrains.Annotations; +using System; using System.Threading.Tasks; +using JetBrains.Annotations; using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Services; +using Volo.CmsKit.Contents; using Volo.CmsKit.Users; -using System; namespace Volo.CmsKit.Public.Blogs; diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/BlogPostPublicClientProxy.Generated.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/BlogPostPublicClientProxy.Generated.cs index b1bbf6be07..8d66adc208 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/BlogPostPublicClientProxy.Generated.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/BlogPostPublicClientProxy.Generated.cs @@ -2,11 +2,9 @@ using System; using System.Threading.Tasks; using Volo.Abp.Application.Dtos; -using Volo.Abp.Http.Client; -using Volo.Abp.Http.Modeling; using Volo.Abp.DependencyInjection; using Volo.Abp.Http.Client.ClientProxying; -using Volo.CmsKit.Public.Blogs; +using Volo.CmsKit.Contents; using Volo.CmsKit.Users; // ReSharper disable once CheckNamespace diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/PagesPublicClientProxy.Generated.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/PagesPublicClientProxy.Generated.cs index 9ecf6cb387..f992bb3dbf 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/PagesPublicClientProxy.Generated.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/PagesPublicClientProxy.Generated.cs @@ -1,12 +1,8 @@ // This file is automatically generated by ABP framework to use MVC Controllers from CSharp -using System; using System.Threading.Tasks; -using Volo.Abp.Application.Dtos; -using Volo.Abp.Http.Client; -using Volo.Abp.Http.Modeling; using Volo.Abp.DependencyInjection; using Volo.Abp.Http.Client.ClientProxying; -using Volo.CmsKit.Public.Pages; +using Volo.CmsKit.Contents; // ReSharper disable once CheckNamespace namespace Volo.CmsKit.Public.Pages.ClientProxies; diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs index 9f43d65766..c068c4b5e6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs @@ -1,11 +1,10 @@ -using Microsoft.AspNetCore.Mvc; -using System; -using System.Collections.Generic; +using System; using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; using Volo.Abp; using Volo.Abp.Application.Dtos; -using Volo.Abp.Content; using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.Contents; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Users; 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 0a608740e9..03b040f2e9 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 @@ -8,7 +8,7 @@ using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc.UI; using Volo.Abp.AspNetCore.Mvc.UI.Widgets; using Volo.CmsKit.Public.Comments; -using Volo.CmsKit.Public.Web.Renderers; +using Volo.CmsKit.Web.Renderers; namespace Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Commenting; 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 2cff5c9072..fe9227f194 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 @@ -9,9 +9,9 @@ @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.Public.Web.Renderers @using Volo.Abp.AspNetCore.Mvc.UI.Packages.HighlightJs @using Volo.CmsKit.Contents +@using Volo.CmsKit.Web.Renderers @inherits CmsKitPublicPageBase @@ -32,13 +32,14 @@ } + } - @section scripts{ +@section scripts{ @if (isScrollIndexEnabled) { @@ -54,49 +55,39 @@ } -
-
- - - - -
-

@Model.BlogPost.Title

-

- - @@@Model.BlogPost.Author?.UserName - - @Model.BlogPost.CreationTime -

- @foreach (var contentFragment in Model.BlogPost.ContentFragments) +
+
+ + + + +
+

@Model.BlogPost.Title

+

+ + @@@Model.BlogPost.Author?.UserName + + @Model.BlogPost.CreationTime +

+ @await Component.InvokeAsync("ContentFragment", new { contentDto = Model.BlogPost }) +

+ @if (Model.BlogPost.LastModificationTime != null) { - if (contentFragment.Type == ContentConsts.Markdown) - { - @Html.Raw(await MarkdownRenderer.RenderAsync(contentFragment.GetProperty("Content"))) - } - else if (contentFragment.Type == ContentConsts.Widget) - { - @await Component.InvokeAsync(contentFragment.GetProperty("Type"), contentFragment.ExtraProperties.ConvertToDynamicObject()) - } + @L["LastModification"].Value : @Model.BlogPost.LastModificationTime } -

- @if (Model.BlogPost.LastModificationTime != null) - { - @L["LastModification"].Value : @Model.BlogPost.LastModificationTime - } -

-
+

+
- @if (GlobalFeatureManager.Instance.IsEnabled()) + @if (GlobalFeatureManager.Instance.IsEnabled()) + { + if (Model.TagsFeature?.IsEnabled == true) { - if (Model.TagsFeature?.IsEnabled == true) + @await Component.InvokeAsync(typeof(TagViewComponent), new { - @await Component.InvokeAsync(typeof(TagViewComponent), new - { - entityType = Volo.CmsKit.Blogs.BlogPostConsts.EntityType, - entityId = Model.BlogPost.Id.ToString(), - urlFormat = $"/blogs/{Model.BlogSlug}?tagId={{TagId}}" - }) + entityType = Volo.CmsKit.Blogs.BlogPostConsts.EntityType, + entityId = Model.BlogPost.Id.ToString(), + urlFormat = $"/blogs/{Model.BlogSlug}?tagId={{TagId}}" + }) } }
@@ -109,10 +100,10 @@ if (Model.ReactionsFeature?.IsEnabled == true) { @await Component.InvokeAsync(typeof(ReactionSelectionViewComponent), new - { - entityType = Volo.CmsKit.Blogs.BlogPostConsts.EntityType, - entityId = Model.BlogPost.Id.ToString() - }) + { + entityType = Volo.CmsKit.Blogs.BlogPostConsts.EntityType, + entityId = Model.BlogPost.Id.ToString() + }) } } @@ -122,10 +113,10 @@ if (Model.RatingsFeature?.IsEnabled == true) { @await Component.InvokeAsync(typeof(RatingViewComponent), new - { - entityType = Volo.CmsKit.Blogs.BlogPostConsts.EntityType, - entityId = Model.BlogPost.Id.ToString() - }) + { + entityType = Volo.CmsKit.Blogs.BlogPostConsts.EntityType, + entityId = Model.BlogPost.Id.ToString() + }) } } @@ -133,6 +124,7 @@
+ @if (isScrollIndexEnabled) {
@@ -140,7 +132,7 @@
@L["InThisDocument"]
- +
diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml.cs index 6227190ab8..f81f9fca7f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml.cs @@ -2,6 +2,7 @@ using Microsoft.AspNetCore.Mvc; using Volo.Abp.GlobalFeatures; using Volo.CmsKit.Blogs; +using Volo.CmsKit.Contents; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Public.Blogs; diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs index f5f2cc2f7a..c40fe4d116 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs @@ -1,11 +1,9 @@ -using Microsoft.AspNetCore.Mvc; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using System; using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; using Volo.Abp.Application.Dtos; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Pagination; +using Volo.CmsKit.Contents; using Volo.CmsKit.Public.Blogs; using Volo.CmsKit.Users; 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 cc72b8b0c8..250303177b 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 @@ -25,7 +25,7 @@ - @await Component.InvokeAsync("ContentFragment", new { pageDto = Model.PageDto }) + @await Component.InvokeAsync("ContentFragment", new { contentDto = Model.PageDto }) From 5cbc145271889e32f5ff5ecda4088d4605aa029d Mon Sep 17 00:00:00 2001 From: malik masis Date: Tue, 26 Jul 2022 18:32:24 +0300 Subject: [PATCH 15/22] Decreased the duplication --- .../Volo/CmsKit/Contents/IContent.cs | 7 +++++++ .../Volo/CmsKit/Contents/PageDto.cs | 2 +- .../Contents/ContentFragment.cshtml | 2 +- .../Contents/ContentFragmentViewComponent.cs | 16 ++++++---------- 4 files changed, 15 insertions(+), 12 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContent.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContent.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContent.cs new file mode 100644 index 0000000000..2a393e0a14 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContent.cs @@ -0,0 +1,7 @@ +using System.Collections.Generic; + +namespace Volo.CmsKit.Contents; +public interface IContent +{ + public List ContentFragments { get; set; } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/PageDto.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/PageDto.cs index 996a867fcf..0b573be372 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/PageDto.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/PageDto.cs @@ -5,7 +5,7 @@ using Volo.Abp.Application.Dtos; namespace Volo.CmsKit.Contents; [Serializable] -public class PageDto : EntityDto +public class PageDto : EntityDto, IContent { public string Title { get; set; } diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/ContentFragment.cshtml b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/ContentFragment.cshtml index 994660600a..f0dce03b75 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/ContentFragment.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/ContentFragment.cshtml @@ -7,7 +7,7 @@ @inject IMarkdownToHtmlRenderer MarkdownRenderer -@foreach (var contentFragment in Model.PageDto.ContentFragments) +@foreach (var contentFragment in Model.ContentDto.ContentFragments) { if (contentFragment.Type == "Markdown") { diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/ContentFragmentViewComponent.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/ContentFragmentViewComponent.cs index e6b7004940..6deeb90e22 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/ContentFragmentViewComponent.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/ContentFragmentViewComponent.cs @@ -1,26 +1,22 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc.UI.Widgets; using Volo.CmsKit.Contents; namespace Volo.CmsKit.Web.Contents; +[ViewComponent(Name = "ContentFragment")] [Widget( AutoInitialize = true )] -[ViewComponent(Name = "ContentFragment")] -public class ContentFragmentViewComponent : ViewComponent +public class ContentFragmentViewComponent : AbpViewComponent { - public PageDto PageDto { get; set; } - - public ContentFragmentViewComponent() - { - PageDto = new(); - } + public IContent ContentDto { get; set; } - public virtual async Task InvokeAsync(PageDto pageDto) + public virtual async Task InvokeAsync(IContent contentDto) { - return View("~/Contents/ContentFragment.cshtml", new ContentFragmentViewComponent() { PageDto = pageDto }); + return View("~/Contents/ContentFragment.cshtml", new ContentFragmentViewComponent() { ContentDto = contentDto }); } } From 93b07d076fa737f7369c5380bdaba3164cbb6947 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Thu, 28 Jul 2022 16:18:25 +0300 Subject: [PATCH 16/22] Move content preview to Web layer and add style support to preview --- .../Pages/CmsKit/Pages/create.js | 13 ++- .../Volo/CmsKit/Contents/DefaultContentDto.cs | 8 ++ .../Volo/CmsKit/Contents/ContentController.cs | 82 ------------------- .../CmsKitCommonWidgetsController.cs | 14 ++++ .../ContentPreview/ContentPreviewDto.cs | 9 ++ .../ContentPreviewViewComponent.cs | 30 +++++++ .../Components/ContentPreview/Default.cshtml | 10 +++ .../Contents/ContentFragment.cshtml | 4 +- .../Contents/ContentFragmentViewComponent.cs | 7 +- .../Components}/Contents/IContentRenderer.cs | 2 +- .../Contents/PlainTextContentRenderer.cs | 2 +- 11 files changed, 88 insertions(+), 93 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/DefaultContentDto.cs delete mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Contents/ContentController.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Web/Controllers/CmsKitCommonWidgetsController.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/ContentPreview/ContentPreviewDto.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/ContentPreview/ContentPreviewViewComponent.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/ContentPreview/Default.cshtml rename modules/cms-kit/src/Volo.CmsKit.Common.Web/{ => Pages/CmsKit/Components}/Contents/ContentFragment.cshtml (87%) rename modules/cms-kit/src/Volo.CmsKit.Common.Web/{ => Pages/CmsKit/Components}/Contents/ContentFragmentViewComponent.cs (68%) rename modules/cms-kit/src/Volo.CmsKit.Common.Web/{ => Pages/CmsKit/Components}/Contents/IContentRenderer.cs (66%) rename modules/cms-kit/src/Volo.CmsKit.Common.Web/{ => Pages/CmsKit/Components}/Contents/PlainTextContentRenderer.cs (80%) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/create.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/create.js index 62d05abd4d..51c405e03f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/create.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/create.js @@ -176,9 +176,16 @@ $(function () { let content = editor.getMarkdown(); localStorage.setItem('content', content); - - volo.cmsKit.contents.content.parseAsHtml(content).then(function (data) { - editor.setHTML(data); + + $.post("/CmsKitCommonWidgets/ContentPreview", { content: content }, function (result) { + + let style = styleEditor.getValue(); + + $('#editor-preview-style').remove(); + + $('head').append(''); + + editor.setHTML(result); }); } else if ($(this).attr("aria-label") == 'Write'){ diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/DefaultContentDto.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/DefaultContentDto.cs new file mode 100644 index 0000000000..731e346df4 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/DefaultContentDto.cs @@ -0,0 +1,8 @@ +using System.Collections.Generic; + +namespace Volo.CmsKit.Contents; + +public class DefaultContentDto : IContent +{ + public List ContentFragments { get; set; } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Contents/ContentController.cs b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Contents/ContentController.cs deleted file mode 100644 index e0bcf5586a..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Contents/ContentController.cs +++ /dev/null @@ -1,82 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Text.Encodings.Web; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.Rendering; -using Microsoft.AspNetCore.Mvc.ViewComponents; -using Microsoft.AspNetCore.Mvc.ViewEngines; -using Microsoft.AspNetCore.Mvc.ViewFeatures; -using Microsoft.AspNetCore.Mvc.ViewFeatures.Buffers; -using Microsoft.Extensions.DependencyInjection; -using Volo.Abp; -using Volo.Abp.GlobalFeatures; -using Volo.CmsKit.GlobalFeatures; - -namespace Volo.CmsKit.Contents; - -[RequiresGlobalFeature(typeof(PagesFeature))] -[RemoteService(Name = CmsKitCommonRemoteServiceConsts.RemoteServiceName)] -[Area(CmsKitCommonRemoteServiceConsts.ModuleName)] -[Route("api/cms-kit/contents")] -public class ContentController : Controller, IContentAppService -{ - protected IContentAppService ContentAppService { get; } - - public ContentController(IContentAppService contentAppService) - { - ContentAppService = contentAppService; - } - - [HttpGet] - [Route("{parseashtml}")] - public virtual async Task ParseAsHtmlAsync(string content) - { - var fragments = await ParseAsync(content); - return await RenderViewComponent("ContentFragment", new PageDto() { ContentFragments = fragments }); - } - public virtual Task> ParseAsync(string content) - { - return ContentAppService.ParseAsync(content); - } - - private async Task RenderViewComponent(string viewComponent, object args) - { - var sp = HttpContext.RequestServices; - - var helper = new DefaultViewComponentHelper( - sp.GetRequiredService(), - HtmlEncoder.Default, - sp.GetRequiredService(), - sp.GetRequiredService(), - sp.GetRequiredService()); - - using (var writer = new StringWriter()) - { - var context = new ViewContext(ControllerContext, NullView.Instance, ViewData, TempData, writer, new HtmlHelperOptions()); - helper.Contextualize(context); - var result = await helper.InvokeAsync(viewComponent, args); - result.WriteTo(writer, HtmlEncoder.Default); - await writer.FlushAsync(); - return writer.ToString(); - } - } - - internal class NullView : IView - { - public static readonly NullView Instance = new(); - - public string Path => string.Empty; - - public Task RenderAsync(ViewContext context) - { - if (context == null) - { - throw new ArgumentNullException(nameof(context)); - } - - return Task.CompletedTask; - } - } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Controllers/CmsKitCommonWidgetsController.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Controllers/CmsKitCommonWidgetsController.cs new file mode 100644 index 0000000000..8e226a31f2 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Controllers/CmsKitCommonWidgetsController.cs @@ -0,0 +1,14 @@ +using Microsoft.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Mvc; +using Volo.CmsKit.Web.Pages.CmsKit.Components.ContentPreview; + +namespace Volo.CmsKit.Web.Controllers; + +public class CmsKitCommonWidgetsController : AbpController +{ + [HttpPost] + public IActionResult ContentPreview(ContentPreviewDto dto) + { + return ViewComponent(typeof(ContentPreviewViewComponent), new { content = dto.Content }); + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/ContentPreview/ContentPreviewDto.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/ContentPreview/ContentPreviewDto.cs new file mode 100644 index 0000000000..9c01a325bf --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/ContentPreview/ContentPreviewDto.cs @@ -0,0 +1,9 @@ +using System; + +namespace Volo.CmsKit.Web.Pages.CmsKit.Components.ContentPreview; + +[Serializable] +public class ContentPreviewDto +{ + public string Content { get; set; } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/ContentPreview/ContentPreviewViewComponent.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/ContentPreview/ContentPreviewViewComponent.cs new file mode 100644 index 0000000000..987c404e31 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/ContentPreview/ContentPreviewViewComponent.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Mvc; +using Volo.CmsKit.Contents; + +namespace Volo.CmsKit.Web.Pages.CmsKit.Components.ContentPreview; + +public class ContentPreviewViewComponent : AbpViewComponent +{ + protected IContentAppService ContentAppService { get; } + + public ContentPreviewViewComponent(IContentAppService contentAppService) + { + ContentAppService = contentAppService; + } + + public virtual async Task InvokeAsync(string content) + { + var fragments = await ContentAppService.ParseAsync(content); + + return View("~/Pages/CmsKit/Components/ContentPreview/Default.cshtml", new DefaultContentDto + { + ContentFragments = fragments + }); + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/ContentPreview/Default.cshtml b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/ContentPreview/Default.cshtml new file mode 100644 index 0000000000..6baf41716e --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/ContentPreview/Default.cshtml @@ -0,0 +1,10 @@ +@using Volo.CmsKit.Contents +@using Volo.CmsKit.Web.Pages.CmsKit.Components.Contents + +@model DefaultContentDto + +
+ + @await Component.InvokeAsync(typeof(ContentFragmentViewComponent), Model) + +
\ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/ContentFragment.cshtml b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/ContentFragment.cshtml similarity index 87% rename from modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/ContentFragment.cshtml rename to modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/ContentFragment.cshtml index f0dce03b75..0fa7d59064 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/ContentFragment.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/ContentFragment.cshtml @@ -1,7 +1,7 @@ -@using Volo.CmsKit.Web.Contents; -@using System.Dynamic +@using System.Dynamic @using Volo.Abp.Data @using Volo.CmsKit.Web.Renderers; +@using Volo.CmsKit.Web.Pages.CmsKit.Components.Contents; @model ContentFragmentViewComponent diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/ContentFragmentViewComponent.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/ContentFragmentViewComponent.cs similarity index 68% rename from modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/ContentFragmentViewComponent.cs rename to modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/ContentFragmentViewComponent.cs index 6deeb90e22..d276165982 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/ContentFragmentViewComponent.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/ContentFragmentViewComponent.cs @@ -4,7 +4,7 @@ using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc.UI.Widgets; using Volo.CmsKit.Contents; -namespace Volo.CmsKit.Web.Contents; +namespace Volo.CmsKit.Web.Pages.CmsKit.Components.Contents; [ViewComponent(Name = "ContentFragment")] [Widget( @@ -16,7 +16,6 @@ public class ContentFragmentViewComponent : AbpViewComponent public virtual async Task InvokeAsync(IContent contentDto) { - return View("~/Contents/ContentFragment.cshtml", new ContentFragmentViewComponent() { ContentDto = contentDto }); + return View("~/Pages/CmsKit/Components/Contents/ContentFragment.cshtml", new ContentFragmentViewComponent() { ContentDto = contentDto }); } -} - +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/IContentRenderer.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/IContentRenderer.cs similarity index 66% rename from modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/IContentRenderer.cs rename to modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/IContentRenderer.cs index 879b27cda7..b33c044392 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/IContentRenderer.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/IContentRenderer.cs @@ -1,6 +1,6 @@ using System.Threading.Tasks; -namespace Volo.CmsKit.Web.Contents; +namespace Volo.CmsKit.Web.Pages.CmsKit.Components.Contents; public interface IContentRenderer { diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/PlainTextContentRenderer.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/PlainTextContentRenderer.cs similarity index 80% rename from modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/PlainTextContentRenderer.cs rename to modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/PlainTextContentRenderer.cs index cf68e25e15..3fcc78f658 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/PlainTextContentRenderer.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/PlainTextContentRenderer.cs @@ -1,7 +1,7 @@ using System.Threading.Tasks; using Volo.Abp.DependencyInjection; -namespace Volo.CmsKit.Web.Contents; +namespace Volo.CmsKit.Web.Pages.CmsKit.Components.Contents; public class PlainTextContentRenderer : IContentRenderer, ITransientDependency { From 6fe6f7ae9b2c0fac46dbafa46931d520622eb785 Mon Sep 17 00:00:00 2001 From: malik masis Date: Fri, 29 Jul 2022 18:39:26 +0300 Subject: [PATCH 17/22] Applied the preview implementation to Page/Update --- .../Pages/CmsKit/Pages/update.js | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/update.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/update.js index 565f758552..7f5a54c798 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/update.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/update.js @@ -140,6 +140,29 @@ $(function () { var txt = $('#GeneratedWidgetText').val(); editor.insertText(txt); }); + + $('.tab-item').on('click', function () { + if ($(this).attr("aria-label") == 'Preview' && editor.isMarkdownMode()) { + + let content = editor.getMarkdown(); + localStorage.setItem('content', content); + + $.post("/CmsKitCommonWidgets/ContentPreview", { content: content }, function (result) { + + let style = styleEditor.getValue(); + + $('#editor-preview-style').remove(); + + $('head').append(''); + + editor.setHTML(result); + }); + } + else if ($(this).attr("aria-label") == 'Write') { + var retrievedObject = localStorage.getItem('content'); + editor.setMarkdown(retrievedObject); + } + }); function createAddWidgetButton() { const button = document.createElement('button'); From 23fc4b896a748d158eaafb258565a22e66dc186c Mon Sep 17 00:00:00 2001 From: malik masis Date: Fri, 29 Jul 2022 18:39:38 +0300 Subject: [PATCH 18/22] Applied the preview implementation to BlogPost --- .../Pages/CmsKit/BlogPosts/create.js | 16 ++++++++++++++++ .../Pages/CmsKit/BlogPosts/update.js | 16 ++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/create.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/create.js index 375b7ad41b..d81dcd9f06 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/create.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/create.js @@ -334,6 +334,22 @@ $(function () { editor.insertText(txt); }); + $('.tab-item').on('click', function () { + if ($(this).attr("aria-label") == 'Preview' && editor.isMarkdownMode()) { + + let content = editor.getMarkdown(); + localStorage.setItem('content', content); + + $.post("/CmsKitCommonWidgets/ContentPreview", { content: content }, function (result) { + editor.setHTML(result); + }); + } + else if ($(this).attr("aria-label") == 'Write') { + var retrievedObject = localStorage.getItem('content'); + editor.setMarkdown(retrievedObject); + } + }); + function createAddWidgetButton() { const button = document.createElement('button'); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/update.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/update.js index 51e3eda96c..292535034d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/update.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/update.js @@ -255,6 +255,22 @@ $(function () { editor.insertText(txt); }); + $('.tab-item').on('click', function () { + if ($(this).attr("aria-label") == 'Preview' && editor.isMarkdownMode()) { + + let content = editor.getMarkdown(); + localStorage.setItem('content', content); + + $.post("/CmsKitCommonWidgets/ContentPreview", { content: content }, function (result) { + editor.setHTML(result); + }); + } + else if ($(this).attr("aria-label") == 'Write') { + var retrievedObject = localStorage.getItem('content'); + editor.setMarkdown(retrievedObject); + } + }); + function createAddWidgetButton() { const button = document.createElement('button'); From 025d691c1a40bc94917041894f73d0733ea1bfcc Mon Sep 17 00:00:00 2001 From: malik masis Date: Sat, 30 Jul 2022 19:26:30 +0300 Subject: [PATCH 19/22] Update cms-kit-common-proxy.js --- .../client-proxies/cms-kit-common-proxy.js | 22 ------------------- 1 file changed, 22 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/wwwroot/client-proxies/cms-kit-common-proxy.js b/modules/cms-kit/src/Volo.CmsKit.Common.Web/wwwroot/client-proxies/cms-kit-common-proxy.js index f255ec9d4c..27aa1d819e 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/wwwroot/client-proxies/cms-kit-common-proxy.js +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/wwwroot/client-proxies/cms-kit-common-proxy.js @@ -20,28 +20,6 @@ })(); - // controller volo.cmsKit.contents.content - - (function(){ - - abp.utils.createNamespace(window, 'volo.cmsKit.contents.content'); - - volo.cmsKit.contents.content.parseAsHtml = function(content, parseashtml, ajaxParams) { - return abp.ajax($.extend(true, { - url: abp.appPath + 'api/cms-kit/contents/' + parseashtml + '' + abp.utils.buildQueryString([{ name: 'content', value: content }]) + '', - type: 'GET' - }, { dataType: 'text' }, ajaxParams)); - }; - - volo.cmsKit.contents.content.parse = function(content, ajaxParams) { - return abp.ajax($.extend(true, { - url: abp.appPath + 'api/cms-kit/contents' + abp.utils.buildQueryString([{ name: 'content', value: content }]) + '', - type: 'POST' - }, ajaxParams)); - }; - - })(); - // controller volo.cmsKit.blogs.blogFeature (function(){ From e90bd47ce0d9f3f224980b1bbb8b80238cb35a14 Mon Sep 17 00:00:00 2001 From: malik masis Date: Mon, 1 Aug 2022 08:23:14 +0300 Subject: [PATCH 20/22] Update generic csharp proxy for public --- .../BlogPostPublicClientProxy.Generated.cs | 8 +-- .../ClientProxies/cms-kit-generate-proxy.json | 63 ++----------------- 2 files changed, 10 insertions(+), 61 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/BlogPostPublicClientProxy.Generated.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/BlogPostPublicClientProxy.Generated.cs index 8d66adc208..f26816e88d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/BlogPostPublicClientProxy.Generated.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/BlogPostPublicClientProxy.Generated.cs @@ -14,18 +14,18 @@ namespace Volo.CmsKit.Public.Blogs.ClientProxies; [ExposeServices(typeof(IBlogPostPublicAppService), typeof(BlogPostPublicClientProxy))] public partial class BlogPostPublicClientProxy : ClientProxyBase, IBlogPostPublicAppService { - public virtual async Task GetAsync(string blogSlug, string blogPostSlug) + public virtual async Task GetAsync(string blogSlug, string blogPostSlug) { - return await RequestAsync(nameof(GetAsync), new ClientProxyRequestTypeValue + return await RequestAsync(nameof(GetAsync), new ClientProxyRequestTypeValue { { typeof(string), blogSlug }, { typeof(string), blogPostSlug } }); } - public virtual async Task> GetListAsync(string blogSlug, BlogPostGetListInput input) + public virtual async Task> GetListAsync(string blogSlug, BlogPostGetListInput input) { - return await RequestAsync>(nameof(GetListAsync), new ClientProxyRequestTypeValue + return await RequestAsync>(nameof(GetListAsync), new ClientProxyRequestTypeValue { { typeof(string), blogSlug }, { typeof(BlogPostGetListInput), input } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/cms-kit-generate-proxy.json b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/cms-kit-generate-proxy.json index 626dce7ff2..e3b3802ee9 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/cms-kit-generate-proxy.json +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/cms-kit-generate-proxy.json @@ -505,57 +505,6 @@ } } }, - "Volo.CmsKit.Public.Polls.PollViewComponentController": { - "controllerName": "PollViewComponent", - "controllerGroupName": "PollViewComponent", - "isRemoteService": true, - "apiVersion": null, - "type": "Volo.CmsKit.Public.Polls.PollViewComponentController", - "interfaces": [ - { - "type": "Volo.CmsKit.Public.Polls.IPollViewComponentAppService" - } - ], - "actions": { - "ParseAsyncByContent": { - "uniqueName": "ParseAsyncByContent", - "name": "ParseAsync", - "httpMethod": "GET", - "url": "api/cms-kit-public/polls/{content}", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "content", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "content", - "name": "content", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" - } - ], - "returnValue": { - "type": "System.Collections.Generic.List", - "typeSimple": "[Volo.CmsKit.Polls.ContentFragment]" - }, - "allowAnonymous": null, - "implementFrom": "Volo.CmsKit.Public.Polls.IPollViewComponentAppService" - } - } - }, "Volo.CmsKit.Public.Pages.PagesPublicController": { "controllerName": "PagesPublic", "controllerGroupName": "PagesPublic", @@ -599,8 +548,8 @@ } ], "returnValue": { - "type": "Volo.CmsKit.Public.Pages.PageDto", - "typeSimple": "Volo.CmsKit.Public.Pages.PageDto" + "type": "Volo.CmsKit.Contents.PageDto", + "typeSimple": "Volo.CmsKit.Contents.PageDto" }, "allowAnonymous": null, "implementFrom": "Volo.CmsKit.Public.Pages.IPagePublicAppService" @@ -985,8 +934,8 @@ } ], "returnValue": { - "type": "Volo.CmsKit.Public.Blogs.BlogPostPublicDto", - "typeSimple": "Volo.CmsKit.Public.Blogs.BlogPostPublicDto" + "type": "Volo.CmsKit.Contents.BlogPostCommonDto", + "typeSimple": "Volo.CmsKit.Contents.BlogPostCommonDto" }, "allowAnonymous": null, "implementFrom": "Volo.CmsKit.Public.Blogs.IBlogPostPublicAppService" @@ -1090,8 +1039,8 @@ } ], "returnValue": { - "type": "Volo.Abp.Application.Dtos.PagedResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" }, "allowAnonymous": null, "implementFrom": "Volo.CmsKit.Public.Blogs.IBlogPostPublicAppService" From 845402fc3bde40418da365b7ad0451452d2e3a4e Mon Sep 17 00:00:00 2001 From: malik masis Date: Mon, 1 Aug 2022 08:23:50 +0300 Subject: [PATCH 21/22] Renamed BlogPostPublic to BlogPostCommonDto --- .../{BlogPostPublicDto.cs => BlogPostCommonDto.cs} | 2 +- .../CmsKit/Public/Blogs/IBlogPostPublicAppService.cs | 4 ++-- .../CmsKit/Public/Blogs/BlogPostPublicAppService.cs | 10 +++++----- .../Public/PublicApplicationAutoMapperProfile.cs | 2 +- .../CmsKit/Public/Blogs/BlogPostPublicController.cs | 4 ++-- .../Pages/Public/CmsKit/Blogs/BlogPost.cshtml.cs | 2 +- .../Pages/Public/CmsKit/Blogs/Index.cshtml.cs | 2 +- 7 files changed, 13 insertions(+), 13 deletions(-) rename modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/{BlogPostPublicDto.cs => BlogPostCommonDto.cs} (89%) diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/BlogPostPublicDto.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/BlogPostCommonDto.cs similarity index 89% rename from modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/BlogPostPublicDto.cs rename to modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/BlogPostCommonDto.cs index d00a6364f1..c2b2373d9c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/BlogPostPublicDto.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/BlogPostCommonDto.cs @@ -6,7 +6,7 @@ using Volo.CmsKit.Users; namespace Volo.CmsKit.Contents; [Serializable] -public class BlogPostPublicDto : AuditedEntityDto, IContent +public class BlogPostCommonDto : AuditedEntityDto, IContent { public Guid BlogId { get; set; } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs index b60b500cfe..a6462d937c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs @@ -10,9 +10,9 @@ namespace Volo.CmsKit.Public.Blogs; public interface IBlogPostPublicAppService : IApplicationService { - Task> GetListAsync([NotNull] string blogSlug, BlogPostGetListInput input); + Task> GetListAsync([NotNull] string blogSlug, BlogPostGetListInput input); - Task GetAsync([NotNull] string blogSlug, [NotNull] string blogPostSlug); + Task GetAsync([NotNull] string blogSlug, [NotNull] string blogPostSlug); Task> GetAuthorsHasBlogPostsAsync(BlogPostFilteredPagedAndSortedResultRequestDto input); diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs index ebdda3d293..80185f7bea 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs @@ -29,20 +29,20 @@ public class BlogPostPublicAppService : CmsKitPublicAppServiceBase, IBlogPostPub ContentParser = contentParser; } - public virtual async Task GetAsync( + public virtual async Task GetAsync( [NotNull] string blogSlug, [NotNull] string blogPostSlug) { var blog = await BlogRepository.GetBySlugAsync(blogSlug); var blogPost = await BlogPostRepository.GetBySlugAsync(blog.Id, blogPostSlug); - var blogPostDto = ObjectMapper.Map(blogPost); + var blogPostDto = ObjectMapper.Map(blogPost); blogPostDto.ContentFragments = await ContentParser.ParseAsync(blogPost.Content); return blogPostDto; } - public virtual async Task> GetListAsync([NotNull] string blogSlug, BlogPostGetListInput input) + public virtual async Task> GetListAsync([NotNull] string blogSlug, BlogPostGetListInput input) { var blog = await BlogRepository.GetBySlugAsync(blogSlug); @@ -50,10 +50,10 @@ public class BlogPostPublicAppService : CmsKitPublicAppServiceBase, IBlogPostPub BlogPostStatus.Published, input.MaxResultCount, input.SkipCount, input.Sorting); - return new PagedResultDto( + return new PagedResultDto( await BlogPostRepository.GetCountAsync(blogId: blog.Id, tagId: input.TagId, statusFilter: BlogPostStatus.Published, authorId: input.AuthorId), - ObjectMapper.Map, List>(blogPosts)); + ObjectMapper.Map, List>(blogPosts)); } public virtual async Task> GetAuthorsHasBlogPostsAsync(BlogPostFilteredPagedAndSortedResultRequestDto input) diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs index fbd33195f6..bd0c6d5e6c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs @@ -33,7 +33,7 @@ public class PublicApplicationAutoMapperProfile : Profile CreateMap() .Ignore(x => x.ContentFragments); - CreateMap() + CreateMap() .Ignore(x => x.ContentFragments); CreateMap(); diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs index c068c4b5e6..be28afa6a4 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs @@ -25,14 +25,14 @@ public class BlogPostPublicController : CmsKitPublicControllerBase, IBlogPostPub [HttpGet] [Route("{blogSlug}/{blogPostSlug}")] - public virtual Task GetAsync(string blogSlug, string blogPostSlug) + public virtual Task GetAsync(string blogSlug, string blogPostSlug) { return BlogPostPublicAppService.GetAsync(blogSlug, blogPostSlug); } [HttpGet] [Route("{blogSlug}")] - public virtual Task> GetListAsync(string blogSlug, BlogPostGetListInput input) + public virtual Task> GetListAsync(string blogSlug, BlogPostGetListInput input) { return BlogPostPublicAppService.GetListAsync(blogSlug, input); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml.cs index f81f9fca7f..e1d9a3b0f7 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml.cs @@ -16,7 +16,7 @@ public class BlogPostModel : CmsKitPublicPageModelBase [BindProperty(SupportsGet = true)] public string BlogPostSlug { get; set; } - public BlogPostPublicDto BlogPost { get; private set; } + public BlogPostCommonDto BlogPost { get; private set; } public BlogFeatureDto CommentsFeature { get; private set; } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs index c40fe4d116..736fba5e9e 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs @@ -25,7 +25,7 @@ public class IndexModel : CmsKitPublicPageModelBase [BindProperty(SupportsGet = true)] public Guid? TagId { get; set; } - public PagedResultDto Blogs { get; private set; } + public PagedResultDto Blogs { get; private set; } public PagerModel PagerModel => new PagerModel(Blogs.TotalCount, Blogs.Items.Count, CurrentPage, PageSize, Request.Path.ToString()); From 216083550710cf591da165a3890ece70fed5be3d Mon Sep 17 00:00:00 2001 From: malik masis Date: Mon, 1 Aug 2022 10:06:15 +0300 Subject: [PATCH 22/22] Removed the highlight class once clicking Preview --- .../Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/create.js | 3 +++ .../Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/update.js | 3 +++ .../src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/create.js | 3 +++ .../src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/update.js | 5 ++++- 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/create.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/create.js index d81dcd9f06..a101635d73 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/create.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/create.js @@ -342,6 +342,9 @@ $(function () { $.post("/CmsKitCommonWidgets/ContentPreview", { content: content }, function (result) { editor.setHTML(result); + + var highllightedText = $('#ContentEditor').find('.toastui-editor-md-preview-highlight'); + highllightedText.removeClass('toastui-editor-md-preview-highlight'); }); } else if ($(this).attr("aria-label") == 'Write') { diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/update.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/update.js index 292535034d..d14194ecb5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/update.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/update.js @@ -263,6 +263,9 @@ $(function () { $.post("/CmsKitCommonWidgets/ContentPreview", { content: content }, function (result) { editor.setHTML(result); + + var highllightedText = $('#ContentEditor').find('.toastui-editor-md-preview-highlight'); + highllightedText.removeClass('toastui-editor-md-preview-highlight'); }); } else if ($(this).attr("aria-label") == 'Write') { diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/create.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/create.js index 51c405e03f..ee6c7b7f9f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/create.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/create.js @@ -186,6 +186,9 @@ $(function () { $('head').append(''); editor.setHTML(result); + + var highllightedText = $('#ContentEditor').find('.toastui-editor-md-preview-highlight'); + highllightedText.removeClass('toastui-editor-md-preview-highlight'); }); } else if ($(this).attr("aria-label") == 'Write'){ diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/update.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/update.js index 7f5a54c798..c46f1c274c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/update.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/update.js @@ -156,6 +156,9 @@ $(function () { $('head').append(''); editor.setHTML(result); + + var highllightedText = $('#ContentEditor').find('.toastui-editor-md-preview-highlight'); + highllightedText.removeClass('toastui-editor-md-preview-highlight'); }); } else if ($(this).attr("aria-label") == 'Write') { @@ -163,7 +166,7 @@ $(function () { editor.setMarkdown(retrievedObject); } }); - + function createAddWidgetButton() { const button = document.createElement('button');