public override IDisplayResult Display(MarkdownField field, BuildFieldDisplayContext context) { return(Initialize <MarkdownFieldViewModel>(GetDisplayShapeType(context), async model => { var settings = context.PartFieldDefinition.GetSettings <MarkdownFieldSettings>(); model.Markdown = field.Markdown; model.Field = field; model.Part = context.ContentPart; model.PartFieldDefinition = context.PartFieldDefinition; // The default Markdown option is to entity escape html // so filters must be run after the markdown has been processed. model.Html = _markdownService.ToHtml(model.Markdown ?? ""); // The liquid rendering is for backwards compatability and can be removed in a future version. if (!settings.SanitizeHtml) { model.Markdown = await _liquidTemplateManager.RenderAsync(model.Html, _htmlEncoder, model, scope => scope.SetValue("ContentItem", field.ContentItem)); } model.Html = await _shortCodeService.ProcessAsync(model.Html ?? ""); if (settings.SanitizeHtml) { model.Html = _htmlSanitizerService.Sanitize(model.Html ?? ""); } }) .Location("Detail", "Content") .Location("Summary", "Content")); }
public override Task GetContentItemAspectAsync(ContentItemAspectContext context, MarkdownBodyPart part) { return(context.ForAsync <BodyAspect>(async bodyAspect => { if (bodyAspect != null && part.ContentItem.Id == _contentItemId) { 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.Markdown); // The liquid rendering is for backwards compatability and can be removed in a future version. if (!settings.SanitizeHtml) { var model = new MarkdownBodyPartViewModel() { Markdown = part.Markdown, Html = html, MarkdownBodyPart = part, ContentItem = part.ContentItem }; html = await _liquidTemplateManager.RenderAsync(html, _htmlEncoder, model, scope => scope.SetValue("ContentItem", model.ContentItem)); } html = await _shortCodeService.ProcessAsync(html); if (settings.SanitizeHtml) { html = _htmlSanitizerService.Sanitize(html); } bodyAspect.Body = _bodyAspect = new HtmlString(html); _contentItemId = part.ContentItem.Id; } catch { bodyAspect.Body = HtmlString.Empty; _contentItemId = default; } })); }
private async ValueTask BuildViewModelAsync(HtmlBodyPartViewModel model, HtmlBodyPart htmlBodyPart, HtmlBodyPartSettings settings) { model.Html = htmlBodyPart.Html; model.HtmlBodyPart = htmlBodyPart; model.ContentItem = htmlBodyPart.ContentItem; if (!settings.SanitizeHtml) { model.Html = await _liquidTemplateManager.RenderAsync(htmlBodyPart.Html, _htmlEncoder, model, scope => scope.SetValue("ContentItem", model.ContentItem)); } model.Html = await _shortCodeService.ProcessAsync(model.Html); }
public override Task GetContentItemAspectAsync(ContentItemAspectContext context, HtmlBodyPart part) { return(context.ForAsync <BodyAspect>(async bodyAspect => { if (bodyAspect != null && part.ContentItem.Id == _contentItemId) { bodyAspect.Body = _bodyAspect; return; } try { var contentTypeDefinition = _contentDefinitionManager.GetTypeDefinition(part.ContentItem.ContentType); var contentTypePartDefinition = contentTypeDefinition.Parts.FirstOrDefault(x => string.Equals(x.PartDefinition.Name, "HtmlBodyPart")); var settings = contentTypePartDefinition.GetSettings <HtmlBodyPartSettings>(); var html = part.Html; if (!settings.SanitizeHtml) { var model = new HtmlBodyPartViewModel() { Html = part.Html, HtmlBodyPart = part, ContentItem = part.ContentItem }; html = await _liquidTemplateManager.RenderAsync(html, _htmlEncoder, model, scope => scope.SetValue("ContentItem", model.ContentItem)); } html = await _shortCodeService.ProcessAsync(html); bodyAspect.Body = _bodyAspect = new HtmlString(html); _contentItemId = part.ContentItem.Id; } catch { bodyAspect.Body = HtmlString.Empty; _contentItemId = default; } })); }
public override IDisplayResult Display(HtmlField field, BuildFieldDisplayContext context) { return(Initialize <DisplayHtmlFieldViewModel>(GetDisplayShapeType(context), async model => { model.Html = field.Html; model.Field = field; model.Part = context.ContentPart; model.PartFieldDefinition = context.PartFieldDefinition; var settings = context.PartFieldDefinition.GetSettings <HtmlFieldSettings>(); if (!settings.SanitizeHtml) { model.Html = await _liquidTemplateManager.RenderAsync(field.Html, _htmlEncoder, model, scope => scope.SetValue("ContentItem", field.ContentItem)); } model.Html = await _shortCodeService.ProcessAsync(model.Html); }) .Location("Detail", "Content") .Location("Summary", "Content")); }
private async ValueTask BuildViewModel(MarkdownBodyPartViewModel model, MarkdownBodyPart markdownBodyPart, MarkdownBodyPartSettings settings) { model.Markdown = markdownBodyPart.Markdown; model.MarkdownBodyPart = markdownBodyPart; model.ContentItem = markdownBodyPart.ContentItem; // The default Markdown option is to entity escape html // so filters must be run after the markdown has been processed. model.Html = _markdownService.ToHtml(model.Markdown ?? ""); // The liquid rendering is for backwards compatability and can be removed in a future version. if (!settings.SanitizeHtml) { model.Html = await _liquidTemplateManager.RenderAsync(model.Html, _htmlEncoder, model, scope => scope.SetValue("ContentItem", model.ContentItem)); } model.Html = await _shortCodeService.ProcessAsync(model.Html ?? ""); if (settings.SanitizeHtml) { model.Html = _htmlSanitizerService.Sanitize(model.Html ?? ""); } }