forked from tangled.org/core
Monorepo for Tangled — https://tangled.org
1{{ define "title" }} 2 {{ .Pull.Title }} &middot; pull #{{ .Pull.PullId }} &middot; {{ .RepoInfo.FullName }} 3{{ end }} 4 5{{ define "extrameta" }} 6 {{ $title := printf "%s &middot; pull #%d &middot; %s" .Pull.Title .Pull.PullId .RepoInfo.FullName }} 7 {{ $url := printf "https://tangled.sh/%s/pulls/%d" .RepoInfo.FullName .Pull.PullId }} 8 9 {{ template "repo/fragments/og" (dict "RepoInfo" .RepoInfo "Title" $title "Url" $url) }} 10{{ end }} 11 12 13{{ define "repoContent" }} 14 {{ template "repo/pulls/fragments/pullHeader" . }} 15 16 {{ if .Pull.IsStacked }} 17 <div class="mt-8"> 18 {{ template "repo/pulls/fragments/pullStack" . }} 19 </div> 20 {{ end }} 21{{ end }} 22 23{{ define "repoAfter" }} 24 <section id="submissions" class="mt-4"> 25 <div class="flex flex-col gap-4"> 26 {{ block "submissions" . }} {{ end }} 27 </div> 28 </section> 29 30 <div id="pull-close"></div> 31 <div id="pull-reopen"></div> 32{{ end }} 33 34{{ define "submissions" }} 35 {{ $lastIdx := sub (len .Pull.Submissions) 1 }} 36 {{ $targetBranch := .Pull.TargetBranch }} 37 {{ $repoName := .RepoInfo.FullName }} 38 {{ range $idx, $item := .Pull.Submissions }} 39 {{ with $item }} 40 <details {{ if eq $idx $lastIdx }}open{{ end }}> 41 <summary id="round-#{{ .RoundNumber }}" class="list-none cursor-pointer"> 42 <div class="flex flex-wrap gap-2 items-center"> 43 <!-- round number --> 44 <div class="rounded bg-white dark:bg-gray-800 drop-shadow-sm px-3 py-2 dark:text-white"> 45 <span class="flex items-center">{{ i "hash" "w-4 h-4" }}{{ .RoundNumber }}</span> 46 </div> 47 <!-- round summary --> 48 <div class="rounded drop-shadow-sm bg-white dark:bg-gray-800 p-2 text-gray-500 dark:text-gray-400"> 49 <span> 50 {{ $owner := index $.DidHandleMap $.Pull.OwnerDid }} 51 {{ $re := "re" }} 52 {{ if eq .RoundNumber 0 }} 53 {{ $re = "" }} 54 {{ end }} 55 <span class="hidden md:inline">{{$re}}submitted</span> 56 by <a href="/{{ $owner }}">{{ $owner }}</a> 57 <span class="select-none before:content-['\00B7']"></span> 58 <a class="text-gray-500 dark:text-gray-400 hover:text-gray-500" href="#round-#{{ .RoundNumber }}"><time>{{ .Created | shortTimeFmt }}</time></a> 59 <span class="select-none before:content-['·']"></span> 60 {{ $s := "s" }} 61 {{ if eq (len .Comments) 1 }} 62 {{ $s = "" }} 63 {{ end }} 64 {{ len .Comments }} comment{{$s}} 65 </span> 66 </div> 67 68 <a class="btn flex items-center gap-2 no-underline hover:no-underline p-2 group" 69 hx-boost="true" 70 href="/{{ $.RepoInfo.FullName }}/pulls/{{ $.Pull.PullId }}/round/{{.RoundNumber}}"> 71 {{ i "file-diff" "w-4 h-4" }} 72 <span class="hidden md:inline">diff</span> 73 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 74 </a> 75 {{ if not (eq .RoundNumber 0) }} 76 <a class="btn flex items-center gap-2 no-underline hover:no-underline p-2 group" 77 hx-boost="true" 78 href="/{{ $.RepoInfo.FullName }}/pulls/{{ $.Pull.PullId }}/round/{{.RoundNumber}}/interdiff"> 79 {{ i "chevrons-left-right-ellipsis" "w-4 h-4 rotate-90" }} 80 <span class="hidden md:inline">interdiff</span> 81 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 82 </a> 83 <span id="interdiff-error-{{.RoundNumber}}"></span> 84 {{ end }} 85 </div> 86 </summary> 87 88 {{ if .IsFormatPatch }} 89 {{ $patches := .AsFormatPatch }} 90 {{ $round := .RoundNumber }} 91 <details class="group py-2 md:ml-[3.5rem] text-gray-500 dark:text-gray-400 flex flex-col gap-2 relative text-sm"> 92 <summary class="py-1 list-none cursor-pointer hover:text-gray-500 hover:dark:text-gray-400"> 93 {{ $s := "s" }} 94 {{ if eq (len $patches) 1 }} 95 {{ $s = "" }} 96 {{ end }} 97 <div class="group-open:hidden flex items-center gap-2 ml-2"> 98 {{ i "chevrons-up-down" "w-4 h-4" }} expand {{ len $patches }} commit{{$s}} 99 </div> 100 <div class="hidden group-open:flex items-center gap-2 ml-2"> 101 {{ i "chevrons-down-up" "w-4 h-4" }} hide {{ len $patches }} commit{{$s}} 102 </div> 103 </summary> 104 {{ range $patches }} 105 <div id="commit-{{.SHA}}" class="py-1 px-2 relative w-full md:max-w-3/5 md:w-fit flex flex-col"> 106 <div class="flex items-center gap-2"> 107 {{ i "git-commit-horizontal" "w-4 h-4" }} 108 <div class="text-sm text-gray-500 dark:text-gray-400"> 109 <!-- attempt to resolve $fullRepo: this is possible only on non-deleted forks and branches --> 110 {{ $fullRepo := "" }} 111 {{ if and $.Pull.IsForkBased $.Pull.PullSource.Repo }} 112 {{ $fullRepo = printf "%s/%s" $owner $.Pull.PullSource.Repo.Name }} 113 {{ else if $.Pull.IsBranchBased }} 114 {{ $fullRepo = $.RepoInfo.FullName }} 115 {{ end }} 116 117 <!-- if $fullRepo was resolved, link to it, otherwise just span without a link --> 118 {{ if $fullRepo }} 119 <a href="/{{ $fullRepo }}/commit/{{ .SHA }}" class="font-mono text-gray-500 dark:text-gray-400">{{ slice .SHA 0 8 }}</a> 120 {{ else }} 121 <span class="font-mono">{{ slice .SHA 0 8 }}</span> 122 {{ end }} 123 </div> 124 <div class="flex items-center"> 125 <span>{{ .Title }}</span> 126 {{ if gt (len .Body) 0 }} 127 <button 128 class="py-1/2 px-1 mx-2 bg-gray-200 hover:bg-gray-400 rounded dark:bg-gray-700 dark:hover:bg-gray-600" 129 hx-on:click="document.getElementById('body-{{$round}}-{{.SHA}}').classList.toggle('hidden')" 130 > 131 {{ i "ellipsis" "w-3 h-3" }} 132 </button> 133 {{ end }} 134 </div> 135 </div> 136 {{ if gt (len .Body) 0 }} 137 <p id="body-{{$round}}-{{.SHA}}" class="hidden mt-1 text-sm pb-2"> 138 {{ nl2br .Body }} 139 </p> 140 {{ end }} 141 </div> 142 {{ end }} 143 </details> 144 {{ end }} 145 146 147 <div class="md:pl-[3.5rem] flex flex-col gap-2 mt-2 relative"> 148 {{ range $cidx, $c := .Comments }} 149 <div id="comment-{{$c.ID}}" class="bg-white dark:bg-gray-800 rounded drop-shadow-sm py-2 px-4 relative w-full md:max-w-3/5 md:w-fit"> 150 {{ if gt $cidx 0 }} 151 <div class="absolute left-8 -top-2 w-px h-2 bg-gray-300 dark:bg-gray-600"></div> 152 {{ end }} 153 <div class="text-sm text-gray-500 dark:text-gray-400"> 154 {{ $owner := index $.DidHandleMap $c.OwnerDid }} 155 <a href="/{{$owner}}">{{$owner}}</a> 156 <span class="before:content-['·']"></span> 157 <a class="text-gray-500 dark:text-gray-400 hover:text-gray-500 dark:hover:text-gray-300" href="#comment-{{.ID}}"><time>{{ $c.Created | shortTimeFmt }}</time></a> 158 </div> 159 <div class="prose dark:prose-invert"> 160 {{ $c.Body | markdown }} 161 </div> 162 </div> 163 {{ end }} 164 165 {{ if eq $lastIdx .RoundNumber }} 166 {{ block "mergeStatus" $ }} {{ end }} 167 {{ block "resubmitStatus" $ }} {{ end }} 168 {{ end }} 169 170 {{ if $.LoggedInUser }} 171 {{ template "repo/pulls/fragments/pullActions" (dict "LoggedInUser" $.LoggedInUser "Pull" $.Pull "RepoInfo" $.RepoInfo "RoundNumber" .RoundNumber "MergeCheck" $.MergeCheck "ResubmitCheck" $.ResubmitCheck "Stack" $.Stack) }} 172 {{ else }} 173 <div class="bg-white dark:bg-gray-800 rounded drop-shadow-sm px-6 py-4 w-fit dark:text-white"> 174 <div class="absolute left-8 -top-2 w-px h-2 bg-gray-300 dark:bg-gray-600"></div> 175 <a href="/login" class="underline">login</a> to join the discussion 176 </div> 177 {{ end }} 178 </div> 179 </details> 180 <hr class="md:hidden border-t border-gray-300 dark:border-gray-600"/> 181 {{ end }} 182 {{ end }} 183{{ end }} 184 185{{ define "mergeStatus" }} 186 {{ if .Pull.State.IsClosed }} 187 <div class="bg-gray-50 dark:bg-gray-700 border border-black dark:border-gray-500 rounded drop-shadow-sm px-6 py-2 relative w-fit"> 188 <div class="flex items-center gap-2 text-black dark:text-white"> 189 {{ i "ban" "w-4 h-4" }} 190 <span class="font-medium">closed without merging</span 191 > 192 </div> 193 </div> 194 {{ else if .Pull.State.IsMerged }} 195 <div class="bg-purple-50 dark:bg-purple-900 border border-purple-500 rounded drop-shadow-sm px-6 py-2 relative w-fit"> 196 <div class="flex items-center gap-2 text-purple-500 dark:text-purple-300"> 197 {{ i "git-merge" "w-4 h-4" }} 198 <span class="font-medium">pull request successfully merged</span 199 > 200 </div> 201 </div> 202 {{ else if .Pull.State.IsDeleted }} 203 <div class="bg-red-50 dark:bg-red-900 border border-red-500 rounded drop-shadow-sm px-6 py-2 relative w-fit"> 204 <div class="flex items-center gap-2 text-red-500 dark:text-red-300"> 205 {{ i "git-pull-request-closed" "w-4 h-4" }} 206 <span class="font-medium">This pull has been deleted (possibly by jj abandon or jj squash)</span> 207 </div> 208 </div> 209 {{ else if and .MergeCheck .MergeCheck.Error }} 210 <div class="bg-red-50 dark:bg-red-900 border border-red-500 rounded drop-shadow-sm px-6 py-2 relative w-fit"> 211 <div class="flex items-center gap-2 text-red-500 dark:text-red-300"> 212 {{ i "triangle-alert" "w-4 h-4" }} 213 <span class="font-medium">{{ .MergeCheck.Error }}</span> 214 </div> 215 </div> 216 {{ else if and .MergeCheck .MergeCheck.IsConflicted }} 217 <div class="bg-red-50 dark:bg-red-900 border border-red-500 rounded drop-shadow-sm px-6 py-2 relative w-fit"> 218 <div class="flex flex-col gap-2 text-red-500 dark:text-red-300"> 219 <div class="flex items-center gap-2"> 220 {{ i "triangle-alert" "w-4 h-4" }} 221 <span class="font-medium">merge conflicts detected</span> 222 </div> 223 {{ if gt (len .MergeCheck.Conflicts) 0 }} 224 <ul class="space-y-1"> 225 {{ range .MergeCheck.Conflicts }} 226 {{ if .Filename }} 227 <li class="flex items-center"> 228 {{ i "file-warning" "w-4 h-4 mr-1.5 text-red-500 dark:text-red-300" }} 229 <span class="font-mono">{{ .Filename }}</span> 230 </li> 231 {{ else if .Reason }} 232 <li class="flex items-center"> 233 {{ i "file-warning" "w-4 h-4 mr-1.5 text-red-500 dark:text-red-300" }} 234 <span>{{.Reason}}</span> 235 </li> 236 {{ end }} 237 {{ end }} 238 </ul> 239 {{ end }} 240 </div> 241 </div> 242 {{ else if .MergeCheck }} 243 <div class="bg-green-50 dark:bg-green-900 border border-green-500 rounded drop-shadow-sm px-6 py-2 relative w-fit"> 244 <div class="flex items-center gap-2 text-green-500 dark:text-green-300"> 245 {{ i "circle-check-big" "w-4 h-4" }} 246 <span class="font-medium">no conflicts, ready to merge</span> 247 </div> 248 </div> 249 {{ end }} 250{{ end }} 251 252{{ define "resubmitStatus" }} 253 {{ if .ResubmitCheck.Yes }} 254 <div class="bg-amber-50 dark:bg-amber-900 border border-amber-500 rounded drop-shadow-sm px-6 py-2 relative w-fit"> 255 <div class="flex items-center gap-2 text-amber-500 dark:text-amber-300"> 256 {{ i "triangle-alert" "w-4 h-4" }} 257 <span class="font-medium">this branch has been updated, consider resubmitting</span> 258 </div> 259 </div> 260 {{ end }} 261{{ end }} 262 263{{ define "commits" }} 264{{ end }}