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