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 if p.Mirror != nil {
442 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 31, "<section aria-labelledby=\"r-mirror\"><h2 id=\"r-mirror\">Mirror</h2><p>⚠ Mirror ")
443 if templ_7745c5c3_Err != nil {
444 return templ_7745c5c3_Err
445 }
446 var templ_7745c5c3_Var23 string
447 templ_7745c5c3_Var23, templ_7745c5c3_Err = templ.JoinStringErrs(p.Mirror.State)
448 if templ_7745c5c3_Err != nil {
449 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 98, Col: 33}
450 }
451 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var23))
452 if templ_7745c5c3_Err != nil {
453 return templ_7745c5c3_Err
454 }
455 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 32, "</p>")
456 if templ_7745c5c3_Err != nil {
457 return templ_7745c5c3_Err
458 }
459 if p.Mirror.Reason != "" {
460 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 33, "<p>")
461 if templ_7745c5c3_Err != nil {
462 return templ_7745c5c3_Err
463 }
464 var templ_7745c5c3_Var24 string
465 templ_7745c5c3_Var24, templ_7745c5c3_Err = templ.JoinStringErrs(p.Mirror.Reason)
466 if templ_7745c5c3_Err != nil {
467 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 100, Col: 24}
468 }
469 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var24))
470 if templ_7745c5c3_Err != nil {
471 return templ_7745c5c3_Err
472 }
473 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 34, "</p>")
474 if templ_7745c5c3_Err != nil {
475 return templ_7745c5c3_Err
476 }
477 }
478 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 35, "<p>Run <code>")
479 if templ_7745c5c3_Err != nil {
480 return templ_7745c5c3_Err
481 }
482 var templ_7745c5c3_Var25 string
483 templ_7745c5c3_Var25, templ_7745c5c3_Err = templ.JoinStringErrs(p.Mirror.Command)
484 if templ_7745c5c3_Err != nil {
485 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 102, Col: 34}
486 }
487 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var25))
488 if templ_7745c5c3_Err != nil {
489 return templ_7745c5c3_Err
490 }
491 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 36, "</code></p></section>")
492 if templ_7745c5c3_Err != nil {
493 return templ_7745c5c3_Err
494 }
495 }
496 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 37, "<section aria-labelledby=\"r-clone\"><h2 id=\"r-clone\">Clone</h2>")
497 if templ_7745c5c3_Err != nil {
498 return templ_7745c5c3_Err
499 }
500 templ_7745c5c3_Err = CloneBlock(p.Clone).Render(ctx, templ_7745c5c3_Buffer)
501 if templ_7745c5c3_Err != nil {
502 return templ_7745c5c3_Err
503 }
504 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 38, "</section><section aria-labelledby=\"r-facts\"><h2 id=\"r-facts\">About</h2><dl class=\"kv\">")
505 if templ_7745c5c3_Err != nil {
506 return templ_7745c5c3_Err
507 }
508 for _, f := range p.Facts {
509 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 39, "<dt>")
510 if templ_7745c5c3_Err != nil {
511 return templ_7745c5c3_Err
512 }
513 var templ_7745c5c3_Var26 string
514 templ_7745c5c3_Var26, templ_7745c5c3_Err = templ.JoinStringErrs(f.Key)
515 if templ_7745c5c3_Err != nil {
516 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 112, Col: 15}
517 }
518 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var26))
519 if templ_7745c5c3_Err != nil {
520 return templ_7745c5c3_Err
521 }
522 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, "</dt>")
523 if templ_7745c5c3_Err != nil {
524 return templ_7745c5c3_Err
525 }
526 templ_7745c5c3_Err = FactValue(f).Render(ctx, templ_7745c5c3_Buffer)
527 if templ_7745c5c3_Err != nil {
528 return templ_7745c5c3_Err
529 }
530 }
531 if p.Latest != nil {
532 templ_7745c5c3_Err = latestTagFact(*p.Latest).Render(ctx, templ_7745c5c3_Buffer)
533 if templ_7745c5c3_Err != nil {
534 return templ_7745c5c3_Err
535 }
536 }
537 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, "</dl></section>")
538 if templ_7745c5c3_Err != nil {
539 return templ_7745c5c3_Err
540 }
541 if len(p.Recent) > 0 {
542 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, "<section aria-labelledby=\"r-recent\"><h2 id=\"r-recent\">Recent commits <a href=\"")
543 if templ_7745c5c3_Err != nil {
544 return templ_7745c5c3_Err
545 }
546 var templ_7745c5c3_Var27 templ.SafeURL
547 templ_7745c5c3_Var27, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.AllHref))
548 if templ_7745c5c3_Err != nil {
549 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 121, Col: 105}
550 }
551 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var27))
552 if templ_7745c5c3_Err != nil {
553 return templ_7745c5c3_Err
554 }
555 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, "\">View all</a></h2>")
556 if templ_7745c5c3_Err != nil {
557 return templ_7745c5c3_Err
558 }
559 templ_7745c5c3_Err = CommitRows(p.Recent).Render(ctx, templ_7745c5c3_Buffer)
560 if templ_7745c5c3_Err != nil {
561 return templ_7745c5c3_Err
562 }
563 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 44, "</section>")
564 if templ_7745c5c3_Err != nil {
565 return templ_7745c5c3_Err
566 }
567 }
568 if p.Actions != nil {
569 templ_7745c5c3_Err = RecentActionsBlock(*p.Actions).Render(ctx, templ_7745c5c3_Buffer)
570 if templ_7745c5c3_Err != nil {
571 return templ_7745c5c3_Err
572 }
573 }
574 if len(p.Outline) > 0 && p.Readme != nil {
575 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, "<section aria-labelledby=\"r-outline\"><h2 id=\"r-outline\">On this page</h2>")
576 if templ_7745c5c3_Err != nil {
577 return templ_7745c5c3_Err
578 }
579 templ_7745c5c3_Err = Outline(p.Outline).Render(ctx, templ_7745c5c3_Buffer)
580 if templ_7745c5c3_Err != nil {
581 return templ_7745c5c3_Err
582 }
583 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 46, "</section>")
584 if templ_7745c5c3_Err != nil {
585 return templ_7745c5c3_Err
586 }
587 }
588 return nil
589 })
590}
591
592// Refs lists the branches and tags of a repository.
593func Refs(l Layout, p RefsPage) templ.Component {
594 return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
595 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
596 if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
597 return templ_7745c5c3_CtxErr
598 }
599 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
600 if !templ_7745c5c3_IsBuffer {
601 defer func() {
602 templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
603 if templ_7745c5c3_Err == nil {
604 templ_7745c5c3_Err = templ_7745c5c3_BufErr
605 }
606 }()
607 }
608 ctx = templ.InitializeContext(ctx)
609 templ_7745c5c3_Var28 := templ.GetChildren(ctx)
610 if templ_7745c5c3_Var28 == nil {
611 templ_7745c5c3_Var28 = templ.NopComponent
612 }
613 ctx = templ.ClearChildren(ctx)
614 templ_7745c5c3_Var29 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
615 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
616 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
617 if !templ_7745c5c3_IsBuffer {
618 defer func() {
619 templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
620 if templ_7745c5c3_Err == nil {
621 templ_7745c5c3_Err = templ_7745c5c3_BufErr
622 }
623 }()
624 }
625 ctx = templ.InitializeContext(ctx)
626 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 47, "<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>")
627 if templ_7745c5c3_Err != nil {
628 return templ_7745c5c3_Err
629 }
630 templ_7745c5c3_Err = RefsBody(p).Render(ctx, templ_7745c5c3_Buffer)
631 if templ_7745c5c3_Err != nil {
632 return templ_7745c5c3_Err
633 }
634 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 48, "</table>")
635 if templ_7745c5c3_Err != nil {
636 return templ_7745c5c3_Err
637 }
638 if p.Note != "" {
639 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 49, "<p class=\"note\">")
640 if templ_7745c5c3_Err != nil {
641 return templ_7745c5c3_Err
642 }
643 var templ_7745c5c3_Var30 string
644 templ_7745c5c3_Var30, templ_7745c5c3_Err = templ.JoinStringErrs(p.Note)
645 if templ_7745c5c3_Err != nil {
646 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 154, Col: 27}
647 }
648 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var30))
649 if templ_7745c5c3_Err != nil {
650 return templ_7745c5c3_Err
651 }
652 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 50, "</p>")
653 if templ_7745c5c3_Err != nil {
654 return templ_7745c5c3_Err
655 }
656 }
657 return nil
658 })
659 templ_7745c5c3_Err = Shell(l, refsRail(p)).Render(templ.WithChildren(ctx, templ_7745c5c3_Var29), templ_7745c5c3_Buffer)
660 if templ_7745c5c3_Err != nil {
661 return templ_7745c5c3_Err
662 }
663 return nil
664 })
665}
666
667func refRow(kind string, r RefRow) templ.Component {
668 return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
669 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
670 if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
671 return templ_7745c5c3_CtxErr
672 }
673 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
674 if !templ_7745c5c3_IsBuffer {
675 defer func() {
676 templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
677 if templ_7745c5c3_Err == nil {
678 templ_7745c5c3_Err = templ_7745c5c3_BufErr
679 }
680 }()
681 }
682 ctx = templ.InitializeContext(ctx)
683 templ_7745c5c3_Var31 := templ.GetChildren(ctx)
684 if templ_7745c5c3_Var31 == nil {
685 templ_7745c5c3_Var31 = templ.NopComponent
686 }
687 ctx = templ.ClearChildren(ctx)
688 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 51, "<tr")
689 if templ_7745c5c3_Err != nil {
690 return templ_7745c5c3_Err
691 }
692 if r.Cursor {
693 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 52, " data-cursor")
694 if templ_7745c5c3_Err != nil {
695 return templ_7745c5c3_Err
696 }
697 }
698 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 53, "><td class=\"c-kind mute\">")
699 if templ_7745c5c3_Err != nil {
700 return templ_7745c5c3_Err
701 }
702 var templ_7745c5c3_Var32 string
703 templ_7745c5c3_Var32, templ_7745c5c3_Err = templ.JoinStringErrs(kind)
704 if templ_7745c5c3_Err != nil {
705 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 161, Col: 32}
706 }
707 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var32))
708 if templ_7745c5c3_Err != nil {
709 return templ_7745c5c3_Err
710 }
711 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 54, "</td><td class=\"c-name\"><a href=\"")
712 if templ_7745c5c3_Err != nil {
713 return templ_7745c5c3_Err
714 }
715 var templ_7745c5c3_Var33 templ.SafeURL
716 templ_7745c5c3_Var33, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(r.Href))
717 if templ_7745c5c3_Err != nil {
718 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 163, Col: 34}
719 }
720 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var33))
721 if templ_7745c5c3_Err != nil {
722 return templ_7745c5c3_Err
723 }
724 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 55, "\">")
725 if templ_7745c5c3_Err != nil {
726 return templ_7745c5c3_Err
727 }
728 var templ_7745c5c3_Var34 string
729 templ_7745c5c3_Var34, templ_7745c5c3_Err = templ.JoinStringErrs(r.Name)
730 if templ_7745c5c3_Err != nil {
731 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 163, Col: 45}
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 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 56, "</a> ")
738 if templ_7745c5c3_Err != nil {
739 return templ_7745c5c3_Err
740 }
741 if r.Default {
742 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 57, "<span class=\"pill\">default</span>")
743 if templ_7745c5c3_Err != nil {
744 return templ_7745c5c3_Err
745 }
746 }
747 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 58, "</td><td class=\"c-sha\">")
748 if templ_7745c5c3_Err != nil {
749 return templ_7745c5c3_Err
750 }
751 if r.CHref != "" {
752 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 59, "<a href=\"")
753 if templ_7745c5c3_Err != nil {
754 return templ_7745c5c3_Err
755 }
756 var templ_7745c5c3_Var35 templ.SafeURL
757 templ_7745c5c3_Var35, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(r.CHref))
758 if templ_7745c5c3_Err != nil {
759 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 170, Col: 36}
760 }
761 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var35))
762 if templ_7745c5c3_Err != nil {
763 return templ_7745c5c3_Err
764 }
765 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 60, "\">")
766 if templ_7745c5c3_Err != nil {
767 return templ_7745c5c3_Err
768 }
769 var templ_7745c5c3_Var36 string
770 templ_7745c5c3_Var36, templ_7745c5c3_Err = templ.JoinStringErrs(r.Short)
771 if templ_7745c5c3_Err != nil {
772 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 170, Col: 48}
773 }
774 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var36))
775 if templ_7745c5c3_Err != nil {
776 return templ_7745c5c3_Err
777 }
778 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 61, "</a>")
779 if templ_7745c5c3_Err != nil {
780 return templ_7745c5c3_Err
781 }
782 } else {
783 var templ_7745c5c3_Var37 string
784 templ_7745c5c3_Var37, templ_7745c5c3_Err = templ.JoinStringErrs(r.Short)
785 if templ_7745c5c3_Err != nil {
786 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 172, Col: 13}
787 }
788 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var37))
789 if templ_7745c5c3_Err != nil {
790 return templ_7745c5c3_Err
791 }
792 }
793 templ_7745c5c3_Err = CommitChecks(r.Checks).Render(ctx, templ_7745c5c3_Buffer)
794 if templ_7745c5c3_Err != nil {
795 return templ_7745c5c3_Err
796 }
797 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 62, "</td><td class=\"c-sub\">")
798 if templ_7745c5c3_Err != nil {
799 return templ_7745c5c3_Err
800 }
801 var templ_7745c5c3_Var38 string
802 templ_7745c5c3_Var38, templ_7745c5c3_Err = templ.JoinStringErrs(r.Subject)
803 if templ_7745c5c3_Err != nil {
804 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 176, Col: 31}
805 }
806 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var38))
807 if templ_7745c5c3_Err != nil {
808 return templ_7745c5c3_Err
809 }
810 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 63, "</td><td class=\"c-when dim\">")
811 if templ_7745c5c3_Err != nil {
812 return templ_7745c5c3_Err
813 }
814 if r.WhenAt != "" {
815 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 64, "<time datetime=\"")
816 if templ_7745c5c3_Err != nil {
817 return templ_7745c5c3_Err
818 }
819 var templ_7745c5c3_Var39 string
820 templ_7745c5c3_Var39, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.WhenAt)
821 if templ_7745c5c3_Err != nil {
822 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 179, Col: 29}
823 }
824 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var39)
825 if templ_7745c5c3_Err != nil {
826 return templ_7745c5c3_Err
827 }
828 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 65, "\" title=\"")
829 if templ_7745c5c3_Err != nil {
830 return templ_7745c5c3_Err
831 }
832 var templ_7745c5c3_Var40 string
833 templ_7745c5c3_Var40, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.WhenAt)
834 if templ_7745c5c3_Err != nil {
835 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 179, Col: 48}
836 }
837 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var40)
838 if templ_7745c5c3_Err != nil {
839 return templ_7745c5c3_Err
840 }
841 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 66, "\">")
842 if templ_7745c5c3_Err != nil {
843 return templ_7745c5c3_Err
844 }
845 var templ_7745c5c3_Var41 string
846 templ_7745c5c3_Var41, templ_7745c5c3_Err = templ.JoinStringErrs(r.When)
847 if templ_7745c5c3_Err != nil {
848 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 179, Col: 59}
849 }
850 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var41))
851 if templ_7745c5c3_Err != nil {
852 return templ_7745c5c3_Err
853 }
854 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 67, "</time>")
855 if templ_7745c5c3_Err != nil {
856 return templ_7745c5c3_Err
857 }
858 }
859 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 68, "</td></tr>")
860 if templ_7745c5c3_Err != nil {
861 return templ_7745c5c3_Err
862 }
863 return nil
864 })
865}
866
867func refsRail(p RefsPage) templ.Component {
868 return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
869 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
870 if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
871 return templ_7745c5c3_CtxErr
872 }
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_Var42 := templ.GetChildren(ctx)
884 if templ_7745c5c3_Var42 == nil {
885 templ_7745c5c3_Var42 = templ.NopComponent
886 }
887 ctx = templ.ClearChildren(ctx)
888 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 69, "<section aria-labelledby=\"r-refs\"><h2 id=\"r-refs\">Overview</h2>")
889 if templ_7745c5c3_Err != nil {
890 return templ_7745c5c3_Err
891 }
892 templ_7745c5c3_Err = RefsKV(p).Render(ctx, templ_7745c5c3_Buffer)
893 if templ_7745c5c3_Err != nil {
894 return templ_7745c5c3_Err
895 }
896 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 70, "</section>")
897 if templ_7745c5c3_Err != nil {
898 return templ_7745c5c3_Err
899 }
900 return nil
901 })
902}
903
904// State is a 404, 500 or empty-repository page inside the normal shell.
905func State(l Layout, p StatePage) templ.Component {
906 return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
907 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
908 if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
909 return templ_7745c5c3_CtxErr
910 }
911 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
912 if !templ_7745c5c3_IsBuffer {
913 defer func() {
914 templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
915 if templ_7745c5c3_Err == nil {
916 templ_7745c5c3_Err = templ_7745c5c3_BufErr
917 }
918 }()
919 }
920 ctx = templ.InitializeContext(ctx)
921 templ_7745c5c3_Var43 := templ.GetChildren(ctx)
922 if templ_7745c5c3_Var43 == nil {
923 templ_7745c5c3_Var43 = templ.NopComponent
924 }
925 ctx = templ.ClearChildren(ctx)
926 templ_7745c5c3_Var44 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
927 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
928 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
929 if !templ_7745c5c3_IsBuffer {
930 defer func() {
931 templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
932 if templ_7745c5c3_Err == nil {
933 templ_7745c5c3_Err = templ_7745c5c3_BufErr
934 }
935 }()
936 }
937 ctx = templ.InitializeContext(ctx)
938 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 71, "<section class=\"state\" aria-labelledby=\"state-title\"><p class=\"eyebrow\">")
939 if templ_7745c5c3_Err != nil {
940 return templ_7745c5c3_Err
941 }
942 var templ_7745c5c3_Var45 string
943 templ_7745c5c3_Var45, templ_7745c5c3_Err = templ.JoinStringErrs(p.Code)
944 if templ_7745c5c3_Err != nil {
945 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 196, Col: 30}
946 }
947 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var45))
948 if templ_7745c5c3_Err != nil {
949 return templ_7745c5c3_Err
950 }
951 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 72, "</p><h1 id=\"state-title\">")
952 if templ_7745c5c3_Err != nil {
953 return templ_7745c5c3_Err
954 }
955 var templ_7745c5c3_Var46 string
956 templ_7745c5c3_Var46, templ_7745c5c3_Err = templ.JoinStringErrs(p.Title)
957 if templ_7745c5c3_Err != nil {
958 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 197, Col: 33}
959 }
960 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var46))
961 if templ_7745c5c3_Err != nil {
962 return templ_7745c5c3_Err
963 }
964 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 73, "</h1>")
965 if templ_7745c5c3_Err != nil {
966 return templ_7745c5c3_Err
967 }
968 for _, line := range p.Lines {
969 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 74, "<p class=\"dim\">")
970 if templ_7745c5c3_Err != nil {
971 return templ_7745c5c3_Err
972 }
973 var templ_7745c5c3_Var47 string
974 templ_7745c5c3_Var47, templ_7745c5c3_Err = templ.JoinStringErrs(line)
975 if templ_7745c5c3_Err != nil {
976 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 199, Col: 25}
977 }
978 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var47))
979 if templ_7745c5c3_Err != nil {
980 return templ_7745c5c3_Err
981 }
982 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 75, "</p>")
983 if templ_7745c5c3_Err != nil {
984 return templ_7745c5c3_Err
985 }
986 }
987 if p.Clone != nil {
988 templ_7745c5c3_Err = CloneBlock(*p.Clone).Render(ctx, templ_7745c5c3_Buffer)
989 if templ_7745c5c3_Err != nil {
990 return templ_7745c5c3_Err
991 }
992 }
993 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 76, "<p class=\"state-back\">")
994 if templ_7745c5c3_Err != nil {
995 return templ_7745c5c3_Err
996 }
997 for _, b := range p.Back {
998 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 77, "<a href=\"")
999 if templ_7745c5c3_Err != nil {
1000 return templ_7745c5c3_Err
1001 }
1002 var templ_7745c5c3_Var48 templ.SafeURL
1003 templ_7745c5c3_Var48, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(b.Href))
1004 if templ_7745c5c3_Err != nil {
1005 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 206, Col: 36}
1006 }
1007 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var48))
1008 if templ_7745c5c3_Err != nil {
1009 return templ_7745c5c3_Err
1010 }
1011 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 78, "\">")
1012 if templ_7745c5c3_Err != nil {
1013 return templ_7745c5c3_Err
1014 }
1015 var templ_7745c5c3_Var49 string
1016 templ_7745c5c3_Var49, templ_7745c5c3_Err = templ.JoinStringErrs(b.Label)
1017 if templ_7745c5c3_Err != nil {
1018 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 206, Col: 48}
1019 }
1020 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var49))
1021 if templ_7745c5c3_Err != nil {
1022 return templ_7745c5c3_Err
1023 }
1024 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 79, "</a>")
1025 if templ_7745c5c3_Err != nil {
1026 return templ_7745c5c3_Err
1027 }
1028 }
1029 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 80, "</p></section>")
1030 if templ_7745c5c3_Err != nil {
1031 return templ_7745c5c3_Err
1032 }
1033 return nil
1034 })
1035 templ_7745c5c3_Err = Shell(l, nil).Render(templ.WithChildren(ctx, templ_7745c5c3_Var44), templ_7745c5c3_Buffer)
1036 if templ_7745c5c3_Err != nil {
1037 return templ_7745c5c3_Err
1038 }
1039 return nil
1040 })
1041}
1042
1043// Login signs the browser in with a login link. Opening the link consumes
1044// nothing; only this form does. ermite.js submits it as soon as a browser
1045// shows the page (data-autosubmit): link previews and prefetchers run no
1046// script, so they still cannot use the link. Without scripts the owner
1047// clicks the button.
1048func Login(l Layout, p LoginPage) templ.Component {
1049 return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1050 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
1051 if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
1052 return templ_7745c5c3_CtxErr
1053 }
1054 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1055 if !templ_7745c5c3_IsBuffer {
1056 defer func() {
1057 templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
1058 if templ_7745c5c3_Err == nil {
1059 templ_7745c5c3_Err = templ_7745c5c3_BufErr
1060 }
1061 }()
1062 }
1063 ctx = templ.InitializeContext(ctx)
1064 templ_7745c5c3_Var50 := templ.GetChildren(ctx)
1065 if templ_7745c5c3_Var50 == nil {
1066 templ_7745c5c3_Var50 = templ.NopComponent
1067 }
1068 ctx = templ.ClearChildren(ctx)
1069 templ_7745c5c3_Var51 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1070 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
1071 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1072 if !templ_7745c5c3_IsBuffer {
1073 defer func() {
1074 templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
1075 if templ_7745c5c3_Err == nil {
1076 templ_7745c5c3_Err = templ_7745c5c3_BufErr
1077 }
1078 }()
1079 }
1080 ctx = templ.InitializeContext(ctx)
1081 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 81, "<section class=\"state\" aria-labelledby=\"state-title\"><h1 id=\"state-title\">")
1082 if templ_7745c5c3_Err != nil {
1083 return templ_7745c5c3_Err
1084 }
1085 var templ_7745c5c3_Var52 string
1086 templ_7745c5c3_Var52, templ_7745c5c3_Err = templ.JoinStringErrs(p.Title)
1087 if templ_7745c5c3_Err != nil {
1088 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 221, Col: 33}
1089 }
1090 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var52))
1091 if templ_7745c5c3_Err != nil {
1092 return templ_7745c5c3_Err
1093 }
1094 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 82, "</h1>")
1095 if templ_7745c5c3_Err != nil {
1096 return templ_7745c5c3_Err
1097 }
1098 for _, line := range p.Lines {
1099 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 83, "<p class=\"dim\">")
1100 if templ_7745c5c3_Err != nil {
1101 return templ_7745c5c3_Err
1102 }
1103 var templ_7745c5c3_Var53 string
1104 templ_7745c5c3_Var53, templ_7745c5c3_Err = templ.JoinStringErrs(line)
1105 if templ_7745c5c3_Err != nil {
1106 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 223, Col: 25}
1107 }
1108 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var53))
1109 if templ_7745c5c3_Err != nil {
1110 return templ_7745c5c3_Err
1111 }
1112 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 84, "</p>")
1113 if templ_7745c5c3_Err != nil {
1114 return templ_7745c5c3_Err
1115 }
1116 }
1117 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 85, "<form class=\"state-act\" method=\"post\" action=\"")
1118 if templ_7745c5c3_Err != nil {
1119 return templ_7745c5c3_Err
1120 }
1121 var templ_7745c5c3_Var54 templ.SafeURL
1122 templ_7745c5c3_Var54, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Action))
1123 if templ_7745c5c3_Err != nil {
1124 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 225, Col: 73}
1125 }
1126 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var54))
1127 if templ_7745c5c3_Err != nil {
1128 return templ_7745c5c3_Err
1129 }
1130 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 86, "\" data-autosubmit><button type=\"submit\" class=\"btn primary\">")
1131 if templ_7745c5c3_Err != nil {
1132 return templ_7745c5c3_Err
1133 }
1134 var templ_7745c5c3_Var55 string
1135 templ_7745c5c3_Var55, templ_7745c5c3_Err = templ.JoinStringErrs(p.Button)
1136 if templ_7745c5c3_Err != nil {
1137 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 226, Col: 56}
1138 }
1139 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var55))
1140 if templ_7745c5c3_Err != nil {
1141 return templ_7745c5c3_Err
1142 }
1143 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 87, "</button></form><p class=\"state-back\"><a href=\"/\">Back to home</a></p></section>")
1144 if templ_7745c5c3_Err != nil {
1145 return templ_7745c5c3_Err
1146 }
1147 return nil
1148 })
1149 templ_7745c5c3_Err = Shell(l, nil).Render(templ.WithChildren(ctx, templ_7745c5c3_Var51), templ_7745c5c3_Buffer)
1150 if templ_7745c5c3_Err != nil {
1151 return templ_7745c5c3_Err
1152 }
1153 return nil
1154 })
1155}
1156
1157// PasskeyLogin is the sign-in page: a button the script (passkey.js) drives.
1158// Without script the button is hidden and the page says what to do instead.
1159func PasskeyLogin(l Layout, p PasskeyLoginPage) templ.Component {
1160 return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1161 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
1162 if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
1163 return templ_7745c5c3_CtxErr
1164 }
1165 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1166 if !templ_7745c5c3_IsBuffer {
1167 defer func() {
1168 templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
1169 if templ_7745c5c3_Err == nil {
1170 templ_7745c5c3_Err = templ_7745c5c3_BufErr
1171 }
1172 }()
1173 }
1174 ctx = templ.InitializeContext(ctx)
1175 templ_7745c5c3_Var56 := templ.GetChildren(ctx)
1176 if templ_7745c5c3_Var56 == nil {
1177 templ_7745c5c3_Var56 = templ.NopComponent
1178 }
1179 ctx = templ.ClearChildren(ctx)
1180 templ_7745c5c3_Var57 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1181 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
1182 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1183 if !templ_7745c5c3_IsBuffer {
1184 defer func() {
1185 templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
1186 if templ_7745c5c3_Err == nil {
1187 templ_7745c5c3_Err = templ_7745c5c3_BufErr
1188 }
1189 }()
1190 }
1191 ctx = templ.InitializeContext(ctx)
1192 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 88, "<section class=\"state\" aria-labelledby=\"state-title\"><h1 id=\"state-title\">")
1193 if templ_7745c5c3_Err != nil {
1194 return templ_7745c5c3_Err
1195 }
1196 var templ_7745c5c3_Var58 string
1197 templ_7745c5c3_Var58, templ_7745c5c3_Err = templ.JoinStringErrs(p.Title)
1198 if templ_7745c5c3_Err != nil {
1199 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 238, Col: 33}
1200 }
1201 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var58))
1202 if templ_7745c5c3_Err != nil {
1203 return templ_7745c5c3_Err
1204 }
1205 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 89, "</h1><form class=\"state-act\" data-js data-passkey-form><button type=\"submit\" class=\"btn primary\" data-passkey=\"login\" data-begin=\"")
1206 if templ_7745c5c3_Err != nil {
1207 return templ_7745c5c3_Err
1208 }
1209 var templ_7745c5c3_Var59 string
1210 templ_7745c5c3_Var59, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Begin)
1211 if templ_7745c5c3_Err != nil {
1212 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 240, Col: 87}
1213 }
1214 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var59)
1215 if templ_7745c5c3_Err != nil {
1216 return templ_7745c5c3_Err
1217 }
1218 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 90, "\" data-finish=\"")
1219 if templ_7745c5c3_Err != nil {
1220 return templ_7745c5c3_Err
1221 }
1222 var templ_7745c5c3_Var60 string
1223 templ_7745c5c3_Var60, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Finish)
1224 if templ_7745c5c3_Err != nil {
1225 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 240, Col: 112}
1226 }
1227 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var60)
1228 if templ_7745c5c3_Err != nil {
1229 return templ_7745c5c3_Err
1230 }
1231 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 91, "\">")
1232 if templ_7745c5c3_Err != nil {
1233 return templ_7745c5c3_Err
1234 }
1235 var templ_7745c5c3_Var61 string
1236 templ_7745c5c3_Var61, templ_7745c5c3_Err = templ.JoinStringErrs(p.Button)
1237 if templ_7745c5c3_Err != nil {
1238 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 240, Col: 125}
1239 }
1240 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var61))
1241 if templ_7745c5c3_Err != nil {
1242 return templ_7745c5c3_Err
1243 }
1244 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 92, "</button></form><p class=\"dim\" role=\"status\" aria-live=\"polite\" data-passkey-status></p>")
1245 if templ_7745c5c3_Err != nil {
1246 return templ_7745c5c3_Err
1247 }
1248 for _, line := range p.Lines {
1249 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 93, "<p class=\"dim\">")
1250 if templ_7745c5c3_Err != nil {
1251 return templ_7745c5c3_Err
1252 }
1253 var templ_7745c5c3_Var62 string
1254 templ_7745c5c3_Var62, templ_7745c5c3_Err = templ.JoinStringErrs(line)
1255 if templ_7745c5c3_Err != nil {
1256 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 244, Col: 25}
1257 }
1258 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var62))
1259 if templ_7745c5c3_Err != nil {
1260 return templ_7745c5c3_Err
1261 }
1262 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 94, "</p>")
1263 if templ_7745c5c3_Err != nil {
1264 return templ_7745c5c3_Err
1265 }
1266 }
1267 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 95, "<p class=\"state-back\"><a href=\"/\">Back to home</a></p></section>")
1268 if templ_7745c5c3_Err != nil {
1269 return templ_7745c5c3_Err
1270 }
1271 return nil
1272 })
1273 templ_7745c5c3_Err = Shell(l, nil).Render(templ.WithChildren(ctx, templ_7745c5c3_Var57), templ_7745c5c3_Buffer)
1274 if templ_7745c5c3_Err != nil {
1275 return templ_7745c5c3_Err
1276 }
1277 return nil
1278 })
1279}
1280
1281// Passkeys lists the owner's passkeys, removes them and adds one.
1282func Passkeys(l Layout, p PasskeysPage) templ.Component {
1283 return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1284 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
1285 if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
1286 return templ_7745c5c3_CtxErr
1287 }
1288 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1289 if !templ_7745c5c3_IsBuffer {
1290 defer func() {
1291 templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
1292 if templ_7745c5c3_Err == nil {
1293 templ_7745c5c3_Err = templ_7745c5c3_BufErr
1294 }
1295 }()
1296 }
1297 ctx = templ.InitializeContext(ctx)
1298 templ_7745c5c3_Var63 := templ.GetChildren(ctx)
1299 if templ_7745c5c3_Var63 == nil {
1300 templ_7745c5c3_Var63 = templ.NopComponent
1301 }
1302 ctx = templ.ClearChildren(ctx)
1303 templ_7745c5c3_Var64 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1304 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
1305 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1306 if !templ_7745c5c3_IsBuffer {
1307 defer func() {
1308 templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
1309 if templ_7745c5c3_Err == nil {
1310 templ_7745c5c3_Err = templ_7745c5c3_BufErr
1311 }
1312 }()
1313 }
1314 ctx = templ.InitializeContext(ctx)
1315 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 96, "<h2 class=\"rule-h\"><span>Passkeys</span><span class=\"count\">")
1316 if templ_7745c5c3_Err != nil {
1317 return templ_7745c5c3_Err
1318 }
1319 var templ_7745c5c3_Var65 string
1320 templ_7745c5c3_Var65, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Rows)))
1321 if templ_7745c5c3_Err != nil {
1322 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 254, Col: 81}
1323 }
1324 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var65))
1325 if templ_7745c5c3_Err != nil {
1326 return templ_7745c5c3_Err
1327 }
1328 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 97, "</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>")
1329 if templ_7745c5c3_Err != nil {
1330 return templ_7745c5c3_Err
1331 }
1332 if len(p.Rows) > 0 {
1333 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 98, "<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>")
1334 if templ_7745c5c3_Err != nil {
1335 return templ_7745c5c3_Err
1336 }
1337 for _, r := range p.Rows {
1338 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 99, "<tr><td class=\"c-name\">")
1339 if templ_7745c5c3_Err != nil {
1340 return templ_7745c5c3_Err
1341 }
1342 var templ_7745c5c3_Var66 string
1343 templ_7745c5c3_Var66, templ_7745c5c3_Err = templ.JoinStringErrs(r.Name)
1344 if templ_7745c5c3_Err != nil {
1345 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 270, Col: 34}
1346 }
1347 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var66))
1348 if templ_7745c5c3_Err != nil {
1349 return templ_7745c5c3_Err
1350 }
1351 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 100, "</td><td class=\"c-when nowrap\"><time")
1352 if templ_7745c5c3_Err != nil {
1353 return templ_7745c5c3_Err
1354 }
1355 if r.CreatedAt != "" {
1356 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 101, " datetime=\"")
1357 if templ_7745c5c3_Err != nil {
1358 return templ_7745c5c3_Err
1359 }
1360 var templ_7745c5c3_Var67 string
1361 templ_7745c5c3_Var67, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.CreatedAt)
1362 if templ_7745c5c3_Err != nil {
1363 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 274, Col: 32}
1364 }
1365 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var67)
1366 if templ_7745c5c3_Err != nil {
1367 return templ_7745c5c3_Err
1368 }
1369 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 102, "\"")
1370 if templ_7745c5c3_Err != nil {
1371 return templ_7745c5c3_Err
1372 }
1373 }
1374 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 103, ">")
1375 if templ_7745c5c3_Err != nil {
1376 return templ_7745c5c3_Err
1377 }
1378 var templ_7745c5c3_Var68 string
1379 templ_7745c5c3_Var68, templ_7745c5c3_Err = templ.JoinStringErrs(r.Created)
1380 if templ_7745c5c3_Err != nil {
1381 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 276, Col: 20}
1382 }
1383 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var68))
1384 if templ_7745c5c3_Err != nil {
1385 return templ_7745c5c3_Err
1386 }
1387 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 104, "</time></td><td class=\"c-when nowrap\"><time")
1388 if templ_7745c5c3_Err != nil {
1389 return templ_7745c5c3_Err
1390 }
1391 if r.LastUsedAt != "" {
1392 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 105, " datetime=\"")
1393 if templ_7745c5c3_Err != nil {
1394 return templ_7745c5c3_Err
1395 }
1396 var templ_7745c5c3_Var69 string
1397 templ_7745c5c3_Var69, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.LastUsedAt)
1398 if templ_7745c5c3_Err != nil {
1399 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 281, Col: 33}
1400 }
1401 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var69)
1402 if templ_7745c5c3_Err != nil {
1403 return templ_7745c5c3_Err
1404 }
1405 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 106, "\"")
1406 if templ_7745c5c3_Err != nil {
1407 return templ_7745c5c3_Err
1408 }
1409 }
1410 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 107, ">")
1411 if templ_7745c5c3_Err != nil {
1412 return templ_7745c5c3_Err
1413 }
1414 var templ_7745c5c3_Var70 string
1415 templ_7745c5c3_Var70, templ_7745c5c3_Err = templ.JoinStringErrs(r.LastUsed)
1416 if templ_7745c5c3_Err != nil {
1417 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 283, Col: 21}
1418 }
1419 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var70))
1420 if templ_7745c5c3_Err != nil {
1421 return templ_7745c5c3_Err
1422 }
1423 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 108, "</time></td><td class=\"c-sync\">")
1424 if templ_7745c5c3_Err != nil {
1425 return templ_7745c5c3_Err
1426 }
1427 if r.Synced {
1428 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 109, "yes")
1429 if templ_7745c5c3_Err != nil {
1430 return templ_7745c5c3_Err
1431 }
1432 } else {
1433 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 110, "no")
1434 if templ_7745c5c3_Err != nil {
1435 return templ_7745c5c3_Err
1436 }
1437 }
1438 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 111, "</td><td class=\"c-act\"><form method=\"post\" action=\"")
1439 if templ_7745c5c3_Err != nil {
1440 return templ_7745c5c3_Err
1441 }
1442 var templ_7745c5c3_Var71 templ.SafeURL
1443 templ_7745c5c3_Var71, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(r.Remove))
1444 if templ_7745c5c3_Err != nil {
1445 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 293, Col: 60}
1446 }
1447 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var71))
1448 if templ_7745c5c3_Err != nil {
1449 return templ_7745c5c3_Err
1450 }
1451 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 112, "\"><button type=\"submit\" class=\"btn danger\" aria-label=\"")
1452 if templ_7745c5c3_Err != nil {
1453 return templ_7745c5c3_Err
1454 }
1455 var templ_7745c5c3_Var72 string
1456 templ_7745c5c3_Var72, templ_7745c5c3_Err = templ.ResolveAttributeValue("Remove passkey " + r.Name)
1457 if templ_7745c5c3_Err != nil {
1458 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 294, Col: 89}
1459 }
1460 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var72)
1461 if templ_7745c5c3_Err != nil {
1462 return templ_7745c5c3_Err
1463 }
1464 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 113, "\">Remove</button></form></td></tr>")
1465 if templ_7745c5c3_Err != nil {
1466 return templ_7745c5c3_Err
1467 }
1468 }
1469 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 114, "</tbody></table>")
1470 if templ_7745c5c3_Err != nil {
1471 return templ_7745c5c3_Err
1472 }
1473 } else {
1474 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 115, "<p class=\"lede dim\">no passkeys yet.</p>")
1475 if templ_7745c5c3_Err != nil {
1476 return templ_7745c5c3_Err
1477 }
1478 }
1479 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 116, " ")
1480 if templ_7745c5c3_Err != nil {
1481 return templ_7745c5c3_Err
1482 }
1483 if p.Full {
1484 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 117, "<p class=\"dim\">")
1485 if templ_7745c5c3_Err != nil {
1486 return templ_7745c5c3_Err
1487 }
1488 var templ_7745c5c3_Var73 string
1489 templ_7745c5c3_Var73, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Max))
1490 if templ_7745c5c3_Err != nil {
1491 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 305, Col: 31}
1492 }
1493 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var73))
1494 if templ_7745c5c3_Err != nil {
1495 return templ_7745c5c3_Err
1496 }
1497 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 118, " passkeys are registered, the most there can be. Remove one to add another.</p>")
1498 if templ_7745c5c3_Err != nil {
1499 return templ_7745c5c3_Err
1500 }
1501 } else {
1502 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 119, "<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=\"")
1503 if templ_7745c5c3_Err != nil {
1504 return templ_7745c5c3_Err
1505 }
1506 var templ_7745c5c3_Var74 string
1507 templ_7745c5c3_Var74, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Begin)
1508 if templ_7745c5c3_Err != nil {
1509 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 310, Col: 90}
1510 }
1511 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var74)
1512 if templ_7745c5c3_Err != nil {
1513 return templ_7745c5c3_Err
1514 }
1515 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 120, "\" data-finish=\"")
1516 if templ_7745c5c3_Err != nil {
1517 return templ_7745c5c3_Err
1518 }
1519 var templ_7745c5c3_Var75 string
1520 templ_7745c5c3_Var75, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Finish)
1521 if templ_7745c5c3_Err != nil {
1522 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 310, Col: 115}
1523 }
1524 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var75)
1525 if templ_7745c5c3_Err != nil {
1526 return templ_7745c5c3_Err
1527 }
1528 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 121, "\">Add a passkey</button></form>")
1529 if templ_7745c5c3_Err != nil {
1530 return templ_7745c5c3_Err
1531 }
1532 }
1533 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 122, " <p class=\"dim\" role=\"status\" aria-live=\"polite\" data-passkey-status></p>")
1534 if templ_7745c5c3_Err != nil {
1535 return templ_7745c5c3_Err
1536 }
1537 return nil
1538 })
1539 templ_7745c5c3_Err = Shell(l, nil).Render(templ.WithChildren(ctx, templ_7745c5c3_Var64), templ_7745c5c3_Buffer)
1540 if templ_7745c5c3_Err != nil {
1541 return templ_7745c5c3_Err
1542 }
1543 return nil
1544 })
1545}
1546
1547var _ = templruntime.GeneratedTemplate