using System; using Markdig; using Pek.Markdig.HighlightJs; using Website.Extensions; using Website.Markdig.Extensions; using Website.Models; namespace Website.ViewModels { public class BlogPostViewModel { public BlogPostViewModel(BlogPost blogPost, bool preview) { Id = blogPost.Id; Title = blogPost.Title; Timestamp = FormatTimestamp(blogPost.Timestamp); Url = blogPost.Url; Content = preview ? blogPost.Draft : blogPost.Content; } private static string FormatTimestamp(DateTime timestamp) => timestamp.ToString($@"dddd \t\h\e d{timestamp.GetDaySuffix()} \o\f MMMM yyyy"); private static MarkdownPipeline GetPipeline() => new MarkdownPipelineBuilder() //.UseAdvancedExtensions() .UseAutoLinks() .UseSoftlineBreakAsHardlineBreak() .UseHighlightJs() .UseBlogRenderer() .Build(); public int Id { get; } public string Title { get; } public string Content { get; protected set; } public string Timestamp { get; } public string Url { get; } public string ContentHtml => Markdown.ToHtml(Content, GetPipeline()).Trim(); } }