feather-reader 0.2.2

A minimalist, atproto-native RSS/Atom reader in Rust — your feed subscriptions live in your own PDS.
Documentation
{# The reader's read + star action forms. Rendered inline inside entry.html's
   actionbar, and ALSO returned standalone (with hx-swap-oob) by the mark-read /
   star handlers so the button's hidden value + aria-pressed update in place
   after a toggle instead of going stale. `oob` selects which shape to emit. #}
<span class="actionbar-toggles" id="entry-actionbar"{% if oob %} hx-swap-oob="outerHTML"{% endif %}>
  <form class="mark-read-form" method="post" action="/entries/{{ id }}/read"
        hx-post="/entries/{{ id }}/read" hx-headers='{"X-FR-Reader": "1"}'
        hx-target="#entry-actionbar" hx-swap="none">
    <input type="hidden" name="read" value="{% if read %}false{% else %}true{% endif %}" />
    <button type="submit" class="icon-btn actionbar-read mark-read"
            aria-pressed="{% if read %}true{% else %}false{% endif %}"
            aria-label="{% if read %}Mark unread (m){% else %}Mark read (m){% endif %}">
      <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"
           stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 12.5l5 5L20 6.5"/></svg>
    </button>
  </form>

  <form class="star-form" method="post" action="/entries/{{ id }}/star"
        hx-post="/entries/{{ id }}/star" hx-headers='{"X-FR-Reader": "1"}'
        hx-target="#entry-actionbar" hx-swap="none">
    <input type="hidden" name="starred" value="{% if starred %}false{% else %}true{% endif %}" />
    <button type="submit" class="icon-btn actionbar-star star-btn"
            aria-pressed="{% if starred %}true{% else %}false{% endif %}"
            aria-label="{% if starred %}Unstar entry (s){% else %}Star entry (s){% endif %}">
      <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"
           stroke-linejoin="round" aria-hidden="true">
        <path d="M12 3.5l2.6 5.3 5.9.9-4.2 4.1 1 5.8-5.3-2.8-5.3 2.8 1-5.8L3.5 9.7l5.9-.9z"/>
      </svg>
    </button>
  </form>
</span>