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