v0.18.1 e08f000

shell_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// Shell is the page: head, the header, the work area (content and rail), the
14// footer, the hint badge, the overlays and the key map. The content is the
15// children.
16func Shell(l Layout, rail templ.Component) templ.Component {
17	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
18		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
19		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
20			return templ_7745c5c3_CtxErr
21		}
22		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
23		if !templ_7745c5c3_IsBuffer {
24			defer func() {
25				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
26				if templ_7745c5c3_Err == nil {
27					templ_7745c5c3_Err = templ_7745c5c3_BufErr
28				}
29			}()
30		}
31		ctx = templ.InitializeContext(ctx)
32		templ_7745c5c3_Var1 := templ.GetChildren(ctx)
33		if templ_7745c5c3_Var1 == nil {
34			templ_7745c5c3_Var1 = templ.NopComponent
35		}
36		ctx = templ.ClearChildren(ctx)
37		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "<!doctype html><html lang=\"en\"><head><meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"><meta name=\"color-scheme\" content=\"light dark\"><title>")
38		if templ_7745c5c3_Err != nil {
39			return templ_7745c5c3_Err
40		}
41		var templ_7745c5c3_Var2 string
42		templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs(l.Title)
43		if templ_7745c5c3_Err != nil {
44			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 15, Col: 19}
45		}
46		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2))
47		if templ_7745c5c3_Err != nil {
48			return templ_7745c5c3_Err
49		}
50		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "</title><meta name=\"theme-color\" media=\"(prefers-color-scheme: light)\" content=\"#ffffff\"><meta name=\"theme-color\" media=\"(prefers-color-scheme: dark)\" content=\"#0c0c0c\"><meta name=\"apple-mobile-web-app-title\" content=\"ermite\"><link rel=\"icon\" type=\"image/svg+xml\" href=\"")
51		if templ_7745c5c3_Err != nil {
52			return templ_7745c5c3_Err
53		}
54		var templ_7745c5c3_Var3 templ.SafeURL
55		templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(l.Assets.Icon))
56		if templ_7745c5c3_Err != nil {
57			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 19, Col: 76}
58		}
59		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3))
60		if templ_7745c5c3_Err != nil {
61			return templ_7745c5c3_Err
62		}
63		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, "\"><link rel=\"apple-touch-icon\" href=\"")
64		if templ_7745c5c3_Err != nil {
65			return templ_7745c5c3_Err
66		}
67		var templ_7745c5c3_Var4 templ.SafeURL
68		templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(l.Assets.AppleIcon))
69		if templ_7745c5c3_Err != nil {
70			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 20, Col: 72}
71		}
72		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4))
73		if templ_7745c5c3_Err != nil {
74			return templ_7745c5c3_Err
75		}
76		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, "\"><link rel=\"manifest\" href=\"")
77		if templ_7745c5c3_Err != nil {
78			return templ_7745c5c3_Err
79		}
80		var templ_7745c5c3_Var5 templ.SafeURL
81		templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(l.Assets.Manifest))
82		if templ_7745c5c3_Err != nil {
83			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 21, Col: 63}
84		}
85		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5))
86		if templ_7745c5c3_Err != nil {
87			return templ_7745c5c3_Err
88		}
89		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "\"><link rel=\"preload\" href=\"")
90		if templ_7745c5c3_Err != nil {
91			return templ_7745c5c3_Err
92		}
93		var templ_7745c5c3_Var6 templ.SafeURL
94		templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(l.Assets.Font))
95		if templ_7745c5c3_Err != nil {
96			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 22, Col: 58}
97		}
98		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var6))
99		if templ_7745c5c3_Err != nil {
100			return templ_7745c5c3_Err
101		}
102		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, "\" as=\"font\" type=\"font/woff2\" crossorigin><link rel=\"stylesheet\" href=\"")
103		if templ_7745c5c3_Err != nil {
104			return templ_7745c5c3_Err
105		}
106		var templ_7745c5c3_Var7 templ.SafeURL
107		templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(l.Assets.CSS))
108		if templ_7745c5c3_Err != nil {
109			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 23, Col: 60}
110		}
111		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var7))
112		if templ_7745c5c3_Err != nil {
113			return templ_7745c5c3_Err
114		}
115		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 7, "\"><meta name=\"htmx-config\" content='{\"history\":false,\"includeIndicatorCSS\":false,\"extensions\":\"sse, hx-live\"}'><script src=\"")
116		if templ_7745c5c3_Err != nil {
117			return templ_7745c5c3_Err
118		}
119		var templ_7745c5c3_Var8 string
120		templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.ResolveAttributeValue(l.Assets.HTMX)
121		if templ_7745c5c3_Err != nil {
122			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 25, Col: 30}
123		}
124		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var8)
125		if templ_7745c5c3_Err != nil {
126			return templ_7745c5c3_Err
127		}
128		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 8, "\" defer></script><script src=\"")
129		if templ_7745c5c3_Err != nil {
130			return templ_7745c5c3_Err
131		}
132		var templ_7745c5c3_Var9 string
133		templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.ResolveAttributeValue(l.Assets.Live)
134		if templ_7745c5c3_Err != nil {
135			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 26, Col: 30}
136		}
137		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var9)
138		if templ_7745c5c3_Err != nil {
139			return templ_7745c5c3_Err
140		}
141		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, "\" defer></script><script src=\"")
142		if templ_7745c5c3_Err != nil {
143			return templ_7745c5c3_Err
144		}
145		var templ_7745c5c3_Var10 string
146		templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.ResolveAttributeValue(l.Assets.SSE)
147		if templ_7745c5c3_Err != nil {
148			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 27, Col: 29}
149		}
150		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var10)
151		if templ_7745c5c3_Err != nil {
152			return templ_7745c5c3_Err
153		}
154		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, "\" defer></script><script src=\"")
155		if templ_7745c5c3_Err != nil {
156			return templ_7745c5c3_Err
157		}
158		var templ_7745c5c3_Var11 string
159		templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.ResolveAttributeValue(l.Assets.App)
160		if templ_7745c5c3_Err != nil {
161			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 28, Col: 29}
162		}
163		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var11)
164		if templ_7745c5c3_Err != nil {
165			return templ_7745c5c3_Err
166		}
167		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, "\" defer></script><script src=\"")
168		if templ_7745c5c3_Err != nil {
169			return templ_7745c5c3_Err
170		}
171		var templ_7745c5c3_Var12 string
172		templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.ResolveAttributeValue(l.Assets.Files)
173		if templ_7745c5c3_Err != nil {
174			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 29, Col: 31}
175		}
176		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var12)
177		if templ_7745c5c3_Err != nil {
178			return templ_7745c5c3_Err
179		}
180		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, "\" defer></script><script src=\"")
181		if templ_7745c5c3_Err != nil {
182			return templ_7745c5c3_Err
183		}
184		var templ_7745c5c3_Var13 string
185		templ_7745c5c3_Var13, templ_7745c5c3_Err = templ.ResolveAttributeValue(l.Assets.Passkey)
186		if templ_7745c5c3_Err != nil {
187			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 30, Col: 33}
188		}
189		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var13)
190		if templ_7745c5c3_Err != nil {
191			return templ_7745c5c3_Err
192		}
193		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, "\" defer></script><script src=\"")
194		if templ_7745c5c3_Err != nil {
195			return templ_7745c5c3_Err
196		}
197		var templ_7745c5c3_Var14 string
198		templ_7745c5c3_Var14, templ_7745c5c3_Err = templ.ResolveAttributeValue(l.Assets.Log)
199		if templ_7745c5c3_Err != nil {
200			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 31, Col: 29}
201		}
202		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var14)
203		if templ_7745c5c3_Err != nil {
204			return templ_7745c5c3_Err
205		}
206		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 14, "\" defer></script></head><body data-ref=\"")
207		if templ_7745c5c3_Err != nil {
208			return templ_7745c5c3_Err
209		}
210		var templ_7745c5c3_Var15 string
211		templ_7745c5c3_Var15, templ_7745c5c3_Err = templ.ResolveAttributeValue(l.RefPath)
212		if templ_7745c5c3_Err != nil {
213			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 34, Col: 23}
214		}
215		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var15)
216		if templ_7745c5c3_Err != nil {
217			return templ_7745c5c3_Err
218		}
219		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, "\" data-sha=\"")
220		if templ_7745c5c3_Err != nil {
221			return templ_7745c5c3_Err
222		}
223		var templ_7745c5c3_Var16 string
224		templ_7745c5c3_Var16, templ_7745c5c3_Err = templ.ResolveAttributeValue(l.SHA)
225		if templ_7745c5c3_Err != nil {
226			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 35, Col: 19}
227		}
228		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var16)
229		if templ_7745c5c3_Err != nil {
230			return templ_7745c5c3_Err
231		}
232		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "\" data-sel=\"\" data-nav=\"\"")
233		if templ_7745c5c3_Err != nil {
234			return templ_7745c5c3_Err
235		}
236		if l.PathsURL != "" {
237			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 17, " data-paths=\"")
238			if templ_7745c5c3_Err != nil {
239				return templ_7745c5c3_Err
240			}
241			var templ_7745c5c3_Var17 string
242			templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.ResolveAttributeValue(l.PathsURL)
243			if templ_7745c5c3_Err != nil {
244				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 39, Col: 27}
245			}
246			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var17)
247			if templ_7745c5c3_Err != nil {
248				return templ_7745c5c3_Err
249			}
250			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 18, "\" data-blob=\"")
251			if templ_7745c5c3_Err != nil {
252				return templ_7745c5c3_Err
253			}
254			var templ_7745c5c3_Var18 string
255			templ_7745c5c3_Var18, templ_7745c5c3_Err = templ.ResolveAttributeValue(l.BlobBase)
256			if templ_7745c5c3_Err != nil {
257				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 40, Col: 26}
258			}
259			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var18)
260			if templ_7745c5c3_Err != nil {
261				return templ_7745c5c3_Err
262			}
263			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 19, "\"")
264			if templ_7745c5c3_Err != nil {
265				return templ_7745c5c3_Err
266			}
267		}
268		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, "><a class=\"skip\" href=\"#main\">skip to content</a>")
269		if templ_7745c5c3_Err != nil {
270			return templ_7745c5c3_Err
271		}
272		templ_7745c5c3_Err = Header(l).Render(ctx, templ_7745c5c3_Buffer)
273		if templ_7745c5c3_Err != nil {
274			return templ_7745c5c3_Err
275		}
276		var templ_7745c5c3_Var19 = []any{"work", templ.KV("has-rail", l.HasRail && rail != nil)}
277		templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var19...)
278		if templ_7745c5c3_Err != nil {
279			return templ_7745c5c3_Err
280		}
281		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "<div class=\"")
282		if templ_7745c5c3_Err != nil {
283			return templ_7745c5c3_Err
284		}
285		var templ_7745c5c3_Var20 string
286		templ_7745c5c3_Var20, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var19).String())
287		if templ_7745c5c3_Err != nil {
288			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 1, Col: 0}
289		}
290		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var20)
291		if templ_7745c5c3_Err != nil {
292			return templ_7745c5c3_Err
293		}
294		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "\">")
295		if templ_7745c5c3_Err != nil {
296			return templ_7745c5c3_Err
297		}
298		if l.Lede != "" {
299			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 23, "<section class=\"work-lede\" aria-label=\"Description\"><p class=\"lede\">")
300			if templ_7745c5c3_Err != nil {
301				return templ_7745c5c3_Err
302			}
303			var templ_7745c5c3_Var21 string
304			templ_7745c5c3_Var21, templ_7745c5c3_Err = templ.JoinStringErrs(l.Lede)
305			if templ_7745c5c3_Err != nil {
306				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 47, Col: 81}
307			}
308			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var21))
309			if templ_7745c5c3_Err != nil {
310				return templ_7745c5c3_Err
311			}
312			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, "</p></section>")
313			if templ_7745c5c3_Err != nil {
314				return templ_7745c5c3_Err
315			}
316		}
317		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 25, "<main id=\"main\" tabindex=\"-1\">")
318		if templ_7745c5c3_Err != nil {
319			return templ_7745c5c3_Err
320		}
321		templ_7745c5c3_Err = templ_7745c5c3_Var1.Render(ctx, templ_7745c5c3_Buffer)
322		if templ_7745c5c3_Err != nil {
323			return templ_7745c5c3_Err
324		}
325		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 26, "</main>")
326		if templ_7745c5c3_Err != nil {
327			return templ_7745c5c3_Err
328		}
329		if l.HasRail && rail != nil {
330			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 27, "<aside class=\"rail\" aria-label=\"Context\">")
331			if templ_7745c5c3_Err != nil {
332				return templ_7745c5c3_Err
333			}
334			templ_7745c5c3_Err = rail.Render(ctx, templ_7745c5c3_Buffer)
335			if templ_7745c5c3_Err != nil {
336				return templ_7745c5c3_Err
337			}
338			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 28, "</aside>")
339			if templ_7745c5c3_Err != nil {
340				return templ_7745c5c3_Err
341			}
342		}
343		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 29, "</div>")
344		if templ_7745c5c3_Err != nil {
345			return templ_7745c5c3_Err
346		}
347		templ_7745c5c3_Err = Footer(l).Render(ctx, templ_7745c5c3_Buffer)
348		if templ_7745c5c3_Err != nil {
349			return templ_7745c5c3_Err
350		}
351		templ_7745c5c3_Err = Hint(l).Render(ctx, templ_7745c5c3_Buffer)
352		if templ_7745c5c3_Err != nil {
353			return templ_7745c5c3_Err
354		}
355		templ_7745c5c3_Err = OverlayHelp().Render(ctx, templ_7745c5c3_Buffer)
356		if templ_7745c5c3_Err != nil {
357			return templ_7745c5c3_Err
358		}
359		templ_7745c5c3_Err = OverlayRefs(l).Render(ctx, templ_7745c5c3_Buffer)
360		if templ_7745c5c3_Err != nil {
361			return templ_7745c5c3_Err
362		}
363		templ_7745c5c3_Err = OverlayCmd(l.Cmd).Render(ctx, templ_7745c5c3_Buffer)
364		if templ_7745c5c3_Err != nil {
365			return templ_7745c5c3_Err
366		}
367		templ_7745c5c3_Err = Keys().Render(ctx, templ_7745c5c3_Buffer)
368		if templ_7745c5c3_Err != nil {
369			return templ_7745c5c3_Err
370		}
371		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 30, "</body></html>")
372		if templ_7745c5c3_Err != nil {
373			return templ_7745c5c3_Err
374		}
375		return nil
376	})
377}
378
379// Header is the page header: the logo (home), the path, the ref switcher,
380// the "go to" palette and the owner; inside a repository, the tabs below.
381func Header(l Layout) templ.Component {
382	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
383		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
384		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
385			return templ_7745c5c3_CtxErr
386		}
387		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
388		if !templ_7745c5c3_IsBuffer {
389			defer func() {
390				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
391				if templ_7745c5c3_Err == nil {
392					templ_7745c5c3_Err = templ_7745c5c3_BufErr
393				}
394			}()
395		}
396		ctx = templ.InitializeContext(ctx)
397		templ_7745c5c3_Var22 := templ.GetChildren(ctx)
398		if templ_7745c5c3_Var22 == nil {
399			templ_7745c5c3_Var22 = templ.NopComponent
400		}
401		ctx = templ.ClearChildren(ctx)
402		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 31, "<header class=\"hdr\"><div class=\"hdr-top\"><a class=\"brand\" href=\"/\" data-g=\"h\" aria-label=\"home\" title=\"home (g h)\"><span class=\"brand-mark\" aria-hidden=\"true\"></span></a> ")
403		if templ_7745c5c3_Err != nil {
404			return templ_7745c5c3_Err
405		}
406		if len(l.Crumbs) > 0 {
407			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 32, "<nav class=\"crumbs\" aria-label=\"Path\"><ol>")
408			if templ_7745c5c3_Err != nil {
409				return templ_7745c5c3_Err
410			}
411			for _, c := range l.Crumbs {
412				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 33, "<li>")
413				if templ_7745c5c3_Err != nil {
414					return templ_7745c5c3_Err
415				}
416				if c.Href != "" {
417					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 34, "<a href=\"")
418					if templ_7745c5c3_Err != nil {
419						return templ_7745c5c3_Err
420					}
421					var templ_7745c5c3_Var23 templ.SafeURL
422					templ_7745c5c3_Var23, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Href))
423					if templ_7745c5c3_Err != nil {
424						return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 83, Col: 38}
425					}
426					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var23))
427					if templ_7745c5c3_Err != nil {
428						return templ_7745c5c3_Err
429					}
430					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 35, "\"")
431					if templ_7745c5c3_Err != nil {
432						return templ_7745c5c3_Err
433					}
434					if c.Current {
435						templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 36, " aria-current=\"page\"")
436						if templ_7745c5c3_Err != nil {
437							return templ_7745c5c3_Err
438						}
439					}
440					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 37, ">")
441					if templ_7745c5c3_Err != nil {
442						return templ_7745c5c3_Err
443					}
444					var templ_7745c5c3_Var24 string
445					templ_7745c5c3_Var24, templ_7745c5c3_Err = templ.JoinStringErrs(c.Label)
446					if templ_7745c5c3_Err != nil {
447						return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 87, Col: 19}
448					}
449					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var24))
450					if templ_7745c5c3_Err != nil {
451						return templ_7745c5c3_Err
452					}
453					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 38, "</a>")
454					if templ_7745c5c3_Err != nil {
455						return templ_7745c5c3_Err
456					}
457				} else {
458					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 39, "<span")
459					if templ_7745c5c3_Err != nil {
460						return templ_7745c5c3_Err
461					}
462					if c.Current {
463						templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, " aria-current=\"page\"")
464						if templ_7745c5c3_Err != nil {
465							return templ_7745c5c3_Err
466						}
467					}
468					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, ">")
469					if templ_7745c5c3_Err != nil {
470						return templ_7745c5c3_Err
471					}
472					var templ_7745c5c3_Var25 string
473					templ_7745c5c3_Var25, templ_7745c5c3_Err = templ.JoinStringErrs(c.Label)
474					if templ_7745c5c3_Err != nil {
475						return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 93, Col: 19}
476					}
477					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var25))
478					if templ_7745c5c3_Err != nil {
479						return templ_7745c5c3_Err
480					}
481					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, "</span>")
482					if templ_7745c5c3_Err != nil {
483						return templ_7745c5c3_Err
484					}
485				}
486				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, "</li>")
487				if templ_7745c5c3_Err != nil {
488					return templ_7745c5c3_Err
489				}
490			}
491			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 44, "</ol></nav>")
492			if templ_7745c5c3_Err != nil {
493				return templ_7745c5c3_Err
494			}
495		}
496		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, "<div class=\"hdr-acts\">")
497		if templ_7745c5c3_Err != nil {
498			return templ_7745c5c3_Err
499		}
500		if l.Ref != "" {
501			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 46, "<a class=\"btn ref\" href=\"")
502			if templ_7745c5c3_Err != nil {
503				return templ_7745c5c3_Err
504			}
505			var templ_7745c5c3_Var26 templ.SafeURL
506			templ_7745c5c3_Var26, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(repoHref(l.Repo, "refs")))
507			if templ_7745c5c3_Err != nil {
508				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 104, Col: 52}
509			}
510			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var26))
511			if templ_7745c5c3_Err != nil {
512				return templ_7745c5c3_Err
513			}
514			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 47, "\" data-fire=\"refs\" aria-keyshortcuts=\"b\" title=\"switch branch or tag (b)\"><span class=\"ico i-branch\" aria-hidden=\"true\"></span> <span class=\"ref-name\">")
515			if templ_7745c5c3_Err != nil {
516				return templ_7745c5c3_Err
517			}
518			var templ_7745c5c3_Var27 string
519			templ_7745c5c3_Var27, templ_7745c5c3_Err = templ.JoinStringErrs(l.Ref)
520			if templ_7745c5c3_Err != nil {
521				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 110, Col: 36}
522			}
523			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var27))
524			if templ_7745c5c3_Err != nil {
525				return templ_7745c5c3_Err
526			}
527			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 48, "</span> <span class=\"sha\">")
528			if templ_7745c5c3_Err != nil {
529				return templ_7745c5c3_Err
530			}
531			var templ_7745c5c3_Var28 string
532			templ_7745c5c3_Var28, templ_7745c5c3_Err = templ.JoinStringErrs(l.Short)
533			if templ_7745c5c3_Err != nil {
534				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 111, Col: 33}
535			}
536			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var28))
537			if templ_7745c5c3_Err != nil {
538				return templ_7745c5c3_Err
539			}
540			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 49, "</span></a> ")
541			if templ_7745c5c3_Err != nil {
542				return templ_7745c5c3_Err
543			}
544		}
545		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 50, "<button type=\"button\" class=\"btn search\" data-js aria-haspopup=\"dialog\" aria-controls=\"panel-cmd\" aria-keyshortcuts=\"Control+K :\" title=\"go to a section, ref, file or repo (ctrl k or :)\" data-fire=\"cmd\"><span class=\"ico i-search\" aria-hidden=\"true\"></span> <span class=\"search-label\">Go to…</span> <kbd aria-hidden=\"true\">ctrl k</kbd></button> ")
546		if templ_7745c5c3_Err != nil {
547			return templ_7745c5c3_Err
548		}
549		if SignedIn(ctx) {
550			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 51, "<form class=\"owner\" method=\"post\" action=\"/-/logout\"><span class=\"owner-badge\" title=\"signed in as the owner\"><span class=\"ico i-user\" aria-hidden=\"true\"></span>")
551			if templ_7745c5c3_Err != nil {
552				return templ_7745c5c3_Err
553			}
554			var templ_7745c5c3_Var29 string
555			templ_7745c5c3_Var29, templ_7745c5c3_Err = templ.JoinStringErrs(l.Owner)
556			if templ_7745c5c3_Err != nil {
557				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 130, Col: 123}
558			}
559			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var29))
560			if templ_7745c5c3_Err != nil {
561				return templ_7745c5c3_Err
562			}
563			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 52, "</span> ")
564			if templ_7745c5c3_Err != nil {
565				return templ_7745c5c3_Err
566			}
567			if l.Passkeys {
568				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 53, "<a class=\"btn icon\" href=\"/-/passkeys\" aria-label=\"Passkeys\" title=\"passkeys: add or remove the passkeys that sign you in\"><span class=\"ico i-key\" aria-hidden=\"true\"></span></a> ")
569				if templ_7745c5c3_Err != nil {
570					return templ_7745c5c3_Err
571				}
572			}
573			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 54, "<button type=\"submit\" class=\"btn icon\" aria-label=\"Sign out\" title=\"sign out of this browser\"><span class=\"ico i-log-out\" aria-hidden=\"true\"></span></button></form>")
574			if templ_7745c5c3_Err != nil {
575				return templ_7745c5c3_Err
576			}
577		} else if l.Passkeys {
578			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 55, "<a class=\"btn icon\" href=\"/-/login\" aria-label=\"Sign in\" title=\"sign in with a passkey\"><span class=\"ico i-log-in\" aria-hidden=\"true\"></span></a>")
579			if templ_7745c5c3_Err != nil {
580				return templ_7745c5c3_Err
581			}
582		}
583		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 56, "</div></div>")
584		if templ_7745c5c3_Err != nil {
585			return templ_7745c5c3_Err
586		}
587		if len(l.Sections) > 0 {
588			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 57, "<nav class=\"tabs\" aria-label=\"Sections\"><ul>")
589			if templ_7745c5c3_Err != nil {
590				return templ_7745c5c3_Err
591			}
592			for _, s := range l.Sections {
593				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 58, "<li><a href=\"")
594				if templ_7745c5c3_Err != nil {
595					return templ_7745c5c3_Err
596				}
597				var templ_7745c5c3_Var30 templ.SafeURL
598				templ_7745c5c3_Var30, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(s.Href))
599				if templ_7745c5c3_Err != nil {
600					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 147, Col: 36}
601				}
602				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var30))
603				if templ_7745c5c3_Err != nil {
604					return templ_7745c5c3_Err
605				}
606				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 59, "\" data-key=\"")
607				if templ_7745c5c3_Err != nil {
608					return templ_7745c5c3_Err
609				}
610				var templ_7745c5c3_Var31 string
611				templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.ResolveAttributeValue(s.Key)
612				if templ_7745c5c3_Err != nil {
613					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 148, Col: 24}
614				}
615				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var31)
616				if templ_7745c5c3_Err != nil {
617					return templ_7745c5c3_Err
618				}
619				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 60, "\" aria-keyshortcuts=\"")
620				if templ_7745c5c3_Err != nil {
621					return templ_7745c5c3_Err
622				}
623				var templ_7745c5c3_Var32 string
624				templ_7745c5c3_Var32, templ_7745c5c3_Err = templ.ResolveAttributeValue(s.Key)
625				if templ_7745c5c3_Err != nil {
626					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 149, Col: 33}
627				}
628				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var32)
629				if templ_7745c5c3_Err != nil {
630					return templ_7745c5c3_Err
631				}
632				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 61, "\"")
633				if templ_7745c5c3_Err != nil {
634					return templ_7745c5c3_Err
635				}
636				if s.Current {
637					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 62, " aria-current=\"page\"")
638					if templ_7745c5c3_Err != nil {
639						return templ_7745c5c3_Err
640					}
641				}
642				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 63, ">")
643				if templ_7745c5c3_Err != nil {
644					return templ_7745c5c3_Err
645				}
646				var templ_7745c5c3_Var33 string
647				templ_7745c5c3_Var33, templ_7745c5c3_Err = templ.JoinStringErrs(s.Label)
648				if templ_7745c5c3_Err != nil {
649					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 154, Col: 17}
650				}
651				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var33))
652				if templ_7745c5c3_Err != nil {
653					return templ_7745c5c3_Err
654				}
655				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 64, " ")
656				if templ_7745c5c3_Err != nil {
657					return templ_7745c5c3_Err
658				}
659				if s.Count != "" {
660					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 65, "<span class=\"count\">")
661					if templ_7745c5c3_Err != nil {
662						return templ_7745c5c3_Err
663					}
664					var templ_7745c5c3_Var34 string
665					templ_7745c5c3_Var34, templ_7745c5c3_Err = templ.JoinStringErrs(s.Count)
666					if templ_7745c5c3_Err != nil {
667						return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 156, Col: 38}
668					}
669					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var34))
670					if templ_7745c5c3_Err != nil {
671						return templ_7745c5c3_Err
672					}
673					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 66, "<span class=\"sr\">")
674					if templ_7745c5c3_Err != nil {
675						return templ_7745c5c3_Err
676					}
677					var templ_7745c5c3_Var35 string
678					templ_7745c5c3_Var35, templ_7745c5c3_Err = templ.JoinStringErrs(" open")
679					if templ_7745c5c3_Err != nil {
680						return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 156, Col: 66}
681					}
682					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var35))
683					if templ_7745c5c3_Err != nil {
684						return templ_7745c5c3_Err
685					}
686					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 67, "</span></span> ")
687					if templ_7745c5c3_Err != nil {
688						return templ_7745c5c3_Err
689					}
690				}
691				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 68, "<kbd aria-hidden=\"true\">")
692				if templ_7745c5c3_Err != nil {
693					return templ_7745c5c3_Err
694				}
695				var templ_7745c5c3_Var36 string
696				templ_7745c5c3_Var36, templ_7745c5c3_Err = templ.JoinStringErrs(s.Key)
697				if templ_7745c5c3_Err != nil {
698					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 158, Col: 39}
699				}
700				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var36))
701				if templ_7745c5c3_Err != nil {
702					return templ_7745c5c3_Err
703				}
704				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 69, "</kbd></a></li>")
705				if templ_7745c5c3_Err != nil {
706					return templ_7745c5c3_Err
707				}
708			}
709			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 70, "</ul></nav>")
710			if templ_7745c5c3_Err != nil {
711				return templ_7745c5c3_Err
712			}
713		}
714		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 71, "</header>")
715		if templ_7745c5c3_Err != nil {
716			return templ_7745c5c3_Err
717		}
718		return nil
719	})
720}
721
722// Footer is the version and the link to the source of the running version,
723// which the AGPL §13 asks every user of the service to be offered.
724func Footer(l Layout) templ.Component {
725	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
726		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
727		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
728			return templ_7745c5c3_CtxErr
729		}
730		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
731		if !templ_7745c5c3_IsBuffer {
732			defer func() {
733				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
734				if templ_7745c5c3_Err == nil {
735					templ_7745c5c3_Err = templ_7745c5c3_BufErr
736				}
737			}()
738		}
739		ctx = templ.InitializeContext(ctx)
740		templ_7745c5c3_Var37 := templ.GetChildren(ctx)
741		if templ_7745c5c3_Var37 == nil {
742			templ_7745c5c3_Var37 = templ.NopComponent
743		}
744		ctx = templ.ClearChildren(ctx)
745		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 72, "<footer class=\"foot\"><span>ermite ")
746		if templ_7745c5c3_Err != nil {
747			return templ_7745c5c3_Err
748		}
749		var templ_7745c5c3_Var38 string
750		templ_7745c5c3_Var38, templ_7745c5c3_Err = templ.JoinStringErrs(l.Version)
751		if templ_7745c5c3_Err != nil {
752			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 172, Col: 26}
753		}
754		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var38))
755		if templ_7745c5c3_Err != nil {
756			return templ_7745c5c3_Err
757		}
758		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 73, "</span> <a href=\"")
759		if templ_7745c5c3_Err != nil {
760			return templ_7745c5c3_Err
761		}
762		var templ_7745c5c3_Var39 templ.SafeURL
763		templ_7745c5c3_Var39, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(l.SourceURL))
764		if templ_7745c5c3_Err != nil {
765			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 173, Col: 38}
766		}
767		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var39))
768		if templ_7745c5c3_Err != nil {
769			return templ_7745c5c3_Err
770		}
771		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 74, "\" rel=\"noopener\" title=\"source of this version (AGPL-3.0-or-later)\">source</a> <button type=\"button\" class=\"foot-keys\" data-js data-fire=\"help\" aria-haspopup=\"dialog\" aria-controls=\"panel-help\" aria-keyshortcuts=\"?\"><kbd aria-hidden=\"true\">?</kbd> keyboard shortcuts</button></footer>")
772		if templ_7745c5c3_Err != nil {
773			return templ_7745c5c3_Err
774		}
775		return nil
776	})
777}
778
779// Hint is the floating badge at the bottom right. It shows only what the
780// keyboard just did or what needs attention: the row position while j/k
781// move, the selected lines of a file, a flash message (permalink copied) and
782// a lost event stream. Empty, it takes no room.
783func Hint(l Layout) templ.Component {
784	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
785		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
786		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
787			return templ_7745c5c3_CtxErr
788		}
789		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
790		if !templ_7745c5c3_IsBuffer {
791			defer func() {
792				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
793				if templ_7745c5c3_Err == nil {
794					templ_7745c5c3_Err = templ_7745c5c3_BufErr
795				}
796			}()
797		}
798		ctx = templ.InitializeContext(ctx)
799		templ_7745c5c3_Var40 := templ.GetChildren(ctx)
800		if templ_7745c5c3_Var40 == nil {
801			templ_7745c5c3_Var40 = templ.NopComponent
802		}
803		ctx = templ.ClearChildren(ctx)
804		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 75, "<div class=\"hint\" role=\"status\" aria-live=\"polite\"><span class=\"hint-nav\" :text=\"document.body.dataset.nav || ''\"></span> <span class=\"hint-sel\" :text=\"document.body.dataset.sel ? document.body.dataset.sel + ' · y permalink' : ''\"></span> <span class=\"hint-flash\" :text=\"document.body.dataset.flash || ''\"></span>")
805		if templ_7745c5c3_Err != nil {
806			return templ_7745c5c3_Err
807		}
808		templ_7745c5c3_Err = Live(l).Render(ctx, templ_7745c5c3_Buffer)
809		if templ_7745c5c3_Err != nil {
810			return templ_7745c5c3_Err
811		}
812		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 76, "</div>")
813		if templ_7745c5c3_Err != nil {
814			return templ_7745c5c3_Err
815		}
816		return nil
817	})
818}
819
820var _ = 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 3

Tags 44

↑↓ moveenter openesc close