A vibe coded tangled fork which supports pijul.
1{{ define "title" }} change {{ .Change.Hash }} · {{ .RepoInfo.FullName }} {{ end }}
2
3{{ define "repoContent" }}
4{{ $repo := .RepoInfo.FullName }}
5{{ $change := .Change }}
6
7<section class="dark:text-white">
8 <h1 class="mt-2">{{ $change.Message }}</h1>
9
10 <div class="flex items-center gap-3 py-3">
11 {{ if $change.Authors }}
12 {{ $author := index $change.Authors 0 }}
13 {{ placeholderAvatar "md" }}
14 <div class="flex flex-col">
15 <div>
16 {{ range $idx, $a := $change.Authors }}
17 {{ if gt $idx 0 }}, {{ end }}
18 {{ $a.Name }}{{ if $a.Email }} <{{ $a.Email }}>{{ end }}
19 {{ end }}
20 </div>
21 {{ if $change.HasTimestamp }}
22 <div class="text-sm text-gray-500 dark:text-gray-400">
23 {{ template "repo/fragments/time" $change.Timestamp }}
24 </div>
25 {{ end }}
26 <div class="font-mono text-sm text-gray-500 dark:text-gray-400 break-all">{{ $change.Hash }}</div>
27 </div>
28 {{ else }}
29 {{ placeholderAvatar "md" }}
30 <div class="text-gray-500">unknown</div>
31 {{ end }}
32 </div>
33
34 <h2 class="mt-6 text-sm uppercase text-gray-600 dark:text-gray-400">Dependencies</h2>
35 <ul class="mt-2">
36 {{ if $change.Dependencies }}
37 {{ range $change.Dependencies }}
38 <li class="font-mono text-sm break-all">
39 <a class="no-underline hover:underline" href="/{{ $repo }}/change/{{ . }}">{{ . }}</a>
40 </li>
41 {{ end }}
42 {{ else }}
43 <li class="text-sm text-gray-500">none</li>
44 {{ end }}
45 </ul>
46
47 <h2 class="mt-8 text-sm uppercase text-gray-600 dark:text-gray-400">Change contents</h2>
48 {{ if $change.HasDiff }}
49 {{ if $change.DiffLines }}
50 <div class="overflow-x-auto text-sm bg-gray-50 dark:bg-gray-900 p-3 rounded mt-2 font-mono">
51 {{ $lineNrStyle := "min-w-[3.5rem] flex-shrink-0 select-none text-right bg-white dark:bg-gray-800" }}
52 {{ $lineNrSepStyle1 := "" }}
53 {{ $lineNrSepStyle2 := "pr-2 border-r border-gray-200 dark:border-gray-700" }}
54 {{ $containerStyle := "inline-flex w-full items-center" }}
55 {{ range $change.DiffLines }}
56 {{ if eq .Kind "section" }}
57 <div class="whitespace-pre text-xs uppercase tracking-wide text-gray-600 dark:text-gray-300 mt-3">{{ .Text }}</div>
58 {{ else if eq .Kind "meta" }}
59 <div class="whitespace-pre text-gray-500 dark:text-gray-400">{{ .Text }}</div>
60 {{ else }}
61 {{ $lineClass := "bg-white dark:bg-gray-800 text-gray-500 dark:text-gray-400" }}
62 {{ if eq .Kind "add" }}
63 {{ $lineClass = "bg-green-100 dark:bg-green-800/30 text-green-700 dark:text-green-400" }}
64 {{ else if eq .Kind "del" }}
65 {{ $lineClass = "bg-red-100 dark:bg-red-800/30 text-red-700 dark:text-red-400" }}
66 {{ end }}
67 <div class="{{ $containerStyle }} {{ $lineClass }}">
68 <div class="{{ $lineNrStyle }} {{ $lineNrSepStyle1 }}">
69 {{ if .HasOld }}{{ .OldLine }}{{ else }}<span aria-hidden="true" class="invisible">0</span>{{ end }}
70 </div>
71 <div class="{{ $lineNrStyle }} {{ $lineNrSepStyle2 }}">
72 {{ if .HasNew }}{{ .NewLine }}{{ else }}<span aria-hidden="true" class="invisible">0</span>{{ end }}
73 </div>
74 <div class="w-5 flex-shrink-0 select-none text-center">{{ .Op }}</div>
75 <div class="px-2 whitespace-pre">{{ .Body }}</div>
76 </div>
77 {{ end }}
78 {{ end }}
79 </div>
80 {{ else }}
81 <pre class="overflow-x-auto text-sm bg-gray-50 dark:bg-gray-900 p-3 rounded mt-2 font-mono whitespace-pre">{{ $change.Diff }}</pre>
82 {{ end }}
83 {{ else }}
84 <div class="text-sm text-gray-500 mt-2">no diff available</div>
85 {{ end }}
86</section>
87{{ end }}