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