V2 #1

Merged
danieljsummers merged 102 commits from v2 into main 2022-06-23 00:35:12 +00:00
4 changed files with 31 additions and 16 deletions
Showing only changes of commit 07a2c404d7 - Show all commits

View File

@ -724,6 +724,15 @@ module Theme =
resultOption; withRetryOptionDefault resultOption; withRetryOptionDefault
} }
/// Retrieve a theme by its ID, excluding the text of templates
let findByIdWithoutText (themeId : ThemeId) =
rethink<Theme> {
withTable Table.Theme
get themeId
merge (fun row -> r.HashMap ("templates", row["templates"].Without [| "text" |]))
resultOption; withRetryOptionDefault
}
/// Save a theme /// Save a theme
let save (theme : Theme) = let save (theme : Theme) =
rethink { rethink {

View File

@ -163,7 +163,8 @@ let editPage pgId : HttpHandler = fun next ctx -> task {
} }
match result with match result with
| Some (title, page) -> | Some (title, page) ->
let model = EditPageModel.fromPage page let model = EditPageModel.fromPage page
let! templates = templatesForTheme ctx "page"
return! return!
Hash.FromAnonymousObject {| Hash.FromAnonymousObject {|
csrf = csrfToken ctx csrf = csrfToken ctx
@ -171,7 +172,7 @@ let editPage pgId : HttpHandler = fun next ctx -> task {
metadata = Array.zip model.metaNames model.metaValues metadata = Array.zip model.metaNames model.metaValues
|> Array.mapi (fun idx (name, value) -> [| string idx; name; value |]) |> Array.mapi (fun idx (name, value) -> [| string idx; name; value |])
page_title = title page_title = title
templates = templatesForTheme ctx "page" templates = templates
|} |}
|> viewForTheme "admin" "page-edit" next ctx |> viewForTheme "admin" "page-edit" next ctx
| None -> return! Error.notFound next ctx | None -> return! Error.notFound next ctx

View File

@ -185,19 +185,20 @@ open System.Collections.Generic
open System.IO open System.IO
/// Get the templates available for the current web log's theme (in a key/value pair list) /// Get the templates available for the current web log's theme (in a key/value pair list)
let templatesForTheme (ctx : HttpContext) (typ : string) = let templatesForTheme (ctx : HttpContext) (typ : string) = backgroundTask {
seq { match! Data.Theme.findByIdWithoutText (ThemeId ctx.WebLog.themePath) ctx.Conn with
KeyValuePair.Create ("", $"- Default (single-{typ}) -") | Some theme ->
yield! return seq {
Path.Combine ("themes", ctx.WebLog.themePath) KeyValuePair.Create ("", $"- Default (single-{typ}) -")
|> Directory.EnumerateFiles yield!
|> Seq.filter (fun it -> it.EndsWith $"{typ}.liquid") theme.templates
|> Seq.map (fun it -> |> Seq.ofList
let parts = it.Split Path.DirectorySeparatorChar |> Seq.filter (fun it -> it.name.EndsWith $"-{typ}" && it.name <> $"single-{typ}")
let template = parts[parts.Length - 1].Replace (".liquid", "") |> Seq.map (fun it -> KeyValuePair.Create (it.name, it.name))
KeyValuePair.Create (template, template)) }
} |> Array.ofSeq
|> Array.ofSeq | None -> return [| KeyValuePair.Create ("", $"- Default (single-{typ}) -") |]
}
/// Get all authors for a list of posts as metadata items /// Get all authors for a list of posts as metadata items
let getAuthors (webLog : WebLog) (posts : Post list) conn = let getAuthors (webLog : WebLog) (posts : Post list) conn =

View File

@ -122,7 +122,11 @@ let importLinks args sp = task {
/// Load a theme from the given ZIP file /// Load a theme from the given ZIP file
let loadTheme (args : string[]) (sp : IServiceProvider) = task { let loadTheme (args : string[]) (sp : IServiceProvider) = task {
if args.Length > 1 then if args.Length > 1 then
match Handlers.Admin.getThemeName args[1] with let fileName =
match args[1].LastIndexOf Path.DirectorySeparatorChar with
| -1 -> args[1]
| it -> args[1][(it + 1)..]
match Handlers.Admin.getThemeName fileName with
| Some themeName -> | Some themeName ->
let conn = sp.GetRequiredService<IConnection> () let conn = sp.GetRequiredService<IConnection> ()
let clean = if args.Length > 2 then bool.Parse args[2] else true let clean = if args.Length > 2 then bool.Parse args[2] else true