The header's feed is now a funnel button that opens a modal with
an "All feeds" checkbox and one checkbox per feed with unread items. The
selection is either "All feeds" or at least one feed, is applied once when
the modal closes, and is persisted in localStorage.
feedFilter holds string[] | null; setFeedFilter is a no-op when the
selection is unchanged (order-insensitive), sparing callers the
scroll/mark-read side effects.
Selected feeds stay listed at 0 unread so they can be unchecked; titles
whose feed no longer exists are pruned after each fetch.
The persisted filter is cleared on logout and on 401 (handler extracted
to httpAuthInterceptor.js so it is unit-testable).
The modal locks body scroll while open so scrolling behind it can't
mark articles read.
The header's feed <select> is now a funnel button that opens a modal with
an "All feeds" checkbox and one checkbox per feed with unread items. The
selection is either "All feeds" or at least one feed, is applied once when
the modal closes, and is persisted in localStorage.
- feedFilter holds string[] | null; setFeedFilter is a no-op when the
selection is unchanged (order-insensitive), sparing callers the
scroll/mark-read side effects.
- Selected feeds stay listed at 0 unread so they can be unchecked; titles
whose feed no longer exists are pruned after each fetch.
- The persisted filter is cleared on logout and on 401 (handler extracted
to httpAuthInterceptor.js so it is unit-testable).
- The modal locks body scroll while open so scrolling behind it can't
mark articles read.
The header's feed <select> is now a funnel button that opens a modal with
an "All feeds" checkbox and one checkbox per feed with unread items. The
selection is either "All feeds" or at least one feed, is applied once when
the modal closes, and is persisted in localStorage.
- feedFilter holds string[] | null; setFeedFilter is a no-op when the
selection is unchanged (order-insensitive), sparing callers the
scroll/mark-read side effects.
- Selected feeds stay listed at 0 unread so they can be unchecked; titles
whose feed no longer exists are pruned after each fetch.
- The persisted filter is cleared on logout and on 401 (handler extracted
to httpAuthInterceptor.js so it is unit-testable).
- The modal locks body scroll while open so scrolling behind it can't
mark articles read.
mathias
merged commit 43269bf1d7 into master2026-09-27 11:31:28 +02:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
The header's feed is now a funnel button that opens a modal with
an "All feeds" checkbox and one checkbox per feed with unread items. The
selection is either "All feeds" or at least one feed, is applied once when
the modal closes, and is persisted in localStorage.
selection is unchanged (order-insensitive), sparing callers the
scroll/mark-read side effects.
whose feed no longer exists are pruned after each fetch.
to httpAuthInterceptor.js so it is unit-testable).
mark articles read.