detached 973e682

diff_templ.go RawHistoryFolder

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