this repo has no description
1{{ define "title" }}{{ or .Card.UserHandle .Card.UserDid }}{{ end }} 2 3{{ define "extrameta" }} 4 <meta property="og:title" content="{{ or .Card.UserHandle .Card.UserDid }}" /> 5 <meta property="og:type" content="profile" /> 6 <meta property="og:url" content="https://tangled.sh/{{ or .Card.UserHandle .Card.UserDid }}" /> 7 <meta property="og:description" content="{{ or .Card.Profile.Description .Card.UserHandle .Card.UserDid }}" /> 8{{ end }} 9 10{{ define "content" }} 11<div class="grid grid-cols-1 md:grid-cols-11 gap-4"> 12 <div class="md:col-span-3 order-1 md:order-1"> 13 <div class="grid grid-cols-1 gap-4"> 14 {{ template "user/fragments/profileCard" .Card }} 15 {{ block "punchcard" .Punchcard }} {{ end }} 16 </div> 17 </div> 18 <div id="all-repos" class="md:col-span-4 order-2 md:order-2"> 19 <div class="grid grid-cols-1 gap-4"> 20 {{ block "ownRepos" . }}{{ end }} 21 {{ block "collaboratingRepos" . }}{{ end }} 22 </div> 23 </div> 24 <div class="md:col-span-4 order-3 md:order-3"> 25 {{ block "profileTimeline" . }}{{ end }} 26 </div> 27</div> 28{{ end }} 29 30{{ define "profileTimeline" }} 31 <p class="text-sm font-bold p-2 dark:text-white">ACTIVITY</p> 32 <div class="flex flex-col gap-4 relative"> 33 {{ with .ProfileTimeline }} 34 {{ range $idx, $byMonth := .ByMonth }} 35 {{ with $byMonth }} 36 <div class="bg-white dark:bg-gray-800 px-6 py-4 rounded drop-shadow-sm"> 37 {{ if eq $idx 0 }} 38 39 {{ else }} 40 {{ $s := "s" }} 41 {{ if eq $idx 1 }} 42 {{ $s = "" }} 43 {{ end }} 44 <p class="text-sm font-bold dark:text-white mb-2">{{$idx}} month{{$s}} ago</p> 45 {{ end }} 46 47 {{ if .IsEmpty }} 48 <div class="text-gray-500 dark:text-gray-400"> 49 No activity for this month 50 </div> 51 {{ else }} 52 <div class="flex flex-col gap-1"> 53 {{ block "repoEvents" (list .RepoEvents $.DidHandleMap) }} {{ end }} 54 {{ block "issueEvents" (list .IssueEvents $.DidHandleMap) }} {{ end }} 55 {{ block "pullEvents" (list .PullEvents $.DidHandleMap) }} {{ end }} 56 </div> 57 {{ end }} 58 </div> 59 60 {{ end }} 61 {{ else }} 62 <p class="dark:text-white">This user does not have any activity yet.</p> 63 {{ end }} 64 {{ end }} 65 </div> 66{{ end }} 67 68{{ define "repoEvents" }} 69 {{ $items := index . 0 }} 70 {{ $handleMap := index . 1 }} 71 72 {{ if gt (len $items) 0 }} 73 <details> 74 <summary class="list-none cursor-pointer hover:text-gray-500 hover:dark:text-gray-400"> 75 <div class="flex flex-wrap items-center gap-2"> 76 {{ i "book-plus" "w-4 h-4" }} 77 created {{ len $items }} {{if eq (len $items) 1 }}repository{{else}}repositories{{end}} 78 </div> 79 </summary> 80 <div class="py-2 text-sm flex flex-col gap-3 mb-2"> 81 {{ range $items }} 82 <div class="flex flex-wrap items-center gap-2"> 83 <span class="text-gray-500 dark:text-gray-400"> 84 {{ if .Source }} 85 {{ i "git-fork" "w-4 h-4" }} 86 {{ else }} 87 {{ i "book-plus" "w-4 h-4" }} 88 {{ end }} 89 </span> 90 <a href="/{{ index $handleMap .Repo.Did }}/{{ .Repo.Name }}" class="no-underline hover:underline"> 91 {{- .Repo.Name -}} 92 </a> 93 </div> 94 {{ end }} 95 </div> 96 </details> 97 {{ end }} 98{{ end }} 99 100{{ define "issueEvents" }} 101 {{ $i := index . 0 }} 102 {{ $items := $i.Items }} 103 {{ $stats := $i.Stats }} 104 {{ $handleMap := index . 1 }} 105 106 {{ if gt (len $items) 0 }} 107 <details> 108 <summary class="list-none cursor-pointer hover:text-gray-500 hover:dark:text-gray-400"> 109 <div class="flex flex-wrap items-center gap-2"> 110 {{ i "circle-dot" "w-4 h-4" }} 111 112 <div> 113 created {{ len $items }} {{if eq (len $items) 1 }}issue{{else}}issues{{end}} 114 </div> 115 116 {{ if gt $stats.Open 0 }} 117 <span class="px-2 py-1/2 text-sm rounded text-white bg-green-600 dark:bg-green-700"> 118 {{$stats.Open}} open 119 </span> 120 {{ end }} 121 122 {{ if gt $stats.Closed 0 }} 123 <span class="px-2 py-1/2 text-sm rounded text-white bg-gray-800 dark:bg-gray-700"> 124 {{$stats.Closed}} closed 125 </span> 126 {{ end }} 127 128 </div> 129 </summary> 130 <div class="py-2 text-sm flex flex-col gap-3 mb-2"> 131 {{ range $items }} 132 {{ $repoOwner := index $handleMap .Metadata.Repo.Did }} 133 {{ $repoName := .Metadata.Repo.Name }} 134 {{ $repoUrl := printf "%s/%s" $repoOwner $repoName }} 135 136 <div class="flex gap-2 text-gray-600 dark:text-gray-300"> 137 {{ if .Open }} 138 <span class="text-green-600 dark:text-green-500"> 139 {{ i "circle-dot" "w-4 h-4" }} 140 </span> 141 {{ else }} 142 <span class="text-gray-500 dark:text-gray-400"> 143 {{ i "ban" "w-4 h-4" }} 144 </span> 145 {{ end }} 146 <div class="flex-none min-w-8 text-right"> 147 <span class="text-gray-500 dark:text-gray-400">#{{ .IssueId }}</span> 148 </div> 149 <div class="break-words max-w-full"> 150 <a href="/{{$repoUrl}}/issues/{{ .IssueId }}" class="no-underline hover:underline"> 151 {{ .Title -}} 152 </a> 153 on 154 <a href="/{{$repoUrl}}" class="no-underline hover:underline whitespace-nowrap"> 155 {{$repoUrl}} 156 </a> 157 </div> 158 </div> 159 {{ end }} 160 </div> 161 </details> 162 {{ end }} 163{{ end }} 164 165{{ define "pullEvents" }} 166 {{ $i := index . 0 }} 167 {{ $items := $i.Items }} 168 {{ $stats := $i.Stats }} 169 {{ $handleMap := index . 1 }} 170 {{ if gt (len $items) 0 }} 171 <details> 172 <summary class="list-none cursor-pointer hover:text-gray-500 hover:dark:text-gray-400"> 173 <div class="flex flex-wrap items-center gap-2"> 174 {{ i "git-pull-request" "w-4 h-4" }} 175 176 <div> 177 created {{ len $items }} {{if eq (len $items) 1 }}pull request{{else}}pull requests{{end}} 178 </div> 179 180 {{ if gt $stats.Open 0 }} 181 <span class="px-2 py-1/2 text-sm rounded text-white bg-green-600 dark:bg-green-700"> 182 {{$stats.Open}} open 183 </span> 184 {{ end }} 185 186 {{ if gt $stats.Merged 0 }} 187 <span class="px-2 py-1/2 text-sm rounded text-white bg-purple-600 dark:bg-purple-700"> 188 {{$stats.Merged}} merged 189 </span> 190 {{ end }} 191 192 193 {{ if gt $stats.Closed 0 }} 194 <span class="px-2 py-1/2 text-sm rounded text-white bg-gray-800 dark:bg-gray-700"> 195 {{$stats.Closed}} closed 196 </span> 197 {{ end }} 198 199 </div> 200 </summary> 201 <div class="py-2 text-sm flex flex-col gap-3 mb-2"> 202 {{ range $items }} 203 {{ $repoOwner := index $handleMap .Repo.Did }} 204 {{ $repoName := .Repo.Name }} 205 {{ $repoUrl := printf "%s/%s" $repoOwner $repoName }} 206 207 <div class="flex gap-2 text-gray-600 dark:text-gray-300"> 208 {{ if .State.IsOpen }} 209 <span class="text-green-600 dark:text-green-500"> 210 {{ i "git-pull-request" "w-4 h-4" }} 211 </span> 212 {{ else if .State.IsMerged }} 213 <span class="text-purple-600 dark:text-purple-500"> 214 {{ i "git-merge" "w-4 h-4" }} 215 </span> 216 {{ else }} 217 <span class="text-gray-600 dark:text-gray-300"> 218 {{ i "git-pull-request-closed" "w-4 h-4" }} 219 </span> 220 {{ end }} 221 <div class="flex-none min-w-8 text-right"> 222 <span class="text-gray-500 dark:text-gray-400">#{{ .PullId }}</span> 223 </div> 224 <div class="break-words max-w-full"> 225 <a href="/{{$repoUrl}}/pulls/{{ .PullId }}" class="no-underline hover:underline"> 226 {{ .Title -}} 227 </a> 228 on 229 <a href="/{{$repoUrl}}" class="no-underline hover:underline whitespace-nowrap"> 230 {{$repoUrl}} 231 </a> 232 </div> 233 </div> 234 {{ end }} 235 </div> 236 </details> 237 {{ end }} 238{{ end }} 239 240{{ define "ownRepos" }} 241 <div> 242 <div class="text-sm font-bold p-2 pr-0 dark:text-white flex items-center justify-between gap-2"> 243 <a href="/@{{ or $.Card.UserHandle $.Card.UserDid }}?tab=repos" 244 class="flex text-black dark:text-white items-center gap-2 no-underline hover:no-underline group"> 245 <span>PINNED REPOS</span> 246 <span class="flex gap-1 items-center font-normal text-sm text-gray-500 dark:text-gray-400 "> 247 view all {{ i "chevron-right" "w-4 h-4" }} 248 </span> 249 </a> 250 {{ if and .LoggedInUser (eq .LoggedInUser.Did .Card.UserDid) }} 251 <button 252 hx-get="profile/edit-pins" 253 hx-target="#all-repos" 254 class="btn py-0 font-normal text-sm flex gap-2 items-center group"> 255 {{ i "pencil" "w-3 h-3" }} 256 edit 257 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 258 </button> 259 {{ end }} 260 </div> 261 <div id="repos" class="grid grid-cols-1 gap-4 items-stretch"> 262 {{ range .Repos }} 263 {{ template "user/fragments/repoCard" (list $ . false) }} 264 {{ else }} 265 <p class="px-6 dark:text-white">This user does not have any repos yet.</p> 266 {{ end }} 267 </div> 268 </div> 269{{ end }} 270 271{{ define "collaboratingRepos" }} 272 {{ if gt (len .CollaboratingRepos) 0 }} 273 <div> 274 <p class="text-sm font-bold p-2 dark:text-white">COLLABORATING ON</p> 275 <div id="collaborating" class="grid grid-cols-1 gap-4"> 276 {{ range .CollaboratingRepos }} 277 {{ template "user/fragments/repoCard" (list $ . true) }} 278 {{ else }} 279 <p class="px-6 dark:text-white">This user is not collaborating.</p> 280 {{ end }} 281 </div> 282 </div> 283 {{ end }} 284{{ end }} 285 286{{ define "punchcard" }} 287 {{ $now := now }} 288 <div> 289 <p class="p-2 flex gap-2 text-sm font-bold dark:text-white"> 290 PUNCHCARD 291 <span class="font-normal text-sm text-gray-500 dark:text-gray-400 "> 292 {{ .Total | int64 | commaFmt }} commits 293 </span> 294 </p> 295 <div class="bg-white dark:bg-gray-800 px-6 py-4 rounded drop-shadow-sm"> 296 <div class="grid grid-cols-28 md:grid-cols-14 gap-y-2 w-full h-full"> 297 {{ range .Punches }} 298 {{ $count := .Count }} 299 {{ $theme := "bg-gray-200 dark:bg-gray-700 size-[4px]" }} 300 {{ if lt $count 1 }} 301 {{ $theme = "bg-gray-200 dark:bg-gray-700 size-[4px]" }} 302 {{ else if lt $count 2 }} 303 {{ $theme = "bg-green-200 dark:bg-green-900 size-[5px]" }} 304 {{ else if lt $count 4 }} 305 {{ $theme = "bg-green-300 dark:bg-green-800 size-[5px]" }} 306 {{ else if lt $count 8 }} 307 {{ $theme = "bg-green-400 dark:bg-green-700 size-[6px]" }} 308 {{ else }} 309 {{ $theme = "bg-green-500 dark:bg-green-600 size-[7px]" }} 310 {{ end }} 311 312 {{ if .Date.After $now }} 313 {{ $theme = "border border-gray-200 dark:border-gray-700 size-[4px]" }} 314 {{ end }} 315 <div class="w-full h-full flex justify-center items-center"> 316 <div 317 class="aspect-square rounded-full transition-all duration-300 {{ $theme }} max-w-full max-h-full" 318 title="{{ .Date.Format "2006-01-02" }}: {{ .Count }} commits"> 319 </div> 320 </div> 321 {{ end }} 322 </div> 323 </div> 324 </div> 325{{ end }}