From df0b6abd68323df52ba7ecdad2b58fcdd4cd484a Mon Sep 17 00:00:00 2001 From: Scott Date: Wed, 14 Mar 2018 11:57:40 +0100 Subject: [PATCH 1/5] =?UTF-8?q?=E2=9C=A8=20Added=20the=20liked=20soundtrac?= =?UTF-8?q?ks?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/index.go | 3 ++- pages/profile/profile.pixy | 6 +++++- pages/profile/tracks.go | 20 ++++++++++++++++++++ tests.go | 8 ++++++-- 4 files changed, 33 insertions(+), 4 deletions(-) diff --git a/pages/index.go b/pages/index.go index b03afe35..effb57fe 100644 --- a/pages/index.go +++ b/pages/index.go @@ -169,7 +169,8 @@ func Configure(app *aero.Application) { l.Page("/user/:nick", profile.Get) l.Page("/user/:nick/forum/threads", profile.GetThreadsByUser) l.Page("/user/:nick/forum/posts", profile.GetPostsByUser) - l.Page("/user/:nick/soundtracks", profile.GetSoundTracksByUser) + l.Page("/user/:nick/soundtracks/added", profile.GetSoundTracksByUser) + l.Page("/user/:nick/soundtracks/liked", profile.GetSoundTracksLikedByUser) l.Page("/user/:nick/stats", profile.GetStatsByUser) l.Page("/user/:nick/followers", profile.GetFollowers) l.Page("/user/:nick/animelist", animelist.Get) diff --git a/pages/profile/profile.pixy b/pages/profile/profile.pixy index 27f5ca61..c5765fe7 100644 --- a/pages/profile/profile.pixy +++ b/pages/profile/profile.pixy @@ -26,12 +26,16 @@ component ProfileTabs(viewUser *arn.User, uri string) Tab("Anime", "th", "/+" + viewUser.Nick) Tab("Collection", "list", "/+" + viewUser.Nick + "/animelist/watching") Tab("Forum", "comment", "/+" + viewUser.Nick + "/forum/threads") - Tab("Tracks", "music", "/+" + viewUser.Nick + "/soundtracks") + Tab("Tracks", "music", "/+" + viewUser.Nick + "/soundtracks/added") Tab("Stats", "area-chart", "/+" + viewUser.Nick + "/stats") Tab("Followers", "users", "/+" + viewUser.Nick + "/followers") if strings.Contains(uri, "/animelist") StatusTabs("/+" + viewUser.Nick + "/animelist") + if strings.Contains(uri, "/soundtracks") + .tabs + Tab("Added", "music", "/+" + viewUser.Nick + "/soundtracks/added") + Tab("Liked", "heart", "/+" + viewUser.Nick + "/soundtracks/liked") component ProfileHeader(viewUser *arn.User, user *arn.User, uri string) ProfileHead(viewUser, user, uri) diff --git a/pages/profile/tracks.go b/pages/profile/tracks.go index 29e270d4..2be2db8d 100644 --- a/pages/profile/tracks.go +++ b/pages/profile/tracks.go @@ -28,3 +28,23 @@ func GetSoundTracksByUser(ctx *aero.Context) string { return ctx.HTML(components.TrackList(tracks, viewUser, user, ctx.URI())) } + +// GetSoundTracksByUser shows all soundtracks of a particular user. +func GetSoundTracksLikedByUser(ctx *aero.Context) string { + nick := ctx.Get("nick") + user := utils.GetUser(ctx) + viewUser, err := arn.GetUserByNick(nick) + + if err != nil { + return ctx.Error(http.StatusNotFound, "User not found", err) + } + + tracks := arn.FilterSoundTracks(func(track *arn.SoundTrack) bool { + return !track.IsDraft && len(track.Media) > 0 && track.LikedBy(viewUser.ID) + }) + + arn.SortSoundTracksLatestFirst(tracks) + + return ctx.HTML(components.TrackList(tracks, viewUser, user, ctx.URI())) + +} diff --git a/tests.go b/tests.go index 3b1e4dde..f5a22f19 100644 --- a/tests.go +++ b/tests.go @@ -14,8 +14,12 @@ var routeTests = map[string][]string{ "/+Akyoto/forum/posts", }, - "/user/:nick/soundtracks": []string{ - "/+Akyoto/soundtracks", + "/user/:nick/soundtracks/added": []string{ + "/+Akyoto/soundtracks/added", + }, + + "/user/:nick/soundtracks/liked": []string{ + "/+Akyoto/soundtracks/liked", }, "/user/:nick/followers": []string{ From 585a429e5296589904f0bfbaf7b7fa7aee8071c5 Mon Sep 17 00:00:00 2001 From: Scott Date: Wed, 14 Mar 2018 15:56:09 +0100 Subject: [PATCH 2/5] =?UTF-8?q?=E2=9C=A8=20Added=20infinitescroll=20in=20t?= =?UTF-8?q?he=20user=20soundtracks=20tab?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/index.go | 2 ++ pages/profile/tracks.go | 58 +++++++++++++++++++++++++++++++-------- pages/profile/tracks.pixy | 18 ++++++++---- 3 files changed, 61 insertions(+), 17 deletions(-) diff --git a/pages/index.go b/pages/index.go index effb57fe..493e7542 100644 --- a/pages/index.go +++ b/pages/index.go @@ -170,7 +170,9 @@ func Configure(app *aero.Application) { l.Page("/user/:nick/forum/threads", profile.GetThreadsByUser) l.Page("/user/:nick/forum/posts", profile.GetPostsByUser) l.Page("/user/:nick/soundtracks/added", profile.GetSoundTracksByUser) + l.Page("/user/:nick/soundtracks/added/from/:index", profile.GetSoundTracksByUser) l.Page("/user/:nick/soundtracks/liked", profile.GetSoundTracksLikedByUser) + l.Page("/user/:nick/soundtracks/liked/from/:index", profile.GetSoundTracksLikedByUser) l.Page("/user/:nick/stats", profile.GetStatsByUser) l.Page("/user/:nick/followers", profile.GetFollowers) l.Page("/user/:nick/animelist", animelist.Get) diff --git a/pages/profile/tracks.go b/pages/profile/tracks.go index 2be2db8d..f2ba841e 100644 --- a/pages/profile/tracks.go +++ b/pages/profile/tracks.go @@ -7,6 +7,7 @@ import ( "github.com/animenotifier/arn" "github.com/animenotifier/notify.moe/components" "github.com/animenotifier/notify.moe/utils" + "github.com/animenotifier/notify.moe/utils/infinitescroll" ) // GetSoundTracksByUser shows all soundtracks of a particular user. @@ -19,17 +20,35 @@ func GetSoundTracksByUser(ctx *aero.Context) string { return ctx.Error(http.StatusNotFound, "User not found", err) } - tracks := arn.FilterSoundTracks(func(track *arn.SoundTrack) bool { - return !track.IsDraft && len(track.Media) > 0 && track.CreatedBy == viewUser.ID - }) + index, _ := ctx.GetInt("index") - arn.SortSoundTracksLatestFirst(tracks) + // Fetch all eligible tracks + allTracks := fetchAllByUser(viewUser.ID) - return ctx.HTML(components.TrackList(tracks, viewUser, user, ctx.URI())) + // Sort the tracks by number of likes + arn.SortSoundTracksLatestFirst(allTracks) + + // Slice the part that we need + tracks := allTracks[index:] + + if len(tracks) > maxTracks { + tracks = tracks[:maxTracks] + } + + // Next index + nextIndex := infinitescroll.NextIndex(ctx, len(allTracks), maxTracks, index) + + // In case we're scrolling, send soundtracks only (without the page frame) + if index > 0 { + return ctx.HTML(components.SoundTracksScrollable(tracks, user)) + } + + // Otherwise, send the full page + return ctx.HTML(components.TrackList(tracks,viewUser, nextIndex, user, ctx.URI())) } -// GetSoundTracksByUser shows all soundtracks of a particular user. +// GetSoundTracksLikedByUser shows all soundtracks of a particular user. func GetSoundTracksLikedByUser(ctx *aero.Context) string { nick := ctx.Get("nick") user := utils.GetUser(ctx) @@ -39,12 +58,29 @@ func GetSoundTracksLikedByUser(ctx *aero.Context) string { return ctx.Error(http.StatusNotFound, "User not found", err) } - tracks := arn.FilterSoundTracks(func(track *arn.SoundTrack) bool { - return !track.IsDraft && len(track.Media) > 0 && track.LikedBy(viewUser.ID) - }) + index, _ := ctx.GetInt("index") - arn.SortSoundTracksLatestFirst(tracks) + // Fetch all eligible tracks + allTracks := fetchAllLikedByUser(viewUser.ID) - return ctx.HTML(components.TrackList(tracks, viewUser, user, ctx.URI())) + // Sort the tracks by number of likes + arn.SortSoundTracksLatestFirst(allTracks) + // Slice the part that we need + tracks := allTracks[index:] + + if len(tracks) > maxTracks { + tracks = tracks[:maxTracks] + } + + // Next index + nextIndex := infinitescroll.NextIndex(ctx, len(allTracks), maxTracks, index) + + // In case we're scrolling, send soundtracks only (without the page frame) + if index > 0 { + return ctx.HTML(components.SoundTracksScrollable(tracks, user)) + } + + // Otherwise, send the full page + return ctx.HTML(components.TrackList(tracks,viewUser, nextIndex, user, ctx.URI())) } diff --git a/pages/profile/tracks.pixy b/pages/profile/tracks.pixy index 1b4d3f9f..5ce54191 100644 --- a/pages/profile/tracks.pixy +++ b/pages/profile/tracks.pixy @@ -1,12 +1,18 @@ -component TrackList(tracks []*arn.SoundTrack, viewUser *arn.User, user *arn.User, uri string) +component TrackList(tracks []*arn.SoundTrack, viewUser *arn.User, nextIndex int, user *arn.User, uri string) ProfileHeader(viewUser, user, uri) - h1.page-title= "Tracks added by " + viewUser.Nick - + if strings.Contains(uri, "/added") + h1.page-title= "Tracks added by " + viewUser.Nick + else + h1.page-title= "Tracks liked by " + viewUser.Nick + if len(tracks) == 0 p.no-data.mountable= viewUser.Nick + " hasn't added any tracks yet." else - .soundtracks - each track in tracks - SoundTrack(track) + #load-more-target.soundtracks + SoundTracksScrollable(tracks, user) + + if nextIndex != -1 + .buttons + LoadMore(nextIndex) \ No newline at end of file From 9bbea14f6c184922eeeda335421e73dbb04c100f Mon Sep 17 00:00:00 2001 From: Scott Date: Wed, 14 Mar 2018 15:56:57 +0100 Subject: [PATCH 3/5] =?UTF-8?q?=F0=9F=92=84=20Swapped=20the=20position=20o?= =?UTF-8?q?f=20the=20liked=20and=20added=20tab=20for=20user=20tracks?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/profile/profile.pixy | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pages/profile/profile.pixy b/pages/profile/profile.pixy index c5765fe7..0e2cdd2d 100644 --- a/pages/profile/profile.pixy +++ b/pages/profile/profile.pixy @@ -26,7 +26,7 @@ component ProfileTabs(viewUser *arn.User, uri string) Tab("Anime", "th", "/+" + viewUser.Nick) Tab("Collection", "list", "/+" + viewUser.Nick + "/animelist/watching") Tab("Forum", "comment", "/+" + viewUser.Nick + "/forum/threads") - Tab("Tracks", "music", "/+" + viewUser.Nick + "/soundtracks/added") + Tab("Tracks", "music", "/+" + viewUser.Nick + "/soundtracks/liked") Tab("Stats", "area-chart", "/+" + viewUser.Nick + "/stats") Tab("Followers", "users", "/+" + viewUser.Nick + "/followers") @@ -34,8 +34,8 @@ component ProfileTabs(viewUser *arn.User, uri string) StatusTabs("/+" + viewUser.Nick + "/animelist") if strings.Contains(uri, "/soundtracks") .tabs - Tab("Added", "music", "/+" + viewUser.Nick + "/soundtracks/added") Tab("Liked", "heart", "/+" + viewUser.Nick + "/soundtracks/liked") + Tab("Added", "music", "/+" + viewUser.Nick + "/soundtracks/added") component ProfileHeader(viewUser *arn.User, user *arn.User, uri string) ProfileHead(viewUser, user, uri) From fd867003813ffe4e628cc8c84585ebae3fb7fd44 Mon Sep 17 00:00:00 2001 From: Scott Date: Wed, 14 Mar 2018 15:58:12 +0100 Subject: [PATCH 4/5] =?UTF-8?q?=E2=9C=85=20Add=20test=20for=20liked=20and?= =?UTF-8?q?=20infinite=20scroll=20for=20user=20tracks.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests.go b/tests.go index f5a22f19..ab1efc4b 100644 --- a/tests.go +++ b/tests.go @@ -18,10 +18,18 @@ var routeTests = map[string][]string{ "/+Akyoto/soundtracks/added", }, + "/user/:nick/soundtracks/added/from/:index": []string{ + "/+Akyoto/soundtracks/added/from/3", + }, + "/user/:nick/soundtracks/liked": []string{ "/+Akyoto/soundtracks/liked", }, + "/user/:nick/soundtracks/liked/from/:index": []string{ + "/+Akyoto/soundtracks/liked/from/3", + }, + "/user/:nick/followers": []string{ "/+Akyoto/followers", }, From ed4e701eb7923505db5ac5bd23dc86e22f51b868 Mon Sep 17 00:00:00 2001 From: Scott Date: Wed, 14 Mar 2018 16:09:32 +0100 Subject: [PATCH 5/5] =?UTF-8?q?=F0=9F=93=9D=20Changed=20documentation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/profile/tracks.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pages/profile/tracks.go b/pages/profile/tracks.go index f2ba841e..d27ee5d7 100644 --- a/pages/profile/tracks.go +++ b/pages/profile/tracks.go @@ -25,7 +25,7 @@ func GetSoundTracksByUser(ctx *aero.Context) string { // Fetch all eligible tracks allTracks := fetchAllByUser(viewUser.ID) - // Sort the tracks by number of likes + // Sort the tracks by publication date arn.SortSoundTracksLatestFirst(allTracks) // Slice the part that we need @@ -44,11 +44,11 @@ func GetSoundTracksByUser(ctx *aero.Context) string { } // Otherwise, send the full page - return ctx.HTML(components.TrackList(tracks,viewUser, nextIndex, user, ctx.URI())) + return ctx.HTML(components.TrackList(tracks, viewUser, nextIndex, user, ctx.URI())) } -// GetSoundTracksLikedByUser shows all soundtracks of a particular user. +// GetSoundTracksLikedByUser shows all soundtracks liked by a particular user. func GetSoundTracksLikedByUser(ctx *aero.Context) string { nick := ctx.Get("nick") user := utils.GetUser(ctx) @@ -63,7 +63,7 @@ func GetSoundTracksLikedByUser(ctx *aero.Context) string { // Fetch all eligible tracks allTracks := fetchAllLikedByUser(viewUser.ID) - // Sort the tracks by number of likes + // Sort the tracks by publication date arn.SortSoundTracksLatestFirst(allTracks) // Slice the part that we need @@ -82,5 +82,5 @@ func GetSoundTracksLikedByUser(ctx *aero.Context) string { } // Otherwise, send the full page - return ctx.HTML(components.TrackList(tracks,viewUser, nextIndex, user, ctx.URI())) + return ctx.HTML(components.TrackList(tracks, viewUser, nextIndex, user, ctx.URI())) }