this repo has no description
1{{ define "title" }}
2 {{ .Pull.Title }} · pull #{{ .Pull.PullId }} · {{ .RepoInfo.FullName }}
3{{ end }}
4
5{{ define "repoContent" }}
6 <header class="pb-4">
7 <h1 class="text-2xl">
8 {{ .Pull.Title }}
9 <span class="text-gray-500">#{{ .Pull.PullId }}</span>
10 </h1>
11 </header>
12
13 {{ $bgColor := "bg-gray-800" }}
14 {{ $icon := "ban" }}
15
16 {{ if .Pull.State.IsOpen }}
17 {{ $bgColor = "bg-green-600" }}
18 {{ $icon = "git-pull-request" }}
19 {{ else if .Pull.State.IsMerged }}
20 {{ $bgColor = "bg-purple-600" }}
21 {{ $icon = "git-merge" }}
22 {{ end }}
23
24 <section>
25 <div class="flex items-center gap-2">
26 <div
27 id="state"
28 class="inline-flex items-center rounded px-3 py-1 {{ $bgColor }}"
29 >
30 <i
31 data-lucide="{{ $icon }}"
32 class="w-4 h-4 mr-1.5 text-white"
33 ></i>
34 <span class="text-white">{{ .Pull.State.String }}</span>
35 </div>
36 <span class="text-gray-500 text-sm">
37 opened by
38 {{ $owner := index $.DidHandleMap .Pull.OwnerDid }}
39 <a href="/{{ $owner }}" class="no-underline hover:underline"
40 >{{ $owner }}</a
41 >
42 <span class="select-none before:content-['\00B7']"></span>
43 <time>{{ .Pull.Created | timeFmt }}</time>
44 <span class="select-none before:content-['\00B7']"></span>
45 <span>targeting branch
46 <span class="text-xs rounded bg-gray-100 text-black font-mono px-2 mx-1/2 inline-flex items-center">
47 {{ .Pull.TargetBranch }}
48 </span>
49 </span>
50 </span>
51 </div>
52
53 {{ if .Pull.Body }}
54 <article id="body" class="mt-8 prose">
55 {{ .Pull.Body | markdown }}
56 </article>
57 {{ end }}
58 </section>
59
60{{ end }}
61
62{{ define "repoAfter" }}
63 <section id="submissions" class="mt-4">
64 <div class="flex flex-col gap-4">
65 {{ block "submissions" . }} {{ end }}
66 </div>
67 </section>
68
69 {{ $isPullAuthor := and .LoggedInUser (eq .LoggedInUser.Did .Pull.OwnerDid) }}
70 {{ $isPushAllowed := .RepoInfo.Roles.IsPushAllowed }}
71
72 {{ if and $isPullAuthor (not .Pull.State.IsMerged) }}
73 <section id="update-card" class="mt-8 space-y-4 relative">
74 {{ block "resubmitCard" . }} {{ end }}
75 </section>
76 {{ end }}
77
78 <section id="merge-card" class="mt-8 space-y-4 relative">
79 {{ if .Pull.State.IsMerged }}
80 {{ block "alreadyMergedCard" . }} {{ end }}
81 {{ else if .MergeCheck }}
82 {{ if .MergeCheck.IsConflicted }}
83 {{ block "isConflictedCard" $ }} {{ end }}
84 {{ else }}
85 {{ block "noConflictsCard" $ }} {{ end }}
86 {{ end }}
87 {{ end }}
88 </section>
89
90 <div id="pull-close"></div>
91 <div id="pull-reopen"></div>
92{{ end }}
93
94{{ define "submissions" }}
95 {{ $lastIdx := sub (len .Pull.Submissions) 1 }}
96 {{ $targetBranch := .Pull.TargetBranch }}
97 {{ $repoName := .RepoInfo.FullName }}
98 {{ range $idx, $item := .Pull.Submissions }}
99 {{ $diff := $item.AsNiceDiff $targetBranch }}
100 {{ with $item }}
101 {{ $oneIndexedRound := add .RoundNumber 1 }}
102 <details {{ if eq $idx $lastIdx }}open{{ end }}>
103 <summary id="round-#{{ $oneIndexedRound }}" class="list-none cursor-pointer text-sm">
104 <div class="flex gap-2 items-center">
105 <div class="rounded bg-white drop-shadow-sm p-3">
106 #{{ $oneIndexedRound }}
107 </div>
108 <div class="rounded drop-shadow-sm bg-white p-3 text-gray-500">
109 <span>
110 {{ $owner := index $.DidHandleMap $.Pull.OwnerDid }}
111 submitted by <a href="/{{ $owner }}">{{ $owner }}</a>
112 <span class="select-none before:content-['\00B7']"></span>
113 <time>{{ .Created | timeFmt }}</time>
114 <span class="select-none before:content-['·']"></span>
115 {{ $s := "s" }}
116 {{ if eq (len .Comments) 1 }}
117 {{ $s = "" }}
118 {{ end }}
119 {{ len .Comments }} comment{{$s}}
120 </span>
121 </div>
122 </div>
123 </summary>
124 <div class="pl-12 flex flex-col gap-2 mt-2 relative">
125 <div>
126 {{ template "fragments/diff" (list $repoName $diff) }}
127 </div>
128
129 {{ range .Comments }}
130 <div id="comment-{{.ID}}" class="bg-white rounded drop-shadow-sm py-2 px-4 relative w-fit">
131 <div class="absolute left-8 -top-2 w-px h-2 bg-gray-300"></div>
132 <div class="text-sm text-gray-500">
133 {{ $owner := index $.DidHandleMap .OwnerDid }}
134 <a href="/{{$owner}}">{{$owner}}</a>
135 <span class="before:content-['·']"></span>
136 <time>{{ .Created | timeFmt }}</time>
137 </div>
138 <div class="prose">
139 {{ .Body }}
140 </div>
141 </div>
142 {{ end }}
143 {{ block "newComment" (list $ .ID) }} {{ end }}
144 </div>
145 </details>
146 <hr />
147 {{ end }}
148 {{ end }}
149{{ end }}
150
151{{ define "newComment" }}
152 {{ $rootObj := index . 0 }}
153 {{ $submissionId := index . 1 }}
154
155 {{ with $rootObj }}
156 {{ if .LoggedInUser }}
157 <div class="bg-white rounded drop-shadow-sm py-2 px-4 relative w-full md:w-96">
158 <div class="absolute left-8 -top-2 w-px h-2 bg-gray-300"></div>
159 <div class="text-sm text-gray-500">
160 {{ index .DidHandleMap .LoggedInUser.Did }}
161 </div>
162 <form
163 hx-post="/{{ .RepoInfo.FullName }}/pulls/{{ .Pull.PullId }}/comment"
164 hx-swap="none">
165 <input type="hidden" name="submissionId" value="{{ $submissionId }}">
166 <textarea
167 name="body"
168 class="w-full border-0 h-8 focus:outline-none focus:ring-0 px-0 py-1"
169 placeholder="Add to the discussion..." /></textarea>
170 <div class="flex justify-end">
171 <button type="submit" class="btn text-sm mt-2">comment</button>
172 </div>
173 <div id="pull-comment"></div>
174 </form>
175 {{ else }}
176 <div class="bg-white rounded drop-shadow-sm px-6 py-4 mt-8">
177 <a href="/login" class="underline">login</a> to join the discussion
178 </div>
179 </div>
180 {{ end }}
181 {{ end }}
182{{ end }}
183
184{{ define "alreadyMergedCard" }}
185 <div
186 id="merge-status-card"
187 class="rounded relative bg-purple-50 border border-purple-200 p-4">
188
189 <div class="flex items-center gap-2 text-purple-500">
190 <i data-lucide="git-merge" class="w-4 h-4"></i>
191 <span class="font-medium"
192 >pull request successfully merged</span
193 >
194 </div>
195
196 <div class="mt-2 text-sm text-gray-700">
197 <p>This pull request has been merged into the base branch.</p>
198 </div>
199 </div>
200{{ end }}
201
202{{ define "isConflictedCard" }}
203 <div
204 id="merge-status-card"
205 class="rounded relative border bg-red-50 border-red-200 p-4">
206
207 <div class="flex items-center gap-2 text-red-500">
208 <i data-lucide="alert-triangle" class="w-4 h-4"></i>
209 <span class="font-medium">merge conflicts detected</span>
210 </div>
211
212 <div class="mt-2">
213 <ul class="text-sm space-y-1">
214 {{ range .MergeCheck.Conflicts }}
215 <li class="flex items-center">
216 <i
217 data-lucide="file-warning"
218 class="w-3 h-3 mr-1.5 text-red-500"
219 ></i>
220 <span class="font-mono"
221 >{{ slice .Filename 0 (sub (len .Filename) 2) }}</span
222 >
223 </li>
224 {{ end }}
225 </ul>
226 </div>
227 <div class="mt-3 text-sm text-gray-700">
228 <p>
229 Please resolve these conflicts locally and update
230 the patch to continue with the merge.
231 </p>
232 </div>
233 </div>
234{{ end }}
235
236
237{{ define "noConflictsCard" }}
238 {{ $isPushAllowed := .RepoInfo.Roles.IsPushAllowed }}
239 {{ $isPullAuthor := and .LoggedInUser (eq .LoggedInUser.Did .Pull.OwnerDid) }}
240 <div
241 id="merge-status-card"
242 class="rounded relative border bg-green-50 border-green-200 p-4">
243
244 <div class="flex items-center gap-2 text-green-500">
245 <i data-lucide="check-circle" class="w-4 h-4"></i>
246 <span class="font-medium">ready to merge</span>
247 </div>
248
249 <div class="mt-2 text-sm text-gray-700">
250 No conflicts detected with the base branch. This
251 pull request can be merged safely.
252 </div>
253
254 <div class="flex items-center gap-2">
255 {{ if $isPushAllowed }}
256 <button
257 class="btn mt-4 flex items-center gap-2"
258 hx-post="/{{ .RepoInfo.FullName }}/pulls/{{ .Pull.PullId }}/merge"
259 hx-swap="none"
260 {{ if or .Pull.State.IsClosed .MergeCheck.IsConflicted }}
261 disabled
262 {{ end }}>
263 <i data-lucide="git-merge" class="w-4 h-4"></i>
264 <span>merge</span>
265 </button>
266 {{ end }}
267
268 {{ if and (or $isPullAuthor $isPushAllowed) (not .Pull.State.IsMerged) }}
269 {{ $action := "close" }}
270 {{ $icon := "circle-x" }}
271 {{ $hoverColor := "red" }}
272 {{ if .Pull.State.IsClosed }}
273 {{ $action = "reopen" }}
274 {{ $icon = "circle-dot" }}
275 {{ $hoverColor = "green" }}
276 {{ end }}
277 <button
278 hx-post="/{{ .RepoInfo.FullName }}/pulls/{{ .Pull.PullId }}/{{ $action }}"
279 hx-swap="none"
280 class="btn mt-4 flex items-center gap-2">
281 <i data-lucide="{{ $icon }}" class="w-4 h-4 text-{{ $hoverColor }}-400"></i>
282 <span class="text-black">{{ $action }}</span>
283 </button>
284 {{ end }}
285
286 <div id="pull-merge-error" class="error"></div>
287 <div id="pull-merge-success" class="success"></div>
288 </div>
289 </div>
290{{ end }}
291
292{{ define "resubmitCard" }}
293 <div
294 id="resubmit-pull-card"
295 class="rounded relative border bg-amber-50 border-amber-200 p-4">
296
297 <div class="flex items-center gap-2 text-amber-500">
298 <i data-lucide="edit" class="w-4 h-4"></i>
299 <span class="font-medium">resubmit your patch</span>
300 </div>
301
302 <div class="mt-2 text-sm text-gray-700">
303 You can update this patch to address any reviews.
304 This will begin a new round of reviews,
305 but you'll still be able to view your previous submissions and feedback.
306 </div>
307
308 <div class="mt-4 flex flex-col">
309 <form hx-post="/{{ .RepoInfo.FullName }}/pulls/{{ .Pull.PullId }}/resubmit" class="w-full" hx-swap="none">
310 <textarea
311 name="patch"
312 class="w-full p-2 mb-2 rounded border border-gray-200"
313 placeholder="Paste your updated patch here."
314 ></textarea>
315 <button
316 type="submit"
317 class="btn flex items-center gap-2"
318 {{ if or .Pull.State.IsClosed }}
319 disabled
320 {{ end }}>
321 <i data-lucide="refresh-ccw" class="w-4 h-4"></i>
322 <span>resubmit</span>
323 </button>
324 </form>
325
326 <div id="resubmit-error" class="error"></div>
327 <div id="resubmit-success" class="success"></div>
328 </div>
329 </div>
330{{ end }}