this repo has no description
1{{ define "title" }} 2 {{ .Pull.Title }} &middot; pull #{{ .Pull.PullId }} &middot; {{ .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 }}