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 <time>targeting branch {{ .Pull.TargetBranch }}</time>
46 </span>
47 </div>
48
49 {{ if .Pull.Body }}
50 <article id="body" class="mt-8 prose">
51 {{ .Pull.Body | markdown }}
52 </article>
53 {{ end }}
54 </section>
55
56{{ end }}
57
58{{ define "repoAfter" }}
59 <section id="submissions">
60 {{ block "submissions" . }} {{ end }}
61 </section>
62
63 {{ $isPullAuthor := and .LoggedInUser (eq .LoggedInUser.Did .Pull.OwnerDid) }}
64 {{ $isPushAllowed := .RepoInfo.Roles.IsPushAllowed }}
65
66 {{ if $isPullAuthor }}
67 <section id="update-card" class="mt-8 space-y-4 relative">
68 {{ block "resubmitCard" . }} {{ end }}
69 </section>
70 {{ end }}
71
72 <section id="merge-card" class="mt-8 space-y-4 relative">
73 {{ if .Pull.State.IsMerged }}
74 {{ block "alreadyMergedCard" . }} {{ end }}
75 {{ else if .MergeCheck }}
76 {{ if .MergeCheck.IsConflicted }}
77 {{ block "isConflictedCard" $ }} {{ end }}
78 {{ else }}
79 {{ block "noConflictsCard" $ }} {{ end }}
80 {{ end }}
81 {{ end }}
82 </section>
83
84 {{ if and (or $isPullAuthor $isPushAllowed) (not .Pull.State.IsMerged) }}
85 {{ $action := "close" }}
86 {{ $icon := "circle-x" }}
87 {{ $hoverColor := "red" }}
88 {{ if .Pull.State.IsClosed }}
89 {{ $action = "reopen" }}
90 {{ $icon = "circle-dot" }}
91 {{ $hoverColor = "green" }}
92 {{ end }}
93 <button
94 hx-post="/{{ .RepoInfo.FullName }}/pulls/{{ .Pull.PullId }}/{{ $action }}"
95 hx-swap="none"
96 class="btn mt-8 text-sm flex items-center gap-2">
97 <i data-lucide="{{ $icon }}" class="w-4 h-4 mr-2 text-{{ $hoverColor }}-400"></i>
98 <span class="text-black">{{ $action }}</span>
99 </button>
100 {{ end }}
101
102 <div id="pull-close"></div>
103 <div id="pull-reopen"></div>
104{{ end }}
105
106{{ define "submissions" }}
107 {{ $lastIdx := sub (len .Pull.Submissions) 1 }}
108 {{ range $idx, $item := .Pull.Submissions }}
109 {{ with $item }}
110 <details {{ if eq $idx $lastIdx }}open{{ end }}>
111 <summary>round #{{ .RoundNumber }}, {{ .Created | timeFmt }}, received {{ len .Comments }} comments</summary>
112 <div>
113 <h2>patch submitted by {{index $.DidHandleMap $.Pull.OwnerDid}}</h2>
114 <pre><code>{{- .Patch -}}</code></pre>
115
116 {{ range .Comments }}
117 <div id="comment-{{.ID}}">
118 {{ index $.DidHandleMap .OwnerDid }} commented {{ .Created | timeFmt }}: {{ .Body }}
119 </div>
120 {{ end }}
121 {{ block "newComment" (list $ .ID) }} {{ end }}
122 </div>
123 </details>
124 {{ end }}
125 {{ end }}
126{{ end }}
127
128{{ define "newComment" }}
129 {{ $rootObj := index . 0 }}
130 {{ $submissionId := index . 1 }}
131
132 {{ with $rootObj }}
133 {{ if .LoggedInUser }}
134 <form
135 hx-post="/{{ .RepoInfo.FullName }}/pulls/{{ .Pull.PullId }}/comment"
136 class="mt-8"
137 hx-swap="none">
138 <input type="hidden" name="submissionId" value="{{ $submissionId }}">
139 <textarea
140 name="body"
141 class="w-full p-2 rounded border border-gray-200"
142 placeholder="Add to the discussion..."
143 ></textarea>
144 <button type="submit" class="btn mt-2">comment</button>
145 <div id="pull-comment"></div>
146 </form>
147 {{ else }}
148 <div class="bg-white rounded drop-shadow-sm px-6 py-4 mt-8">
149 <a href="/login" class="underline">login</a> to join the discussion
150 </div>
151 {{ end }}
152 {{ end }}
153{{ end }}
154
155{{ define "alreadyMergedCard" }}
156 <div
157 id="merge-status-card"
158 class="rounded relative bg-purple-50 border border-purple-200 p-4">
159 {{ if gt (len .Comments) 0 }}
160 <div
161 class="absolute left-8 -top-4 w-px h-4 bg-gray-300"
162 ></div>
163 {{ else }}
164 <div
165 class="absolute left-8 -top-8 w-px h-8 bg-gray-300"
166 ></div>
167 {{ end }}
168
169
170 <div class="flex items-center gap-2 text-purple-500">
171 <i data-lucide="git-merge" class="w-4 h-4"></i>
172 <span class="font-medium"
173 >Pull request successfully merged</span
174 >
175 </div>
176
177 <div class="mt-2 text-sm text-gray-700">
178 <p>This pull request has been merged into the base branch.</p>
179 </div>
180 </div>
181{{ end }}
182
183{{ define "isConflictedCard" }}
184 <div
185 id="merge-status-card"
186 class="rounded relative border bg-red-50 border-red-200 p-4">
187
188 <div class="flex items-center gap-2 text-red-500">
189 <i data-lucide="alert-triangle" class="w-4 h-4"></i>
190 <span class="font-medium">merge conflicts detected</span>
191 </div>
192
193 <div class="mt-2">
194 <ul class="text-sm space-y-1">
195 {{ range .MergeCheck.Conflicts }}
196 <li class="flex items-center">
197 <i
198 data-lucide="file-warning"
199 class="w-3 h-3 mr-1.5 text-red-500"
200 ></i>
201 <span class="font-mono"
202 >{{ slice .Filename 0 (sub (len .Filename) 2) }}</span
203 >
204 </li>
205 {{ end }}
206 </ul>
207 </div>
208 <div class="mt-3 text-sm text-gray-700">
209 <p>
210 Please resolve these conflicts locally and update
211 the patch to continue with the merge.
212 </p>
213 </div>
214 </div>
215{{ end }}
216
217
218{{ define "noConflictsCard" }}
219 {{ $isPushAllowed := .RepoInfo.Roles.IsPushAllowed }}
220 <div
221 id="merge-status-card"
222 class="rounded relative border bg-green-50 border-green-200 p-4">
223
224 <div class="flex items-center gap-2 text-green-500">
225 <i data-lucide="check-circle" class="w-4 h-4"></i>
226 <span class="font-medium">ready to merge</span>
227 </div>
228
229 <div class="mt-2 text-sm text-gray-700">
230 No conflicts detected with the base branch. This
231 pull request can be merged safely.
232 </div>
233
234 <div class="mt-4 flex items-center gap-2">
235 {{ if $isPushAllowed }}
236 <button
237 class="btn flex items-center gap-2"
238 hx-post="/{{ .RepoInfo.FullName }}/pulls/{{ .Pull.PullId }}/merge"
239 hx-swap="none"
240 {{ if or .Pull.State.IsClosed .MergeCheck.IsConflicted }}
241 disabled
242 {{ end }}>
243 <i data-lucide="git-merge" class="w-4 h-4"></i>
244 <span>merge</span>
245 </button>
246 {{ end }}
247
248 <div id="pull-merge-error" class="error"></div>
249 <div id="pull-merge-success" class="success"></div>
250 </div>
251 </div>
252{{ end }}
253
254{{ define "resubmitCard" }}
255 <div
256 id="resubmit-pull-card"
257 class="rounded relative border bg-amber-50 border-amber-200 p-4">
258
259 <div class="flex items-center gap-2 text-amber-500">
260 <i data-lucide="edit" class="w-4 h-4"></i>
261 <span class="font-medium">Resubmit your patch</span>
262 </div>
263
264 <div class="mt-2 text-sm text-gray-700">
265 You can update this patch to address reviews if any.
266 This begins a new round of reviews,
267 you can still view your previous submissions and reviews.
268 </div>
269
270 <div class="mt-4 flex items-center gap-2">
271 <form hx-post="/{{ .RepoInfo.FullName }}/pulls/{{ .Pull.PullId }}/resubmit" class="w-full">
272 <textarea
273 name="patch"
274 class="w-full p-2 rounded border border-gray-200"
275 placeholder="Enter new patch"
276 ></textarea>
277 <button
278 type="submit"
279 class="btn flex items-center gap-2"
280 {{ if or .Pull.State.IsClosed }}
281 disabled
282 {{ end }}>
283 <i data-lucide="refresh-ccw" class="w-4 h-4"></i>
284 <span>resubmit</span>
285 </button>
286 </form>
287
288 <div id="resubmit-error" class="error"></div>
289 <div id="resubmit-success" class="success"></div>
290 </div>
291 </div>
292{{ end }}