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 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 }}