From 7923636b4a565ce8c18ecbb05b9b5d9abc191670 Mon Sep 17 00:00:00 2001 From: mkelvers Date: Mon, 20 Apr 2026 16:15:55 +0200 Subject: [PATCH] refactor(templates): simplify watch page using extracted components --- web/templates/watch.templ | 162 ++++++-------------------------------- 1 file changed, 24 insertions(+), 138 deletions(-) diff --git a/web/templates/watch.templ b/web/templates/watch.templ index 716b801..eca0765 100644 --- a/web/templates/watch.templ +++ b/web/templates/watch.templ @@ -1,52 +1,16 @@ package templates import ( - "encoding/json" "fmt" - "mal/internal/jikan" - "mal/internal/shared/ui" - "net/url" - "strconv" + "mal/integrations/jikan" + "mal/web/components" + "mal/web/components/ui" + "mal/web/components/watch" + "mal/web/components/watchlist" + "mal/web/shared" ) -// WatchPageData holds the data needed for the watch page -type WatchPageData struct { - MalID int - Title string - TitleEnglish string - TitleJapanese string - ImageURL string - Airing bool - CurrentEpisode string - TotalEpisodes int - StartTimeSeconds float64 - CurrentStatus string - InitialMode string - AvailableModes []string - ModeSources map[string]ModeSource - Segments []SkipSegment -} - -// ModeSource represents a stream source for a specific mode (dub/sub) -type ModeSource struct { - Token string `json:"token"` - Subtitles []SubtitleItem `json:"subtitles"` -} - -// SubtitleItem represents a subtitle track -type SubtitleItem struct { - Lang string `json:"lang"` - Token string `json:"token"` -} - -// SkipSegment represents a skippable segment (intro/outro) -type SkipSegment struct { - Type string `json:"type"` - Start float64 `json:"start"` - End float64 `json:"end"` -} - -templ WatchPage(anime jikan.Anime, data WatchPageData) { +templ WatchPage(anime jikan.Anime, data shared.WatchPageData) { @Layout(fmt.Sprintf("%s - episode %s", anime.DisplayTitle(), data.CurrentEpisode), true) {
@@ -61,18 +25,18 @@ templ WatchPage(anime jikan.Anime, data WatchPageData) { hx-trigger="load" class="overflow-y-auto flex-1 [&::-webkit-scrollbar]:hidden" > - @LoadingIndicatorSmall() + @ui.LoadingIndicatorSmall()
- @VideoPlayer(data) + @watch.VideoPlayer(data)

Watch more seasons of this anime

- @ui.LoadingIndicator("Loading relations") + @components.LoadingIndicator("Loading relations")
@@ -196,10 +160,10 @@ templ EpisodeItem(episode jikan.Episode, currentEpisode string, animeID int) { } -templ VideoPlayer(data WatchPageData) { - {{ streamToken := modeToken(data.InitialMode, data.ModeSources) }} - {{ hasDub := modeAvailable(data.AvailableModes, "dub") }} - {{ hasSub := modeAvailable(data.AvailableModes, "sub") }} +templ VideoPlayer(data shared.WatchPageData) { + {{ streamToken := shared.ModeToken(data.InitialMode, data.ModeSources) }} + {{ hasDub := shared.ModeAvailable(data.AvailableModes, "dub") }} + {{ hasSub := shared.ModeAvailable(data.AvailableModes, "sub") }}