コード例 #1
0
        public override Task GetContentItemAspectAsync(ContentItemAspectContext context, AttachContentPart part)
        {
            return(context.ForAsync <BodyAspect>(async bodyAspect =>
            {
                if (_bodyAspect != null)
                {
                    bodyAspect.Body = _bodyAspect;
                    return;
                }

                try
                {
                    var contentTypeDefinition = _contentDefinitionManager.GetTypeDefinition(part.ContentItem.ContentType);
                    var contentTypePartDefinition = contentTypeDefinition.Parts.FirstOrDefault(x => String.Equals(x.PartDefinition.Name, "MarkdownBodyPart"));
                    var settings = contentTypePartDefinition.GetSettings <MarkdownBodyPartSettings>();

                    // The default Markdown option is to entity escape html
                    // so filters must be run after the markdown has been processed.
                    var html = _markdownService.ToHtml(part.AttachContent);

                    // The liquid rendering is for backwards compatability and can be removed in a future version.
                    if (!settings.SanitizeHtml)
                    {
                        var model = new AttachContentPartViewModel()
                        {
                            AttachContentPart = part,
                            ContentItem = part.ContentItem
                        };

                        html = await _liquidTemplateManager.RenderStringAsync(html, _htmlEncoder, model,
                                                                              new Dictionary <string, FluidValue>()
                        {
                            ["ContentItem"] = new ObjectValue(model.ContentItem)
                        });
                    }

                    html = await _shortcodeService.ProcessAsync(html,
                                                                new Context
                    {
                        ["ContentItem"] = part.ContentItem,
                        ["TypePartDefinition"] = contentTypePartDefinition
                    });

                    if (settings.SanitizeHtml)
                    {
                        html = _htmlSanitizerService.Sanitize(html);
                    }

                    bodyAspect.Body = _bodyAspect = new HtmlString(html);
                }
                catch
                {
                    bodyAspect.Body = HtmlString.Empty;
                }
            }));
        }
コード例 #2
0
        private void BuildViewModel(AttachContentPartViewModel model, AttachContentPart part)
        {
            var settings = GetAttachContentPartSettings(part);

            model.ContentItem       = part.ContentItem;
            model.ShortName         = settings.ShortName;
            model.HideContent       = part.HideContent;
            model.AttachContent     = part.AttachContent;
            model.AttachContentPart = part;
            model.Settings          = settings;
        }
コード例 #3
0
        public override async Task <IDisplayResult> UpdateAsync(AttachContentPart model, IUpdateModel updater)
        {
            var viewModel = new AttachContentPartViewModel();

            if (await updater.TryUpdateModelAsync(viewModel, Prefix, t => t.HideContent, t => t.AttachContent))
            {
                if (!string.IsNullOrEmpty(viewModel.AttachContent) && !_liquidTemplatemanager.Validate(viewModel.AttachContent, out var errors))
                {
                    updater.ModelState.AddModelError(Prefix, nameof(viewModel.AttachContent), S["The Liquid Body doesn't contain a valid Liquid expression. Details: {0}", string.Join(" ", errors)]);
                }
                else
                {
                    model.AttachContent = viewModel.AttachContent;
                }
                model.HideContent = viewModel.HideContent;
            }

            return(Edit(model));
        }