From cacb804a19384eb4f4903400d614cdd57e45e595 Mon Sep 17 00:00:00 2001 From: Eduard Urbach Date: Thu, 8 Jun 2017 21:54:39 +0200 Subject: [PATCH] Implemented anime list basics --- api.go | 34 ++++++++++++++++++++++++++++++++ pages/anime/anime.pixy | 3 +++ pages/anime/anime.scarlet | 11 +++++++++++ pages/dashboard/dashboard.go | 2 +- pages/profile/anime-list.scarlet | 15 ++++++++++++++ pages/profile/profile.go | 4 +++- pages/profile/profile.pixy | 10 +++++++++- pages/profile/profile.scarlet | 2 +- styles/content.scarlet | 3 ++- styles/light-button.scarlet | 9 +++++++-- 10 files changed, 86 insertions(+), 7 deletions(-) create mode 100644 pages/profile/anime-list.scarlet diff --git a/api.go b/api.go index e72f4438..8e47506a 100644 --- a/api.go +++ b/api.go @@ -1,8 +1,12 @@ package main import ( + "errors" + "net/http" + "github.com/aerogo/aero" "github.com/animenotifier/arn" + "github.com/animenotifier/notify.moe/utils" ) func init() { @@ -52,4 +56,34 @@ func init() { return ctx.JSON(thread) }) + + app.Get("/api/anime/:id/add", func(ctx *aero.Context) string { + animeID := ctx.Get("id") + user := utils.GetUser(ctx) + + if user == nil { + return ctx.Error(http.StatusBadRequest, "Not logged in", errors.New("User not logged in")) + } + + animeList := user.AnimeList() + + if animeList.Contains(animeID) { + return ctx.Error(http.StatusBadRequest, "Anime already added", errors.New("Anime has already been added")) + } + + newItem := arn.AnimeListItem{ + AnimeID: animeID, + Status: arn.AnimeListStatusPlanned, + } + + animeList.Items = append(animeList.Items, newItem) + + saveError := animeList.Save() + + if saveError != nil { + return ctx.Error(http.StatusInternalServerError, "Could not save anime list in database", saveError) + } + + return ctx.JSON(animeList) + }) } diff --git a/pages/anime/anime.pixy b/pages/anime/anime.pixy index 98e403bf..6e43520f 100644 --- a/pages/anime/anime.pixy +++ b/pages/anime/anime.pixy @@ -18,6 +18,9 @@ component Anime(anime *arn.Anime) //- h3.anime-section-name.anime-summary-header Summary p.anime-summary= anime.Summary + .anime-actions + a.light-button.action-button(href="#") Add to collection + h3.anime-section-name Ratings .anime-rating-categories .anime-rating-category(title=toString(anime.Rating.Overall)) diff --git a/pages/anime/anime.scarlet b/pages/anime/anime.scarlet index 94fdbd7c..6870f9ec 100644 --- a/pages/anime/anime.scarlet +++ b/pages/anime/anime.scarlet @@ -41,6 +41,17 @@ margin-bottom 0.5rem color rgba(60, 60, 60, 0.5) !important +.anime-actions + horizontal + justify-content center + margin content-padding 0 + +> 900px + .anime-actions + position absolute + top 0 + right content-padding + .anime-rating-categories horizontal width 100% diff --git a/pages/dashboard/dashboard.go b/pages/dashboard/dashboard.go index 2bb2cc2f..eb3914c7 100644 --- a/pages/dashboard/dashboard.go +++ b/pages/dashboard/dashboard.go @@ -29,5 +29,5 @@ func Get(ctx *aero.Context) string { return ctx.HTML(components.Dashboard(posts)) } - return ctx.HTML("ARN 4.0 is currently under construction.
Support the development") + return ctx.HTML("ARN 4.0 is currently under construction.
Support the development
Login via Google") } diff --git a/pages/profile/anime-list.scarlet b/pages/profile/anime-list.scarlet new file mode 100644 index 00000000..51d2591f --- /dev/null +++ b/pages/profile/anime-list.scarlet @@ -0,0 +1,15 @@ +.anime-list + horizontal + +.anime-list-item + padding 0.25rem + // padding calc(content-padding / 4) calc(content-padding / 2) + // margin 0.25rem 0 + // position relative + +.anime-list-item-image + width 55px !important + border-radius 2px + // position absolute + // left 0 + // top 0 \ No newline at end of file diff --git a/pages/profile/profile.go b/pages/profile/profile.go index 19d0c4b4..d55977f1 100644 --- a/pages/profile/profile.go +++ b/pages/profile/profile.go @@ -27,5 +27,7 @@ func Get(ctx *aero.Context) string { threads = threads[:maxPosts] } - return ctx.HTML(components.Profile(viewUser, user, threads)) + animeList := viewUser.AnimeList() + + return ctx.HTML(components.Profile(viewUser, user, animeList, threads)) } diff --git a/pages/profile/profile.pixy b/pages/profile/profile.pixy index 2ed5a69e..0b004b5a 100644 --- a/pages/profile/profile.pixy +++ b/pages/profile/profile.pixy @@ -1,4 +1,4 @@ -component Profile(viewUser *arn.User, user *arn.User, threads []*arn.Thread) +component Profile(viewUser *arn.User, user *arn.User, animeList *arn.AnimeList, threads []*arn.Thread) .profile img.profile-cover(src=viewUser.CoverImageURL()) @@ -49,6 +49,14 @@ component Profile(viewUser *arn.User, user *arn.User, threads []*arn.Thread) //- a.light-button(href="#") Anime //- a.light-button(href="#") Forum + .profile-category + h3 Anime + + .anime-list + each item in animeList.Items + a.anime-list-item.ajax(href=item.Anime().Link(), title=item.Anime().Title.Canonical + " (" + toString(item.Episode) + " / " + arn.EpisodesToString(item.Anime().EpisodeCount) + ")") + img.anime-cover-image.anime-list-item-image(src=item.Anime().Image.Tiny, alt=item.Anime().Title.Canonical) + .profile-category h3 Forum diff --git a/pages/profile/profile.scarlet b/pages/profile/profile.scarlet index dc3c550f..bea4d019 100644 --- a/pages/profile/profile.scarlet +++ b/pages/profile/profile.scarlet @@ -80,4 +80,4 @@ animation cover-animation // Categories .profile-category - // padding content-padding \ No newline at end of file + margin-bottom content-padding \ No newline at end of file diff --git a/styles/content.scarlet b/styles/content.scarlet index 2062384e..b881cd03 100644 --- a/styles/content.scarlet +++ b/styles/content.scarlet @@ -2,4 +2,5 @@ vertical padding content-padding padding-top content-padding-top - line-height 1.7em \ No newline at end of file + line-height 1.7em + position relative \ No newline at end of file diff --git a/styles/light-button.scarlet b/styles/light-button.scarlet index dc5e46d7..d6c5fc92 100644 --- a/styles/light-button.scarlet +++ b/styles/light-button.scarlet @@ -1,13 +1,18 @@ .light-button-group horizontal-wrap justify-content flex-start - font-size 0.9rem .light-button display inline-block padding 0.5rem 1rem border-radius 3px + font-size 0.9rem :hover color white !important - background-color link-hover-color \ No newline at end of file + background-color link-hover-color + +.action-button + ui-element + font-size 1rem + text-align center \ No newline at end of file