v0.1.0 3f267b5

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=\"copy\" 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: 26, 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=\"navigator.clipboard?.writeText(closest('.clone-line').querySelector('code').textContent); this.textContent = '[copied]'; await timeout('1500ms'); this.textContent = this.dataset.label\">[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: 36, 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: 39, 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: 39, 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=\"tagged\">● 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: 44, 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: 48, 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: 50, 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: 52, 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: 60, 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: 60, 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// ReadmeView is a rendered README. Its HTML comes from the Markdown
386// renderer, which drops raw HTML and filters URLs.
387func ReadmeView(r Readme) templ.Component {
388	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
389		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
390		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
391			return templ_7745c5c3_CtxErr
392		}
393		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
394		if !templ_7745c5c3_IsBuffer {
395			defer func() {
396				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
397				if templ_7745c5c3_Err == nil {
398					templ_7745c5c3_Err = templ_7745c5c3_BufErr
399				}
400			}()
401		}
402		ctx = templ.InitializeContext(ctx)
403		templ_7745c5c3_Var20 := templ.GetChildren(ctx)
404		if templ_7745c5c3_Var20 == nil {
405			templ_7745c5c3_Var20 = templ.NopComponent
406		}
407		ctx = templ.ClearChildren(ctx)
408		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 31, "<article class=\"prose\" aria-label=\"")
409		if templ_7745c5c3_Err != nil {
410			return templ_7745c5c3_Err
411		}
412		var templ_7745c5c3_Var21 string
413		templ_7745c5c3_Var21, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.Name)
414		if templ_7745c5c3_Err != nil {
415			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 68, Col: 43}
416		}
417		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var21)
418		if templ_7745c5c3_Err != nil {
419			return templ_7745c5c3_Err
420		}
421		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 32, "\">")
422		if templ_7745c5c3_Err != nil {
423			return templ_7745c5c3_Err
424		}
425		if r.Note != "" {
426			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 33, "<p class=\"dim\">")
427			if templ_7745c5c3_Err != nil {
428				return templ_7745c5c3_Err
429			}
430			var templ_7745c5c3_Var22 string
431			templ_7745c5c3_Var22, templ_7745c5c3_Err = templ.JoinStringErrs(r.Note)
432			if templ_7745c5c3_Err != nil {
433				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 70, Col: 26}
434			}
435			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var22))
436			if templ_7745c5c3_Err != nil {
437				return templ_7745c5c3_Err
438			}
439			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 34, "</p>")
440			if templ_7745c5c3_Err != nil {
441				return templ_7745c5c3_Err
442			}
443		} else {
444			templ_7745c5c3_Err = templ.Raw(r.HTML).Render(ctx, templ_7745c5c3_Buffer)
445			if templ_7745c5c3_Err != nil {
446				return templ_7745c5c3_Err
447			}
448		}
449		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 35, "</article>")
450		if templ_7745c5c3_Err != nil {
451			return templ_7745c5c3_Err
452		}
453		return nil
454	})
455}
456
457// CommitRows is a cursor table of commits: sha, subject with inline refs,
458// author, relative date (absolute in the title).
459func CommitRows(rows []CommitRow) templ.Component {
460	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
461		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
462		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
463			return templ_7745c5c3_CtxErr
464		}
465		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
466		if !templ_7745c5c3_IsBuffer {
467			defer func() {
468				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
469				if templ_7745c5c3_Err == nil {
470					templ_7745c5c3_Err = templ_7745c5c3_BufErr
471				}
472			}()
473		}
474		ctx = templ.InitializeContext(ctx)
475		templ_7745c5c3_Var23 := templ.GetChildren(ctx)
476		if templ_7745c5c3_Var23 == nil {
477			templ_7745c5c3_Var23 = templ.NopComponent
478		}
479		ctx = templ.ClearChildren(ctx)
480		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 36, "<table class=\"list commits\" aria-label=\"Commits\"><tbody data-rows>")
481		if templ_7745c5c3_Err != nil {
482			return templ_7745c5c3_Err
483		}
484		for _, c := range rows {
485			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 37, "<tr")
486			if templ_7745c5c3_Err != nil {
487				return templ_7745c5c3_Err
488			}
489			if c.ID != "" {
490				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 38, " id=\"")
491				if templ_7745c5c3_Err != nil {
492					return templ_7745c5c3_Err
493				}
494				var templ_7745c5c3_Var24 string
495				templ_7745c5c3_Var24, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.ID)
496				if templ_7745c5c3_Err != nil {
497					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 85, Col: 15}
498				}
499				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var24)
500				if templ_7745c5c3_Err != nil {
501					return templ_7745c5c3_Err
502				}
503				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 39, "\"")
504				if templ_7745c5c3_Err != nil {
505					return templ_7745c5c3_Err
506				}
507			}
508			if c.Cursor {
509				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, " data-cursor")
510				if templ_7745c5c3_Err != nil {
511					return templ_7745c5c3_Err
512				}
513			}
514			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, "><td class=\"cur\" aria-hidden=\"true\"></td><td class=\"c-sha mute\">")
515			if templ_7745c5c3_Err != nil {
516				return templ_7745c5c3_Err
517			}
518			var templ_7745c5c3_Var25 string
519			templ_7745c5c3_Var25, templ_7745c5c3_Err = templ.JoinStringErrs(c.Short)
520			if templ_7745c5c3_Err != nil {
521				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 90, Col: 37}
522			}
523			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var25))
524			if templ_7745c5c3_Err != nil {
525				return templ_7745c5c3_Err
526			}
527			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, "</td><td class=\"c-subject\"><a href=\"")
528			if templ_7745c5c3_Err != nil {
529				return templ_7745c5c3_Err
530			}
531			var templ_7745c5c3_Var26 templ.SafeURL
532			templ_7745c5c3_Var26, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.CHref))
533			if templ_7745c5c3_Err != nil {
534				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 92, Col: 38}
535			}
536			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var26))
537			if templ_7745c5c3_Err != nil {
538				return templ_7745c5c3_Err
539			}
540			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, "\">")
541			if templ_7745c5c3_Err != nil {
542				return templ_7745c5c3_Err
543			}
544			var templ_7745c5c3_Var27 string
545			templ_7745c5c3_Var27, templ_7745c5c3_Err = templ.JoinStringErrs(c.Subject)
546			if templ_7745c5c3_Err != nil {
547				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 92, Col: 52}
548			}
549			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var27))
550			if templ_7745c5c3_Err != nil {
551				return templ_7745c5c3_Err
552			}
553			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 44, "</a> ")
554			if templ_7745c5c3_Err != nil {
555				return templ_7745c5c3_Err
556			}
557			if c.Merge {
558				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, "<span class=\"tagged\">(merge)</span> ")
559				if templ_7745c5c3_Err != nil {
560					return templ_7745c5c3_Err
561				}
562			}
563			for _, b := range c.Branches {
564				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 46, "<span class=\"tagged\">[")
565				if templ_7745c5c3_Err != nil {
566					return templ_7745c5c3_Err
567				}
568				var templ_7745c5c3_Var28 string
569				templ_7745c5c3_Var28, templ_7745c5c3_Err = templ.JoinStringErrs(b)
570				if templ_7745c5c3_Err != nil {
571					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 97, Col: 32}
572				}
573				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var28))
574				if templ_7745c5c3_Err != nil {
575					return templ_7745c5c3_Err
576				}
577				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 47, "]</span> ")
578				if templ_7745c5c3_Err != nil {
579					return templ_7745c5c3_Err
580				}
581			}
582			for _, t := range c.Tags {
583				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 48, "<span class=\"tagged\">[tag: ")
584				if templ_7745c5c3_Err != nil {
585					return templ_7745c5c3_Err
586				}
587				var templ_7745c5c3_Var29 string
588				templ_7745c5c3_Var29, templ_7745c5c3_Err = templ.JoinStringErrs(t)
589				if templ_7745c5c3_Err != nil {
590					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 100, Col: 37}
591				}
592				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var29))
593				if templ_7745c5c3_Err != nil {
594					return templ_7745c5c3_Err
595				}
596				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 49, "]</span>")
597				if templ_7745c5c3_Err != nil {
598					return templ_7745c5c3_Err
599				}
600			}
601			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 50, "</td><td class=\"c-who dim\">")
602			if templ_7745c5c3_Err != nil {
603				return templ_7745c5c3_Err
604			}
605			var templ_7745c5c3_Var30 string
606			templ_7745c5c3_Var30, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)
607			if templ_7745c5c3_Err != nil {
608				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 103, Col: 37}
609			}
610			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var30))
611			if templ_7745c5c3_Err != nil {
612				return templ_7745c5c3_Err
613			}
614			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 51, "</td><td class=\"c-when nowrap dim\"><time datetime=\"")
615			if templ_7745c5c3_Err != nil {
616				return templ_7745c5c3_Err
617			}
618			var templ_7745c5c3_Var31 string
619			templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
620			if templ_7745c5c3_Err != nil {
621				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 104, Col: 60}
622			}
623			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var31)
624			if templ_7745c5c3_Err != nil {
625				return templ_7745c5c3_Err
626			}
627			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 52, "\" title=\"")
628			if templ_7745c5c3_Err != nil {
629				return templ_7745c5c3_Err
630			}
631			var templ_7745c5c3_Var32 string
632			templ_7745c5c3_Var32, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
633			if templ_7745c5c3_Err != nil {
634				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 104, Col: 79}
635			}
636			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var32)
637			if templ_7745c5c3_Err != nil {
638				return templ_7745c5c3_Err
639			}
640			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 53, "\">")
641			if templ_7745c5c3_Err != nil {
642				return templ_7745c5c3_Err
643			}
644			var templ_7745c5c3_Var33 string
645			templ_7745c5c3_Var33, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)
646			if templ_7745c5c3_Err != nil {
647				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 104, Col: 90}
648			}
649			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var33))
650			if templ_7745c5c3_Err != nil {
651				return templ_7745c5c3_Err
652			}
653			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 54, "</time></td></tr>")
654			if templ_7745c5c3_Err != nil {
655				return templ_7745c5c3_Err
656			}
657		}
658		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 55, "</tbody></table>")
659		if templ_7745c5c3_Err != nil {
660			return templ_7745c5c3_Err
661		}
662		return nil
663	})
664}
665
666var _ = 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