diff options
| author | Dennis Fink | 2026-08-17 19:36:16 +0200 |
|---|---|---|
| committer | Dennis Fink | 2026-08-17 20:00:16 +0200 |
| commit | 2b2d89ffd233e331a6985fe762ac339befc972a3 (patch) | |
| tree | 29f4850886342743cfef6231395f66529fb196b2 /templates | |
| parent | be8614b3c5f63b9e94341166567b9198746f98aa (diff) | |
| download | dennisfink.me-2b2d89ffd233e331a6985fe762ac339befc972a3.tar.gz dennisfink.me-2b2d89ffd233e331a6985fe762ac339befc972a3.zip | |
Add post changelogs
This replaces the manual `updated_date` field with a changelog flow
field so post updates can be recorded as dated entries.
The blog template now derives the "Last updated" metadata from the
latest changelog entry and renders the full changelog in the article
footer, with dedicated styling for compact change notes.
Diffstat (limited to 'templates')
| -rw-r--r-- | templates/blocks/changelog.html | 1 | ||||
| -rw-r--r-- | templates/blog-post.html | 9 | ||||
| -rw-r--r-- | templates/macros/blog.html | 51 |
3 files changed, 41 insertions, 20 deletions
diff --git a/templates/blocks/changelog.html b/templates/blocks/changelog.html new file mode 100644 index 0000000..eee2bf1 --- /dev/null +++ b/templates/blocks/changelog.html @@ -0,0 +1 @@ +{# Changelog entries are rendered by the blog post template. #} diff --git a/templates/blog-post.html b/templates/blog-post.html index fe751ae..a8eaf37 100644 --- a/templates/blog-post.html +++ b/templates/blog-post.html @@ -13,6 +13,7 @@ {% endfor %} {% set needs_trail_assets = features.trail %} +{% set latest_change = this.changelog.blocks | max(attribute="date") if this.changelog else none %} {% block meta %} {{ super() }} @@ -22,9 +23,9 @@ <meta property="article:published_time" content="{{ this.publication_date }}T00:00:00+02:00"> {% endif %} - {% if this.updated_date %} + {% if latest_change %} <meta property="article:modified_time" - content="{{ this.updated_date }}T00:00:00+02:00"> + content="{{ latest_change.date }}T00:00:00+02:00"> {% endif %} {% if this.category %} {% set category = site.get("/categories/" + this.category) %} @@ -46,8 +47,8 @@ {% set blog_url = '/blog' | url(absolute=True, external=True) %} {% set blog_id = blog_url ~ '#blog' %} {% set modified_date = this.publication_date %} - {% if this.updated_date %} - {% set modified_date = this.updated_date %} + {% if latest_change %} + {% set modified_date = latest_change.date %} {% endif %} {% set post_description = bag('blog.tagline') %} {% if this.description %} diff --git a/templates/macros/blog.html b/templates/macros/blog.html index 13c2526..d076762 100644 --- a/templates/macros/blog.html +++ b/templates/macros/blog.html @@ -29,6 +29,8 @@ {% endfor %} {% endif %} + {% set latest_change = post.changelog.blocks | max(attribute="date") if post.changelog else none %} + <article class="h-entry"> <header> <div> @@ -54,12 +56,12 @@ </dd> </div> {% endif %} - {% if post.updated_date and post.publication_date and (post.updated_date > post.publication_date) %} + {% if latest_change and post.publication_date and latest_change.date > post.publication_date %} <div> <dt>Last updated:</dt> <dd> - <time datetime="{{ post.updated_date | dateformat('yyyy-MM-dd') }}" - class="dt-updated">{{ post.updated_date | dateformat("d MMMM yyyy") }}</time> + <time datetime="{{ latest_change.date | dateformat('yyyy-MM-dd') }}" + class="dt-updated">{{ latest_change.date | dateformat("d MMMM yyyy") }}</time> </dd> </div> {% endif %} @@ -82,20 +84,37 @@ {% endif %} </header> <div class="e-content">{{ post.body }}</div> - {% if post.tags %} + {% if post.tags or post.changelog %} <footer> - <ul aria-label="Tags"> - <li>Tagged with</li> - {% for tag in post.tags %} - <li> - {% set tag_slug = tag|trim|lower|replace(" ", "-") %} - <a href="{{ ('/blog/tag/' ~ tag_slug ~ '/')|url }}" - rel="tag" - class="p-category">{{ tag }}</a> - {%- if not loop.last -%}, {%- else -%}.{%- endif -%} - </li> - {% endfor %} - </ul> + {% if post.tags %} + <ul aria-label="Tags"> + <li>Tagged with</li> + {% for tag in post.tags %} + <li> + {% set tag_slug = tag|trim|lower|replace(" ", "-") %} + <a href="{{ ('/blog/tag/' ~ tag_slug ~ '/')|url }}" + rel="tag" + class="p-category">{{ tag }}</a> + {%- if not loop.last -%}, {%- else -%}.{%- endif -%} + </li> + {% endfor %} + </ul> + {% endif %} + {% if post.changelog %} + <section class="changelog" aria-labelledby="changelog-heading"> + <h3 id="changelog-heading">Changelog</h3> + <ul> + {% for entry in post.changelog.blocks %} + <li> + <time datetime="{{ entry.date | dateformat('yyyy-MM-dd') }}"> + {{ entry.date | dateformat("d MMMM yyyy") }} + </time> + <span>{{ entry.description }}</span> + </li> + {% endfor %} + </ul> + </section> + {% endif %} </footer> {% endif %} </article> |
