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; } })); }
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; }
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)); }