Add metadata support

- Begin WIP on Bit Badger theme
This commit is contained in:
2022-04-25 13:36:16 -04:00
parent fa20122f20
commit f1249440b1
35 changed files with 558 additions and 13 deletions

View File

@@ -1,6 +1,7 @@
namespace MyWebLog
open System
open MyWebLog
/// A category under which a post may be identified
[<CLIMutable; NoComparison; NoEquality>]
@@ -119,6 +120,9 @@ type Page =
/// The current text of the page
text : string
/// Metadata for this page
metadata : MetaItem list
/// Permalinks at which this page may have been previously served (useful for migrated content)
priorPermalinks : Permalink list
@@ -141,6 +145,7 @@ module Page =
showInPageList = false
template = None
text = ""
metadata = []
priorPermalinks = []
revisions = []
}
@@ -182,6 +187,9 @@ type Post =
/// The tags for the post
tags : string list
/// Metadata for the post
metadata : MetaItem list
/// Permalinks at which this post may have been previously served (useful for migrated content)
priorPermalinks : Permalink list
@@ -205,6 +213,7 @@ module Post =
text = ""
categoryIds = []
tags = []
metadata = []
priorPermalinks = []
revisions = []
}

View File

@@ -98,7 +98,14 @@ type MetaItem =
value : string
}
/// Functions to support metadata items
module MetaItem =
/// An empty metadata item
let empty =
{ name = ""; value = "" }
/// A revision of a page or post
[<CLIMutable; NoComparison; NoEquality>]
type Revision =

View File

@@ -1,7 +1,6 @@
namespace MyWebLog.ViewModels
open System
open System.Collections.Generic
open MyWebLog
/// Details about a category, used to display category lists
@@ -136,13 +135,21 @@ type EditPageModel =
/// The text of the page
text : string
/// Names of metadata items
metaNames : string[]
/// Values of metadata items
metaValues : string[]
}
/// Create an edit model from an existing page
static member fromPage (page : Page) =
let latest =
match page.revisions |> List.sortByDescending (fun r -> r.asOf) |> List.tryHead with
| Some rev -> rev
| None -> Revision.empty
let page = if page.metadata |> List.isEmpty then { page with metadata = [ MetaItem.empty ] } else page
{ pageId = PageId.toString page.id
title = page.title
permalink = Permalink.toString page.permalink
@@ -150,6 +157,8 @@ type EditPageModel =
isShownInPageList = page.showInPageList
source = MarkupText.sourceType latest.text
text = MarkupText.text latest.text
metaNames = page.metadata |> List.map (fun m -> m.name) |> Array.ofList
metaValues = page.metadata |> List.map (fun m -> m.value) |> Array.ofList
}
@@ -182,6 +191,12 @@ type EditPostModel =
/// Whether this post should be published
doPublish : bool
/// Names of metadata items
metaNames : string[]
/// Values of metadata items
metaValues : string[]
}
/// Create an edit model from an existing past
static member fromPost (post : Post) =
@@ -189,15 +204,18 @@ type EditPostModel =
match post.revisions |> List.sortByDescending (fun r -> r.asOf) |> List.tryHead with
| Some rev -> rev
| None -> Revision.empty
{ postId = PostId.toString post.id
title = post.title
permalink = Permalink.toString post.permalink
source = MarkupText.sourceType latest.text
text = MarkupText.text latest.text
tags = String.Join (", ", post.tags)
categoryIds = post.categoryIds |> List.map CategoryId.toString |> Array.ofList
status = PostStatus.toString post.status
doPublish = false
let post = if post.metadata |> List.isEmpty then { post with metadata = [ MetaItem.empty ] } else post
{ postId = PostId.toString post.id
title = post.title
permalink = Permalink.toString post.permalink
source = MarkupText.sourceType latest.text
text = MarkupText.text latest.text
tags = String.Join (", ", post.tags)
categoryIds = post.categoryIds |> List.map CategoryId.toString |> Array.ofList
status = PostStatus.toString post.status
doPublish = false
metaNames = post.metadata |> List.map (fun m -> m.name) |> Array.ofList
metaValues = post.metadata |> List.map (fun m -> m.value) |> Array.ofList
}
@@ -251,6 +269,9 @@ type PostListItem =
/// Tags for the post
tags : string list
/// Metadata for the post
meta : MetaItem list
}
/// Create a post list item from a post
@@ -265,6 +286,7 @@ type PostListItem =
text = post.text
categoryIds = post.categoryIds |> List.map CategoryId.toString
tags = post.tags
meta = post.metadata
}