{# Settings → Feeds → Folders table. Served by /settings/feeds/panel/folders and injected on first open of the Feeds tab — at thousands of feeds this table is the single heaviest fragment in the app (every feed gets a hidden row), so it must never ship inline with the page. All row interactions are delegated on #settings-tab-feeds, so injected rows need no rebinding. #} {% set child_rows = folder_rows | selectattr('depth', 'equalto', 1) | list %} {# Also list feeds attached directly to the root "All Feeds" folder (depth 0) — otherwise feeds added without a folder are invisible and unmanageable here. Shown last, labelled "Ungrouped". #} {% set _root_rows = folder_rows | selectattr('depth', 'equalto', 0) | list %} {% if _root_rows and settings_feeds_by_folder.get(_root_rows[0].id) %} {% set child_rows = child_rows + [_root_rows[0]] %} {% endif %} {% if child_rows %} {% set cadence_options = [(0, 'Global'), (1, '1 min'), (2, '2 min'), (5, '5 min'), (10, '10 min'), (15, '15 min'), (30, '30 min'), (60, '1 hr'), (120, '2 hr'), (360, '6 hr'), (720, '12 hr'), (1440, '1 day')] %} {% for row in child_rows %} {% set failing = folder_failing_counts.get(row.id, 0) %} {% set folder_feeds = settings_feeds_by_folder.get(row.id, []) %} {% set cad = row.cadence_minutes or 0 %} {% for feed in folder_feeds %} {% endfor %} {% endfor %}
FolderFeedsRefresh{# Select every feed the filter is showing, across folders — the per-folder boxes below only ever reach their own folder, so a search spanning several of them had no "select what I searched for". With no filter it selects everything, which is what a header checkbox reads as anyway. The count lives in the tooltip because the column is 2rem wide; the toolbar states it again once something is selected. #}
{{ 'Ungrouped' if row.depth == 0 else row.name }} {% if failing %}{{ failing }}{% endif %}
{{ row.feed_count }} {% if not row.virtual %} {% endif %} {% if not row.virtual %} {% endif %} {% if folder_feeds %} {% endif %}
{% else %}

No folders yet.

{% endif %}