v0.32.0 53e25a3

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 p.Sig != nil {
206				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 19, "<dt>signature</dt><dd>")
207				if templ_7745c5c3_Err != nil {
208					return templ_7745c5c3_Err
209				}
210				templ_7745c5c3_Err = signaturePill(p.Sig).Render(ctx, templ_7745c5c3_Buffer)
211				if templ_7745c5c3_Err != nil {
212					return templ_7745c5c3_Err
213				}
214				if p.Verification.Fingerprint != "" {
215					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, "<code>")
216					if templ_7745c5c3_Err != nil {
217						return templ_7745c5c3_Err
218					}
219					var templ_7745c5c3_Var10 string
220					templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.JoinStringErrs(p.Verification.Fingerprint)
221					if templ_7745c5c3_Err != nil {
222						return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 48, Col: 41}
223					}
224					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var10))
225					if templ_7745c5c3_Err != nil {
226						return templ_7745c5c3_Err
227					}
228					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "</code> ")
229					if templ_7745c5c3_Err != nil {
230						return templ_7745c5c3_Err
231					}
232				}
233				if p.Verification.KeyTitle != "" {
234					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "<span class=\"dim\">")
235					if templ_7745c5c3_Err != nil {
236						return templ_7745c5c3_Err
237					}
238					var templ_7745c5c3_Var11 string
239					templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs("· " + visibleText(p.Verification.KeyTitle))
240					if templ_7745c5c3_Err != nil {
241						return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 51, Col: 71}
242					}
243					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11))
244					if templ_7745c5c3_Err != nil {
245						return templ_7745c5c3_Err
246					}
247					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 23, "</span> ")
248					if templ_7745c5c3_Err != nil {
249						return templ_7745c5c3_Err
250					}
251				}
252				if p.Sig.Class != "sig-none" {
253					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, "<span class=\"sig-why dim\">")
254					if templ_7745c5c3_Err != nil {
255						return templ_7745c5c3_Err
256					}
257					var templ_7745c5c3_Var12 string
258					templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.JoinStringErrs(p.Sig.Reason)
259					if templ_7745c5c3_Err != nil {
260						return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 54, Col: 47}
261					}
262					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var12))
263					if templ_7745c5c3_Err != nil {
264						return templ_7745c5c3_Err
265					}
266					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 25, "</span>")
267					if templ_7745c5c3_Err != nil {
268						return templ_7745c5c3_Err
269					}
270				}
271				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 26, "</dd>")
272				if templ_7745c5c3_Err != nil {
273					return templ_7745c5c3_Err
274				}
275			}
276			if p.Checks.Total > 0 {
277				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 27, "<dt>checks</dt><dd>")
278				if templ_7745c5c3_Err != nil {
279					return templ_7745c5c3_Err
280				}
281				templ_7745c5c3_Err = CommitChecks(p.Checks).Render(ctx, templ_7745c5c3_Buffer)
282				if templ_7745c5c3_Err != nil {
283					return templ_7745c5c3_Err
284				}
285				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 28, "</dd>")
286				if templ_7745c5c3_Err != nil {
287					return templ_7745c5c3_Err
288				}
289			}
290			if len(p.Refs) > 0 {
291				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 29, "<dt>refs</dt><dd>")
292				if templ_7745c5c3_Err != nil {
293					return templ_7745c5c3_Err
294				}
295				for _, r := range p.Refs {
296					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 30, "<span class=\"pill\">")
297					if templ_7745c5c3_Err != nil {
298						return templ_7745c5c3_Err
299					}
300					var templ_7745c5c3_Var13 string
301					templ_7745c5c3_Var13, templ_7745c5c3_Err = templ.JoinStringErrs(r)
302					if templ_7745c5c3_Err != nil {
303						return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 66, Col: 29}
304					}
305					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var13))
306					if templ_7745c5c3_Err != nil {
307						return templ_7745c5c3_Err
308					}
309					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 31, "</span>")
310					if templ_7745c5c3_Err != nil {
311						return templ_7745c5c3_Err
312					}
313				}
314				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 32, "</dd>")
315				if templ_7745c5c3_Err != nil {
316					return templ_7745c5c3_Err
317				}
318			}
319			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 33, "</dl></header><div class=\"diff-tools\" role=\"group\" aria-label=\"Diff view\"><span class=\"dim\">")
320			if templ_7745c5c3_Err != nil {
321				return templ_7745c5c3_Err
322			}
323			var templ_7745c5c3_Var14 string
324			templ_7745c5c3_Var14, templ_7745c5c3_Err = templ.JoinStringErrs(plural(p.NFiles, "file", "files"))
325			if templ_7745c5c3_Err != nil {
326				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 73, Col: 56}
327			}
328			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var14))
329			if templ_7745c5c3_Err != nil {
330				return templ_7745c5c3_Err
331			}
332			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 34, " · <span class=\"plus\">+")
333			if templ_7745c5c3_Err != nil {
334				return templ_7745c5c3_Err
335			}
336			var templ_7745c5c3_Var15 string
337			templ_7745c5c3_Var15, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Adds))
338			if templ_7745c5c3_Err != nil {
339				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 73, Col: 96}
340			}
341			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var15))
342			if templ_7745c5c3_Err != nil {
343				return templ_7745c5c3_Err
344			}
345			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 35, "</span> <span class=\"minus\">-")
346			if templ_7745c5c3_Err != nil {
347				return templ_7745c5c3_Err
348			}
349			var templ_7745c5c3_Var16 string
350			templ_7745c5c3_Var16, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Dels))
351			if templ_7745c5c3_Err != nil {
352				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 73, Col: 141}
353			}
354			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var16))
355			if templ_7745c5c3_Err != nil {
356				return templ_7745c5c3_Err
357			}
358			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 36, "</span></span> <span class=\"grow\"></span>")
359			if templ_7745c5c3_Err != nil {
360				return templ_7745c5c3_Err
361			}
362			templ_7745c5c3_Err = diffViewMenu(p.DiffView).Render(ctx, templ_7745c5c3_Buffer)
363			if templ_7745c5c3_Err != nil {
364				return templ_7745c5c3_Err
365			}
366			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 37, "</div>")
367			if templ_7745c5c3_Err != nil {
368				return templ_7745c5c3_Err
369			}
370			if p.Invisible {
371				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 38, "<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>")
372				if templ_7745c5c3_Err != nil {
373					return templ_7745c5c3_Err
374				}
375			}
376			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 39, " ")
377			if templ_7745c5c3_Err != nil {
378				return templ_7745c5c3_Err
379			}
380			if p.Note != "" {
381				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, "<p class=\"notice\">")
382				if templ_7745c5c3_Err != nil {
383					return templ_7745c5c3_Err
384				}
385				var templ_7745c5c3_Var17 string
386				templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.JoinStringErrs(p.Note)
387				if templ_7745c5c3_Err != nil {
388					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 84, Col: 29}
389				}
390				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var17))
391				if templ_7745c5c3_Err != nil {
392					return templ_7745c5c3_Err
393				}
394				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, "</p>")
395				if templ_7745c5c3_Err != nil {
396					return templ_7745c5c3_Err
397				}
398			}
399			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, " <div id=\"diffs\"")
400			if templ_7745c5c3_Err != nil {
401				return templ_7745c5c3_Err
402			}
403			if p.Both {
404				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, " data-diff=\"")
405				if templ_7745c5c3_Err != nil {
406					return templ_7745c5c3_Err
407				}
408				var templ_7745c5c3_Var18 string
409				templ_7745c5c3_Var18, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
410				if templ_7745c5c3_Err != nil {
411					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 89, Col: 22}
412				}
413				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var18)
414				if templ_7745c5c3_Err != nil {
415					return templ_7745c5c3_Err
416				}
417				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 44, "\"")
418				if templ_7745c5c3_Err != nil {
419					return templ_7745c5c3_Err
420				}
421			} else {
422				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, " data-view=\"")
423				if templ_7745c5c3_Err != nil {
424					return templ_7745c5c3_Err
425				}
426				var templ_7745c5c3_Var19 string
427				templ_7745c5c3_Var19, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
428				if templ_7745c5c3_Err != nil {
429					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 91, Col: 22}
430				}
431				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var19)
432				if templ_7745c5c3_Err != nil {
433					return templ_7745c5c3_Err
434				}
435				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 46, "\"")
436				if templ_7745c5c3_Err != nil {
437					return templ_7745c5c3_Err
438				}
439			}
440			if p.Both && !p.Pinned {
441				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 47, " hx-live=\"this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff\"")
442				if templ_7745c5c3_Err != nil {
443					return templ_7745c5c3_Err
444				}
445			}
446			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 48, ">")
447			if templ_7745c5c3_Err != nil {
448				return templ_7745c5c3_Err
449			}
450			for _, f := range p.Files {
451				templ_7745c5c3_Err = DiffFileView(f, p.DiffView).Render(ctx, templ_7745c5c3_Buffer)
452				if templ_7745c5c3_Err != nil {
453					return templ_7745c5c3_Err
454				}
455			}
456			if len(p.Files) == 0 {
457				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 49, "<p class=\"note\">no changed files")
458				if templ_7745c5c3_Err != nil {
459					return templ_7745c5c3_Err
460				}
461				var templ_7745c5c3_Var20 string
462				templ_7745c5c3_Var20, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
463				if templ_7745c5c3_Err != nil {
464					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 101, Col: 41}
465				}
466				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var20))
467				if templ_7745c5c3_Err != nil {
468					return templ_7745c5c3_Err
469				}
470				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 50, " ")
471				if templ_7745c5c3_Err != nil {
472					return templ_7745c5c3_Err
473				}
474				if p.Merge {
475					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 51, "against the first parent.")
476					if templ_7745c5c3_Err != nil {
477						return templ_7745c5c3_Err
478					}
479				} else {
480					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 52, "in this commit.")
481					if templ_7745c5c3_Err != nil {
482						return templ_7745c5c3_Err
483					}
484				}
485				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 53, "</p>")
486				if templ_7745c5c3_Err != nil {
487					return templ_7745c5c3_Err
488				}
489			}
490			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 54, "</div>")
491			if templ_7745c5c3_Err != nil {
492				return templ_7745c5c3_Err
493			}
494			return nil
495		})
496		templ_7745c5c3_Err = Shell(l, commitRail(p)).Render(templ.WithChildren(ctx, templ_7745c5c3_Var2), templ_7745c5c3_Buffer)
497		if templ_7745c5c3_Err != nil {
498			return templ_7745c5c3_Err
499		}
500		return nil
501	})
502}
503
504// diffViewMenu is the layout of the diff (unified, the default, or split) and
505// the fold of its files, in one menu: a <details> that works without scripts;
506// u, d and x still act without opening it. Its button names the layout shown.
507func diffViewMenu(p DiffView) templ.Component {
508	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
509		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
510		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
511			return templ_7745c5c3_CtxErr
512		}
513		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
514		if !templ_7745c5c3_IsBuffer {
515			defer func() {
516				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
517				if templ_7745c5c3_Err == nil {
518					templ_7745c5c3_Err = templ_7745c5c3_BufErr
519				}
520			}()
521		}
522		ctx = templ.InitializeContext(ctx)
523		templ_7745c5c3_Var21 := templ.GetChildren(ctx)
524		if templ_7745c5c3_Var21 == nil {
525			templ_7745c5c3_Var21 = templ.NopComponent
526		}
527		ctx = templ.ClearChildren(ctx)
528		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 55, "<details class=\"menu vmenu\"><summary class=\"btn\" aria-label=\"Diff view\">")
529		if templ_7745c5c3_Err != nil {
530			return templ_7745c5c3_Err
531		}
532		if p.Both {
533			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 56, "<span hx-live=\"this.textContent = q('#diffs').attr['data-mobile'] !== 'true' && q('#diffs').attr['data-diff'] === 'split' ? 'Split' : 'Unified'\">")
534			if templ_7745c5c3_Err != nil {
535				return templ_7745c5c3_Err
536			}
537			var templ_7745c5c3_Var22 string
538			templ_7745c5c3_Var22, templ_7745c5c3_Err = templ.JoinStringErrs(viewLabel(p.View))
539			if templ_7745c5c3_Err != nil {
540				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 120, Col: 168}
541			}
542			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var22))
543			if templ_7745c5c3_Err != nil {
544				return templ_7745c5c3_Err
545			}
546			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 57, "</span>")
547			if templ_7745c5c3_Err != nil {
548				return templ_7745c5c3_Err
549			}
550		} else {
551			var templ_7745c5c3_Var23 string
552			templ_7745c5c3_Var23, templ_7745c5c3_Err = templ.JoinStringErrs(viewLabel(p.View))
553			if templ_7745c5c3_Err != nil {
554				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 122, Col: 23}
555			}
556			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var23))
557			if templ_7745c5c3_Err != nil {
558				return templ_7745c5c3_Err
559			}
560		}
561		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 58, "</summary><div class=\"menu-pop\" role=\"group\" aria-label=\"Diff view\">")
562		if templ_7745c5c3_Err != nil {
563			return templ_7745c5c3_Err
564		}
565		templ_7745c5c3_Err = viewLink(p, "unified", "Unified", "u", p.UnifiedHref).Render(ctx, templ_7745c5c3_Buffer)
566		if templ_7745c5c3_Err != nil {
567			return templ_7745c5c3_Err
568		}
569		templ_7745c5c3_Err = viewLink(p, "split", "Split", "d", p.SplitHref).Render(ctx, templ_7745c5c3_Buffer)
570		if templ_7745c5c3_Err != nil {
571			return templ_7745c5c3_Err
572		}
573		templ_7745c5c3_Err = collapseButton().Render(ctx, templ_7745c5c3_Buffer)
574		if templ_7745c5c3_Err != nil {
575			return templ_7745c5c3_Err
576		}
577		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 59, "</div></details>")
578		if templ_7745c5c3_Err != nil {
579			return templ_7745c5c3_Err
580		}
581		return nil
582	})
583}
584
585// viewLink is a button of the diff tools. It is a link, so that the split
586// layout works without JavaScript; with it, and when both layouts are in the
587// page, a click only flips the layout.
588func viewLink(p DiffView, view, label, key, href string) templ.Component {
589	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
590		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
591		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
592			return templ_7745c5c3_CtxErr
593		}
594		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
595		if !templ_7745c5c3_IsBuffer {
596			defer func() {
597				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
598				if templ_7745c5c3_Err == nil {
599					templ_7745c5c3_Err = templ_7745c5c3_BufErr
600				}
601			}()
602		}
603		ctx = templ.InitializeContext(ctx)
604		templ_7745c5c3_Var24 := templ.GetChildren(ctx)
605		if templ_7745c5c3_Var24 == nil {
606			templ_7745c5c3_Var24 = templ.NopComponent
607		}
608		ctx = templ.ClearChildren(ctx)
609		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 60, "<a href=\"")
610		if templ_7745c5c3_Err != nil {
611			return templ_7745c5c3_Err
612		}
613		var templ_7745c5c3_Var25 templ.SafeURL
614		templ_7745c5c3_Var25, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(href))
615		if templ_7745c5c3_Err != nil {
616			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 138, Col: 28}
617		}
618		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var25))
619		if templ_7745c5c3_Err != nil {
620			return templ_7745c5c3_Err
621		}
622		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 61, "\" class=\"btn vbtn\" data-view=\"")
623		if templ_7745c5c3_Err != nil {
624			return templ_7745c5c3_Err
625		}
626		var templ_7745c5c3_Var26 string
627		templ_7745c5c3_Var26, templ_7745c5c3_Err = templ.ResolveAttributeValue(view)
628		if templ_7745c5c3_Err != nil {
629			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 140, Col: 18}
630		}
631		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var26)
632		if templ_7745c5c3_Err != nil {
633			return templ_7745c5c3_Err
634		}
635		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 62, "\" aria-keyshortcuts=\"")
636		if templ_7745c5c3_Err != nil {
637			return templ_7745c5c3_Err
638		}
639		var templ_7745c5c3_Var27 string
640		templ_7745c5c3_Var27, templ_7745c5c3_Err = templ.ResolveAttributeValue(key)
641		if templ_7745c5c3_Err != nil {
642			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 141, Col: 25}
643		}
644		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var27)
645		if templ_7745c5c3_Err != nil {
646			return templ_7745c5c3_Err
647		}
648		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 63, "\"")
649		if templ_7745c5c3_Err != nil {
650			return templ_7745c5c3_Err
651		}
652		if view == "split" {
653			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 64, " :aria-disabled=\"q('#diffs').attr['data-mobile'] === 'true' ? 'true' : false\" :title=\"q('#diffs').attr['data-mobile'] === 'true' ? 'Split view requires a wider screen' : 'Split view'\"")
654			if templ_7745c5c3_Err != nil {
655				return templ_7745c5c3_Err
656			}
657		}
658		if p.View == view {
659			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 65, " aria-current=\"true\"")
660			if templ_7745c5c3_Err != nil {
661				return templ_7745c5c3_Err
662			}
663		}
664		if p.Both {
665			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 66, " data-fire=\"")
666			if templ_7745c5c3_Err != nil {
667				return templ_7745c5c3_Err
668			}
669			var templ_7745c5c3_Var28 string
670			templ_7745c5c3_Var28, templ_7745c5c3_Err = templ.ResolveAttributeValue(view)
671			if templ_7745c5c3_Err != nil {
672				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 150, Col: 19}
673			}
674			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var28)
675			if templ_7745c5c3_Err != nil {
676				return templ_7745c5c3_Err
677			}
678			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 67, "\" :aria-current=\"(q('#diffs').attr['data-mobile'] === 'true' ? 'unified' : q('#diffs').attr['data-diff']) === this.dataset.view ? 'true' : false\"")
679			if templ_7745c5c3_Err != nil {
680				return templ_7745c5c3_Err
681			}
682		}
683		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 68, ">")
684		if templ_7745c5c3_Err != nil {
685			return templ_7745c5c3_Err
686		}
687		var templ_7745c5c3_Var29 string
688		templ_7745c5c3_Var29, templ_7745c5c3_Err = templ.JoinStringErrs(label)
689		if templ_7745c5c3_Err != nil {
690			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 153, Col: 9}
691		}
692		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var29))
693		if templ_7745c5c3_Err != nil {
694			return templ_7745c5c3_Err
695		}
696		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 69, "<kbd aria-hidden=\"true\">")
697		if templ_7745c5c3_Err != nil {
698			return templ_7745c5c3_Err
699		}
700		var templ_7745c5c3_Var30 string
701		templ_7745c5c3_Var30, templ_7745c5c3_Err = templ.JoinStringErrs(key)
702		if templ_7745c5c3_Err != nil {
703			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 153, Col: 40}
704		}
705		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var30))
706		if templ_7745c5c3_Err != nil {
707			return templ_7745c5c3_Err
708		}
709		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 70, "</kbd></a>")
710		if templ_7745c5c3_Err != nil {
711			return templ_7745c5c3_Err
712		}
713		return nil
714	})
715}
716
717// collapseButton folds every file of the diff, or opens them all again when
718// none is open; its label follows the state.
719func collapseButton() templ.Component {
720	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
721		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
722		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
723			return templ_7745c5c3_CtxErr
724		}
725		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
726		if !templ_7745c5c3_IsBuffer {
727			defer func() {
728				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
729				if templ_7745c5c3_Err == nil {
730					templ_7745c5c3_Err = templ_7745c5c3_BufErr
731				}
732			}()
733		}
734		ctx = templ.InitializeContext(ctx)
735		templ_7745c5c3_Var31 := templ.GetChildren(ctx)
736		if templ_7745c5c3_Var31 == nil {
737			templ_7745c5c3_Var31 = templ.NopComponent
738		}
739		ctx = templ.ClearChildren(ctx)
740		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 71, "<button type=\"button\" aria-keyshortcuts=\"x\" data-js data-fire=\"collapse\" class=\"btn\"><span hx-live=\"this.textContent = q('[data-file][open]').count || !q('[data-file]').count ? 'Collapse all' : 'Expand all'\">Collapse all</span><kbd aria-hidden=\"true\">x</kbd></button>")
741		if templ_7745c5c3_Err != nil {
742			return templ_7745c5c3_Err
743		}
744		return nil
745	})
746}
747
748func personView(pr Person) templ.Component {
749	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
750		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
751		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
752			return templ_7745c5c3_CtxErr
753		}
754		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
755		if !templ_7745c5c3_IsBuffer {
756			defer func() {
757				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
758				if templ_7745c5c3_Err == nil {
759					templ_7745c5c3_Err = templ_7745c5c3_BufErr
760				}
761			}()
762		}
763		ctx = templ.InitializeContext(ctx)
764		templ_7745c5c3_Var32 := templ.GetChildren(ctx)
765		if templ_7745c5c3_Var32 == nil {
766			templ_7745c5c3_Var32 = templ.NopComponent
767		}
768		ctx = templ.ClearChildren(ctx)
769		var templ_7745c5c3_Var33 string
770		templ_7745c5c3_Var33, templ_7745c5c3_Err = templ.JoinStringErrs(pr.Name)
771		if templ_7745c5c3_Err != nil {
772			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 165, Col: 10}
773		}
774		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var33))
775		if templ_7745c5c3_Err != nil {
776			return templ_7745c5c3_Err
777		}
778		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 72, " ")
779		if templ_7745c5c3_Err != nil {
780			return templ_7745c5c3_Err
781		}
782		if pr.WhenAt != "" {
783			var templ_7745c5c3_Var34 string
784			templ_7745c5c3_Var34, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")
785			if templ_7745c5c3_Err != nil {
786				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 167, Col: 10}
787			}
788			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var34))
789			if templ_7745c5c3_Err != nil {
790				return templ_7745c5c3_Err
791			}
792			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 73, "<time datetime=\"")
793			if templ_7745c5c3_Err != nil {
794				return templ_7745c5c3_Err
795			}
796			var templ_7745c5c3_Var35 string
797			templ_7745c5c3_Var35, templ_7745c5c3_Err = templ.ResolveAttributeValue(pr.WhenAt)
798			if templ_7745c5c3_Err != nil {
799				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 167, Col: 38}
800			}
801			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var35)
802			if templ_7745c5c3_Err != nil {
803				return templ_7745c5c3_Err
804			}
805			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 74, "\" title=\"")
806			if templ_7745c5c3_Err != nil {
807				return templ_7745c5c3_Err
808			}
809			var templ_7745c5c3_Var36 string
810			templ_7745c5c3_Var36, templ_7745c5c3_Err = templ.ResolveAttributeValue(pr.Abs)
811			if templ_7745c5c3_Err != nil {
812				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 167, Col: 55}
813			}
814			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var36)
815			if templ_7745c5c3_Err != nil {
816				return templ_7745c5c3_Err
817			}
818			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 75, "\">")
819			if templ_7745c5c3_Err != nil {
820				return templ_7745c5c3_Err
821			}
822			var templ_7745c5c3_Var37 string
823			templ_7745c5c3_Var37, templ_7745c5c3_Err = templ.JoinStringErrs(pr.When)
824			if templ_7745c5c3_Err != nil {
825				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 167, Col: 67}
826			}
827			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var37))
828			if templ_7745c5c3_Err != nil {
829				return templ_7745c5c3_Err
830			}
831			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 76, "</time>")
832			if templ_7745c5c3_Err != nil {
833				return templ_7745c5c3_Err
834			}
835			var templ_7745c5c3_Var38 string
836			templ_7745c5c3_Var38, templ_7745c5c3_Err = templ.JoinStringErrs(" · " + pr.Abs)
837			if templ_7745c5c3_Err != nil {
838				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 167, Col: 93}
839			}
840			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var38))
841			if templ_7745c5c3_Err != nil {
842				return templ_7745c5c3_Err
843			}
844		}
845		return nil
846	})
847}
848
849func commitRail(p CommitPage) templ.Component {
850	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
851		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
852		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
853			return templ_7745c5c3_CtxErr
854		}
855		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
856		if !templ_7745c5c3_IsBuffer {
857			defer func() {
858				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
859				if templ_7745c5c3_Err == nil {
860					templ_7745c5c3_Err = templ_7745c5c3_BufErr
861				}
862			}()
863		}
864		ctx = templ.InitializeContext(ctx)
865		templ_7745c5c3_Var39 := templ.GetChildren(ctx)
866		if templ_7745c5c3_Var39 == nil {
867			templ_7745c5c3_Var39 = templ.NopComponent
868		}
869		ctx = templ.ClearChildren(ctx)
870		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 77, "<section aria-labelledby=\"r-files\"><h2 id=\"r-files\">Files <span class=\"count\">")
871		if templ_7745c5c3_Err != nil {
872			return templ_7745c5c3_Err
873		}
874		var templ_7745c5c3_Var40 string
875		templ_7745c5c3_Var40, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))
876		if templ_7745c5c3_Err != nil {
877			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 173, Col: 65}
878		}
879		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var40))
880		if templ_7745c5c3_Err != nil {
881			return templ_7745c5c3_Err
882		}
883		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 78, "</span></h2>")
884		if templ_7745c5c3_Err != nil {
885			return templ_7745c5c3_Err
886		}
887		templ_7745c5c3_Err = FileList(p.Files).Render(ctx, templ_7745c5c3_Buffer)
888		if templ_7745c5c3_Err != nil {
889			return templ_7745c5c3_Err
890		}
891		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 79, "</section>")
892		if templ_7745c5c3_Err != nil {
893			return templ_7745c5c3_Err
894		}
895		return nil
896	})
897}
898
899// FileList is the table of contents of a diff: status letter, path, +n -m
900// and an ASCII bar. The row of the file in view is marked.
901func FileList(files []DiffFile) templ.Component {
902	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
903		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
904		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
905			return templ_7745c5c3_CtxErr
906		}
907		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
908		if !templ_7745c5c3_IsBuffer {
909			defer func() {
910				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
911				if templ_7745c5c3_Err == nil {
912					templ_7745c5c3_Err = templ_7745c5c3_BufErr
913				}
914			}()
915		}
916		ctx = templ.InitializeContext(ctx)
917		templ_7745c5c3_Var41 := templ.GetChildren(ctx)
918		if templ_7745c5c3_Var41 == nil {
919			templ_7745c5c3_Var41 = templ.NopComponent
920		}
921		ctx = templ.ClearChildren(ctx)
922		if len(files) > fileFilterMin {
923			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 80, "<div class=\"ffilter\"><label for=\"files-filter\" class=\"sr\">filter the changed files</label> <input id=\"files-filter\" type=\"search\" placeholder=\"Filter files…\" autocomplete=\"off\" data-pick=\".files > li\" hx-on:input=\"ermite.filter(this)\"></div>")
924			if templ_7745c5c3_Err != nil {
925				return templ_7745c5c3_Err
926			}
927		}
928		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 81, "<ol class=\"files\" aria-label=\"Changed files\">")
929		if templ_7745c5c3_Err != nil {
930			return templ_7745c5c3_Err
931		}
932		for _, f := range files {
933			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 82, "<li><a href=\"")
934			if templ_7745c5c3_Err != nil {
935				return templ_7745c5c3_Err
936			}
937			var templ_7745c5c3_Var42 templ.SafeURL
938			templ_7745c5c3_Var42, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL("#" + f.ID))
939			if templ_7745c5c3_Err != nil {
940				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 198, Col: 37}
941			}
942			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var42))
943			if templ_7745c5c3_Err != nil {
944				return templ_7745c5c3_Err
945			}
946			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 83, "\" title=\"")
947			if templ_7745c5c3_Err != nil {
948				return templ_7745c5c3_Err
949			}
950			var templ_7745c5c3_Var43 string
951			templ_7745c5c3_Var43, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Path)
952			if templ_7745c5c3_Err != nil {
953				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 199, Col: 19}
954			}
955			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var43)
956			if templ_7745c5c3_Err != nil {
957				return templ_7745c5c3_Err
958			}
959			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 84, "\" hx-on:click=\"(window.ermiteMR?.openFile || ermite.openFile)(this.hash.slice(1))\"><span class=\"st\" data-st=\"")
960			if templ_7745c5c3_Err != nil {
961				return templ_7745c5c3_Err
962			}
963			var templ_7745c5c3_Var44 string
964			templ_7745c5c3_Var44, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Status)
965			if templ_7745c5c3_Err != nil {
966				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 202, Col: 40}
967			}
968			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var44)
969			if templ_7745c5c3_Err != nil {
970				return templ_7745c5c3_Err
971			}
972			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 85, "\" title=\"")
973			if templ_7745c5c3_Err != nil {
974				return templ_7745c5c3_Err
975			}
976			var templ_7745c5c3_Var45 string
977			templ_7745c5c3_Var45, templ_7745c5c3_Err = templ.ResolveAttributeValue(statusName(f.Status))
978			if templ_7745c5c3_Err != nil {
979				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 202, Col: 71}
980			}
981			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var45)
982			if templ_7745c5c3_Err != nil {
983				return templ_7745c5c3_Err
984			}
985			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 86, "\">")
986			if templ_7745c5c3_Err != nil {
987				return templ_7745c5c3_Err
988			}
989			var templ_7745c5c3_Var46 string
990			templ_7745c5c3_Var46, templ_7745c5c3_Err = templ.JoinStringErrs(f.Status)
991			if templ_7745c5c3_Err != nil {
992				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 202, Col: 84}
993			}
994			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var46))
995			if templ_7745c5c3_Err != nil {
996				return templ_7745c5c3_Err
997			}
998			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 87, "</span> <span class=\"nm\"><span class=\"p\">")
999			if templ_7745c5c3_Err != nil {
1000				return templ_7745c5c3_Err
1001			}
1002			var templ_7745c5c3_Var47 string
1003			templ_7745c5c3_Var47, templ_7745c5c3_Err = templ.JoinStringErrs(f.Name)
1004			if templ_7745c5c3_Err != nil {
1005				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 203, Col: 46}
1006			}
1007			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var47))
1008			if templ_7745c5c3_Err != nil {
1009				return templ_7745c5c3_Err
1010			}
1011			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 88, "</span>")
1012			if templ_7745c5c3_Err != nil {
1013				return templ_7745c5c3_Err
1014			}
1015			var templ_7745c5c3_Var48 string
1016			templ_7745c5c3_Var48, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
1017			if templ_7745c5c3_Err != nil {
1018				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 203, Col: 60}
1019			}
1020			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var48))
1021			if templ_7745c5c3_Err != nil {
1022				return templ_7745c5c3_Err
1023			}
1024			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 89, "<span class=\"d\"><bdi>")
1025			if templ_7745c5c3_Err != nil {
1026				return templ_7745c5c3_Err
1027			}
1028			var templ_7745c5c3_Var49 string
1029			templ_7745c5c3_Var49, templ_7745c5c3_Err = templ.JoinStringErrs(f.Dir)
1030			if templ_7745c5c3_Err != nil {
1031				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 203, Col: 90}
1032			}
1033			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var49))
1034			if templ_7745c5c3_Err != nil {
1035				return templ_7745c5c3_Err
1036			}
1037			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 90, "</bdi></span></span> ")
1038			if templ_7745c5c3_Err != nil {
1039				return templ_7745c5c3_Err
1040			}
1041			if f.OpenNotes > 0 {
1042				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 91, "<span class=\"cn\" title=\"")
1043				if templ_7745c5c3_Err != nil {
1044					return templ_7745c5c3_Err
1045				}
1046				var templ_7745c5c3_Var50 string
1047				templ_7745c5c3_Var50, templ_7745c5c3_Err = templ.ResolveAttributeValue(plural(f.OpenNotes, "open comment", "open comments"))
1048				if templ_7745c5c3_Err != nil {
1049					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 205, Col: 83}
1050				}
1051				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var50)
1052				if templ_7745c5c3_Err != nil {
1053					return templ_7745c5c3_Err
1054				}
1055				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 92, "\">")
1056				if templ_7745c5c3_Err != nil {
1057					return templ_7745c5c3_Err
1058				}
1059				var templ_7745c5c3_Var51 string
1060				templ_7745c5c3_Var51, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.OpenNotes))
1061				if templ_7745c5c3_Err != nil {
1062					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 205, Col: 105}
1063				}
1064				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var51))
1065				if templ_7745c5c3_Err != nil {
1066					return templ_7745c5c3_Err
1067				}
1068				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 93, "</span> ")
1069				if templ_7745c5c3_Err != nil {
1070					return templ_7745c5c3_Err
1071				}
1072			} else if f.Notes > 0 {
1073				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 94, "<span class=\"cn done\" title=\"")
1074				if templ_7745c5c3_Err != nil {
1075					return templ_7745c5c3_Err
1076				}
1077				var templ_7745c5c3_Var52 string
1078				templ_7745c5c3_Var52, templ_7745c5c3_Err = templ.ResolveAttributeValue(plural(f.Notes, "resolved comment", "resolved comments"))
1079				if templ_7745c5c3_Err != nil {
1080					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 207, Col: 92}
1081				}
1082				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var52)
1083				if templ_7745c5c3_Err != nil {
1084					return templ_7745c5c3_Err
1085				}
1086				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 95, "\">")
1087				if templ_7745c5c3_Err != nil {
1088					return templ_7745c5c3_Err
1089				}
1090				var templ_7745c5c3_Var53 string
1091				templ_7745c5c3_Var53, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.Notes))
1092				if templ_7745c5c3_Err != nil {
1093					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 207, Col: 110}
1094				}
1095				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var53))
1096				if templ_7745c5c3_Err != nil {
1097					return templ_7745c5c3_Err
1098				}
1099				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 96, "</span> ")
1100				if templ_7745c5c3_Err != nil {
1101					return templ_7745c5c3_Err
1102				}
1103			}
1104			if f.Bin {
1105				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 97, "<span class=\"n mute\">bin</span>")
1106				if templ_7745c5c3_Err != nil {
1107					return templ_7745c5c3_Err
1108				}
1109			} else {
1110				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 98, "<span class=\"n\"><span class=\"plus\">+")
1111				if templ_7745c5c3_Err != nil {
1112					return templ_7745c5c3_Err
1113				}
1114				var templ_7745c5c3_Var54 string
1115				templ_7745c5c3_Var54, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.Add))
1116				if templ_7745c5c3_Err != nil {
1117					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 212, Col: 55}
1118				}
1119				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var54))
1120				if templ_7745c5c3_Err != nil {
1121					return templ_7745c5c3_Err
1122				}
1123				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 99, "</span> <span class=\"minus\">-")
1124				if templ_7745c5c3_Err != nil {
1125					return templ_7745c5c3_Err
1126				}
1127				var templ_7745c5c3_Var55 string
1128				templ_7745c5c3_Var55, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.Del))
1129				if templ_7745c5c3_Err != nil {
1130					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 212, Col: 99}
1131				}
1132				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var55))
1133				if templ_7745c5c3_Err != nil {
1134					return templ_7745c5c3_Err
1135				}
1136				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 100, "</span></span>")
1137				if templ_7745c5c3_Err != nil {
1138					return templ_7745c5c3_Err
1139				}
1140			}
1141			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 101, "</a></li>")
1142			if templ_7745c5c3_Err != nil {
1143				return templ_7745c5c3_Err
1144			}
1145		}
1146		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 102, "</ol>")
1147		if templ_7745c5c3_Err != nil {
1148			return templ_7745c5c3_Err
1149		}
1150		return nil
1151	})
1152}
1153
1154// DiffFileView is one file of the diff: a <details> (per-file collapse). The
1155// unified and the split tables are both in it; #diffs[data-diff] shows one.
1156// Every changed line keeps its +/- marker, so a change is never conveyed by
1157// colour alone.
1158func DiffFileView(f DiffFile, p DiffView) templ.Component {
1159	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1160		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
1161		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
1162			return templ_7745c5c3_CtxErr
1163		}
1164		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1165		if !templ_7745c5c3_IsBuffer {
1166			defer func() {
1167				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
1168				if templ_7745c5c3_Err == nil {
1169					templ_7745c5c3_Err = templ_7745c5c3_BufErr
1170				}
1171			}()
1172		}
1173		ctx = templ.InitializeContext(ctx)
1174		templ_7745c5c3_Var56 := templ.GetChildren(ctx)
1175		if templ_7745c5c3_Var56 == nil {
1176			templ_7745c5c3_Var56 = templ.NopComponent
1177		}
1178		ctx = templ.ClearChildren(ctx)
1179		var templ_7745c5c3_Var57 = []any{"dfile", "lnw-" + itoa(f.Digits)}
1180		templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var57...)
1181		if templ_7745c5c3_Err != nil {
1182			return templ_7745c5c3_Err
1183		}
1184		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 103, "<details class=\"")
1185		if templ_7745c5c3_Err != nil {
1186			return templ_7745c5c3_Err
1187		}
1188		var templ_7745c5c3_Var58 string
1189		templ_7745c5c3_Var58, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var57).String())
1190		if templ_7745c5c3_Err != nil {
1191			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}
1192		}
1193		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var58)
1194		if templ_7745c5c3_Err != nil {
1195			return templ_7745c5c3_Err
1196		}
1197		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 104, "\" id=\"")
1198		if templ_7745c5c3_Err != nil {
1199			return templ_7745c5c3_Err
1200		}
1201		var templ_7745c5c3_Var59 string
1202		templ_7745c5c3_Var59, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.ID)
1203		if templ_7745c5c3_Err != nil {
1204			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 227, Col: 11}
1205		}
1206		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var59)
1207		if templ_7745c5c3_Err != nil {
1208			return templ_7745c5c3_Err
1209		}
1210		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 105, "\" data-file=\"")
1211		if templ_7745c5c3_Err != nil {
1212			return templ_7745c5c3_Err
1213		}
1214		var templ_7745c5c3_Var60 string
1215		templ_7745c5c3_Var60, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Key)
1216		if templ_7745c5c3_Err != nil {
1217			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 228, Col: 19}
1218		}
1219		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var60)
1220		if templ_7745c5c3_Err != nil {
1221			return templ_7745c5c3_Err
1222		}
1223		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 106, "\"")
1224		if templ_7745c5c3_Err != nil {
1225			return templ_7745c5c3_Err
1226		}
1227		if f.Open {
1228			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 107, " open")
1229			if templ_7745c5c3_Err != nil {
1230				return templ_7745c5c3_Err
1231			}
1232		}
1233		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 108, "><summary><span class=\"st\">")
1234		if templ_7745c5c3_Err != nil {
1235			return templ_7745c5c3_Err
1236		}
1237		var templ_7745c5c3_Var61 string
1238		templ_7745c5c3_Var61, templ_7745c5c3_Err = templ.JoinStringErrs(f.Status)
1239		if templ_7745c5c3_Err != nil {
1240			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 234, Col: 30}
1241		}
1242		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var61))
1243		if templ_7745c5c3_Err != nil {
1244			return templ_7745c5c3_Err
1245		}
1246		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 109, "</span>")
1247		if templ_7745c5c3_Err != nil {
1248			return templ_7745c5c3_Err
1249		}
1250		var templ_7745c5c3_Var62 string
1251		templ_7745c5c3_Var62, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
1252		if templ_7745c5c3_Err != nil {
1253			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 234, Col: 44}
1254		}
1255		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var62))
1256		if templ_7745c5c3_Err != nil {
1257			return templ_7745c5c3_Err
1258		}
1259		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 110, "<span class=\"p\">")
1260		if templ_7745c5c3_Err != nil {
1261			return templ_7745c5c3_Err
1262		}
1263		var templ_7745c5c3_Var63 string
1264		templ_7745c5c3_Var63, templ_7745c5c3_Err = templ.JoinStringErrs(f.Path)
1265		if templ_7745c5c3_Err != nil {
1266			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 234, Col: 70}
1267		}
1268		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var63))
1269		if templ_7745c5c3_Err != nil {
1270			return templ_7745c5c3_Err
1271		}
1272		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 111, "</span>")
1273		if templ_7745c5c3_Err != nil {
1274			return templ_7745c5c3_Err
1275		}
1276		var templ_7745c5c3_Var64 string
1277		templ_7745c5c3_Var64, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
1278		if templ_7745c5c3_Err != nil {
1279			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 234, Col: 84}
1280		}
1281		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var64))
1282		if templ_7745c5c3_Err != nil {
1283			return templ_7745c5c3_Err
1284		}
1285		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 112, "<span class=\"plus\">+")
1286		if templ_7745c5c3_Err != nil {
1287			return templ_7745c5c3_Err
1288		}
1289		var templ_7745c5c3_Var65 string
1290		templ_7745c5c3_Var65, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.Add))
1291		if templ_7745c5c3_Err != nil {
1292			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 234, Col: 119}
1293		}
1294		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var65))
1295		if templ_7745c5c3_Err != nil {
1296			return templ_7745c5c3_Err
1297		}
1298		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 113, "</span>")
1299		if templ_7745c5c3_Err != nil {
1300			return templ_7745c5c3_Err
1301		}
1302		var templ_7745c5c3_Var66 string
1303		templ_7745c5c3_Var66, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
1304		if templ_7745c5c3_Err != nil {
1305			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 234, Col: 133}
1306		}
1307		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var66))
1308		if templ_7745c5c3_Err != nil {
1309			return templ_7745c5c3_Err
1310		}
1311		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 114, "<span class=\"minus\">-")
1312		if templ_7745c5c3_Err != nil {
1313			return templ_7745c5c3_Err
1314		}
1315		var templ_7745c5c3_Var67 string
1316		templ_7745c5c3_Var67, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.Del))
1317		if templ_7745c5c3_Err != nil {
1318			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 234, Col: 169}
1319		}
1320		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var67))
1321		if templ_7745c5c3_Err != nil {
1322			return templ_7745c5c3_Err
1323		}
1324		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 115, "</span> ")
1325		if templ_7745c5c3_Err != nil {
1326			return templ_7745c5c3_Err
1327		}
1328		if f.Note != "" {
1329			var templ_7745c5c3_Var68 string
1330			templ_7745c5c3_Var68, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
1331			if templ_7745c5c3_Err != nil {
1332				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 236, Col: 9}
1333			}
1334			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var68))
1335			if templ_7745c5c3_Err != nil {
1336				return templ_7745c5c3_Err
1337			}
1338			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 116, "<span class=\"note\">")
1339			if templ_7745c5c3_Err != nil {
1340				return templ_7745c5c3_Err
1341			}
1342			var templ_7745c5c3_Var69 string
1343			templ_7745c5c3_Var69, templ_7745c5c3_Err = templ.JoinStringErrs(f.Note)
1344			if templ_7745c5c3_Err != nil {
1345				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 236, Col: 38}
1346			}
1347			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var69))
1348			if templ_7745c5c3_Err != nil {
1349				return templ_7745c5c3_Err
1350			}
1351			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 117, "</span>")
1352			if templ_7745c5c3_Err != nil {
1353				return templ_7745c5c3_Err
1354			}
1355		}
1356		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 118, "</summary> ")
1357		if templ_7745c5c3_Err != nil {
1358			return templ_7745c5c3_Err
1359		}
1360		if f.Lazy {
1361			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 119, "   ")
1362			if templ_7745c5c3_Err != nil {
1363				return templ_7745c5c3_Err
1364			}
1365			var templ_7745c5c3_Var70 = []any{"dlazy", "dlazy-" + itoa(f.Height)}
1366			templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var70...)
1367			if templ_7745c5c3_Err != nil {
1368				return templ_7745c5c3_Err
1369			}
1370			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 120, "<div class=\"")
1371			if templ_7745c5c3_Err != nil {
1372				return templ_7745c5c3_Err
1373			}
1374			var templ_7745c5c3_Var71 string
1375			templ_7745c5c3_Var71, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var70).String())
1376			if templ_7745c5c3_Err != nil {
1377				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}
1378			}
1379			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var71)
1380			if templ_7745c5c3_Err != nil {
1381				return templ_7745c5c3_Err
1382			}
1383			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 121, "\" data-src=\"")
1384			if templ_7745c5c3_Err != nil {
1385				return templ_7745c5c3_Err
1386			}
1387			var templ_7745c5c3_Var72 string
1388			templ_7745c5c3_Var72, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Src)
1389			if templ_7745c5c3_Err != nil {
1390				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 243, Col: 69}
1391			}
1392			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var72)
1393			if templ_7745c5c3_Err != nil {
1394				return templ_7745c5c3_Err
1395			}
1396			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 122, "\" data-notes=\"")
1397			if templ_7745c5c3_Err != nil {
1398				return templ_7745c5c3_Err
1399			}
1400			var templ_7745c5c3_Var73 string
1401			templ_7745c5c3_Var73, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Comments)
1402			if templ_7745c5c3_Err != nil {
1403				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 243, Col: 95}
1404			}
1405			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var73)
1406			if templ_7745c5c3_Err != nil {
1407				return templ_7745c5c3_Err
1408			}
1409			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 123, "\"><a href=\"")
1410			if templ_7745c5c3_Err != nil {
1411				return templ_7745c5c3_Err
1412			}
1413			var templ_7745c5c3_Var74 templ.SafeURL
1414			templ_7745c5c3_Var74, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL("?from=" + itoa(f.From) + "#" + f.ID))
1415			if templ_7745c5c3_Err != nil {
1416				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 244, Col: 65}
1417			}
1418			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var74))
1419			if templ_7745c5c3_Err != nil {
1420				return templ_7745c5c3_Err
1421			}
1422			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 124, "\">show this file</a></div>")
1423			if templ_7745c5c3_Err != nil {
1424				return templ_7745c5c3_Err
1425			}
1426		} else if f.Manual {
1427			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 125, "   <div class=\"dlazy\" data-src=\"")
1428			if templ_7745c5c3_Err != nil {
1429				return templ_7745c5c3_Err
1430			}
1431			var templ_7745c5c3_Var75 string
1432			templ_7745c5c3_Var75, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Src)
1433			if templ_7745c5c3_Err != nil {
1434				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 250, Col: 38}
1435			}
1436			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var75)
1437			if templ_7745c5c3_Err != nil {
1438				return templ_7745c5c3_Err
1439			}
1440			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 126, "\" data-manual><a href=\"")
1441			if templ_7745c5c3_Err != nil {
1442				return templ_7745c5c3_Err
1443			}
1444			var templ_7745c5c3_Var76 templ.SafeURL
1445			templ_7745c5c3_Var76, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(f.Href))
1446			if templ_7745c5c3_Err != nil {
1447				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 251, Col: 35}
1448			}
1449			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var76))
1450			if templ_7745c5c3_Err != nil {
1451				return templ_7745c5c3_Err
1452			}
1453			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 127, "\">load diff</a></div>")
1454			if templ_7745c5c3_Err != nil {
1455				return templ_7745c5c3_Err
1456			}
1457		} else if len(f.Hunks) > 0 {
1458			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 128, "<div class=\"dscroll\">")
1459			if templ_7745c5c3_Err != nil {
1460				return templ_7745c5c3_Err
1461			}
1462			if p.ShowUnified {
1463				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 129, "<table class=\"dt uni\" aria-label=\"")
1464				if templ_7745c5c3_Err != nil {
1465					return templ_7745c5c3_Err
1466				}
1467				var templ_7745c5c3_Var77 string
1468				templ_7745c5c3_Var77, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Path + ", unified")
1469				if templ_7745c5c3_Err != nil {
1470					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 256, Col: 60}
1471				}
1472				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var77)
1473				if templ_7745c5c3_Err != nil {
1474					return templ_7745c5c3_Err
1475				}
1476				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 130, "\">")
1477				if templ_7745c5c3_Err != nil {
1478					return templ_7745c5c3_Err
1479				}
1480				for _, h := range f.Hunks {
1481					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 131, "<tbody>")
1482					if templ_7745c5c3_Err != nil {
1483						return templ_7745c5c3_Err
1484					}
1485					if h.Gap != nil {
1486						templ_7745c5c3_Err = gapRow(*h.Gap, 4).Render(ctx, templ_7745c5c3_Buffer)
1487						if templ_7745c5c3_Err != nil {
1488							return templ_7745c5c3_Err
1489						}
1490					}
1491					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 132, "<tr class=\"hunk\"><td colspan=\"4\">")
1492					if templ_7745c5c3_Err != nil {
1493						return templ_7745c5c3_Err
1494					}
1495					var templ_7745c5c3_Var78 string
1496					templ_7745c5c3_Var78, templ_7745c5c3_Err = templ.JoinStringErrs(h.Header)
1497					if templ_7745c5c3_Err != nil {
1498						return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 262, Col: 51}
1499					}
1500					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var78))
1501					if templ_7745c5c3_Err != nil {
1502						return templ_7745c5c3_Err
1503					}
1504					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 133, "</td></tr>")
1505					if templ_7745c5c3_Err != nil {
1506						return templ_7745c5c3_Err
1507					}
1508					for _, ln := range h.Lines {
1509						var templ_7745c5c3_Var79 = []any{ln.Kind, templ.KV("sel", ln.Selected)}
1510						templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var79...)
1511						if templ_7745c5c3_Err != nil {
1512							return templ_7745c5c3_Err
1513						}
1514						templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 134, "<tr class=\"")
1515						if templ_7745c5c3_Err != nil {
1516							return templ_7745c5c3_Err
1517						}
1518						var templ_7745c5c3_Var80 string
1519						templ_7745c5c3_Var80, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var79).String())
1520						if templ_7745c5c3_Err != nil {
1521							return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}
1522						}
1523						_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var80)
1524						if templ_7745c5c3_Err != nil {
1525							return templ_7745c5c3_Err
1526						}
1527						templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 135, "\"><td class=\"ln\">")
1528						if templ_7745c5c3_Err != nil {
1529							return templ_7745c5c3_Err
1530						}
1531						templ_7745c5c3_Err = gutter(ln.Old, ln.OldHref).Render(ctx, templ_7745c5c3_Buffer)
1532						if templ_7745c5c3_Err != nil {
1533							return templ_7745c5c3_Err
1534						}
1535						templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 136, "</td><td class=\"ln\">")
1536						if templ_7745c5c3_Err != nil {
1537							return templ_7745c5c3_Err
1538						}
1539						templ_7745c5c3_Err = gutter(ln.New, ln.NewHref).Render(ctx, templ_7745c5c3_Buffer)
1540						if templ_7745c5c3_Err != nil {
1541							return templ_7745c5c3_Err
1542						}
1543						templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 137, "</td><td class=\"m\">")
1544						if templ_7745c5c3_Err != nil {
1545							return templ_7745c5c3_Err
1546						}
1547						var templ_7745c5c3_Var81 string
1548						templ_7745c5c3_Var81, templ_7745c5c3_Err = templ.JoinStringErrs(ln.Mark)
1549						if templ_7745c5c3_Err != nil {
1550							return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 267, Col: 33}
1551						}
1552						_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var81))
1553						if templ_7745c5c3_Err != nil {
1554							return templ_7745c5c3_Err
1555						}
1556						templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 138, "</td><td class=\"tx chroma\">")
1557						if templ_7745c5c3_Err != nil {
1558							return templ_7745c5c3_Err
1559						}
1560						templ_7745c5c3_Err = codeLine(ln).Render(ctx, templ_7745c5c3_Buffer)
1561						if templ_7745c5c3_Err != nil {
1562							return templ_7745c5c3_Err
1563						}
1564						templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 139, "</td></tr>")
1565						if templ_7745c5c3_Err != nil {
1566							return templ_7745c5c3_Err
1567						}
1568						if len(ln.Notes) > 0 || ln.Form != nil {
1569							templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 140, "<tr class=\"fnote\"><td colspan=\"3\"></td><td>")
1570							if templ_7745c5c3_Err != nil {
1571								return templ_7745c5c3_Err
1572							}
1573							templ_7745c5c3_Err = lineNotes(ln.Notes, ln.Form, "").Render(ctx, templ_7745c5c3_Buffer)
1574							if templ_7745c5c3_Err != nil {
1575								return templ_7745c5c3_Err
1576							}
1577							templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 141, "</td></tr>")
1578							if templ_7745c5c3_Err != nil {
1579								return templ_7745c5c3_Err
1580							}
1581						}
1582					}
1583					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 142, "</tbody> ")
1584					if templ_7745c5c3_Err != nil {
1585						return templ_7745c5c3_Err
1586					}
1587				}
1588				if f.Tail != nil {
1589					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 143, "<tbody>")
1590					if templ_7745c5c3_Err != nil {
1591						return templ_7745c5c3_Err
1592					}
1593					templ_7745c5c3_Err = gapRow(*f.Tail, 4).Render(ctx, templ_7745c5c3_Buffer)
1594					if templ_7745c5c3_Err != nil {
1595						return templ_7745c5c3_Err
1596					}
1597					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 144, "</tbody>")
1598					if templ_7745c5c3_Err != nil {
1599						return templ_7745c5c3_Err
1600					}
1601				}
1602				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 145, "</table>")
1603				if templ_7745c5c3_Err != nil {
1604					return templ_7745c5c3_Err
1605				}
1606			}
1607			if p.ShowSplit {
1608				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 146, "<table class=\"dt spl\" aria-label=\"")
1609				if templ_7745c5c3_Err != nil {
1610					return templ_7745c5c3_Err
1611				}
1612				var templ_7745c5c3_Var82 string
1613				templ_7745c5c3_Var82, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Path + ", split")
1614				if templ_7745c5c3_Err != nil {
1615					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 287, Col: 58}
1616				}
1617				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var82)
1618				if templ_7745c5c3_Err != nil {
1619					return templ_7745c5c3_Err
1620				}
1621				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 147, "\"><colgroup><col class=\"c-ln\"><col class=\"c-m\"><col><col class=\"c-ln\"><col class=\"c-m\"><col></colgroup> ")
1622				if templ_7745c5c3_Err != nil {
1623					return templ_7745c5c3_Err
1624				}
1625				for _, h := range f.Hunks {
1626					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 148, "<tbody>")
1627					if templ_7745c5c3_Err != nil {
1628						return templ_7745c5c3_Err
1629					}
1630					if h.Gap != nil {
1631						templ_7745c5c3_Err = gapRow(*h.Gap, 6).Render(ctx, templ_7745c5c3_Buffer)
1632						if templ_7745c5c3_Err != nil {
1633							return templ_7745c5c3_Err
1634						}
1635					}
1636					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 149, "<tr class=\"hunk\"><td colspan=\"6\">")
1637					if templ_7745c5c3_Err != nil {
1638						return templ_7745c5c3_Err
1639					}
1640					var templ_7745c5c3_Var83 string
1641					templ_7745c5c3_Var83, templ_7745c5c3_Err = templ.JoinStringErrs(h.Header)
1642					if templ_7745c5c3_Err != nil {
1643						return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 294, Col: 51}
1644					}
1645					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var83))
1646					if templ_7745c5c3_Err != nil {
1647						return templ_7745c5c3_Err
1648					}
1649					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 150, "</td></tr>")
1650					if templ_7745c5c3_Err != nil {
1651						return templ_7745c5c3_Err
1652					}
1653					for _, row := range h.Split {
1654						templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 151, "<tr>")
1655						if templ_7745c5c3_Err != nil {
1656							return templ_7745c5c3_Err
1657						}
1658						templ_7745c5c3_Err = splitSide(row.L, true).Render(ctx, templ_7745c5c3_Buffer)
1659						if templ_7745c5c3_Err != nil {
1660							return templ_7745c5c3_Err
1661						}
1662						templ_7745c5c3_Err = splitSide(row.R, false).Render(ctx, templ_7745c5c3_Buffer)
1663						if templ_7745c5c3_Err != nil {
1664							return templ_7745c5c3_Err
1665						}
1666						templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 152, "</tr>")
1667						if templ_7745c5c3_Err != nil {
1668							return templ_7745c5c3_Err
1669						}
1670						if notes, form := row.Notes(), row.Form(); len(notes) > 0 || form != nil {
1671							templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 153, "<tr class=\"fnote\"><td colspan=\"6\">")
1672							if templ_7745c5c3_Err != nil {
1673								return templ_7745c5c3_Err
1674							}
1675							templ_7745c5c3_Err = lineNotes(notes, form, "-s").Render(ctx, templ_7745c5c3_Buffer)
1676							if templ_7745c5c3_Err != nil {
1677								return templ_7745c5c3_Err
1678							}
1679							templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 154, "</td></tr>")
1680							if templ_7745c5c3_Err != nil {
1681								return templ_7745c5c3_Err
1682							}
1683						}
1684					}
1685					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 155, "</tbody> ")
1686					if templ_7745c5c3_Err != nil {
1687						return templ_7745c5c3_Err
1688					}
1689				}
1690				if f.Tail != nil {
1691					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 156, "<tbody>")
1692					if templ_7745c5c3_Err != nil {
1693						return templ_7745c5c3_Err
1694					}
1695					templ_7745c5c3_Err = gapRow(*f.Tail, 6).Render(ctx, templ_7745c5c3_Buffer)
1696					if templ_7745c5c3_Err != nil {
1697						return templ_7745c5c3_Err
1698					}
1699					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 157, "</tbody>")
1700					if templ_7745c5c3_Err != nil {
1701						return templ_7745c5c3_Err
1702					}
1703				}
1704				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 158, "</table>")
1705				if templ_7745c5c3_Err != nil {
1706					return templ_7745c5c3_Err
1707				}
1708			}
1709			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 159, "</div>")
1710			if templ_7745c5c3_Err != nil {
1711				return templ_7745c5c3_Err
1712			}
1713		} else if f.Raw != "" {
1714			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 160, "<p class=\"note pad\">")
1715			if templ_7745c5c3_Err != nil {
1716				return templ_7745c5c3_Err
1717			}
1718			var templ_7745c5c3_Var84 string
1719			templ_7745c5c3_Var84, templ_7745c5c3_Err = templ.JoinStringErrs(f.Note)
1720			if templ_7745c5c3_Err != nil {
1721				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 317, Col: 31}
1722			}
1723			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var84))
1724			if templ_7745c5c3_Err != nil {
1725				return templ_7745c5c3_Err
1726			}
1727			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 161, " <a href=\"")
1728			if templ_7745c5c3_Err != nil {
1729				return templ_7745c5c3_Err
1730			}
1731			var templ_7745c5c3_Var85 templ.SafeURL
1732			templ_7745c5c3_Var85, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(f.Raw))
1733			if templ_7745c5c3_Err != nil {
1734				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 317, Col: 64}
1735			}
1736			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var85))
1737			if templ_7745c5c3_Err != nil {
1738				return templ_7745c5c3_Err
1739			}
1740			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 162, "\">view raw</a></p>")
1741			if templ_7745c5c3_Err != nil {
1742				return templ_7745c5c3_Err
1743			}
1744		} else {
1745			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 163, "<p class=\"note pad\">")
1746			if templ_7745c5c3_Err != nil {
1747				return templ_7745c5c3_Err
1748			}
1749			if f.Note != "" {
1750				var templ_7745c5c3_Var86 string
1751				templ_7745c5c3_Var86, templ_7745c5c3_Err = templ.JoinStringErrs(f.Note)
1752				if templ_7745c5c3_Err != nil {
1753					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 321, Col: 13}
1754				}
1755				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var86))
1756				if templ_7745c5c3_Err != nil {
1757					return templ_7745c5c3_Err
1758				}
1759			} else {
1760				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 164, "no textual change.")
1761				if templ_7745c5c3_Err != nil {
1762					return templ_7745c5c3_Err
1763				}
1764			}
1765			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 165, "</p>")
1766			if templ_7745c5c3_Err != nil {
1767				return templ_7745c5c3_Err
1768			}
1769		}
1770		if len(f.Loose) > 0 {
1771			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 166, "<div class=\"dloose\">")
1772			if templ_7745c5c3_Err != nil {
1773				return templ_7745c5c3_Err
1774			}
1775			for _, c := range f.Loose {
1776				templ_7745c5c3_Err = commentView(c, "").Render(ctx, templ_7745c5c3_Buffer)
1777				if templ_7745c5c3_Err != nil {
1778					return templ_7745c5c3_Err
1779				}
1780			}
1781			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 167, "</div>")
1782			if templ_7745c5c3_Err != nil {
1783				return templ_7745c5c3_Err
1784			}
1785		}
1786		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 168, "</details>")
1787		if templ_7745c5c3_Err != nil {
1788			return templ_7745c5c3_Err
1789		}
1790		return nil
1791	})
1792}
1793
1794// MRFiles is a window of files of a merge request, for the placeholders of
1795// the page: the files only, which replace the placeholders of the same ids.
1796func MRFiles(p MRFilesPage) templ.Component {
1797	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1798		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
1799		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
1800			return templ_7745c5c3_CtxErr
1801		}
1802		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1803		if !templ_7745c5c3_IsBuffer {
1804			defer func() {
1805				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
1806				if templ_7745c5c3_Err == nil {
1807					templ_7745c5c3_Err = templ_7745c5c3_BufErr
1808				}
1809			}()
1810		}
1811		ctx = templ.InitializeContext(ctx)
1812		templ_7745c5c3_Var87 := templ.GetChildren(ctx)
1813		if templ_7745c5c3_Var87 == nil {
1814			templ_7745c5c3_Var87 = templ.NopComponent
1815		}
1816		ctx = templ.ClearChildren(ctx)
1817		for _, f := range p.Files {
1818			templ_7745c5c3_Err = DiffFileView(f, p.DiffView).Render(ctx, templ_7745c5c3_Buffer)
1819			if templ_7745c5c3_Err != nil {
1820				return templ_7745c5c3_Err
1821			}
1822		}
1823		return nil
1824	})
1825}
1826
1827// MRFilesMoved answers a window of a diff that is not the one of the page any
1828// more: the placeholder shows it instead of a file of another diff.
1829func MRFilesMoved() templ.Component {
1830	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1831		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
1832		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
1833			return templ_7745c5c3_CtxErr
1834		}
1835		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1836		if !templ_7745c5c3_IsBuffer {
1837			defer func() {
1838				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
1839				if templ_7745c5c3_Err == nil {
1840					templ_7745c5c3_Err = templ_7745c5c3_BufErr
1841				}
1842			}()
1843		}
1844		ctx = templ.InitializeContext(ctx)
1845		templ_7745c5c3_Var88 := templ.GetChildren(ctx)
1846		if templ_7745c5c3_Var88 == nil {
1847			templ_7745c5c3_Var88 = templ.NopComponent
1848		}
1849		ctx = templ.ClearChildren(ctx)
1850		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 169, "<p class=\"notice\" data-moved>this merge request changed since the page was loaded — <a href=\"\">reload</a></p>")
1851		if templ_7745c5c3_Err != nil {
1852			return templ_7745c5c3_Err
1853		}
1854		return nil
1855	})
1856}
1857
1858// gapRow is the row of the hidden lines before a hunk, or of the rest of the
1859// file: a button that loads them in their place (ermite.js, ermite.expand).
1860// Without scripts nothing loads them: hidden.
1861func gapRow(g DiffGap, cols int) templ.Component {
1862	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1863		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
1864		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
1865			return templ_7745c5c3_CtxErr
1866		}
1867		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1868		if !templ_7745c5c3_IsBuffer {
1869			defer func() {
1870				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
1871				if templ_7745c5c3_Err == nil {
1872					templ_7745c5c3_Err = templ_7745c5c3_BufErr
1873				}
1874			}()
1875		}
1876		ctx = templ.InitializeContext(ctx)
1877		templ_7745c5c3_Var89 := templ.GetChildren(ctx)
1878		if templ_7745c5c3_Var89 == nil {
1879			templ_7745c5c3_Var89 = templ.NopComponent
1880		}
1881		ctx = templ.ClearChildren(ctx)
1882		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 170, "<tr class=\"gap\" data-js data-gap=\"")
1883		if templ_7745c5c3_Err != nil {
1884			return templ_7745c5c3_Err
1885		}
1886		var templ_7745c5c3_Var90 string
1887		templ_7745c5c3_Var90, templ_7745c5c3_Err = templ.ResolveAttributeValue(g.Key)
1888		if templ_7745c5c3_Err != nil {
1889			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 355, Col: 41}
1890		}
1891		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var90)
1892		if templ_7745c5c3_Err != nil {
1893			return templ_7745c5c3_Err
1894		}
1895		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 171, "\"><td colspan=\"")
1896		if templ_7745c5c3_Err != nil {
1897			return templ_7745c5c3_Err
1898		}
1899		var templ_7745c5c3_Var91 string
1900		templ_7745c5c3_Var91, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(cols))
1901		if templ_7745c5c3_Err != nil {
1902			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 356, Col: 26}
1903		}
1904		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var91)
1905		if templ_7745c5c3_Err != nil {
1906			return templ_7745c5c3_Err
1907		}
1908		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 172, "\"><button type=\"button\" data-src=\"")
1909		if templ_7745c5c3_Err != nil {
1910			return templ_7745c5c3_Err
1911		}
1912		var templ_7745c5c3_Var92 string
1913		templ_7745c5c3_Var92, templ_7745c5c3_Err = templ.ResolveAttributeValue(g.Src)
1914		if templ_7745c5c3_Err != nil {
1915			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 357, Col: 41}
1916		}
1917		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var92)
1918		if templ_7745c5c3_Err != nil {
1919			return templ_7745c5c3_Err
1920		}
1921		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 173, "\"><span aria-hidden=\"true\">⋯</span> ")
1922		if templ_7745c5c3_Err != nil {
1923			return templ_7745c5c3_Err
1924		}
1925		var templ_7745c5c3_Var93 string
1926		templ_7745c5c3_Var93, templ_7745c5c3_Err = templ.JoinStringErrs(g.Label())
1927		if templ_7745c5c3_Err != nil {
1928			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 358, Col: 51}
1929		}
1930		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var93))
1931		if templ_7745c5c3_Err != nil {
1932			return templ_7745c5c3_Err
1933		}
1934		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 174, "</button></td></tr>")
1935		if templ_7745c5c3_Err != nil {
1936			return templ_7745c5c3_Err
1937		}
1938		return nil
1939	})
1940}
1941
1942// DiffContext is the hidden lines of a gap, for /context: one body a layout,
1943// whose rows replace the rows of the gap in the table of that layout.
1944func DiffContext(c ContextRows) templ.Component {
1945	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1946		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
1947		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
1948			return templ_7745c5c3_CtxErr
1949		}
1950		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1951		if !templ_7745c5c3_IsBuffer {
1952			defer func() {
1953				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
1954				if templ_7745c5c3_Err == nil {
1955					templ_7745c5c3_Err = templ_7745c5c3_BufErr
1956				}
1957			}()
1958		}
1959		ctx = templ.InitializeContext(ctx)
1960		templ_7745c5c3_Var94 := templ.GetChildren(ctx)
1961		if templ_7745c5c3_Var94 == nil {
1962			templ_7745c5c3_Var94 = templ.NopComponent
1963		}
1964		ctx = templ.ClearChildren(ctx)
1965		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 175, "<table><tbody data-for=\"uni\">")
1966		if templ_7745c5c3_Err != nil {
1967			return templ_7745c5c3_Err
1968		}
1969		for _, ln := range c.Lines {
1970			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 176, "<tr class=\"ctx\"><td class=\"ln\">")
1971			if templ_7745c5c3_Err != nil {
1972				return templ_7745c5c3_Err
1973			}
1974			var templ_7745c5c3_Var95 string
1975			templ_7745c5c3_Var95, templ_7745c5c3_Err = templ.JoinStringErrs(ln.Old)
1976			if templ_7745c5c3_Err != nil {
1977				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 371, Col: 28}
1978			}
1979			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var95))
1980			if templ_7745c5c3_Err != nil {
1981				return templ_7745c5c3_Err
1982			}
1983			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 177, "</td><td class=\"ln\">")
1984			if templ_7745c5c3_Err != nil {
1985				return templ_7745c5c3_Err
1986			}
1987			var templ_7745c5c3_Var96 string
1988			templ_7745c5c3_Var96, templ_7745c5c3_Err = templ.JoinStringErrs(ln.New)
1989			if templ_7745c5c3_Err != nil {
1990				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 372, Col: 28}
1991			}
1992			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var96))
1993			if templ_7745c5c3_Err != nil {
1994				return templ_7745c5c3_Err
1995			}
1996			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 178, "</td><td class=\"m\">")
1997			if templ_7745c5c3_Err != nil {
1998				return templ_7745c5c3_Err
1999			}
2000			var templ_7745c5c3_Var97 string
2001			templ_7745c5c3_Var97, templ_7745c5c3_Err = templ.JoinStringErrs(ln.Mark)
2002			if templ_7745c5c3_Err != nil {
2003				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 373, Col: 28}
2004			}
2005			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var97))
2006			if templ_7745c5c3_Err != nil {
2007				return templ_7745c5c3_Err
2008			}
2009			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 179, "</td><td class=\"tx chroma\">")
2010			if templ_7745c5c3_Err != nil {
2011				return templ_7745c5c3_Err
2012			}
2013			templ_7745c5c3_Err = codeLine(ln).Render(ctx, templ_7745c5c3_Buffer)
2014			if templ_7745c5c3_Err != nil {
2015				return templ_7745c5c3_Err
2016			}
2017			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 180, "</td></tr>")
2018			if templ_7745c5c3_Err != nil {
2019				return templ_7745c5c3_Err
2020			}
2021		}
2022		if c.More != nil {
2023			templ_7745c5c3_Err = gapRow(*c.More, 4).Render(ctx, templ_7745c5c3_Buffer)
2024			if templ_7745c5c3_Err != nil {
2025				return templ_7745c5c3_Err
2026			}
2027		}
2028		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 181, "</tbody> <tbody data-for=\"spl\">")
2029		if templ_7745c5c3_Err != nil {
2030			return templ_7745c5c3_Err
2031		}
2032		for i := range c.Lines {
2033			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 182, "<tr>")
2034			if templ_7745c5c3_Err != nil {
2035				return templ_7745c5c3_Err
2036			}
2037			templ_7745c5c3_Err = splitSide(&c.Lines[i], true).Render(ctx, templ_7745c5c3_Buffer)
2038			if templ_7745c5c3_Err != nil {
2039				return templ_7745c5c3_Err
2040			}
2041			templ_7745c5c3_Err = splitSide(&c.Lines[i], false).Render(ctx, templ_7745c5c3_Buffer)
2042			if templ_7745c5c3_Err != nil {
2043				return templ_7745c5c3_Err
2044			}
2045			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 183, "</tr>")
2046			if templ_7745c5c3_Err != nil {
2047				return templ_7745c5c3_Err
2048			}
2049		}
2050		if c.More != nil {
2051			templ_7745c5c3_Err = gapRow(*c.More, 6).Render(ctx, templ_7745c5c3_Buffer)
2052			if templ_7745c5c3_Err != nil {
2053				return templ_7745c5c3_Err
2054			}
2055		}
2056		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 184, "</tbody></table>")
2057		if templ_7745c5c3_Err != nil {
2058			return templ_7745c5c3_Err
2059		}
2060		return nil
2061	})
2062}
2063
2064// splitSide is one half of a row of the split view; a side without a line is
2065// an empty cell.
2066func splitSide(ln *DiffLine, old bool) templ.Component {
2067	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
2068		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
2069		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
2070			return templ_7745c5c3_CtxErr
2071		}
2072		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
2073		if !templ_7745c5c3_IsBuffer {
2074			defer func() {
2075				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
2076				if templ_7745c5c3_Err == nil {
2077					templ_7745c5c3_Err = templ_7745c5c3_BufErr
2078				}
2079			}()
2080		}
2081		ctx = templ.InitializeContext(ctx)
2082		templ_7745c5c3_Var98 := templ.GetChildren(ctx)
2083		if templ_7745c5c3_Var98 == nil {
2084			templ_7745c5c3_Var98 = templ.NopComponent
2085		}
2086		ctx = templ.ClearChildren(ctx)
2087		if ln == nil {
2088			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 185, "<td class=\"ln none\"></td><td class=\"m none\"></td><td class=\"tx none\"></td>")
2089			if templ_7745c5c3_Err != nil {
2090				return templ_7745c5c3_Err
2091			}
2092		} else {
2093			var templ_7745c5c3_Var99 = []any{"ln", ln.Kind, templ.KV("sel", ln.Selected)}
2094			templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var99...)
2095			if templ_7745c5c3_Err != nil {
2096				return templ_7745c5c3_Err
2097			}
2098			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 186, "<td class=\"")
2099			if templ_7745c5c3_Err != nil {
2100				return templ_7745c5c3_Err
2101			}
2102			var templ_7745c5c3_Var100 string
2103			templ_7745c5c3_Var100, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var99).String())
2104			if templ_7745c5c3_Err != nil {
2105				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}
2106			}
2107			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var100)
2108			if templ_7745c5c3_Err != nil {
2109				return templ_7745c5c3_Err
2110			}
2111			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 187, "\">")
2112			if templ_7745c5c3_Err != nil {
2113				return templ_7745c5c3_Err
2114			}
2115			if old {
2116				templ_7745c5c3_Err = gutter(ln.Old, ln.OldHref).Render(ctx, templ_7745c5c3_Buffer)
2117				if templ_7745c5c3_Err != nil {
2118					return templ_7745c5c3_Err
2119				}
2120			} else {
2121				templ_7745c5c3_Err = gutter(ln.New, ln.NewHref).Render(ctx, templ_7745c5c3_Buffer)
2122				if templ_7745c5c3_Err != nil {
2123					return templ_7745c5c3_Err
2124				}
2125			}
2126			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 188, "</td>")
2127			if templ_7745c5c3_Err != nil {
2128				return templ_7745c5c3_Err
2129			}
2130			var templ_7745c5c3_Var101 = []any{"m", ln.Kind, templ.KV("sel", ln.Selected)}
2131			templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var101...)
2132			if templ_7745c5c3_Err != nil {
2133				return templ_7745c5c3_Err
2134			}
2135			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 189, "<td class=\"")
2136			if templ_7745c5c3_Err != nil {
2137				return templ_7745c5c3_Err
2138			}
2139			var templ_7745c5c3_Var102 string
2140			templ_7745c5c3_Var102, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var101).String())
2141			if templ_7745c5c3_Err != nil {
2142				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}
2143			}
2144			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var102)
2145			if templ_7745c5c3_Err != nil {
2146				return templ_7745c5c3_Err
2147			}
2148			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 190, "\">")
2149			if templ_7745c5c3_Err != nil {
2150				return templ_7745c5c3_Err
2151			}
2152			var templ_7745c5c3_Var103 string
2153			templ_7745c5c3_Var103, templ_7745c5c3_Err = templ.JoinStringErrs(ln.Mark)
2154			if templ_7745c5c3_Err != nil {
2155				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 410, Col: 68}
2156			}
2157			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var103))
2158			if templ_7745c5c3_Err != nil {
2159				return templ_7745c5c3_Err
2160			}
2161			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 191, "</td>")
2162			if templ_7745c5c3_Err != nil {
2163				return templ_7745c5c3_Err
2164			}
2165			var templ_7745c5c3_Var104 = []any{"tx", "chroma", ln.Kind, templ.KV("sel", ln.Selected)}
2166			templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var104...)
2167			if templ_7745c5c3_Err != nil {
2168				return templ_7745c5c3_Err
2169			}
2170			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 192, "<td class=\"")
2171			if templ_7745c5c3_Err != nil {
2172				return templ_7745c5c3_Err
2173			}
2174			var templ_7745c5c3_Var105 string
2175			templ_7745c5c3_Var105, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var104).String())
2176			if templ_7745c5c3_Err != nil {
2177				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}
2178			}
2179			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var105)
2180			if templ_7745c5c3_Err != nil {
2181				return templ_7745c5c3_Err
2182			}
2183			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 193, "\">")
2184			if templ_7745c5c3_Err != nil {
2185				return templ_7745c5c3_Err
2186			}
2187			templ_7745c5c3_Err = codeLine(*ln).Render(ctx, templ_7745c5c3_Buffer)
2188			if templ_7745c5c3_Err != nil {
2189				return templ_7745c5c3_Err
2190			}
2191			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 194, "</td>")
2192			if templ_7745c5c3_Err != nil {
2193				return templ_7745c5c3_Err
2194			}
2195		}
2196		return nil
2197	})
2198}
2199
2200// gutter is a line number of the gutter. On a merge request that can be
2201// commented on, it links to the form that comments on that line.
2202func gutter(n, href string) templ.Component {
2203	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
2204		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
2205		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
2206			return templ_7745c5c3_CtxErr
2207		}
2208		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
2209		if !templ_7745c5c3_IsBuffer {
2210			defer func() {
2211				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
2212				if templ_7745c5c3_Err == nil {
2213					templ_7745c5c3_Err = templ_7745c5c3_BufErr
2214				}
2215			}()
2216		}
2217		ctx = templ.InitializeContext(ctx)
2218		templ_7745c5c3_Var106 := templ.GetChildren(ctx)
2219		if templ_7745c5c3_Var106 == nil {
2220			templ_7745c5c3_Var106 = templ.NopComponent
2221		}
2222		ctx = templ.ClearChildren(ctx)
2223		if href != "" {
2224			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 195, "<a href=\"")
2225			if templ_7745c5c3_Err != nil {
2226				return templ_7745c5c3_Err
2227			}
2228			var templ_7745c5c3_Var107 templ.SafeURL
2229			templ_7745c5c3_Var107, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(href))
2230			if templ_7745c5c3_Err != nil {
2231				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 419, Col: 31}
2232			}
2233			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var107))
2234			if templ_7745c5c3_Err != nil {
2235				return templ_7745c5c3_Err
2236			}
2237			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 196, "\" title=\"comment on this line\">")
2238			if templ_7745c5c3_Err != nil {
2239				return templ_7745c5c3_Err
2240			}
2241			var templ_7745c5c3_Var108 string
2242			templ_7745c5c3_Var108, templ_7745c5c3_Err = templ.JoinStringErrs(n)
2243			if templ_7745c5c3_Err != nil {
2244				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 419, Col: 66}
2245			}
2246			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var108))
2247			if templ_7745c5c3_Err != nil {
2248				return templ_7745c5c3_Err
2249			}
2250			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 197, "</a>")
2251			if templ_7745c5c3_Err != nil {
2252				return templ_7745c5c3_Err
2253			}
2254		} else {
2255			var templ_7745c5c3_Var109 string
2256			templ_7745c5c3_Var109, templ_7745c5c3_Err = templ.JoinStringErrs(n)
2257			if templ_7745c5c3_Err != nil {
2258				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 421, Col: 5}
2259			}
2260			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var109))
2261			if templ_7745c5c3_Err != nil {
2262				return templ_7745c5c3_Err
2263			}
2264		}
2265		return nil
2266	})
2267}
2268
2269var _ = 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