Skip to content

impl(web): add /series/<id> page for viewing a media series#78

Draft
andykais-claude wants to merge 2 commits into
mainfrom
cursor/rebase-series-view-page-caeb
Draft

impl(web): add /series/<id> page for viewing a media series#78
andykais-claude wants to merge 2 commits into
mainfrom
cursor/rebase-series-view-page-caeb

Conversation

@andykais-claude

@andykais-claude andykais-claude commented Jul 7, 2026

Copy link
Copy Markdown
Collaborator

Summary

This is a rebase of #68 (cursor/series-view-page-1fd2) onto the current main, plus the follow-up changes needed to keep the new /series/<id> route consistent with commits that landed on main since the original PR branched.

Adds a new /series/<series_id> page to @forager/web for viewing the contents of a media series. The page mirrors the /browse layout (Header with filters, Sidebar with details, Footer with view controls, MediaList/MediaView in the main area) but drives its results from forager.series.search scoped to the given series_id.

Rebase notes

  • Rebased the original commit (extract shared browse-like components into $lib/components) onto main.
  • main gained impl(core,cli,web): add media_type search filter (#71), which added a media_type filter (image/video/audio) to both media and series search. The new series route created its own queryparams.svelte.ts before that feature existed, so a follow-up commit brings the series query params in line with browse: the image/video/audio dropdown values now map to the canonical uppercase query.media_type filter supported by forager.series.search (in addition to the legacy animated value).
  • main also gained impl(web): ToggleFullScreen and ToggleFitMedia keybinds (#60), which modified Footer.svelte, MediaView.svelte, and browse/+page.svelte — files this PR moved/renamed into $lib/components/browse_like/. Git detected the renames and merged impl(web): ToggleFullScreen and ToggleFitMedia keybinds #60 into the new locations with a few content conflicts, resolved as follows:

Differences from /browse

  • Each media tile displays its series_index underneath (#0, #1, …).
  • The sort dropdown defaults to Series Index and includes series_index alongside the standard sort options; the group_by-only Count option is excluded.
  • Default order is ascending.
  • The search mode / group-by controls are omitted since they don't apply inside a series.

Cross-linking from /browse

Every media-series tile on /browse renders a View series link that navigates to /series/<id>.

Shared components

  • Moved Footer, SearchParams, SearchResults, MediaList, MediaView, MediaDetails, MediaDetailEntry, and SearchLink into $lib/components/browse_like/.
  • Moved dimensions and media_selections runes into $lib/runes/.
  • Introduced a BrowseLikeController base with a BrowseLikeQueryParams contract so both routes drive the shared components uniformly.
  • Widened MediaListRune to accept a 'series_search' paginate input backed by forager.series.search.

Testing

  • deno task --cwd packages/web build — succeeds.
  • deno run -A npm:svelte-check — 125 errors (down from 133 pre-rebase thanks to impl(web): ToggleFullScreen and ToggleFitMedia keybinds #60's settings typing); all pre-existing module-resolution/indexing errors. No new errors introduced by the rebase or conflict resolution (resolved MediaView.svelte is byte-identical to main's except the shared-controller type import).
  • Manually verified end-to-end in a browser on /series/4 (a seeded 3-item series of image/video/audio):
    • The page renders all items with #0/#1/#2 labels.
    • The image/video/audio media_type filter dropdown filters correctly.
    • impl(web): ToggleFullScreen and ToggleFitMedia keybinds #60's new keybinds now work on the series route: f toggles fullscreen and Ctrl+Space toggles media fit (the media visibly resizes), matching /browse.
Open in Web Open in Cursor 

@andykais andykais changed the title impl(web): add /series/&lt;id&gt; page for viewing a media series impl(web): add /series/<id>; page for viewing a media series Jul 7, 2026
@andykais andykais changed the title impl(web): add /series/<id>; page for viewing a media series impl(web): add /series/<id> page for viewing a media series Jul 7, 2026
cursoragent and others added 2 commits July 8, 2026 03:11
Moves the media browsing UI components (MediaList, MediaDetails,
MediaView, Footer, SearchParams, SearchResults, SearchLink,
MediaDetailEntry) and their supporting runes (dimensions,
media_selections) out of the route-local browse folder into
$lib/components/browse_like and $lib/runes so they can be reused
by the upcoming /series/<series_id> route. Introduces a
BrowseLikeController base with a BrowseLikeQueryParams contract
that shared components rely on. Widens MediaListRune to accept a
new 'series_search' paginate type.

Co-authored-by: andykais-claude <andykais-claude@users.noreply.github.com>
Brings the /series/<id> route query params in line with the browse
route after main's media_type search filter (#71). Maps the
image/video/audio dropdown values to the canonical uppercase
query.media_type filter now supported by forager.series.search, in
addition to the existing 'animated' handling.

Co-authored-by: andykais-claude <andykais-claude@users.noreply.github.com>
@cursor cursor Bot force-pushed the cursor/rebase-series-view-page-caeb branch from a512790 to c7eecf1 Compare July 8, 2026 03:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants