From 5c8c1343c2d94e146f310f49bdd42bd0e47eb19b Mon Sep 17 00:00:00 2001 From: Ricardo Date: Wed, 25 Feb 2026 17:36:37 +0100 Subject: [PATCH] feat: add digest templates and digestToHtml filter - digest.njk: individual digest pages at /digest/YYYY/WNN/ - digest-index.njk: paginated index at /digest/ - digest-feed.njk: RSS feed at /digest/feed.xml - digestToHtml filter for RSS feed item descriptions --- digest-feed.njk | 31 +++++++++ digest-index.njk | 83 +++++++++++++++++++++++ digest.njk | 168 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 282 insertions(+) create mode 100644 digest-feed.njk create mode 100644 digest-index.njk create mode 100644 digest.njk diff --git a/digest-feed.njk b/digest-feed.njk new file mode 100644 index 0000000..6505876 --- /dev/null +++ b/digest-feed.njk @@ -0,0 +1,31 @@ +--- +eleventyExcludeFromCollections: true +eleventyImport: + collections: + - weeklyDigests +permalink: /digest/feed.xml +--- + + + + {{ site.name }} — Weekly Digest + {{ site.url }}/digest/ + Weekly summary of all posts on {{ site.name }}. One update per week. + {{ site.locale | default('en') }} + + + {%- set latestDigests = collections.weeklyDigests | head(20) %} + {%- if latestDigests.length %} + {{ latestDigests[0].endDate | dateToRfc822 }} + {%- endif %} + {%- for digest in latestDigests %} + + {{ digest.label }} ({{ digest.startDate | dateDisplay }} – {{ digest.endDate | dateDisplay }}) + {{ site.url }}/digest/{{ digest.slug }}/ + {{ site.url }}/digest/{{ digest.slug }}/ + {{ digest.endDate | dateToRfc822 }} + {{ digest | digestToHtml(site.url) | escape }} + + {%- endfor %} + + diff --git a/digest-index.njk b/digest-index.njk new file mode 100644 index 0000000..5854034 --- /dev/null +++ b/digest-index.njk @@ -0,0 +1,83 @@ +--- +layout: layouts/base.njk +title: Weekly Digest +withSidebar: true +eleventyExcludeFromCollections: true +eleventyImport: + collections: + - weeklyDigests +pagination: + data: collections.weeklyDigests + size: 20 + alias: paginatedDigests +permalink: "digest/{% if pagination.pageNumber > 0 %}page/{{ pagination.pageNumber + 1 }}/{% endif %}" +--- +
+

Weekly Digest

+

+ A weekly summary of all posts. Subscribe via RSS for one update per week. +

+ + {% if paginatedDigests.length > 0 %} + + + {% if pagination.pages.length > 1 %} + + {% endif %} + + {% else %} +

No digests yet. Posts will be grouped into weekly digests automatically.

+ {% endif %} +
diff --git a/digest.njk b/digest.njk new file mode 100644 index 0000000..ddfcc4d --- /dev/null +++ b/digest.njk @@ -0,0 +1,168 @@ +--- +layout: layouts/base.njk +withSidebar: true +eleventyExcludeFromCollections: true +eleventyImport: + collections: + - weeklyDigests +pagination: + data: collections.weeklyDigests + size: 1 + alias: digest +eleventyComputed: + title: "{{ digest.label }}" +permalink: "digest/{{ digest.slug }}/" +--- +
+

+ {{ digest.label }} +

+

+ {{ digest.startDate | dateDisplay }} – {{ digest.endDate | dateDisplay }} + ({{ digest.posts.length }} post{% if digest.posts.length != 1 %}s{% endif %}) +

+ + {# Type display order #} + {% set typeOrder = [ + { key: "articles", label: "Articles" }, + { key: "notes", label: "Notes" }, + { key: "photos", label: "Photos" }, + { key: "bookmarks", label: "Bookmarks" }, + { key: "likes", label: "Likes" }, + { key: "reposts", label: "Reposts" } + ] %} + + {% for typeInfo in typeOrder %} + {% set typePosts = digest.byType[typeInfo.key] %} + {% if typePosts and typePosts.length %} +
+

+ {{ typeInfo.label }} + ({{ typePosts.length }}) +

+
    + {% for post in typePosts %} +
  • + {% if typeInfo.key == "likes" %} + {% set targetUrl = post.data.likeOf or post.data.like_of %} +
    + +
    + {{ targetUrl }} +
    + + · Permalink +
    +
    +
    + + {% elif typeInfo.key == "bookmarks" %} + {% set targetUrl = post.data.bookmarkOf or post.data.bookmark_of %} +
    + 🔖 +
    + {% if post.data.title %} + {{ post.data.title }} + {% else %} + {{ targetUrl }} + {% endif %} +
    + + · Permalink +
    +
    +
    + + {% elif typeInfo.key == "reposts" %} + {% set targetUrl = post.data.repostOf or post.data.repost_of %} +
    + 🔁 +
    + {{ targetUrl }} +
    + + · Permalink +
    +
    +
    + + {% elif typeInfo.key == "photos" %} +
    + {% if post.data.photo and post.data.photo[0] %} + {% set photoUrl = post.data.photo[0].url or post.data.photo[0] %} + {% if photoUrl and photoUrl[0] != '/' and 'http' not in photoUrl %} + {% set photoUrl = '/' + photoUrl %} + {% endif %} + + {{ post.data.photo[0].alt | default('Photo') }} + + {% endif %} + {% if post.data.title %} + {{ post.data.title }} + {% elif post.templateContent %} +

    {{ post.templateContent | striptags | truncate(120) }}

    + {% endif %} +
    + + · Permalink +
    +
    + + {% elif typeInfo.key == "articles" %} +
    + + {{ post.data.title | default("Untitled") }} + + {% if post.templateContent %} +

    {{ post.templateContent | striptags | truncate(200) }}

    + {% endif %} +
    + + · Permalink +
    +
    + + {% else %} +
    +

    {{ post.templateContent | striptags | truncate(200) }}

    +
    + + · Permalink +
    +
    + {% endif %} +
  • + {% endfor %} +
+
+ {% endif %} + {% endfor %} + + {# Previous/Next digest navigation #} + {% set allDigests = collections.weeklyDigests %} + {% set currentIndex = -1 %} + {% for d in allDigests %} + {% if d.slug == digest.slug %} + {% set currentIndex = loop.index0 %} + {% endif %} + {% endfor %} + + +