forked from tangled.org/core
this repo has no description

appview: refactor top starred repos

Signed-off-by: oppiliappan <me@oppi.li>

oppi.li f60213c7 d12dd8f3

verified
Changed files
+36 -78
appview
pages
templates
timeline
user
fragments
state
+1 -9
appview/pages/pages.go
··· 299 type TimelineParams struct { 300 LoggedInUser *oauth.User 301 Timeline []db.TimelineEvent 302 } 303 304 func (p *Pages) Timeline(w io.Writer, params TimelineParams) error { 305 return p.execute("timeline/timeline", w, params) 306 - } 307 - 308 - type TopStarredReposLastWeekParams struct { 309 - LoggedInUser *oauth.User 310 - Repos []db.Repo 311 - } 312 - 313 - func (p *Pages) TopStarredReposLastWeek(w io.Writer, params TopStarredReposLastWeekParams) error { 314 - return p.executePlain("timeline/fragments/topStarredRepos", w, params) 315 } 316 317 type SettingsParams struct {
··· 299 type TimelineParams struct { 300 LoggedInUser *oauth.User 301 Timeline []db.TimelineEvent 302 + Repos []db.Repo 303 } 304 305 func (p *Pages) Timeline(w io.Writer, params TimelineParams) error { 306 return p.execute("timeline/timeline", w, params) 307 } 308 309 type SettingsParams struct {
-25
appview/pages/templates/timeline/fragments/topStarredRepos.html
··· 1 - {{ define "timeline/fragments/topStarredRepos" }} 2 - <div class="w-full md:mx-0"> 3 - <div class="p-6"> 4 - <h3 class="font-bold text-xl text-gray-900 dark:text-white flex items-center gap-2 mb-3"> 5 - Trending 6 - {{ i "trending-up" "size-4 flex-shrink-0" }} 7 - </h3> 8 - </div> 9 - <div class="flex gap-3 overflow-x-auto pb-4 px-4 scrollbar-hide"> 10 - {{ range $index, $repo := .Repos }} 11 - <div class="flex-none w-72 relative h-full"> 12 - <div class="relative h-full items-stretch border border-gray-200 dark:border-gray-700 rounded-sm"> 13 - {{ template "user/fragments/repoCard" (list $ $repo true) }} 14 - </div> 15 - </div> 16 - {{ else }} 17 - <div class="py-8 px-6 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-sm"> 18 - <div class="text-sm text-gray-500 dark:text-gray-400 text-center"> 19 - No trending repositories this week 20 - </div> 21 - </div> 22 - {{ end }} 23 - </div> 24 - </div> 25 - {{ end }}
···
+29 -32
appview/pages/templates/timeline/timeline.html
··· 7 <meta property="og:description" content="tightly-knit social coding" /> 8 {{ end }} 9 10 - 11 - 12 - 13 {{ define "content" }} 14 - {{ with .LoggedInUser }} 15 - {{ block "trending" . }}{{ end }} 16 - {{ block "timeline" $ }}{{ end }} 17 {{ else }} 18 {{ block "hero" $ }}{{ end }} 19 - {{ block "trending" . }}{{ end }} 20 - {{ block "timeline" $ }}{{ end }} 21 {{ end }} 22 - {{ end }} 23 - 24 - {{ define "trending" }} 25 26 - <div 27 - hx-get="/timeline/trending" 28 - hx-trigger="load" 29 - hx-indicator="#starred-loading" 30 - > 31 - <!-- Loading spinner --> 32 - <div id="starred-loading" class="htmx-indicator"> 33 - <div class="p-6"> 34 - <h3 class="font-bold text-xl text-gray-900 dark:text-white flex items-center gap-2 mb-3"> 35 - Trending 36 - {{ i "trending-up" "size-4 flex-shrink-0" }} 37 - </h3> 38 - </div> 39 - <div class="flex items-center justify-center py-8"> 40 - <div class="animate-spin rounded-full h-6 w-6 border-b-2 border-gray-900 dark:border-white"></div> 41 - <span class="ml-2 text-sm text-gray-500 dark:text-gray-400">Loading...</span> 42 - </div> 43 - </div> 44 - </div> 45 {{ end }} 46 47 {{ define "hero" }} ··· 67 </div> 68 {{ end }} 69 70 {{ define "timeline" }} 71 - <div> 72 - <div class="p-6"> 73 <p class="text-xl font-bold dark:text-white">Timeline</p> 74 </div> 75
··· 7 <meta property="og:description" content="tightly-knit social coding" /> 8 {{ end }} 9 10 {{ define "content" }} 11 + {{ if .LoggedInUser }} 12 {{ else }} 13 {{ block "hero" $ }}{{ end }} 14 {{ end }} 15 16 + {{ block "trending" $ }}{{ end }} 17 + {{ block "timeline" $ }}{{ end }} 18 {{ end }} 19 20 {{ define "hero" }} ··· 40 </div> 41 {{ end }} 42 43 + {{ define "trending" }} 44 + <div class="w-full md:mx-0 py-4"> 45 + <div class="px-6 pb-4"> 46 + <h3 class="text-xl font-bold dark:text-white flex items-center gap-2"> 47 + Trending 48 + {{ i "trending-up" "size-4 flex-shrink-0" }} 49 + </h3> 50 + </div> 51 + <div class="flex gap-4 overflow-x-auto scrollbar-hide items-stretch"> 52 + {{ range $index, $repo := .Repos }} 53 + <div class="flex-none h-full border border-gray-200 dark:border-gray-700 rounded-sm w-96"> 54 + {{ template "user/fragments/repoCard" (list $ $repo true) }} 55 + </div> 56 + {{ else }} 57 + <div class="py-8 px-6 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-sm"> 58 + <div class="text-sm text-gray-500 dark:text-gray-400 text-center"> 59 + No trending repositories this week 60 + </div> 61 + </div> 62 + {{ end }} 63 + </div> 64 + </div> 65 + {{ end }} 66 + 67 {{ define "timeline" }} 68 + <div class="py-4"> 69 + <div class="px-6 pb-4"> 70 <p class="text-xl font-bold dark:text-white">Timeline</p> 71 </div> 72
+2 -2
appview/pages/templates/user/fragments/repoCard.html
··· 4 {{ $fullName := index . 2 }} 5 6 {{ with $repo }} 7 - <div class="py-4 px-6 gap-2 flex flex-col drop-shadow-sm rounded bg-white dark:bg-gray-800"> 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" }} ··· 20 {{- end -}} 21 </div> 22 {{ with .Description }} 23 - <div class="text-gray-600 dark:text-gray-300 text-sm"> 24 {{ . | description }} 25 </div> 26 {{ end }}
··· 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" }} ··· 20 {{- end -}} 21 </div> 22 {{ with .Description }} 23 + <div class="text-gray-600 dark:text-gray-300 text-sm line-clamp-2"> 24 {{ . | description }} 25 </div> 26 {{ end }}
-1
appview/state/router.go
··· 112 r.Handle("/static/*", s.pages.Static()) 113 114 r.Get("/", s.Timeline) 115 - r.Get("/timeline/trending", s.TopStarredReposLastWeek) 116 117 r.Route("/repo", func(r chi.Router) { 118 r.Route("/new", func(r chi.Router) {
··· 112 r.Handle("/static/*", s.pages.Static()) 113 114 r.Get("/", s.Timeline) 115 116 r.Route("/repo", func(r chi.Router) { 117 r.Route("/new", func(r chi.Router) {
+4 -9
appview/state/state.go
··· 193 s.pages.Notice(w, "timeline", "Uh oh! Failed to load timeline.") 194 } 195 196 - s.pages.Timeline(w, pages.TimelineParams{ 197 - LoggedInUser: user, 198 - Timeline: timeline, 199 - }) 200 - } 201 - 202 - func (s *State) TopStarredReposLastWeek(w http.ResponseWriter, r *http.Request) { 203 repos, err := db.GetTopStarredReposLastWeek(s.db) 204 if err != nil { 205 log.Println(err) ··· 207 return 208 } 209 210 - s.pages.TopStarredReposLastWeek(w, pages.TopStarredReposLastWeekParams{ 211 - Repos: repos, 212 }) 213 } 214
··· 193 s.pages.Notice(w, "timeline", "Uh oh! Failed to load timeline.") 194 } 195 196 repos, err := db.GetTopStarredReposLastWeek(s.db) 197 if err != nil { 198 log.Println(err) ··· 200 return 201 } 202 203 + s.pages.Timeline(w, pages.TimelineParams{ 204 + LoggedInUser: user, 205 + Timeline: timeline, 206 + Repos: repos, 207 }) 208 } 209