package templates import "mal/internal/jikan" import "mal/internal/database" import "fmt" type WatchingAnimeWithDetails struct { Entry database.GetWatchingAnimeRow Anime jikan.Anime } templ Notifications(watching []WatchingAnimeWithDetails) { @Layout("mal - notifications") {

upcoming episodes

anime you're watching

if len(watching) == 0 {

no airing anime in your watching list

add currently airing shows to your watching list to see upcoming episodes here

} else {
for _, item := range watching { @NotificationCard(item) }
}
} } templ NotificationCard(item WatchingAnimeWithDetails) {
if item.Entry.ImageUrl != "" { { } else {
no image
}
{ displayTitle(item.Entry) }
if item.Anime.Broadcast.String != "" { { item.Anime.Broadcast.String } } if item.Anime.Episodes > 0 { if item.Entry.CurrentEpisode.Valid { { fmt.Sprintf("%d / %d eps", item.Entry.CurrentEpisode.Int64, item.Anime.Episodes) } } else { { fmt.Sprintf("0 / %d eps", item.Anime.Episodes) } } } else if item.Entry.CurrentEpisode.Valid && item.Entry.CurrentEpisode.Int64 > 0 { { fmt.Sprintf("%d eps watched", item.Entry.CurrentEpisode.Int64) } }
} func displayTitle(entry database.GetWatchingAnimeRow) string { if entry.TitleEnglish.Valid && entry.TitleEnglish.String != "" { return entry.TitleEnglish.String } if entry.TitleJapanese.Valid && entry.TitleJapanese.String != "" { return entry.TitleJapanese.String } return entry.TitleOriginal } func truncate(s string, max int) string { if len(s) <= max { return s } return s[:max-3] + "..." }