56 lines
1.3 KiB
Go
Raw Normal View History

2020-02-22 08:07:47 +00:00
package filtercharacters
import (
"net/http"
"github.com/aerogo/aero"
"github.com/animenotifier/notify.moe/arn"
"github.com/animenotifier/notify.moe/components"
)
const maxCharacterEntries = 70
// characterList renders the characters with the given filter for editors.
func characterList(ctx aero.Context, title string, filter func(*arn.Character) bool, searchLink func(*arn.Character) string) error {
user := arn.GetUserFromContext(ctx)
if user == nil || (user.Role != "admin" && user.Role != "editor") {
return ctx.Error(http.StatusUnauthorized, "Not authorized")
}
2020-02-22 08:08:40 +00:00
characters, count := filterCharacters(filter)
2020-02-22 08:07:47 +00:00
return ctx.HTML(components.CharacterEditorListFull(
title,
characters,
count,
searchLink,
user,
))
}
// filterCharacters filters anime by the given filter function and
// additionally applies year and types filters if specified.
2020-02-22 08:08:40 +00:00
func filterCharacters(filter func(*arn.Character) bool) ([]*arn.Character, int) {
2020-02-22 08:07:47 +00:00
// Filter
characters := arn.FilterCharacters(func(character *arn.Character) bool {
if character.IsDraft {
return false
}
return filter(character)
})
// Sort
arn.SortCharactersByLikes(characters)
// Limit
count := len(characters)
if count > maxCharacterEntries {
characters = characters[:maxCharacterEntries]
}
return characters, count
}