From 690a10ecf81559ee8c37cec17bf9c2498c533e68 Mon Sep 17 00:00:00 2001 From: Ricardo Date: Tue, 17 Feb 2026 15:26:26 +0100 Subject: [PATCH] feat: add FeedLand sidebar widget Replicates Dave Winer's blogroll.js visual rendering (240px bordered container, Ubuntu/Rancho fonts, Title/When sort, caret wedges, truncated titles, relative timestamps, "Powered by FeedLand" footer) using Alpine.js and the blogroll API instead of jQuery + external scripts. Registered in all three sidebar types (homepage, blog listing, blog post) and in the fallback sidebar. --- _includes/components/blog-sidebar.njk | 2 + _includes/components/homepage-sidebar.njk | 2 + _includes/components/sidebar.njk | 7 + _includes/components/widgets/feedland.njk | 292 ++++++++++++++++++++++ 4 files changed, 303 insertions(+) create mode 100644 _includes/components/widgets/feedland.njk diff --git a/_includes/components/blog-sidebar.njk b/_includes/components/blog-sidebar.njk index 6c665f3..799b5aa 100644 --- a/_includes/components/blog-sidebar.njk +++ b/_includes/components/blog-sidebar.njk @@ -28,6 +28,8 @@ {% include "components/widgets/funkwhale.njk" %} {% elif widget.type == "blogroll" %} {% include "components/widgets/blogroll.njk" %} + {% elif widget.type == "feedland" %} + {% include "components/widgets/feedland.njk" %} {% elif widget.type == "categories" %} {% include "components/widgets/categories.njk" %} {% elif widget.type == "search" %} diff --git a/_includes/components/homepage-sidebar.njk b/_includes/components/homepage-sidebar.njk index 936cb92..754fb9a 100644 --- a/_includes/components/homepage-sidebar.njk +++ b/_includes/components/homepage-sidebar.njk @@ -13,6 +13,8 @@ {% include "components/widgets/recent-posts.njk" %} {% elif widget.type == "blogroll" %} {% include "components/widgets/blogroll.njk" %} + {% elif widget.type == "feedland" %} + {% include "components/widgets/feedland.njk" %} {% elif widget.type == "categories" %} {% include "components/widgets/categories.njk" %} {% elif widget.type == "search" %} diff --git a/_includes/components/sidebar.njk b/_includes/components/sidebar.njk index 12c151f..0ee74eb 100644 --- a/_includes/components/sidebar.njk +++ b/_includes/components/sidebar.njk @@ -20,6 +20,8 @@ {% if blogrollStatus and blogrollStatus.source == "indiekit" %} {% include "components/widgets/blogroll.njk" %} {% endif %} + {% elif widget.type == "feedland" %} + {% include "components/widgets/feedland.njk" %} {% elif widget.type == "categories" %} {% include "components/widgets/categories.njk" %} {% elif widget.type == "subscribe" %} @@ -70,6 +72,11 @@ {% include "components/widgets/blogroll.njk" %} {% endif %} + {# FeedLand — only when backend is available #} + {% if blogrollStatus and blogrollStatus.source == "indiekit" %} + {% include "components/widgets/feedland.njk" %} + {% endif %} + {# Categories/Tags #} {% include "components/widgets/categories.njk" %} {% endif %} diff --git a/_includes/components/widgets/feedland.njk b/_includes/components/widgets/feedland.njk new file mode 100644 index 0000000..4e78d4a --- /dev/null +++ b/_includes/components/widgets/feedland.njk @@ -0,0 +1,292 @@ +{# FeedLand Widget - Matches Dave Winer's blogroll.js visual rendering #} +{# Uses Alpine.js + blogroll API instead of jQuery + external blogroll.js #} + + + + + +
+
+
+ {# Title in Rancho font — matches blogroll.js #} +
+ +
+ + {# Sort links: Title / When #} + + + {# Feed table #} + + + + +
+ + {# Footer — Powered by FeedLand #} + +
+
+
+ +