package templates import "mal/internal/jikan" import "mal/internal/shared/ui" import "fmt" import "strings" templ AnimeDetails(anime jikan.Anime, currentStatus string) { @Layout("mal - " + anime.DisplayTitle()) {
if anime.ImageURL() != "" { { } else {
No image
}

{ anime.DisplayTitle() }

if anime.TitleJapanese != "" {

{ anime.TitleJapanese }

}
if anime.ShortRating() != "" { { anime.ShortRating() } } if anime.Type != "" { { anime.Type } } if anime.Episodes > 0 { { fmt.Sprintf("%d ep", anime.Episodes) } } if anime.ShortDuration() != "" { { anime.ShortDuration() } }
@WatchlistDropdown(anime.MalID, anime.Title, anime.TitleEnglish, anime.TitleJapanese, anime.ImageURL(), currentStatus, anime.Airing)

Synopsis

if anime.Synopsis != "" {

{ anime.Synopsis }

} else {

No synopsis available.

}

Related

@ui.LoadingIndicator("Loading relations")

Recommendations

@ui.LoadingIndicator("Loading recommendations")
} } func joinNames(entities []jikan.NamedEntity) string { names := make([]string, len(entities)) for i, e := range entities { names[i] = e.Name } return strings.Join(names, ", ") } templ WatchlistDropdown(animeID int, animeTitle string, animeTitleEnglish string, animeTitleJapanese string, animeImage string, currentStatus string, airing bool) { } templ dropdownStatusOption(animeID int, animeTitle string, animeTitleEnglish string, animeTitleJapanese string, animeImage string, status string, currentStatus string, airing bool) { } templ statusOption(anime jikan.Anime, status string, currentStatus string) { } func formatStatus(status string) string { switch status { case "watching": return "Watching" case "completed": return "Completed" case "on_hold": return "On hold" case "dropped": return "Dropped" case "plan_to_watch": return "Plan to watch" default: return status } } templ AnimeRelationsList(relations []jikan.RelationEntry) { if len(relations) > 1 {
for _, rel := range relations { @ui.AnimeCard(ui.AnimeCardProps{ ID: rel.Anime.MalID, Title: rel.Anime.DisplayTitle(), ImageURL: rel.Anime.ImageURL(), Class: "relation-card" + func() string { if rel.IsCurrent { return " current" }; return "" }(), ImgClass: "relation-thumb", TitleClass: "relation-title", CurrentNode: rel.IsCurrent, }) }
} else {

No related anime found.

} } templ AnimeRecommendations(recs []jikan.Anime) { if len(recs) > 0 {
for _, anime := range recs { @ui.AnimeCard(ui.AnimeCardProps{ ID: anime.MalID, Title: anime.DisplayTitle(), ImageURL: anime.ImageURL(), Class: "relation-card", ImgClass: "relation-thumb", TitleClass: "relation-title", }) }
} else {

No recommendations available.

} }