this repo has no description
1{{ define "title" }}{{ .RepoInfo.FullName }} at {{ .Ref }}{{ end }}
2
3
4{{ define "extrameta" }}
5 {{ template "repo/fragments/meta" . }}
6
7 {{ template "repo/fragments/og" (dict "RepoInfo" .RepoInfo) }}
8{{ end }}
9
10{{ define "repoContent" }}
11 <main>
12 {{ if .Languages }}
13 {{ block "repoLanguages" . }}{{ end }}
14 {{ end }}
15 <div class="flex items-center justify-between pb-5">
16 {{ block "branchSelector" . }}{{ end }}
17 <div class="flex md:hidden items-center gap-3">
18 <a href="/{{ .RepoInfo.FullName }}/commits/{{ .Ref | urlquery }}" class="inline-flex items-center text-sm gap-1 font-bold">
19 {{ i "git-commit-horizontal" "w-4" "h-4" }} {{ .TotalCommits }}
20 </a>
21 <a href="/{{ .RepoInfo.FullName }}/branches" class="inline-flex items-center text-sm gap-1 font-bold">
22 {{ i "git-branch" "w-4" "h-4" }} {{ len .Branches }}
23 </a>
24 <a href="/{{ .RepoInfo.FullName }}/tags" class="inline-flex items-center text-sm gap-1 font-bold">
25 {{ i "tags" "w-4" "h-4" }} {{ len .Tags }}
26 </a>
27 {{ template "repo/fragments/cloneDropdown" . }}
28 </div>
29 </div>
30 <div class="grid grid-cols-1 md:grid-cols-2 gap-2">
31 {{ block "fileTree" . }}{{ end }}
32 {{ block "rightInfo" . }}{{ end }}
33 </div>
34 </main>
35{{ end }}
36
37{{ define "repoLanguages" }}
38 <details class="group -my-4 -m-6 mb-4">
39 <summary class="flex gap-[1px] h-4 scale-y-50 hover:scale-y-100 origin-top group-open:scale-y-100 transition-all hover:cursor-pointer overflow-hidden rounded-t">
40 {{ range $value := .Languages }}
41 <div
42 title='{{ or $value.Name "Other" }} {{ printf "%.1f" $value.Percentage }}%'
43 style="background-color: {{ $value.Color }}; width: {{ $value.Percentage }}%"
44 ></div>
45 {{ end }}
46 </summary>
47 <div class="px-4 py-2 border-b border-gray-200 dark:border-gray-600 flex items-center gap-4 flex-wrap">
48 {{ range $value := .Languages }}
49 <div
50 class="flex items-center gap-2 text-xs align-items-center justify-center"
51 >
52 {{ template "repo/fragments/colorBall" (dict "color" (langColor $value.Name)) }}
53 <div>{{ or $value.Name "Other" }}
54 <span class="text-gray-500 dark:text-gray-400">
55 {{ if lt $value.Percentage 0.05 }}
56 0.1%
57 {{ else }}
58 {{ printf "%.1f" $value.Percentage }}%
59 {{ end }}
60 </span></div>
61 </div>
62 {{ end }}
63 </div>
64 </details>
65{{ end }}
66
67{{ define "branchSelector" }}
68 <div class="flex gap-2 items-center justify-between w-full">
69 <div class="flex gap-2 items-stretch">
70 <select
71 onchange="window.location.href = '/{{ .RepoInfo.FullName }}/tree/' + encodeURIComponent(this.value)"
72 class="p-1 border max-w-32 border-gray-200 bg-white dark:bg-gray-800 dark:text-white dark:border-gray-700"
73 >
74 <optgroup label="branches ({{len .Branches}})" class="bold text-sm">
75 {{ range .Branches }}
76 <option
77 value="{{ .Reference.Name }}"
78 class="py-1"
79 {{ if eq .Reference.Name $.Ref }}
80 selected
81 {{ end }}
82 >
83 {{ .Reference.Name }}
84 </option>
85 {{ end }}
86 </optgroup>
87 <optgroup label="tags ({{len .Tags}})" class="bold text-sm">
88 {{ range .Tags }}
89 <option
90 value="{{ .Reference.Name }}"
91 class="py-1"
92 {{ if eq .Reference.Name $.Ref }}
93 selected
94 {{ end }}
95 >
96 {{ .Reference.Name }}
97 </option>
98 {{ else }}
99 <option class="py-1" disabled>no tags found</option>
100 {{ end }}
101 </optgroup>
102 </select>
103 <div class="flex items-center gap-2">
104 <a
105 href="/{{ .RepoInfo.FullName }}/compare?base={{ $.Ref | urlquery }}"
106 class="btn flex items-center gap-2 no-underline hover:no-underline"
107 title="Compare branches or tags"
108 >
109 {{ i "git-compare" "w-4 h-4" }}
110 </a>
111 </div>
112 </div>
113
114 <!-- Clone dropdown in top right -->
115 <div class="hidden md:flex items-center ">
116 {{ template "repo/fragments/cloneDropdown" . }}
117 </div>
118 </div>
119{{ end }}
120
121{{ define "fileTree" }}
122 <div id="file-tree" class="col-span-1 pr-2 md:border-r md:border-gray-200 dark:md:border-gray-700" >
123 {{ $linkstyle := "no-underline hover:underline dark:text-white" }}
124
125 {{ range .Files }}
126 <div class="grid grid-cols-3 gap-4 items-center py-1">
127 <div class="col-span-2">
128 {{ $link := printf "/%s/%s/%s/%s" $.RepoInfo.FullName "tree" (urlquery $.Ref) .Name }}
129 {{ $icon := "folder" }}
130 {{ $iconStyle := "size-4 fill-current" }}
131
132 {{ if .IsSubmodule }}
133 {{ $link = printf "/%s/%s/%s/%s" $.RepoInfo.FullName "blob" (urlquery $.Ref) .Name }}
134 {{ $icon = "folder-input" }}
135 {{ $iconStyle = "size-4" }}
136 {{ end }}
137
138 {{ if .IsFile }}
139 {{ $link = printf "/%s/%s/%s/%s" $.RepoInfo.FullName "blob" (urlquery $.Ref) .Name }}
140 {{ $icon = "file" }}
141 {{ $iconStyle = "size-4" }}
142 {{ end }}
143
144 <a href="{{ $link }}" class="{{ $linkstyle }}">
145 <div class="flex items-center gap-2">
146 {{ i $icon $iconStyle "flex-shrink-0" }}
147 <span class="truncate">{{ .Name }}</span>
148 </div>
149 </a>
150 </div>
151
152 <div class="text-sm col-span-1 text-right">
153 {{ with .LastCommit }}
154 <a href="/{{ $.RepoInfo.FullName }}/commit/{{ .Hash }}" class="text-gray-500 dark:text-gray-400">{{ template "repo/fragments/time" .When }}</a>
155 {{ end }}
156 </div>
157 </div>
158 {{ end }}
159 </div>
160{{ end }}
161
162{{ define "rightInfo" }}
163 <div id="right-info" class="hidden md:block col-span-1">
164 {{ block "commitLog" . }} {{ end }}
165 {{ block "branchList" . }} {{ end }}
166 {{ block "tagList" . }} {{ end }}
167 </div>
168{{ end }}
169
170{{ define "commitLog" }}
171<div id="commit-log" class="md:col-span-1 px-2 pb-4">
172 <div class="flex justify-between items-center">
173 <a href="/{{ .RepoInfo.FullName }}/commits/{{ .Ref | urlquery }}" class="flex items-center gap-2 pb-2 cursor-pointer font-bold hover:text-gray-600 dark:hover:text-gray-300 hover:no-underline">
174 {{ i "logs" "w-4 h-4" }} commits
175 <span class="bg-gray-100 dark:bg-gray-700 font-normal rounded py-1/2 px-1 text-sm">{{ .TotalCommits }}</span>
176 </a>
177 </div>
178 <div class="flex flex-col gap-6">
179 {{ range .CommitsTrunc }}
180 <div>
181 <div id="commit-message">
182 {{ $messageParts := splitN .Message "\n\n" 2 }}
183 <div class="text-base cursor-pointer">
184 <div>
185 <div>
186 <a
187 href="/{{ $.RepoInfo.FullName }}/commit/{{ .Hash.String }}"
188 class="inline no-underline hover:underline dark:text-white"
189 >{{ index $messageParts 0 }}</a
190 >
191 {{ if gt (len $messageParts) 1 }}
192
193 <button
194 class="py-1/2 px-1 bg-gray-200 hover:bg-gray-400 rounded dark:bg-gray-700 dark:hover:bg-gray-600"
195 hx-on:click="this.parentElement.nextElementSibling.classList.toggle('hidden')"
196 >
197 {{ i "ellipsis" "w-3 h-3" }}
198 </button>
199 {{ end }}
200 </div>
201 {{ if gt (len $messageParts) 1 }}
202 <p
203 class="hidden mt-1 text-sm cursor-text pb-2 dark:text-gray-300"
204 >
205 {{ nl2br (index $messageParts 1) }}
206 </p>
207 {{ end }}
208 </div>
209 </div>
210 </div>
211
212 <!-- commit info bar -->
213 <div class="text-xs mt-2 text-gray-500 dark:text-gray-400 flex items-center flex-wrap">
214 {{ $verified := $.VerifiedCommits.IsVerified .Hash.String }}
215 {{ $hashStyle := "text-gray-700 dark:text-gray-300 bg-gray-100 dark:bg-gray-900" }}
216 {{ if $verified }}
217 {{ $hashStyle = "bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200 px-2 rounded" }}
218 {{ end }}
219 <span class="font-mono">
220 <a href="/{{ $.RepoInfo.FullName }}/commit/{{ .Hash.String }}"
221 class="no-underline hover:underline {{ $hashStyle }} px-2 py-1 rounded flex items-center gap-2">
222 {{ slice .Hash.String 0 8 }}
223 {{ if $verified }}
224 {{ i "shield-check" "w-3 h-3" }}
225 {{ end }}
226 </a>
227 </span>
228 <span
229 class="mx-1 before:content-['·'] before:select-none"
230 ></span>
231 {{ template "attribution" (list . $.EmailToDid) }}
232 <div class="inline-block px-1 select-none after:content-['·']"></div>
233 {{ template "repo/fragments/time" .Committer.When }}
234
235 <!-- tags/branches -->
236 {{ $tagsForCommit := index $.TagMap .Hash.String }}
237 {{ if gt (len $tagsForCommit) 0 }}
238 <div class="inline-block px-1 select-none after:content-['·']"></div>
239 {{ end }}
240 {{ range $tagsForCommit }}
241 <span class="text-xs rounded bg-gray-100 dark:bg-gray-700 text-black dark:text-white font-mono px-2 mx-[2px] inline-flex items-center">
242 {{ . }}
243 </span>
244 {{ end }}
245
246 <!-- ci status -->
247 {{ $pipeline := index $.Pipelines .Hash.String }}
248 {{ if and $pipeline (gt (len $pipeline.Statuses) 0) }}
249 <div class="inline-block px-1 select-none after:content-['·']"></div>
250 {{ template "repo/pipelines/fragments/pipelineSymbolLong" (dict "RepoInfo" $.RepoInfo "Pipeline" $pipeline) }}
251 {{ end }}
252 </div>
253 </div>
254 {{ end }}
255 </div>
256</div>
257{{ end }}
258
259{{ define "attribution" }}
260 {{ $commit := index . 0 }}
261 {{ $map := index . 1 }}
262 <span class="flex items-center">
263 {{ $author := index $map $commit.Author.Email }}
264 {{ $coauthors := $commit.CoAuthors }}
265 {{ $all := list }}
266
267 {{ if $author }}
268 {{ $all = append $all $author }}
269 {{ end }}
270 {{ range $coauthors }}
271 {{ $co := index $map .Email }}
272 {{ if $co }}
273 {{ $all = append $all $co }}
274 {{ end }}
275 {{ end }}
276
277 {{ template "fragments/tinyAvatarList" (dict "all" $all "classes" "size-6") }}
278 <a href="{{ if $author }}/{{ $author }}{{ else }}mailto:{{ $commit.Author.Email }}{{ end }}"
279 class="no-underline hover:underline">
280 {{ if $author }}{{ resolve $author }}{{ else }}{{ $commit.Author.Name }}{{ end }}
281 {{ if $coauthors }} +{{ length $coauthors }}{{ end }}
282 </a>
283 </span>
284{{ end }}
285
286{{ define "branchList" }}
287 {{ if gt (len .BranchesTrunc) 0 }}
288 <div id="branches" class="md:col-span-1 px-2 py-4 border-t border-gray-200 dark:border-gray-700">
289 <a href="/{{ .RepoInfo.FullName }}/branches" class="flex items-center gap-2 pb-2 cursor-pointer font-bold hover:text-gray-600 dark:hover:text-gray-300 hover:no-underline">
290 {{ i "git-branch" "w-4 h-4" }} branches
291 <span class="bg-gray-100 dark:bg-gray-700 font-normal rounded py-1/2 px-1 text-sm">{{ len .Branches }}</span>
292 </a>
293 <div class="flex flex-col gap-1">
294 {{ range .BranchesTrunc }}
295 <div class="text-base flex items-center justify-between overflow-hidden">
296 <div class="flex items-center gap-2 min-w-0 flex-1">
297 <a href="/{{ $.RepoInfo.FullName }}/tree/{{ .Reference.Name | urlquery }}"
298 class="inline-block truncate no-underline hover:underline dark:text-white">
299 {{ .Reference.Name }}
300 </a>
301 {{ if .Commit }}
302 <span class="px-1 text-gray-500 dark:text-gray-400 select-none after:content-['·'] shrink-0"></span>
303 <span class="whitespace-nowrap text-xs text-gray-500 dark:text-gray-400 shrink-0">{{ template "repo/fragments/time" .Commit.Committer.When }}</span>
304 {{ end }}
305 {{ if .IsDefault }}
306 <span class="px-1 text-gray-500 dark:text-gray-400 select-none after:content-['·'] shrink-0"></span>
307 <span class="bg-gray-200 dark:bg-gray-700 rounded py-1/2 px-1 text-xs font-mono shrink-0">default</span>
308 {{ end }}
309 </div>
310 {{ if ne $.Ref .Reference.Name }}
311 <a href="/{{ $.RepoInfo.FullName }}/compare/{{ $.Ref | urlquery }}...{{ .Reference.Name | urlquery }}"
312 class="text-xs flex gap-2 items-center shrink-0 ml-2"
313 title="Compare branches or tags">
314 {{ i "git-compare" "w-3 h-3" }} compare
315 </a>
316 {{ end }}
317 </div>
318 {{ end }}
319 </div>
320 </div>
321 {{ end }}
322{{ end }}
323
324{{ define "tagList" }}
325 {{ if gt (len .TagsTrunc) 0 }}
326 <div id="tags" class="md:col-span-1 px-2 py-4 border-t border-gray-200 dark:border-gray-700">
327 <div class="flex justify-between items-center">
328 <a href="/{{ .RepoInfo.FullName }}/tags" class="flex items-center gap-2 pb-2 cursor-pointer font-bold hover:text-gray-600 dark:hover:text-gray-300 hover:no-underline">
329 {{ i "tags" "w-4 h-4" }} tags
330 <span class="bg-gray-100 dark:bg-gray-700 font-normal rounded py-1/2 px-1 text-sm">{{ len .Tags }}</span>
331 </a>
332 </div>
333 <div class="flex flex-col gap-1">
334 {{ range $idx, $tag := .TagsTrunc }}
335 {{ with $tag }}
336 <div>
337 <div class="text-base flex items-center gap-2">
338 <a href="/{{ $.RepoInfo.FullName }}/tree/{{ .Reference.Name | urlquery }}"
339 class="inline no-underline hover:underline dark:text-white">
340 {{ .Reference.Name }}
341 </a>
342 </div>
343 <div>
344 {{ with .Tag }}
345 <span class="text-xs text-gray-500 dark:text-gray-400">{{ template "repo/fragments/time" .Tagger.When }}</span>
346 {{ end }}
347 {{ if eq $idx 0 }}
348 {{ with .Tag }}<span class="px-1 text-gray-500 dark:text-gray-400 select-none after:content-['·']"></span>{{ end }}
349 <span class="bg-gray-200 dark:bg-gray-700 rounded py-1/2 px-1 text-xs font-mono">latest</span>
350 {{ end }}
351 </div>
352 </div>
353 {{ end }}
354 {{ end }}
355 </div>
356 </div>
357 {{ end }}
358{{ end }}
359
360{{ define "repoAfter" }}
361 {{- if or .HTMLReadme .Readme -}}
362 {{ template "repo/fragments/readme" . }}
363 {{- end -}}
364{{ end }}