v0.14.0 815fb98

components_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// Facts is a key/value block on an 11ch key column.
14func Facts(facts []Fact) 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_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "<dl class=\"kv\">")
36		if templ_7745c5c3_Err != nil {
37			return templ_7745c5c3_Err
38		}
39		for _, f := range facts {
40			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "<dt>")
41			if templ_7745c5c3_Err != nil {
42				return templ_7745c5c3_Err
43			}
44			var templ_7745c5c3_Var2 string
45			templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs(f.Key)
46			if templ_7745c5c3_Err != nil {
47				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 9, Col: 14}
48			}
49			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2))
50			if templ_7745c5c3_Err != nil {
51				return templ_7745c5c3_Err
52			}
53			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, "</dt>")
54			if templ_7745c5c3_Err != nil {
55				return templ_7745c5c3_Err
56			}
57			templ_7745c5c3_Err = FactValue(f).Render(ctx, templ_7745c5c3_Buffer)
58			if templ_7745c5c3_Err != nil {
59				return templ_7745c5c3_Err
60			}
61		}
62		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, "</dl>")
63		if templ_7745c5c3_Err != nil {
64			return templ_7745c5c3_Err
65		}
66		return nil
67	})
68}
69
70// CloneBlock is a block of copyable shell lines; each has its own [copy]
71// button, whose label says "copied" for 1.5 s.
72func CloneBlock(c Clone) templ.Component {
73	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
74		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
75		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
76			return templ_7745c5c3_CtxErr
77		}
78		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
79		if !templ_7745c5c3_IsBuffer {
80			defer func() {
81				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
82				if templ_7745c5c3_Err == nil {
83					templ_7745c5c3_Err = templ_7745c5c3_BufErr
84				}
85			}()
86		}
87		ctx = templ.InitializeContext(ctx)
88		templ_7745c5c3_Var3 := templ.GetChildren(ctx)
89		if templ_7745c5c3_Var3 == nil {
90			templ_7745c5c3_Var3 = templ.NopComponent
91		}
92		ctx = templ.ClearChildren(ctx)
93		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "<div class=\"clone\" id=\"")
94		if templ_7745c5c3_Err != nil {
95			return templ_7745c5c3_Err
96		}
97		var templ_7745c5c3_Var4 string
98		templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.ID)
99		if templ_7745c5c3_Err != nil {
100			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 18, Col: 29}
101		}
102		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var4)
103		if templ_7745c5c3_Err != nil {
104			return templ_7745c5c3_Err
105		}
106		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, "\">")
107		if templ_7745c5c3_Err != nil {
108			return templ_7745c5c3_Err
109		}
110		for _, line := range c.Lines {
111			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 7, "<div class=\"clone-line\"><span class=\"mute\" aria-hidden=\"true\">$ </span><code>")
112			if templ_7745c5c3_Err != nil {
113				return templ_7745c5c3_Err
114			}
115			var templ_7745c5c3_Var5 string
116			templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(line)
117			if templ_7745c5c3_Err != nil {
118				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 21, Col: 63}
119			}
120			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5))
121			if templ_7745c5c3_Err != nil {
122				return templ_7745c5c3_Err
123			}
124			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 8, "</code> <button type=\"button\" class=\"btn copy\" data-js data-label=\"Copy\" aria-label=\"")
125			if templ_7745c5c3_Err != nil {
126				return templ_7745c5c3_Err
127			}
128			var templ_7745c5c3_Var6 string
129			templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.ResolveAttributeValue("copy: " + line)
130			if templ_7745c5c3_Err != nil {
131				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 27, Col: 33}
132			}
133			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var6)
134			if templ_7745c5c3_Err != nil {
135				return templ_7745c5c3_Err
136			}
137			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, "\" hx-on:click=\"ermite.copy(this)\">Copy</button></div>")
138			if templ_7745c5c3_Err != nil {
139				return templ_7745c5c3_Err
140			}
141		}
142		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, "</div>")
143		if templ_7745c5c3_Err != nil {
144			return templ_7745c5c3_Err
145		}
146		return nil
147	})
148}
149
150// HomeRow is one row of the home list. Its id is the target of SSE swaps.
151func HomeRowView(r HomeRow) templ.Component {
152	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
153		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
154		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
155			return templ_7745c5c3_CtxErr
156		}
157		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
158		if !templ_7745c5c3_IsBuffer {
159			defer func() {
160				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
161				if templ_7745c5c3_Err == nil {
162					templ_7745c5c3_Err = templ_7745c5c3_BufErr
163				}
164			}()
165		}
166		ctx = templ.InitializeContext(ctx)
167		templ_7745c5c3_Var7 := templ.GetChildren(ctx)
168		if templ_7745c5c3_Var7 == nil {
169			templ_7745c5c3_Var7 = templ.NopComponent
170		}
171		ctx = templ.ClearChildren(ctx)
172		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, "<tr id=\"")
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.ResolveAttributeValue(r.ID)
178		if templ_7745c5c3_Err != nil {
179			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 37, Col: 14}
180		}
181		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var8)
182		if templ_7745c5c3_Err != nil {
183			return templ_7745c5c3_Err
184		}
185		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, "\"")
186		if templ_7745c5c3_Err != nil {
187			return templ_7745c5c3_Err
188		}
189		if r.Cursor {
190			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, " data-cursor")
191			if templ_7745c5c3_Err != nil {
192				return templ_7745c5c3_Err
193			}
194		}
195		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 14, "><td class=\"cur\" aria-hidden=\"true\"></td><td class=\"c-name\"><a href=\"")
196		if templ_7745c5c3_Err != nil {
197			return templ_7745c5c3_Err
198		}
199		var templ_7745c5c3_Var9 templ.SafeURL
200		templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(r.Href))
201		if templ_7745c5c3_Err != nil {
202			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 40, Col: 34}
203		}
204		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var9))
205		if templ_7745c5c3_Err != nil {
206			return templ_7745c5c3_Err
207		}
208		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, "\">")
209		if templ_7745c5c3_Err != nil {
210			return templ_7745c5c3_Err
211		}
212		var templ_7745c5c3_Var10 string
213		templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.JoinStringErrs(r.Name)
214		if templ_7745c5c3_Err != nil {
215			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 40, Col: 45}
216		}
217		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var10))
218		if templ_7745c5c3_Err != nil {
219			return templ_7745c5c3_Err
220		}
221		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "</a> ")
222		if templ_7745c5c3_Err != nil {
223			return templ_7745c5c3_Err
224		}
225		if r.Fresh {
226			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 17, "<span class=\"pill new\">new push</span>")
227			if templ_7745c5c3_Err != nil {
228				return templ_7745c5c3_Err
229			}
230		}
231		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 18, "</td><td class=\"c-desc dim\">")
232		if templ_7745c5c3_Err != nil {
233			return templ_7745c5c3_Err
234		}
235		var templ_7745c5c3_Var11 string
236		templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs(r.Desc)
237		if templ_7745c5c3_Err != nil {
238			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 45, Col: 33}
239		}
240		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11))
241		if templ_7745c5c3_Err != nil {
242			return templ_7745c5c3_Err
243		}
244		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 19, "</td><td class=\"c-when nowrap\"><time")
245		if templ_7745c5c3_Err != nil {
246			return templ_7745c5c3_Err
247		}
248		if r.PushedAt != "" {
249			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, " datetime=\"")
250			if templ_7745c5c3_Err != nil {
251				return templ_7745c5c3_Err
252			}
253			var templ_7745c5c3_Var12 string
254			templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.PushedAt)
255			if templ_7745c5c3_Err != nil {
256				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 49, Col: 26}
257			}
258			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var12)
259			if templ_7745c5c3_Err != nil {
260				return templ_7745c5c3_Err
261			}
262			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "\"")
263			if templ_7745c5c3_Err != nil {
264				return templ_7745c5c3_Err
265			}
266		}
267		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, ">")
268		if templ_7745c5c3_Err != nil {
269			return templ_7745c5c3_Err
270		}
271		var templ_7745c5c3_Var13 string
272		templ_7745c5c3_Var13, templ_7745c5c3_Err = templ.JoinStringErrs(r.Pushed)
273		if templ_7745c5c3_Err != nil {
274			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 51, Col: 14}
275		}
276		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var13))
277		if templ_7745c5c3_Err != nil {
278			return templ_7745c5c3_Err
279		}
280		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 23, "</time></td><td class=\"c-ref\">")
281		if templ_7745c5c3_Err != nil {
282			return templ_7745c5c3_Err
283		}
284		var templ_7745c5c3_Var14 string
285		templ_7745c5c3_Var14, templ_7745c5c3_Err = templ.JoinStringErrs(r.Branch)
286		if templ_7745c5c3_Err != nil {
287			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 53, Col: 30}
288		}
289		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var14))
290		if templ_7745c5c3_Err != nil {
291			return templ_7745c5c3_Err
292		}
293		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, "</td></tr>")
294		if templ_7745c5c3_Err != nil {
295			return templ_7745c5c3_Err
296		}
297		return nil
298	})
299}
300
301// Outline is the README outline; levels indent by 2ch, the h1 is bold.
302func Outline(headings []Heading) templ.Component {
303	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
304		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
305		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
306			return templ_7745c5c3_CtxErr
307		}
308		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
309		if !templ_7745c5c3_IsBuffer {
310			defer func() {
311				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
312				if templ_7745c5c3_Err == nil {
313					templ_7745c5c3_Err = templ_7745c5c3_BufErr
314				}
315			}()
316		}
317		ctx = templ.InitializeContext(ctx)
318		templ_7745c5c3_Var15 := templ.GetChildren(ctx)
319		if templ_7745c5c3_Var15 == nil {
320			templ_7745c5c3_Var15 = templ.NopComponent
321		}
322		ctx = templ.ClearChildren(ctx)
323		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 25, "<nav class=\"outline\" aria-label=\"Outline\">")
324		if templ_7745c5c3_Err != nil {
325			return templ_7745c5c3_Err
326		}
327		for _, h := range headings {
328			var templ_7745c5c3_Var16 = []any{"l" + itoa(h.Level)}
329			templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var16...)
330			if templ_7745c5c3_Err != nil {
331				return templ_7745c5c3_Err
332			}
333			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 26, "<a class=\"")
334			if templ_7745c5c3_Err != nil {
335				return templ_7745c5c3_Err
336			}
337			var templ_7745c5c3_Var17 string
338			templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var16).String())
339			if templ_7745c5c3_Err != nil {
340				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 1, Col: 0}
341			}
342			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var17)
343			if templ_7745c5c3_Err != nil {
344				return templ_7745c5c3_Err
345			}
346			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 27, "\" href=\"")
347			if templ_7745c5c3_Err != nil {
348				return templ_7745c5c3_Err
349			}
350			var templ_7745c5c3_Var18 templ.SafeURL
351			templ_7745c5c3_Var18, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL("#" + h.ID))
352			if templ_7745c5c3_Err != nil {
353				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 61, Col: 68}
354			}
355			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var18))
356			if templ_7745c5c3_Err != nil {
357				return templ_7745c5c3_Err
358			}
359			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 28, "\">")
360			if templ_7745c5c3_Err != nil {
361				return templ_7745c5c3_Err
362			}
363			var templ_7745c5c3_Var19 string
364			templ_7745c5c3_Var19, templ_7745c5c3_Err = templ.JoinStringErrs(h.Text)
365			if templ_7745c5c3_Err != nil {
366				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 61, Col: 79}
367			}
368			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var19))
369			if templ_7745c5c3_Err != nil {
370				return templ_7745c5c3_Err
371			}
372			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 29, "</a>")
373			if templ_7745c5c3_Err != nil {
374				return templ_7745c5c3_Err
375			}
376		}
377		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 30, "</nav>")
378		if templ_7745c5c3_Err != nil {
379			return templ_7745c5c3_Err
380		}
381		return nil
382	})
383}
384
385// ReadmeCard is a README in a card whose header names the file.
386func ReadmeCard(r Readme) templ.Component {
387	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
388		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
389		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
390			return templ_7745c5c3_CtxErr
391		}
392		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
393		if !templ_7745c5c3_IsBuffer {
394			defer func() {
395				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
396				if templ_7745c5c3_Err == nil {
397					templ_7745c5c3_Err = templ_7745c5c3_BufErr
398				}
399			}()
400		}
401		ctx = templ.InitializeContext(ctx)
402		templ_7745c5c3_Var20 := templ.GetChildren(ctx)
403		if templ_7745c5c3_Var20 == nil {
404			templ_7745c5c3_Var20 = templ.NopComponent
405		}
406		ctx = templ.ClearChildren(ctx)
407		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 31, "<section class=\"card readme\" aria-labelledby=\"readme-h\"><h2 class=\"card-h\" id=\"readme-h\"><span class=\"ico i-file\" aria-hidden=\"true\"></span> ")
408		if templ_7745c5c3_Err != nil {
409			return templ_7745c5c3_Err
410		}
411		var templ_7745c5c3_Var21 string
412		templ_7745c5c3_Var21, templ_7745c5c3_Err = templ.JoinStringErrs(r.Name)
413		if templ_7745c5c3_Err != nil {
414			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 71, Col: 11}
415		}
416		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var21))
417		if templ_7745c5c3_Err != nil {
418			return templ_7745c5c3_Err
419		}
420		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 32, "</h2>")
421		if templ_7745c5c3_Err != nil {
422			return templ_7745c5c3_Err
423		}
424		templ_7745c5c3_Err = ReadmeView(r).Render(ctx, templ_7745c5c3_Buffer)
425		if templ_7745c5c3_Err != nil {
426			return templ_7745c5c3_Err
427		}
428		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 33, "</section>")
429		if templ_7745c5c3_Err != nil {
430			return templ_7745c5c3_Err
431		}
432		return nil
433	})
434}
435
436// ReadmeView is a rendered README. Its HTML comes from the Markdown
437// renderer, which drops raw HTML and filters URLs.
438func ReadmeView(r Readme) templ.Component {
439	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
440		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
441		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
442			return templ_7745c5c3_CtxErr
443		}
444		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
445		if !templ_7745c5c3_IsBuffer {
446			defer func() {
447				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
448				if templ_7745c5c3_Err == nil {
449					templ_7745c5c3_Err = templ_7745c5c3_BufErr
450				}
451			}()
452		}
453		ctx = templ.InitializeContext(ctx)
454		templ_7745c5c3_Var22 := templ.GetChildren(ctx)
455		if templ_7745c5c3_Var22 == nil {
456			templ_7745c5c3_Var22 = templ.NopComponent
457		}
458		ctx = templ.ClearChildren(ctx)
459		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 34, "<article class=\"prose\" aria-label=\"")
460		if templ_7745c5c3_Err != nil {
461			return templ_7745c5c3_Err
462		}
463		var templ_7745c5c3_Var23 string
464		templ_7745c5c3_Var23, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.Name)
465		if templ_7745c5c3_Err != nil {
466			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 80, Col: 43}
467		}
468		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var23)
469		if templ_7745c5c3_Err != nil {
470			return templ_7745c5c3_Err
471		}
472		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 35, "\" hx-ignore>")
473		if templ_7745c5c3_Err != nil {
474			return templ_7745c5c3_Err
475		}
476		if r.Note != "" {
477			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 36, "<p class=\"dim\">")
478			if templ_7745c5c3_Err != nil {
479				return templ_7745c5c3_Err
480			}
481			var templ_7745c5c3_Var24 string
482			templ_7745c5c3_Var24, templ_7745c5c3_Err = templ.JoinStringErrs(r.Note)
483			if templ_7745c5c3_Err != nil {
484				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 82, Col: 26}
485			}
486			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var24))
487			if templ_7745c5c3_Err != nil {
488				return templ_7745c5c3_Err
489			}
490			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 37, "</p>")
491			if templ_7745c5c3_Err != nil {
492				return templ_7745c5c3_Err
493			}
494		} else {
495			templ_7745c5c3_Err = templ.Raw(r.HTML).Render(ctx, templ_7745c5c3_Buffer)
496			if templ_7745c5c3_Err != nil {
497				return templ_7745c5c3_Err
498			}
499		}
500		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 38, "</article>")
501		if templ_7745c5c3_Err != nil {
502			return templ_7745c5c3_Err
503		}
504		return nil
505	})
506}
507
508// CommitRows is a cursor table of commits: sha, subject with inline refs,
509// author, relative date (absolute in the title).
510func CommitRows(rows []CommitRow) templ.Component {
511	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
512		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
513		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
514			return templ_7745c5c3_CtxErr
515		}
516		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
517		if !templ_7745c5c3_IsBuffer {
518			defer func() {
519				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
520				if templ_7745c5c3_Err == nil {
521					templ_7745c5c3_Err = templ_7745c5c3_BufErr
522				}
523			}()
524		}
525		ctx = templ.InitializeContext(ctx)
526		templ_7745c5c3_Var25 := templ.GetChildren(ctx)
527		if templ_7745c5c3_Var25 == nil {
528			templ_7745c5c3_Var25 = templ.NopComponent
529		}
530		ctx = templ.ClearChildren(ctx)
531		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 39, "<table class=\"list commits\" aria-label=\"Commits\"><tbody data-rows>")
532		if templ_7745c5c3_Err != nil {
533			return templ_7745c5c3_Err
534		}
535		for _, c := range rows {
536			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, "<tr")
537			if templ_7745c5c3_Err != nil {
538				return templ_7745c5c3_Err
539			}
540			if c.ID != "" {
541				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, " id=\"")
542				if templ_7745c5c3_Err != nil {
543					return templ_7745c5c3_Err
544				}
545				var templ_7745c5c3_Var26 string
546				templ_7745c5c3_Var26, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.ID)
547				if templ_7745c5c3_Err != nil {
548					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 97, Col: 15}
549				}
550				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var26)
551				if templ_7745c5c3_Err != nil {
552					return templ_7745c5c3_Err
553				}
554				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, "\"")
555				if templ_7745c5c3_Err != nil {
556					return templ_7745c5c3_Err
557				}
558			}
559			if c.Cursor {
560				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, " data-cursor")
561				if templ_7745c5c3_Err != nil {
562					return templ_7745c5c3_Err
563				}
564			}
565			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 44, "><td class=\"cur\" aria-hidden=\"true\"></td><td class=\"c-sha mute\">")
566			if templ_7745c5c3_Err != nil {
567				return templ_7745c5c3_Err
568			}
569			var templ_7745c5c3_Var27 string
570			templ_7745c5c3_Var27, templ_7745c5c3_Err = templ.JoinStringErrs(c.Short)
571			if templ_7745c5c3_Err != nil {
572				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 102, Col: 37}
573			}
574			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var27))
575			if templ_7745c5c3_Err != nil {
576				return templ_7745c5c3_Err
577			}
578			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, "</td><td class=\"c-subject\"><a href=\"")
579			if templ_7745c5c3_Err != nil {
580				return templ_7745c5c3_Err
581			}
582			var templ_7745c5c3_Var28 templ.SafeURL
583			templ_7745c5c3_Var28, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.CHref))
584			if templ_7745c5c3_Err != nil {
585				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 104, Col: 38}
586			}
587			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var28))
588			if templ_7745c5c3_Err != nil {
589				return templ_7745c5c3_Err
590			}
591			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 46, "\">")
592			if templ_7745c5c3_Err != nil {
593				return templ_7745c5c3_Err
594			}
595			var templ_7745c5c3_Var29 string
596			templ_7745c5c3_Var29, templ_7745c5c3_Err = templ.JoinStringErrs(c.Subject)
597			if templ_7745c5c3_Err != nil {
598				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 104, Col: 52}
599			}
600			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var29))
601			if templ_7745c5c3_Err != nil {
602				return templ_7745c5c3_Err
603			}
604			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 47, "</a> ")
605			if templ_7745c5c3_Err != nil {
606				return templ_7745c5c3_Err
607			}
608			if c.Merge {
609				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 48, "<span class=\"pill\">merge</span> ")
610				if templ_7745c5c3_Err != nil {
611					return templ_7745c5c3_Err
612				}
613			}
614			for _, b := range c.Branches {
615				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 49, "<span class=\"pill\">")
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(b)
621				if templ_7745c5c3_Err != nil {
622					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 109, Col: 29}
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, 50, "</span> ")
629				if templ_7745c5c3_Err != nil {
630					return templ_7745c5c3_Err
631				}
632			}
633			for _, t := range c.Tags {
634				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 51, "<span class=\"pill tag\"><span class=\"sr\">tag </span>")
635				if templ_7745c5c3_Err != nil {
636					return templ_7745c5c3_Err
637				}
638				var templ_7745c5c3_Var31 string
639				templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.JoinStringErrs(t)
640				if templ_7745c5c3_Err != nil {
641					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 112, Col: 61}
642				}
643				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var31))
644				if templ_7745c5c3_Err != nil {
645					return templ_7745c5c3_Err
646				}
647				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 52, "</span>")
648				if templ_7745c5c3_Err != nil {
649					return templ_7745c5c3_Err
650				}
651			}
652			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 53, "</td><td class=\"c-ck\">")
653			if templ_7745c5c3_Err != nil {
654				return templ_7745c5c3_Err
655			}
656			templ_7745c5c3_Err = CommitChecks(c.Checks).Render(ctx, templ_7745c5c3_Buffer)
657			if templ_7745c5c3_Err != nil {
658				return templ_7745c5c3_Err
659			}
660			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 54, "</td><td class=\"c-who dim\">")
661			if templ_7745c5c3_Err != nil {
662				return templ_7745c5c3_Err
663			}
664			var templ_7745c5c3_Var32 string
665			templ_7745c5c3_Var32, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)
666			if templ_7745c5c3_Err != nil {
667				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 116, Col: 37}
668			}
669			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var32))
670			if templ_7745c5c3_Err != nil {
671				return templ_7745c5c3_Err
672			}
673			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 55, "</td><td class=\"c-when nowrap dim\"><time datetime=\"")
674			if templ_7745c5c3_Err != nil {
675				return templ_7745c5c3_Err
676			}
677			var templ_7745c5c3_Var33 string
678			templ_7745c5c3_Var33, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
679			if templ_7745c5c3_Err != nil {
680				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 117, Col: 60}
681			}
682			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var33)
683			if templ_7745c5c3_Err != nil {
684				return templ_7745c5c3_Err
685			}
686			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 56, "\" title=\"")
687			if templ_7745c5c3_Err != nil {
688				return templ_7745c5c3_Err
689			}
690			var templ_7745c5c3_Var34 string
691			templ_7745c5c3_Var34, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
692			if templ_7745c5c3_Err != nil {
693				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 117, Col: 79}
694			}
695			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var34)
696			if templ_7745c5c3_Err != nil {
697				return templ_7745c5c3_Err
698			}
699			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 57, "\">")
700			if templ_7745c5c3_Err != nil {
701				return templ_7745c5c3_Err
702			}
703			var templ_7745c5c3_Var35 string
704			templ_7745c5c3_Var35, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)
705			if templ_7745c5c3_Err != nil {
706				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 117, Col: 90}
707			}
708			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var35))
709			if templ_7745c5c3_Err != nil {
710				return templ_7745c5c3_Err
711			}
712			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 58, "</time></td></tr>")
713			if templ_7745c5c3_Err != nil {
714				return templ_7745c5c3_Err
715			}
716		}
717		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 59, "</tbody></table>")
718		if templ_7745c5c3_Err != nil {
719			return templ_7745c5c3_Err
720		}
721		return nil
722	})
723}
724
725var _ = 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