Added more filters for editors

This commit is contained in:
2020-02-22 17:07:47 +09:00
parent 8cf76481bf
commit 43c978ed8b
6 changed files with 131 additions and 0 deletions

View File

@ -64,6 +64,7 @@ component EditorTabs(url string, user *arn.User)
Tab("Status", "calendar-check-o", "/editor/anime/details/status" + user.Settings().Editor.Filter.Suffix())
Tab("Trailers", "youtube", "/editor/anime/details/trailers" + user.Settings().Editor.Filter.Suffix())
Tab("Start date", "calendar", "/editor/anime/details/startdate" + user.Settings().Editor.Filter.Suffix())
Tab("End date", "calendar", "/editor/anime/details/enddate" + user.Settings().Editor.Filter.Suffix())
Tab("Ep. Length", "clock-o", "/editor/anime/details/episodelength" + user.Settings().Editor.Filter.Suffix())
Tab("Source", "book", "/editor/anime/details/source" + user.Settings().Editor.Filter.Suffix())

View File

@ -0,0 +1,22 @@
package filteranime
import (
"time"
"github.com/aerogo/aero"
"github.com/animenotifier/notify.moe/arn"
"github.com/animenotifier/notify.moe/arn/validate"
)
// EndDate ...
func EndDate(ctx aero.Context) error {
return editorList(
ctx,
"Anime without a valid end date",
func(anime *arn.Anime) bool {
_, err := time.Parse(validate.DateFormat, anime.EndDate)
return err != nil
},
nil,
)
}

View File

@ -0,0 +1,55 @@
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")
}
characters, count := filterCharacters(ctx, user, filter)
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.
func filterCharacters(ctx aero.Context, user *arn.User, filter func(*arn.Character) bool) ([]*arn.Character, int) {
// 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
}

View File

@ -0,0 +1,30 @@
component CharacterEditorListFull(title string, missing []*arn.Character, count int, generateSearchLink func(*arn.Character) string, user *arn.User)
.corner-buttons-left
a.button(href="/editor")
RawIcon("arrow-left")
h1.editor-list-page-title.mountable= title
footer.footer.editor-list-entry-count.mountable= strconv.Itoa(count) + " characters"
CharacterEditorList(missing, generateSearchLink)
component CharacterEditorList(characters []*arn.Character, generateSearchLink func(*arn.Character) string)
table.editor-list
thead
tr.mountable
th Name
if generateSearchLink != nil
th Tools
tbody
each character in characters
tr.mountable
td
a(href=character.Link(), target="_blank", rel="noopener")
if character.HasImage()
img.character-list-item-image.lazy(data-src=character.ImageLink("small"), data-webp="true", data-color=character.AverageColor(), alt=character.Name.Canonical)
span= character.Name.Canonical
if generateSearchLink != nil
td
a(href=generateSearchLink(character), target="_blank", rel="noopener") 🔍

View File

@ -0,0 +1,18 @@
package filtercharacters
import (
"github.com/aerogo/aero"
"github.com/animenotifier/notify.moe/arn"
)
// NoImage ...
func NoImage(ctx aero.Context) error {
return characterList(
ctx,
"Characters without an image",
func(character *arn.Character) bool {
return !character.HasImage()
},
nil,
)
}