From 0d54fc2ec3c4b69e630d0ba0a7f96063fd5851be Mon Sep 17 00:00:00 2001 From: "Daniel J. Summers" Date: Fri, 11 Nov 2016 14:44:09 -0600 Subject: [PATCH] Admin tweaks plus - Version now reports the correct version - Post edit properly renders existing selected categories as checked, and uses the description in the title attribute if it is present - Created light/dark transparent logos Ready to test the functionality of the admin area next... --- src/MyWebLog.App/App.fs | 2 +- src/MyWebLog.App/AssemblyInfo.fs | 4 +- src/MyWebLog.App/PostModule.fs | 31 +++++---- src/MyWebLog.App/ViewModels.fs | 59 +++++++++++++----- src/MyWebLog.Data.RethinkDB/Post.fs | 8 ++- src/MyWebLog/content/logo-dark.png | Bin 0 -> 3362 bytes src/MyWebLog/content/logo-light.png | Bin 0 -> 4135 bytes src/MyWebLog/project.json | 2 +- .../views/admin/content}/tinymce-init.js | 0 src/myWebLog/content/styles/admin.css | 5 -- src/myWebLog/views/admin/admin-layout.html | 2 +- src/myWebLog/views/admin/content/logo.png | Bin 5017 -> 0 bytes src/myWebLog/views/admin/dashboard.html | 9 ++- src/myWebLog/views/admin/page/edit.html | 4 +- src/myWebLog/views/admin/post/edit.html | 18 ++---- .../themes/default/content/footer-logo.png | Bin 2257 -> 0 bytes src/myWebLog/views/themes/default/footer.html | 2 +- 17 files changed, 81 insertions(+), 65 deletions(-) create mode 100644 src/MyWebLog/content/logo-dark.png create mode 100644 src/MyWebLog/content/logo-light.png rename src/{myWebLog/content/scripts => MyWebLog/views/admin/content}/tinymce-init.js (100%) delete mode 100644 src/myWebLog/content/styles/admin.css delete mode 100644 src/myWebLog/views/admin/content/logo.png delete mode 100644 src/myWebLog/views/themes/default/content/footer-logo.png diff --git a/src/MyWebLog.App/App.fs b/src/MyWebLog.App/App.fs index 4454307..5eba1cc 100644 --- a/src/MyWebLog.App/App.fs +++ b/src/MyWebLog.App/App.fs @@ -130,7 +130,7 @@ type MyWebLogBootstrapper() = let version = - let v = typeof.GetType().GetTypeInfo().Assembly.GetName().Version + let v = typeof.GetTypeInfo().Assembly.GetName().Version match v.Build with | 0 -> match v.Minor with 0 -> string v.Major | _ -> sprintf "%d.%d" v.Major v.Minor | _ -> sprintf "%d.%d.%d" v.Major v.Minor v.Build diff --git a/src/MyWebLog.App/AssemblyInfo.fs b/src/MyWebLog.App/AssemblyInfo.fs index 24c3209..0fb972b 100644 --- a/src/MyWebLog.App/AssemblyInfo.fs +++ b/src/MyWebLog.App/AssemblyInfo.fs @@ -1,4 +1,4 @@ -namespace myWebLog.Web.AssemblyInfo +namespace MyWebLog.AssemblyInfo open System.Reflection open System.Runtime.CompilerServices @@ -14,7 +14,7 @@ open System.Runtime.InteropServices [] [] [] -[] +[] [] do diff --git a/src/MyWebLog.App/PostModule.fs b/src/MyWebLog.App/PostModule.fs index 531e660..0a241e2 100644 --- a/src/MyWebLog.App/PostModule.fs +++ b/src/MyWebLog.App/PostModule.fs @@ -103,18 +103,18 @@ type PostModule(data : IMyWebLogData, clock : IClock) as this = upcast this.Response.FromStream(stream, sprintf "application/%s+xml" format) *) do - this.Get ("/", fun _ -> this.HomePage ()) - this.Get ("/{permalink*}", fun parms -> this.CatchAll (downcast parms)) - this.Get ("/posts/page/{page:int}", fun parms -> this.PublishedPostsPage (getPage <| downcast parms)) - this.Get ("/category/{slug}", fun parms -> this.CategorizedPosts (downcast parms)) - this.Get ("/category/{slug}/page/{page:int}", fun parms -> this.CategorizedPosts (downcast parms)) - this.Get ("/tag/{tag}", fun parms -> this.TaggedPosts (downcast parms)) - this.Get ("/tag/{tag}/page/{page:int}", fun parms -> this.TaggedPosts (downcast parms)) - this.Get ("/feed", fun _ -> this.Feed ()) - this.Get ("/posts/list", fun _ -> this.PostList 1) - this.Get ("/posts/list/page/{page:int}", fun parms -> this.PostList (getPage <| downcast parms)) - this.Get ("/post/{postId}/edit", fun parms -> this.EditPost (downcast parms)) - this.Post ("/post/{postId}/edit", fun parms -> this.SavePost (downcast parms)) + this.Get ("/", fun _ -> this.HomePage ()) + this.Get ("/{permalink*}", fun p -> this.CatchAll (downcast p)) + this.Get ("/posts/page/{page:int}", fun p -> this.PublishedPostsPage (getPage <| downcast p)) + this.Get ("/category/{slug}", fun p -> this.CategorizedPosts (downcast p)) + this.Get ("/category/{slug}/page/{page:int}", fun p -> this.CategorizedPosts (downcast p)) + this.Get ("/tag/{tag}", fun p -> this.TaggedPosts (downcast p)) + this.Get ("/tag/{tag}/page/{page:int}", fun p -> this.TaggedPosts (downcast p)) + this.Get ("/feed", fun _ -> this.Feed ()) + this.Get ("/posts/list", fun _ -> this.PostList 1) + this.Get ("/posts/list/page/{page:int}", fun p -> this.PostList (getPage <| downcast p)) + this.Get ("/post/{postId}/edit", fun p -> this.EditPost (downcast p)) + this.Post ("/post/{postId}/edit", fun p -> this.SavePost (downcast p)) // ---- Display posts to users ---- @@ -253,11 +253,10 @@ type PostModule(data : IMyWebLogData, clock : IClock) as this = | None -> Revision.Empty let model = EditPostModel (this.Context, this.WebLog, post, rev) model.Categories <- findAllCategories data this.WebLog.Id - |> List.map (fun cat -> string (fst cat).Id, - sprintf "%s%s" (String.replicate (snd cat) "     ") - (fst cat).Name) + |> List.map (fun cat -> + DisplayCategory.Create cat (post.CategoryIds |> List.contains (fst cat).Id)) model.PageTitle <- Strings.get <| match post.Id with "new" -> "AddNewPost" | _ -> "EditPost" - upcast this.View.["admin/post/edit"] + upcast this.View.["admin/post/edit", model] | _ -> this.NotFound () /// Save a post diff --git a/src/MyWebLog.App/ViewModels.fs b/src/MyWebLog.App/ViewModels.fs index 65c8252..675d9e4 100644 --- a/src/MyWebLog.App/ViewModels.fs +++ b/src/MyWebLog.App/ViewModels.fs @@ -9,7 +9,7 @@ open Newtonsoft.Json open NodaTime open NodaTime.Text open System - +open System.Net /// Levels for a user message [] @@ -90,7 +90,7 @@ module FormatDateTime = /// Parent view model for all myWebLog views -type MyWebLogModel (ctx : NancyContext, webLog : WebLog) = +type MyWebLogModel (ctx : NancyContext, webLog : WebLog) as this = /// Get the messages from the session let getMessages () = @@ -100,6 +100,20 @@ type MyWebLogModel (ctx : NancyContext, webLog : WebLog) = | _ -> ctx.Request.Session.Delete Keys.Messages msg + /// Generate a footer logo with the given scheme + let footerLogo scheme = + seq { + yield sprintf "\"myWebLog\"" + } + |> Seq.reduce (+) + /// The web log for this request member this.WebLog = webLog /// The subtitle for the webLog (SSVE can't do IsSome that deep) @@ -134,19 +148,11 @@ type MyWebLogModel (ctx : NancyContext, webLog : WebLog) = | None -> this.WebLog.Name | pt -> sprintf "%s | %s" pt this.WebLog.Name - /// An image with the version and load time in the tool tip - member this.FooterLogo = - seq { - yield "\"myWebLog\"" - } - |> Seq.reduce (+) + /// An image with the version and load time in the tool tip (using light text) + member this.FooterLogoLight = footerLogo "light" + + /// An image with the version and load time in the tool tip (using dark text) + member this.FooterLogoDark = footerLogo "dark" // ---- Admin models ---- @@ -399,6 +405,27 @@ type EditPostForm () = this.Text <- rev.Text this +/// Category information for display +type DisplayCategory = { + Id : string + Indent : string + Name : string + Description : string + IsChecked : bool + } +with + /// Create a display category + static member Create (cat : Category, indent) isChecked = + { Id = cat.Id + Indent = String.replicate indent "     " + Name = WebUtility.HtmlEncode cat.Name + IsChecked = isChecked + Description = WebUtility.HtmlEncode (match cat.Description with Some d -> d | _ -> cat.Name) + } + /// The "checked" attribute for this category + member this.CheckedAttr + with get() = match this.IsChecked with true -> "checked=\"checked\"" | _ -> "" + /// View model for the edit post page type EditPostModel (ctx, webLog, post, revision) = inherit MyWebLogModel (ctx, webLog) @@ -408,7 +435,7 @@ type EditPostModel (ctx, webLog, post, revision) = /// The post being edited member val Post = post with get, set /// The categories to which the post may be assigned - member val Categories : (string * string) list = [] with get, set + member val Categories : DisplayCategory list = [] with get, set /// Whether the post is currently published member this.IsPublished = PostStatus.Published = this.Post.Status /// The published date diff --git a/src/MyWebLog.Data.RethinkDB/Post.fs b/src/MyWebLog.Data.RethinkDB/Post.fs index da4f62a..9eb5eaa 100644 --- a/src/MyWebLog.Data.RethinkDB/Post.fs +++ b/src/MyWebLog.Data.RethinkDB/Post.fs @@ -100,9 +100,13 @@ let tryFindPost conn webLogId postId : Post option = let! p = r.Table(Table.Post) .Get(postId) - .Filter(ReqlFunction1 (fun p -> upcast p.["WebLogId"].Eq webLogId)) .RunAtomAsync conn - return match box p with null -> None | post -> Some <| unbox post + return + match box p with + | null -> None + | pst -> + let post : Post = unbox pst + match post.WebLogId = webLogId with true -> Some post | _ -> None } |> Async.RunSynchronously diff --git a/src/MyWebLog/content/logo-dark.png b/src/MyWebLog/content/logo-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..19bdcca2af3095d7f18345a28fbf9c6da0363daa GIT binary patch literal 3362 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 l1PBlyK!5-N0tD!0_<#2
-
@Model.Generator
+
@Model.FooterLogoLight  
diff --git a/src/myWebLog/views/admin/content/logo.png b/src/myWebLog/views/admin/content/logo.png deleted file mode 100644 index bb6013e278a826bafac41f0016e7596a12bb6552..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5017 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 -
+

@Translate.Posts  @Model.Posts

@Translate.ListAll @@ -10,7 +10,7 @@ @Translate.AddNew

-
+

@Translate.Pages  @Model.Pages

@Translate.ListAll @@ -18,9 +18,7 @@ @Translate.AddNew

-
-
-
+

@Translate.Categories  @Model.Categories

@Translate.ListAll @@ -29,4 +27,5 @@

+
@EndSection diff --git a/src/myWebLog/views/admin/page/edit.html b/src/myWebLog/views/admin/page/edit.html index a87fe3c..081fbd3 100644 --- a/src/myWebLog/views/admin/page/edit.html +++ b/src/myWebLog/views/admin/page/edit.html @@ -12,7 +12,7 @@
-

@Translate.startingWith http://@Model.webLog.urlBase/

+

@Translate.startingWith http://@Model.WebLog.UrlBase/

@@ -48,7 +48,7 @@ @EndSection @Section['Scripts'] - + +