v0.26.1 dfd6f0b

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