From 2c172566c8cc3261f471f15e000969c2a6480784 Mon Sep 17 00:00:00 2001 From: Ricardo Date: Mon, 23 Feb 2026 16:50:27 +0100 Subject: [PATCH] feat: add fediverse follow me sidebar widget Reuses the existing fediverseInteract Alpine.js component to let visitors follow the site author from their own fediverse instance. Registered in all three sidebar routers (homepage, blog listing, blog post) as widget type "fediverse-follow". --- _includes/components/blog-sidebar.njk | 2 + _includes/components/homepage-sidebar.njk | 2 + _includes/components/sidebar.njk | 2 + .../components/widgets/fediverse-follow.njk | 76 +++++++++++++++++++ 4 files changed, 82 insertions(+) create mode 100644 _includes/components/widgets/fediverse-follow.njk diff --git a/_includes/components/blog-sidebar.njk b/_includes/components/blog-sidebar.njk index 68f1975..0cbfb38 100644 --- a/_includes/components/blog-sidebar.njk +++ b/_includes/components/blog-sidebar.njk @@ -42,6 +42,8 @@ + {% elif widget.type == "fediverse-follow" %} + {% include "components/widgets/fediverse-follow.njk" %} {% elif widget.type == "custom-html" %} {% set wConfig = widget.config or {} %} diff --git a/_includes/components/homepage-sidebar.njk b/_includes/components/homepage-sidebar.njk index 9ab8b26..4135cac 100644 --- a/_includes/components/homepage-sidebar.njk +++ b/_includes/components/homepage-sidebar.njk @@ -29,6 +29,8 @@ {% include "components/widgets/webmentions.njk" %} {% elif widget.type == "recent-comments" %} {% include "components/widgets/recent-comments.njk" %} + {% elif widget.type == "fediverse-follow" %} + {% include "components/widgets/fediverse-follow.njk" %} {% elif widget.type == "custom-html" %} {# Custom content widget #} {% set wConfig = widget.config or {} %} diff --git a/_includes/components/sidebar.njk b/_includes/components/sidebar.njk index 8d0aee5..3301fb0 100644 --- a/_includes/components/sidebar.njk +++ b/_includes/components/sidebar.njk @@ -38,6 +38,8 @@ {% elif widget.type == "webmentions" %} {% include "components/widgets/webmentions.njk" %} + {% elif widget.type == "fediverse-follow" %} + {% include "components/widgets/fediverse-follow.njk" %} {% elif widget.type == "custom-html" %} {% set wConfig = widget.config or {} %} diff --git a/_includes/components/widgets/fediverse-follow.njk b/_includes/components/widgets/fediverse-follow.njk new file mode 100644 index 0000000..d34f42d --- /dev/null +++ b/_includes/components/widgets/fediverse-follow.njk @@ -0,0 +1,76 @@ +{# Fediverse Follow Me Widget — uses the fediverseInteract Alpine.js component #} +{# Requires fediverse-interact.js loaded in base.njk (already present) #} +{# Determines actor URI from site social links: prefers self-hosted AP, falls back to Mastodon #} + +{% set actorUrl = "" %} +{% for link in site.social %} + {% if link.icon == "activitypub" and not actorUrl %} + {% set actorUrl = link.url %} + {% endif %} +{% endfor %} +{% if not actorUrl %} + {% for link in site.social %} + {% if link.icon == "mastodon" and not actorUrl %} + {% set actorUrl = link.url %} + {% endif %} + {% endfor %} +{% endif %} + +{% if actorUrl %} + +
+

Follow Me

+

Follow me from your fediverse instance.

+ + + Follow on the Fediverse + + + {# Modal overlay for instance entry — same pattern as post.njk #} + +
+
+{% endif %}