Files
bitvid/views/playlist.html
T
thePR0M3TH3ANandClaude Opus 4.8 291d55d966 playlists(#37): playlist view — renders a playlist's ordered videos
New route #view=playlist&pubkey=<hex>&id=<playlist id>:
- views/playlist.html: title + meta + the shared #videoList grid.
- js/playlistView.js: initPlaylistView() reads pubkey+id from the hash, fetches
  the playlist (facade), resolves its ordered `a` refs against the app's active
  videos (buildVideoAddressPointer keys, same 30078 contract), points the back
  link at the creator's channel, and renders via app.renderVideoList with
  preserveOrder:true so the playlist's order is kept (not re-sorted by date —
  #21). Unresolved refs are skipped; the meta line shows "N of M available".
  Gated by FEATURE_PLAYLISTS.
- FEED_TYPES.PLAYLIST + viewManager registration (getApp: getApplication).

The channel-section cards now resolve to a working view. node --check + lint +
build clean. End-to-end browser verification comes with the create/edit slice
(needs a way to actually make a playlist).

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-07-06 13:16:28 -04:00

28 lines
991 B
HTML

<!-- views/playlist.html — creator playlist (#37). Renders the playlist's ordered
videos into the shared #videoList grid via app.renderVideoList. -->
<section data-ds="new">
<div class="mb-4">
<a
href="#view=most-recent-videos"
id="playlistBackLink"
class="text-sm text-info-strong hover:underline"
>← Back to channel</a
>
</div>
<div class="flex items-center gap-2 mb-2">
<h2 id="playlistTitle" class="text-xl font-semibold text-text">Playlist</h2>
</div>
<p id="playlistMeta" class="text-sm text-muted mb-4"></p>
<div id="videoList" class="bv-grid-video" data-testid="video-list">
<div class="sidebar-loading-wrapper" role="status" aria-live="polite">
<div class="sidebar-loading-indicator">
<span
class="status-spinner status-spinner--inline"
aria-hidden="true"
></span>
<span class="sidebar-loading-text">Loading playlist…</span>
</div>
</div>
</div>
</section>