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