v0.21.0 ef38ad0

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

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 2

Tags 45

↑↓ moveenter openesc close