Show sequels of completed anime
This commit is contained in:
parent
516b4a1966
commit
ca90d40ca9
@ -2,14 +2,31 @@ component AnimeGrid(animes []*arn.Anime, user *arn.User)
|
|||||||
#load-more-target.anime-grid
|
#load-more-target.anime-grid
|
||||||
AnimeGridScrollable(animes, user)
|
AnimeGridScrollable(animes, user)
|
||||||
|
|
||||||
|
component AnimeGridWithRelation(entries []*utils.AnimeWithRelatedAnime, user *arn.User)
|
||||||
|
#load-more-target.anime-grid
|
||||||
|
AnimeGridWithRelationScrollable(entries, user)
|
||||||
|
|
||||||
component AnimeGridScrollable(animes []*arn.Anime, user *arn.User)
|
component AnimeGridScrollable(animes []*arn.Anime, user *arn.User)
|
||||||
each anime in animes
|
each anime in animes
|
||||||
.anime-grid-cell(data-added=(user != nil && user.AnimeList().Contains(anime.ID)))
|
.anime-grid-cell(data-added=(user != nil && user.AnimeList().Contains(anime.ID)))
|
||||||
a(href="/anime/" + toString(anime.ID))
|
a(href="/anime/" + anime.ID)
|
||||||
img.anime-grid-image.lazy(data-src=anime.ImageLink("medium"), data-webp="true", data-color=anime.AverageColor(), alt=anime.Title.Romaji)
|
img.anime-grid-image.lazy(data-src=anime.ImageLink("medium"), data-webp="true", data-color=anime.AverageColor(), alt=anime.Title.Romaji)
|
||||||
.anime-grid-title
|
.anime-grid-title
|
||||||
.anime-grid-title-text= anime.Title.ByUser(user)
|
.anime-grid-title-text= anime.Title.ByUser(user)
|
||||||
|
|
||||||
|
AnimeGridButton(anime, user)
|
||||||
|
|
||||||
|
component AnimeGridWithRelationScrollable(entries []*utils.AnimeWithRelatedAnime, user *arn.User)
|
||||||
|
each entry in entries
|
||||||
|
.anime-grid-cell(data-added=(user != nil && user.AnimeList().Contains(entry.Anime.ID)))
|
||||||
|
a(href="/anime/" + entry.Anime.ID)
|
||||||
|
img.anime-grid-image.lazy(data-src=entry.Anime.ImageLink("medium"), data-webp="true", data-color=entry.Anime.AverageColor(), alt=entry.Anime.Title.Romaji)
|
||||||
|
.anime-grid-title
|
||||||
|
.anime-grid-title-text= entry.Anime.Title.ByUser(user)
|
||||||
|
|
||||||
|
AnimeGridButton(entry.Anime, user)
|
||||||
|
|
||||||
|
component AnimeGridButton(anime *arn.Anime, user *arn.User)
|
||||||
if user != nil && !user.AnimeList().Contains(anime.ID)
|
if user != nil && !user.AnimeList().Contains(anime.ID)
|
||||||
button.anime-grid-add-button.action(data-action="addAnimeToCollection", data-trigger="click", data-api="/api/animelist/" + user.ID, data-anime-id=anime.ID)
|
button.anime-grid-add-button.action(data-action="addAnimeToCollection", data-trigger="click", data-api="/api/animelist/" + user.ID, data-anime-id=anime.ID)
|
||||||
RawIcon("plus")
|
RawIcon("plus")
|
@ -1,4 +1,4 @@
|
|||||||
component ExploreAnime(animeList []*arn.Anime, year string, status string, typ string, user *arn.User)
|
component ExploreAnime(animes []*arn.Anime, year string, status string, typ string, user *arn.User)
|
||||||
#filter-root(data-url="/explore/anime")
|
#filter-root(data-url="/explore/anime")
|
||||||
ExploreFilters(year, status, typ, false)
|
ExploreFilters(year, status, typ, false)
|
||||||
|
|
||||||
@ -7,6 +7,10 @@ component ExploreAnime(animeList []*arn.Anime, year string, status string, typ s
|
|||||||
button.action(data-trigger="click", data-action="hideAddedAnime", title="Hide anime in my collection")
|
button.action(data-trigger="click", data-action="hideAddedAnime", title="Hide anime in my collection")
|
||||||
RawIcon("eye-slash")
|
RawIcon("eye-slash")
|
||||||
|
|
||||||
|
if user != nil
|
||||||
|
a.button(href="/explore/sequels", title="View sequels of my completed anime")
|
||||||
|
RawIcon("forward")
|
||||||
|
|
||||||
a.button(href="/explore/color/any/anime", title="View colors")
|
a.button(href="/explore/color/any/anime", title="View colors")
|
||||||
RawIcon("paint-brush")
|
RawIcon("paint-brush")
|
||||||
|
|
||||||
@ -16,10 +20,10 @@ component ExploreAnime(animeList []*arn.Anime, year string, status string, typ s
|
|||||||
h1.page-title Explore
|
h1.page-title Explore
|
||||||
|
|
||||||
.explore-anime
|
.explore-anime
|
||||||
if len(animeList) == 0
|
if len(animes) == 0
|
||||||
p.no-data.mountable No anime found using the above filters.
|
p.no-data.mountable No anime found using the above filters.
|
||||||
else
|
else
|
||||||
AnimeGrid(animeList, user)
|
AnimeGrid(animes, user)
|
||||||
|
|
||||||
component ExploreFilters(year string, status string, typ string, advancedFilters bool)
|
component ExploreFilters(year string, status string, typ string, advancedFilters bool)
|
||||||
.explore-filters
|
.explore-filters
|
||||||
|
8
pages/explore/explorerelations/relations.pixy
Normal file
8
pages/explore/explorerelations/relations.pixy
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
component ExploreAnimeSequels(entries []*utils.AnimeWithRelatedAnime, user *arn.User)
|
||||||
|
h1 Sequels of my completed anime
|
||||||
|
|
||||||
|
.explore-anime
|
||||||
|
if len(entries) == 0
|
||||||
|
p.no-data.mountable No sequels found for the anime you completed.
|
||||||
|
else
|
||||||
|
AnimeGridWithRelation(entries, user)
|
57
pages/explore/explorerelations/sequels.go
Normal file
57
pages/explore/explorerelations/sequels.go
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
package explorerelations
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
"sort"
|
||||||
|
|
||||||
|
"github.com/animenotifier/arn"
|
||||||
|
|
||||||
|
"github.com/aerogo/aero"
|
||||||
|
"github.com/animenotifier/notify.moe/components"
|
||||||
|
"github.com/animenotifier/notify.moe/utils"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Sequels ...
|
||||||
|
func Sequels(ctx *aero.Context) string {
|
||||||
|
user := utils.GetUser(ctx)
|
||||||
|
|
||||||
|
if user == nil {
|
||||||
|
return ctx.Error(http.StatusUnauthorized, "Not logged in", nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
animeList := user.AnimeList()
|
||||||
|
sequels := []*utils.AnimeWithRelatedAnime{}
|
||||||
|
|
||||||
|
for anime := range arn.StreamAnime() {
|
||||||
|
if animeList.Contains(anime.ID) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
prequels := anime.Prequels()
|
||||||
|
|
||||||
|
for _, prequel := range prequels {
|
||||||
|
item := animeList.Find(prequel.ID)
|
||||||
|
|
||||||
|
if item != nil && item.Status == arn.AnimeListStatusCompleted {
|
||||||
|
sequels = append(sequels, &utils.AnimeWithRelatedAnime{
|
||||||
|
Anime: anime,
|
||||||
|
Related: prequel,
|
||||||
|
})
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sort.Slice(sequels, func(i, j int) bool {
|
||||||
|
aScore := sequels[i].Anime.Score()
|
||||||
|
bScore := sequels[j].Anime.Score()
|
||||||
|
|
||||||
|
if aScore == bScore {
|
||||||
|
return sequels[i].Anime.Title.Canonical < sequels[j].Anime.Title.Canonical
|
||||||
|
}
|
||||||
|
|
||||||
|
return aScore > bScore
|
||||||
|
})
|
||||||
|
|
||||||
|
return ctx.HTML(components.ExploreAnimeSequels(sequels, user))
|
||||||
|
}
|
@ -28,6 +28,7 @@ import (
|
|||||||
"github.com/animenotifier/notify.moe/pages/episode"
|
"github.com/animenotifier/notify.moe/pages/episode"
|
||||||
"github.com/animenotifier/notify.moe/pages/explore"
|
"github.com/animenotifier/notify.moe/pages/explore"
|
||||||
"github.com/animenotifier/notify.moe/pages/explore/explorecolor"
|
"github.com/animenotifier/notify.moe/pages/explore/explorecolor"
|
||||||
|
"github.com/animenotifier/notify.moe/pages/explore/explorerelations"
|
||||||
"github.com/animenotifier/notify.moe/pages/forum"
|
"github.com/animenotifier/notify.moe/pages/forum"
|
||||||
"github.com/animenotifier/notify.moe/pages/genre"
|
"github.com/animenotifier/notify.moe/pages/genre"
|
||||||
"github.com/animenotifier/notify.moe/pages/genres"
|
"github.com/animenotifier/notify.moe/pages/genres"
|
||||||
@ -79,6 +80,7 @@ func Configure(app *aero.Application) {
|
|||||||
l.Page("/explore/anime/:year/:status/:type", explore.Filter)
|
l.Page("/explore/anime/:year/:status/:type", explore.Filter)
|
||||||
l.Page("/explore/color/:color/anime", explorecolor.AnimeByAverageColor)
|
l.Page("/explore/color/:color/anime", explorecolor.AnimeByAverageColor)
|
||||||
l.Page("/explore/color/:color/anime/from/:index", explorecolor.AnimeByAverageColor)
|
l.Page("/explore/color/:color/anime/from/:index", explorecolor.AnimeByAverageColor)
|
||||||
|
l.Page("/explore/sequels", explorerelations.Sequels)
|
||||||
l.Page("/login", login.Get)
|
l.Page("/login", login.Get)
|
||||||
l.Page("/api", apiview.Get)
|
l.Page("/api", apiview.Get)
|
||||||
// l.Ajax("/dashboard", dashboard.Get)
|
// l.Ajax("/dashboard", dashboard.Get)
|
||||||
|
9
utils/AnimeWithRelatedAnime.go
Normal file
9
utils/AnimeWithRelatedAnime.go
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
package utils
|
||||||
|
|
||||||
|
import "github.com/animenotifier/arn"
|
||||||
|
|
||||||
|
// AnimeWithRelatedAnime ...
|
||||||
|
type AnimeWithRelatedAnime struct {
|
||||||
|
Anime *arn.Anime
|
||||||
|
Related *arn.Anime
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user