this repo has no description
1{{ define "title" }} 2 {{ .Pull.Title }} &middot; pull #{{ .Pull.PullId }} &middot; {{ .RepoInfo.FullName }} 3{{ end }} 4 5{{ define "extrameta" }} 6 {{ template "repo/pulls/fragments/og" (dict "RepoInfo" .RepoInfo "Pull" .Pull) }} 7{{ end }} 8 9{{ define "mainLayout" }} 10 <div class="px-1 col-span-full flex-grow flex flex-col gap-4"> 11 {{ block "contentLayout" . }} 12 {{ block "content" . }}{{ end }} 13 {{ end }} 14 </div> 15{{ end }} 16 17{{ define "repoContentLayout" }} 18 <div class="grid grid-cols-1 md:grid-cols-10 gap-4 w-full"> 19 <div class="col-span-1 md:col-span-7"> 20 <section class="bg-white dark:bg-gray-800 p-6 rounded relative w-full mx-auto dark:text-white h-full"> 21 {{ block "repoContent" . }}{{ end }} 22 </section> 23 {{ block "repoAfter" . }}{{ end }} 24 </div> 25 <div class="col-span-1 md:col-span-3 flex flex-col gap-6"> 26 {{ template "repo/fragments/labelPanel" 27 (dict "RepoInfo" $.RepoInfo 28 "Defs" $.LabelDefs 29 "Subject" $.Pull.AtUri 30 "State" $.Pull.Labels) }} 31 {{ template "repo/fragments/participants" $.Pull.Participants }} 32 {{ template "repo/fragments/backlinks" 33 (dict "RepoInfo" $.RepoInfo 34 "Backlinks" $.Backlinks) }} 35 {{ template "repo/fragments/externalLinkPanel" $.Pull.AtUri }} 36 </div> 37 38 <div class="col-span-1 md:col-span-7"> 39 {{ template "repo/fragments/diff" (list .Diff .DiffOpts) }} 40 </div> 41 <div class="col-span-1 md:col-span-3 flex flex-col max-h-dvh sticky top-0"> 42 <div class="z-20 sticky top-0 rounded-t p-3 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700"> 43 <h2 class="font-bold uppercase">history</h2> 44 </div> 45 <div class="flex flex-col-reverse gap-4 overflow-y-auto"> 46 {{ template "submissions2" . }} 47 </div> 48 </div> 49 </div> 50{{ end }} 51 52{{ define "repoContent" }} 53 {{ template "repo/pulls/fragments/pullHeader" . }} 54 55 {{ if .Pull.IsStacked }} 56 <div class="mt-8"> 57 {{ template "repo/pulls/fragments/pullStack" . }} 58 </div> 59 {{ end }} 60{{ end }} 61 62{{ define "repoAfter" }} 63 <div id="pull-close"></div> 64 <div id="pull-reopen"></div> 65{{ end }} 66 67{{ define "submissions2" }} 68 {{ $lastIdx := sub (len .Pull.Submissions) 1 }} 69 {{ range $ridx, $item := reverse .Pull.Submissions }} 70 {{ $idx := sub $lastIdx $ridx }} 71 <div class="rounded border border-gray-200 dark:border-gray-700 w-full shadow-sm bg-gray-50 dark:bg-gray-800/50"> 72 {{ with $item }} 73 {{ $patches := .AsFormatPatch }} 74 {{ $round := .RoundNumber }} 75 <div class="rounded px-6 py-4 bg-white dark:bg-gray-800 flex gap-2"> 76 <div class="flex-shrink-0"> 77 <img 78 src="{{ tinyAvatar $.Pull.OwnerDid }}" 79 alt="" 80 class="rounded-full size-8 mr-1 border-2 border-gray-100 dark:border-gray-900" 81 /> 82 </div> 83 <!-- right column: name and body in two rows --> 84 <div class="flex-1 min-w-0 flex flex-col gap-2"> 85 <div class="flex gap-2 items-center justify-between mb-1"> 86 <span class="inline-flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400 hover:text-gray-500"> 87 {{ resolve $.Pull.OwnerDid }} submitted v{{ $round }} 88 <span class="select-none before:content-['\00B7']"></span> 89 <a class="text-gray-500 dark:text-gray-400 hover:text-gray-500" href="#round-#{{ $round }}">{{ template "repo/fragments/shortTimeAgo" .Created }}</a> 90 </span> 91 {{ if ne $idx 0 }} 92 <a class="flex items-center gap-2 no-underline hover:no-underline text-sm" 93 hx-boost="true" 94 href="/{{ $.RepoInfo.FullName }}/pulls/{{ $.Pull.PullId }}/round/{{$round}}/interdiff"> 95 {{ i "chevrons-left-right-ellipsis" "w-4 h-4 rotate-90" }} 96 <span class="hidden md:inline">interdiff</span> 97 </a> 98 {{ end }} 99 </div> 100 <div> 101 {{ if eq 1 (len $patches) }} 102 <!-- only one commit, just inline the message into the round header --> 103 {{ $commit := index $patches 0 }} 104 <span>{{ $commit.Title | description }}</span> 105 {{ if gt (len $commit.Body) 0 }} 106 <p id="body-{{$round}}-{{$commit.SHA}}" class="mt-1 pb-2"> 107 {{ nl2br $commit.Body }} 108 </p> 109 {{ end }} 110 {{ else }} 111 <span>Commits:</span> 112 {{ range $patches }} 113 <div id="commit-{{.SHA}}" class="py-1 px-2 relative w-full md:max-w-3/5 md:w-fit flex flex-col"> 114 <div class="flex items-center gap-2"> 115 {{ i "git-commit-horizontal" "w-4 h-4 flex-shrink-0" }} 116 <div class="flex items-center"> 117 <span>{{ .Title | description }}</span> 118 {{ if gt (len .Body) 0 }} 119 <button 120 class="py-1/2 px-1 mx-2 bg-gray-200 hover:bg-gray-400 rounded dark:bg-gray-700 dark:hover:bg-gray-600" 121 hx-on:click="document.getElementById('body-{{$round}}-{{.SHA}}').classList.toggle('hidden')" 122 > 123 {{ i "ellipsis" "w-3 h-3" }} 124 </button> 125 {{ end }} 126 </div> 127 </div> 128 {{ if gt (len .Body) 0 }} 129 <p id="body-{{$round}}-{{.SHA}}" class="hidden mt-1 text-sm pb-2"> 130 {{ nl2br .Body }} 131 </p> 132 {{ end }} 133 </div> 134 {{ end }} 135 {{ end }} 136 </div> 137 <div> 138 {{ block "pipelineStatus" (list $ .) }} {{ end }} 139 </div> 140 </div> 141 </div> 142 <div class="relative ml-10 border-l-2 border-gray-200 dark:border-gray-700"> 143 {{ range $cidx, $c := .Comments }} 144 <div id="comment-{{$c.ID}}" class="flex gap-2 -ml-4 py-4 w-full mx-auto"> 145 <!-- left column: profile picture --> 146 <div class="flex-shrink-0"> 147 <img 148 src="{{ tinyAvatar $c.OwnerDid }}" 149 alt="" 150 class="rounded-full size-8 mr-1 border-2 border-gray-100 dark:border-gray-900" 151 /> 152 </div> 153 <!-- right column: name and body in two rows --> 154 <div class="flex-1 min-w-0"> 155 <!-- Row 1: Author and timestamp --> 156 <div class="text-sm text-gray-500 dark:text-gray-400 flex items-center gap-1"> 157 <span>{{ resolve $c.OwnerDid }}</span> 158 <span class="before:content-['·']"></span> 159 <a class="text-gray-500 dark:text-gray-400 hover:text-gray-500 dark:hover:text-gray-300" href="#comment-{{.ID}}">{{ template "repo/fragments/time" $c.Created }}</a> 160 </div> 161 <!-- Row 2: Body text --> 162 <div class="prose dark:prose-invert mt-1"> 163 {{ $c.Body | markdown }} 164 </div> 165 </div> 166 </div> 167 {{ end }} 168 </div> 169 {{ end }} 170 {{ if eq $lastIdx .RoundNumber }} 171 {{ block "mergeStatus" $ }} {{ end }} 172 {{ block "resubmitStatus" $ }} {{ end }} 173 {{ end }} 174 {{ if $.LoggedInUser }} 175 {{ template "repo/pulls/fragments/pullActions" 176 (dict 177 "LoggedInUser" $.LoggedInUser 178 "Pull" $.Pull 179 "RepoInfo" $.RepoInfo 180 "RoundNumber" .RoundNumber 181 "MergeCheck" $.MergeCheck 182 "ResubmitCheck" $.ResubmitCheck 183 "BranchDeleteStatus" $.BranchDeleteStatus 184 "Stack" $.Stack) }} 185 {{ else }} 186 <div class="bg-amber-50 dark:bg-amber-900 border border-amber-500 rounded drop-shadow-sm p-2 relative flex gap-2 items-center"> 187 <a href="/signup" class="btn-create py-0 hover:no-underline hover:text-white flex items-center gap-2"> 188 sign up 189 </a> 190 <span class="text-gray-500 dark:text-gray-400">or</span> 191 <a href="/login" class="underline">login</a> 192 to add to the discussion 193 </div> 194 {{ end }} 195 </div> 196 {{ end }} 197{{ end }} 198 199{{ define "newComment" }} 200 {{ $root := index . 0 }} 201 {{ $submission := index . 1 }} 202 <form 203 id="comment-form" 204 hx-post="/{{ $root.RepoInfo.FullName }}/pulls/{{ $root.Pull.PullId }}/round/{{ $submission.RoundNumber }}/comment" 205 hx-on::after-request="if(event.detail.successful) this.reset()" 206 > 207 <div class="bg-white dark:bg-gray-800 rounded drop-shadow-sm py-4 px-4 relative w-full"> 208 <div class="text-sm pb-2 text-gray-500 dark:text-gray-400"> 209 {{ template "user/fragments/picHandleLink" $root.LoggedInUser.Did }} 210 </div> 211 <textarea 212 id="comment-textarea" 213 name="body" 214 class="w-full p-2 rounded border border-gray-200 dark:border-gray-700" 215 placeholder="Add to the discussion" 216 rows="8" 217 ></textarea> 218 <div id="pull-comment"></div> 219 </div> 220 {{ template "replyActions" . }} 221 </form> 222{{ end }} 223 224{{ define "replyActions" }} 225 <div class="flex flex-wrap items-stretch justify-end gap-2 text-gray-500 dark:text-gray-400 text-sm"> 226 {{ template "cancel" . }} 227 {{ template "reply" . }} 228 </div> 229{{ end }} 230 231{{ define "cancel" }} 232 <button 233 class="btn text-red-500 dark:text-red-400 flex gap-2 items-center group" 234 hx-get="TODO" 235 hx-target="TODO" 236 hx-swap="outerHTML"> 237 {{ i "x" "size-4" }} 238 cancel 239 </button> 240{{ end }} 241 242{{ define "reply" }} 243 <button 244 id="TODO" 245 type="submit" 246 class="btn-create flex items-center gap-2 no-underline hover:no-underline"> 247 {{ i "reply" "w-4 h-4 inline group-[.htmx-request]:hidden" }} 248 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 249 reply 250 </button> 251{{ end }} 252 253{{ define "submissions" }} 254 {{ $lastIdx := sub (len .Pull.Submissions) 1 }} 255 {{ $targetBranch := .Pull.TargetBranch }} 256 {{ $repoName := .RepoInfo.FullName }} 257 {{ range $idx, $item := .Pull.Submissions }} 258 {{ with $item }} 259 <details {{ if eq $idx $lastIdx }}open{{ end }}> 260 <summary id="round-#{{ .RoundNumber }}" class="list-none cursor-pointer"> 261 <div class="flex flex-wrap gap-2 items-stretch"> 262 <!-- round number --> 263 <div class="rounded bg-white dark:bg-gray-800 drop-shadow-sm px-3 py-2 dark:text-white"> 264 <span class="flex items-center">{{ i "hash" "w-4 h-4" }}{{ .RoundNumber }}</span> 265 </div> 266 <!-- round summary --> 267 <div class="flex-1 rounded drop-shadow-sm bg-white dark:bg-gray-800 p-2 text-gray-500 dark:text-gray-400"> 268 <span class="gap-1 flex items-center"> 269 {{ $owner := resolve $.Pull.OwnerDid }} 270 {{ $re := "re" }} 271 {{ if eq .RoundNumber 0 }} 272 {{ $re = "" }} 273 {{ end }} 274 <span class="hidden md:inline">{{$re}}submitted</span> 275 by {{ template "user/fragments/picHandleLink" $.Pull.OwnerDid }} 276 <span class="select-none before:content-['\00B7']"></span> 277 <a class="text-gray-500 dark:text-gray-400 hover:text-gray-500" href="#round-#{{ .RoundNumber }}">{{ template "repo/fragments/shortTime" .Created }}</a> 278 <span class="select-none before:content-['·']"></span> 279 {{ $s := "s" }} 280 {{ if eq (len .Comments) 1 }} 281 {{ $s = "" }} 282 {{ end }} 283 {{ len .Comments }} comment{{$s}} 284 </span> 285 </div> 286 287 <a class="btn flex items-center gap-2 no-underline hover:no-underline p-2 group" 288 hx-boost="true" 289 href="/{{ $.RepoInfo.FullName }}/pulls/{{ $.Pull.PullId }}/round/{{.RoundNumber}}"> 290 {{ i "file-diff" "w-4 h-4" }} 291 <span class="hidden md:inline">diff</span> 292 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 293 </a> 294 {{ if ne $idx 0 }} 295 <a class="btn flex items-center gap-2 no-underline hover:no-underline p-2 group" 296 hx-boost="true" 297 href="/{{ $.RepoInfo.FullName }}/pulls/{{ $.Pull.PullId }}/round/{{.RoundNumber}}/interdiff"> 298 {{ i "chevrons-left-right-ellipsis" "w-4 h-4 rotate-90" }} 299 <span class="hidden md:inline">interdiff</span> 300 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 301 </a> 302 {{ end }} 303 <span id="interdiff-error-{{.RoundNumber}}"></span> 304 </div> 305 </summary> 306 307 {{ if .IsFormatPatch }} 308 {{ $patches := .AsFormatPatch }} 309 {{ $round := .RoundNumber }} 310 <details class="group py-2 md:ml-[3.5rem] text-gray-500 dark:text-gray-400 flex flex-col gap-2 relative text-sm"> 311 <summary class="py-1 list-none cursor-pointer hover:text-gray-500 hover:dark:text-gray-400"> 312 {{ $s := "s" }} 313 {{ if eq (len $patches) 1 }} 314 {{ $s = "" }} 315 {{ end }} 316 <div class="group-open:hidden flex items-center gap-2 ml-2"> 317 {{ i "chevrons-up-down" "w-4 h-4" }} expand {{ len $patches }} commit{{$s}} 318 </div> 319 <div class="hidden group-open:flex items-center gap-2 ml-2"> 320 {{ i "chevrons-down-up" "w-4 h-4" }} hide {{ len $patches }} commit{{$s}} 321 </div> 322 </summary> 323 {{ range $patches }} 324 <div id="commit-{{.SHA}}" class="py-1 px-2 relative w-full md:max-w-3/5 md:w-fit flex flex-col"> 325 <div class="flex items-center gap-2"> 326 {{ i "git-commit-horizontal" "w-4 h-4" }} 327 <div class="text-sm text-gray-500 dark:text-gray-400"> 328 <!-- attempt to resolve $fullRepo: this is possible only on non-deleted forks and branches --> 329 {{ $fullRepo := "" }} 330 {{ if and $.Pull.IsForkBased $.Pull.PullSource.Repo }} 331 {{ $fullRepo = printf "%s/%s" $owner $.Pull.PullSource.Repo.Name }} 332 {{ else if $.Pull.IsBranchBased }} 333 {{ $fullRepo = $.RepoInfo.FullName }} 334 {{ end }} 335 336 <!-- if $fullRepo was resolved, link to it, otherwise just span without a link --> 337 {{ if $fullRepo }} 338 <a href="/{{ $fullRepo }}/commit/{{ .SHA }}" class="font-mono text-gray-500 dark:text-gray-400">{{ slice .SHA 0 8 }}</a> 339 {{ else }} 340 <span class="font-mono">{{ slice .SHA 0 8 }}</span> 341 {{ end }} 342 </div> 343 <div class="flex items-center"> 344 <span>{{ .Title | description }}</span> 345 {{ if gt (len .Body) 0 }} 346 <button 347 class="py-1/2 px-1 mx-2 bg-gray-200 hover:bg-gray-400 rounded dark:bg-gray-700 dark:hover:bg-gray-600" 348 hx-on:click="document.getElementById('body-{{$round}}-{{.SHA}}').classList.toggle('hidden')" 349 > 350 {{ i "ellipsis" "w-3 h-3" }} 351 </button> 352 {{ end }} 353 </div> 354 </div> 355 {{ if gt (len .Body) 0 }} 356 <p id="body-{{$round}}-{{.SHA}}" class="hidden mt-1 text-sm pb-2"> 357 {{ nl2br .Body }} 358 </p> 359 {{ end }} 360 </div> 361 {{ end }} 362 </details> 363 {{ end }} 364 365 366 <div class="md:pl-[3.5rem] flex flex-col gap-2 mt-2 relative"> 367 {{ range $cidx, $c := .Comments }} 368 <div id="comment-{{$c.ID}}" class="bg-white dark:bg-gray-800 rounded drop-shadow-sm py-2 px-4 relative w-full"> 369 {{ if gt $cidx 0 }} 370 <div class="absolute left-8 -top-2 w-px h-2 bg-gray-300 dark:bg-gray-600"></div> 371 {{ end }} 372 <div class="text-sm text-gray-500 dark:text-gray-400 flex items-center gap-1"> 373 {{ template "user/fragments/picHandleLink" $c.OwnerDid }} 374 <span class="before:content-['·']"></span> 375 <a class="text-gray-500 dark:text-gray-400 hover:text-gray-500 dark:hover:text-gray-300" href="#comment-{{.ID}}">{{ template "repo/fragments/time" $c.Created }}</a> 376 </div> 377 <div class="prose dark:prose-invert"> 378 {{ $c.Body | markdown }} 379 </div> 380 </div> 381 {{ end }} 382 383 {{ block "pipelineStatus" (list $ .) }} {{ end }} 384 385 {{ if eq $lastIdx .RoundNumber }} 386 {{ block "mergeStatus" $ }} {{ end }} 387 {{ block "resubmitStatus" $ }} {{ end }} 388 {{ end }} 389 390 {{ if $.LoggedInUser }} 391 {{ template "repo/pulls/fragments/pullActions" 392 (dict 393 "LoggedInUser" $.LoggedInUser 394 "Pull" $.Pull 395 "RepoInfo" $.RepoInfo 396 "RoundNumber" .RoundNumber 397 "MergeCheck" $.MergeCheck 398 "ResubmitCheck" $.ResubmitCheck 399 "BranchDeleteStatus" $.BranchDeleteStatus 400 "Stack" $.Stack) }} 401 {{ else }} 402 <div class="bg-amber-50 dark:bg-amber-900 border border-amber-500 rounded drop-shadow-sm p-2 relative flex gap-2 items-center w-fit"> 403 <a href="/signup" class="btn-create py-0 hover:no-underline hover:text-white flex items-center gap-2"> 404 sign up 405 </a> 406 <span class="text-gray-500 dark:text-gray-400">or</span> 407 <a href="/login" class="underline">login</a> 408 to add to the discussion 409 </div> 410 {{ end }} 411 </div> 412 </details> 413 {{ end }} 414 {{ end }} 415{{ end }} 416 417{{ define "mergeStatus" }} 418 {{ if .Pull.State.IsClosed }} 419 <div class="bg-gray-50 dark:bg-gray-700 border border-black dark:border-gray-500 rounded drop-shadow-sm px-6 py-2 relative"> 420 <div class="flex items-center gap-2 text-black dark:text-white"> 421 {{ i "ban" "w-4 h-4" }} 422 <span class="font-medium">closed without merging</span 423 > 424 </div> 425 </div> 426 {{ else if .Pull.State.IsMerged }} 427 <div class="bg-purple-50 dark:bg-purple-900 border border-purple-500 rounded drop-shadow-sm px-6 py-2 relative"> 428 <div class="flex items-center gap-2 text-purple-500 dark:text-purple-300"> 429 {{ i "git-merge" "w-4 h-4" }} 430 <span class="font-medium">pull request successfully merged</span 431 > 432 </div> 433 </div> 434 {{ else if .Pull.State.IsDeleted }} 435 <div class="bg-red-50 dark:bg-red-900 border border-red-500 rounded drop-shadow-sm px-6 py-2 relative"> 436 <div class="flex items-center gap-2 text-red-500 dark:text-red-300"> 437 {{ i "git-pull-request-closed" "w-4 h-4" }} 438 <span class="font-medium">This pull has been deleted (possibly by jj abandon or jj squash)</span> 439 </div> 440 </div> 441 {{ else if and .MergeCheck .MergeCheck.Error }} 442 <div class="bg-red-50 dark:bg-red-900 border border-red-500 rounded drop-shadow-sm px-6 py-2 relative"> 443 <div class="flex items-center gap-2 text-red-500 dark:text-red-300"> 444 {{ i "triangle-alert" "w-4 h-4" }} 445 <span class="font-medium">{{ .MergeCheck.Error }}</span> 446 </div> 447 </div> 448 {{ else if and .MergeCheck .MergeCheck.IsConflicted }} 449 <div class="bg-red-50 dark:bg-red-900 border border-red-500 rounded drop-shadow-sm px-6 py-2 relative"> 450 <details class="text-red-500 dark:text-red-300 group"> 451 <summary class="flex items-center justify-between cursor-pointer list-none"> 452 <div class="flex items-center gap-2 "> 453 {{ i "triangle-alert" "w-4 h-4" }} 454 <span class="font-medium">merge conflicts detected</span> 455 </div> 456 <div> 457 <span class="group-open:hidden inline">{{ i "chevrons-up-down" "w-4 h-4" }}</span> 458 <span class="hidden group-open:inline">{{ i "chevrons-down-up" "w-4 h-4" }}</span> 459 </div> 460 </summary> 461 {{ if gt (len .MergeCheck.Conflicts) 0 }} 462 <ul class="space-y-1 mt-2"> 463 {{ range .MergeCheck.Conflicts }} 464 {{ if .Filename }} 465 <li class="flex items-center"> 466 {{ i "file-warning" "inline-flex w-4 h-4 mr-1.5 text-red-500 dark:text-red-300 flex-shrink-0" }} 467 <span class="font-mono" style="word-break: keep-all; overflow-wrap: break-word;">{{ .Filename }}</span> 468 </li> 469 {{ else if .Reason }} 470 <li class="flex items-center"> 471 {{ i "file-warning" "w-4 h-4 mr-1.5 text-red-500 dark:text-red-300" }} 472 <span>{{.Reason}}</span> 473 </li> 474 {{ end }} 475 {{ end }} 476 </ul> 477 {{ end }} 478 </details> 479 </div> 480 {{ else if .MergeCheck }} 481 <div class="bg-green-50 dark:bg-green-900 border border-green-500 rounded drop-shadow-sm px-6 py-2 relative"> 482 <div class="flex items-center gap-2 text-green-500 dark:text-green-300"> 483 {{ i "circle-check-big" "w-4 h-4" }} 484 <span class="font-medium">no conflicts, ready to merge</span> 485 </div> 486 </div> 487 {{ end }} 488{{ end }} 489 490{{ define "resubmitStatus" }} 491 {{ if .ResubmitCheck.Yes }} 492 <div class="bg-amber-50 dark:bg-amber-900 border border-amber-500 rounded drop-shadow-sm px-6 py-2 relative"> 493 <div class="flex items-center gap-2 text-amber-500 dark:text-amber-300"> 494 {{ i "triangle-alert" "w-4 h-4" }} 495 <span class="font-medium">this branch has been updated, consider resubmitting</span> 496 </div> 497 </div> 498 {{ end }} 499{{ end }} 500 501{{ define "pipelineStatus" }} 502 {{ $root := index . 0 }} 503 {{ $submission := index . 1 }} 504 {{ $pipeline := index $root.Pipelines $submission.SourceRev }} 505 {{ with $pipeline }} 506 {{ $id := .Id }} 507 {{ if .Statuses }} 508 <span>Workflows:</span> 509 <div class=" grid grid-cols-1 bg-white dark:bg-gray-800 rounded border border-gray-200 dark:border-gray-700 divide-y divide-gray-200 dark:divide-gray-700"> 510 {{ range $name, $all := .Statuses }} 511 <a href="/{{ $root.RepoInfo.FullName }}/pipelines/{{ $id }}/workflow/{{ $name }}" class="no-underline hover:no-underline hover:bg-gray-100/25 hover:dark:bg-gray-700/25"> 512 <div 513 class="flex gap-2 items-center justify-between p-2"> 514 {{ $lastStatus := $all.Latest }} 515 {{ $kind := $lastStatus.Status.String }} 516 517 <div id="left" class="flex items-center gap-2 flex-shrink-0"> 518 {{ template "repo/pipelines/fragments/workflowSymbol" $all }} 519 {{ $name }} 520 </div> 521 <div id="right" class="flex items-center gap-2 flex-shrink-0"> 522 <span class="font-bold">{{ $kind }}</span> 523 {{ if .TimeTaken }} 524 {{ template "repo/fragments/duration" .TimeTaken }} 525 {{ else }} 526 {{ template "repo/fragments/shortTimeAgo" $lastStatus.Created }} 527 {{ end }} 528 </div> 529 </div> 530 </a> 531 {{ end }} 532 </div> 533 {{ end }} 534 {{ end }} 535{{ end }}