From e470faa88f1ca3a12a661be10032ee338277f073 Mon Sep 17 00:00:00 2001 From: malik masis Date: Fri, 22 Jul 2022 15:40:43 +0300 Subject: [PATCH] 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)); };