Work on default theme

- Add caching for SQLite
This commit is contained in:
Daniel J. Summers 2022-06-21 21:45:01 -04:00
parent a4bdac7b55
commit cfc9472a2e
7 changed files with 109 additions and 112 deletions

View File

@ -26,6 +26,7 @@
<PackageReference Include="Giraffe" Version="6.0.0" /> <PackageReference Include="Giraffe" Version="6.0.0" />
<PackageReference Include="Giraffe.Htmx" Version="1.7.0" /> <PackageReference Include="Giraffe.Htmx" Version="1.7.0" />
<PackageReference Include="Giraffe.ViewEngine.Htmx" Version="1.7.0" /> <PackageReference Include="Giraffe.ViewEngine.Htmx" Version="1.7.0" />
<PackageReference Include="NeoSmart.Caching.Sqlite" Version="6.0.1" />
<PackageReference Include="RethinkDB.DistributedCache" Version="1.0.0-rc1" /> <PackageReference Include="RethinkDB.DistributedCache" Version="1.0.0-rc1" />
<PackageReference Update="FSharp.Core" Version="6.0.5" /> <PackageReference Update="FSharp.Core" Version="6.0.5" />
<PackageReference Include="System.ServiceModel.Syndication" Version="6.0.0" /> <PackageReference Include="System.ServiceModel.Syndication" Version="6.0.0" />

View File

@ -58,6 +58,7 @@ open Giraffe.EndpointRouting
open Microsoft.AspNetCore.Authentication.Cookies open Microsoft.AspNetCore.Authentication.Cookies
open Microsoft.AspNetCore.Builder open Microsoft.AspNetCore.Builder
open Microsoft.AspNetCore.HttpOverrides open Microsoft.AspNetCore.HttpOverrides
open NeoSmart.Caching.Sqlite
open RethinkDB.DistributedCache open RethinkDB.DistributedCache
[<EntryPoint>] [<EntryPoint>]
@ -97,17 +98,16 @@ let rec main args =
|> ignore |> ignore
| :? SQLiteData -> | :? SQLiteData ->
// ADO.NET connections are designed to work as per-request instantiation // ADO.NET connections are designed to work as per-request instantiation
builder.Services.AddScoped<SqliteConnection> (fun sp ->
let cfg = sp.GetRequiredService<IConfiguration> () let cfg = sp.GetRequiredService<IConfiguration> ()
builder.Services.AddScoped<SqliteConnection> (fun sp ->
let conn = new SqliteConnection (cfg.GetConnectionString "SQLite") let conn = new SqliteConnection (cfg.GetConnectionString "SQLite")
SQLiteData.setUpConnection conn |> Async.AwaitTask |> Async.RunSynchronously SQLiteData.setUpConnection conn |> Async.AwaitTask |> Async.RunSynchronously
conn) conn)
|> ignore |> ignore
builder.Services.AddScoped<IData, SQLiteData> () |> ignore builder.Services.AddScoped<IData, SQLiteData> () |> ignore
let log = sp.GetRequiredService<ILoggerFactory> () // Use SQLite for caching as well
let logger = log.CreateLogger "MyWebLog.StartUp" let cachePath = defaultArg (Option.ofObj (cfg.GetConnectionString "SQLiteCachePath")) "./session.db"
logger.LogWarning "Session caching is not yet implemented via SQLite; using memory cache for sessions" builder.Services.AddSqliteCache (fun o -> o.CachePath <- cachePath) |> ignore
builder.Services.AddDistributedMemoryCache () |> ignore
| _ -> () | _ -> ()
| None -> | None ->
invalidOp "There is no data configuration present; please add a RethinkDB section or LiteDB connection string" invalidOp "There is no data configuration present; please add a RethinkDB section or LiteDB connection string"

View File

