{# Same picker as the per-post Re-fetch menu, applied to every article in
the batch: "Original"/"Pub date" land each one on its own date, only
"Now" is uniform across the whole scope. A separate class/variable from
the per-post one (ctx-scope-refetch-date-opt / refetchScopeDateChoice)
— sharing state would let opening one menu silently reset the other's
choice, and nothing here should be pre-selected either. #}
Land on:
{# Bulk-only siblings of ctx-post-mark-read: both directions always shown
(like the star/unstar pair below) rather than one mixed-selection
toggle — there is no single "obvious direction" to collapse to when
the selection spans both read states. #}
{# Bulk-only, both directions shown regardless of the selection's mixed
star state — add and remove are equally common triage actions here
(the Saved view especially), so there's no one "obvious direction"
to collapse to. Same reasoning as the read/unread pair above. #}
{# Works on any post — the right-clicked one, or the whole multi-selection. #}
{# "shown", not "visible": this moves everything matching the active filters,
including rows scroll-chunking has not painted yet. #}
{# Shown only when every post in play (the right-clicked one, or the whole
multi-selection) has a video_id — see contextSelectedPosts in app.js. #}
{# Bulk-only: queues the selection into the paced background re-fetch job. #}
{# Edit and Re-fetch each collapse into a flyout: they are four and four
items that only matter once you have decided to change this post, and
inline they pushed the everyday actions (mark read, copy URL) down a menu
nobody wants to read. #}
Editchevron_right
Re-fetchchevron_right
{# Where the re-fetch lands, not which mode fetches it — applies to
all three buttons below. Nothing pre-selected (decided 2026-08-24):
unset means today's default (a capture bumps to Now, a feed entry
keeps its date), same as before this existed. #}
Land on:
{# Whole-page capture instead of readability extraction — for a post
whose normal re-fetch keeps coming back wrong. #}
{# The archive by explicit request. The automatic fallback only fires when
the live fetch is REFUSED; a publisher serving a page that passes every
guard but is no longer the article is the case that otherwise sends you
to archive.org by hand. #}
{# Undo. Lives here because a bad re-fetch is what you are undoing, and
the header icon it replaces was unfindable exactly when needed. Shown
only when there IS a stored original. #}
{% if debug_mode %}{% endif %}
{# Scoped to the CURRENT view, not the whole tag: the case this serves is
"drilled down to a single feed with stars I don't need". The label carries
the server's count so the set is stated before the click. #}