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))
}