Files
indiekit-endpoint-microsub/views/feed-edit.njk
Ricardo 1182b8ae79 feat: Feed management with status tracking, edit, and rediscover
- Integrate updateFeedStatus into polling processor for health tracking
- Add feed management UI showing status (active/error), errors, actions
- Add edit feed URL feature to change non-RSS URLs to actual feeds
- Add rediscover feature to run feed discovery and update URL
- Add refresh button to force immediate poll
- Update UI to use Indiekit's badge/button classes (badge--green/red, button--warning)
- Add routes: /feeds/:feedId/edit, /feeds/:feedId/rediscover, /feeds/:feedId/refresh

Fixes broken feeds by allowing users to:
1. Edit URL directly to the RSS/Atom feed
2. Click "Rediscover" to auto-find the feed from a blog URL
3. View error details and consecutive error counts

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-07 01:47:07 +01:00

85 lines
2.7 KiB
Plaintext

{% extends "layouts/reader.njk" %}
{% block reader %}
<div class="settings">
<a href="{{ baseUrl }}/channels/{{ channel.uid }}/feeds" class="back-link">
{{ icon("previous") }} {{ __("microsub.feeds.title") }}
</a>
<h2>{{ __("microsub.feeds.edit") }}</h2>
{% if error %}
<div class="notice notice--error">
<p>{{ error }}</p>
</div>
{% endif %}
<div class="feed-edit">
<div class="feed-edit__current">
<h3>Current Feed</h3>
<p class="feed-edit__url">{{ feed.url }}</p>
{% if feed.title %}
<p class="feed-edit__title">{{ feed.title }}</p>
{% endif %}
{% if feed.status == 'error' %}
<div class="notice notice--error">
<p><strong>Status:</strong> Error</p>
{% if feed.lastError %}
<p><strong>Last error:</strong> {{ feed.lastError }}</p>
{% endif %}
{% if feed.consecutiveErrors %}
<p><strong>Consecutive errors:</strong> {{ feed.consecutiveErrors }}</p>
{% endif %}
</div>
{% endif %}
</div>
<form method="post" action="{{ baseUrl }}/channels/{{ channel.uid }}/feeds/{{ feed._id }}/edit" class="feed-edit__form">
{{ input({
id: "url",
name: "url",
label: "New Feed URL",
type: "url",
required: true,
value: feed.url,
placeholder: "https://example.com/feed.xml",
autocomplete: "off"
}) }}
<p class="feed-edit__help">
Enter the direct URL to the RSS, Atom, or JSON Feed. The URL will be validated before updating.
</p>
<div class="button-group">
{{ button({ text: "Update Feed URL" }) }}
<a href="{{ baseUrl }}/channels/{{ channel.uid }}/feeds" class="button button--secondary">
Cancel
</a>
</div>
</form>
<div class="divider"></div>
<div class="feed-edit__actions">
<h3>Other Actions</h3>
<form method="post" action="{{ baseUrl }}/channels/{{ channel.uid }}/feeds/{{ feed._id }}/rediscover" class="feed-edit__action">
<p>Run feed discovery on the current URL to find the actual RSS/Atom feed.</p>
{{ button({
text: "Rediscover Feed",
classes: "button--secondary"
}) }}
</form>
<form method="post" action="{{ baseUrl }}/channels/{{ channel.uid }}/feeds/{{ feed._id }}/refresh" class="feed-edit__action">
<p>Force refresh this feed now.</p>
{{ button({
text: "Refresh Now",
classes: "button--secondary"
}) }}
</form>
</div>
</div>
</div>
{% endblock %}