this repo has no description
1{{ define "title" }}{{ or .UserHandle .UserDid }}{{ end }} 2 3{{ define "content" }} 4<div class="grid grid-cols-1 md:grid-cols-5 gap-6"> 5 <div class="md:col-span-1 order-1 md:order-1"> 6 {{ block "profileCard" . }}{{ end }} 7 </div> 8 <div class="md:col-span-2 order-2 md:order-2"> 9 {{ block "ownRepos" . }}{{ end }} 10 {{ block "collaboratingRepos" . }}{{ end }} 11 </div> 12 <div class="md:col-span-2 order-3 md:order-3"> 13 {{ block "profileTimeline2" . }}{{ end }} 14 </div> 15</div> 16{{ end }} 17 18{{ define "profileTimeline2" }} 19 <p class="text-sm font-bold py-2 dark:text-white">ACTIVITY</p> 20 <div class="flex flex-col gap-6 relative"> 21 {{ with .ProfileTimeline }} 22 {{ range $idx, $byMonth := .ByMonth }} 23 {{ with $byMonth }} 24 <div> 25 {{ if eq $idx 0 }} 26 <p class="text-sm font-bold py-2 dark:text-white">This month</p> 27 {{ else }} 28 {{ $s := "s" }} 29 {{ if eq $idx 1 }} 30 {{ $s = "" }} 31 {{ end }} 32 <p class="text-sm font-bold py-2 dark:text-white">{{$idx}} month{{$s}} ago</p> 33 {{ end }} 34 35 <div class="flex flex-col gap-4"> 36 {{ block "repoEvents" (list .RepoEvents $.DidHandleMap) }} {{ end }} 37 {{ block "issueEvents" (list .IssueEvents $.DidHandleMap) }} {{ end }} 38 {{ block "pullEvents" (list .PullEvents $.DidHandleMap) }} {{ end }} 39 </div> 40 </div> 41 42 {{ end }} 43 {{ else }} 44 <p class="dark:text-white">This user does not have any activity yet.</p> 45 {{ end }} 46 {{ end }} 47 </div> 48{{ end }} 49 50{{ define "repoEvents" }} 51 {{ $items := index . 0 }} 52 {{ $handleMap := index . 1 }} 53 54 {{ if gt (len $items) 0 }} 55 <details open> 56 <summary class="list-none cursor-pointer"> 57 <div class="flex items-center gap-2"> 58 {{ i "unfold-vertical" "w-4 h-4" }} 59 created {{ len $items }} repositories 60 </div> 61 </summary> 62 <div class="p-2 pl-8 text-sm flex flex-col gap-3"> 63 {{ range $items }} 64 <div class="flex flex-wrap items-center gap-2"> 65 <span class="text-gray-500 dark:text-gray-400"> 66 {{ if .Source }} 67 {{ i "git-fork" "w-4 h-4" }} 68 {{ else }} 69 {{ i "book-plus" "w-4 h-4" }} 70 {{ end }} 71 </span> 72 <a href="/{{ index $handleMap .Repo.Did }}/{{ .Repo.Name }}" class="no-underline hover:underline"> 73 {{- .Repo.Name -}} 74 </a> 75 <time class="text-gray-700 dark:text-gray-400 text-xs ml-2">{{ .Repo.Created | shortTimeFmt }}</time> 76 </div> 77 {{ end }} 78 </div> 79 </details> 80 {{ end }} 81{{ end }} 82 83{{ define "issueEvents" }} 84 {{ $i := index . 0 }} 85 {{ $items := $i.Items }} 86 {{ $stats := $i.Stats }} 87 {{ $handleMap := index . 1 }} 88 89 {{ if gt (len $items) 0 }} 90 <details open> 91 <summary class="list-none cursor-pointer"> 92 <div class="flex items-center gap-2"> 93 {{ i "unfold-vertical" "w-4 h-4" }} 94 <span> 95 created {{ len $items }} issues 96 </span> 97 <span class="px-2 py-1/2 text-sm rounded-sm text-white bg-green-600 dark:bg-green-700"> 98 {{$stats.Open}} open 99 </span> 100 <span class="px-2 py-1/2 text-sm rounded-sm text-white bg-gray-800 dark:bg-gray-700"> 101 {{$stats.Closed}} closed 102 </span> 103 </div> 104 </summary> 105 <div class="p-2 pl-8 text-sm flex flex-col gap-3"> 106 {{ range $items }} 107 {{ $repoOwner := index $handleMap .Metadata.Repo.Did }} 108 {{ $repoName := .Metadata.Repo.Name }} 109 {{ $repoUrl := printf "%s/%s" $repoOwner $repoName }} 110 111 <div class="flex flex-wrap items-center gap-2 text-gray-600 dark:text-gray-300"> 112 {{ if .Open }} 113 <span class="text-green-600 dark:text-green-500"> 114 {{ i "circle-dot" "w-4 h-4" }} 115 </span> 116 {{ else }} 117 <span class="text-gray-500 dark:text-gray-400"> 118 {{ i "ban" "w-4 h-4" }} 119 </span> 120 {{ end }} 121 <a href="/{{$repoUrl}}/issues/{{ .IssueId }}" class="no-underline hover:underline"> 122 <span class="text-gray-500 dark:text-gray-400">#{{ .IssueId }}</span> 123 {{ .Title -}} 124 </a> 125 on 126 <a href="/{{$repoUrl}}" class="no-underline hover:underline"> 127 {{$repoUrl}} 128 </a> 129 <time class="text-gray-700 dark:text-gray-400 text-xs ml-2">{{ .Created | shortTimeFmt }}</time> 130 </p> 131 {{ end }} 132 </div> 133 </details> 134 {{ end }} 135{{ end }} 136 137{{ define "pullEvents" }} 138 {{ $i := index . 0 }} 139 {{ $items := $i.Items }} 140 {{ $stats := $i.Stats }} 141 {{ $handleMap := index . 1 }} 142 {{ if gt (len $items) 0 }} 143 <details open> 144 <summary class="list-none cursor-pointer"> 145 <div class="flex items-center gap-2"> 146 {{ i "unfold-vertical" "w-4 h-4" }} 147 <span> 148 created {{ len $items }} pull requests 149 </span> 150 <span class="px-2 py-1/2 text-sm rounded-sm text-white bg-green-600 dark:bg-green-700"> 151 {{$stats.Open}} open 152 </span> 153 <span class="px-2 py-1/2 text-sm rounded-sm text-white bg-purple-600 dark:bg-purple-700"> 154 {{$stats.Merged}} merged 155 </span> 156 <span class="px-2 py-1/2 text-sm rounded-sm text-black dark:text-white bg-gray-50 dark:bg-gray-700 "> 157 {{$stats.Closed}} closed 158 </span> 159 </div> 160 </summary> 161 <div class="p-2 pl-8 text-sm flex flex-col gap-3"> 162 {{ range $items }} 163 {{ $repoOwner := index $handleMap .Repo.Did }} 164 {{ $repoName := .Repo.Name }} 165 {{ $repoUrl := printf "%s/%s" $repoOwner $repoName }} 166 167 <div class="flex flex-wrap items-center gap-2 text-gray-600 dark:text-gray-300"> 168 {{ if .State.IsOpen }} 169 <span class="text-green-600 dark:text-green-500"> 170 {{ i "git-pull-request" "w-4 h-4" }} 171 </span> 172 {{ else if .State.IsMerged }} 173 <span class="text-purple-600 dark:text-purple-500"> 174 {{ i "git-merge" "w-4 h-4" }} 175 </span> 176 {{ else }} 177 <span class="text-gray-600 dark:text-gray-300"> 178 {{ i "git-pull-request-closed" "w-4 h-4" }} 179 </span> 180 {{ end }} 181 <a href="/{{$repoUrl}}/pulls/{{ .PullId }}" class="no-underline hover:underline"> 182 <span class="text-gray-500 dark:text-gray-400">#{{ .PullId }}</span> 183 {{ .Title -}} 184 </a> 185 on 186 <a href="/{{$repoUrl}}" class="no-underline hover:underline"> 187 {{$repoUrl}} 188 </a> 189 <time class="text-gray-700 dark:text-gray-400 text-xs ml-2">{{ .Created | shortTimeFmt }}</time> 190 </p> 191 {{ end }} 192 </div> 193 </details> 194 {{ end }} 195{{ end }} 196 197{{ define "profileTimeline" }} 198 <div class="flex flex-col gap-3 relative"> 199 <p class="px-6 text-sm font-bold py-2 dark:text-white">ACTIVITY</p> 200 {{ range .ProfileTimeline }} 201 {{ if eq .Type "issue" }} 202 <div class="px-6 py-2 bg-white dark:bg-gray-800 rounded drop-shadow-sm w-fit max-w-full flex items-center gap-2"> 203 {{ $textColor := "text-gray-800 dark:text-gray-400" }} 204 {{ $icon := "ban" }} 205 {{ if .Issue.Open }} 206 {{ $textColor = "text-green-600 dark:text-green-500" }} 207 {{ $icon = "circle-dot" }} 208 {{ end }} 209 <div class="p-1 {{ $textColor }}"> 210 {{ i $icon "w-5 h-5" }} 211 </div> 212 <div> 213 <p class="text-gray-600 dark:text-gray-300"> 214 <a href="/{{ index $.DidHandleMap .Repo.Did }}/{{ .Repo.Name }}/issues/{{ .Issue.IssueId }}" class="no-underline hover:underline">{{ .Issue.Title }} <span class="text-gray-500 dark:text-gray-400">#{{ .Issue.IssueId }}</span></a> 215 on 216 <a href="/{{ index $.DidHandleMap .Repo.Did }}/{{ .Repo.Name }}" class="no-underline hover:underline">{{ index $.DidHandleMap .Repo.Did }}<span class="select-none">/</span>{{ .Repo.Name }}</a> 217 <time class="text-gray-700 dark:text-gray-400 text-xs ml-2">{{ .Issue.Created | shortTimeFmt }}</time> 218 </p> 219 </div> 220 </div> 221 {{ else if eq .Type "pull" }} 222 <div class="px-6 py-2 bg-white dark:bg-gray-800 rounded drop-shadow-sm w-fit flex items-center gap-3"> 223 {{ $textColor := "text-gray-800 dark:text-gray-400" }} 224 {{ $icon := "git-pull-request-closed" }} 225 {{ if .Pull.State.IsOpen }} 226 {{ $textColor = "text-green-600 dark:text-green-500" }} 227 {{ $icon = "git-pull-request" }} 228 {{ else if .Pull.State.IsMerged }} 229 {{ $textColor = "text-purple-600 dark:text-purple-500" }} 230 {{ $icon = "git-merge" }} 231 {{ end }} 232 <div class="{{ $textColor }} p-1"> 233 {{ i $icon "w-5 h-5" }} 234 </div> 235 <div> 236 <p class="text-gray-600 dark:text-gray-300"> 237 <a href="/{{ index $.DidHandleMap .Repo.Did }}/{{ .Repo.Name }}/pulls/{{ .Pull.PullId }}" class="no-underline hover:underline">{{ .Pull.Title }} <span class="text-gray-500 dark:text-gray-400">#{{ .Pull.PullId }}</span></a> 238 on 239 <a href="/{{ index $.DidHandleMap .Repo.Did }}/{{ .Repo.Name }}" class="no-underline hover:underline"> 240 {{ index $.DidHandleMap .Repo.Did }}<span class="select-none">/</span>{{ .Repo.Name }}</a> 241 <time class="text-gray-700 dark:text-gray-400 text-xs ml-2">{{ .Pull.Created | shortTimeFmt }}</time> 242 </p> 243 </div> 244 </div> 245 {{ else if eq .Type "repo" }} 246 <div class="px-6 py-2 bg-white dark:bg-gray-800 rounded drop-shadow-sm w-fit flex items-center gap-3"> 247 {{ if .Source }} 248 <div class="text-gray-800 dark:text-gray-400 p-1"> 249 {{ i "git-fork" "w-5 h-5" }} 250 </div> 251 {{ else }} 252 <div class="text-gray-800 dark:text-gray-400 p-1"> 253 {{ i "book-plus" "w-5 h-5" }} 254 </div> 255 {{ end }} 256 <div> 257 <p class="text-gray-600 dark:text-gray-300"> 258 259 {{ if .Source }} 260 forked 261 <a href="/{{ index $.DidHandleMap .Source.Did }}/{{ .Source.Name }}" class="no-underline hover:underline"> 262 {{ index $.DidHandleMap .Source.Did }}/{{ .Source.Name }} 263 </a> 264 to 265 <a href="/{{ didOrHandle $.UserHandle $.UserDid }}/{{ .Repo.Name }}" class="no-underline hover:underline">{{ .Repo.Name }}</a> 266 {{ else }} 267 created 268 <a href="/{{ index $.DidHandleMap .Repo.Did }}/{{ .Repo.Name }}" class="no-underline hover:underline">{{ .Repo.Name }}</a> 269 {{ end }} 270 <time class="text-gray-700 dark:text-gray-400 text-xs ml-2">{{ .Repo.Created | shortTimeFmt }}</time> 271 </p> 272 </div> 273 </div> 274 {{ end }} 275 {{ else }} 276 <p class="px-6 dark:text-white">This user does not have any activity yet.</p> 277 {{ end }} 278 </div> 279{{ end }} 280 281{{ define "profileCard" }} 282 <div class="bg-white dark:bg-gray-800 px-6 py-4 rounded drop-shadow-sm max-h-fit"> 283 <div class="flex justify-center items-center"> 284 {{ if .AvatarUri }} 285 <img class="w-3/4 rounded-full p-2" src="{{ .AvatarUri }}" /> 286 {{ end }} 287 </div> 288 <p 289 title="{{ didOrHandle .UserDid .UserHandle }}" 290 class="text-lg font-bold text-center dark:text-white overflow-hidden text-ellipsis whitespace-nowrap max-w-full" 291 > 292 {{ didOrHandle .UserDid .UserHandle }} 293 </p> 294 <div class="text-sm text-center dark:text-gray-300"> 295 <span>{{ .ProfileStats.Followers }} followers</span> 296 <div 297 class="inline-block px-1 select-none after:content-['·']" 298 ></div> 299 <span>{{ .ProfileStats.Following }} following</span> 300 </div> 301 302 {{ if ne .FollowStatus.String "IsSelf" }} 303 {{ template "fragments/follow" . }} 304 {{ end }} 305 </div> 306{{ end }} 307 308{{ define "ownRepos" }} 309 <p class="text-sm font-bold py-2 px-6 dark:text-white">REPOS</p> 310 <div id="repos" class="grid grid-cols-1 gap-4 mb-6"> 311 {{ range .Repos }} 312 <div 313 id="repo-card" 314 class="py-4 px-6 drop-shadow-sm rounded bg-white dark:bg-gray-800" 315 > 316 <div id="repo-card-name" class="font-medium dark:text-white"> 317 <a href="/@{{ or $.UserHandle $.UserDid }}/{{ .Name }}" 318 >{{ .Name }}</a 319 > 320 </div> 321 {{ if .Description }} 322 <div class="text-gray-600 dark:text-gray-300 text-sm"> 323 {{ .Description }} 324 </div> 325 {{ end }} 326 <div 327 class="text-gray-400 pt-1 text-sm font-mono inline-flex gap-4 mt-auto" 328 > 329 330 {{ if .RepoStats.StarCount }} 331 <div class="flex gap-1 items-center text-sm"> 332 {{ i "star" "w-3 h-3 fill-current" }} 333 <span>{{ .RepoStats.StarCount }}</span> 334 </div> 335 {{ end }} 336 </div> 337 </div> 338 {{ else }} 339 <p class="px-6 dark:text-white">This user does not have any repos yet.</p> 340 {{ end }} 341 </div> 342 343 <p class="text-sm font-bold py-2 px-6 dark:text-white">COLLABORATING ON</p> 344 <div id="collaborating" class="grid grid-cols-1 gap-4 mb-6"> 345 {{ range .CollaboratingRepos }} 346 <div 347 id="repo-card" 348 class="py-4 px-6 drop-shadow-sm rounded bg-white dark:bg-gray-800 flex flex-col" 349 > 350 <div id="repo-card-name" class="font-medium dark:text-white"> 351 <a href="/{{ index $.DidHandleMap .Did }}/{{ .Name }}"> 352 {{ index $.DidHandleMap .Did }}/{{ .Name }} 353 </a> 354 </div> 355 {{ if .Description }} 356 <div class="text-gray-600 dark:text-gray-300 text-sm"> 357 {{ .Description }} 358 </div> 359 {{ end }} 360 <div class="text-gray-400 pt-1 text-sm font-mono inline-flex gap-4 mt-auto"> 361 362 {{ if .RepoStats.StarCount }} 363 <div class="flex gap-1 items-center text-sm"> 364 {{ i "star" "w-3 h-3 fill-current" }} 365 <span>{{ .RepoStats.StarCount }}</span> 366 </div> 367 {{ end }} 368 </div> 369 </div> 370 {{ else }} 371 <p class="px-6 dark:text-white">This user is not collaborating.</p> 372 {{ end }} 373 </div> 374{{ end }}