diff --git a/src/MyWebLog/Handlers/Helpers.fs b/src/MyWebLog/Handlers/Helpers.fs index 70e91bd..fda3f6d 100644 --- a/src/MyWebLog/Handlers/Helpers.fs +++ b/src/MyWebLog/Handlers/Helpers.fs @@ -69,7 +69,8 @@ open Giraffe.Htmx open Giraffe.ViewEngine /// htmx script tag -let private htmxScript = RenderView.AsString.htmlNode Htmx.Script.minified +let private htmxScript (webLog: WebLog) = + $"""""" /// Get the current user messages, and commit the session so that they are preserved let private getCurrentMessages ctx = task { @@ -91,7 +92,7 @@ let private generateViewContext messages viewCtx (ctx: HttpContext) = CurrentPage = ctx.Request.Path.Value[1..] Messages = messages Generator = ctx.Generator - HtmxScript = htmxScript + HtmxScript = htmxScript ctx.WebLog IsAuthor = ctx.HasAccessLevel Author IsEditor = ctx.HasAccessLevel Editor IsWebLogAdmin = ctx.HasAccessLevel WebLogAdmin @@ -188,7 +189,7 @@ let viewForTheme themeId template next ctx (viewCtx: AppViewContext) = task { let forLayout = { updated with Content = Template.render contentTemplate updated ctx.Data } // ...then render that content with its layout match! Template.Cache.get themeId (if isHtmx ctx then "layout-partial" else "layout") ctx.Data with - | Ok layoutTemplate -> return! htmlString (Template.render layoutTemplate forLayout ctx.Data) next ctx + | Ok layoutTemplate -> return! htmlString (Template.render layoutTemplate forLayout ctx.Data) next ctx | Error message -> return! Error.server message next ctx | Error message -> return! Error.server message next ctx } diff --git a/src/MyWebLog/Template.fs b/src/MyWebLog/Template.fs index 3b1a7f2..feab8f1 100644 --- a/src/MyWebLog/Template.fs +++ b/src/MyWebLog/Template.fs @@ -164,9 +164,12 @@ let options () = let picker (value: FluidValue) = let item = value.ToObjectValue() :?> MetaItem if item.Name = name then Some item.Value else None - (input :?> ArrayValue).Values - |> Seq.tryPick picker - |> Option.defaultValue $"-- {name} not found --" + match input with + | :? NilValue -> $"-- {name} not found --" + | it -> + (it :?> ArrayValue).Values + |> Seq.tryPick picker + |> Option.defaultValue $"-- {name} not found --" |> sValue) it @@ -220,13 +223,11 @@ let parser = writer.WriteLine(feedLink app.WebLog.Name $"tag/{slug}/{app.WebLog.Rss.FeedName}") if app.IsPost then - let post = (* context.Environments[0].["model"] *) obj() :?> PostDisplay - let url = app.WebLog.AbsoluteUrl(Permalink post.Posts[0].Permalink) + let url = app.WebLog.AbsoluteUrl(Permalink app.Posts.Posts[0].Permalink) writer.WriteLine $"""{s}""" if app.IsPage then - let page = (* context.Environments[0].["page"] *) obj() :?> DisplayPage - let url = app.WebLog.AbsoluteUrl(Permalink page.Permalink) + let url = app.WebLog.AbsoluteUrl(Permalink app.Page.Permalink) writer.WriteLine $"""{s}""" ok ()) diff --git a/src/MyWebLog/ViewContext.fs b/src/MyWebLog/ViewContext.fs index 1f2ddbe..ee85af6 100644 --- a/src/MyWebLog/ViewContext.fs +++ b/src/MyWebLog/ViewContext.fs @@ -97,6 +97,10 @@ type AppViewContext = { /// The payload for this page as a PostDisplay member this.Posts = this.Payload :?> PostDisplay + + /// The model for this view (prior versions used model for the v3 payload) + member this.Model = + this.Payload /// An empty view context static member Empty =