v0.32.0 0617278

favorites_templ.go RawHistoryFolder

1// Code generated by templ - DO NOT EDIT.
2
3package systemviews
4
5//lint:file-ignore SA4006 This context is only used if a nested component is present.
6
7import "github.com/a-h/templ"
8import templruntime "github.com/a-h/templ/runtime"
9
10import (
11	"fmt"
12	"github.com/bnema/dumber/internal/domain/entity"
13)
14
15func FavoritesView(data favoritesRenderData) templ.Component {
16	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
17		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
18		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
19			return templ_7745c5c3_CtxErr
20		}
21		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
22		if !templ_7745c5c3_IsBuffer {
23			defer func() {
24				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
25				if templ_7745c5c3_Err == nil {
26					templ_7745c5c3_Err = templ_7745c5c3_BufErr
27				}
28			}()
29		}
30		ctx = templ.InitializeContext(ctx)
31		templ_7745c5c3_Var1 := templ.GetChildren(ctx)
32		if templ_7745c5c3_Var1 == nil {
33			templ_7745c5c3_Var1 = templ.NopComponent
34		}
35		ctx = templ.ClearChildren(ctx)
36		templ_7745c5c3_Err = Alert("success", data.Notice).Render(ctx, templ_7745c5c3_Buffer)
37		if templ_7745c5c3_Err != nil {
38			return templ_7745c5c3_Err
39		}
40		templ_7745c5c3_Err = Alert("error", data.Error).Render(ctx, templ_7745c5c3_Buffer)
41		if templ_7745c5c3_Err != nil {
42			return templ_7745c5c3_Err
43		}
44		templ_7745c5c3_Var2 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
45			templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
46			templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
47			if !templ_7745c5c3_IsBuffer {
48				defer func() {
49					templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
50					if templ_7745c5c3_Err == nil {
51						templ_7745c5c3_Err = templ_7745c5c3_BufErr
52					}
53				}()
54			}
55			ctx = templ.InitializeContext(ctx)
56			templ_7745c5c3_Err = FavoritesControls(data).Render(ctx, templ_7745c5c3_Buffer)
57			if templ_7745c5c3_Err != nil {
58				return templ_7745c5c3_Err
59			}
60			return nil
61		})
62		templ_7745c5c3_Err = Section("sv-favorites-controls", "Manage favorites").Render(templ.WithChildren(ctx, templ_7745c5c3_Var2), templ_7745c5c3_Buffer)
63		if templ_7745c5c3_Err != nil {
64			return templ_7745c5c3_Err
65		}
66		templ_7745c5c3_Var3 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
67			templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
68			templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
69			if !templ_7745c5c3_IsBuffer {
70				defer func() {
71					templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
72					if templ_7745c5c3_Err == nil {
73						templ_7745c5c3_Err = templ_7745c5c3_BufErr
74					}
75				}()
76			}
77			ctx = templ.InitializeContext(ctx)
78			templ_7745c5c3_Err = Meta(favoritesSummary(data)).Render(ctx, templ_7745c5c3_Buffer)
79			if templ_7745c5c3_Err != nil {
80				return templ_7745c5c3_Err
81			}
82			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, " ")
83			if templ_7745c5c3_Err != nil {
84				return templ_7745c5c3_Err
85			}
86			if len(data.Favorites) == 0 {
87				templ_7745c5c3_Err = EmptyState("No favorites").Render(ctx, templ_7745c5c3_Buffer)
88				if templ_7745c5c3_Err != nil {
89					return templ_7745c5c3_Err
90				}
91			} else {
92				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "<ul class=\"sv-list\">")
93				if templ_7745c5c3_Err != nil {
94					return templ_7745c5c3_Err
95				}
96				for _, favorite := range data.Favorites {
97					if favorite != nil {
98						templ_7745c5c3_Err = FavoriteItem(favorite, data.Tags).Render(ctx, templ_7745c5c3_Buffer)
99						if templ_7745c5c3_Err != nil {
100							return templ_7745c5c3_Err
101						}
102					}
103				}
104				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, "</ul>")
105				if templ_7745c5c3_Err != nil {
106					return templ_7745c5c3_Err
107				}
108			}
109			return nil
110		})
111		templ_7745c5c3_Err = Section("sv-favorites-list", "Favorites").Render(templ.WithChildren(ctx, templ_7745c5c3_Var3), templ_7745c5c3_Buffer)
112		if templ_7745c5c3_Err != nil {
113			return templ_7745c5c3_Err
114		}
115		templ_7745c5c3_Var4 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
116			templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
117			templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
118			if !templ_7745c5c3_IsBuffer {
119				defer func() {
120					templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
121					if templ_7745c5c3_Err == nil {
122						templ_7745c5c3_Err = templ_7745c5c3_BufErr
123					}
124				}()
125			}
126			ctx = templ.InitializeContext(ctx)
127			templ_7745c5c3_Err = Meta(tagsSummary(data)).Render(ctx, templ_7745c5c3_Buffer)
128			if templ_7745c5c3_Err != nil {
129				return templ_7745c5c3_Err
130			}
131			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, " ")
132			if templ_7745c5c3_Err != nil {
133				return templ_7745c5c3_Err
134			}
135			templ_7745c5c3_Err = TagCreateForm().Render(ctx, templ_7745c5c3_Buffer)
136			if templ_7745c5c3_Err != nil {
137				return templ_7745c5c3_Err
138			}
139			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, " ")
140			if templ_7745c5c3_Err != nil {
141				return templ_7745c5c3_Err
142			}
143			if len(data.Tags) == 0 {
144				templ_7745c5c3_Err = EmptyState("No tags").Render(ctx, templ_7745c5c3_Buffer)
145				if templ_7745c5c3_Err != nil {
146					return templ_7745c5c3_Err
147				}
148			} else {
149				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, "<ul class=\"sv-list\">")
150				if templ_7745c5c3_Err != nil {
151					return templ_7745c5c3_Err
152				}
153				for _, tag := range data.Tags {
154					if tag != nil {
155						templ_7745c5c3_Err = TagItem(tag).Render(ctx, templ_7745c5c3_Buffer)
156						if templ_7745c5c3_Err != nil {
157							return templ_7745c5c3_Err
158						}
159					}
160				}
161				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 7, "</ul>")
162				if templ_7745c5c3_Err != nil {
163					return templ_7745c5c3_Err
164				}
165			}
166			return nil
167		})
168		templ_7745c5c3_Err = Section("sv-tags-list", "Tags").Render(templ.WithChildren(ctx, templ_7745c5c3_Var4), templ_7745c5c3_Buffer)
169		if templ_7745c5c3_Err != nil {
170			return templ_7745c5c3_Err
171		}
172		return nil
173	})
174}
175
176func FavoritesControls(data favoritesRenderData) templ.Component {
177	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
178		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
179		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
180			return templ_7745c5c3_CtxErr
181		}
182		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
183		if !templ_7745c5c3_IsBuffer {
184			defer func() {
185				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
186				if templ_7745c5c3_Err == nil {
187					templ_7745c5c3_Err = templ_7745c5c3_BufErr
188				}
189			}()
190		}
191		ctx = templ.InitializeContext(ctx)
192		templ_7745c5c3_Var5 := templ.GetChildren(ctx)
193		if templ_7745c5c3_Var5 == nil {
194			templ_7745c5c3_Var5 = templ.NopComponent
195		}
196		ctx = templ.ClearChildren(ctx)
197		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 8, "<form class=\"sv-card-form\" data-sv-action=\"favorite.create\"><label><span>URL</span><input name=\"url\" type=\"url\" placeholder=\"https://example.com\" required></label> <label><span>Title</span><input name=\"title\" type=\"text\" placeholder=\"Optional title\"></label>")
198		if templ_7745c5c3_Err != nil {
199			return templ_7745c5c3_Err
200		}
201		templ_7745c5c3_Err = FavoriteCreateTagPicker(data.Tags).Render(ctx, templ_7745c5c3_Buffer)
202		if templ_7745c5c3_Err != nil {
203			return templ_7745c5c3_Err
204		}
205		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, "<button class=\"sv-button\" type=\"submit\">")
206		if templ_7745c5c3_Err != nil {
207			return templ_7745c5c3_Err
208		}
209		templ_7745c5c3_Err = ButtonIconLabel(iconPlus, "Add favorite").Render(ctx, templ_7745c5c3_Buffer)
210		if templ_7745c5c3_Err != nil {
211			return templ_7745c5c3_Err
212		}
213		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, "</button></form><div class=\"sv-filter-panel\"><div class=\"sv-button-row\"><span class=\"sv-meta\">Tags</span> ")
214		if templ_7745c5c3_Err != nil {
215			return templ_7745c5c3_Err
216		}
217		var templ_7745c5c3_Var6 = []any{favoriteFilterClass(favoriteAllFilterActive(data))}
218		templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var6...)
219		if templ_7745c5c3_Err != nil {
220			return templ_7745c5c3_Err
221		}
222		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, "<button type=\"button\" class=\"")
223		if templ_7745c5c3_Err != nil {
224			return templ_7745c5c3_Err
225		}
226		var templ_7745c5c3_Var7 string
227		templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var6).String())
228		if templ_7745c5c3_Err != nil {
229			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 1, Col: 0}
230		}
231		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var7)
232		if templ_7745c5c3_Err != nil {
233			return templ_7745c5c3_Err
234		}
235		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, "\" aria-pressed=\"")
236		if templ_7745c5c3_Err != nil {
237			return templ_7745c5c3_Err
238		}
239		var templ_7745c5c3_Var8 string
240		templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.ResolveAttributeValue(fmt.Sprintf("%t", favoriteAllFilterActive(data)))
241		if templ_7745c5c3_Err != nil {
242			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 55, Col: 149}
243		}
244		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var8)
245		if templ_7745c5c3_Err != nil {
246			return templ_7745c5c3_Err
247		}
248		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, "\" data-sv-action=\"favorite.clearFilters\">All</button> ")
249		if templ_7745c5c3_Err != nil {
250			return templ_7745c5c3_Err
251		}
252		var templ_7745c5c3_Var9 = []any{favoriteFilterClass(favoriteUntaggedFilterActive(data))}
253		templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var9...)
254		if templ_7745c5c3_Err != nil {
255			return templ_7745c5c3_Err
256		}
257		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 14, "<button type=\"button\" class=\"")
258		if templ_7745c5c3_Err != nil {
259			return templ_7745c5c3_Err
260		}
261		var templ_7745c5c3_Var10 string
262		templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var9).String())
263		if templ_7745c5c3_Err != nil {
264			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 1, Col: 0}
265		}
266		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var10)
267		if templ_7745c5c3_Err != nil {
268			return templ_7745c5c3_Err
269		}
270		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, "\" aria-pressed=\"")
271		if templ_7745c5c3_Err != nil {
272			return templ_7745c5c3_Err
273		}
274		var templ_7745c5c3_Var11 string
275		templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.ResolveAttributeValue(fmt.Sprintf("%t", favoriteUntaggedFilterActive(data)))
276		if templ_7745c5c3_Err != nil {
277			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 56, Col: 159}
278		}
279		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var11)
280		if templ_7745c5c3_Err != nil {
281			return templ_7745c5c3_Err
282		}
283		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "\" data-sv-action=\"favorite.filterUntagged\">Untagged</button> ")
284		if templ_7745c5c3_Err != nil {
285			return templ_7745c5c3_Err
286		}
287		for _, tag := range data.Tags {
288			if tag != nil {
289				var templ_7745c5c3_Var12 = []any{favoriteFilterClass(favoriteTagFilterActive(data, tag.ID))}
290				templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var12...)
291				if templ_7745c5c3_Err != nil {
292					return templ_7745c5c3_Err
293				}
294				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 17, "<button type=\"button\" class=\"")
295				if templ_7745c5c3_Err != nil {
296					return templ_7745c5c3_Err
297				}
298				var templ_7745c5c3_Var13 string
299				templ_7745c5c3_Var13, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var12).String())
300				if templ_7745c5c3_Err != nil {
301					return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 1, Col: 0}
302				}
303				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var13)
304				if templ_7745c5c3_Err != nil {
305					return templ_7745c5c3_Err
306				}
307				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 18, "\" aria-pressed=\"")
308				if templ_7745c5c3_Err != nil {
309					return templ_7745c5c3_Err
310				}
311				var templ_7745c5c3_Var14 string
312				templ_7745c5c3_Var14, templ_7745c5c3_Err = templ.ResolveAttributeValue(fmt.Sprintf("%t", favoriteTagFilterActive(data, tag.ID)))
313				if templ_7745c5c3_Err != nil {
314					return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 59, Col: 167}
315				}
316				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var14)
317				if templ_7745c5c3_Err != nil {
318					return templ_7745c5c3_Err
319				}
320				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 19, "\" data-sv-action=\"favorite.filterTag\" data-tag-id=\"")
321				if templ_7745c5c3_Err != nil {
322					return templ_7745c5c3_Err
323				}
324				var templ_7745c5c3_Var15 string
325				templ_7745c5c3_Var15, templ_7745c5c3_Err = templ.ResolveAttributeValue(fmt.Sprintf("%d", tag.ID))
326				if templ_7745c5c3_Err != nil {
327					return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 59, Col: 245}
328				}
329				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var15)
330				if templ_7745c5c3_Err != nil {
331					return templ_7745c5c3_Err
332				}
333				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, "\"><span class=\"sv-tag-dot\" style=\"")
334				if templ_7745c5c3_Err != nil {
335					return templ_7745c5c3_Err
336				}
337				var templ_7745c5c3_Var16 string
338				templ_7745c5c3_Var16, templ_7745c5c3_Err = templruntime.SanitizeStyleAttributeValues("background:" + safeTagColor(tag.Color))
339				if templ_7745c5c3_Err != nil {
340					return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 60, Col: 78}
341				}
342				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var16))
343				if templ_7745c5c3_Err != nil {
344					return templ_7745c5c3_Err
345				}
346				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "\"></span>")
347				if templ_7745c5c3_Err != nil {
348					return templ_7745c5c3_Err
349				}
350				var templ_7745c5c3_Var17 string
351				templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.JoinStringErrs(tag.Name)
352				if templ_7745c5c3_Err != nil {
353					return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 60, Col: 98}
354				}
355				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var17))
356				if templ_7745c5c3_Err != nil {
357					return templ_7745c5c3_Err
358				}
359				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "</button>")
360				if templ_7745c5c3_Err != nil {
361					return templ_7745c5c3_Err
362				}
363			}
364		}
365		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 23, "</div></div><p class=\"sv-meta sv-key-hints\">Keys: <kbd>j</kbd>/<kbd>k</kbd> move, <kbd>Enter</kbd> open, <kbd>e</kbd> edit title, <kbd>d</kbd> delete focused favorite.</p>")
366		if templ_7745c5c3_Err != nil {
367			return templ_7745c5c3_Err
368		}
369		return nil
370	})
371}
372
373func FavoriteCreateTagPicker(tags []*entity.Tag) templ.Component {
374	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
375		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
376		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
377			return templ_7745c5c3_CtxErr
378		}
379		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
380		if !templ_7745c5c3_IsBuffer {
381			defer func() {
382				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
383				if templ_7745c5c3_Err == nil {
384					templ_7745c5c3_Err = templ_7745c5c3_BufErr
385				}
386			}()
387		}
388		ctx = templ.InitializeContext(ctx)
389		templ_7745c5c3_Var18 := templ.GetChildren(ctx)
390		if templ_7745c5c3_Var18 == nil {
391			templ_7745c5c3_Var18 = templ.NopComponent
392		}
393		ctx = templ.ClearChildren(ctx)
394		if len(tags) > 0 {
395			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, "<fieldset class=\"sv-tag-picker\"><legend>Tags</legend><div class=\"sv-tag-controls\">")
396			if templ_7745c5c3_Err != nil {
397				return templ_7745c5c3_Err
398			}
399			for _, tag := range tags {
400				if tag != nil {
401					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 25, "<label class=\"sv-tag-toggle\"><input type=\"checkbox\" name=\"tags\" value=\"")
402					if templ_7745c5c3_Err != nil {
403						return templ_7745c5c3_Err
404					}
405					var templ_7745c5c3_Var19 string
406					templ_7745c5c3_Var19, templ_7745c5c3_Err = templ.ResolveAttributeValue(fmt.Sprintf("%d", tag.ID))
407					if templ_7745c5c3_Err != nil {
408						return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 77, Col: 75}
409					}
410					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var19)
411					if templ_7745c5c3_Err != nil {
412						return templ_7745c5c3_Err
413					}
414					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 26, "\"> <span><span class=\"sv-tag-dot\" style=\"")
415					if templ_7745c5c3_Err != nil {
416						return templ_7745c5c3_Err
417					}
418					var templ_7745c5c3_Var20 string
419					templ_7745c5c3_Var20, templ_7745c5c3_Err = templruntime.SanitizeStyleAttributeValues("background:" + safeTagColor(tag.Color))
420					if templ_7745c5c3_Err != nil {
421						return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 78, Col: 85}
422					}
423					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var20))
424					if templ_7745c5c3_Err != nil {
425						return templ_7745c5c3_Err
426					}
427					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 27, "\"></span>")
428					if templ_7745c5c3_Err != nil {
429						return templ_7745c5c3_Err
430					}
431					var templ_7745c5c3_Var21 string
432					templ_7745c5c3_Var21, templ_7745c5c3_Err = templ.JoinStringErrs(tag.Name)
433					if templ_7745c5c3_Err != nil {
434						return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 78, Col: 105}
435					}
436					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var21))
437					if templ_7745c5c3_Err != nil {
438						return templ_7745c5c3_Err
439					}
440					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 28, "</span></label>")
441					if templ_7745c5c3_Err != nil {
442						return templ_7745c5c3_Err
443					}
444				}
445			}
446			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 29, "</div></fieldset>")
447			if templ_7745c5c3_Err != nil {
448				return templ_7745c5c3_Err
449			}
450		}
451		return nil
452	})
453}
454
455func FavoriteItem(favorite *entity.Favorite, tags []*entity.Tag) templ.Component {
456	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
457		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
458		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
459			return templ_7745c5c3_CtxErr
460		}
461		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
462		if !templ_7745c5c3_IsBuffer {
463			defer func() {
464				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
465				if templ_7745c5c3_Err == nil {
466					templ_7745c5c3_Err = templ_7745c5c3_BufErr
467				}
468			}()
469		}
470		ctx = templ.InitializeContext(ctx)
471		templ_7745c5c3_Var22 := templ.GetChildren(ctx)
472		if templ_7745c5c3_Var22 == nil {
473			templ_7745c5c3_Var22 = templ.NopComponent
474		}
475		ctx = templ.ClearChildren(ctx)
476		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 30, "<li class=\"sv-list-row\"><article class=\"sv-favorite-item\" data-sv-favorite-row data-favorite-id=\"")
477		if templ_7745c5c3_Err != nil {
478			return templ_7745c5c3_Err
479		}
480		var templ_7745c5c3_Var23 string
481		templ_7745c5c3_Var23, templ_7745c5c3_Err = templ.ResolveAttributeValue(fmt.Sprintf("%d", favorite.ID))
482		if templ_7745c5c3_Err != nil {
483			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 89, Col: 106}
484		}
485		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var23)
486		if templ_7745c5c3_Err != nil {
487			return templ_7745c5c3_Err
488		}
489		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 31, "\"><div class=\"sv-favorite-header\"><div><a class=\"sv-link sv-favorite-open\" href=\"")
490		if templ_7745c5c3_Err != nil {
491			return templ_7745c5c3_Err
492		}
493		var templ_7745c5c3_Var24 templ.SafeURL
494		templ_7745c5c3_Var24, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(sanitizeHref(favorite.URL)))
495		if templ_7745c5c3_Err != nil {
496			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 92, Col: 89}
497		}
498		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var24))
499		if templ_7745c5c3_Err != nil {
500			return templ_7745c5c3_Err
501		}
502		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 32, "\">")
503		if templ_7745c5c3_Err != nil {
504			return templ_7745c5c3_Err
505		}
506		var templ_7745c5c3_Var25 string
507		templ_7745c5c3_Var25, templ_7745c5c3_Err = templ.JoinStringErrs(favoriteItemLabel(favorite))
508		if templ_7745c5c3_Err != nil {
509			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 92, Col: 121}
510		}
511		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var25))
512		if templ_7745c5c3_Err != nil {
513			return templ_7745c5c3_Err
514		}
515		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 33, "</a><p class=\"sv-history-url\">")
516		if templ_7745c5c3_Err != nil {
517			return templ_7745c5c3_Err
518		}
519		var templ_7745c5c3_Var26 string
520		templ_7745c5c3_Var26, templ_7745c5c3_Err = templ.JoinStringErrs(favorite.URL)
521		if templ_7745c5c3_Err != nil {
522			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 93, Col: 45}
523		}
524		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var26))
525		if templ_7745c5c3_Err != nil {
526			return templ_7745c5c3_Err
527		}
528		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 34, "</p>")
529		if templ_7745c5c3_Err != nil {
530			return templ_7745c5c3_Err
531		}
532		if favoriteMetaText(favorite) != "" {
533			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 35, "<p class=\"sv-meta\">")
534			if templ_7745c5c3_Err != nil {
535				return templ_7745c5c3_Err
536			}
537			var templ_7745c5c3_Var27 string
538			templ_7745c5c3_Var27, templ_7745c5c3_Err = templ.JoinStringErrs(favoriteMetaText(favorite))
539			if templ_7745c5c3_Err != nil {
540				return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 95, Col: 53}
541			}
542			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var27))
543			if templ_7745c5c3_Err != nil {
544				return templ_7745c5c3_Err
545			}
546			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 36, "</p>")
547			if templ_7745c5c3_Err != nil {
548				return templ_7745c5c3_Err
549			}
550		}
551		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 37, "</div><div class=\"sv-history-row-actions\"><a class=\"sv-button sv-button-secondary\" href=\"")
552		if templ_7745c5c3_Err != nil {
553			return templ_7745c5c3_Err
554		}
555		var templ_7745c5c3_Var28 templ.SafeURL
556		templ_7745c5c3_Var28, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(sanitizeHref(favorite.URL)))
557		if templ_7745c5c3_Err != nil {
558			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 99, Col: 94}
559		}
560		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var28))
561		if templ_7745c5c3_Err != nil {
562			return templ_7745c5c3_Err
563		}
564		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 38, "\">")
565		if templ_7745c5c3_Err != nil {
566			return templ_7745c5c3_Err
567		}
568		templ_7745c5c3_Err = ButtonIconLabel(iconExternal, "Open").Render(ctx, templ_7745c5c3_Buffer)
569		if templ_7745c5c3_Err != nil {
570			return templ_7745c5c3_Err
571		}
572		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 39, "</a> <button type=\"button\" class=\"sv-button sv-button-secondary sv-button-danger sv-button-icon-only\" data-sv-action=\"favorite.delete\" data-id=\"")
573		if templ_7745c5c3_Err != nil {
574			return templ_7745c5c3_Err
575		}
576		var templ_7745c5c3_Var29 string
577		templ_7745c5c3_Var29, templ_7745c5c3_Err = templ.ResolveAttributeValue(fmt.Sprintf("%d", favorite.ID))
578		if templ_7745c5c3_Err != nil {
579			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 100, Col: 175}
580		}
581		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var29)
582		if templ_7745c5c3_Err != nil {
583			return templ_7745c5c3_Err
584		}
585		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, "\" data-sv-confirm=\"Delete this favorite?\" aria-label=\"Delete this favorite\">")
586		if templ_7745c5c3_Err != nil {
587			return templ_7745c5c3_Err
588		}
589		templ_7745c5c3_Err = IconOnly(iconTrash, "Delete this favorite").Render(ctx, templ_7745c5c3_Buffer)
590		if templ_7745c5c3_Err != nil {
591			return templ_7745c5c3_Err
592		}
593		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, "</button></div></div>")
594		if templ_7745c5c3_Err != nil {
595			return templ_7745c5c3_Err
596		}
597		templ_7745c5c3_Err = FavoriteEditForm(favorite).Render(ctx, templ_7745c5c3_Buffer)
598		if templ_7745c5c3_Err != nil {
599			return templ_7745c5c3_Err
600		}
601		templ_7745c5c3_Err = FavoriteTagControls(favorite, tags).Render(ctx, templ_7745c5c3_Buffer)
602		if templ_7745c5c3_Err != nil {
603			return templ_7745c5c3_Err
604		}
605		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, "</article></li>")
606		if templ_7745c5c3_Err != nil {
607			return templ_7745c5c3_Err
608		}
609		return nil
610	})
611}
612
613func FavoriteEditForm(favorite *entity.Favorite) templ.Component {
614	return 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		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
617			return templ_7745c5c3_CtxErr
618		}
619		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
620		if !templ_7745c5c3_IsBuffer {
621			defer func() {
622				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
623				if templ_7745c5c3_Err == nil {
624					templ_7745c5c3_Err = templ_7745c5c3_BufErr
625				}
626			}()
627		}
628		ctx = templ.InitializeContext(ctx)
629		templ_7745c5c3_Var30 := templ.GetChildren(ctx)
630		if templ_7745c5c3_Var30 == nil {
631			templ_7745c5c3_Var30 = templ.NopComponent
632		}
633		ctx = templ.ClearChildren(ctx)
634		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, "<form class=\"sv-inline-form\" data-sv-action=\"favorite.update\"><input type=\"hidden\" name=\"id\" value=\"")
635		if templ_7745c5c3_Err != nil {
636			return templ_7745c5c3_Err
637		}
638		var templ_7745c5c3_Var31 string
639		templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.ResolveAttributeValue(fmt.Sprintf("%d", favorite.ID))
640		if templ_7745c5c3_Err != nil {
641			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 111, Col: 71}
642		}
643		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var31)
644		if templ_7745c5c3_Err != nil {
645			return templ_7745c5c3_Err
646		}
647		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 44, "\"> <label><span>Title</span><input name=\"title\" type=\"text\" value=\"")
648		if templ_7745c5c3_Err != nil {
649			return templ_7745c5c3_Err
650		}
651		var templ_7745c5c3_Var32 string
652		templ_7745c5c3_Var32, templ_7745c5c3_Err = templ.ResolveAttributeValue(favorite.Title)
653		if templ_7745c5c3_Err != nil {
654			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 112, Col: 81}
655		}
656		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var32)
657		if templ_7745c5c3_Err != nil {
658			return templ_7745c5c3_Err
659		}
660		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, "\"></label> <label><span>Favicon</span><input name=\"favicon_url\" type=\"url\" value=\"")
661		if templ_7745c5c3_Err != nil {
662			return templ_7745c5c3_Err
663		}
664		var templ_7745c5c3_Var33 string
665		templ_7745c5c3_Var33, templ_7745c5c3_Err = templ.ResolveAttributeValue(favorite.FaviconURL)
666		if templ_7745c5c3_Err != nil {
667			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 113, Col: 93}
668		}
669		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var33)
670		if templ_7745c5c3_Err != nil {
671			return templ_7745c5c3_Err
672		}
673		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 46, "\"></label>")
674		if templ_7745c5c3_Err != nil {
675			return templ_7745c5c3_Err
676		}
677		templ_7745c5c3_Err = ShortcutSelect(favorite.ShortcutKey).Render(ctx, templ_7745c5c3_Buffer)
678		if templ_7745c5c3_Err != nil {
679			return templ_7745c5c3_Err
680		}
681		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 47, "<button class=\"sv-button sv-button-secondary\" type=\"submit\">")
682		if templ_7745c5c3_Err != nil {
683			return templ_7745c5c3_Err
684		}
685		templ_7745c5c3_Err = ButtonIconLabel(iconSave, "Save").Render(ctx, templ_7745c5c3_Buffer)
686		if templ_7745c5c3_Err != nil {
687			return templ_7745c5c3_Err
688		}
689		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 48, "</button></form>")
690		if templ_7745c5c3_Err != nil {
691			return templ_7745c5c3_Err
692		}
693		return nil
694	})
695}
696
697func FavoriteTagControls(favorite *entity.Favorite, tags []*entity.Tag) templ.Component {
698	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
699		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
700		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
701			return templ_7745c5c3_CtxErr
702		}
703		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
704		if !templ_7745c5c3_IsBuffer {
705			defer func() {
706				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
707				if templ_7745c5c3_Err == nil {
708					templ_7745c5c3_Err = templ_7745c5c3_BufErr
709				}
710			}()
711		}
712		ctx = templ.InitializeContext(ctx)
713		templ_7745c5c3_Var34 := templ.GetChildren(ctx)
714		if templ_7745c5c3_Var34 == nil {
715			templ_7745c5c3_Var34 = templ.NopComponent
716		}
717		ctx = templ.ClearChildren(ctx)
718		if len(tags) > 0 {
719			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 49, "<div class=\"sv-tag-controls\"><span class=\"sv-meta\">Tags</span> ")
720			if templ_7745c5c3_Err != nil {
721				return templ_7745c5c3_Err
722			}
723			for _, tag := range tags {
724				if tag != nil {
725					var templ_7745c5c3_Var35 = []any{favoriteTagButtonClass(favorite, tag)}
726					templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var35...)
727					if templ_7745c5c3_Err != nil {
728						return templ_7745c5c3_Err
729					}
730					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 50, "<button type=\"button\" class=\"")
731					if templ_7745c5c3_Err != nil {
732						return templ_7745c5c3_Err
733					}
734					var templ_7745c5c3_Var36 string
735					templ_7745c5c3_Var36, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var35).String())
736					if templ_7745c5c3_Err != nil {
737						return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 1, Col: 0}
738					}
739					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var36)
740					if templ_7745c5c3_Err != nil {
741						return templ_7745c5c3_Err
742					}
743					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 51, "\" data-sv-action=\"")
744					if templ_7745c5c3_Err != nil {
745						return templ_7745c5c3_Err
746					}
747					var templ_7745c5c3_Var37 string
748					templ_7745c5c3_Var37, templ_7745c5c3_Err = templ.ResolveAttributeValue(favoriteTagButtonAction(favorite, tag))
749					if templ_7745c5c3_Err != nil {
750						return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 125, Col: 130}
751					}
752					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var37)
753					if templ_7745c5c3_Err != nil {
754						return templ_7745c5c3_Err
755					}
756					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 52, "\" data-favorite-id=\"")
757					if templ_7745c5c3_Err != nil {
758						return templ_7745c5c3_Err
759					}
760					var templ_7745c5c3_Var38 string
761					templ_7745c5c3_Var38, templ_7745c5c3_Err = templ.ResolveAttributeValue(fmt.Sprintf("%d", favorite.ID))
762					if templ_7745c5c3_Err != nil {
763						return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 125, Col: 182}
764					}
765					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var38)
766					if templ_7745c5c3_Err != nil {
767						return templ_7745c5c3_Err
768					}
769					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 53, "\" data-tag-id=\"")
770					if templ_7745c5c3_Err != nil {
771						return templ_7745c5c3_Err
772					}
773					var templ_7745c5c3_Var39 string
774					templ_7745c5c3_Var39, templ_7745c5c3_Err = templ.ResolveAttributeValue(fmt.Sprintf("%d", tag.ID))
775					if templ_7745c5c3_Err != nil {
776						return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 125, Col: 224}
777					}
778					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var39)
779					if templ_7745c5c3_Err != nil {
780						return templ_7745c5c3_Err
781					}
782					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 54, "\"><span class=\"sv-tag-dot\" style=\"")
783					if templ_7745c5c3_Err != nil {
784						return templ_7745c5c3_Err
785					}
786					var templ_7745c5c3_Var40 string
787					templ_7745c5c3_Var40, templ_7745c5c3_Err = templruntime.SanitizeStyleAttributeValues("background:" + safeTagColor(tag.Color))
788					if templ_7745c5c3_Err != nil {
789						return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 126, Col: 78}
790					}
791					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var40))
792					if templ_7745c5c3_Err != nil {
793						return templ_7745c5c3_Err
794					}
795					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 55, "\"></span>")
796					if templ_7745c5c3_Err != nil {
797						return templ_7745c5c3_Err
798					}
799					var templ_7745c5c3_Var41 string
800					templ_7745c5c3_Var41, templ_7745c5c3_Err = templ.JoinStringErrs(favoriteTagButtonLabel(favorite, tag))
801					if templ_7745c5c3_Err != nil {
802						return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 126, Col: 127}
803					}
804					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var41))
805					if templ_7745c5c3_Err != nil {
806						return templ_7745c5c3_Err
807					}
808					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 56, "</button>")
809					if templ_7745c5c3_Err != nil {
810						return templ_7745c5c3_Err
811					}
812				}
813			}
814			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 57, "</div>")
815			if templ_7745c5c3_Err != nil {
816				return templ_7745c5c3_Err
817			}
818		}
819		return nil
820	})
821}
822
823func TagCreateForm() templ.Component {
824	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
825		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
826		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
827			return templ_7745c5c3_CtxErr
828		}
829		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
830		if !templ_7745c5c3_IsBuffer {
831			defer func() {
832				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
833				if templ_7745c5c3_Err == nil {
834					templ_7745c5c3_Err = templ_7745c5c3_BufErr
835				}
836			}()
837		}
838		ctx = templ.InitializeContext(ctx)
839		templ_7745c5c3_Var42 := templ.GetChildren(ctx)
840		if templ_7745c5c3_Var42 == nil {
841			templ_7745c5c3_Var42 = templ.NopComponent
842		}
843		ctx = templ.ClearChildren(ctx)
844		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 58, "<form class=\"sv-inline-form\" data-sv-action=\"tag.create\"><label><span>Name</span><input name=\"name\" type=\"text\" required></label> <label><span>Color</span><input name=\"color\" type=\"text\" placeholder=\"#808080\"></label> <button class=\"sv-button sv-button-secondary\" type=\"submit\">")
845		if templ_7745c5c3_Err != nil {
846			return templ_7745c5c3_Err
847		}
848		templ_7745c5c3_Err = ButtonIconLabel(iconTag, "Create tag").Render(ctx, templ_7745c5c3_Buffer)
849		if templ_7745c5c3_Err != nil {
850			return templ_7745c5c3_Err
851		}
852		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 59, "</button></form>")
853		if templ_7745c5c3_Err != nil {
854			return templ_7745c5c3_Err
855		}
856		return nil
857	})
858}
859
860func TagItem(tag *entity.Tag) templ.Component {
861	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
862		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
863		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
864			return templ_7745c5c3_CtxErr
865		}
866		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
867		if !templ_7745c5c3_IsBuffer {
868			defer func() {
869				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
870				if templ_7745c5c3_Err == nil {
871					templ_7745c5c3_Err = templ_7745c5c3_BufErr
872				}
873			}()
874		}
875		ctx = templ.InitializeContext(ctx)
876		templ_7745c5c3_Var43 := templ.GetChildren(ctx)
877		if templ_7745c5c3_Var43 == nil {
878			templ_7745c5c3_Var43 = templ.NopComponent
879		}
880		ctx = templ.ClearChildren(ctx)
881		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 60, "<li class=\"sv-list-row\"><form class=\"sv-inline-form\" data-sv-action=\"tag.update\"><input type=\"hidden\" name=\"id\" value=\"")
882		if templ_7745c5c3_Err != nil {
883			return templ_7745c5c3_Err
884		}
885		var templ_7745c5c3_Var44 string
886		templ_7745c5c3_Var44, templ_7745c5c3_Err = templ.ResolveAttributeValue(fmt.Sprintf("%d", tag.ID))
887		if templ_7745c5c3_Err != nil {
888			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 145, Col: 67}
889		}
890		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var44)
891		if templ_7745c5c3_Err != nil {
892			return templ_7745c5c3_Err
893		}
894		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 61, "\"> <span class=\"sv-tag-dot\" style=\"")
895		if templ_7745c5c3_Err != nil {
896			return templ_7745c5c3_Err
897		}
898		var templ_7745c5c3_Var45 string
899		templ_7745c5c3_Var45, templ_7745c5c3_Err = templruntime.SanitizeStyleAttributeValues("background:" + safeTagColor(tag.Color))
900		if templ_7745c5c3_Err != nil {
901			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 146, Col: 75}
902		}
903		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var45))
904		if templ_7745c5c3_Err != nil {
905			return templ_7745c5c3_Err
906		}
907		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 62, "\"></span> <label><span>Name</span><input name=\"name\" type=\"text\" value=\"")
908		if templ_7745c5c3_Err != nil {
909			return templ_7745c5c3_Err
910		}
911		var templ_7745c5c3_Var46 string
912		templ_7745c5c3_Var46, templ_7745c5c3_Err = templ.ResolveAttributeValue(tag.Name)
913		if templ_7745c5c3_Err != nil {
914			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 147, Col: 74}
915		}
916		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var46)
917		if templ_7745c5c3_Err != nil {
918			return templ_7745c5c3_Err
919		}
920		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 63, "\" required></label> <label><span>Color</span><input name=\"color\" type=\"text\" value=\"")
921		if templ_7745c5c3_Err != nil {
922			return templ_7745c5c3_Err
923		}
924		var templ_7745c5c3_Var47 string
925		templ_7745c5c3_Var47, templ_7745c5c3_Err = templ.ResolveAttributeValue(tag.Color)
926		if templ_7745c5c3_Err != nil {
927			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 148, Col: 77}
928		}
929		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var47)
930		if templ_7745c5c3_Err != nil {
931			return templ_7745c5c3_Err
932		}
933		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 64, "\"></label> <button class=\"sv-button sv-button-secondary\" type=\"submit\">")
934		if templ_7745c5c3_Err != nil {
935			return templ_7745c5c3_Err
936		}
937		templ_7745c5c3_Err = ButtonIconLabel(iconSave, "Save").Render(ctx, templ_7745c5c3_Buffer)
938		if templ_7745c5c3_Err != nil {
939			return templ_7745c5c3_Err
940		}
941		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 65, "</button> <button type=\"button\" class=\"sv-button sv-button-secondary sv-button-danger sv-button-icon-only\" data-sv-action=\"tag.delete\" data-id=\"")
942		if templ_7745c5c3_Err != nil {
943			return templ_7745c5c3_Err
944		}
945		var templ_7745c5c3_Var48 string
946		templ_7745c5c3_Var48, templ_7745c5c3_Err = templ.ResolveAttributeValue(fmt.Sprintf("%d", tag.ID))
947		if templ_7745c5c3_Err != nil {
948			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 150, Col: 163}
949		}
950		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var48)
951		if templ_7745c5c3_Err != nil {
952			return templ_7745c5c3_Err
953		}
954		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 66, "\" data-sv-confirm=\"Delete this tag?\" aria-label=\"Delete this tag\">")
955		if templ_7745c5c3_Err != nil {
956			return templ_7745c5c3_Err
957		}
958		templ_7745c5c3_Err = IconOnly(iconTrash, "Delete this tag").Render(ctx, templ_7745c5c3_Buffer)
959		if templ_7745c5c3_Err != nil {
960			return templ_7745c5c3_Err
961		}
962		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 67, "</button></form></li>")
963		if templ_7745c5c3_Err != nil {
964			return templ_7745c5c3_Err
965		}
966		return nil
967	})
968}
969
970func ShortcutSelect(selected *int) templ.Component {
971	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
972		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
973		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
974			return templ_7745c5c3_CtxErr
975		}
976		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
977		if !templ_7745c5c3_IsBuffer {
978			defer func() {
979				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
980				if templ_7745c5c3_Err == nil {
981					templ_7745c5c3_Err = templ_7745c5c3_BufErr
982				}
983			}()
984		}
985		ctx = templ.InitializeContext(ctx)
986		templ_7745c5c3_Var49 := templ.GetChildren(ctx)
987		if templ_7745c5c3_Var49 == nil {
988			templ_7745c5c3_Var49 = templ.NopComponent
989		}
990		ctx = templ.ClearChildren(ctx)
991		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 68, "<label><span>Shortcut</span><select name=\"shortcut_key\"><option value=\"\">None</option> ")
992		if templ_7745c5c3_Err != nil {
993			return templ_7745c5c3_Err
994		}
995		for i := 1; i <= 9; i++ {
996			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 69, "<option value=\"")
997			if templ_7745c5c3_Err != nil {
998				return templ_7745c5c3_Err
999			}
1000			var templ_7745c5c3_Var50 string
1001			templ_7745c5c3_Var50, templ_7745c5c3_Err = templ.ResolveAttributeValue(fmt.Sprintf("%d", i))
1002			if templ_7745c5c3_Err != nil {
1003				return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 159, Col: 39}
1004			}
1005			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var50)
1006			if templ_7745c5c3_Err != nil {
1007				return templ_7745c5c3_Err
1008			}
1009			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 70, "\"")
1010			if templ_7745c5c3_Err != nil {
1011				return templ_7745c5c3_Err
1012			}
1013			if shortcutSelected(selected, i) {
1014				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 71, " selected")
1015				if templ_7745c5c3_Err != nil {
1016					return templ_7745c5c3_Err
1017				}
1018			}
1019			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 72, ">")
1020			if templ_7745c5c3_Err != nil {
1021				return templ_7745c5c3_Err
1022			}
1023			var templ_7745c5c3_Var51 string
1024			templ_7745c5c3_Var51, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", i))
1025			if templ_7745c5c3_Err != nil {
1026				return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 159, Col: 108}
1027			}
1028			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var51))
1029			if templ_7745c5c3_Err != nil {
1030				return templ_7745c5c3_Err
1031			}
1032			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 73, "</option>")
1033			if templ_7745c5c3_Err != nil {
1034				return templ_7745c5c3_Err
1035			}
1036		}
1037		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 74, "</select></label>")
1038		if templ_7745c5c3_Err != nil {
1039			return templ_7745c5c3_Err
1040		}
1041		return nil
1042	})
1043}
1044
1045var _ = templruntime.GeneratedTemplate

Keyboard shortcuts

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

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

Branches 8

Tags 42

↑↓ moveenter openesc close