package templates import ( "fmt" "net/url" "mal/integrations/jikan" "mal/web/components" "mal/web/components/ui" "mal/web/components/watch" "mal/web/components/watchlist" "mal/web/shared" ) templ WatchPage(anime jikan.Anime, data shared.WatchPageData) { @Layout(fmt.Sprintf("%s - episode %s", anime.DisplayTitle(), data.CurrentEpisode), true) {
@watch.VideoPlayer(data)
if shared.CanGoPrevEpisode(data.CurrentEpisode) { ◀ Prev } else { ◀ Prev } if shared.CanGoNextEpisode(data.CurrentEpisode, anime.Episodes) { Next ▶ } else { Next ▶ } @watchlist.WatchlistDropdown( anime.MalID, anime.Title, anime.TitleEnglish, anime.TitleJapanese, anime.ImageURL(), data.CurrentStatus, anime.Airing, )

Watch more seasons of this anime

@components.LoadingIndicator("Loading relations")
} } templ LoadingIndicatorSmall() {
} templ EpisodeList(episodes []jikan.Episode, currentEpisode string, animeID int) { if len(episodes) == 0 {

No episodes available

} else {
for _, ep := range episodes { @EpisodeItem(ep, currentEpisode, animeID) }
} } templ EpisodeItem(episode jikan.Episode, currentEpisode string, animeID int) { {{ isCurrent := fmt.Sprintf("%d", episode.MalID) == currentEpisode }} { fmt.Sprintf("%d", episode.MalID) } if episode.Title != "" { { episode.Title } } else { Episode { fmt.Sprintf("%d", episode.MalID) } }
if episode.Filler { Filler } if episode.Recap { Recap } if isCurrent { }
} func buildStreamURL(mode string, token string) string { if token == "" { return "" } return fmt.Sprintf("/watch/proxy/stream?mode=%s&token=%s", url.QueryEscape(mode), url.QueryEscape(token)) }