this repo has no description
1{{ define "repo/fragments/diff" }}
2{{ $repo := index . 0 }}
3{{ $diff := index . 1 }}
4{{ $commit := $diff.Commit }}
5{{ $diff := $diff.Diff }}
6{{ $this := $commit.This }}
7{{ $parent := $commit.Parent }}
8
9 {{ $last := sub (len $diff) 1 }}
10 {{ range $idx, $hunk := $diff }}
11 {{ with $hunk }}
12 <section class="mt-4 border border-gray-200 dark:border-gray-700 w-full mx-auto rounded bg-white dark:bg-gray-800 drop-shadow-sm">
13 <div id="file-{{ .Name.New }}">
14 <div id="diff-file">
15 <details open>
16 <summary class="list-none cursor-pointer sticky top-0">
17 <div id="diff-file-header" class="rounded cursor-pointer bg-white dark:bg-gray-800 flex justify-between">
18 <div id="left-side-items" class="p-2 flex gap-2 items-center overflow-x-auto">
19 <div class="flex gap-1 items-center">
20 {{ $markerstyle := "diff-type p-1 mr-1 font-mono text-sm rounded select-none" }}
21 {{ if .IsNew }}
22 <span class="bg-green-100 text-green-700 dark:bg-green-800/50 dark:text-green-400 {{ $markerstyle }}">ADDED</span>
23 {{ else if .IsDelete }}
24 <span class="bg-red-100 text-red-700 dark:bg-red-800/50 dark:text-red-400 {{ $markerstyle }}">DELETED</span>
25 {{ else if .IsCopy }}
26 <span class="bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-300 {{ $markerstyle }}">COPIED</span>
27 {{ else if .IsRename }}
28 <span class="bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-300 {{ $markerstyle }}">RENAMED</span>
29 {{ else }}
30 <span class="bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-300 {{ $markerstyle }}">MODIFIED</span>
31 {{ end }}
32
33 {{ template "repo/fragments/diffStatPill" .Stats }}
34 </div>
35
36 <div class="flex gap-2 items-center overflow-x-auto">
37 {{ if .IsDelete }}
38 <a class="dark:text-white whitespace-nowrap overflow-x-auto" {{if $this }}href="/{{ $repo }}/blob/{{ $this }}/{{ .Name.Old }}"{{end}}>
39 {{ .Name.Old }}
40 </a>
41 {{ else if (or .IsCopy .IsRename) }}
42 <a class="dark:text-white whitespace-nowrap overflow-x-auto" {{if $parent}}href="/{{ $repo }}/blob/{{ $parent }}/{{ .Name.Old }}"{{end}}>
43 {{ .Name.Old }}
44 </a>
45 {{ i "arrow-right" "w-4 h-4" }}
46 <a class="dark:text-white whitespace-nowrap overflow-x-auto" {{if $this}}href="/{{ $repo }}/blob/{{ $this }}/{{ .Name.New }}"{{end}}>
47 {{ .Name.New }}
48 </a>
49 {{ else }}
50 <a class="dark:text-white whitespace-nowrap overflow-x-auto" {{if $this}}href="/{{ $repo }}/blob/{{ $this }}/{{ .Name.New }}"{{end}}>
51 {{ .Name.New }}
52 </a>
53 {{ end }}
54 </div>
55 </div>
56
57 {{ $iconstyle := "p-1 mx-1 hover:bg-gray-100 dark:hover:bg-gray-700 rounded" }}
58 <div id="right-side-items" class="p-2 flex items-center">
59 <a title="top of file" href="#file-{{ .Name.New }}" class="{{ $iconstyle }}">{{ i "arrow-up-to-line" "w-4 h-4" }}</a>
60 {{ if gt $idx 0 }}
61 {{ $prev := index $diff (sub $idx 1) }}
62 <a title="previous file" href="#file-{{ $prev.Name.New }}" class="{{ $iconstyle }}">{{ i "arrow-up" "w-4 h-4" }}</a>
63 {{ end }}
64
65 {{ if lt $idx $last }}
66 {{ $next := index $diff (add $idx 1) }}
67 <a title="next file" href="#file-{{ $next.Name.New }}" class="{{ $iconstyle }}">{{ i "arrow-down" "w-4 h-4" }}</a>
68 {{ end }}
69 </div>
70
71 </div>
72 </summary>
73
74 <div class="transition-all duration-700 ease-in-out">
75 {{ if .IsDelete }}
76 <p class="text-center text-gray-400 dark:text-gray-500 p-4">
77 This file has been deleted.
78 </p>
79 {{ else if .IsCopy }}
80 <p class="text-center text-gray-400 dark:text-gray-500 p-4">
81 This file has been copied.
82 </p>
83 {{ else if .IsBinary }}
84 <p class="text-center text-gray-400 dark:text-gray-500 p-4">
85 This is a binary file and will not be displayed.
86 </p>
87 {{ else }}
88 {{ $name := .Name.New }}
89 <pre class="overflow-x-auto"><div class="overflow-x-auto"><div class="min-w-full inline-block">{{- range .TextFragments -}}<div class="bg-gray-100 dark:bg-gray-700 text-gray-500 dark:text-gray-400 select-none text-center">···</div>
90 {{- $oldStart := .OldPosition -}}
91 {{- $newStart := .NewPosition -}}
92 {{- $lineNrStyle := "min-w-[3.5rem] flex-shrink-0 select-none text-right bg-white dark:bg-gray-800 scroll-mt-10 target:border target:border-amber-500 target:rounded " -}}
93 {{- $linkStyle := "text-gray-400 dark:text-gray-500 hover:underline" -}}
94 {{- $lineNrSepStyle1 := "" -}}
95 {{- $lineNrSepStyle2 := "pr-2" -}}
96 {{- range .Lines -}}
97 {{- if eq .Op.String "+" -}}
98 <div class="bg-green-100 dark:bg-green-800/30 text-green-700 dark:text-green-400 flex min-w-full items-center">
99 <div class="{{$lineNrStyle}} {{$lineNrSepStyle1}}"><span aria-hidden="true" class="invisible">{{$newStart}}</span></div>
100 <div class="{{$lineNrStyle}} {{$lineNrSepStyle2}}" id="{{$name}}-N{{$newStart}}"><a class="{{$linkStyle}}" href="#{{$name}}-N{{$newStart}}">{{ $newStart }}</a></div>
101 <div class="w-5 flex-shrink-0 select-none text-center">{{ .Op.String }}</div>
102 <div class="px-2">{{ .Line }}</div>
103 </div>
104 {{- $newStart = add64 $newStart 1 -}}
105 {{- end -}}
106 {{- if eq .Op.String "-" -}}
107 <div class="bg-red-100 dark:bg-red-800/30 text-red-700 dark:text-red-400 flex min-w-full items-center">
108 <div class="{{$lineNrStyle}} {{$lineNrSepStyle1}}" id="{{$name}}-O{{$oldStart}}"><a class="{{$linkStyle}}" href="#{{$name}}-O{{$oldStart}}">{{ $oldStart }}</a></div>
109 <div class="{{$lineNrStyle}} {{$lineNrSepStyle2}}"><span aria-hidden="true" class="invisible">{{$oldStart}}</span></div>
110 <div class="w-5 flex-shrink-0 select-none text-center">{{ .Op.String }}</div>
111 <div class="px-2">{{ .Line }}</div>
112 </div>
113 {{- $oldStart = add64 $oldStart 1 -}}
114 {{- end -}}
115 {{- if eq .Op.String " " -}}
116 <div class="bg-white dark:bg-gray-800 text-gray-500 dark:text-gray-400 flex min-w-full items-center">
117 <div class="{{$lineNrStyle}} {{$lineNrSepStyle1}}" id="{{$name}}-O{{$oldStart}}"><a class="{{$linkStyle}}" href="#{{$name}}-O{{$oldStart}}">{{ $oldStart }}</a></div>
118 <div class="{{$lineNrStyle}} {{$lineNrSepStyle2}}" id="{{$name}}-N{{$newStart}}"><a class="{{$linkStyle}}" href="#{{$name}}-N{{$newStart}}">{{ $newStart }}</a></div>
119 <div class="w-5 flex-shrink-0 select-none text-center">{{ .Op.String }}</div>
120 <div class="px-2">{{ .Line }}</div>
121 </div>
122 {{- $newStart = add64 $newStart 1 -}}
123 {{- $oldStart = add64 $oldStart 1 -}}
124 {{- end -}}
125 {{- end -}}
126 {{- end -}}</div></div></pre>
127 {{- end -}}
128 </div>
129
130 </details>
131
132 </div>
133 </div>
134 </section>
135 {{ end }}
136 {{ end }}
137{{ end }}
138
139{{ define "statPill" }}
140 <div class="flex items-center font-mono text-sm">
141 {{ if and .Insertions .Deletions }}
142 <span class="rounded-l p-1 select-none bg-green-100 text-green-700 dark:bg-green-800/50 dark:text-green-400">+{{ .Insertions }}</span>
143 <span class="rounded-r p-1 select-none bg-red-100 text-red-700 dark:bg-red-800/50 dark:text-red-400">-{{ .Deletions }}</span>
144 {{ else if .Insertions }}
145 <span class="rounded p-1 select-none bg-green-100 text-green-700 dark:bg-green-800/50 dark:text-green-400">+{{ .Insertions }}</span>
146 {{ else if .Deletions }}
147 <span class="rounded p-1 select-none bg-red-100 text-red-700 dark:bg-red-800/50 dark:text-red-400">-{{ .Deletions }}</span>
148 {{ end }}
149 </div>
150{{ end }}