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 "repoContent" }} 6 <header class="pb-4"> 7 <h1 class="text-2xl dark:text-white"> 8 {{ .Pull.Title }} 9 <span class="text-gray-500 dark:text-gray-400">#{{ .Pull.PullId }}</span> 10 </h1> 11 </header> 12 13 {{ $bgColor := "bg-gray-800 dark:bg-gray-700" }} 14 {{ $icon := "ban" }} 15 16 {{ if .Pull.State.IsOpen }} 17 {{ $bgColor = "bg-green-600 dark:bg-green-700" }} 18 {{ $icon = "git-pull-request" }} 19 {{ else if .Pull.State.IsMerged }} 20 {{ $bgColor = "bg-purple-600 dark:bg-purple-700" }} 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 $icon "w-4 h-4 mr-1.5 text-white" }} 31 <span class="text-white">{{ .Pull.State.String }}</span> 32 </div> 33 <span class="text-gray-500 dark:text-gray-400 text-sm"> 34 opened by 35 {{ $owner := index $.DidHandleMap .Pull.OwnerDid }} 36 <a href="/{{ $owner }}" class="no-underline hover:underline" 37 >{{ $owner }}</a 38 > 39 <span class="select-none before:content-['\00B7']"></span> 40 <time>{{ .Pull.Created | timeFmt }}</time> 41 <span class="select-none before:content-['\00B7']"></span> 42 <span> 43 targeting 44 <span class="text-xs rounded bg-gray-100 dark:bg-gray-700 text-black dark:text-white font-mono px-2 mx-1/2 inline-flex items-center"> 45 <a href="/{{ .RepoInfo.FullName }}/tree/{{ .Pull.TargetBranch }}" class="no-underline hover:underline">{{ .Pull.TargetBranch }}</a> 46 </span> 47 </span> 48 {{ if not .Pull.IsPatch }} 49 <span>from 50 {{ if not .Pull.IsSameRepoBranch }} 51 <a href="/{{ $owner }}/{{ .PullSourceRepo.Name }}" class="no-underline hover:underline">{{ $owner }}/{{ .PullSourceRepo.Name }}</a> 52 {{ end }} 53 54 {{ $fullRepo := .RepoInfo.FullName }} 55 {{ if not .Pull.IsSameRepoBranch }} 56 {{ $fullRepo = printf "%s/%s" $owner .PullSourceRepo.Name }} 57 {{ end }} 58 <span class="text-xs rounded bg-gray-100 dark:bg-gray-700 text-black dark:text-white font-mono px-2 mx-1/2 inline-flex items-center"> 59 <a href="/{{ $fullRepo }}/tree/{{ .Pull.PullSource.Branch }}" class="no-underline hover:underline">{{ .Pull.PullSource.Branch }}</a> 60 </span> 61 </span> 62 {{ end }} 63 </span> 64 </div> 65 66 {{ if .Pull.Body }} 67 <article id="body" class="mt-2 prose dark:prose-invert"> 68 {{ .Pull.Body | markdown }} 69 </article> 70 {{ end }} 71 </section> 72 73{{ end }} 74 75{{ define "repoAfter" }} 76 <section id="submissions" class="mt-4"> 77 <div class="flex flex-col gap-4"> 78 {{ block "submissions" . }} {{ end }} 79 </div> 80 </section> 81 82 <div id="pull-close"></div> 83 <div id="pull-reopen"></div> 84{{ end }} 85 86{{ define "submissions" }} 87 {{ $lastIdx := sub (len .Pull.Submissions) 1 }} 88 {{ $targetBranch := .Pull.TargetBranch }} 89 {{ $repoName := .RepoInfo.FullName }} 90 {{ range $idx, $item := .Pull.Submissions }} 91 {{ $diff := $item.AsNiceDiff $targetBranch }} 92 {{ with $item }} 93 <details {{ if eq $idx $lastIdx }}open{{ end }}> 94 <summary id="round-#{{ .RoundNumber }}" class="list-none cursor-pointer"> 95 <div class="flex flex-wrap gap-2 items-center"> 96 <!-- round number --> 97 <div class="rounded bg-white dark:bg-gray-800 drop-shadow-sm px-3 py-2 dark:text-white"> 98 #{{ .RoundNumber }} 99 </div> 100 <!-- round summary --> 101 <div class="rounded drop-shadow-sm bg-white dark:bg-gray-800 p-2 text-gray-500 dark:text-gray-400"> 102 <span> 103 {{ $owner := index $.DidHandleMap $.Pull.OwnerDid }} 104 {{ $re := "re" }} 105 {{ if eq .RoundNumber 0 }} 106 {{ $re = "" }} 107 {{ end }} 108 <span class="hidden md:inline">{{$re}}submitted</span> 109 by <a href="/{{ $owner }}">{{ $owner }}</a> 110 <span class="select-none before:content-['\00B7']"></span> 111 <a class="text-gray-500 dark:text-gray-400 hover:text-gray-500" href="#round-#{{ .RoundNumber }}"><time>{{ .Created | shortTimeFmt }}</time></a> 112 <span class="select-none before:content-['·']"></span> 113 {{ $s := "s" }} 114 {{ if eq (len .Comments) 1 }} 115 {{ $s = "" }} 116 {{ end }} 117 {{ len .Comments }} comment{{$s}} 118 </span> 119 </div> 120 <!-- view patch --> 121 <a class="btn flex items-center gap-2 no-underline hover:no-underline p-2" 122 hx-boost="true" 123 href="/{{ $.RepoInfo.FullName }}/pulls/{{ $.Pull.PullId }}/round/{{.RoundNumber}}"> 124 {{ i "file-diff" "w-4 h-4" }} <span class="hidden md:inline">view patch</span> 125 </a> 126 </div> 127 </summary> 128 <div class="md:pl-12 flex flex-col gap-2 mt-2 relative"> 129 {{ range .Comments }} 130 <div id="comment-{{.ID}}" class="bg-white dark:bg-gray-800 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 dark:bg-gray-600"></div> 132 <div class="text-sm text-gray-500 dark:text-gray-400"> 133 {{ $owner := index $.DidHandleMap .OwnerDid }} 134 <a href="/{{$owner}}">{{$owner}}</a> 135 <span class="before:content-['·']"></span> 136 <a class="text-gray-500 dark:text-gray-400 hover:text-gray-500 dark:hover:text-gray-300" href="#comment-{{.ID}}"><time>{{ .Created | shortTimeFmt }}</time></a> 137 </div> 138 <div class="prose dark:prose-invert"> 139 {{ .Body | markdown }} 140 </div> 141 </div> 142 {{ end }} 143 144 {{ if eq $lastIdx .RoundNumber }} 145 {{ block "mergeStatus" $ }} {{ end }} 146 {{ block "resubmitStatus" $ }} {{ end }} 147 {{ end }} 148 149 {{ if $.LoggedInUser }} 150 {{ template "fragments/pullActions" (dict "LoggedInUser" $.LoggedInUser "Pull" $.Pull "RepoInfo" $.RepoInfo "RoundNumber" .RoundNumber "MergeCheck" $.MergeCheck "ResubmitCheck" $.ResubmitCheck) }} 151 {{ else }} 152 <div class="bg-white dark:bg-gray-800 rounded drop-shadow-sm px-6 py-4 w-fit dark:text-white"> 153 <div class="absolute left-8 -top-2 w-px h-2 bg-gray-300 dark:bg-gray-600"></div> 154 <a href="/login" class="underline">login</a> to join the discussion 155 </div> 156 {{ end }} 157 </div> 158 </details> 159 <hr class="md:hidden"/> 160 {{ end }} 161 {{ end }} 162{{ end }} 163 164{{ define "mergeStatus" }} 165 {{ if .Pull.State.IsClosed }} 166 <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"> 167 <div class="absolute left-8 -top-2 w-px h-2 bg-gray-300 dark:bg-gray-600"></div> 168 <div class="flex items-center gap-2 text-black dark:text-white"> 169 {{ i "ban" "w-4 h-4" }} 170 <span class="font-medium">closed without merging</span 171 > 172 </div> 173 </div> 174 {{ else if .Pull.State.IsMerged }} 175 <div class="bg-purple-50 dark:bg-purple-900 border border-purple-500 rounded drop-shadow-sm px-6 py-2 relative w-fit"> 176 <div class="absolute left-8 -top-2 w-px h-2 bg-gray-300 dark:bg-gray-600"></div> 177 <div class="flex items-center gap-2 text-purple-500 dark:text-purple-300"> 178 {{ i "git-merge" "w-4 h-4" }} 179 <span class="font-medium">pull request successfully merged</span 180 > 181 </div> 182 </div> 183 {{ else if and .MergeCheck .MergeCheck.Error }} 184 <div class="bg-red-50 dark:bg-red-900 border border-red-500 rounded drop-shadow-sm px-6 py-2 relative w-fit"> 185 <div class="absolute left-8 -top-2 w-px h-2 bg-gray-300 dark:bg-gray-600"></div> 186 <div class="flex items-center gap-2 text-red-500 dark:text-red-300"> 187 {{ i "triangle-alert" "w-4 h-4" }} 188 <span class="font-medium">{{ .MergeCheck.Error }}</span> 189 </div> 190 </div> 191 {{ else if and .MergeCheck .MergeCheck.IsConflicted }} 192 <div class="bg-red-50 dark:bg-red-900 border border-red-500 rounded drop-shadow-sm px-6 py-2 relative w-fit"> 193 <div class="absolute left-8 -top-2 w-px h-2 bg-gray-300 dark:bg-gray-600"></div> 194 <div class="flex flex-col gap-2 text-red-500 dark:text-red-300"> 195 <div class="flex items-center gap-2"> 196 {{ i "triangle-alert" "w-4 h-4" }} 197 <span class="font-medium">merge conflicts detected</span> 198 </div> 199 <ul class="space-y-1"> 200 {{ range .MergeCheck.Conflicts }} 201 {{ if .Filename }} 202 <li class="flex items-center"> 203 {{ i "file-warning" "w-4 h-4 mr-1.5 text-red-500 dark:text-red-300" }} 204 <span class="font-mono">{{ slice .Filename 0 (sub (len .Filename) 2) }}</span> 205 </li> 206 {{ end }} 207 {{ end }} 208 </ul> 209 </div> 210 </div> 211 {{ else if .MergeCheck }} 212 <div class="bg-green-50 dark:bg-green-900 border border-green-500 rounded drop-shadow-sm px-6 py-2 relative w-fit"> 213 <div class="absolute left-8 -top-2 w-px h-2 bg-gray-300 dark:bg-gray-600"></div> 214 <div class="flex items-center gap-2 text-green-500 dark:text-green-300"> 215 {{ i "circle-check-big" "w-4 h-4" }} 216 <span class="font-medium">no conflicts, ready to merge</span> 217 </div> 218 </div> 219 {{ end }} 220{{ end }} 221 222{{ define "resubmitStatus" }} 223 {{ if .ResubmitCheck.Yes }} 224 <div class="bg-amber-50 dark:bg-amber-900 border border-amber-500 rounded drop-shadow-sm px-6 py-2 relative w-fit"> 225 <div class="absolute left-8 -top-2 w-px h-2 bg-gray-300 dark:bg-gray-600"></div> 226 <div class="flex items-center gap-2 text-amber-500 dark:text-amber-300"> 227 {{ i "triangle-alert" "w-4 h-4" }} 228 <span class="font-medium">this branch has been updated, consider resubmitting</span> 229 </div> 230 </div> 231 {{ end }} 232{{ end }}