From cbdbaf6d8e041c85c61aa4898966cee48d055dfa Mon Sep 17 00:00:00 2001 From: dusk Date: Wed, 13 Aug 2025 06:38:27 +0300 Subject: [PATCH] appview: implement follower and following pages for users Change-Id: tlrutxlvkwovxvkutsnlykpyqtrprqso - rename Followers/Following from ProfileCard to FollowersCount/FollowingCount - in profileCard, define a single $userIdent to use instead of duplicating the didOrHandle expression fixes https://tangled.sh/@tangled.sh/core/issues/169 Signed-off-by: dusk --- appview/pages/funcmap.go | 5 + appview/pages/pages.go | 37 ++++- appview/pages/templates/user/followers.html | 30 ++++ appview/pages/templates/user/following.html | 30 ++++ .../templates/user/fragments/follow.html | 4 +- .../templates/user/fragments/followCard.html | 22 +++ .../templates/user/fragments/profileCard.html | 31 ++-- appview/state/profile.go | 150 ++++++++++++++++-- appview/state/router.go | 2 + appview/strings/strings.go | 14 +- 10 files changed, 288 insertions(+), 37 deletions(-) create mode 100644 appview/pages/templates/user/followers.html create mode 100644 appview/pages/templates/user/following.html create mode 100644 appview/pages/templates/user/fragments/followCard.html diff --git a/appview/pages/funcmap.go b/appview/pages/funcmap.go index d28e261..e26c8c9 100644 --- a/appview/pages/funcmap.go +++ b/appview/pages/funcmap.go @@ -257,6 +257,11 @@ func (p *Pages) funcMap() template.FuncMap { "layoutCenter": func() string { return "col-span-1 md:col-span-8 lg:col-span-6" }, + + "normalizeForHtmlId": func(s string) string { + // TODO: extend this to handle other cases? + return strings.ReplaceAll(s, ":", "_") + }, } } diff --git a/appview/pages/pages.go b/appview/pages/pages.go index 0cd9b40..d84817d 100644 --- a/appview/pages/pages.go +++ b/appview/pages/pages.go @@ -413,11 +413,11 @@ type ProfilePageParams struct { } type ProfileCard struct { - UserDid string - UserHandle string - FollowStatus db.FollowStatus - Followers int - Following int + UserDid string + UserHandle string + FollowStatus db.FollowStatus + FollowersCount int + FollowingCount int Profile *db.Profile } @@ -438,6 +438,33 @@ func (p *Pages) ReposPage(w io.Writer, params ReposPageParams) error { return p.execute("user/repos", w, params) } +type FollowCard struct { + UserDid string + UserHandle string + FollowStatus db.FollowStatus + Profile *db.Profile +} + +type FollowersPageParams struct { + LoggedInUser *oauth.User + Followers []FollowCard + Card ProfileCard +} + +func (p *Pages) FollowersPage(w io.Writer, params FollowersPageParams) error { + return p.execute("user/followers", w, params) +} + +type FollowingPageParams struct { + LoggedInUser *oauth.User + Following []FollowCard + Card ProfileCard +} + +func (p *Pages) FollowingPage(w io.Writer, params FollowingPageParams) error { + return p.execute("user/following", w, params) +} + type FollowFragmentParams struct { UserDid string FollowStatus db.FollowStatus diff --git a/appview/pages/templates/user/followers.html b/appview/pages/templates/user/followers.html new file mode 100644 index 0000000..95956d9 --- /dev/null +++ b/appview/pages/templates/user/followers.html @@ -0,0 +1,30 @@ +{{ define "title" }}{{ or .Card.UserHandle .Card.UserDid }} · repos {{ end }} + +{{ define "extrameta" }} + + + + +{{ end }} + +{{ define "content" }} +
+
+ {{ template "user/fragments/profileCard" .Card }} +
+
+ {{ block "followers" . }}{{ end }} +
+
+{{ end }} + +{{ define "followers" }} +

ALL FOLLOWERS

+
+ {{ range .Followers }} + {{ template "user/fragments/followCard" . }} + {{ else }} +

This user does not have any followers yet.

+ {{ end }} +
+{{ end }} diff --git a/appview/pages/templates/user/following.html b/appview/pages/templates/user/following.html new file mode 100644 index 0000000..9280016 --- /dev/null +++ b/appview/pages/templates/user/following.html @@ -0,0 +1,30 @@ +{{ define "title" }}{{ or .Card.UserHandle .Card.UserDid }} · repos {{ end }} + +{{ define "extrameta" }} + + + + +{{ end }} + +{{ define "content" }} +
+
+ {{ template "user/fragments/profileCard" .Card }} +
+
+ {{ block "following" . }}{{ end }} +
+
+{{ end }} + +{{ define "following" }} +

ALL FOLLOWING

+
+ {{ range .Following }} + {{ template "user/fragments/followCard" . }} + {{ else }} +

This user does not follow anyone yet.

+ {{ end }} +
+{{ end }} diff --git a/appview/pages/templates/user/fragments/follow.html b/appview/pages/templates/user/fragments/follow.html index b5c65b4..23fd3cd 100644 --- a/appview/pages/templates/user/fragments/follow.html +++ b/appview/pages/templates/user/fragments/follow.html @@ -1,5 +1,5 @@ {{ define "user/fragments/follow" }} -