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