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