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
13import "fmt"
14
15// Home is the repository list.
16func Home(l Layout, p HomePage) templ.Component {
17 return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
18 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
19 if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
20 return templ_7745c5c3_CtxErr
21 }
22 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
23 if !templ_7745c5c3_IsBuffer {
24 defer func() {
25 templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
26 if templ_7745c5c3_Err == nil {
27 templ_7745c5c3_Err = templ_7745c5c3_BufErr
28 }
29 }()
30 }
31 ctx = templ.InitializeContext(ctx)
32 templ_7745c5c3_Var1 := templ.GetChildren(ctx)
33 if templ_7745c5c3_Var1 == nil {
34 templ_7745c5c3_Var1 = templ.NopComponent
35 }
36 ctx = templ.ClearChildren(ctx)
37 templ_7745c5c3_Var2 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
38 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
39 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
40 if !templ_7745c5c3_IsBuffer {
41 defer func() {
42 templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
43 if templ_7745c5c3_Err == nil {
44 templ_7745c5c3_Err = templ_7745c5c3_BufErr
45 }
46 }()
47 }
48 ctx = templ.InitializeContext(ctx)
49 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "<h1 class=\"sr\">Repositories</h1><div class=\"home\" data-layout=\"cards\"><section class=\"home-repos\" aria-label=\"Repositories\"><div class=\"home-bar\"><div class=\"filter\"><label for=\"home-filter\" class=\"sr\">filter</label> <input id=\"home-filter\" type=\"search\" data-filter=\"#repo-rows > li\" placeholder=\"Filter repositories…\" autocomplete=\"off\" hx-on:input=\"ermite.filter(this)\"></div><nav class=\"sort\" aria-label=\"Sort repositories\"><span class=\"mute\">sort</span> ")
50 if templ_7745c5c3_Err != nil {
51 return templ_7745c5c3_Err
52 }
53 for _, s := range p.Sorts {
54 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "<a href=\"")
55 if templ_7745c5c3_Err != nil {
56 return templ_7745c5c3_Err
57 }
58 var templ_7745c5c3_Var3 templ.SafeURL
59 templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(s.Href))
60 if templ_7745c5c3_Err != nil {
61 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 29, Col: 36}
62 }
63 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3))
64 if templ_7745c5c3_Err != nil {
65 return templ_7745c5c3_Err
66 }
67 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, "\"")
68 if templ_7745c5c3_Err != nil {
69 return templ_7745c5c3_Err
70 }
71 if s.Mark != "" {
72 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, " aria-current=\"true\"")
73 if templ_7745c5c3_Err != nil {
74 return templ_7745c5c3_Err
75 }
76 }
77 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, ">")
78 if templ_7745c5c3_Err != nil {
79 return templ_7745c5c3_Err
80 }
81 var templ_7745c5c3_Var4 string
82 templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(s.Label)
83 if templ_7745c5c3_Err != nil {
84 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 34, Col: 17}
85 }
86 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4))
87 if templ_7745c5c3_Err != nil {
88 return templ_7745c5c3_Err
89 }
90 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, " ")
91 if templ_7745c5c3_Err != nil {
92 return templ_7745c5c3_Err
93 }
94 if s.Mark != "" {
95 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 7, "<span aria-hidden=\"true\">")
96 if templ_7745c5c3_Err != nil {
97 return templ_7745c5c3_Err
98 }
99 var templ_7745c5c3_Var5 string
100 templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(s.Mark)
101 if templ_7745c5c3_Err != nil {
102 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 36, Col: 42}
103 }
104 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5))
105 if templ_7745c5c3_Err != nil {
106 return templ_7745c5c3_Err
107 }
108 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 8, "</span> <span class=\"sr\">")
109 if templ_7745c5c3_Err != nil {
110 return templ_7745c5c3_Err
111 }
112 var templ_7745c5c3_Var6 string
113 templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinStringErrs(", " + s.State)
114 if templ_7745c5c3_Err != nil {
115 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 37, Col: 42}
116 }
117 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var6))
118 if templ_7745c5c3_Err != nil {
119 return templ_7745c5c3_Err
120 }
121 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, "</span>")
122 if templ_7745c5c3_Err != nil {
123 return templ_7745c5c3_Err
124 }
125 }
126 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, "</a>")
127 if templ_7745c5c3_Err != nil {
128 return templ_7745c5c3_Err
129 }
130 }
131 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, "</nav><div class=\"layout-switch\" role=\"group\" aria-label=\"Layout\" data-js><button type=\"button\" class=\"btn icon\" data-set-layout=\"cards\" aria-pressed=\"true\" title=\"Cards\" aria-label=\"Cards\"><span class=\"ico i-cards\" aria-hidden=\"true\"></span></button> <button type=\"button\" class=\"btn icon\" data-set-layout=\"split\" aria-pressed=\"false\" title=\"Two columns\" aria-label=\"Two columns\"><span class=\"ico i-split\" aria-hidden=\"true\"></span></button> <button type=\"button\" class=\"btn icon\" data-set-layout=\"compact\" aria-pressed=\"false\" title=\"Compact list\" aria-label=\"Compact list\"><span class=\"ico i-compact\" aria-hidden=\"true\"></span></button></div></div><ul class=\"repos\" id=\"repo-rows\" data-rows data-sort=\"")
132 if templ_7745c5c3_Err != nil {
133 return templ_7745c5c3_Err
134 }
135 var templ_7745c5c3_Var7 string
136 templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Sort)
137 if templ_7745c5c3_Err != nil {
138 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 54, Col: 65}
139 }
140 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var7)
141 if templ_7745c5c3_Err != nil {
142 return templ_7745c5c3_Err
143 }
144 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, "\" data-desc=\"")
145 if templ_7745c5c3_Err != nil {
146 return templ_7745c5c3_Err
147 }
148 var templ_7745c5c3_Var8 string
149 templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.ResolveAttributeValue(fmt.Sprint(p.Desc))
150 if templ_7745c5c3_Err != nil {
151 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 54, Col: 98}
152 }
153 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var8)
154 if templ_7745c5c3_Err != nil {
155 return templ_7745c5c3_Err
156 }
157 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, "\">")
158 if templ_7745c5c3_Err != nil {
159 return templ_7745c5c3_Err
160 }
161 for _, r := range p.Rows {
162 templ_7745c5c3_Err = HomeRowView(r).Render(ctx, templ_7745c5c3_Buffer)
163 if templ_7745c5c3_Err != nil {
164 return templ_7745c5c3_Err
165 }
166 }
167 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 14, "</ul>")
168 if templ_7745c5c3_Err != nil {
169 return templ_7745c5c3_Err
170 }
171 if len(p.Rows) == 0 {
172 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, "<p class=\"lede dim\">no repositories yet.</p>")
173 if templ_7745c5c3_Err != nil {
174 return templ_7745c5c3_Err
175 }
176 }
177 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "</section></div>")
178 if templ_7745c5c3_Err != nil {
179 return templ_7745c5c3_Err
180 }
181 return nil
182 })
183 templ_7745c5c3_Err = Shell(l, nil).Render(templ.WithChildren(ctx, templ_7745c5c3_Var2), templ_7745c5c3_Buffer)
184 if templ_7745c5c3_Err != nil {
185 return templ_7745c5c3_Err
186 }
187 return nil
188 })
189}
190
191// Summary is the summary of a repository: the README reads in the main
192// column at the reading measure; what one acts on sits in the rail.
193func Summary(l Layout, p SummaryPage) templ.Component {
194 return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
195 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
196 if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
197 return templ_7745c5c3_CtxErr
198 }
199 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
200 if !templ_7745c5c3_IsBuffer {
201 defer func() {
202 templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
203 if templ_7745c5c3_Err == nil {
204 templ_7745c5c3_Err = templ_7745c5c3_BufErr
205 }
206 }()
207 }
208 ctx = templ.InitializeContext(ctx)
209 templ_7745c5c3_Var9 := templ.GetChildren(ctx)
210 if templ_7745c5c3_Var9 == nil {
211 templ_7745c5c3_Var9 = templ.NopComponent
212 }
213 ctx = templ.ClearChildren(ctx)
214 templ_7745c5c3_Var10 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
215 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
216 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
217 if !templ_7745c5c3_IsBuffer {
218 defer func() {
219 templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
220 if templ_7745c5c3_Err == nil {
221 templ_7745c5c3_Err = templ_7745c5c3_BufErr
222 }
223 }()
224 }
225 ctx = templ.InitializeContext(ctx)
226 if p.Readme != nil {
227 templ_7745c5c3_Err = ReadmeCard(*p.Readme).Render(ctx, templ_7745c5c3_Buffer)
228 if templ_7745c5c3_Err != nil {
229 return templ_7745c5c3_Err
230 }
231 }
232 return nil
233 })
234 templ_7745c5c3_Err = Shell(l, summaryRail(p)).Render(templ.WithChildren(ctx, templ_7745c5c3_Var10), templ_7745c5c3_Buffer)
235 if templ_7745c5c3_Err != nil {
236 return templ_7745c5c3_Err
237 }
238 return nil
239 })
240}
241
242// latestTagFact is the "latest tag" row of About: the newest tag (its
243// commit subject on hover), how old it is, and the count of tags, a link to
244// all of them. With too many tags to date them, the count only.
245func latestTagFact(t LatestTag) templ.Component {
246 return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
247 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
248 if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
249 return templ_7745c5c3_CtxErr
250 }
251 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
252 if !templ_7745c5c3_IsBuffer {
253 defer func() {
254 templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
255 if templ_7745c5c3_Err == nil {
256 templ_7745c5c3_Err = templ_7745c5c3_BufErr
257 }
258 }()
259 }
260 ctx = templ.InitializeContext(ctx)
261 templ_7745c5c3_Var11 := templ.GetChildren(ctx)
262 if templ_7745c5c3_Var11 == nil {
263 templ_7745c5c3_Var11 = templ.NopComponent
264 }
265 ctx = templ.ClearChildren(ctx)
266 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 17, "<dt>latest tag</dt><dd class=\"latest-tag\">")
267 if templ_7745c5c3_Err != nil {
268 return templ_7745c5c3_Err
269 }
270 if t.Name != "" {
271 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 18, "<a class=\"tag-name\" href=\"")
272 if templ_7745c5c3_Err != nil {
273 return templ_7745c5c3_Err
274 }
275 var templ_7745c5c3_Var12 templ.SafeURL
276 templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(t.Href))
277 if templ_7745c5c3_Err != nil {
278 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 84, Col: 51}
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, 19, "\" title=\"")
285 if templ_7745c5c3_Err != nil {
286 return templ_7745c5c3_Err
287 }
288 var templ_7745c5c3_Var13 string
289 templ_7745c5c3_Var13, templ_7745c5c3_Err = templ.ResolveAttributeValue(t.Subject)
290 if templ_7745c5c3_Err != nil {
291 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 84, Col: 71}
292 }
293 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var13)
294 if templ_7745c5c3_Err != nil {
295 return templ_7745c5c3_Err
296 }
297 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, "\">")
298 if templ_7745c5c3_Err != nil {
299 return templ_7745c5c3_Err
300 }
301 var templ_7745c5c3_Var14 string
302 templ_7745c5c3_Var14, templ_7745c5c3_Err = templ.JoinStringErrs(t.Name)
303 if templ_7745c5c3_Err != nil {
304 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 84, Col: 82}
305 }
306 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var14))
307 if templ_7745c5c3_Err != nil {
308 return templ_7745c5c3_Err
309 }
310 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "</a> ")
311 if templ_7745c5c3_Err != nil {
312 return templ_7745c5c3_Err
313 }
314 if t.WhenAt != "" {
315 var templ_7745c5c3_Var15 string
316 templ_7745c5c3_Var15, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")
317 if templ_7745c5c3_Err != nil {
318 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 86, Col: 12}
319 }
320 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var15))
321 if templ_7745c5c3_Err != nil {
322 return templ_7745c5c3_Err
323 }
324 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "<time datetime=\"")
325 if templ_7745c5c3_Err != nil {
326 return templ_7745c5c3_Err
327 }
328 var templ_7745c5c3_Var16 string
329 templ_7745c5c3_Var16, templ_7745c5c3_Err = templ.ResolveAttributeValue(t.WhenAt)
330 if templ_7745c5c3_Err != nil {
331 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 86, Col: 39}
332 }
333 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var16)
334 if templ_7745c5c3_Err != nil {
335 return templ_7745c5c3_Err
336 }
337 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 23, "\" title=\"")
338 if templ_7745c5c3_Err != nil {
339 return templ_7745c5c3_Err
340 }
341 var templ_7745c5c3_Var17 string
342 templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.ResolveAttributeValue(t.WhenAt)
343 if templ_7745c5c3_Err != nil {
344 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 86, Col: 58}
345 }
346 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var17)
347 if templ_7745c5c3_Err != nil {
348 return templ_7745c5c3_Err
349 }
350 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, "\">")
351 if templ_7745c5c3_Err != nil {
352 return templ_7745c5c3_Err
353 }
354 var templ_7745c5c3_Var18 string
355 templ_7745c5c3_Var18, templ_7745c5c3_Err = templ.JoinStringErrs(t.When)
356 if templ_7745c5c3_Err != nil {
357 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 86, Col: 69}
358 }
359 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var18))
360 if templ_7745c5c3_Err != nil {
361 return templ_7745c5c3_Err
362 }
363 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 25, "</time>")
364 if templ_7745c5c3_Err != nil {
365 return templ_7745c5c3_Err
366 }
367 }
368 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 26, " ")
369 if templ_7745c5c3_Err != nil {
370 return templ_7745c5c3_Err
371 }
372 var templ_7745c5c3_Var19 string
373 templ_7745c5c3_Var19, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")
374 if templ_7745c5c3_Err != nil {
375 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 88, Col: 11}
376 }
377 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var19))
378 if templ_7745c5c3_Err != nil {
379 return templ_7745c5c3_Err
380 }
381 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 27, " ")
382 if templ_7745c5c3_Err != nil {
383 return templ_7745c5c3_Err
384 }
385 }
386 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 28, "<a class=\"all-tags\" href=\"")
387 if templ_7745c5c3_Err != nil {
388 return templ_7745c5c3_Err
389 }
390 var templ_7745c5c3_Var20 templ.SafeURL
391 templ_7745c5c3_Var20, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(t.RefsHref))
392 if templ_7745c5c3_Err != nil {
393 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 90, Col: 54}
394 }
395 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var20))
396 if templ_7745c5c3_Err != nil {
397 return templ_7745c5c3_Err
398 }
399 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 29, "\">")
400 if templ_7745c5c3_Err != nil {
401 return templ_7745c5c3_Err
402 }
403 var templ_7745c5c3_Var21 string
404 templ_7745c5c3_Var21, templ_7745c5c3_Err = templ.JoinStringErrs(plural(t.Count, "tag", "tags"))
405 if templ_7745c5c3_Err != nil {
406 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 90, Col: 89}
407 }
408 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var21))
409 if templ_7745c5c3_Err != nil {
410 return templ_7745c5c3_Err
411 }
412 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 30, "</a></dd>")
413 if templ_7745c5c3_Err != nil {
414 return templ_7745c5c3_Err
415 }
416 return nil
417 })
418}
419
420func summaryRail(p SummaryPage) templ.Component {
421 return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
422 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
423 if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
424 return templ_7745c5c3_CtxErr
425 }
426 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
427 if !templ_7745c5c3_IsBuffer {
428 defer func() {
429 templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
430 if templ_7745c5c3_Err == nil {
431 templ_7745c5c3_Err = templ_7745c5c3_BufErr
432 }
433 }()
434 }
435 ctx = templ.InitializeContext(ctx)
436 templ_7745c5c3_Var22 := templ.GetChildren(ctx)
437 if templ_7745c5c3_Var22 == nil {
438 templ_7745c5c3_Var22 = templ.NopComponent
439 }
440 ctx = templ.ClearChildren(ctx)
441 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 31, "<section aria-labelledby=\"r-clone\"><h2 id=\"r-clone\">Clone</h2>")
442 if templ_7745c5c3_Err != nil {
443 return templ_7745c5c3_Err
444 }
445 templ_7745c5c3_Err = CloneBlock(p.Clone).Render(ctx, templ_7745c5c3_Buffer)
446 if templ_7745c5c3_Err != nil {
447 return templ_7745c5c3_Err
448 }
449 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 32, "</section><section aria-labelledby=\"r-facts\"><h2 id=\"r-facts\">About</h2><dl class=\"kv\">")
450 if templ_7745c5c3_Err != nil {
451 return templ_7745c5c3_Err
452 }
453 for _, f := range p.Facts {
454 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 33, "<dt>")
455 if templ_7745c5c3_Err != nil {
456 return templ_7745c5c3_Err
457 }
458 var templ_7745c5c3_Var23 string
459 templ_7745c5c3_Var23, templ_7745c5c3_Err = templ.JoinStringErrs(f.Key)
460 if templ_7745c5c3_Err != nil {
461 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 101, Col: 15}
462 }
463 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var23))
464 if templ_7745c5c3_Err != nil {
465 return templ_7745c5c3_Err
466 }
467 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 34, "</dt>")
468 if templ_7745c5c3_Err != nil {
469 return templ_7745c5c3_Err
470 }
471 templ_7745c5c3_Err = FactValue(f).Render(ctx, templ_7745c5c3_Buffer)
472 if templ_7745c5c3_Err != nil {
473 return templ_7745c5c3_Err
474 }
475 }
476 if p.Latest != nil {
477 templ_7745c5c3_Err = latestTagFact(*p.Latest).Render(ctx, templ_7745c5c3_Buffer)
478 if templ_7745c5c3_Err != nil {
479 return templ_7745c5c3_Err
480 }
481 }
482 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 35, "</dl></section>")
483 if templ_7745c5c3_Err != nil {
484 return templ_7745c5c3_Err
485 }
486 if len(p.Recent) > 0 {
487 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 36, "<section aria-labelledby=\"r-recent\"><h2 id=\"r-recent\">Recent commits <a href=\"")
488 if templ_7745c5c3_Err != nil {
489 return templ_7745c5c3_Err
490 }
491 var templ_7745c5c3_Var24 templ.SafeURL
492 templ_7745c5c3_Var24, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.AllHref))
493 if templ_7745c5c3_Err != nil {
494 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 110, Col: 105}
495 }
496 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var24))
497 if templ_7745c5c3_Err != nil {
498 return templ_7745c5c3_Err
499 }
500 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 37, "\">View all</a></h2>")
501 if templ_7745c5c3_Err != nil {
502 return templ_7745c5c3_Err
503 }
504 templ_7745c5c3_Err = CommitRows(p.Recent).Render(ctx, templ_7745c5c3_Buffer)
505 if templ_7745c5c3_Err != nil {
506 return templ_7745c5c3_Err
507 }
508 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 38, "</section>")
509 if templ_7745c5c3_Err != nil {
510 return templ_7745c5c3_Err
511 }
512 }
513 if p.Actions != nil {
514 templ_7745c5c3_Err = RecentActionsBlock(*p.Actions).Render(ctx, templ_7745c5c3_Buffer)
515 if templ_7745c5c3_Err != nil {
516 return templ_7745c5c3_Err
517 }
518 }
519 if len(p.Outline) > 0 && p.Readme != nil {
520 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 39, "<section aria-labelledby=\"r-outline\"><h2 id=\"r-outline\">On this page</h2>")
521 if templ_7745c5c3_Err != nil {
522 return templ_7745c5c3_Err
523 }
524 templ_7745c5c3_Err = Outline(p.Outline).Render(ctx, templ_7745c5c3_Buffer)
525 if templ_7745c5c3_Err != nil {
526 return templ_7745c5c3_Err
527 }
528 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, "</section>")
529 if templ_7745c5c3_Err != nil {
530 return templ_7745c5c3_Err
531 }
532 }
533 return nil
534 })
535}
536
537// Refs lists the branches and tags of a repository.
538func Refs(l Layout, p RefsPage) templ.Component {
539 return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
540 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
541 if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
542 return templ_7745c5c3_CtxErr
543 }
544 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
545 if !templ_7745c5c3_IsBuffer {
546 defer func() {
547 templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
548 if templ_7745c5c3_Err == nil {
549 templ_7745c5c3_Err = templ_7745c5c3_BufErr
550 }
551 }()
552 }
553 ctx = templ.InitializeContext(ctx)
554 templ_7745c5c3_Var25 := templ.GetChildren(ctx)
555 if templ_7745c5c3_Var25 == nil {
556 templ_7745c5c3_Var25 = templ.NopComponent
557 }
558 ctx = templ.ClearChildren(ctx)
559 templ_7745c5c3_Var26 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
560 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
561 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
562 if !templ_7745c5c3_IsBuffer {
563 defer func() {
564 templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
565 if templ_7745c5c3_Err == nil {
566 templ_7745c5c3_Err = templ_7745c5c3_BufErr
567 }
568 }()
569 }
570 ctx = templ.InitializeContext(ctx)
571 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, "<div class=\"filter\"><label for=\"ref-filter\" class=\"sr\">filter</label> <input id=\"ref-filter\" type=\"search\" data-filter=\"#ref-rows > tr\" placeholder=\"Filter branches and tags…\" autocomplete=\"off\" hx-on:input=\"ermite.filter(this)\"></div><table class=\"list refs\" aria-label=\"Branches and tags\"><thead><tr><th class=\"c-kind\">kind</th><th class=\"c-name\">name</th><th class=\"c-sha\">commit</th><th class=\"c-sub\">subject</th><th class=\"c-when\">date</th></tr></thead>")
572 if templ_7745c5c3_Err != nil {
573 return templ_7745c5c3_Err
574 }
575 templ_7745c5c3_Err = RefsBody(p).Render(ctx, templ_7745c5c3_Buffer)
576 if templ_7745c5c3_Err != nil {
577 return templ_7745c5c3_Err
578 }
579 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, "</table>")
580 if templ_7745c5c3_Err != nil {
581 return templ_7745c5c3_Err
582 }
583 if p.Note != "" {
584 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, "<p class=\"note\">")
585 if templ_7745c5c3_Err != nil {
586 return templ_7745c5c3_Err
587 }
588 var templ_7745c5c3_Var27 string
589 templ_7745c5c3_Var27, templ_7745c5c3_Err = templ.JoinStringErrs(p.Note)
590 if templ_7745c5c3_Err != nil {
591 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 143, Col: 27}
592 }
593 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var27))
594 if templ_7745c5c3_Err != nil {
595 return templ_7745c5c3_Err
596 }
597 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 44, "</p>")
598 if templ_7745c5c3_Err != nil {
599 return templ_7745c5c3_Err
600 }
601 }
602 return nil
603 })
604 templ_7745c5c3_Err = Shell(l, refsRail(p)).Render(templ.WithChildren(ctx, templ_7745c5c3_Var26), templ_7745c5c3_Buffer)
605 if templ_7745c5c3_Err != nil {
606 return templ_7745c5c3_Err
607 }
608 return nil
609 })
610}
611
612func refRow(kind string, r RefRow) templ.Component {
613 return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
614 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
615 if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
616 return templ_7745c5c3_CtxErr
617 }
618 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
619 if !templ_7745c5c3_IsBuffer {
620 defer func() {
621 templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
622 if templ_7745c5c3_Err == nil {
623 templ_7745c5c3_Err = templ_7745c5c3_BufErr
624 }
625 }()
626 }
627 ctx = templ.InitializeContext(ctx)
628 templ_7745c5c3_Var28 := templ.GetChildren(ctx)
629 if templ_7745c5c3_Var28 == nil {
630 templ_7745c5c3_Var28 = templ.NopComponent
631 }
632 ctx = templ.ClearChildren(ctx)
633 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, "<tr")
634 if templ_7745c5c3_Err != nil {
635 return templ_7745c5c3_Err
636 }
637 if r.Cursor {
638 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 46, " data-cursor")
639 if templ_7745c5c3_Err != nil {
640 return templ_7745c5c3_Err
641 }
642 }
643 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 47, "><td class=\"c-kind mute\">")
644 if templ_7745c5c3_Err != nil {
645 return templ_7745c5c3_Err
646 }
647 var templ_7745c5c3_Var29 string
648 templ_7745c5c3_Var29, templ_7745c5c3_Err = templ.JoinStringErrs(kind)
649 if templ_7745c5c3_Err != nil {
650 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 150, Col: 32}
651 }
652 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var29))
653 if templ_7745c5c3_Err != nil {
654 return templ_7745c5c3_Err
655 }
656 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 48, "</td><td class=\"c-name\"><a href=\"")
657 if templ_7745c5c3_Err != nil {
658 return templ_7745c5c3_Err
659 }
660 var templ_7745c5c3_Var30 templ.SafeURL
661 templ_7745c5c3_Var30, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(r.Href))
662 if templ_7745c5c3_Err != nil {
663 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 152, Col: 34}
664 }
665 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var30))
666 if templ_7745c5c3_Err != nil {
667 return templ_7745c5c3_Err
668 }
669 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 49, "\">")
670 if templ_7745c5c3_Err != nil {
671 return templ_7745c5c3_Err
672 }
673 var templ_7745c5c3_Var31 string
674 templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.JoinStringErrs(r.Name)
675 if templ_7745c5c3_Err != nil {
676 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 152, Col: 45}
677 }
678 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var31))
679 if templ_7745c5c3_Err != nil {
680 return templ_7745c5c3_Err
681 }
682 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 50, "</a> ")
683 if templ_7745c5c3_Err != nil {
684 return templ_7745c5c3_Err
685 }
686 if r.Default {
687 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 51, "<span class=\"pill\">default</span>")
688 if templ_7745c5c3_Err != nil {
689 return templ_7745c5c3_Err
690 }
691 }
692 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 52, "</td><td class=\"c-sha\">")
693 if templ_7745c5c3_Err != nil {
694 return templ_7745c5c3_Err
695 }
696 if r.CHref != "" {
697 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 53, "<a href=\"")
698 if templ_7745c5c3_Err != nil {
699 return templ_7745c5c3_Err
700 }
701 var templ_7745c5c3_Var32 templ.SafeURL
702 templ_7745c5c3_Var32, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(r.CHref))
703 if templ_7745c5c3_Err != nil {
704 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 159, Col: 36}
705 }
706 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var32))
707 if templ_7745c5c3_Err != nil {
708 return templ_7745c5c3_Err
709 }
710 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 54, "\">")
711 if templ_7745c5c3_Err != nil {
712 return templ_7745c5c3_Err
713 }
714 var templ_7745c5c3_Var33 string
715 templ_7745c5c3_Var33, templ_7745c5c3_Err = templ.JoinStringErrs(r.Short)
716 if templ_7745c5c3_Err != nil {
717 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 159, Col: 48}
718 }
719 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var33))
720 if templ_7745c5c3_Err != nil {
721 return templ_7745c5c3_Err
722 }
723 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 55, "</a>")
724 if templ_7745c5c3_Err != nil {
725 return templ_7745c5c3_Err
726 }
727 } else {
728 var templ_7745c5c3_Var34 string
729 templ_7745c5c3_Var34, templ_7745c5c3_Err = templ.JoinStringErrs(r.Short)
730 if templ_7745c5c3_Err != nil {
731 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 161, Col: 13}
732 }
733 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var34))
734 if templ_7745c5c3_Err != nil {
735 return templ_7745c5c3_Err
736 }
737 }
738 templ_7745c5c3_Err = CommitChecks(r.Checks).Render(ctx, templ_7745c5c3_Buffer)
739 if templ_7745c5c3_Err != nil {
740 return templ_7745c5c3_Err
741 }
742 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 56, "</td><td class=\"c-sub\">")
743 if templ_7745c5c3_Err != nil {
744 return templ_7745c5c3_Err
745 }
746 var templ_7745c5c3_Var35 string
747 templ_7745c5c3_Var35, templ_7745c5c3_Err = templ.JoinStringErrs(r.Subject)
748 if templ_7745c5c3_Err != nil {
749 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 165, Col: 31}
750 }
751 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var35))
752 if templ_7745c5c3_Err != nil {
753 return templ_7745c5c3_Err
754 }
755 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 57, "</td><td class=\"c-when dim\">")
756 if templ_7745c5c3_Err != nil {
757 return templ_7745c5c3_Err
758 }
759 if r.WhenAt != "" {
760 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 58, "<time datetime=\"")
761 if templ_7745c5c3_Err != nil {
762 return templ_7745c5c3_Err
763 }
764 var templ_7745c5c3_Var36 string
765 templ_7745c5c3_Var36, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.WhenAt)
766 if templ_7745c5c3_Err != nil {
767 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 168, Col: 29}
768 }
769 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var36)
770 if templ_7745c5c3_Err != nil {
771 return templ_7745c5c3_Err
772 }
773 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 59, "\" title=\"")
774 if templ_7745c5c3_Err != nil {
775 return templ_7745c5c3_Err
776 }
777 var templ_7745c5c3_Var37 string
778 templ_7745c5c3_Var37, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.WhenAt)
779 if templ_7745c5c3_Err != nil {
780 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 168, Col: 48}
781 }
782 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var37)
783 if templ_7745c5c3_Err != nil {
784 return templ_7745c5c3_Err
785 }
786 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 60, "\">")
787 if templ_7745c5c3_Err != nil {
788 return templ_7745c5c3_Err
789 }
790 var templ_7745c5c3_Var38 string
791 templ_7745c5c3_Var38, templ_7745c5c3_Err = templ.JoinStringErrs(r.When)
792 if templ_7745c5c3_Err != nil {
793 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 168, Col: 59}
794 }
795 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var38))
796 if templ_7745c5c3_Err != nil {
797 return templ_7745c5c3_Err
798 }
799 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 61, "</time>")
800 if templ_7745c5c3_Err != nil {
801 return templ_7745c5c3_Err
802 }
803 }
804 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 62, "</td></tr>")
805 if templ_7745c5c3_Err != nil {
806 return templ_7745c5c3_Err
807 }
808 return nil
809 })
810}
811
812func refsRail(p RefsPage) templ.Component {
813 return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
814 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
815 if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
816 return templ_7745c5c3_CtxErr
817 }
818 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
819 if !templ_7745c5c3_IsBuffer {
820 defer func() {
821 templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
822 if templ_7745c5c3_Err == nil {
823 templ_7745c5c3_Err = templ_7745c5c3_BufErr
824 }
825 }()
826 }
827 ctx = templ.InitializeContext(ctx)
828 templ_7745c5c3_Var39 := templ.GetChildren(ctx)
829 if templ_7745c5c3_Var39 == nil {
830 templ_7745c5c3_Var39 = templ.NopComponent
831 }
832 ctx = templ.ClearChildren(ctx)
833 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 63, "<section aria-labelledby=\"r-refs\"><h2 id=\"r-refs\">Overview</h2>")
834 if templ_7745c5c3_Err != nil {
835 return templ_7745c5c3_Err
836 }
837 templ_7745c5c3_Err = RefsKV(p).Render(ctx, templ_7745c5c3_Buffer)
838 if templ_7745c5c3_Err != nil {
839 return templ_7745c5c3_Err
840 }
841 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 64, "</section>")
842 if templ_7745c5c3_Err != nil {
843 return templ_7745c5c3_Err
844 }
845 return nil
846 })
847}
848
849// State is a 404, 500 or empty-repository page inside the normal shell.
850func State(l Layout, p StatePage) templ.Component {
851 return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
852 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
853 if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
854 return templ_7745c5c3_CtxErr
855 }
856 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
857 if !templ_7745c5c3_IsBuffer {
858 defer func() {
859 templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
860 if templ_7745c5c3_Err == nil {
861 templ_7745c5c3_Err = templ_7745c5c3_BufErr
862 }
863 }()
864 }
865 ctx = templ.InitializeContext(ctx)
866 templ_7745c5c3_Var40 := templ.GetChildren(ctx)
867 if templ_7745c5c3_Var40 == nil {
868 templ_7745c5c3_Var40 = templ.NopComponent
869 }
870 ctx = templ.ClearChildren(ctx)
871 templ_7745c5c3_Var41 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
872 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
873 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
874 if !templ_7745c5c3_IsBuffer {
875 defer func() {
876 templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
877 if templ_7745c5c3_Err == nil {
878 templ_7745c5c3_Err = templ_7745c5c3_BufErr
879 }
880 }()
881 }
882 ctx = templ.InitializeContext(ctx)
883 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 65, "<section class=\"state\" aria-labelledby=\"state-title\"><p class=\"eyebrow\">")
884 if templ_7745c5c3_Err != nil {
885 return templ_7745c5c3_Err
886 }
887 var templ_7745c5c3_Var42 string
888 templ_7745c5c3_Var42, templ_7745c5c3_Err = templ.JoinStringErrs(p.Code)
889 if templ_7745c5c3_Err != nil {
890 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 185, Col: 30}
891 }
892 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var42))
893 if templ_7745c5c3_Err != nil {
894 return templ_7745c5c3_Err
895 }
896 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 66, "</p><h1 id=\"state-title\">")
897 if templ_7745c5c3_Err != nil {
898 return templ_7745c5c3_Err
899 }
900 var templ_7745c5c3_Var43 string
901 templ_7745c5c3_Var43, templ_7745c5c3_Err = templ.JoinStringErrs(p.Title)
902 if templ_7745c5c3_Err != nil {
903 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 186, Col: 33}
904 }
905 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var43))
906 if templ_7745c5c3_Err != nil {
907 return templ_7745c5c3_Err
908 }
909 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 67, "</h1>")
910 if templ_7745c5c3_Err != nil {
911 return templ_7745c5c3_Err
912 }
913 for _, line := range p.Lines {
914 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 68, "<p class=\"dim\">")
915 if templ_7745c5c3_Err != nil {
916 return templ_7745c5c3_Err
917 }
918 var templ_7745c5c3_Var44 string
919 templ_7745c5c3_Var44, templ_7745c5c3_Err = templ.JoinStringErrs(line)
920 if templ_7745c5c3_Err != nil {
921 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 188, Col: 25}
922 }
923 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var44))
924 if templ_7745c5c3_Err != nil {
925 return templ_7745c5c3_Err
926 }
927 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 69, "</p>")
928 if templ_7745c5c3_Err != nil {
929 return templ_7745c5c3_Err
930 }
931 }
932 if p.Clone != nil {
933 templ_7745c5c3_Err = CloneBlock(*p.Clone).Render(ctx, templ_7745c5c3_Buffer)
934 if templ_7745c5c3_Err != nil {
935 return templ_7745c5c3_Err
936 }
937 }
938 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 70, "<p class=\"state-back\">")
939 if templ_7745c5c3_Err != nil {
940 return templ_7745c5c3_Err
941 }
942 for _, b := range p.Back {
943 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 71, "<a href=\"")
944 if templ_7745c5c3_Err != nil {
945 return templ_7745c5c3_Err
946 }
947 var templ_7745c5c3_Var45 templ.SafeURL
948 templ_7745c5c3_Var45, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(b.Href))
949 if templ_7745c5c3_Err != nil {
950 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 195, Col: 36}
951 }
952 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var45))
953 if templ_7745c5c3_Err != nil {
954 return templ_7745c5c3_Err
955 }
956 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 72, "\">")
957 if templ_7745c5c3_Err != nil {
958 return templ_7745c5c3_Err
959 }
960 var templ_7745c5c3_Var46 string
961 templ_7745c5c3_Var46, templ_7745c5c3_Err = templ.JoinStringErrs(b.Label)
962 if templ_7745c5c3_Err != nil {
963 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 195, Col: 48}
964 }
965 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var46))
966 if templ_7745c5c3_Err != nil {
967 return templ_7745c5c3_Err
968 }
969 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 73, "</a>")
970 if templ_7745c5c3_Err != nil {
971 return templ_7745c5c3_Err
972 }
973 }
974 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 74, "</p></section>")
975 if templ_7745c5c3_Err != nil {
976 return templ_7745c5c3_Err
977 }
978 return nil
979 })
980 templ_7745c5c3_Err = Shell(l, nil).Render(templ.WithChildren(ctx, templ_7745c5c3_Var41), templ_7745c5c3_Buffer)
981 if templ_7745c5c3_Err != nil {
982 return templ_7745c5c3_Err
983 }
984 return nil
985 })
986}
987
988// Login signs the browser in with a login link. Opening the link consumes
989// nothing; only this form does. ermite.js submits it as soon as a browser
990// shows the page (data-autosubmit): link previews and prefetchers run no
991// script, so they still cannot use the link. Without scripts the owner
992// clicks the button.
993func Login(l Layout, p LoginPage) templ.Component {
994 return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
995 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
996 if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
997 return templ_7745c5c3_CtxErr
998 }
999 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1000 if !templ_7745c5c3_IsBuffer {
1001 defer func() {
1002 templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
1003 if templ_7745c5c3_Err == nil {
1004 templ_7745c5c3_Err = templ_7745c5c3_BufErr
1005 }
1006 }()
1007 }
1008 ctx = templ.InitializeContext(ctx)
1009 templ_7745c5c3_Var47 := templ.GetChildren(ctx)
1010 if templ_7745c5c3_Var47 == nil {
1011 templ_7745c5c3_Var47 = templ.NopComponent
1012 }
1013 ctx = templ.ClearChildren(ctx)
1014 templ_7745c5c3_Var48 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1015 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
1016 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1017 if !templ_7745c5c3_IsBuffer {
1018 defer func() {
1019 templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
1020 if templ_7745c5c3_Err == nil {
1021 templ_7745c5c3_Err = templ_7745c5c3_BufErr
1022 }
1023 }()
1024 }
1025 ctx = templ.InitializeContext(ctx)
1026 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 75, "<section class=\"state\" aria-labelledby=\"state-title\"><h1 id=\"state-title\">")
1027 if templ_7745c5c3_Err != nil {
1028 return templ_7745c5c3_Err
1029 }
1030 var templ_7745c5c3_Var49 string
1031 templ_7745c5c3_Var49, templ_7745c5c3_Err = templ.JoinStringErrs(p.Title)
1032 if templ_7745c5c3_Err != nil {
1033 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 210, Col: 33}
1034 }
1035 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var49))
1036 if templ_7745c5c3_Err != nil {
1037 return templ_7745c5c3_Err
1038 }
1039 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 76, "</h1>")
1040 if templ_7745c5c3_Err != nil {
1041 return templ_7745c5c3_Err
1042 }
1043 for _, line := range p.Lines {
1044 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 77, "<p class=\"dim\">")
1045 if templ_7745c5c3_Err != nil {
1046 return templ_7745c5c3_Err
1047 }
1048 var templ_7745c5c3_Var50 string
1049 templ_7745c5c3_Var50, templ_7745c5c3_Err = templ.JoinStringErrs(line)
1050 if templ_7745c5c3_Err != nil {
1051 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 212, Col: 25}
1052 }
1053 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var50))
1054 if templ_7745c5c3_Err != nil {
1055 return templ_7745c5c3_Err
1056 }
1057 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 78, "</p>")
1058 if templ_7745c5c3_Err != nil {
1059 return templ_7745c5c3_Err
1060 }
1061 }
1062 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 79, "<form class=\"state-act\" method=\"post\" action=\"")
1063 if templ_7745c5c3_Err != nil {
1064 return templ_7745c5c3_Err
1065 }
1066 var templ_7745c5c3_Var51 templ.SafeURL
1067 templ_7745c5c3_Var51, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Action))
1068 if templ_7745c5c3_Err != nil {
1069 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 214, Col: 73}
1070 }
1071 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var51))
1072 if templ_7745c5c3_Err != nil {
1073 return templ_7745c5c3_Err
1074 }
1075 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 80, "\" data-autosubmit><button type=\"submit\" class=\"btn primary\">")
1076 if templ_7745c5c3_Err != nil {
1077 return templ_7745c5c3_Err
1078 }
1079 var templ_7745c5c3_Var52 string
1080 templ_7745c5c3_Var52, templ_7745c5c3_Err = templ.JoinStringErrs(p.Button)
1081 if templ_7745c5c3_Err != nil {
1082 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 215, Col: 56}
1083 }
1084 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var52))
1085 if templ_7745c5c3_Err != nil {
1086 return templ_7745c5c3_Err
1087 }
1088 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 81, "</button></form><p class=\"state-back\"><a href=\"/\">Back to home</a></p></section>")
1089 if templ_7745c5c3_Err != nil {
1090 return templ_7745c5c3_Err
1091 }
1092 return nil
1093 })
1094 templ_7745c5c3_Err = Shell(l, nil).Render(templ.WithChildren(ctx, templ_7745c5c3_Var48), templ_7745c5c3_Buffer)
1095 if templ_7745c5c3_Err != nil {
1096 return templ_7745c5c3_Err
1097 }
1098 return nil
1099 })
1100}
1101
1102// PasskeyLogin is the sign-in page: a button the script (passkey.js) drives.
1103// Without script the button is hidden and the page says what to do instead.
1104func PasskeyLogin(l Layout, p PasskeyLoginPage) templ.Component {
1105 return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1106 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
1107 if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
1108 return templ_7745c5c3_CtxErr
1109 }
1110 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1111 if !templ_7745c5c3_IsBuffer {
1112 defer func() {
1113 templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
1114 if templ_7745c5c3_Err == nil {
1115 templ_7745c5c3_Err = templ_7745c5c3_BufErr
1116 }
1117 }()
1118 }
1119 ctx = templ.InitializeContext(ctx)
1120 templ_7745c5c3_Var53 := templ.GetChildren(ctx)
1121 if templ_7745c5c3_Var53 == nil {
1122 templ_7745c5c3_Var53 = templ.NopComponent
1123 }
1124 ctx = templ.ClearChildren(ctx)
1125 templ_7745c5c3_Var54 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1126 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
1127 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1128 if !templ_7745c5c3_IsBuffer {
1129 defer func() {
1130 templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
1131 if templ_7745c5c3_Err == nil {
1132 templ_7745c5c3_Err = templ_7745c5c3_BufErr
1133 }
1134 }()
1135 }
1136 ctx = templ.InitializeContext(ctx)
1137 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 82, "<section class=\"state\" aria-labelledby=\"state-title\"><h1 id=\"state-title\">")
1138 if templ_7745c5c3_Err != nil {
1139 return templ_7745c5c3_Err
1140 }
1141 var templ_7745c5c3_Var55 string
1142 templ_7745c5c3_Var55, templ_7745c5c3_Err = templ.JoinStringErrs(p.Title)
1143 if templ_7745c5c3_Err != nil {
1144 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 227, Col: 33}
1145 }
1146 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var55))
1147 if templ_7745c5c3_Err != nil {
1148 return templ_7745c5c3_Err
1149 }
1150 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 83, "</h1><form class=\"state-act\" data-js data-passkey-form><button type=\"submit\" class=\"btn primary\" data-passkey=\"login\" data-begin=\"")
1151 if templ_7745c5c3_Err != nil {
1152 return templ_7745c5c3_Err
1153 }
1154 var templ_7745c5c3_Var56 string
1155 templ_7745c5c3_Var56, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Begin)
1156 if templ_7745c5c3_Err != nil {
1157 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 229, Col: 87}
1158 }
1159 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var56)
1160 if templ_7745c5c3_Err != nil {
1161 return templ_7745c5c3_Err
1162 }
1163 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 84, "\" data-finish=\"")
1164 if templ_7745c5c3_Err != nil {
1165 return templ_7745c5c3_Err
1166 }
1167 var templ_7745c5c3_Var57 string
1168 templ_7745c5c3_Var57, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Finish)
1169 if templ_7745c5c3_Err != nil {
1170 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 229, Col: 112}
1171 }
1172 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var57)
1173 if templ_7745c5c3_Err != nil {
1174 return templ_7745c5c3_Err
1175 }
1176 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 85, "\">")
1177 if templ_7745c5c3_Err != nil {
1178 return templ_7745c5c3_Err
1179 }
1180 var templ_7745c5c3_Var58 string
1181 templ_7745c5c3_Var58, templ_7745c5c3_Err = templ.JoinStringErrs(p.Button)
1182 if templ_7745c5c3_Err != nil {
1183 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 229, Col: 125}
1184 }
1185 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var58))
1186 if templ_7745c5c3_Err != nil {
1187 return templ_7745c5c3_Err
1188 }
1189 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 86, "</button></form><p class=\"dim\" role=\"status\" aria-live=\"polite\" data-passkey-status></p>")
1190 if templ_7745c5c3_Err != nil {
1191 return templ_7745c5c3_Err
1192 }
1193 for _, line := range p.Lines {
1194 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 87, "<p class=\"dim\">")
1195 if templ_7745c5c3_Err != nil {
1196 return templ_7745c5c3_Err
1197 }
1198 var templ_7745c5c3_Var59 string
1199 templ_7745c5c3_Var59, templ_7745c5c3_Err = templ.JoinStringErrs(line)
1200 if templ_7745c5c3_Err != nil {
1201 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 233, Col: 25}
1202 }
1203 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var59))
1204 if templ_7745c5c3_Err != nil {
1205 return templ_7745c5c3_Err
1206 }
1207 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 88, "</p>")
1208 if templ_7745c5c3_Err != nil {
1209 return templ_7745c5c3_Err
1210 }
1211 }
1212 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 89, "<p class=\"state-back\"><a href=\"/\">Back to home</a></p></section>")
1213 if templ_7745c5c3_Err != nil {
1214 return templ_7745c5c3_Err
1215 }
1216 return nil
1217 })
1218 templ_7745c5c3_Err = Shell(l, nil).Render(templ.WithChildren(ctx, templ_7745c5c3_Var54), templ_7745c5c3_Buffer)
1219 if templ_7745c5c3_Err != nil {
1220 return templ_7745c5c3_Err
1221 }
1222 return nil
1223 })
1224}
1225
1226// Passkeys lists the owner's passkeys, removes them and adds one.
1227func Passkeys(l Layout, p PasskeysPage) templ.Component {
1228 return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1229 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
1230 if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
1231 return templ_7745c5c3_CtxErr
1232 }
1233 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1234 if !templ_7745c5c3_IsBuffer {
1235 defer func() {
1236 templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
1237 if templ_7745c5c3_Err == nil {
1238 templ_7745c5c3_Err = templ_7745c5c3_BufErr
1239 }
1240 }()
1241 }
1242 ctx = templ.InitializeContext(ctx)
1243 templ_7745c5c3_Var60 := templ.GetChildren(ctx)
1244 if templ_7745c5c3_Var60 == nil {
1245 templ_7745c5c3_Var60 = templ.NopComponent
1246 }
1247 ctx = templ.ClearChildren(ctx)
1248 templ_7745c5c3_Var61 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1249 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
1250 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1251 if !templ_7745c5c3_IsBuffer {
1252 defer func() {
1253 templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
1254 if templ_7745c5c3_Err == nil {
1255 templ_7745c5c3_Err = templ_7745c5c3_BufErr
1256 }
1257 }()
1258 }
1259 ctx = templ.InitializeContext(ctx)
1260 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 90, "<h2 class=\"rule-h\"><span>Passkeys</span><span class=\"count\">")
1261 if templ_7745c5c3_Err != nil {
1262 return templ_7745c5c3_Err
1263 }
1264 var templ_7745c5c3_Var62 string
1265 templ_7745c5c3_Var62, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Rows)))
1266 if templ_7745c5c3_Err != nil {
1267 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 243, Col: 81}
1268 }
1269 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var62))
1270 if templ_7745c5c3_Err != nil {
1271 return templ_7745c5c3_Err
1272 }
1273 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 91, "</span></h2><p class=\"dim\">A passkey signs you in from this device or your phone, without a terminal. Removing one signs every browser out.</p>")
1274 if templ_7745c5c3_Err != nil {
1275 return templ_7745c5c3_Err
1276 }
1277 if len(p.Rows) > 0 {
1278 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 92, "<table class=\"list passkeys\" aria-label=\"Passkeys\"><thead><tr><th class=\"c-name\">Name</th><th class=\"c-when\">Created</th><th class=\"c-when\">Last used</th><th class=\"c-sync\">Synced</th><th class=\"c-act\"><span class=\"sr\">Remove</span></th></tr></thead> <tbody>")
1279 if templ_7745c5c3_Err != nil {
1280 return templ_7745c5c3_Err
1281 }
1282 for _, r := range p.Rows {
1283 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 93, "<tr><td class=\"c-name\">")
1284 if templ_7745c5c3_Err != nil {
1285 return templ_7745c5c3_Err
1286 }
1287 var templ_7745c5c3_Var63 string
1288 templ_7745c5c3_Var63, templ_7745c5c3_Err = templ.JoinStringErrs(r.Name)
1289 if templ_7745c5c3_Err != nil {
1290 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 259, Col: 34}
1291 }
1292 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var63))
1293 if templ_7745c5c3_Err != nil {
1294 return templ_7745c5c3_Err
1295 }
1296 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 94, "</td><td class=\"c-when nowrap\"><time")
1297 if templ_7745c5c3_Err != nil {
1298 return templ_7745c5c3_Err
1299 }
1300 if r.CreatedAt != "" {
1301 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 95, " datetime=\"")
1302 if templ_7745c5c3_Err != nil {
1303 return templ_7745c5c3_Err
1304 }
1305 var templ_7745c5c3_Var64 string
1306 templ_7745c5c3_Var64, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.CreatedAt)
1307 if templ_7745c5c3_Err != nil {
1308 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 263, Col: 32}
1309 }
1310 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var64)
1311 if templ_7745c5c3_Err != nil {
1312 return templ_7745c5c3_Err
1313 }
1314 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 96, "\"")
1315 if templ_7745c5c3_Err != nil {
1316 return templ_7745c5c3_Err
1317 }
1318 }
1319 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 97, ">")
1320 if templ_7745c5c3_Err != nil {
1321 return templ_7745c5c3_Err
1322 }
1323 var templ_7745c5c3_Var65 string
1324 templ_7745c5c3_Var65, templ_7745c5c3_Err = templ.JoinStringErrs(r.Created)
1325 if templ_7745c5c3_Err != nil {
1326 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 265, Col: 20}
1327 }
1328 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var65))
1329 if templ_7745c5c3_Err != nil {
1330 return templ_7745c5c3_Err
1331 }
1332 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 98, "</time></td><td class=\"c-when nowrap\"><time")
1333 if templ_7745c5c3_Err != nil {
1334 return templ_7745c5c3_Err
1335 }
1336 if r.LastUsedAt != "" {
1337 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 99, " datetime=\"")
1338 if templ_7745c5c3_Err != nil {
1339 return templ_7745c5c3_Err
1340 }
1341 var templ_7745c5c3_Var66 string
1342 templ_7745c5c3_Var66, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.LastUsedAt)
1343 if templ_7745c5c3_Err != nil {
1344 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 270, Col: 33}
1345 }
1346 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var66)
1347 if templ_7745c5c3_Err != nil {
1348 return templ_7745c5c3_Err
1349 }
1350 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 100, "\"")
1351 if templ_7745c5c3_Err != nil {
1352 return templ_7745c5c3_Err
1353 }
1354 }
1355 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 101, ">")
1356 if templ_7745c5c3_Err != nil {
1357 return templ_7745c5c3_Err
1358 }
1359 var templ_7745c5c3_Var67 string
1360 templ_7745c5c3_Var67, templ_7745c5c3_Err = templ.JoinStringErrs(r.LastUsed)
1361 if templ_7745c5c3_Err != nil {
1362 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 272, Col: 21}
1363 }
1364 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var67))
1365 if templ_7745c5c3_Err != nil {
1366 return templ_7745c5c3_Err
1367 }
1368 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 102, "</time></td><td class=\"c-sync\">")
1369 if templ_7745c5c3_Err != nil {
1370 return templ_7745c5c3_Err
1371 }
1372 if r.Synced {
1373 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 103, "yes")
1374 if templ_7745c5c3_Err != nil {
1375 return templ_7745c5c3_Err
1376 }
1377 } else {
1378 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 104, "no")
1379 if templ_7745c5c3_Err != nil {
1380 return templ_7745c5c3_Err
1381 }
1382 }
1383 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 105, "</td><td class=\"c-act\"><form method=\"post\" action=\"")
1384 if templ_7745c5c3_Err != nil {
1385 return templ_7745c5c3_Err
1386 }
1387 var templ_7745c5c3_Var68 templ.SafeURL
1388 templ_7745c5c3_Var68, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(r.Remove))
1389 if templ_7745c5c3_Err != nil {
1390 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 282, Col: 60}
1391 }
1392 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var68))
1393 if templ_7745c5c3_Err != nil {
1394 return templ_7745c5c3_Err
1395 }
1396 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 106, "\"><button type=\"submit\" class=\"btn danger\" aria-label=\"")
1397 if templ_7745c5c3_Err != nil {
1398 return templ_7745c5c3_Err
1399 }
1400 var templ_7745c5c3_Var69 string
1401 templ_7745c5c3_Var69, templ_7745c5c3_Err = templ.ResolveAttributeValue("Remove passkey " + r.Name)
1402 if templ_7745c5c3_Err != nil {
1403 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 283, Col: 89}
1404 }
1405 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var69)
1406 if templ_7745c5c3_Err != nil {
1407 return templ_7745c5c3_Err
1408 }
1409 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 107, "\">Remove</button></form></td></tr>")
1410 if templ_7745c5c3_Err != nil {
1411 return templ_7745c5c3_Err
1412 }
1413 }
1414 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 108, "</tbody></table>")
1415 if templ_7745c5c3_Err != nil {
1416 return templ_7745c5c3_Err
1417 }
1418 } else {
1419 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 109, "<p class=\"lede dim\">no passkeys yet.</p>")
1420 if templ_7745c5c3_Err != nil {
1421 return templ_7745c5c3_Err
1422 }
1423 }
1424 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 110, " ")
1425 if templ_7745c5c3_Err != nil {
1426 return templ_7745c5c3_Err
1427 }
1428 if p.Full {
1429 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 111, "<p class=\"dim\">")
1430 if templ_7745c5c3_Err != nil {
1431 return templ_7745c5c3_Err
1432 }
1433 var templ_7745c5c3_Var70 string
1434 templ_7745c5c3_Var70, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Max))
1435 if templ_7745c5c3_Err != nil {
1436 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 294, Col: 31}
1437 }
1438 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var70))
1439 if templ_7745c5c3_Err != nil {
1440 return templ_7745c5c3_Err
1441 }
1442 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 112, " passkeys are registered, the most there can be. Remove one to add another.</p>")
1443 if templ_7745c5c3_Err != nil {
1444 return templ_7745c5c3_Err
1445 }
1446 } else {
1447 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 113, "<form class=\"passkey-add\" data-js data-passkey-form><label for=\"passkey-name\" class=\"sr\">Name of the new passkey</label> <input id=\"passkey-name\" type=\"text\" placeholder=\"Name, for example Pixel 9\" autocomplete=\"off\" data-passkey-name> <button type=\"submit\" class=\"btn primary\" data-passkey=\"register\" data-begin=\"")
1448 if templ_7745c5c3_Err != nil {
1449 return templ_7745c5c3_Err
1450 }
1451 var templ_7745c5c3_Var71 string
1452 templ_7745c5c3_Var71, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Begin)
1453 if templ_7745c5c3_Err != nil {
1454 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 299, Col: 90}
1455 }
1456 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var71)
1457 if templ_7745c5c3_Err != nil {
1458 return templ_7745c5c3_Err
1459 }
1460 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 114, "\" data-finish=\"")
1461 if templ_7745c5c3_Err != nil {
1462 return templ_7745c5c3_Err
1463 }
1464 var templ_7745c5c3_Var72 string
1465 templ_7745c5c3_Var72, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Finish)
1466 if templ_7745c5c3_Err != nil {
1467 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 299, Col: 115}
1468 }
1469 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var72)
1470 if templ_7745c5c3_Err != nil {
1471 return templ_7745c5c3_Err
1472 }
1473 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 115, "\">Add a passkey</button></form>")
1474 if templ_7745c5c3_Err != nil {
1475 return templ_7745c5c3_Err
1476 }
1477 }
1478 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 116, " <p class=\"dim\" role=\"status\" aria-live=\"polite\" data-passkey-status></p>")
1479 if templ_7745c5c3_Err != nil {
1480 return templ_7745c5c3_Err
1481 }
1482 return nil
1483 })
1484 templ_7745c5c3_Err = Shell(l, nil).Render(templ.WithChildren(ctx, templ_7745c5c3_Var61), templ_7745c5c3_Buffer)
1485 if templ_7745c5c3_Err != nil {
1486 return templ_7745c5c3_Err
1487 }
1488 return nil
1489 })
1490}
1491
1492var _ = templruntime.GeneratedTemplate