Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Miscellaneous updates #28

Merged
merged 4 commits into from Jul 17, 2023
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
18 changes: 11 additions & 7 deletions src/App.fs
Expand Up @@ -8,12 +8,13 @@ type Mode =

let private render stage =
promise {
let title = "Blog Title"
let siteName = "Blog Title"
let description = "Blog Description"
let copyright = "2023 krymtkts"

let navi =
[ Title
{ text = title
{ text = siteName
path = "/blog-fable/index.html"
sitemap = Yes "1.0" }
Link
Expand Down Expand Up @@ -42,8 +43,12 @@ let private render stage =
| Production -> None, []

let site: FixedSiteContent =
{ navbar = navbar
title = title
{ lang = "ja"
navbar = navbar
name = siteName
title = siteName
description = description
url = "https://krymtkts.github.io/blog-fable"
copyright = copyright
favicon = "/blog-fable/img/favicon.ico"
devInjection = devInjection }
Expand Down Expand Up @@ -88,15 +93,14 @@ let private render stage =

do!
renderFeed
{ title = title
description = "Blog Description"
{ title = siteName
description = description
link = "https://krymtkts.github.io/blog-fable"
generator = "blog-fable"
postRoot = "/posts"
posts = metaPosts }
"docs/blog-fable/feed.xml"


do!
copyResources
<| [ ("contents/img/favicon.ico", "docs/blog-fable/img/favicon.ico") ]
Expand Down
89 changes: 57 additions & 32 deletions src/Common.fs
Expand Up @@ -40,7 +40,12 @@ module private Util =
| Some s -> mdToHtml s
| None -> ""

$"""<a href="{ref}">{text}</a>"""
let title =
match title with
| null -> text
| _ -> title

$"""<a href="{ref}" title="{title}">{text}</a>"""

let mops = !!{| heading = heading; link = link |}

Expand Down Expand Up @@ -142,7 +147,11 @@ module Parser =
let parseReact el = ReactDOMServer.renderToString el

/// Parses a React element invoking ReactDOMServer.renderToStaticMarkup
let parseReactStatic el = ReactDOMServer.renderToStaticMarkup el
let parseReactStaticMarkup el = ReactDOMServer.renderToStaticMarkup el

let parseReactStaticHtml el =
@"<!DOCTYPE html>"
+ ReactDOMServer.renderToStaticMarkup el

[<AutoOpen>]
module Misc =
Expand Down Expand Up @@ -176,8 +185,12 @@ module Misc =
date: string }

type FixedSiteContent =
{ navbar: ReactElement
{ lang: string
navbar: ReactElement
name: string
title: string
description: string
url: string
copyright: string
favicon: string
devInjection: string option }
Expand All @@ -195,35 +208,47 @@ module Misc =
prop.crossOrigin.anonymous
prop.referrerPolicy.noReferrer ]

Html.html [ Html.head [ Html.title [ prop.text site.title ]
Html.meta [ prop.custom ("httpEquiv", "Content-Type")
prop.content "text/html; charset=utf-8" ]
Html.meta [ prop.name "viewport"
prop.content "width=device-width, initial-scale=1" ]
Html.link [ prop.rel "icon"
prop.href site.favicon ]
cssLink
"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/fontawesome.min.css"
"sha512-SgaqKKxJDQ/tAUAAXzvxZz33rmn7leYDYfBP+YoMRSENhf3zJyx3SBASt/OfeQwBHA1nxMis7mM3EV/oYT6Fdw=="
cssLink
"https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.4/css/bulma.min.css"
"sha512-HqxHUkJM0SYcbvxUw5P60SzdOTy/QVwA1JJrvaXJv4q7lmbDZCmZaqz01UPOaQveoxfYRv1tHozWGPMcuTBuvQ=="
cssLink
"https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/base16/solarized-dark.min.css"
"sha512-kBHeOXtsKtA97/1O3ebZzWRIwiWEOmdrylPrOo3D2+pGhq1m+1CroSOVErIlsqn1xmYowKfQNVDhsczIzeLpmg==" ]
Html.body [ Html.nav [ prop.className "tabs"
prop.children site.navbar ]
Html.main [ prop.className "container"
prop.children [ content ] ] ]
Html.footer [ prop.className "footer"
prop.children [ Html.div [ prop.className "container"
prop.text ($"Copyright © {site.copyright}") ] ] ]
match site.devInjection with
| Some src ->
Html.script [ prop.lang "javascript"
prop.type' "text/javascript"
prop.src src ]
| None -> null ]
Html.html [ prop.lang site.lang
prop.children [ Html.head [ Html.title [ prop.text site.title ]
Html.meta [ prop.charset "utf-8" ]
Html.meta [ prop.name "description"
prop.content site.description ]
Html.meta [ prop.name "viewport"
prop.content "width=device-width, initial-scale=1" ]
Html.meta [ prop.custom ("property", "og:site_name")
prop.content site.name ]
Html.meta [ prop.custom ("property", "og:title")
prop.content site.title ]
Html.meta [ prop.custom ("property", "og:description")
prop.content site.description ]
Html.meta [ prop.custom ("property", "og:url")
prop.content site.url ]
Html.link [ prop.rel "canonical"
prop.href site.url ]
Html.link [ prop.rel "icon"
prop.href site.favicon ]
cssLink
"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/fontawesome.min.css"
"sha512-SgaqKKxJDQ/tAUAAXzvxZz33rmn7leYDYfBP+YoMRSENhf3zJyx3SBASt/OfeQwBHA1nxMis7mM3EV/oYT6Fdw=="
krymtkts marked this conversation as resolved.
Show resolved Hide resolved
cssLink
"https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.4/css/bulma.min.css"
"sha512-HqxHUkJM0SYcbvxUw5P60SzdOTy/QVwA1JJrvaXJv4q7lmbDZCmZaqz01UPOaQveoxfYRv1tHozWGPMcuTBuvQ=="
cssLink
"https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/base16/solarized-dark.min.css"
"sha512-kBHeOXtsKtA97/1O3ebZzWRIwiWEOmdrylPrOo3D2+pGhq1m+1CroSOVErIlsqn1xmYowKfQNVDhsczIzeLpmg==" ]
Html.body [ Html.nav [ prop.className "tabs"
prop.children site.navbar ]
Html.main [ prop.className "container"
prop.children [ content ] ] ]
Html.footer [ prop.className "footer"
prop.children [ Html.div [ prop.className "container"
prop.text ($"Copyright © {site.copyright}") ] ] ]
match site.devInjection with
| Some src ->
Html.script [ prop.lang "javascript"
prop.type' "text/javascript"
prop.src src ]
| None -> null ] ]

let getDistPath (source: string) (dir: string) =
Directory.leaf source
Expand Down
50 changes: 37 additions & 13 deletions src/Generator.fs
Expand Up @@ -309,6 +309,14 @@ module Page =
let tagToElement tag =
Component.liAWithClass $"{tagDist}/{tag}.html" tag [ "tag" ]

let leaf = IO.leaf dist

// TODO: add root path to fixed site content for removing this condition.
let path =
match leaf with
| "index.html" -> leaf
| _ -> $"{dist |> IO.parent |> IO.leaf}/{leaf}"
krymtkts marked this conversation as resolved.
Show resolved Hide resolved

let fm, content, page =
m
|> Parser.parseMarkdownAsReactEl tagToElement
Expand All @@ -321,9 +329,13 @@ module Page =
let content = wrapContent c

fm,
content |> Parser.parseReactStatic,
frame { site with title = title } content
|> Parser.parseReactStatic
content |> Parser.parseReactStaticMarkup,
frame
{ site with
title = title
url = $"{site.url}/{path}" }
content
|> Parser.parseReactStaticHtml


printfn $"Writing {dist}..."
Expand All @@ -350,7 +362,7 @@ module Page =
content = content
layout = layout
source = source
leaf = IO.leaf dist
leaf = leaf
date = date }
}

Expand Down Expand Up @@ -394,8 +406,11 @@ module Page =
let content =
archives
|> wrapContent
|> frame { site with title = $"{site.title} - Archives" }
|> Parser.parseReactStatic
|> frame
{ site with
title = $"{site.title} - Archives"
url = $"{site.url}/{IO.leaf dist}" }
|> Parser.parseReactStaticHtml

printfn $"Writing archives {dist}..."

Expand All @@ -413,8 +428,11 @@ module Page =
let content =
tagsContent
|> wrapContent
|> frame { site with title = title }
|> Parser.parseReactStatic
|> frame
{ site with
title = title
url = $"{site.url}/{IO.leaf dist}" }
|> Parser.parseReactStaticHtml

printfn $"Writing tags {dist}..."

Expand All @@ -424,14 +442,17 @@ module Page =
tagPageContents
|> List.map (fun (tag, tagPageContent) ->
let dist = IO.resolve ($"""{dist.Replace(".html", "")}/{tag}.html""")

let parent = dist |> IO.parent |> IO.leaf
printfn $"Writing tag {dist}..."

let content =
tagPageContent
|> wrapContent
|> frame { site with title = $"{title} - {tag}" }
|> Parser.parseReactStatic
|> frame
{ site with
title = $"{title} - {tag}"
url = $"{site.url}/{parent}/{IO.leaf dist}" }
|> Parser.parseReactStaticHtml

IO.writeFile dist content |> Promise.map ignore)
|> Promise.all
Expand All @@ -447,8 +468,11 @@ module Page =
let content =
generate404
|> wrapContent
|> frame { site with title = $"{site.title} - 404" }
|> Parser.parseReactStatic
|> frame
{ site with
title = $"{site.title} - 404"
url = $"{site.url}/{IO.leaf dist}" }
|> Parser.parseReactStaticHtml

printfn $"Writing 404 {dist}..."

Expand Down