v0.25.1 7fabed9

tree_templ.go RawHistoryFolder

1// Code generated by templ - DO NOT EDIT.
2
3// templ: version: v0.3.1020
4// SPDX-License-Identifier: AGPL-3.0-or-later
5
6package web
7
8//lint:file-ignore SA4006 This context is only used if a nested component is present.
9
10import "github.com/a-h/templ"
11import templruntime "github.com/a-h/templ/runtime"
12
13// Tree is a directory as a tree: the file finder on top, then the entries
14// with their last commit, and the notes on what is left out. A directory opens
15// in place (files.js); the keyboard walks the rows (j k l h, the arrows).
16func Tree(l Layout, p TreePage) templ.Component {
17	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
18		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
19		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
20			return templ_7745c5c3_CtxErr
21		}
22		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
23		if !templ_7745c5c3_IsBuffer {
24			defer func() {
25				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
26				if templ_7745c5c3_Err == nil {
27					templ_7745c5c3_Err = templ_7745c5c3_BufErr
28				}
29			}()
30		}
31		ctx = templ.InitializeContext(ctx)
32		templ_7745c5c3_Var1 := templ.GetChildren(ctx)
33		if templ_7745c5c3_Var1 == nil {
34			templ_7745c5c3_Var1 = templ.NopComponent
35		}
36		ctx = templ.ClearChildren(ctx)
37		templ_7745c5c3_Var2 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
38			templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
39			templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
40			if !templ_7745c5c3_IsBuffer {
41				defer func() {
42					templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
43					if templ_7745c5c3_Err == nil {
44						templ_7745c5c3_Err = templ_7745c5c3_BufErr
45					}
46				}()
47			}
48			ctx = templ.InitializeContext(ctx)
49			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "<div class=\"tree-find\"><div class=\"filter wide\"><label for=\"finder-q\" class=\"sr\">find a file</label> <input id=\"finder-q\" type=\"search\" data-filter role=\"combobox\" aria-autocomplete=\"list\" aria-controls=\"finder-list\" aria-expanded=\"false\" placeholder=\"Find a file in this repository…\" autocomplete=\"off\" spellcheck=\"false\" hx-on:focus=\"ermiteFinder.load()\" hx-on:input=\"ermiteFinder.input(this)\" hx-on:keydown=\"ermiteFinder.key(this, event)\"></div><p class=\"tree-keys\" data-js aria-hidden=\"true\"><kbd>j</kbd> <kbd>k</kbd> move · <kbd>l</kbd> open · <kbd>h</kbd> back</p></div><div id=\"finder\" class=\"tree-card\" hidden><p id=\"finder-status\" class=\"dim\" aria-live=\"polite\"></p><ul id=\"finder-list\" class=\"cmd-list\" role=\"listbox\" aria-label=\"Files\"></ul></div><div id=\"tree-view\" class=\"tree-card\"><div class=\"tree-head\"><span class=\"tree-path\">")
50			if templ_7745c5c3_Err != nil {
51				return templ_7745c5c3_Err
52			}
53			var templ_7745c5c3_Var3 string
54			templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(p.Path)
55			if templ_7745c5c3_Err != nil {
56				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/tree.templ`, Line: 37, Col: 36}
57			}
58			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3))
59			if templ_7745c5c3_Err != nil {
60				return templ_7745c5c3_Err
61			}
62			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "</span> ")
63			if templ_7745c5c3_Err != nil {
64				return templ_7745c5c3_Err
65			}
66			if p.Up != "" {
67				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, "<a class=\"tree-up\" href=\"")
68				if templ_7745c5c3_Err != nil {
69					return templ_7745c5c3_Err
70				}
71				var templ_7745c5c3_Var4 templ.SafeURL
72				templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Up))
73				if templ_7745c5c3_Err != nil {
74					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/tree.templ`, Line: 39, Col: 50}
75				}
76				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4))
77				if templ_7745c5c3_Err != nil {
78					return templ_7745c5c3_Err
79				}
80				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, "\" title=\"parent directory (h)\">..</a> ")
81				if templ_7745c5c3_Err != nil {
82					return templ_7745c5c3_Err
83				}
84			}
85			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "<span class=\"tree-count\">")
86			if templ_7745c5c3_Err != nil {
87				return templ_7745c5c3_Err
88			}
89			var templ_7745c5c3_Var5 string
90			templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Rows)))
91			if templ_7745c5c3_Err != nil {
92				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/tree.templ`, Line: 41, Col: 48}
93			}
94			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5))
95			if templ_7745c5c3_Err != nil {
96				return templ_7745c5c3_Err
97			}
98			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, " ")
99			if templ_7745c5c3_Err != nil {
100				return templ_7745c5c3_Err
101			}
102			var templ_7745c5c3_Var6 string
103			templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinStringErrs(p.Unit())
104			if templ_7745c5c3_Err != nil {
105				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/tree.templ`, Line: 41, Col: 61}
106			}
107			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var6))
108			if templ_7745c5c3_Err != nil {
109				return templ_7745c5c3_Err
110			}
111			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 7, "</span></div><ul id=\"tree-rows\" class=\"tree\" role=\"tree\" aria-label=\"Entries\" data-rows data-tree")
112			if templ_7745c5c3_Err != nil {
113				return templ_7745c5c3_Err
114			}
115			if p.Up != "" {
116				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 8, " data-up=\"")
117				if templ_7745c5c3_Err != nil {
118					return templ_7745c5c3_Err
119				}
120				var templ_7745c5c3_Var7 string
121				templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Up)
122				if templ_7745c5c3_Err != nil {
123					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/tree.templ`, Line: 51, Col: 19}
124				}
125				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var7)
126				if templ_7745c5c3_Err != nil {
127					return templ_7745c5c3_Err
128				}
129				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, "\"")
130				if templ_7745c5c3_Err != nil {
131					return templ_7745c5c3_Err
132				}
133			}
134			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, " hx-on:click=\"ermiteTree.click(event)\">")
135			if templ_7745c5c3_Err != nil {
136				return templ_7745c5c3_Err
137			}
138			templ_7745c5c3_Err = TreeRows(p).Render(ctx, templ_7745c5c3_Buffer)
139			if templ_7745c5c3_Err != nil {
140				return templ_7745c5c3_Err
141			}
142			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, "</ul>")
143			if templ_7745c5c3_Err != nil {
144				return templ_7745c5c3_Err
145			}
146			if len(p.Rows) == 0 {
147				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, "<p class=\"lede dim\">this directory is empty.</p>")
148				if templ_7745c5c3_Err != nil {
149					return templ_7745c5c3_Err
150				}
151			}
152			for _, n := range p.Notes {
153				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, "<p class=\"note\">")
154				if templ_7745c5c3_Err != nil {
155					return templ_7745c5c3_Err
156				}
157				var templ_7745c5c3_Var8 string
158				templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.JoinStringErrs(n)
159				if templ_7745c5c3_Err != nil {
160					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/tree.templ`, Line: 61, Col: 23}
161				}
162				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var8))
163				if templ_7745c5c3_Err != nil {
164					return templ_7745c5c3_Err
165				}
166				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 14, "</p>")
167				if templ_7745c5c3_Err != nil {
168					return templ_7745c5c3_Err
169				}
170			}
171			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, "</div>")
172			if templ_7745c5c3_Err != nil {
173				return templ_7745c5c3_Err
174			}
175			return nil
176		})
177		templ_7745c5c3_Err = Shell(l, nil).Render(templ.WithChildren(ctx, templ_7745c5c3_Var2), templ_7745c5c3_Buffer)
178		if templ_7745c5c3_Err != nil {
179			return templ_7745c5c3_Err
180		}
181		return nil
182	})
183}
184
185// TreeRows is the rows of a directory alone: what files.js inserts under a
186// directory it opens in place. When the directory has more entries than are
187// listed, the last row links to its page.
188func TreeRows(p TreePage) templ.Component {
189	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
190		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
191		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
192			return templ_7745c5c3_CtxErr
193		}
194		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
195		if !templ_7745c5c3_IsBuffer {
196			defer func() {
197				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
198				if templ_7745c5c3_Err == nil {
199					templ_7745c5c3_Err = templ_7745c5c3_BufErr
200				}
201			}()
202		}
203		ctx = templ.InitializeContext(ctx)
204		templ_7745c5c3_Var9 := templ.GetChildren(ctx)
205		if templ_7745c5c3_Var9 == nil {
206			templ_7745c5c3_Var9 = templ.NopComponent
207		}
208		ctx = templ.ClearChildren(ctx)
209		for _, r := range p.Rows {
210			templ_7745c5c3_Err = TreeRowView(r).Render(ctx, templ_7745c5c3_Buffer)
211			if templ_7745c5c3_Err != nil {
212				return templ_7745c5c3_Err
213			}
214		}
215		if p.More != "" {
216			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "<li class=\"tree-more\" role=\"treeitem\" aria-level=\"1\" aria-posinset=\"")
217			if templ_7745c5c3_Err != nil {
218				return templ_7745c5c3_Err
219			}
220			var templ_7745c5c3_Var10 string
221			templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(p.MorePos))
222			if templ_7745c5c3_Err != nil {
223				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/tree.templ`, Line: 75, Col: 86}
224			}
225			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var10)
226			if templ_7745c5c3_Err != nil {
227				return templ_7745c5c3_Err
228			}
229			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 17, "\" aria-setsize=\"-1\" data-depth=\"0\"><span class=\"t-main\"><span class=\"t-twig\" aria-hidden=\"true\"></span> <span class=\"t-node\" aria-hidden=\"true\"></span> <a class=\"t-name\" href=\"")
230			if templ_7745c5c3_Err != nil {
231				return templ_7745c5c3_Err
232			}
233			var templ_7745c5c3_Var11 templ.SafeURL
234			templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.More))
235			if templ_7745c5c3_Err != nil {
236				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/tree.templ`, Line: 79, Col: 50}
237			}
238			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11))
239			if templ_7745c5c3_Err != nil {
240				return templ_7745c5c3_Err
241			}
242			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 18, "\">more entries: open the directory</a></span></li>")
243			if templ_7745c5c3_Err != nil {
244				return templ_7745c5c3_Err
245			}
246		}
247		return nil
248	})
249}
250
251// TreeRowView is one entry of a directory, a row of the tree: the guides of
252// its depth (t-twig), its node, its name, then its last commit. A directory
253// carries data-expand, the URL of its rows, and aria-expanded; files.js sets
254// the depth of the rows it inserts (data-depth, --depth, aria-level).
255// aria-posinset and aria-setsize count the entries of the row's own directory
256// (setsize -1: the listing is cut and the total unknown), so the positions
257// stay right once the rows of a directory are inserted into the flat list. The
258// node is drawn by the stylesheet from data-kind, which is aria-hidden: the
259// type of a directory, a link or a submodule is said in text for screen readers
260// (the .sr span, part of the name of the treeitem) and in a tooltip.
261func TreeRowView(r TreeRow) templ.Component {
262	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
263		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
264		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
265			return templ_7745c5c3_CtxErr
266		}
267		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
268		if !templ_7745c5c3_IsBuffer {
269			defer func() {
270				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
271				if templ_7745c5c3_Err == nil {
272					templ_7745c5c3_Err = templ_7745c5c3_BufErr
273				}
274			}()
275		}
276		ctx = templ.InitializeContext(ctx)
277		templ_7745c5c3_Var12 := templ.GetChildren(ctx)
278		if templ_7745c5c3_Var12 == nil {
279			templ_7745c5c3_Var12 = templ.NopComponent
280		}
281		ctx = templ.ClearChildren(ctx)
282		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 19, "<li role=\"treeitem\" aria-level=\"1\" aria-posinset=\"")
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(itoa(r.Pos))
288		if templ_7745c5c3_Err != nil {
289			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/tree.templ`, Line: 99, Col: 29}
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, 20, "\" aria-setsize=\"")
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(itoa(r.Set))
301		if templ_7745c5c3_Err != nil {
302			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/tree.templ`, Line: 100, Col: 28}
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, 21, "\" data-kind=\"")
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(r.Kind)
314		if templ_7745c5c3_Err != nil {
315			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/tree.templ`, Line: 101, Col: 20}
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, 22, "\" data-depth=\"0\"")
322		if templ_7745c5c3_Err != nil {
323			return templ_7745c5c3_Err
324		}
325		if r.Cursor {
326			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 23, " data-cursor")
327			if templ_7745c5c3_Err != nil {
328				return templ_7745c5c3_Err
329			}
330		}
331		if r.Expand != "" {
332			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, " data-expand=\"")
333			if templ_7745c5c3_Err != nil {
334				return templ_7745c5c3_Err
335			}
336			var templ_7745c5c3_Var16 string
337			templ_7745c5c3_Var16, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.Expand)
338			if templ_7745c5c3_Err != nil {
339				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/tree.templ`, Line: 105, Col: 25}
340			}
341			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var16)
342			if templ_7745c5c3_Err != nil {
343				return templ_7745c5c3_Err
344			}
345			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 25, "\" aria-expanded=\"false\"")
346			if templ_7745c5c3_Err != nil {
347				return templ_7745c5c3_Err
348			}
349		}
350		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 26, "><span class=\"t-main\"><span class=\"t-twig\" aria-hidden=\"true\"></span> <span class=\"t-node\" aria-hidden=\"true\"></span> ")
351		if templ_7745c5c3_Err != nil {
352			return templ_7745c5c3_Err
353		}
354		if r.Href != "" {
355			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 27, "<a class=\"t-name\" href=\"")
356			if templ_7745c5c3_Err != nil {
357				return templ_7745c5c3_Err
358			}
359			var templ_7745c5c3_Var17 templ.SafeURL
360			templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(r.Href))
361			if templ_7745c5c3_Err != nil {
362				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/tree.templ`, Line: 115, Col: 33}
363			}
364			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var17))
365			if templ_7745c5c3_Err != nil {
366				return templ_7745c5c3_Err
367			}
368			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 28, "\"")
369			if templ_7745c5c3_Err != nil {
370				return templ_7745c5c3_Err
371			}
372			if r.Hint != "" {
373				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 29, " title=\"")
374				if templ_7745c5c3_Err != nil {
375					return templ_7745c5c3_Err
376				}
377				var templ_7745c5c3_Var18 string
378				templ_7745c5c3_Var18, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.Hint)
379				if templ_7745c5c3_Err != nil {
380					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/tree.templ`, Line: 117, Col: 20}
381				}
382				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var18)
383				if templ_7745c5c3_Err != nil {
384					return templ_7745c5c3_Err
385				}
386				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 30, "\"")
387				if templ_7745c5c3_Err != nil {
388					return templ_7745c5c3_Err
389				}
390			}
391			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 31, ">")
392			if templ_7745c5c3_Err != nil {
393				return templ_7745c5c3_Err
394			}
395			var templ_7745c5c3_Var19 string
396			templ_7745c5c3_Var19, templ_7745c5c3_Err = templ.JoinStringErrs(r.Name)
397			if templ_7745c5c3_Err != nil {
398				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/tree.templ`, Line: 119, Col: 13}
399			}
400			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var19))
401			if templ_7745c5c3_Err != nil {
402				return templ_7745c5c3_Err
403			}
404			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 32, "</a> ")
405			if templ_7745c5c3_Err != nil {
406				return templ_7745c5c3_Err
407			}
408		} else {
409			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 33, "<span class=\"t-name\"")
410			if templ_7745c5c3_Err != nil {
411				return templ_7745c5c3_Err
412			}
413			if r.Hint != "" {
414				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 34, " title=\"")
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 = templ.ResolveAttributeValue(r.Hint)
420				if templ_7745c5c3_Err != nil {
421					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/tree.templ`, Line: 124, Col: 20}
422				}
423				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var20)
424				if templ_7745c5c3_Err != nil {
425					return templ_7745c5c3_Err
426				}
427				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 35, "\"")
428				if templ_7745c5c3_Err != nil {
429					return templ_7745c5c3_Err
430				}
431			}
432			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 36, ">")
433			if templ_7745c5c3_Err != nil {
434				return templ_7745c5c3_Err
435			}
436			var templ_7745c5c3_Var21 string
437			templ_7745c5c3_Var21, templ_7745c5c3_Err = templ.JoinStringErrs(r.Name)
438			if templ_7745c5c3_Err != nil {
439				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/tree.templ`, Line: 126, Col: 13}
440			}
441			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var21))
442			if templ_7745c5c3_Err != nil {
443				return templ_7745c5c3_Err
444			}
445			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 37, "</span> ")
446			if templ_7745c5c3_Err != nil {
447				return templ_7745c5c3_Err
448			}
449		}
450		if r.Hint != "" {
451			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 38, "<span class=\"sr\">")
452			if templ_7745c5c3_Err != nil {
453				return templ_7745c5c3_Err
454			}
455			var templ_7745c5c3_Var22 string
456			templ_7745c5c3_Var22, templ_7745c5c3_Err = templ.JoinStringErrs(" (" + r.Hint + ")")
457			if templ_7745c5c3_Err != nil {
458				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/tree.templ`, Line: 129, Col: 42}
459			}
460			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var22))
461			if templ_7745c5c3_Err != nil {
462				return templ_7745c5c3_Err
463			}
464			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 39, "</span>")
465			if templ_7745c5c3_Err != nil {
466				return templ_7745c5c3_Err
467			}
468		}
469		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, "</span> <span class=\"t-size\">")
470		if templ_7745c5c3_Err != nil {
471			return templ_7745c5c3_Err
472		}
473		var templ_7745c5c3_Var23 string
474		templ_7745c5c3_Var23, templ_7745c5c3_Err = templ.JoinStringErrs(r.Size)
475		if templ_7745c5c3_Err != nil {
476			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/tree.templ`, Line: 132, Col: 31}
477		}
478		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var23))
479		if templ_7745c5c3_Err != nil {
480			return templ_7745c5c3_Err
481		}
482		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, "</span> <span class=\"t-sub\">")
483		if templ_7745c5c3_Err != nil {
484			return templ_7745c5c3_Err
485		}
486		if r.CHref != "" {
487			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, "<a class=\"t-commit\" href=\"")
488			if templ_7745c5c3_Err != nil {
489				return templ_7745c5c3_Err
490			}
491			var templ_7745c5c3_Var24 templ.SafeURL
492			templ_7745c5c3_Var24, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(r.CHref))
493			if templ_7745c5c3_Err != nil {
494				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/tree.templ`, Line: 135, Col: 53}
495			}
496			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var24))
497			if templ_7745c5c3_Err != nil {
498				return templ_7745c5c3_Err
499			}
500			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, "\" title=\"")
501			if templ_7745c5c3_Err != nil {
502				return templ_7745c5c3_Err
503			}
504			var templ_7745c5c3_Var25 string
505			templ_7745c5c3_Var25, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.Author)
506			if templ_7745c5c3_Err != nil {
507				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/tree.templ`, Line: 135, Col: 72}
508			}
509			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var25)
510			if templ_7745c5c3_Err != nil {
511				return templ_7745c5c3_Err
512			}
513			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 44, "\">")
514			if templ_7745c5c3_Err != nil {
515				return templ_7745c5c3_Err
516			}
517			var templ_7745c5c3_Var26 string
518			templ_7745c5c3_Var26, templ_7745c5c3_Err = templ.JoinStringErrs(r.Subject)
519			if templ_7745c5c3_Err != nil {
520				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/tree.templ`, Line: 135, Col: 86}
521			}
522			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var26))
523			if templ_7745c5c3_Err != nil {
524				return templ_7745c5c3_Err
525			}
526			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, "</a>")
527			if templ_7745c5c3_Err != nil {
528				return templ_7745c5c3_Err
529			}
530		}
531		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 46, "</span> <span class=\"t-when\">")
532		if templ_7745c5c3_Err != nil {
533			return templ_7745c5c3_Err
534		}
535		if r.WhenAt != "" {
536			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 47, "<time datetime=\"")
537			if templ_7745c5c3_Err != nil {
538				return templ_7745c5c3_Err
539			}
540			var templ_7745c5c3_Var27 string
541			templ_7745c5c3_Var27, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.WhenAt)
542			if templ_7745c5c3_Err != nil {
543				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/tree.templ`, Line: 140, Col: 29}
544			}
545			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var27)
546			if templ_7745c5c3_Err != nil {
547				return templ_7745c5c3_Err
548			}
549			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 48, "\" title=\"")
550			if templ_7745c5c3_Err != nil {
551				return templ_7745c5c3_Err
552			}
553			var templ_7745c5c3_Var28 string
554			templ_7745c5c3_Var28, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.WhenAt)
555			if templ_7745c5c3_Err != nil {
556				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/tree.templ`, Line: 140, Col: 48}
557			}
558			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var28)
559			if templ_7745c5c3_Err != nil {
560				return templ_7745c5c3_Err
561			}
562			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 49, "\">")
563			if templ_7745c5c3_Err != nil {
564				return templ_7745c5c3_Err
565			}
566			var templ_7745c5c3_Var29 string
567			templ_7745c5c3_Var29, templ_7745c5c3_Err = templ.JoinStringErrs(r.When)
568			if templ_7745c5c3_Err != nil {
569				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/tree.templ`, Line: 140, Col: 59}
570			}
571			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var29))
572			if templ_7745c5c3_Err != nil {
573				return templ_7745c5c3_Err
574			}
575			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 50, "</time>")
576			if templ_7745c5c3_Err != nil {
577				return templ_7745c5c3_Err
578			}
579		}
580		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 51, "</span></li>")
581		if templ_7745c5c3_Err != nil {
582			return templ_7745c5c3_Err
583		}
584		return nil
585	})
586}
587
588var _ = 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 3

Tags 44

↑↓ moveenter openesc close