V2 #1

Merged
danieljsummers merged 102 commits from v2 into main 2022-06-23 00:35:12 +00:00
7 changed files with 109 additions and 112 deletions
Showing only changes of commit cfc9472a2e - Show all commits

View File

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

View File

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

View File

@ -21,13 +21,12 @@
{% if web_log.subtitle -%}
<span class="navbar-text">{{ web_log.subtitle.value | escape }}</span>
{%- endif %}
{% if page_list -%}
<ul class="navbar-nav">
{% for pg in page_list -%}
{{ pg.permalink | nav_link: pg.title }}
{%- endfor %}
</ul>
{% unless web_log.default_page == "posts" %}{{ "page/1" | nav_link: "Posts" }}{% endunless %}
{% if page_list -%}
{% for pg in page_list %}{{ pg.permalink | nav_link: pg.title }}{% endfor %}
{%- endif %}
</ul>
{% user_links %}
</div>
</div>
@ -53,7 +52,7 @@
<footer>
<hr>
<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>
</footer>
<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>
<article>
<article class="container">
{{ page.text }}
</article>

View File

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

View File

@ -2,3 +2,21 @@
max-width: 60rem;
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;
}