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 $isPullAuthor }}
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 {{ if and (or $isPullAuthor $isPushAllowed) (not .Pull.State.IsMerged) }}
91 {{ $action := "close" }}
92 {{ $icon := "circle-x" }}
93 {{ $hoverColor := "red" }}
94 {{ if .Pull.State.IsClosed }}
95 {{ $action = "reopen" }}
96 {{ $icon = "circle-dot" }}
97 {{ $hoverColor = "green" }}
98 {{ end }}
99 <button
100 hx-post="/{{ .RepoInfo.FullName }}/pulls/{{ .Pull.PullId }}/{{ $action }}"
101 hx-swap="none"
102 class="btn mt-8 text-sm flex items-center gap-2">
103 <i data-lucide="{{ $icon }}" class="w-4 h-4 mr-2 text-{{ $hoverColor }}-400"></i>
104 <span class="text-black">{{ $action }}</span>
105 </button>
106 {{ end }}
107
108 <div id="pull-close"></div>
109 <div id="pull-reopen"></div>
110{{ end }}
111
112{{ define "submissions" }}
113 {{ $lastIdx := sub (len .Pull.Submissions) 1 }}
114 {{ range $idx, $item := .Pull.Submissions }}
115 {{ with $item }}
116 {{ $oneIndexedRound := add .RoundNumber 1 }}
117 <details {{ if eq $idx $lastIdx }}open{{ end }}>
118 <summary id="round-#{{ $oneIndexedRound }}" class="list-none cursor-pointer text-sm">
119 <div class="flex gap-2 items-center">
120 <div class="rounded bg-white drop-shadow-sm p-3">
121 #{{ $oneIndexedRound }}
122 </div>
123 <div class="rounded drop-shadow-sm bg-white p-3 text-gray-500">
124 <span>
125 {{ $owner := index $.DidHandleMap $.Pull.OwnerDid }}
126 submitted by <a href="/{{ $owner }}">{{ $owner }}</a>
127 <span class="before:content-['·']"></span>
128 <a href="/{{ $.RepoInfo.FullName }}/pulls/{{ $.Pull.PullId }}/patch">view patch</a>
129 <span class="select-none before:content-['\00B7']"></span>
130 <time>{{ .Created | timeFmt }}</time>
131 <span class="select-none before:content-['·']"></span>
132 {{ $s := "s" }}
133 {{ if eq (len .Comments) 1 }}
134 {{ $s = "" }}
135 {{ end }}
136 {{ len .Comments }} comment{{$s}}
137 </span>
138 </div>
139 </div>
140 </summary>
141 <div class="pl-12 flex flex-col gap-2 mt-2 relative">
142 <!--div class="bg-white rounded drop-shadow-sm p-4">
143 <pre class="overflow-auto"><code>{{- .Patch -}}</code></pre>
144 </div-->
145
146 {{ range .Comments }}
147 <div id="comment-{{.ID}}" class="bg-white rounded drop-shadow-sm py-2 px-4 relative w-fit">
148 <div class="absolute left-8 -top-2 w-px h-2 bg-gray-300"></div>
149 <div class="text-sm text-gray-500">
150 {{ $owner := index $.DidHandleMap .OwnerDid }}
151 <a href="/{{$owner}}">{{$owner}}</a>
152 <span class="before:content-['·']"></span>
153 <time>{{ .Created | timeFmt }}</time>
154 </div>
155 <div class="prose">
156 {{ .Body }}
157 </div>
158 </div>
159 {{ end }}
160 {{ block "newComment" (list $ .ID) }} {{ end }}
161 </div>
162 </details>
163 <hr />
164 {{ end }}
165 {{ end }}
166{{ end }}
167
168{{ define "newComment" }}
169 {{ $rootObj := index . 0 }}
170 {{ $submissionId := index . 1 }}
171
172 {{ with $rootObj }}
173 {{ if .LoggedInUser }}
174 <div class="bg-white rounded drop-shadow-sm py-2 px-4 relative w-full md:w-96">
175 <div class="absolute left-8 -top-2 w-px h-2 bg-gray-300"></div>
176 <div class="text-sm text-gray-500">
177 {{ index .DidHandleMap .LoggedInUser.Did }}
178 </div>
179 <form
180 hx-post="/{{ .RepoInfo.FullName }}/pulls/{{ .Pull.PullId }}/comment"
181 hx-swap="none">
182 <input type="hidden" name="submissionId" value="{{ $submissionId }}">
183 <textarea
184 name="body"
185 class="w-full border-0 h-8 focus:outline-none focus:ring-0 px-0 py-1"
186 placeholder="Add to the discussion..." /></textarea>
187 <div class="flex justify-end">
188 <button type="submit" class="btn text-sm mt-2">comment</button>
189 </div>
190 <div id="pull-comment"></div>
191 </form>
192 {{ else }}
193 <div class="bg-white rounded drop-shadow-sm px-6 py-4 mt-8">
194 <a href="/login" class="underline">login</a> to join the discussion
195 </div>
196 </div>
197 {{ end }}
198 {{ end }}
199{{ end }}
200
201{{ define "alreadyMergedCard" }}
202 <div
203 id="merge-status-card"
204 class="rounded relative bg-purple-50 border border-purple-200 p-4">
205 {{ if gt (len .Comments) 0 }}
206 <div
207 class="absolute left-8 -top-4 w-px h-4 bg-gray-300"
208 ></div>
209 {{ else }}
210 <div
211 class="absolute left-8 -top-8 w-px h-8 bg-gray-300"
212 ></div>
213 {{ end }}
214
215
216 <div class="flex items-center gap-2 text-purple-500">
217 <i data-lucide="git-merge" class="w-4 h-4"></i>
218 <span class="font-medium"
219 >Pull request successfully merged</span
220 >
221 </div>
222
223 <div class="mt-2 text-sm text-gray-700">
224 <p>This pull request has been merged into the base branch.</p>
225 </div>
226 </div>
227{{ end }}
228
229{{ define "isConflictedCard" }}
230 <div
231 id="merge-status-card"
232 class="rounded relative border bg-red-50 border-red-200 p-4">
233
234 <div class="flex items-center gap-2 text-red-500">
235 <i data-lucide="alert-triangle" class="w-4 h-4"></i>
236 <span class="font-medium">merge conflicts detected</span>
237 </div>
238
239 <div class="mt-2">
240 <ul class="text-sm space-y-1">
241 {{ range .MergeCheck.Conflicts }}
242 <li class="flex items-center">
243 <i
244 data-lucide="file-warning"
245 class="w-3 h-3 mr-1.5 text-red-500"
246 ></i>
247 <span class="font-mono"
248 >{{ slice .Filename 0 (sub (len .Filename) 2) }}</span
249 >
250 </li>
251 {{ end }}
252 </ul>
253 </div>
254 <div class="mt-3 text-sm text-gray-700">
255 <p>
256 Please resolve these conflicts locally and update
257 the patch to continue with the merge.
258 </p>
259 </div>
260 </div>
261{{ end }}
262
263
264{{ define "noConflictsCard" }}
265 {{ $isPushAllowed := .RepoInfo.Roles.IsPushAllowed }}
266 <div
267 id="merge-status-card"
268 class="rounded relative border bg-green-50 border-green-200 p-4">
269
270 <div class="flex items-center gap-2 text-green-500">
271 <i data-lucide="check-circle" class="w-4 h-4"></i>
272 <span class="font-medium">ready to merge</span>
273 </div>
274
275 <div class="mt-2 text-sm text-gray-700">
276 No conflicts detected with the base branch. This
277 pull request can be merged safely.
278 </div>
279
280 <div class="flex items-center gap-2">
281 {{ if $isPushAllowed }}
282 <button
283 class="btn mt-4 flex items-center gap-2"
284 hx-post="/{{ .RepoInfo.FullName }}/pulls/{{ .Pull.PullId }}/merge"
285 hx-swap="none"
286 {{ if or .Pull.State.IsClosed .MergeCheck.IsConflicted }}
287 disabled
288 {{ end }}>
289 <i data-lucide="git-merge" class="w-4 h-4"></i>
290 <span>merge</span>
291 </button>
292 {{ end }}
293
294 <div id="pull-merge-error" class="error"></div>
295 <div id="pull-merge-success" class="success"></div>
296 </div>
297 </div>
298{{ end }}
299
300{{ define "resubmitCard" }}
301 <div
302 id="resubmit-pull-card"
303 class="rounded relative border bg-amber-50 border-amber-200 p-4">
304
305 <div class="flex items-center gap-2 text-amber-500">
306 <i data-lucide="edit" class="w-4 h-4"></i>
307 <span class="font-medium">Resubmit your patch</span>
308 </div>
309
310 <div class="mt-2 text-sm text-gray-700">
311 You can update this patch to address reviews if any.
312 This begins a new round of reviews,
313 you can still view your previous submissions and reviews.
314 </div>
315
316 <div class="mt-4 flex items-center gap-2">
317 <form hx-post="/{{ .RepoInfo.FullName }}/pulls/{{ .Pull.PullId }}/resubmit" class="w-full">
318 <textarea
319 name="patch"
320 class="w-full p-2 rounded border border-gray-200"
321 placeholder="Enter new patch"
322 ></textarea>
323 <button
324 type="submit"
325 class="btn flex items-center gap-2"
326 {{ if or .Pull.State.IsClosed }}
327 disabled
328 {{ end }}>
329 <i data-lucide="refresh-ccw" class="w-4 h-4"></i>
330 <span>resubmit</span>
331 </button>
332 </form>
333
334 <div id="resubmit-error" class="error"></div>
335 <div id="resubmit-success" class="success"></div>
336 </div>
337 </div>
338{{ end }}