@ -3,8 +3,6 @@
{% endif %} {% endif %}
<section class="container" aria-label="The posts for the page"> <section class="container" aria-label="The posts for the page">
{% for post in model.posts %} {% for post in model.posts %}
<div class="row">
<div class="col">
<article> <article>
<h1> <h1>
<a href="{{ post | relative_link }}" title="Permanent link to &quot;{{ post.title | escape }}&quot;"> <a href="{{ post | relative_link }}" title="Permanent link to &quot;{{ post.title | escape }}&quot;">
@ -23,10 +21,10 @@
<footer> <footer>
<p> <p>
{%- if category_count > 0 -%} {%- if category_count > 0 -%}
Categorized under: {{ cat_names | reverse | join: ", " }} Categorized under:
{%- for cat in post.category_ids -%} {% for cat in post.category_ids -%}
{%- assign this_cat = categories | where: "id", cat | first -%} {%- assign this_cat = categories | where: "id", cat | first -%}
{{ this_cat.name }}, {{ this_cat.name }}{% unless forloop.last %}, {% endunless %}
{%- assign cat_names = this_cat.name | concat: cat_names -%} {%- assign cat_names = this_cat.name | concat: cat_names -%}
{%- endfor -%} {%- endfor -%}
{%- assign cat_names = "" -%} {%- assign cat_names = "" -%}
@ -40,19 +38,15 @@
{% endif %} {% endif %}
<hr> <hr>
</article> </article>
</div>
</div>
{% endfor %} {% endfor %}
<nav aria-label="pagination"> </section>
<ul class="pager"> <nav aria-label="pagination">
<ul class="pagination justify-content-evenly mt-2">
{% if model.newer_link -%} {% if model.newer_link -%}
<li class="previous item"><a href="{{ model.newer_link.value }}">&laquo; Newer Posts</a></li> <li class="page-item"><a class="page-link" href="{{ model.newer_link.value }}">&laquo; Newer Posts</a></li>
{%- else -%}
<li></li>
{% endif %} {% endif %}
{% if model.older_link -%} {% if model.older_link -%}
<li class="next item"><a href="{{ model.older_link.value }}">Older Posts &raquo;</a></li> <li class="page-item"><a class="page-link" href="{{ model.older_link.value }}">Older Posts &raquo;</a></li>
{%- endif -%} {%- endif -%}
</ul> </ul>
</nav> </nav>
</section>

View File

@ -21,13 +21,12 @@
{% if web_log.subtitle -%} {% if web_log.subtitle -%}
<span class="navbar-text">{{ web_log.subtitle.value | escape }}</span> <span class="navbar-text">{{ web_log.subtitle.value | escape }}</span>
{%- endif %} {%- endif %}
{% if page_list -%}
<ul class="navbar-nav"> <ul class="navbar-nav">
{% for pg in page_list -%} {% unless web_log.default_page == "posts" %}{{ "page/1" | nav_link: "Posts" }}{% endunless %}
{{ pg.permalink | nav_link: pg.title }} {% if page_list -%}
{%- endfor %} {% for pg in page_list %}{{ pg.permalink | nav_link: pg.title }}{% endfor %}
</ul>
{%- endif %} {%- endif %}
</ul>
{% user_links %} {% user_links %}
</div> </div>
</div> </div>
@ -53,7 +52,7 @@
<footer> <footer>
<hr> <hr>
<div class="container-fluid text-end"> <div class="container-fluid text-end">
<img src="{{ "themes/admin/logo-dark.png" | relative_link }}" alt="myWebLog"> <img src="{{ "themes/admin/logo-dark.png" | relative_link }}" alt="myWebLog" width="120" height="34">
</div> </div>
</footer> </footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js"

View File

@ -1,4 +1,4 @@
<h2 class="py-3">{{ page.title }}</h2> <h2 class="py-3">{{ page.title }}</h2>
<article> <article class="container">
{{ page.text }} {{ page.text }}
</article> </article>

View File

