appview/{pages,db}: show star/unstar buttons on the timeline #554

merged
opened by anirudh.fi targeting master from push-qrltzqmlrlln
Changed files
+47 -16
appview
db
pages
templates
timeline
fragments
user
fragments
+21 -5
appview/db/timeline.go
··· 19 *Profile 20 *FollowStats 21 *FollowStatus 22 } 23 24 // TODO: this gathers heterogenous events from different sources and aggregates ··· 26 func MakeTimeline(e Execer, limit int, loggedInUserDid string) ([]TimelineEvent, error) { 27 var events []TimelineEvent 28 29 - repos, err := getTimelineRepos(e, limit) 30 if err != nil { 31 return nil, err 32 } ··· 57 return events, nil 58 } 59 60 - func getTimelineRepos(e Execer, limit int) ([]TimelineEvent, error) { 61 repos, err := GetRepos(e, limit) 62 if err != nil { 63 return nil, err ··· 93 } 94 } 95 96 events = append(events, TimelineEvent{ 97 - Repo: &r, 98 - EventAt: r.Created, 99 - Source: source, 100 }) 101 } 102
··· 19 *Profile 20 *FollowStats 21 *FollowStatus 22 + 23 + // optional: populate only if event is Repo 24 + IsStarred bool 25 + StarCount int64 26 } 27 28 // TODO: this gathers heterogenous events from different sources and aggregates ··· 30 func MakeTimeline(e Execer, limit int, loggedInUserDid string) ([]TimelineEvent, error) { 31 var events []TimelineEvent 32 33 + repos, err := getTimelineRepos(e, limit, loggedInUserDid) 34 if err != nil { 35 return nil, err 36 } ··· 61 return events, nil 62 } 63 64 + func getTimelineRepos(e Execer, limit int, loggedInUserDid string) ([]TimelineEvent, error) { 65 repos, err := GetRepos(e, limit) 66 if err != nil { 67 return nil, err ··· 97 } 98 } 99 100 + var isStarred bool 101 + if loggedInUserDid != "" { 102 + isStarred = GetStarStatus(e, loggedInUserDid, r.RepoAt()) 103 + } 104 + 105 + var starCount int64 106 + if r.RepoStats != nil { 107 + starCount = int64(r.RepoStats.StarCount) 108 + } 109 + 110 events = append(events, TimelineEvent{ 111 + Repo: &r, 112 + EventAt: r.Created, 113 + Source: source, 114 + IsStarred: isStarred, 115 + StarCount: starCount, 116 }) 117 } 118
+5 -4
appview/pages/templates/timeline/fragments/timeline.html
··· 13 {{ with $e }} 14 <div class="flex flex-col divide-y divide-gray-200 dark:divide-gray-700 border border-gray-200 dark:border-gray-700 rounded-sm"> 15 {{ if .Repo }} 16 - {{ template "timeline/fragments/repoEvent" (list $ .Repo .Source) }} 17 {{ else if .Star }} 18 {{ template "timeline/fragments/starEvent" (list $ .Star) }} 19 {{ else if .Follow }} ··· 29 30 {{ define "timeline/fragments/repoEvent" }} 31 {{ $root := index . 0 }} 32 - {{ $repo := index . 1 }} 33 - {{ $source := index . 2 }} 34 {{ $userHandle := resolve $repo.Did }} 35 <div class="pl-6 py-2 bg-white dark:bg-gray-800 text-gray-600 dark:text-gray-300 flex flex-wrap items-center gap-2 text-sm"> 36 {{ template "user/fragments/picHandleLink" $repo.Did }} ··· 51 <span class="text-gray-700 dark:text-gray-400 text-xs">{{ template "repo/fragments/time" $repo.Created }}</span> 52 </div> 53 {{ with $repo }} 54 - {{ template "user/fragments/repoCard" (list $root . true) }} 55 {{ end }} 56 {{ end }} 57
··· 13 {{ with $e }} 14 <div class="flex flex-col divide-y divide-gray-200 dark:divide-gray-700 border border-gray-200 dark:border-gray-700 rounded-sm"> 15 {{ if .Repo }} 16 + {{ template "timeline/fragments/repoEvent" (list $ .) }} 17 {{ else if .Star }} 18 {{ template "timeline/fragments/starEvent" (list $ .Star) }} 19 {{ else if .Follow }} ··· 29 30 {{ define "timeline/fragments/repoEvent" }} 31 {{ $root := index . 0 }} 32 + {{ $event := index . 1 }} 33 + {{ $repo := $event.Repo }} 34 + {{ $source := $event.Source }} 35 {{ $userHandle := resolve $repo.Did }} 36 <div class="pl-6 py-2 bg-white dark:bg-gray-800 text-gray-600 dark:text-gray-300 flex flex-wrap items-center gap-2 text-sm"> 37 {{ template "user/fragments/picHandleLink" $repo.Did }} ··· 52 <span class="text-gray-700 dark:text-gray-400 text-xs">{{ template "repo/fragments/time" $repo.Created }}</span> 53 </div> 54 {{ with $repo }} 55 + {{ template "user/fragments/repoCard" (list $root . true true (dict "IsStarred" $event.IsStarred "RepoAt" .RepoAt "Stats" (dict "StarCount" $event.StarCount))) }} 56 {{ end }} 57 {{ end }} 58
+21 -7
appview/pages/templates/user/fragments/repoCard.html
··· 2 {{ $root := index . 0 }} 3 {{ $repo := index . 1 }} 4 {{ $fullName := index . 2 }} 5 6 {{ with $repo }} 7 <div class="py-4 px-6 gap-1 flex flex-col drop-shadow-sm rounded bg-white dark:bg-gray-800 min-h-32"> 8 - <div class="font-medium dark:text-white flex items-center"> 9 {{ if .Source }} 10 {{ i "git-fork" "w-4 h-4 mr-1.5 shrink-0" }} 11 {{ else }} 12 {{ i "book-marked" "w-4 h-4 mr-1.5 shrink-0" }} 13 {{ end }} 14 15 - {{ $repoOwner := resolve .Did }} 16 - {{- if $fullName -}} 17 - <a href="/{{ $repoOwner }}/{{ .Name }}" class="truncate">{{ $repoOwner }}/{{ .Name }}</a> 18 - {{- else -}} 19 - <a href="/{{ $repoOwner }}/{{ .Name }}" class="truncate">{{ .Name }}</a> 20 - {{- end -}} 21 </div> 22 {{ with .Description }} 23 <div class="text-gray-600 dark:text-gray-300 text-sm line-clamp-2">
··· 2 {{ $root := index . 0 }} 3 {{ $repo := index . 1 }} 4 {{ $fullName := index . 2 }} 5 + {{ $starButton := false }} 6 + {{ $starData := dict }} 7 + {{ if gt (len .) 3 }} 8 + {{ $starButton = index . 3 }} 9 + {{ if gt (len .) 4 }} 10 + {{ $starData = index . 4 }} 11 + {{ end }} 12 + {{ end }} 13 14 {{ with $repo }} 15 <div class="py-4 px-6 gap-1 flex flex-col drop-shadow-sm rounded bg-white dark:bg-gray-800 min-h-32"> 16 + <div class="font-medium dark:text-white flex items-center justify-between"> 17 + <div class="flex items-center"> 18 {{ if .Source }} 19 {{ i "git-fork" "w-4 h-4 mr-1.5 shrink-0" }} 20 {{ else }} 21 {{ i "book-marked" "w-4 h-4 mr-1.5 shrink-0" }} 22 {{ end }} 23 24 + {{ $repoOwner := resolve .Did }} 25 + {{- if $fullName -}} 26 + <a href="/{{ $repoOwner }}/{{ .Name }}" class="truncate">{{ $repoOwner }}/{{ .Name }}</a> 27 + {{- else -}} 28 + <a href="/{{ $repoOwner }}/{{ .Name }}" class="truncate">{{ .Name }}</a> 29 + {{- end -}} 30 + </div> 31 + 32 + {{ if and $starButton $root.LoggedInUser }} 33 + {{ template "repo/fragments/repoStar" $starData }} 34 + {{ end }} 35 </div> 36 {{ with .Description }} 37 <div class="text-gray-600 dark:text-gray-300 text-sm line-clamp-2">