55 lines
1.2 KiB
Go
55 lines
1.2 KiB
Go
package filteranime
|
|
|
|
import (
|
|
"github.com/aerogo/aero"
|
|
"github.com/animenotifier/arn"
|
|
"github.com/animenotifier/notify.moe/components"
|
|
)
|
|
|
|
const maxAnimeEntries = 70
|
|
|
|
// editorList renders the anime list with the given title and filter.
|
|
func editorList(ctx *aero.Context, title string, filter func(*arn.Anime) bool, searchLink func(*arn.Anime) string) string {
|
|
animes, count := filterAnime(ctx, filter)
|
|
|
|
return ctx.HTML(components.AnimeEditorListFull(
|
|
title,
|
|
animes,
|
|
count,
|
|
ctx.URI(),
|
|
searchLink,
|
|
))
|
|
}
|
|
|
|
// filterAnime filters anime by the given filter function and
|
|
// additionally applies year and types filters if specified.
|
|
func filterAnime(ctx *aero.Context, filter func(*arn.Anime) bool) ([]*arn.Anime, int) {
|
|
year, _ := ctx.GetInt("year")
|
|
animeType := ctx.Get("type")
|
|
|
|
// Filter
|
|
animes := arn.FilterAnime(func(anime *arn.Anime) bool {
|
|
if year != 0 && year != anime.StartDateTime().Year() {
|
|
return false
|
|
}
|
|
|
|
if animeType != "" && anime.Type != animeType {
|
|
return false
|
|
}
|
|
|
|
return filter(anime)
|
|
})
|
|
|
|
// Sort
|
|
arn.SortAnimeByQuality(animes)
|
|
|
|
// Limit
|
|
count := len(animes)
|
|
|
|
if count > maxAnimeEntries {
|
|
animes = animes[:maxAnimeEntries]
|
|
}
|
|
|
|
return animes, count
|
|
}
|