From 6517d260cdbe5f6fde5320e64312d33c617205a4 Mon Sep 17 00:00:00 2001 From: "Daniel J. Summers" Date: Thu, 9 Jun 2022 20:35:09 -0400 Subject: [PATCH] Add post template field --- src/MyWebLog.Domain/DataTypes.fs | 4 ++++ src/MyWebLog.Domain/ViewModels.fs | 4 ++++ src/MyWebLog/Handlers/Post.fs | 7 +++++-- src/MyWebLog/Handlers/Routes.fs | 2 +- src/MyWebLog/appsettings.json | 2 +- src/admin-theme/post-edit.liquid | 10 ++++++++++ 6 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/MyWebLog.Domain/DataTypes.fs b/src/MyWebLog.Domain/DataTypes.fs index 4d9e4bf..94bcde9 100644 --- a/src/MyWebLog.Domain/DataTypes.fs +++ b/src/MyWebLog.Domain/DataTypes.fs @@ -178,6 +178,9 @@ type Post = /// The instant on which the post was last updated updatedOn : DateTime + /// The template to use in displaying the post + template : string option + /// The text of the post in HTML (ready to display) format text : string @@ -211,6 +214,7 @@ module Post = publishedOn = None updatedOn = DateTime.MinValue text = "" + template = None categoryIds = [] tags = [] metadata = [] diff --git a/src/MyWebLog.Domain/ViewModels.fs b/src/MyWebLog.Domain/ViewModels.fs index 38d554c..7f17ea4 100644 --- a/src/MyWebLog.Domain/ViewModels.fs +++ b/src/MyWebLog.Domain/ViewModels.fs @@ -376,6 +376,9 @@ type EditPostModel = /// The tags for the post tags : string + /// The template used to display the post + template : string + /// The category IDs for the post categoryIds : string[] @@ -413,6 +416,7 @@ type EditPostModel = source = MarkupText.sourceType latest.text text = MarkupText.text latest.text tags = String.Join (", ", post.tags) + template = defaultArg post.template "" categoryIds = post.categoryIds |> List.map CategoryId.toString |> Array.ofList status = PostStatus.toString post.status doPublish = false diff --git a/src/MyWebLog/Handlers/Post.fs b/src/MyWebLog/Handlers/Post.fs index 4141f8e..2b3078e 100644 --- a/src/MyWebLog/Handlers/Post.fs +++ b/src/MyWebLog/Handlers/Post.fs @@ -231,8 +231,9 @@ let edit postId : HttpHandler = fun next ctx -> task { } match result with | Some (title, post) -> - let! cats = Data.Category.findAllForView webLog.id conn - let model = EditPostModel.fromPost webLog post + let! cats = Data.Category.findAllForView webLog.id conn + let! templates = templatesForTheme ctx "post" + let model = EditPostModel.fromPost webLog post return! Hash.FromAnonymousObject {| csrf = csrfToken ctx @@ -240,6 +241,7 @@ let edit postId : HttpHandler = fun next ctx -> task { metadata = Array.zip model.metaNames model.metaValues |> Array.mapi (fun idx (name, value) -> [| string idx; name; value |]) page_title = title + templates = templates categories = cats |} |> viewForTheme "admin" "post-edit" next ctx @@ -322,6 +324,7 @@ let save : HttpHandler = fun next ctx -> task { |> Seq.filter (fun it -> it <> "") |> Seq.sort |> List.ofSeq + template = match model.template.Trim () with "" -> None | tmpl -> Some tmpl categoryIds = model.categoryIds |> Array.map CategoryId |> List.ofArray status = if model.doPublish then Published else post.status metadata = Seq.zip model.metaNames model.metaValues diff --git a/src/MyWebLog/Handlers/Routes.fs b/src/MyWebLog/Handlers/Routes.fs index 59b8527..379df98 100644 --- a/src/MyWebLog/Handlers/Routes.fs +++ b/src/MyWebLog/Handlers/Routes.fs @@ -32,7 +32,7 @@ module CatchAll = debug (fun () -> $"Found post by permalink") let model = Post.preparePostList webLog [ post ] Post.ListType.SinglePost "" 1 1 ctx conn |> await model.Add ("page_title", post.title) - yield fun next ctx -> themedView "single-post" next ctx model + yield fun next ctx -> themedView (defaultArg post.template "single-post") next ctx model | None -> () // Current page match Data.Page.findByPermalink permalink webLog.id conn |> await with diff --git a/src/MyWebLog/appsettings.json b/src/MyWebLog/appsettings.json index 55e93bc..0e6f2ea 100644 --- a/src/MyWebLog/appsettings.json +++ b/src/MyWebLog/appsettings.json @@ -3,7 +3,7 @@ "hostname": "data02.bitbadger.solutions", "database": "myWebLog_dev" }, - "Generator": "myWebLog 2.0-alpha35", + "Generator": "myWebLog 2.0-alpha36", "Logging": { "LogLevel": { "MyWebLog.Handlers": "Debug" diff --git a/src/admin-theme/post-edit.liquid b/src/admin-theme/post-edit.liquid index 2f7a11b..d36161e 100644 --- a/src/admin-theme/post-edit.liquid +++ b/src/admin-theme/post-edit.liquid @@ -127,6 +127,16 @@ {% endif %}
+
+ + +
Categories {% for cat in categories %}