diff --git a/src/TerribleDev.Blog.Web/Extensions/IPostExtensions.cs b/src/TerribleDev.Blog.Web/Extensions/IPostExtensions.cs deleted file mode 100644 index 0123af3..0000000 --- a/src/TerribleDev.Blog.Web/Extensions/IPostExtensions.cs +++ /dev/null @@ -1,23 +0,0 @@ -using Microsoft.SyndicationFeed; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using TerribleDev.Blog.Web.Models; - -namespace TerribleDev.Blog.Web -{ - public static class IPostExtensions - { - public static SyndicationItem ToSyndicationItem(this IPost x) - { - return new SyndicationItem() - { - Title = x.Title, - Description = x.Content.ToString(), - Id = $"https://blog.terribledev.io/{x.Url}", - Published = x.PublishDate - }; - } - } -} diff --git a/src/TerribleDev.Blog.Web/Extensions/StringExtension.cs b/src/TerribleDev.Blog.Web/Extensions/StringExtension.cs deleted file mode 100644 index 5ed9fd2..0000000 --- a/src/TerribleDev.Blog.Web/Extensions/StringExtension.cs +++ /dev/null @@ -1,7 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - - diff --git a/src/TerribleDev.Blog.Web/Factories/BlogFactory.cs b/src/TerribleDev.Blog.Web/Factories/BlogFactory.cs deleted file mode 100644 index 96d58d1..0000000 --- a/src/TerribleDev.Blog.Web/Factories/BlogFactory.cs +++ /dev/null @@ -1,73 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using System.IO; -using TerribleDev.Blog.Web.Models; -using YamlDotNet.Serialization; -using Microsoft.AspNetCore.Html; -using Markdig; -using TerribleDev.Blog.MarkdownPlugins; - -namespace TerribleDev.Blog.Web -{ - public class BlogFactory - { - public List GetAllPosts() - { - // why didn't I use f# I'd have a pipe operator by now - var posts = GetPosts(); - var postsAsText = posts.Select(GetFileText); - return Task.WhenAll(postsAsText).Result.AsParallel().Select(b => ParsePost(b.text, b.fileInfo.Name)).ToList(); - } - - private static async Task<(string text, FileInfo fileInfo)> GetFileText(string filePath) - { - var fileInfo = new FileInfo(filePath); - var text = await File.ReadAllTextAsync(fileInfo.FullName); - return (text, fileInfo); - - } - - public IEnumerable GetPosts() => Directory.EnumerateFiles(Path.Combine(Directory.GetCurrentDirectory(), "Posts"), "*.md", SearchOption.TopDirectoryOnly); - - public PostSettings ParseYaml(string ymlText) - { - var serializer = new DeserializerBuilder().Build(); - return serializer.Deserialize(ymlText); - - } - public IPost ParsePost(string postText, string fileName) - { - var splitFile = postText.Split("---"); - var ymlRaw = splitFile[0]; - var markdownText = string.Join("", splitFile.Skip(1)); - List postImages = new List(); - var pipeline = new MarkdownPipelineBuilder() - .Use() - .Use(new ImageRecorder(postImages)) - .UseMediaLinks() - .UseEmojiAndSmiley() - .Build(); - var postContent = Markdown.ToHtml(markdownText, pipeline); - var postContentPlain = String.Join("", Markdown.ToPlainText(markdownText, pipeline).Split("")); - var postSettings = ParseYaml(ymlRaw); - var resolvedUrl = !string.IsNullOrWhiteSpace(postSettings.permalink) ? postSettings.permalink : fileName.Split('.')[0].Replace(' ', '-').WithoutSpecialCharacters(); - var summary = postContent.Split("")[0]; - var postSummaryPlain = postContentPlain.Split("")[0]; - return new Post() - { - PublishDate = postSettings.date.ToUniversalTime(), - tags = postSettings.tags?.Select(a => a.Replace(' ', '-').WithoutSpecialCharacters().ToLower()).ToList() ?? new List(), - Title = postSettings.title, - Url = resolvedUrl, - Content = new HtmlString(postContent), - Summary = new HtmlString(summary), - SummaryPlain = postSummaryPlain, - SummaryPlainShort = (postContentPlain.Length <= 147 ? postContentPlain : postContentPlain.Substring(0, 146)) + "...", - ContentPlain = postContentPlain, - Images = postImages.Distinct().Select(a => a.StartsWith('/') ? a : $"/{resolvedUrl}/{a}").ToList() - }; - } - } -} diff --git a/src/TerribleDev.Blog.Web/Factories/IBlogFactory.cs b/src/TerribleDev.Blog.Web/Factories/IBlogFactory.cs deleted file mode 100644 index 62c073c..0000000 --- a/src/TerribleDev.Blog.Web/Factories/IBlogFactory.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System.Collections.Generic; -using System.Threading.Tasks; -using TerribleDev.Blog.Web.Models; - -namespace TerribleDev.Blog.Web -{ - public interface IBlogFactory - { - Task> GetAllPosts(); - IEnumerable GetPosts(); - IPost ParsePost(string postText, string fileName); - IPostSettings ParseYaml(string ymlText); - } -} \ No newline at end of file diff --git a/src/TerribleDev.Blog.Web/Models/IPost.cs b/src/TerribleDev.Blog.Web/Models/IPost.cs deleted file mode 100644 index 2c4a38a..0000000 --- a/src/TerribleDev.Blog.Web/Models/IPost.cs +++ /dev/null @@ -1,23 +0,0 @@ -using Microsoft.AspNetCore.Html; -using YamlDotNet.Serialization; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace TerribleDev.Blog.Web.Models -{ - public interface IPost - { - string Url { get; set; } - string Title { get; set; } - HtmlString Summary { get; set; } - DateTime PublishDate { get; set; } - HtmlString Content { get; set; } - string ContentPlain { get; set; } - string SummaryPlain { get; set; } - string SummaryPlainShort { get; set; } - IList tags { get; set; } - IList Images { get; set;} - } -} diff --git a/src/TerribleDev.Blog.Web/Models/IPostSettings.cs b/src/TerribleDev.Blog.Web/Models/IPostSettings.cs deleted file mode 100644 index ab26f6a..0000000 --- a/src/TerribleDev.Blog.Web/Models/IPostSettings.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace TerribleDev.Blog.Web.Models -{ - public interface IPostSettings - { - string id { get; set; } - List tags { get; set; } - string title { get; set; } - string permalink { get; set; } - string thumbnailImage { get; set; } - DateTimeOffset date { get; set; } - DateTimeOffset updated { get; set; } - } -} diff --git a/src/TerribleDev.Blog.Web/Models/Post.cs b/src/TerribleDev.Blog.Web/Models/Post.cs deleted file mode 100644 index f70eec8..0000000 --- a/src/TerribleDev.Blog.Web/Models/Post.cs +++ /dev/null @@ -1,22 +0,0 @@ -using Microsoft.AspNetCore.Html; -using System; -using System.Collections.Generic; -using System.Diagnostics; - -namespace TerribleDev.Blog.Web.Models -{ - [DebuggerDisplay("{Title}")] - public class Post : IPost - { - public string Url { get; set; } - public string Title { get; set; } - public DateTime PublishDate { get; set; } - public HtmlString Content { get; set; } - public HtmlString Summary { get; set; } - public string ContentPlain { get; set; } - public string SummaryPlain { get; set; } - public string SummaryPlainShort { get; set; } - public IList tags { get; set; } - public IList Images { get; set;} - } -} diff --git a/src/TerribleDev.Blog.Web/TerribleDev.Blog.Web.csproj b/src/TerribleDev.Blog.Web/TerribleDev.Blog.Web.csproj index b5c9e6b..81b3e1d 100644 --- a/src/TerribleDev.Blog.Web/TerribleDev.Blog.Web.csproj +++ b/src/TerribleDev.Blog.Web/TerribleDev.Blog.Web.csproj @@ -40,4 +40,8 @@ + + + + diff --git a/src/TerribleDev.Blog.Web/Views/Tags/AllTags.cshtml b/src/TerribleDev.Blog.Web/Views/Tags/AllTags.cshtml index 881fe7e..c9084d3 100644 --- a/src/TerribleDev.Blog.Web/Views/Tags/AllTags.cshtml +++ b/src/TerribleDev.Blog.Web/Views/Tags/AllTags.cshtml @@ -1,13 +1,13 @@ -@model Dictionary> +@model Dictionary> @{ ViewData["Title"] = "all-tags"; }

All Tags

-@foreach (var tag in Model.Keys) -{ - @tag -} + @foreach (var tag in Model.Keys) + { + @tag + } @section Head {