@ -1,74 +1,59 @@
{%- assign post = model.posts | first -%} {%- assign post = model.posts | first -%}
<div class="content single"> <h1>{{ post.title }}</h1>
<article class="item"> <h4 class="item-meta text-muted">
<h1 class="item-heading">{{ post.title }}</h1>
<h4 class="post-meta">
{% if post.published_on -%} {% if post.published_on -%}
<span title="Published On"> Published {{ post.published_on | date: "dddd, MMMM d, yyyy" }}
<i class="fa fa-calendar"></i> {{ post.published_on | date: "dddd, MMMM d, yyyy" }} at {{ post.published_on | date: "h:mm tt" | downcase }}
</span>
<span title="Published At">
<i class="fa fa-clock-o"></i> {{ post.published_on | date: "h:mm tt" | downcase }}
</span>
{%- else -%} {%- else -%}
<span>**DRAFT**</span> **DRAFT**
{% endif %} {% endif %}
<span title="Author"><i class="fa fa-user"></i> {{ model.authors | value: post.author_id }}</span> by {{ model.authors | value: post.author_id }}
{% if logged_on %} {% if logged_on %} &bull; <a hx-boost="false" href="{{ post | edit_post_link }}">Edit Post</a> {% endif %}
<span> </h4>
<a hx-boost="false" href="{{ post | edit_post_link }}"> <div>
<i class="fa fa-pencil-square-o"></i> Edit Post <article class="container mt-3">
</a>
</span>
{% endif %}
</h4>
<div>{{ post.text }}</div> <div>{{ post.text }}</div>
{%- assign cat_count = post.category_ids | size -%} {%- assign cat_count = post.category_ids | size -%}
{% if cat_count > 0 -%} {% if cat_count > 0 -%}
<h4> <h4 class="item-meta text-muted">
Categorized &nbsp; Categorized under
{% for cat_id in post.category_ids -%} {% for cat_id in post.category_ids -%}
{% assign cat = categories | where: "id", cat_id | first %} {% assign cat = categories | where: "id", cat_id | first %}
<span class="no-wrap"> <span class="text-nowrap">
<i class="fa fa-folder-open-o" title="Category"></i>
<a href="{{ cat | category_link }}" title="Categorized under &ldquo;{{ cat.name | escape }}&rdquo;"> <a href="{{ cat | category_link }}" title="Categorized under &ldquo;{{ cat.name | escape }}&rdquo;">
{{ cat.name }} {{ cat.name }}
</a> &nbsp; &nbsp; </a>
</span> </span>
{% unless forloop.last %} &bull; {% endunless %}
{%- endfor %} {%- endfor %}
</h4> </h4>
{%- endif %} {%- endif %}
{%- assign tag_count = post.tags | size -%} {%- assign tag_count = post.tags | size -%}
{% if tag_count > 0 -%} {% if tag_count > 0 -%}
<h4> <h4 class="item-meta text-muted">
Tagged &nbsp; Tagged
{% for tag in post.tags %} {% for tag in post.tags %}
<span class="no-wrap"> <span class="text-nowrap">
<a href="{{ tag | tag_link }}" title="Posts tagged &ldquo;{{ tag | escape }}&rdquo;" rel="tag"> <a href="{{ tag | tag_link }}" title="Posts tagged &ldquo;{{ tag | escape }}&rdquo;" rel="tag">{{ tag }}</a>
<i class="fa fa-tag"></i> {{ tag }}
</a> &nbsp; &nbsp;
</span> </span>
{% unless forloop.last %} &bull; {% endunless %}
{%- endfor %} {%- endfor %}
</h4> </h4>
{%- endif %} {%- endif %}
</article> </article>
<div> <div>
<nav aria-label="pagination"> <nav aria-label="pagination">
<ul class="pager"> <ul class="pagination justify-content-evenly mt-5">
{% if model.newer_link -%} {% if model.newer_link -%}
<li class="previous item"> <li class="page-item">
<h4 class="item-heading"> <a class="page-link" href="{{ model.newer_link.value | relative_link }}">{{ model.newer_name.value }}</a>
<a href="{{ model.newer_link.value | relative_link }}">&laquo;</a> Previous Post <span class="text-muted">&laquo; Previous Post</span>
</h4>
<a href="{{ model.newer_link.value | relative_link }}">{{ model.newer_name.value }}</a>
</li> </li>
{%- else -%}
<li></li>
{% endif %} {% endif %}
{% if model.older_link -%} {% if model.older_link -%}
<li class="next item"> <li class="page-item text-end">
<h4 class="item-heading">Next Post <a href="{{ model.older_link.value | relative_link }}">&raquo;</a></h4> <a class="page-link" href="{{ model.older_link.value | relative_link }}">{{ model.older_name.value }}</a>
<a href="{{ model.older_link.value | relative_link }}">{{ model.older_name.value }}</a> <span class="text-muted">Next Post &raquo;</span>
</li> </li>
{%- endif -%} {%- endif -%}
</ul> </ul>

View File

@ -2,3 +2,21 @@
max-width: 60rem; max-width: 60rem;
margin: auto; margin: auto;
} }
blockquote {
border-left: solid 4px lightgray;
padding-left: 1rem;
}
.item-meta {
font-size: 1.1rem;
font-weight: normal;;
}
.item-meta::before {
content: "»";
vertical-align: text-top;
}
a:link, a:visited {
text-decoration: none;
}
a:hover {
text-decoration: underline;
}