v0.4.0 3027a40

diff_templ.go RawHistoryFolder

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

Tags 45

↑↓ moveenter openesc close