Page / Post edit pages work
Category in work
This commit is contained in:
@@ -53,22 +53,26 @@ type PageModule (data : IMyWebLogData, clock : IClock) as this =
|
||||
let pageId = parameters.["id"].ToString ()
|
||||
let form = this.Bind<EditPageForm> ()
|
||||
let now = clock.GetCurrentInstant().ToUnixTimeTicks ()
|
||||
match pageId with "new" -> Some Page.Empty | _ -> tryFindPage data this.WebLog.Id pageId
|
||||
match pageId with "new" -> Some Page.Empty | _ -> tryFindPage data this.WebLog.Id pageId
|
||||
|> function
|
||||
| Some p ->
|
||||
let page = match pageId with "new" -> { p with WebLogId = this.WebLog.Id } | _ -> p
|
||||
let pId = { p with
|
||||
Title = form.Title
|
||||
Permalink = form.Permalink
|
||||
PublishedOn = match pageId with "new" -> now | _ -> page.PublishedOn
|
||||
UpdatedOn = now
|
||||
Text = match form.Source with
|
||||
| RevisionSource.Markdown -> (* Markdown.TransformHtml *) form.Text
|
||||
| _ -> form.Text
|
||||
Revisions = { AsOf = now
|
||||
SourceType = form.Source
|
||||
Text = form.Text } :: page.Revisions }
|
||||
|> savePage data
|
||||
let pId =
|
||||
{ p with
|
||||
Title = form.Title
|
||||
Permalink = form.Permalink
|
||||
PublishedOn = match pageId with "new" -> now | _ -> page.PublishedOn
|
||||
UpdatedOn = now
|
||||
ShowInPageList = form.ShowInPageList
|
||||
Text = match form.Source with
|
||||
| RevisionSource.Markdown -> (* Markdown.TransformHtml *) form.Text
|
||||
| _ -> form.Text
|
||||
Revisions = { AsOf = now
|
||||
SourceType = form.Source
|
||||
Text = form.Text
|
||||
} :: page.Revisions
|
||||
}
|
||||
|> savePage data
|
||||
let model = MyWebLogModel (this.Context, this.WebLog)
|
||||
{ UserMessage.Empty with
|
||||
Level = Level.Info
|
||||
|
||||
@@ -269,7 +269,7 @@ type PostModule(data : IMyWebLogData, clock : IClock) as this =
|
||||
match postId with "new" -> Some Post.Empty | _ -> tryFindPost data this.WebLog.Id postId
|
||||
|> function
|
||||
| Some p ->
|
||||
let justPublished = p.PublishedOn = int64 0 && form.PublishNow
|
||||
let justPublished = p.PublishedOn = 0L && form.PublishNow
|
||||
let post = match postId with
|
||||
| "new" -> { p with
|
||||
WebLogId = this.WebLog.Id
|
||||
@@ -281,7 +281,7 @@ type PostModule(data : IMyWebLogData, clock : IClock) as this =
|
||||
Status = match form.PublishNow with true -> PostStatus.Published | _ -> PostStatus.Draft
|
||||
Title = form.Title
|
||||
Permalink = form.Permalink
|
||||
PublishedOn = match justPublished with true -> now | _ -> int64 0
|
||||
PublishedOn = match justPublished with true -> now | _ -> post.PublishedOn
|
||||
UpdatedOn = now
|
||||
Text = match form.Source with
|
||||
| RevisionSource.Markdown -> (* Markdown.TransformHtml *) form.Text
|
||||
@@ -289,6 +289,7 @@ type PostModule(data : IMyWebLogData, clock : IClock) as this =
|
||||
CategoryIds = Array.toList form.Categories
|
||||
Tags = form.Tags.Split ','
|
||||
|> Seq.map (fun t -> t.Trim().ToLowerInvariant ())
|
||||
|> Seq.sort
|
||||
|> Seq.toList
|
||||
Revisions = { AsOf = now
|
||||
SourceType = form.Source
|
||||
|
||||
@@ -220,6 +220,8 @@ type CategoryEditModel (ctx, webLog, category) =
|
||||
inherit MyWebLogModel (ctx, webLog)
|
||||
/// The form with the category information
|
||||
member val Form = CategoryForm (category) with get, set
|
||||
/// The category being edited
|
||||
member val Category = category
|
||||
/// The categories
|
||||
member val Categories : IndentedCategory list = [] with get, set
|
||||
|
||||
@@ -336,9 +338,15 @@ type PostForDisplay (webLog : WebLog, post : Post) =
|
||||
/// The time zone for the web log to which this post belongs
|
||||
member this.TimeZone = webLog.TimeZone
|
||||
/// The date the post was published
|
||||
member this.PublishedDate = FormatDateTime.longDate this.TimeZone this.Post.PublishedOn
|
||||
member this.PublishedDate =
|
||||
match this.Post.Status with
|
||||
| PostStatus.Published -> FormatDateTime.longDate this.TimeZone this.Post.PublishedOn
|
||||
| _ -> FormatDateTime.longDate this.TimeZone this.Post.UpdatedOn
|
||||
/// The time the post was published
|
||||
member this.PublishedTime = FormatDateTime.time this.TimeZone this.Post.PublishedOn
|
||||
member this.PublishedTime =
|
||||
match this.Post.Status with
|
||||
| PostStatus.Published -> FormatDateTime.time this.TimeZone this.Post.PublishedOn
|
||||
| _ -> FormatDateTime.time this.TimeZone this.Post.UpdatedOn
|
||||
/// Tags
|
||||
member this.Tags =
|
||||
match List.length this.Post.Tags with
|
||||
@@ -389,14 +397,17 @@ type EditPostForm () =
|
||||
/// The selected category Ids for the post
|
||||
member val Categories : string[] = [||] with get, set
|
||||
/// Whether the post should be published
|
||||
member val PublishNow = true with get, set
|
||||
member val PublishNow = false with get, set
|
||||
|
||||
/// Fill the form with applicable values from a post
|
||||
member this.ForPost (post : Post) =
|
||||
this.Title <- post.Title
|
||||
this.Permalink <- post.Permalink
|
||||
this.Tags <- List.reduce (fun acc x -> sprintf "%s, %s" acc x) post.Tags
|
||||
this.Tags <- match List.isEmpty post.Tags with
|
||||
| true -> ""
|
||||
| _ -> List.reduce (fun acc x -> sprintf "%s, %s" acc x) post.Tags
|
||||
this.Categories <- List.toArray post.CategoryIds
|
||||
this.PublishNow <- post.Status = PostStatus.Published || "new" = post.Id
|
||||
this
|
||||
|
||||
/// Fill the form with applicable values from a revision
|
||||
@@ -412,7 +423,7 @@ type DisplayCategory = {
|
||||
Name : string
|
||||
Description : string
|
||||
IsChecked : bool
|
||||
}
|
||||
}
|
||||
with
|
||||
/// Create a display category
|
||||
static member Create (cat : Category, indent) isChecked =
|
||||
@@ -442,6 +453,8 @@ type EditPostModel (ctx, webLog, post, revision) =
|
||||
member this.PublishedDate = this.DisplayLongDate this.Post.PublishedOn
|
||||
/// The published time
|
||||
member this.PublishedTime = this.DisplayTime this.Post.PublishedOn
|
||||
/// The "checked" attribute for the Publish Now box
|
||||
member this.PublishNowCheckedAttr = match this.Form.PublishNow with true -> "checked=\"checked\"" | _ -> ""
|
||||
|
||||
|
||||
// ---- User models ----
|
||||
|
||||
Reference in New Issue
Block a user