v0.1.0 3f267b5

diff_templ.go RawHistoryFolder

1// Code generated by templ - DO NOT EDIT.
2
3// templ: version: v0.3.1020
4// SPDX-License-Identifier: AGPL-3.0-or-later
5
6package web
7
8//lint:file-ignore SA4006 This context is only used if a nested component is present.
9
10import "github.com/a-h/templ"
11import templruntime "github.com/a-h/templ/runtime"
12
13// Commit is a commit: the message and facts, the diff tools, the diff.
14func Commit(l Layout, p CommitPage) templ.Component {
15	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
16		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
17		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
18			return templ_7745c5c3_CtxErr
19		}
20		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
21		if !templ_7745c5c3_IsBuffer {
22			defer func() {
23				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
24				if templ_7745c5c3_Err == nil {
25					templ_7745c5c3_Err = templ_7745c5c3_BufErr
26				}
27			}()
28		}
29		ctx = templ.InitializeContext(ctx)
30		templ_7745c5c3_Var1 := templ.GetChildren(ctx)
31		if templ_7745c5c3_Var1 == nil {
32			templ_7745c5c3_Var1 = templ.NopComponent
33		}
34		ctx = templ.ClearChildren(ctx)
35		templ_7745c5c3_Var2 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
36			templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
37			templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
38			if !templ_7745c5c3_IsBuffer {
39				defer func() {
40					templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
41					if templ_7745c5c3_Err == nil {
42						templ_7745c5c3_Err = templ_7745c5c3_BufErr
43					}
44				}()
45			}
46			ctx = templ.InitializeContext(ctx)
47			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "<header class=\"show\"><h1>")
48			if templ_7745c5c3_Err != nil {
49				return templ_7745c5c3_Err
50			}
51			var templ_7745c5c3_Var3 string
52			templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(p.Subject)
53			if templ_7745c5c3_Err != nil {
54				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 9, Col: 18}
55			}
56			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3))
57			if templ_7745c5c3_Err != nil {
58				return templ_7745c5c3_Err
59			}
60			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "</h1>")
61			if templ_7745c5c3_Err != nil {
62				return templ_7745c5c3_Err
63			}
64			if p.Body != "" {
65				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, "<pre class=\"msg\">")
66				if templ_7745c5c3_Err != nil {
67					return templ_7745c5c3_Err
68				}
69				var templ_7745c5c3_Var4 string
70				templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(p.Body)
71				if templ_7745c5c3_Err != nil {
72					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 11, Col: 29}
73				}
74				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4))
75				if templ_7745c5c3_Err != nil {
76					return templ_7745c5c3_Err
77				}
78				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, "</pre>")
79				if templ_7745c5c3_Err != nil {
80					return templ_7745c5c3_Err
81				}
82			}
83			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "<dl class=\"kv show-kv\"><dt>commit</dt><dd>")
84			if templ_7745c5c3_Err != nil {
85				return templ_7745c5c3_Err
86			}
87			var templ_7745c5c3_Var5 string
88			templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(p.SHA)
89			if templ_7745c5c3_Err != nil {
90				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 15, Col: 15}
91			}
92			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5))
93			if templ_7745c5c3_Err != nil {
94				return templ_7745c5c3_Err
95			}
96			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, "</dd><dt>author</dt><dd>")
97			if templ_7745c5c3_Err != nil {
98				return templ_7745c5c3_Err
99			}
100			templ_7745c5c3_Err = personView(p.Author).Render(ctx, templ_7745c5c3_Buffer)
101			if templ_7745c5c3_Err != nil {
102				return templ_7745c5c3_Err
103			}
104			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 7, "</dd>")
105			if templ_7745c5c3_Err != nil {
106				return templ_7745c5c3_Err
107			}
108			if p.Committer != nil {
109				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 8, "<dt>committer</dt><dd>")
110				if templ_7745c5c3_Err != nil {
111					return templ_7745c5c3_Err
112				}
113				templ_7745c5c3_Err = personView(*p.Committer).Render(ctx, templ_7745c5c3_Buffer)
114				if templ_7745c5c3_Err != nil {
115					return templ_7745c5c3_Err
116				}
117				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, "</dd>")
118				if templ_7745c5c3_Err != nil {
119					return templ_7745c5c3_Err
120				}
121			}
122			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, "<dt>")
123			if templ_7745c5c3_Err != nil {
124				return templ_7745c5c3_Err
125			}
126			if p.Merge {
127				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, "merge of")
128				if templ_7745c5c3_Err != nil {
129					return templ_7745c5c3_Err
130				}
131			} else {
132				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, "parent")
133				if templ_7745c5c3_Err != nil {
134					return templ_7745c5c3_Err
135				}
136			}
137			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, "</dt><dd>")
138			if templ_7745c5c3_Err != nil {
139				return templ_7745c5c3_Err
140			}
141			if p.Root {
142				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 14, "none (root commit) ")
143				if templ_7745c5c3_Err != nil {
144					return templ_7745c5c3_Err
145				}
146			}
147			for i, par := range p.Parents {
148				if i > 0 {
149					var templ_7745c5c3_Var6 string
150					templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinStringErrs(" + ")
151					if templ_7745c5c3_Err != nil {
152						return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 35, Col: 14}
153					}
154					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var6))
155					if templ_7745c5c3_Err != nil {
156						return templ_7745c5c3_Err
157					}
158				}
159				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, " <a href=\"")
160				if templ_7745c5c3_Err != nil {
161					return templ_7745c5c3_Err
162				}
163				var templ_7745c5c3_Var7 templ.SafeURL
164				templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(par.Href))
165				if templ_7745c5c3_Err != nil {
166					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 37, Col: 39}
167				}
168				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var7))
169				if templ_7745c5c3_Err != nil {
170					return templ_7745c5c3_Err
171				}
172				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "\">")
173				if templ_7745c5c3_Err != nil {
174					return templ_7745c5c3_Err
175				}
176				var templ_7745c5c3_Var8 string
177				templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.JoinStringErrs(par.Label)
178				if templ_7745c5c3_Err != nil {
179					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 37, Col: 53}
180				}
181				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var8))
182				if templ_7745c5c3_Err != nil {
183					return templ_7745c5c3_Err
184				}
185				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 17, "</a> ")
186				if templ_7745c5c3_Err != nil {
187					return templ_7745c5c3_Err
188				}
189			}
190			if p.Merge {
191				var templ_7745c5c3_Var9 string
192				templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.JoinStringErrs(" · diff against the first parent")
193				if templ_7745c5c3_Err != nil {
194					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 40, Col: 43}
195				}
196				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var9))
197				if templ_7745c5c3_Err != nil {
198					return templ_7745c5c3_Err
199				}
200			}
201			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 18, "</dd>")
202			if templ_7745c5c3_Err != nil {
203				return templ_7745c5c3_Err
204			}
205			if len(p.Refs) > 0 {
206				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 19, "<dt>refs</dt><dd>")
207				if templ_7745c5c3_Err != nil {
208					return templ_7745c5c3_Err
209				}
210				for _, r := range p.Refs {
211					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, "[")
212					if templ_7745c5c3_Err != nil {
213						return templ_7745c5c3_Err
214					}
215					var templ_7745c5c3_Var10 string
216					templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.JoinStringErrs(r)
217					if templ_7745c5c3_Err != nil {
218						return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 47, Col: 11}
219					}
220					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var10))
221					if templ_7745c5c3_Err != nil {
222						return templ_7745c5c3_Err
223					}
224					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "]")
225					if templ_7745c5c3_Err != nil {
226						return templ_7745c5c3_Err
227					}
228					var templ_7745c5c3_Var11 string
229					templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
230					if templ_7745c5c3_Err != nil {
231						return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 47, Col: 19}
232					}
233					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11))
234					if templ_7745c5c3_Err != nil {
235						return templ_7745c5c3_Err
236					}
237				}
238				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "</dd>")
239				if templ_7745c5c3_Err != nil {
240					return templ_7745c5c3_Err
241				}
242			}
243			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 23, "</dl></header><div class=\"diff-tools\" role=\"toolbar\" aria-label=\"Diff view\"><span class=\"dim\">")
244			if templ_7745c5c3_Err != nil {
245				return templ_7745c5c3_Err
246			}
247			var templ_7745c5c3_Var12 string
248			templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.JoinStringErrs(plural(p.NFiles, "file", "files"))
249			if templ_7745c5c3_Err != nil {
250				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 54, Col: 56}
251			}
252			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var12))
253			if templ_7745c5c3_Err != nil {
254				return templ_7745c5c3_Err
255			}
256			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, " · <span class=\"plus\">+")
257			if templ_7745c5c3_Err != nil {
258				return templ_7745c5c3_Err
259			}
260			var templ_7745c5c3_Var13 string
261			templ_7745c5c3_Var13, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Adds))
262			if templ_7745c5c3_Err != nil {
263				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 54, Col: 96}
264			}
265			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var13))
266			if templ_7745c5c3_Err != nil {
267				return templ_7745c5c3_Err
268			}
269			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 25, "</span> <span class=\"minus\">-")
270			if templ_7745c5c3_Err != nil {
271				return templ_7745c5c3_Err
272			}
273			var templ_7745c5c3_Var14 string
274			templ_7745c5c3_Var14, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Dels))
275			if templ_7745c5c3_Err != nil {
276				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 54, Col: 141}
277			}
278			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var14))
279			if templ_7745c5c3_Err != nil {
280				return templ_7745c5c3_Err
281			}
282			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 26, "</span></span> <span class=\"grow\"></span>")
283			if templ_7745c5c3_Err != nil {
284				return templ_7745c5c3_Err
285			}
286			templ_7745c5c3_Err = viewLink(p, "unified", "[u]nified", "u", p.UnifiedHref).Render(ctx, templ_7745c5c3_Buffer)
287			if templ_7745c5c3_Err != nil {
288				return templ_7745c5c3_Err
289			}
290			templ_7745c5c3_Err = viewLink(p, "split", "[d] split", "d", p.SplitHref).Render(ctx, templ_7745c5c3_Buffer)
291			if templ_7745c5c3_Err != nil {
292				return templ_7745c5c3_Err
293			}
294			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 27, "<button type=\"button\" aria-keyshortcuts=\"x\" hx-on:click=\"document.body.dispatchEvent(new CustomEvent('k-collapse'))\">[x] collapse all</button></div>")
295			if templ_7745c5c3_Err != nil {
296				return templ_7745c5c3_Err
297			}
298			if p.Invisible {
299				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 28, "<p class=\"notice\">this diff holds invisible characters (direction controls, zero-width characters). They are shown as <span class=\"inv\">&lt;U+XXXX&gt;</span> markers, never applied.</p>")
300				if templ_7745c5c3_Err != nil {
301					return templ_7745c5c3_Err
302				}
303			}
304			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 29, " ")
305			if templ_7745c5c3_Err != nil {
306				return templ_7745c5c3_Err
307			}
308			if p.Note != "" {
309				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 30, "<p class=\"notice\">")
310				if templ_7745c5c3_Err != nil {
311					return templ_7745c5c3_Err
312				}
313				var templ_7745c5c3_Var15 string
314				templ_7745c5c3_Var15, templ_7745c5c3_Err = templ.JoinStringErrs(p.Note)
315				if templ_7745c5c3_Err != nil {
316					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 67, Col: 29}
317				}
318				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var15))
319				if templ_7745c5c3_Err != nil {
320					return templ_7745c5c3_Err
321				}
322				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 31, "</p>")
323				if templ_7745c5c3_Err != nil {
324					return templ_7745c5c3_Err
325				}
326			}
327			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 32, " <div id=\"diffs\"")
328			if templ_7745c5c3_Err != nil {
329				return templ_7745c5c3_Err
330			}
331			if p.Both {
332				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 33, " data-diff=\"")
333				if templ_7745c5c3_Err != nil {
334					return templ_7745c5c3_Err
335				}
336				var templ_7745c5c3_Var16 string
337				templ_7745c5c3_Var16, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
338				if templ_7745c5c3_Err != nil {
339					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 72, Col: 22}
340				}
341				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var16)
342				if templ_7745c5c3_Err != nil {
343					return templ_7745c5c3_Err
344				}
345				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 34, "\"")
346				if templ_7745c5c3_Err != nil {
347					return templ_7745c5c3_Err
348				}
349			} else {
350				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 35, " data-view=\"")
351				if templ_7745c5c3_Err != nil {
352					return templ_7745c5c3_Err
353				}
354				var templ_7745c5c3_Var17 string
355				templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
356				if templ_7745c5c3_Err != nil {
357					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 74, Col: 22}
358				}
359				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var17)
360				if templ_7745c5c3_Err != nil {
361					return templ_7745c5c3_Err
362				}
363				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 36, "\"")
364				if templ_7745c5c3_Err != nil {
365					return templ_7745c5c3_Err
366				}
367			}
368			if p.Both && !p.Pinned {
369				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 37, " hx-live=\"this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff\"")
370				if templ_7745c5c3_Err != nil {
371					return templ_7745c5c3_Err
372				}
373			}
374			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 38, ">")
375			if templ_7745c5c3_Err != nil {
376				return templ_7745c5c3_Err
377			}
378			for _, f := range p.Files {
379				templ_7745c5c3_Err = DiffFileView(f, p).Render(ctx, templ_7745c5c3_Buffer)
380				if templ_7745c5c3_Err != nil {
381					return templ_7745c5c3_Err
382				}
383			}
384			if len(p.Files) == 0 {
385				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 39, "<p class=\"note\">no changed files")
386				if templ_7745c5c3_Err != nil {
387					return templ_7745c5c3_Err
388				}
389				var templ_7745c5c3_Var18 string
390				templ_7745c5c3_Var18, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
391				if templ_7745c5c3_Err != nil {
392					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 84, Col: 41}
393				}
394				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var18))
395				if templ_7745c5c3_Err != nil {
396					return templ_7745c5c3_Err
397				}
398				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, " ")
399				if templ_7745c5c3_Err != nil {
400					return templ_7745c5c3_Err
401				}
402				if p.Merge {
403					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, "against the first parent.")
404					if templ_7745c5c3_Err != nil {
405						return templ_7745c5c3_Err
406					}
407				} else {
408					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, "in this commit.")
409					if templ_7745c5c3_Err != nil {
410						return templ_7745c5c3_Err
411					}
412				}
413				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, "</p>")
414				if templ_7745c5c3_Err != nil {
415					return templ_7745c5c3_Err
416				}
417			}
418			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 44, "</div>")
419			if templ_7745c5c3_Err != nil {
420				return templ_7745c5c3_Err
421			}
422			return nil
423		})
424		templ_7745c5c3_Err = Shell(l, commitRail(p)).Render(templ.WithChildren(ctx, templ_7745c5c3_Var2), templ_7745c5c3_Buffer)
425		if templ_7745c5c3_Err != nil {
426			return templ_7745c5c3_Err
427		}
428		return nil
429	})
430}
431
432// viewLink is a button of the diff tools. It is a link, so that the split
433// layout works without JavaScript; with it, and when both layouts are in the
434// page, a click only flips the layout.
435func viewLink(p CommitPage, view, label, key, href string) templ.Component {
436	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
437		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
438		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
439			return templ_7745c5c3_CtxErr
440		}
441		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
442		if !templ_7745c5c3_IsBuffer {
443			defer func() {
444				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
445				if templ_7745c5c3_Err == nil {
446					templ_7745c5c3_Err = templ_7745c5c3_BufErr
447				}
448			}()
449		}
450		ctx = templ.InitializeContext(ctx)
451		templ_7745c5c3_Var19 := templ.GetChildren(ctx)
452		if templ_7745c5c3_Var19 == nil {
453			templ_7745c5c3_Var19 = templ.NopComponent
454		}
455		ctx = templ.ClearChildren(ctx)
456		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, "<a href=\"")
457		if templ_7745c5c3_Err != nil {
458			return templ_7745c5c3_Err
459		}
460		var templ_7745c5c3_Var20 templ.SafeURL
461		templ_7745c5c3_Var20, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(href))
462		if templ_7745c5c3_Err != nil {
463			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 101, Col: 28}
464		}
465		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var20))
466		if templ_7745c5c3_Err != nil {
467			return templ_7745c5c3_Err
468		}
469		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 46, "\" class=\"vbtn\" data-view=\"")
470		if templ_7745c5c3_Err != nil {
471			return templ_7745c5c3_Err
472		}
473		var templ_7745c5c3_Var21 string
474		templ_7745c5c3_Var21, templ_7745c5c3_Err = templ.ResolveAttributeValue(view)
475		if templ_7745c5c3_Err != nil {
476			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 103, Col: 18}
477		}
478		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var21)
479		if templ_7745c5c3_Err != nil {
480			return templ_7745c5c3_Err
481		}
482		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 47, "\" aria-keyshortcuts=\"")
483		if templ_7745c5c3_Err != nil {
484			return templ_7745c5c3_Err
485		}
486		var templ_7745c5c3_Var22 string
487		templ_7745c5c3_Var22, templ_7745c5c3_Err = templ.ResolveAttributeValue(key)
488		if templ_7745c5c3_Err != nil {
489			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 104, Col: 25}
490		}
491		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var22)
492		if templ_7745c5c3_Err != nil {
493			return templ_7745c5c3_Err
494		}
495		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 48, "\"")
496		if templ_7745c5c3_Err != nil {
497			return templ_7745c5c3_Err
498		}
499		if p.View == view {
500			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 49, " aria-current=\"true\"")
501			if templ_7745c5c3_Err != nil {
502				return templ_7745c5c3_Err
503			}
504		}
505		if p.Both {
506			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 50, " hx-on:click=\"event.preventDefault(); document.body.dispatchEvent(new CustomEvent('k-' + this.dataset.view))\" :aria-current=\"")
507			if templ_7745c5c3_Err != nil {
508				return templ_7745c5c3_Err
509			}
510			var templ_7745c5c3_Var23 string
511			templ_7745c5c3_Var23, templ_7745c5c3_Err = templ.ResolveAttributeValue("q('#diffs').attr['data-diff'] === '" + view + "' ? 'true' : false")
512			if templ_7745c5c3_Err != nil {
513				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 110, Col: 86}
514			}
515			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var23)
516			if templ_7745c5c3_Err != nil {
517				return templ_7745c5c3_Err
518			}
519			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 51, "\"")
520			if templ_7745c5c3_Err != nil {
521				return templ_7745c5c3_Err
522			}
523		}
524		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 52, ">")
525		if templ_7745c5c3_Err != nil {
526			return templ_7745c5c3_Err
527		}
528		var templ_7745c5c3_Var24 string
529		templ_7745c5c3_Var24, templ_7745c5c3_Err = templ.JoinStringErrs(label)
530		if templ_7745c5c3_Err != nil {
531			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 112, Col: 9}
532		}
533		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var24))
534		if templ_7745c5c3_Err != nil {
535			return templ_7745c5c3_Err
536		}
537		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 53, "</a>")
538		if templ_7745c5c3_Err != nil {
539			return templ_7745c5c3_Err
540		}
541		return nil
542	})
543}
544
545func personView(pr Person) templ.Component {
546	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
547		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
548		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
549			return templ_7745c5c3_CtxErr
550		}
551		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
552		if !templ_7745c5c3_IsBuffer {
553			defer func() {
554				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
555				if templ_7745c5c3_Err == nil {
556					templ_7745c5c3_Err = templ_7745c5c3_BufErr
557				}
558			}()
559		}
560		ctx = templ.InitializeContext(ctx)
561		templ_7745c5c3_Var25 := templ.GetChildren(ctx)
562		if templ_7745c5c3_Var25 == nil {
563			templ_7745c5c3_Var25 = templ.NopComponent
564		}
565		ctx = templ.ClearChildren(ctx)
566		var templ_7745c5c3_Var26 string
567		templ_7745c5c3_Var26, templ_7745c5c3_Err = templ.JoinStringErrs(pr.Name)
568		if templ_7745c5c3_Err != nil {
569			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 116, Col: 10}
570		}
571		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var26))
572		if templ_7745c5c3_Err != nil {
573			return templ_7745c5c3_Err
574		}
575		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 54, " ")
576		if templ_7745c5c3_Err != nil {
577			return templ_7745c5c3_Err
578		}
579		if pr.WhenAt != "" {
580			var templ_7745c5c3_Var27 string
581			templ_7745c5c3_Var27, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")
582			if templ_7745c5c3_Err != nil {
583				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 118, Col: 10}
584			}
585			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var27))
586			if templ_7745c5c3_Err != nil {
587				return templ_7745c5c3_Err
588			}
589			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 55, "<time datetime=\"")
590			if templ_7745c5c3_Err != nil {
591				return templ_7745c5c3_Err
592			}
593			var templ_7745c5c3_Var28 string
594			templ_7745c5c3_Var28, templ_7745c5c3_Err = templ.ResolveAttributeValue(pr.WhenAt)
595			if templ_7745c5c3_Err != nil {
596				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 118, Col: 38}
597			}
598			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var28)
599			if templ_7745c5c3_Err != nil {
600				return templ_7745c5c3_Err
601			}
602			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 56, "\" title=\"")
603			if templ_7745c5c3_Err != nil {
604				return templ_7745c5c3_Err
605			}
606			var templ_7745c5c3_Var29 string
607			templ_7745c5c3_Var29, templ_7745c5c3_Err = templ.ResolveAttributeValue(pr.Abs)
608			if templ_7745c5c3_Err != nil {
609				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 118, Col: 55}
610			}
611			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var29)
612			if templ_7745c5c3_Err != nil {
613				return templ_7745c5c3_Err
614			}
615			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 57, "\">")
616			if templ_7745c5c3_Err != nil {
617				return templ_7745c5c3_Err
618			}
619			var templ_7745c5c3_Var30 string
620			templ_7745c5c3_Var30, templ_7745c5c3_Err = templ.JoinStringErrs(pr.When)
621			if templ_7745c5c3_Err != nil {
622				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 118, Col: 67}
623			}
624			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var30))
625			if templ_7745c5c3_Err != nil {
626				return templ_7745c5c3_Err
627			}
628			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 58, "</time>")
629			if templ_7745c5c3_Err != nil {
630				return templ_7745c5c3_Err
631			}
632			var templ_7745c5c3_Var31 string
633			templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.JoinStringErrs(" · " + pr.Abs)
634			if templ_7745c5c3_Err != nil {
635				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 118, Col: 93}
636			}
637			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var31))
638			if templ_7745c5c3_Err != nil {
639				return templ_7745c5c3_Err
640			}
641		}
642		return nil
643	})
644}
645
646func commitRail(p CommitPage) templ.Component {
647	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
648		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
649		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
650			return templ_7745c5c3_CtxErr
651		}
652		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
653		if !templ_7745c5c3_IsBuffer {
654			defer func() {
655				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
656				if templ_7745c5c3_Err == nil {
657					templ_7745c5c3_Err = templ_7745c5c3_BufErr
658				}
659			}()
660		}
661		ctx = templ.InitializeContext(ctx)
662		templ_7745c5c3_Var32 := templ.GetChildren(ctx)
663		if templ_7745c5c3_Var32 == nil {
664			templ_7745c5c3_Var32 = templ.NopComponent
665		}
666		ctx = templ.ClearChildren(ctx)
667		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 59, "<section aria-labelledby=\"r-files\"><h2 id=\"r-files\">files <span>")
668		if templ_7745c5c3_Err != nil {
669			return templ_7745c5c3_Err
670		}
671		var templ_7745c5c3_Var33 string
672		templ_7745c5c3_Var33, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))
673		if templ_7745c5c3_Err != nil {
674			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 124, Col: 51}
675		}
676		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var33))
677		if templ_7745c5c3_Err != nil {
678			return templ_7745c5c3_Err
679		}
680		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 60, "</span></h2>")
681		if templ_7745c5c3_Err != nil {
682			return templ_7745c5c3_Err
683		}
684		templ_7745c5c3_Err = FileList(p.Files).Render(ctx, templ_7745c5c3_Buffer)
685		if templ_7745c5c3_Err != nil {
686			return templ_7745c5c3_Err
687		}
688		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 61, "</section>")
689		if templ_7745c5c3_Err != nil {
690			return templ_7745c5c3_Err
691		}
692		return nil
693	})
694}
695
696// FileList is the table of contents of a diff: status letter, path, +n -m
697// and an ASCII bar. The row of the file in view is marked.
698func FileList(files []DiffFile) templ.Component {
699	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
700		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
701		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
702			return templ_7745c5c3_CtxErr
703		}
704		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
705		if !templ_7745c5c3_IsBuffer {
706			defer func() {
707				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
708				if templ_7745c5c3_Err == nil {
709					templ_7745c5c3_Err = templ_7745c5c3_BufErr
710				}
711			}()
712		}
713		ctx = templ.InitializeContext(ctx)
714		templ_7745c5c3_Var34 := templ.GetChildren(ctx)
715		if templ_7745c5c3_Var34 == nil {
716			templ_7745c5c3_Var34 = templ.NopComponent
717		}
718		ctx = templ.ClearChildren(ctx)
719		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 62, "<ol class=\"files\" aria-label=\"Changed files\">")
720		if templ_7745c5c3_Err != nil {
721			return templ_7745c5c3_Err
722		}
723		for _, f := range files {
724			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 63, "<li><a href=\"")
725			if templ_7745c5c3_Err != nil {
726				return templ_7745c5c3_Err
727			}
728			var templ_7745c5c3_Var35 templ.SafeURL
729			templ_7745c5c3_Var35, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL("#" + f.ID))
730			if templ_7745c5c3_Err != nil {
731				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 136, Col: 37}
732			}
733			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var35))
734			if templ_7745c5c3_Err != nil {
735				return templ_7745c5c3_Err
736			}
737			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 64, "\" :aria-current=\"")
738			if templ_7745c5c3_Err != nil {
739				return templ_7745c5c3_Err
740			}
741			var templ_7745c5c3_Var36 string
742			templ_7745c5c3_Var36, templ_7745c5c3_Err = templ.ResolveAttributeValue("(() => { let all = q('.dfile').arr(); let cur = all.filter(f => f.getBoundingClientRect().top < innerHeight / 3).at(-1) || all[0]; return cur?.id === '" + f.ID + "' ? 'true' : false })()")
743			if templ_7745c5c3_Err != nil {
744				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 137, Col: 209}
745			}
746			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var36)
747			if templ_7745c5c3_Err != nil {
748				return templ_7745c5c3_Err
749			}
750			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 65, "\" hx-on:click=\"document.getElementById(this.hash.slice(1)).open = true\"><span class=\"st\" title=\"")
751			if templ_7745c5c3_Err != nil {
752				return templ_7745c5c3_Err
753			}
754			var templ_7745c5c3_Var37 string
755			templ_7745c5c3_Var37, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Status)
756			if templ_7745c5c3_Err != nil {
757				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 140, Col: 38}
758			}
759			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var37)
760			if templ_7745c5c3_Err != nil {
761				return templ_7745c5c3_Err
762			}
763			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 66, "\">")
764			if templ_7745c5c3_Err != nil {
765				return templ_7745c5c3_Err
766			}
767			var templ_7745c5c3_Var38 string
768			templ_7745c5c3_Var38, templ_7745c5c3_Err = templ.JoinStringErrs(f.Status)
769			if templ_7745c5c3_Err != nil {
770				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 140, Col: 51}
771			}
772			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var38))
773			if templ_7745c5c3_Err != nil {
774				return templ_7745c5c3_Err
775			}
776			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 67, "</span> <span class=\"p\" title=\"")
777			if templ_7745c5c3_Err != nil {
778				return templ_7745c5c3_Err
779			}
780			var templ_7745c5c3_Var39 string
781			templ_7745c5c3_Var39, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Path)
782			if templ_7745c5c3_Err != nil {
783				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 141, Col: 35}
784			}
785			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var39)
786			if templ_7745c5c3_Err != nil {
787				return templ_7745c5c3_Err
788			}
789			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 68, "\">")
790			if templ_7745c5c3_Err != nil {
791				return templ_7745c5c3_Err
792			}
793			var templ_7745c5c3_Var40 string
794			templ_7745c5c3_Var40, templ_7745c5c3_Err = templ.JoinStringErrs(f.Path)
795			if templ_7745c5c3_Err != nil {
796				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 141, Col: 46}
797			}
798			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var40))
799			if templ_7745c5c3_Err != nil {
800				return templ_7745c5c3_Err
801			}
802			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 69, "</span> <span class=\"n\"><span class=\"plus\">+")
803			if templ_7745c5c3_Err != nil {
804				return templ_7745c5c3_Err
805			}
806			var templ_7745c5c3_Var41 string
807			templ_7745c5c3_Var41, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.Add))
808			if templ_7745c5c3_Err != nil {
809				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 142, Col: 54}
810			}
811			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var41))
812			if templ_7745c5c3_Err != nil {
813				return templ_7745c5c3_Err
814			}
815			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 70, "</span> <span class=\"minus\">-")
816			if templ_7745c5c3_Err != nil {
817				return templ_7745c5c3_Err
818			}
819			var templ_7745c5c3_Var42 string
820			templ_7745c5c3_Var42, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.Del))
821			if templ_7745c5c3_Err != nil {
822				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 142, Col: 98}
823			}
824			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var42))
825			if templ_7745c5c3_Err != nil {
826				return templ_7745c5c3_Err
827			}
828			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 71, "</span></span> <span class=\"b\" aria-hidden=\"true\"><span class=\"plus\">")
829			if templ_7745c5c3_Err != nil {
830				return templ_7745c5c3_Err
831			}
832			var templ_7745c5c3_Var43 string
833			templ_7745c5c3_Var43, templ_7745c5c3_Err = templ.JoinStringErrs(f.Bar.Add)
834			if templ_7745c5c3_Err != nil {
835				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 143, Col: 70}
836			}
837			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var43))
838			if templ_7745c5c3_Err != nil {
839				return templ_7745c5c3_Err
840			}
841			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 72, "</span><span class=\"minus\">")
842			if templ_7745c5c3_Err != nil {
843				return templ_7745c5c3_Err
844			}
845			var templ_7745c5c3_Var44 string
846			templ_7745c5c3_Var44, templ_7745c5c3_Err = templ.JoinStringErrs(f.Bar.Del)
847			if templ_7745c5c3_Err != nil {
848				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 143, Col: 110}
849			}
850			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var44))
851			if templ_7745c5c3_Err != nil {
852				return templ_7745c5c3_Err
853			}
854			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 73, "</span>")
855			if templ_7745c5c3_Err != nil {
856				return templ_7745c5c3_Err
857			}
858			var templ_7745c5c3_Var45 string
859			templ_7745c5c3_Var45, templ_7745c5c3_Err = templ.JoinStringErrs(f.Bar.Rest)
860			if templ_7745c5c3_Err != nil {
861				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 143, Col: 131}
862			}
863			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var45))
864			if templ_7745c5c3_Err != nil {
865				return templ_7745c5c3_Err
866			}
867			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 74, "</span></a></li>")
868			if templ_7745c5c3_Err != nil {
869				return templ_7745c5c3_Err
870			}
871		}
872		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 75, "</ol>")
873		if templ_7745c5c3_Err != nil {
874			return templ_7745c5c3_Err
875		}
876		return nil
877	})
878}
879
880// DiffFileView is one file of the diff: a <details> (per-file collapse). The
881// unified and the split tables are both in it; #diffs[data-diff] shows one.
882// Every changed line keeps its +/- marker, so a change is never conveyed by
883// colour alone.
884func DiffFileView(f DiffFile, p CommitPage) templ.Component {
885	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
886		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
887		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
888			return templ_7745c5c3_CtxErr
889		}
890		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
891		if !templ_7745c5c3_IsBuffer {
892			defer func() {
893				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
894				if templ_7745c5c3_Err == nil {
895					templ_7745c5c3_Err = templ_7745c5c3_BufErr
896				}
897			}()
898		}
899		ctx = templ.InitializeContext(ctx)
900		templ_7745c5c3_Var46 := templ.GetChildren(ctx)
901		if templ_7745c5c3_Var46 == nil {
902			templ_7745c5c3_Var46 = templ.NopComponent
903		}
904		ctx = templ.ClearChildren(ctx)
905		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 76, "<details class=\"dfile\" id=\"")
906		if templ_7745c5c3_Err != nil {
907			return templ_7745c5c3_Err
908		}
909		var templ_7745c5c3_Var47 string
910		templ_7745c5c3_Var47, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.ID)
911		if templ_7745c5c3_Err != nil {
912			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 157, Col: 11}
913		}
914		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var47)
915		if templ_7745c5c3_Err != nil {
916			return templ_7745c5c3_Err
917		}
918		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 77, "\" data-file")
919		if templ_7745c5c3_Err != nil {
920			return templ_7745c5c3_Err
921		}
922		if f.Open {
923			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 78, " open")
924			if templ_7745c5c3_Err != nil {
925				return templ_7745c5c3_Err
926			}
927		}
928		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 79, "><summary><span class=\"st\">")
929		if templ_7745c5c3_Err != nil {
930			return templ_7745c5c3_Err
931		}
932		var templ_7745c5c3_Var48 string
933		templ_7745c5c3_Var48, templ_7745c5c3_Err = templ.JoinStringErrs(f.Status)
934		if templ_7745c5c3_Err != nil {
935			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 164, Col: 30}
936		}
937		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var48))
938		if templ_7745c5c3_Err != nil {
939			return templ_7745c5c3_Err
940		}
941		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 80, "</span>")
942		if templ_7745c5c3_Err != nil {
943			return templ_7745c5c3_Err
944		}
945		var templ_7745c5c3_Var49 string
946		templ_7745c5c3_Var49, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
947		if templ_7745c5c3_Err != nil {
948			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 164, Col: 44}
949		}
950		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var49))
951		if templ_7745c5c3_Err != nil {
952			return templ_7745c5c3_Err
953		}
954		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 81, "<span class=\"p\">")
955		if templ_7745c5c3_Err != nil {
956			return templ_7745c5c3_Err
957		}
958		var templ_7745c5c3_Var50 string
959		templ_7745c5c3_Var50, templ_7745c5c3_Err = templ.JoinStringErrs(f.Path)
960		if templ_7745c5c3_Err != nil {
961			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 164, Col: 70}
962		}
963		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var50))
964		if templ_7745c5c3_Err != nil {
965			return templ_7745c5c3_Err
966		}
967		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 82, "</span>")
968		if templ_7745c5c3_Err != nil {
969			return templ_7745c5c3_Err
970		}
971		var templ_7745c5c3_Var51 string
972		templ_7745c5c3_Var51, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
973		if templ_7745c5c3_Err != nil {
974			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 164, Col: 84}
975		}
976		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var51))
977		if templ_7745c5c3_Err != nil {
978			return templ_7745c5c3_Err
979		}
980		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 83, "<span class=\"plus\">+")
981		if templ_7745c5c3_Err != nil {
982			return templ_7745c5c3_Err
983		}
984		var templ_7745c5c3_Var52 string
985		templ_7745c5c3_Var52, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.Add))
986		if templ_7745c5c3_Err != nil {
987			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 164, Col: 119}
988		}
989		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var52))
990		if templ_7745c5c3_Err != nil {
991			return templ_7745c5c3_Err
992		}
993		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 84, "</span>")
994		if templ_7745c5c3_Err != nil {
995			return templ_7745c5c3_Err
996		}
997		var templ_7745c5c3_Var53 string
998		templ_7745c5c3_Var53, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
999		if templ_7745c5c3_Err != nil {
1000			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 164, Col: 133}
1001		}
1002		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var53))
1003		if templ_7745c5c3_Err != nil {
1004			return templ_7745c5c3_Err
1005		}
1006		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 85, "<span class=\"minus\">-")
1007		if templ_7745c5c3_Err != nil {
1008			return templ_7745c5c3_Err
1009		}
1010		var templ_7745c5c3_Var54 string
1011		templ_7745c5c3_Var54, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.Del))
1012		if templ_7745c5c3_Err != nil {
1013			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 164, Col: 169}
1014		}
1015		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var54))
1016		if templ_7745c5c3_Err != nil {
1017			return templ_7745c5c3_Err
1018		}
1019		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 86, "</span> ")
1020		if templ_7745c5c3_Err != nil {
1021			return templ_7745c5c3_Err
1022		}
1023		if f.Note != "" {
1024			var templ_7745c5c3_Var55 string
1025			templ_7745c5c3_Var55, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
1026			if templ_7745c5c3_Err != nil {
1027				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 166, Col: 9}
1028			}
1029			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var55))
1030			if templ_7745c5c3_Err != nil {
1031				return templ_7745c5c3_Err
1032			}
1033			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 87, "<span class=\"note\">")
1034			if templ_7745c5c3_Err != nil {
1035				return templ_7745c5c3_Err
1036			}
1037			var templ_7745c5c3_Var56 string
1038			templ_7745c5c3_Var56, templ_7745c5c3_Err = templ.JoinStringErrs(f.Note)
1039			if templ_7745c5c3_Err != nil {
1040				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 166, Col: 38}
1041			}
1042			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var56))
1043			if templ_7745c5c3_Err != nil {
1044				return templ_7745c5c3_Err
1045			}
1046			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 88, "</span>")
1047			if templ_7745c5c3_Err != nil {
1048				return templ_7745c5c3_Err
1049			}
1050		}
1051		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 89, "</summary> ")
1052		if templ_7745c5c3_Err != nil {
1053			return templ_7745c5c3_Err
1054		}
1055		if len(f.Hunks) > 0 {
1056			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 90, "<div class=\"dscroll\">")
1057			if templ_7745c5c3_Err != nil {
1058				return templ_7745c5c3_Err
1059			}
1060			if p.ShowUnified {
1061				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 91, "<table class=\"dt uni\" aria-label=\"")
1062				if templ_7745c5c3_Err != nil {
1063					return templ_7745c5c3_Err
1064				}
1065				var templ_7745c5c3_Var57 string
1066				templ_7745c5c3_Var57, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Path + ", unified")
1067				if templ_7745c5c3_Err != nil {
1068					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 172, Col: 60}
1069				}
1070				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var57)
1071				if templ_7745c5c3_Err != nil {
1072					return templ_7745c5c3_Err
1073				}
1074				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 92, "\">")
1075				if templ_7745c5c3_Err != nil {
1076					return templ_7745c5c3_Err
1077				}
1078				for _, h := range f.Hunks {
1079					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 93, "<tbody><tr class=\"hunk\"><td colspan=\"4\">")
1080					if templ_7745c5c3_Err != nil {
1081						return templ_7745c5c3_Err
1082					}
1083					var templ_7745c5c3_Var58 string
1084					templ_7745c5c3_Var58, templ_7745c5c3_Err = templ.JoinStringErrs(h.Header)
1085					if templ_7745c5c3_Err != nil {
1086						return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 175, Col: 51}
1087					}
1088					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var58))
1089					if templ_7745c5c3_Err != nil {
1090						return templ_7745c5c3_Err
1091					}
1092					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 94, "</td></tr>")
1093					if templ_7745c5c3_Err != nil {
1094						return templ_7745c5c3_Err
1095					}
1096					for _, ln := range h.Lines {
1097						var templ_7745c5c3_Var59 = []any{ln.Kind}
1098						templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var59...)
1099						if templ_7745c5c3_Err != nil {
1100							return templ_7745c5c3_Err
1101						}
1102						templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 95, "<tr class=\"")
1103						if templ_7745c5c3_Err != nil {
1104							return templ_7745c5c3_Err
1105						}
1106						var templ_7745c5c3_Var60 string
1107						templ_7745c5c3_Var60, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var59).String())
1108						if templ_7745c5c3_Err != nil {
1109							return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}
1110						}
1111						_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var60)
1112						if templ_7745c5c3_Err != nil {
1113							return templ_7745c5c3_Err
1114						}
1115						templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 96, "\"><td class=\"ln\">")
1116						if templ_7745c5c3_Err != nil {
1117							return templ_7745c5c3_Err
1118						}
1119						var templ_7745c5c3_Var61 string
1120						templ_7745c5c3_Var61, templ_7745c5c3_Err = templ.JoinStringErrs(ln.Old)
1121						if templ_7745c5c3_Err != nil {
1122							return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 178, Col: 33}
1123						}
1124						_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var61))
1125						if templ_7745c5c3_Err != nil {
1126							return templ_7745c5c3_Err
1127						}
1128						templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 97, "</td><td class=\"ln\">")
1129						if templ_7745c5c3_Err != nil {
1130							return templ_7745c5c3_Err
1131						}
1132						var templ_7745c5c3_Var62 string
1133						templ_7745c5c3_Var62, templ_7745c5c3_Err = templ.JoinStringErrs(ln.New)
1134						if templ_7745c5c3_Err != nil {
1135							return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 179, Col: 33}
1136						}
1137						_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var62))
1138						if templ_7745c5c3_Err != nil {
1139							return templ_7745c5c3_Err
1140						}
1141						templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 98, "</td><td class=\"m\">")
1142						if templ_7745c5c3_Err != nil {
1143							return templ_7745c5c3_Err
1144						}
1145						var templ_7745c5c3_Var63 string
1146						templ_7745c5c3_Var63, templ_7745c5c3_Err = templ.JoinStringErrs(ln.Mark)
1147						if templ_7745c5c3_Err != nil {
1148							return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 180, Col: 33}
1149						}
1150						_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var63))
1151						if templ_7745c5c3_Err != nil {
1152							return templ_7745c5c3_Err
1153						}
1154						templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 99, "</td><td class=\"tx\">")
1155						if templ_7745c5c3_Err != nil {
1156							return templ_7745c5c3_Err
1157						}
1158						templ_7745c5c3_Err = codeLine(ln).Render(ctx, templ_7745c5c3_Buffer)
1159						if templ_7745c5c3_Err != nil {
1160							return templ_7745c5c3_Err
1161						}
1162						templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 100, "</td></tr>")
1163						if templ_7745c5c3_Err != nil {
1164							return templ_7745c5c3_Err
1165						}
1166					}
1167					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 101, "</tbody>")
1168					if templ_7745c5c3_Err != nil {
1169						return templ_7745c5c3_Err
1170					}
1171				}
1172				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 102, "</table>")
1173				if templ_7745c5c3_Err != nil {
1174					return templ_7745c5c3_Err
1175				}
1176			}
1177			if p.ShowSplit {
1178				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 103, "<table class=\"dt spl\" aria-label=\"")
1179				if templ_7745c5c3_Err != nil {
1180					return templ_7745c5c3_Err
1181				}
1182				var templ_7745c5c3_Var64 string
1183				templ_7745c5c3_Var64, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Path + ", split")
1184				if templ_7745c5c3_Err != nil {
1185					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 189, Col: 58}
1186				}
1187				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var64)
1188				if templ_7745c5c3_Err != nil {
1189					return templ_7745c5c3_Err
1190				}
1191				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 104, "\">")
1192				if templ_7745c5c3_Err != nil {
1193					return templ_7745c5c3_Err
1194				}
1195				for _, h := range f.Hunks {
1196					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 105, "<tbody><tr class=\"hunk\"><td colspan=\"6\">")
1197					if templ_7745c5c3_Err != nil {
1198						return templ_7745c5c3_Err
1199					}
1200					var templ_7745c5c3_Var65 string
1201					templ_7745c5c3_Var65, templ_7745c5c3_Err = templ.JoinStringErrs(h.Header)
1202					if templ_7745c5c3_Err != nil {
1203						return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 192, Col: 51}
1204					}
1205					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var65))
1206					if templ_7745c5c3_Err != nil {
1207						return templ_7745c5c3_Err
1208					}
1209					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 106, "</td></tr>")
1210					if templ_7745c5c3_Err != nil {
1211						return templ_7745c5c3_Err
1212					}
1213					for _, row := range h.Split {
1214						templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 107, "<tr>")
1215						if templ_7745c5c3_Err != nil {
1216							return templ_7745c5c3_Err
1217						}
1218						templ_7745c5c3_Err = splitSide(row.L, true).Render(ctx, templ_7745c5c3_Buffer)
1219						if templ_7745c5c3_Err != nil {
1220							return templ_7745c5c3_Err
1221						}
1222						templ_7745c5c3_Err = splitSide(row.R, false).Render(ctx, templ_7745c5c3_Buffer)
1223						if templ_7745c5c3_Err != nil {
1224							return templ_7745c5c3_Err
1225						}
1226						templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 108, "</tr>")
1227						if templ_7745c5c3_Err != nil {
1228							return templ_7745c5c3_Err
1229						}
1230					}
1231					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 109, "</tbody>")
1232					if templ_7745c5c3_Err != nil {
1233						return templ_7745c5c3_Err
1234					}
1235				}
1236				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 110, "</table>")
1237				if templ_7745c5c3_Err != nil {
1238					return templ_7745c5c3_Err
1239				}
1240			}
1241			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 111, "</div>")
1242			if templ_7745c5c3_Err != nil {
1243				return templ_7745c5c3_Err
1244			}
1245		} else {
1246			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 112, "<p class=\"note pad\">")
1247			if templ_7745c5c3_Err != nil {
1248				return templ_7745c5c3_Err
1249			}
1250			if f.Note != "" {
1251				var templ_7745c5c3_Var66 string
1252				templ_7745c5c3_Var66, templ_7745c5c3_Err = templ.JoinStringErrs(f.Note)
1253				if templ_7745c5c3_Err != nil {
1254					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 207, Col: 13}
1255				}
1256				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var66))
1257				if templ_7745c5c3_Err != nil {
1258					return templ_7745c5c3_Err
1259				}
1260			} else {
1261				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 113, "no textual change.")
1262				if templ_7745c5c3_Err != nil {
1263					return templ_7745c5c3_Err
1264				}
1265			}
1266			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 114, "</p>")
1267			if templ_7745c5c3_Err != nil {
1268				return templ_7745c5c3_Err
1269			}
1270		}
1271		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 115, "</details>")
1272		if templ_7745c5c3_Err != nil {
1273			return templ_7745c5c3_Err
1274		}
1275		return nil
1276	})
1277}
1278
1279// splitSide is one half of a row of the split view; a side without a line is
1280// an empty cell.
1281func splitSide(ln *DiffLine, old bool) templ.Component {
1282	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1283		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
1284		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
1285			return templ_7745c5c3_CtxErr
1286		}
1287		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1288		if !templ_7745c5c3_IsBuffer {
1289			defer func() {
1290				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
1291				if templ_7745c5c3_Err == nil {
1292					templ_7745c5c3_Err = templ_7745c5c3_BufErr
1293				}
1294			}()
1295		}
1296		ctx = templ.InitializeContext(ctx)
1297		templ_7745c5c3_Var67 := templ.GetChildren(ctx)
1298		if templ_7745c5c3_Var67 == nil {
1299			templ_7745c5c3_Var67 = templ.NopComponent
1300		}
1301		ctx = templ.ClearChildren(ctx)
1302		if ln == nil {
1303			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 116, "<td class=\"ln none\"></td><td class=\"m none\"></td><td class=\"tx none\"></td>")
1304			if templ_7745c5c3_Err != nil {
1305				return templ_7745c5c3_Err
1306			}
1307		} else {
1308			var templ_7745c5c3_Var68 = []any{"ln", ln.Kind}
1309			templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var68...)
1310			if templ_7745c5c3_Err != nil {
1311				return templ_7745c5c3_Err
1312			}
1313			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 117, "<td class=\"")
1314			if templ_7745c5c3_Err != nil {
1315				return templ_7745c5c3_Err
1316			}
1317			var templ_7745c5c3_Var69 string
1318			templ_7745c5c3_Var69, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var68).String())
1319			if templ_7745c5c3_Err != nil {
1320				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}
1321			}
1322			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var69)
1323			if templ_7745c5c3_Err != nil {
1324				return templ_7745c5c3_Err
1325			}
1326			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 118, "\">")
1327			if templ_7745c5c3_Err != nil {
1328				return templ_7745c5c3_Err
1329			}
1330			if old {
1331				var templ_7745c5c3_Var70 string
1332				templ_7745c5c3_Var70, templ_7745c5c3_Err = templ.JoinStringErrs(ln.Old)
1333				if templ_7745c5c3_Err != nil {
1334					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 226, Col: 12}
1335				}
1336				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var70))
1337				if templ_7745c5c3_Err != nil {
1338					return templ_7745c5c3_Err
1339				}
1340			} else {
1341				var templ_7745c5c3_Var71 string
1342				templ_7745c5c3_Var71, templ_7745c5c3_Err = templ.JoinStringErrs(ln.New)
1343				if templ_7745c5c3_Err != nil {
1344					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 228, Col: 12}
1345				}
1346				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var71))
1347				if templ_7745c5c3_Err != nil {
1348					return templ_7745c5c3_Err
1349				}
1350			}
1351			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 119, "</td>")
1352			if templ_7745c5c3_Err != nil {
1353				return templ_7745c5c3_Err
1354			}
1355			var templ_7745c5c3_Var72 = []any{"m", ln.Kind}
1356			templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var72...)
1357			if templ_7745c5c3_Err != nil {
1358				return templ_7745c5c3_Err
1359			}
1360			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 120, "<td class=\"")
1361			if templ_7745c5c3_Err != nil {
1362				return templ_7745c5c3_Err
1363			}
1364			var templ_7745c5c3_Var73 string
1365			templ_7745c5c3_Var73, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var72).String())
1366			if templ_7745c5c3_Err != nil {
1367				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}
1368			}
1369			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var73)
1370			if templ_7745c5c3_Err != nil {
1371				return templ_7745c5c3_Err
1372			}
1373			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 121, "\">")
1374			if templ_7745c5c3_Err != nil {
1375				return templ_7745c5c3_Err
1376			}
1377			var templ_7745c5c3_Var74 string
1378			templ_7745c5c3_Var74, templ_7745c5c3_Err = templ.JoinStringErrs(ln.Mark)
1379			if templ_7745c5c3_Err != nil {
1380				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 231, Col: 38}
1381			}
1382			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var74))
1383			if templ_7745c5c3_Err != nil {
1384				return templ_7745c5c3_Err
1385			}
1386			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 122, "</td>")
1387			if templ_7745c5c3_Err != nil {
1388				return templ_7745c5c3_Err
1389			}
1390			var templ_7745c5c3_Var75 = []any{"tx", ln.Kind}
1391			templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var75...)
1392			if templ_7745c5c3_Err != nil {
1393				return templ_7745c5c3_Err
1394			}
1395			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 123, "<td class=\"")
1396			if templ_7745c5c3_Err != nil {
1397				return templ_7745c5c3_Err
1398			}
1399			var templ_7745c5c3_Var76 string
1400			templ_7745c5c3_Var76, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var75).String())
1401			if templ_7745c5c3_Err != nil {
1402				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}
1403			}
1404			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var76)
1405			if templ_7745c5c3_Err != nil {
1406				return templ_7745c5c3_Err
1407			}
1408			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 124, "\">")
1409			if templ_7745c5c3_Err != nil {
1410				return templ_7745c5c3_Err
1411			}
1412			templ_7745c5c3_Err = codeLine(*ln).Render(ctx, templ_7745c5c3_Buffer)
1413			if templ_7745c5c3_Err != nil {
1414				return templ_7745c5c3_Err
1415			}
1416			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 125, "</td>")
1417			if templ_7745c5c3_Err != nil {
1418				return templ_7745c5c3_Err
1419			}
1420		}
1421		return nil
1422	})
1423}
1424
1425var _ = templruntime.GeneratedTemplate

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 2

Tags 45

↑↓ moveenter openesc close