Ctrl K
ComunidadGuías…

templates/_settings_feeds_failing.html

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
{# Settings → Feeds → Failing list. Served by /settings/feeds/panel/failing
   and injected on first open of the Failing view — up to
   LECTIO_FAILING_FEEDS_LIMIT (default 500) rows of markup, so at that size it
   must never ship inline with the page. Row actions are delegated
   document-wide ([data-problem-feed-*]), so no rebinding. #}
<div id="problematic-feeds-modal">
    <div data-problem-panel="failing">
      {% if failing_feeds %}
      <div class="problem-feed-filter" data-problem-feed-filter role="tablist" aria-label="Filter failing feeds by cause"></div>
      <ul class="problem-feed-list">
        {% for row in failing_feeds %}
        <li class="problem-feed-item" data-feed-url="{{ row.feed_url }}" data-category="{{ row.category }}">
          <div class="problem-feed-row">
            <button type="button" class="problem-feed-link" data-problem-feed-properties data-feed-url="{{ row.feed_url }}" title="{{ row.feed_url }}">{{ row.feed_title }}</button>
            <div class="problem-feed-actions">
              <a class="problem-feed-action" href="{{ row.feed_url }}" target="_blank" rel="noopener noreferrer" title="Open feed URL"><span class="material-symbols-rounded" aria-hidden="true">open_in_new</span></a>
              {% if row.can_suggest_migration %}
              <button type="button" class="problem-feed-action" data-problem-feed-suggest-migration data-feed-url="{{ row.feed_url }}" title="Suggest a replacement feed URL" aria-label="Suggest a replacement feed URL"><span class="material-symbols-rounded" aria-hidden="true">auto_fix_high</span></button>
              {% endif %}
              <button type="button" class="problem-feed-action problem-feed-action-ack" data-problem-feed-ack data-feed-url="{{ row.feed_url }}" title="Working — they're just blocking us (mute; stays on ~daily retry)" aria-label="Mute — feed is fine"><span class="material-symbols-rounded" aria-hidden="true">check_circle</span></button>
              <button type="button" class="problem-feed-action" data-problem-feed-mark-dead data-feed-url="{{ row.feed_url }}" title="Dead — needs a replacement (stop fetching; keep saved/tagged posts)" aria-label="Dead — needs replacement"><span class="material-symbols-rounded" aria-hidden="true">heart_broken</span></button>
              <button type="button" class="problem-feed-action problem-feed-action-danger" data-problem-feed-unsubscribe data-feed-url="{{ row.feed_url }}" data-folder-id="{{ row.folder_id or selected_folder_id }}" title="Unsubscribe" aria-label="Unsubscribe"><span class="material-symbols-rounded" aria-hidden="true">delete</span></button>
            </div>
          </div>
          <div class="problem-feed-meta">
            <span class="problem-feed-cat problem-feed-cat--{{ row.category }}">{{ row.category_label }}</span>
            <span>{{ row.consecutive_failures }} failure{{ 's' if row.consecutive_failures != 1 else '' }}</span>
            {% if row.next_retry_display %}<span>Retry: {{ row.next_retry_display }}</span>{% endif %}
          </div>
          {% if row.last_error %}<div class="problem-feed-error">{{ row.last_error }}</div>{% endif %}
        </li>
        {% endfor %}
      </ul>
      <p class="muted problem-feed-empty-filtered" hidden>No failing feeds in this category.</p>
      {% else %}
      <p class="muted">No failing feeds right now.</p>
      {% endif %}
    </div>
    <div class="problem-feed-section-divider" {% if not acked_feeds %}hidden{% endif %}>Checked OK</div>
    <div data-problem-panel="acked">
      {% if acked_feeds %}
      <ul class="problem-feed-list">
        {% for row in acked_feeds %}
        <li class="problem-feed-item" data-feed-url="{{ row.feed_url }}">
          <div class="problem-feed-row">
            <button type="button" class="problem-feed-link" data-problem-feed-properties data-feed-url="{{ row.feed_url }}" title="{{ row.feed_url }}">{{ row.feed_title }}</button>
            <div class="problem-feed-actions">
              <a class="problem-feed-action" href="{{ row.feed_url }}" target="_blank" rel="noopener noreferrer" title="Open feed URL"><span class="material-symbols-rounded" aria-hidden="true">open_in_new</span></a>
              <button type="button" class="problem-feed-action" data-problem-feed-unack data-feed-url="{{ row.feed_url }}" title="Move back to Failing" aria-label="Move back to Failing"><span class="material-symbols-rounded" aria-hidden="true">undo</span></button>
              <button type="button" class="problem-feed-action problem-feed-action-danger" data-problem-feed-unsubscribe data-feed-url="{{ row.feed_url }}" data-folder-id="{{ row.folder_id or selected_folder_id }}" title="Unsubscribe" aria-label="Unsubscribe"><span class="material-symbols-rounded" aria-hidden="true">delete</span></button>
            </div>
          </div>
          <div class="problem-feed-meta">
            <span>{{ row.consecutive_failures }} failure{{ 's' if row.consecutive_failures != 1 else '' }}</span>
            {% if row.next_retry_display %}<span>Retry: {{ row.next_retry_display }}</span>{% endif %}
          </div>
          {% if row.last_error %}<div class="problem-feed-error">{{ row.last_error }}</div>{% endif %}
        </li>
        {% endfor %}
      </ul>
      {% endif %}
    </div>
    <div class="problem-feed-section-divider" {% if not needs_replacement_feeds %}hidden{% endif %} data-needs-replacement-divider>Needs replacement</div>
    <div data-problem-panel="needs-replacement">
      {% if needs_replacement_feeds %}
      <ul class="problem-feed-list">
        {% for row in needs_replacement_feeds %}
        <li class="problem-feed-item" data-feed-url="{{ row.feed_url }}">
          <div class="problem-feed-row">
            <button type="button" class="problem-feed-link" data-problem-feed-properties data-feed-url="{{ row.feed_url }}" title="{{ row.feed_url }}">{{ row.feed_title }}</button>
            <div class="problem-feed-actions">
              <button type="button" class="problem-feed-action" data-problem-feed-properties data-feed-url="{{ row.feed_url }}" title="Find a replacement (Change feed URL in properties)" aria-label="Find replacement"><span class="material-symbols-rounded" aria-hidden="true">published_with_changes</span></button>
              <a class="problem-feed-action" href="{{ row.feed_url }}" target="_blank" rel="noopener noreferrer" title="Open feed URL"><span class="material-symbols-rounded" aria-hidden="true">open_in_new</span></a>
              <button type="button" class="problem-feed-action" data-problem-feed-unmark-dead data-feed-url="{{ row.feed_url }}" title="Back to Failing (re-enable fetching)" aria-label="Back to Failing"><span class="material-symbols-rounded" aria-hidden="true">undo</span></button>
              <button type="button" class="problem-feed-action problem-feed-action-danger" data-problem-feed-unsubscribe data-feed-url="{{ row.feed_url }}" data-folder-id="{{ row.folder_id or selected_folder_id }}" title="Unsubscribe" aria-label="Unsubscribe"><span class="material-symbols-rounded" aria-hidden="true">delete</span></button>
            </div>
          </div>
          <div class="problem-feed-meta">
            <span class="problem-feed-cat problem-feed-cat--{{ row.category }}">{{ row.category_label }}</span>
            <span>{{ row.consecutive_failures }} failure{{ 's' if row.consecutive_failures != 1 else '' }}</span>
          </div>
          {% if row.last_error %}<div class="problem-feed-error">{{ row.last_error }}</div>{% endif %}
        </li>
        {% endfor %}
      </ul>
      {% endif %}
    </div>
</div>