1diff --git a/pkg/handler/git/handler.go b/pkg/handler/git/handler.go
2index e0887497dfa2ec7d9284384ca6fcfc949b8609ca..45cd865ea42c7929931a0472529d7916644bd8ce 100644
3--- a/pkg/handler/git/handler.go
4+++ b/pkg/handler/git/handler.go
5@@ -6,6 +6,7 @@ "net/http"
6
7 "git.gabrielgio.me/cerrado/pkg/service"
8 "git.gabrielgio.me/cerrado/templates"
9+ "github.com/gorilla/mux"
10 )
11
12 type (
13@@ -35,7 +36,47 @@ gitList := &templates.GitListPage{repos}
14 templates.WritePageTemplate(w, gitList)
15 }
16
17-func (g *GitHandler) Item(w http.ResponseWriter, _ *http.Request) {
18- gitList := &templates.GitItemPage{}
19+func (g *GitHandler) Summary(w http.ResponseWriter, r *http.Request) {
20+ name := mux.Vars(r)["name"]
21+ gitList := &templates.GitItemPage{
22+ Name: name,
23+ GitItemBase: &templates.GitItemSummaryPage{},
24+ }
25+ templates.WritePageTemplate(w, gitList)
26+}
27+
28+func (g *GitHandler) About(w http.ResponseWriter, r *http.Request) {
29+ name := mux.Vars(r)["name"]
30+ gitList := &templates.GitItemPage{
31+ Name: name,
32+ GitItemBase: &templates.GitItemAboutPage{},
33+ }
34+ templates.WritePageTemplate(w, gitList)
35+}
36+
37+func (g *GitHandler) Refs(w http.ResponseWriter, r *http.Request) {
38+ name := mux.Vars(r)["name"]
39+ gitList := &templates.GitItemPage{
40+ Name: name,
41+ GitItemBase: &templates.GitItemRefsPage{},
42+ }
43+ templates.WritePageTemplate(w, gitList)
44+}
45+
46+func (g *GitHandler) Tree(w http.ResponseWriter, r *http.Request) {
47+ name := mux.Vars(r)["name"]
48+ gitList := &templates.GitItemPage{
49+ Name: name,
50+ GitItemBase: &templates.GitItemTreePage{},
51+ }
52+ templates.WritePageTemplate(w, gitList)
53+}
54+
55+func (g *GitHandler) Log(w http.ResponseWriter, r *http.Request) {
56+ name := mux.Vars(r)["name"]
57+ gitList := &templates.GitItemPage{
58+ Name: name,
59+ GitItemBase: &templates.GitItemLogPage{},
60+ }
61 templates.WritePageTemplate(w, gitList)
62 }
63diff --git a/templates/gititem.qtpl b/templates/gititem.qtpl
64index 156325fbd57ebd0af7e29796862108bb9d178e10..4a6c49a5709efe777228786bb881715991e01268 100644
65--- a/templates/gititem.qtpl
66+++ b/templates/gititem.qtpl
67@@ -1,46 +1,30 @@
68+{% interface
69+GitItemBase {
70+ Nav(name string)
71+ GitContent()
72+}
73+%}
74+
75 {% code
76 type GitItemPage struct {
77+ Name string
78+ GitItemBase
79 }
80 %}
81
82-
83-{% func insertIfEqual(s, d Selection) %}{% if s == d %} selected{% endif %}{% endfunc %}
84-
85-
86-{% func Navbar (s Selection) %}
87- <nav class="container navbar navbar-expand">
88- <div class="navbar-nav">
89- <a class="nav-link{%= insertIfEqual(s, Git) %}" href="/">git</a>
90- <a class="nav-link{%= insertIfEqual(s, List) %}" href="/list">list</a>
91- <a class="nav-link{%= insertIfEqual(s, About) %}" href="/about">about</a>
92- <a class="nav-link{%= insertIfEqual(s, Config) %}" href="/config">config</a>
93- </div>
94- </nav>
95-{% endfunc %}
96-
97 {% func (p *GitItemPage) Title() %}Git | List{% endfunc %}
98
99 {% func (p *GitItemPage) Navbar() %}{%= Navbar(Git) %}{% endfunc %}
100
101 {% func (p *GitItemPage) Content() %}
102 <div class="row">
103- <h3>AoC2022.git</h3>
104+ <h3>{%s p.Name %}</h3>
105 </div>
106 <div class="row">
107- <ul class="nav">
108- <li class="nav-item">
109- <a class="nav-link" aria-current="page" href="#">about</a>
110- </li>
111- <li class="nav-item">
112- <a class="nav-link" aria-current="page" href="#">summary</a>
113- </li>
114- <li class="nav-item">
115- <a class="nav-link" aria-current="page" href="#">refs</a>
116- </li>
117- <li class="nav-item">
118- <a class="nav-link" aria-current="page" href="#">tree</a>
119- </li>
120- </ul>
121+{%= p.Nav(p.Name) %}
122+</div>
123+<div class="row">
124+{%= p.GitContent() %}
125 </div>
126 {% endfunc %}
127
128diff --git a/templates/gititem.qtpl.go b/templates/gititem.qtpl.go
129index 8c1485689eaf1259154bc9e349c447549a3b24c4..f978c4d3d66423b73ba92eecd30ca5c359004237 100644
130--- a/templates/gititem.qtpl.go
131+++ b/templates/gititem.qtpl.go
132@@ -18,158 +18,179 @@ _ = qt422016.AcquireByteBuffer
133 )
134
135 //line gititem.qtpl:2
136+type GitItemBase interface {
137+//line gititem.qtpl:2
138+ Nav(name string) string
139+//line gititem.qtpl:2
140+ StreamNav(qw422016 *qt422016.Writer, name string)
141+//line gititem.qtpl:2
142+ WriteNav(qq422016 qtio422016.Writer, name string)
143+//line gititem.qtpl:2
144+ GitContent() string
145+//line gititem.qtpl:2
146+ StreamGitContent(qw422016 *qt422016.Writer)
147+//line gititem.qtpl:2
148+ WriteGitContent(qq422016 qtio422016.Writer)
149+//line gititem.qtpl:2
150+}
151+
152+//line gititem.qtpl:9
153 type GitItemPage struct {
154+ Name string
155+ GitItemBase
156 }
157
158-//line gititem.qtpl:6
159+//line gititem.qtpl:15
160 func (p *GitItemPage) StreamTitle(qw422016 *qt422016.Writer) {
161-//line gititem.qtpl:6
162+//line gititem.qtpl:15
163 qw422016.N().S(`Git | List`)
164-//line gititem.qtpl:6
165+//line gititem.qtpl:15
166 }
167
168-//line gititem.qtpl:6
169+//line gititem.qtpl:15
170 func (p *GitItemPage) WriteTitle(qq422016 qtio422016.Writer) {
171-//line gititem.qtpl:6
172+//line gititem.qtpl:15
173 qw422016 := qt422016.AcquireWriter(qq422016)
174-//line gititem.qtpl:6
175+//line gititem.qtpl:15
176 p.StreamTitle(qw422016)
177-//line gititem.qtpl:6
178+//line gititem.qtpl:15
179 qt422016.ReleaseWriter(qw422016)
180-//line gititem.qtpl:6
181+//line gititem.qtpl:15
182 }
183
184-//line gititem.qtpl:6
185+//line gititem.qtpl:15
186 func (p *GitItemPage) Title() string {
187-//line gititem.qtpl:6
188+//line gititem.qtpl:15
189 qb422016 := qt422016.AcquireByteBuffer()
190-//line gititem.qtpl:6
191+//line gititem.qtpl:15
192 p.WriteTitle(qb422016)
193-//line gititem.qtpl:6
194+//line gititem.qtpl:15
195 qs422016 := string(qb422016.B)
196-//line gititem.qtpl:6
197+//line gititem.qtpl:15
198 qt422016.ReleaseByteBuffer(qb422016)
199-//line gititem.qtpl:6
200+//line gititem.qtpl:15
201 return qs422016
202-//line gititem.qtpl:6
203+//line gititem.qtpl:15
204 }
205
206-//line gititem.qtpl:8
207+//line gititem.qtpl:17
208 func (p *GitItemPage) StreamNavbar(qw422016 *qt422016.Writer) {
209-//line gititem.qtpl:8
210+//line gititem.qtpl:17
211 StreamNavbar(qw422016, Git)
212-//line gititem.qtpl:8
213+//line gititem.qtpl:17
214 }
215
216-//line gititem.qtpl:8
217+//line gititem.qtpl:17
218 func (p *GitItemPage) WriteNavbar(qq422016 qtio422016.Writer) {
219-//line gititem.qtpl:8
220+//line gititem.qtpl:17
221 qw422016 := qt422016.AcquireWriter(qq422016)
222-//line gititem.qtpl:8
223+//line gititem.qtpl:17
224 p.StreamNavbar(qw422016)
225-//line gititem.qtpl:8
226+//line gititem.qtpl:17
227 qt422016.ReleaseWriter(qw422016)
228-//line gititem.qtpl:8
229+//line gititem.qtpl:17
230 }
231
232-//line gititem.qtpl:8
233+//line gititem.qtpl:17
234 func (p *GitItemPage) Navbar() string {
235-//line gititem.qtpl:8
236+//line gititem.qtpl:17
237 qb422016 := qt422016.AcquireByteBuffer()
238-//line gititem.qtpl:8
239+//line gititem.qtpl:17
240 p.WriteNavbar(qb422016)
241-//line gititem.qtpl:8
242+//line gititem.qtpl:17
243 qs422016 := string(qb422016.B)
244-//line gititem.qtpl:8
245+//line gititem.qtpl:17
246 qt422016.ReleaseByteBuffer(qb422016)
247-//line gititem.qtpl:8
248+//line gititem.qtpl:17
249 return qs422016
250-//line gititem.qtpl:8
251+//line gititem.qtpl:17
252 }
253
254-//line gititem.qtpl:10
255+//line gititem.qtpl:19
256 func (p *GitItemPage) StreamContent(qw422016 *qt422016.Writer) {
257-//line gititem.qtpl:10
258+//line gititem.qtpl:19
259 qw422016.N().S(`
260 <div class="row">
261- <h3>AoC2022.git</h3>
262+ <h3>`)
263+//line gititem.qtpl:21
264+ qw422016.E().S(p.Name)
265+//line gititem.qtpl:21
266+ qw422016.N().S(`</h3>
267 </div>
268 <div class="row">
269- <ul class="nav">
270- <li class="nav-item">
271- <a class="nav-link" aria-current="page" href="#">about</a>
272- </li>
273- <li class="nav-item">
274- <a class="nav-link" aria-current="page" href="#">summary</a>
275- </li>
276- <li class="nav-item">
277- <a class="nav-link" aria-current="page" href="#">refs</a>
278- </li>
279- <li class="nav-item">
280- <a class="nav-link" aria-current="page" href="#">tree</a>
281- </li>
282- </ul>
283+`)
284+//line gititem.qtpl:24
285+ p.StreamNav(qw422016, p.Name)
286+//line gititem.qtpl:24
287+ qw422016.N().S(`
288+</div>
289+<div class="row">
290+`)
291+//line gititem.qtpl:27
292+ p.StreamGitContent(qw422016)
293+//line gititem.qtpl:27
294+ qw422016.N().S(`
295 </div>
296 `)
297-//line gititem.qtpl:30
298+//line gititem.qtpl:29
299 }
300
301-//line gititem.qtpl:30
302+//line gititem.qtpl:29
303 func (p *GitItemPage) WriteContent(qq422016 qtio422016.Writer) {
304-//line gititem.qtpl:30
305+//line gititem.qtpl:29
306 qw422016 := qt422016.AcquireWriter(qq422016)
307-//line gititem.qtpl:30
308+//line gititem.qtpl:29
309 p.StreamContent(qw422016)
310-//line gititem.qtpl:30
311+//line gititem.qtpl:29
312 qt422016.ReleaseWriter(qw422016)
313-//line gititem.qtpl:30
314+//line gititem.qtpl:29
315 }
316
317-//line gititem.qtpl:30
318+//line gititem.qtpl:29
319 func (p *GitItemPage) Content() string {
320-//line gititem.qtpl:30
321+//line gititem.qtpl:29
322 qb422016 := qt422016.AcquireByteBuffer()
323-//line gititem.qtpl:30
324+//line gititem.qtpl:29
325 p.WriteContent(qb422016)
326-//line gititem.qtpl:30
327+//line gititem.qtpl:29
328 qs422016 := string(qb422016.B)
329-//line gititem.qtpl:30
330+//line gititem.qtpl:29
331 qt422016.ReleaseByteBuffer(qb422016)
332-//line gititem.qtpl:30
333+//line gititem.qtpl:29
334 return qs422016
335-//line gititem.qtpl:30
336+//line gititem.qtpl:29
337 }
338
339-//line gititem.qtpl:32
340+//line gititem.qtpl:31
341 func (p *GitItemPage) StreamScript(qw422016 *qt422016.Writer) {
342-//line gititem.qtpl:32
343+//line gititem.qtpl:31
344 qw422016.N().S(`
345 `)
346-//line gititem.qtpl:33
347+//line gititem.qtpl:32
348 }
349
350-//line gititem.qtpl:33
351+//line gititem.qtpl:32
352 func (p *GitItemPage) WriteScript(qq422016 qtio422016.Writer) {
353-//line gititem.qtpl:33
354+//line gititem.qtpl:32
355 qw422016 := qt422016.AcquireWriter(qq422016)
356-//line gititem.qtpl:33
357+//line gititem.qtpl:32
358 p.StreamScript(qw422016)
359-//line gititem.qtpl:33
360+//line gititem.qtpl:32
361 qt422016.ReleaseWriter(qw422016)
362-//line gititem.qtpl:33
363+//line gititem.qtpl:32
364 }
365
366-//line gititem.qtpl:33
367+//line gititem.qtpl:32
368 func (p *GitItemPage) Script() string {
369-//line gititem.qtpl:33
370+//line gititem.qtpl:32
371 qb422016 := qt422016.AcquireByteBuffer()
372-//line gititem.qtpl:33
373+//line gititem.qtpl:32
374 p.WriteScript(qb422016)
375-//line gititem.qtpl:33
376+//line gititem.qtpl:32
377 qs422016 := string(qb422016.B)
378-//line gititem.qtpl:33
379+//line gititem.qtpl:32
380 qt422016.ReleaseByteBuffer(qb422016)
381-//line gititem.qtpl:33
382+//line gititem.qtpl:32
383 return qs422016
384-//line gititem.qtpl:33
385+//line gititem.qtpl:32
386 }
387diff --git a/templates/gititemabout.qtpl b/templates/gititemabout.qtpl
388new file mode 100644
389index 0000000000000000000000000000000000000000..67d43f1249399e49aa1a240812427a3f72e8077c
390--- /dev/null
391+++ b/templates/gititemabout.qtpl
392@@ -0,0 +1,10 @@
393+{% code
394+type GitItemAboutPage struct {
395+}
396+%}
397+
398+{% func (g *GitItemAboutPage) Nav(name string) %}{%= GitItemNav(name, Readme) %}{% endfunc %}
399+
400+{% func (g *GitItemAboutPage) GitContent() %}
401+<h4>About</h4>
402+{% endfunc %}
403diff --git a/templates/gititemabout.qtpl.go b/templates/gititemabout.qtpl.go
404new file mode 100644
405index 0000000000000000000000000000000000000000..7b772e5bf41536602a120b48ed78b20de81e56d2
406--- /dev/null
407+++ b/templates/gititemabout.qtpl.go
408@@ -0,0 +1,90 @@
409+// Code generated by qtc from "gititemabout.qtpl". DO NOT EDIT.
410+// See https://github.com/valyala/quicktemplate for details.
411+
412+//line gititemabout.qtpl:1
413+package templates
414+
415+//line gititemabout.qtpl:1
416+import (
417+ qtio422016 "io"
418+
419+ qt422016 "github.com/valyala/quicktemplate"
420+)
421+
422+//line gititemabout.qtpl:1
423+var (
424+ _ = qtio422016.Copy
425+ _ = qt422016.AcquireByteBuffer
426+)
427+
428+//line gititemabout.qtpl:2
429+type GitItemAboutPage struct {
430+}
431+
432+//line gititemabout.qtpl:6
433+func (g *GitItemAboutPage) StreamNav(qw422016 *qt422016.Writer, name string) {
434+//line gititemabout.qtpl:6
435+ StreamGitItemNav(qw422016, name, Readme)
436+//line gititemabout.qtpl:6
437+}
438+
439+//line gititemabout.qtpl:6
440+func (g *GitItemAboutPage) WriteNav(qq422016 qtio422016.Writer, name string) {
441+//line gititemabout.qtpl:6
442+ qw422016 := qt422016.AcquireWriter(qq422016)
443+//line gititemabout.qtpl:6
444+ g.StreamNav(qw422016, name)
445+//line gititemabout.qtpl:6
446+ qt422016.ReleaseWriter(qw422016)
447+//line gititemabout.qtpl:6
448+}
449+
450+//line gititemabout.qtpl:6
451+func (g *GitItemAboutPage) Nav(name string) string {
452+//line gititemabout.qtpl:6
453+ qb422016 := qt422016.AcquireByteBuffer()
454+//line gititemabout.qtpl:6
455+ g.WriteNav(qb422016, name)
456+//line gititemabout.qtpl:6
457+ qs422016 := string(qb422016.B)
458+//line gititemabout.qtpl:6
459+ qt422016.ReleaseByteBuffer(qb422016)
460+//line gititemabout.qtpl:6
461+ return qs422016
462+//line gititemabout.qtpl:6
463+}
464+
465+//line gititemabout.qtpl:8
466+func (g *GitItemAboutPage) StreamGitContent(qw422016 *qt422016.Writer) {
467+//line gititemabout.qtpl:8
468+ qw422016.N().S(`
469+<h4>About</h4>
470+`)
471+//line gititemabout.qtpl:10
472+}
473+
474+//line gititemabout.qtpl:10
475+func (g *GitItemAboutPage) WriteGitContent(qq422016 qtio422016.Writer) {
476+//line gititemabout.qtpl:10
477+ qw422016 := qt422016.AcquireWriter(qq422016)
478+//line gititemabout.qtpl:10
479+ g.StreamGitContent(qw422016)
480+//line gititemabout.qtpl:10
481+ qt422016.ReleaseWriter(qw422016)
482+//line gititemabout.qtpl:10
483+}
484+
485+//line gititemabout.qtpl:10
486+func (g *GitItemAboutPage) GitContent() string {
487+//line gititemabout.qtpl:10
488+ qb422016 := qt422016.AcquireByteBuffer()
489+//line gititemabout.qtpl:10
490+ g.WriteGitContent(qb422016)
491+//line gititemabout.qtpl:10
492+ qs422016 := string(qb422016.B)
493+//line gititemabout.qtpl:10
494+ qt422016.ReleaseByteBuffer(qb422016)
495+//line gititemabout.qtpl:10
496+ return qs422016
497+//line gititemabout.qtpl:10
498+}
499diff --git a/templates/gititemlog.qtpl b/templates/gititemlog.qtpl
500new file mode 100644
501index 0000000000000000000000000000000000000000..ae88a5205a998eec94dc046b0a7e2f2e71d3ede4
502--- /dev/null
503+++ b/templates/gititemlog.qtpl
504@@ -0,0 +1,10 @@
505+{% code
506+type GitItemLogPage struct {
507+}
508+%}
509+
510+{% func (g *GitItemLogPage) Nav(name string) %}{%= GitItemNav(name, Log) %}{% endfunc %}
511+
512+{% func (g *GitItemLogPage) GitContent() %}
513+<h4>Log</h4>
514+{% endfunc %}
515diff --git a/templates/gititemlog.qtpl.go b/templates/gititemlog.qtpl.go
516new file mode 100644
517index 0000000000000000000000000000000000000000..2d559d745fa7d15387f20e382b4e8f18bc8b29b6
518--- /dev/null
519+++ b/templates/gititemlog.qtpl.go
520@@ -0,0 +1,90 @@
521+// Code generated by qtc from "gititemlog.qtpl". DO NOT EDIT.
522+// See https://github.com/valyala/quicktemplate for details.
523+
524+//line gititemlog.qtpl:1
525+package templates
526+
527+//line gititemlog.qtpl:1
528+import (
529+ qtio422016 "io"
530+
531+ qt422016 "github.com/valyala/quicktemplate"
532+)
533+
534+//line gititemlog.qtpl:1
535+var (
536+ _ = qtio422016.Copy
537+ _ = qt422016.AcquireByteBuffer
538+)
539+
540+//line gititemlog.qtpl:2
541+type GitItemLogPage struct {
542+}
543+
544+//line gititemlog.qtpl:6
545+func (g *GitItemLogPage) StreamNav(qw422016 *qt422016.Writer, name string) {
546+//line gititemlog.qtpl:6
547+ StreamGitItemNav(qw422016, name, Log)
548+//line gititemlog.qtpl:6
549+}
550+
551+//line gititemlog.qtpl:6
552+func (g *GitItemLogPage) WriteNav(qq422016 qtio422016.Writer, name string) {
553+//line gititemlog.qtpl:6
554+ qw422016 := qt422016.AcquireWriter(qq422016)
555+//line gititemlog.qtpl:6
556+ g.StreamNav(qw422016, name)
557+//line gititemlog.qtpl:6
558+ qt422016.ReleaseWriter(qw422016)
559+//line gititemlog.qtpl:6
560+}
561+
562+//line gititemlog.qtpl:6
563+func (g *GitItemLogPage) Nav(name string) string {
564+//line gititemlog.qtpl:6
565+ qb422016 := qt422016.AcquireByteBuffer()
566+//line gititemlog.qtpl:6
567+ g.WriteNav(qb422016, name)
568+//line gititemlog.qtpl:6
569+ qs422016 := string(qb422016.B)
570+//line gititemlog.qtpl:6
571+ qt422016.ReleaseByteBuffer(qb422016)
572+//line gititemlog.qtpl:6
573+ return qs422016
574+//line gititemlog.qtpl:6
575+}
576+
577+//line gititemlog.qtpl:8
578+func (g *GitItemLogPage) StreamGitContent(qw422016 *qt422016.Writer) {
579+//line gititemlog.qtpl:8
580+ qw422016.N().S(`
581+<h4>Log</h4>
582+`)
583+//line gititemlog.qtpl:10
584+}
585+
586+//line gititemlog.qtpl:10
587+func (g *GitItemLogPage) WriteGitContent(qq422016 qtio422016.Writer) {
588+//line gititemlog.qtpl:10
589+ qw422016 := qt422016.AcquireWriter(qq422016)
590+//line gititemlog.qtpl:10
591+ g.StreamGitContent(qw422016)
592+//line gititemlog.qtpl:10
593+ qt422016.ReleaseWriter(qw422016)
594+//line gititemlog.qtpl:10
595+}
596+
597+//line gititemlog.qtpl:10
598+func (g *GitItemLogPage) GitContent() string {
599+//line gititemlog.qtpl:10
600+ qb422016 := qt422016.AcquireByteBuffer()
601+//line gititemlog.qtpl:10
602+ g.WriteGitContent(qb422016)
603+//line gititemlog.qtpl:10
604+ qs422016 := string(qb422016.B)
605+//line gititemlog.qtpl:10
606+ qt422016.ReleaseByteBuffer(qb422016)
607+//line gititemlog.qtpl:10
608+ return qs422016
609+//line gititemlog.qtpl:10
610+}
611diff --git a/templates/gititemrefs.qtpl b/templates/gititemrefs.qtpl
612new file mode 100644
613index 0000000000000000000000000000000000000000..5fed393c6d715def0febba111bf84b0792dc1fa5
614--- /dev/null
615+++ b/templates/gititemrefs.qtpl
616@@ -0,0 +1,10 @@
617+{% code
618+type GitItemRefsPage struct {
619+}
620+%}
621+
622+{% func (g *GitItemRefsPage) Nav(name string) %}{%= GitItemNav(name ,Refs) %}{% endfunc %}
623+
624+{% func (g *GitItemRefsPage) GitContent() %}
625+<h4>Refs</h4>
626+{% endfunc %}
627diff --git a/templates/gititemrefs.qtpl.go b/templates/gititemrefs.qtpl.go
628new file mode 100644
629index 0000000000000000000000000000000000000000..5294bf9fc28d8cbc2b1e1999729412e9dc6e0c9b
630--- /dev/null
631+++ b/templates/gititemrefs.qtpl.go
632@@ -0,0 +1,90 @@
633+// Code generated by qtc from "gititemrefs.qtpl". DO NOT EDIT.
634+// See https://github.com/valyala/quicktemplate for details.
635+
636+//line gititemrefs.qtpl:1
637+package templates
638+
639+//line gititemrefs.qtpl:1
640+import (
641+ qtio422016 "io"
642+
643+ qt422016 "github.com/valyala/quicktemplate"
644+)
645+
646+//line gititemrefs.qtpl:1
647+var (
648+ _ = qtio422016.Copy
649+ _ = qt422016.AcquireByteBuffer
650+)
651+
652+//line gititemrefs.qtpl:2
653+type GitItemRefsPage struct {
654+}
655+
656+//line gititemrefs.qtpl:6
657+func (g *GitItemRefsPage) StreamNav(qw422016 *qt422016.Writer, name string) {
658+//line gititemrefs.qtpl:6
659+ StreamGitItemNav(qw422016, name, Refs)
660+//line gititemrefs.qtpl:6
661+}
662+
663+//line gititemrefs.qtpl:6
664+func (g *GitItemRefsPage) WriteNav(qq422016 qtio422016.Writer, name string) {
665+//line gititemrefs.qtpl:6
666+ qw422016 := qt422016.AcquireWriter(qq422016)
667+//line gititemrefs.qtpl:6
668+ g.StreamNav(qw422016, name)
669+//line gititemrefs.qtpl:6
670+ qt422016.ReleaseWriter(qw422016)
671+//line gititemrefs.qtpl:6
672+}
673+
674+//line gititemrefs.qtpl:6
675+func (g *GitItemRefsPage) Nav(name string) string {
676+//line gititemrefs.qtpl:6
677+ qb422016 := qt422016.AcquireByteBuffer()
678+//line gititemrefs.qtpl:6
679+ g.WriteNav(qb422016, name)
680+//line gititemrefs.qtpl:6
681+ qs422016 := string(qb422016.B)
682+//line gititemrefs.qtpl:6
683+ qt422016.ReleaseByteBuffer(qb422016)
684+//line gititemrefs.qtpl:6
685+ return qs422016
686+//line gititemrefs.qtpl:6
687+}
688+
689+//line gititemrefs.qtpl:8
690+func (g *GitItemRefsPage) StreamGitContent(qw422016 *qt422016.Writer) {
691+//line gititemrefs.qtpl:8
692+ qw422016.N().S(`
693+<h4>Refs</h4>
694+`)
695+//line gititemrefs.qtpl:10
696+}
697+
698+//line gititemrefs.qtpl:10
699+func (g *GitItemRefsPage) WriteGitContent(qq422016 qtio422016.Writer) {
700+//line gititemrefs.qtpl:10
701+ qw422016 := qt422016.AcquireWriter(qq422016)
702+//line gititemrefs.qtpl:10
703+ g.StreamGitContent(qw422016)
704+//line gititemrefs.qtpl:10
705+ qt422016.ReleaseWriter(qw422016)
706+//line gititemrefs.qtpl:10
707+}
708+
709+//line gititemrefs.qtpl:10
710+func (g *GitItemRefsPage) GitContent() string {
711+//line gititemrefs.qtpl:10
712+ qb422016 := qt422016.AcquireByteBuffer()
713+//line gititemrefs.qtpl:10
714+ g.WriteGitContent(qb422016)
715+//line gititemrefs.qtpl:10
716+ qs422016 := string(qb422016.B)
717+//line gititemrefs.qtpl:10
718+ qt422016.ReleaseByteBuffer(qb422016)
719+//line gititemrefs.qtpl:10
720+ return qs422016
721+//line gititemrefs.qtpl:10
722+}
723diff --git a/templates/gititemsummary.qtpl b/templates/gititemsummary.qtpl
724new file mode 100644
725index 0000000000000000000000000000000000000000..f4b0dd6ed86aa1d3f65b86798453e662db5c3c8b
726--- /dev/null
727+++ b/templates/gititemsummary.qtpl
728@@ -0,0 +1,10 @@
729+{% code
730+type GitItemSummaryPage struct {
731+}
732+%}
733+
734+{% func (g *GitItemSummaryPage) Nav(name string) %}{%= GitItemNav(name, Summary) %}{% endfunc %}
735+
736+{% func (g *GitItemSummaryPage) GitContent() %}
737+<h4>Summary</h4>
738+{% endfunc %}
739diff --git a/templates/gititemsummary.qtpl.go b/templates/gititemsummary.qtpl.go
740new file mode 100644
741index 0000000000000000000000000000000000000000..aa41a17e5c03cc55cc9fa2a560cf7169f330ae8e
742--- /dev/null
743+++ b/templates/gititemsummary.qtpl.go
744@@ -0,0 +1,90 @@
745+// Code generated by qtc from "gititemsummary.qtpl". DO NOT EDIT.
746+// See https://github.com/valyala/quicktemplate for details.
747+
748+//line gititemsummary.qtpl:1
749+package templates
750+
751+//line gititemsummary.qtpl:1
752+import (
753+ qtio422016 "io"
754+
755+ qt422016 "github.com/valyala/quicktemplate"
756+)
757+
758+//line gititemsummary.qtpl:1
759+var (
760+ _ = qtio422016.Copy
761+ _ = qt422016.AcquireByteBuffer
762+)
763+
764+//line gititemsummary.qtpl:2
765+type GitItemSummaryPage struct {
766+}
767+
768+//line gititemsummary.qtpl:6
769+func (g *GitItemSummaryPage) StreamNav(qw422016 *qt422016.Writer, name string) {
770+//line gititemsummary.qtpl:6
771+ StreamGitItemNav(qw422016, name, Summary)
772+//line gititemsummary.qtpl:6
773+}
774+
775+//line gititemsummary.qtpl:6
776+func (g *GitItemSummaryPage) WriteNav(qq422016 qtio422016.Writer, name string) {
777+//line gititemsummary.qtpl:6
778+ qw422016 := qt422016.AcquireWriter(qq422016)
779+//line gititemsummary.qtpl:6
780+ g.StreamNav(qw422016, name)
781+//line gititemsummary.qtpl:6
782+ qt422016.ReleaseWriter(qw422016)
783+//line gititemsummary.qtpl:6
784+}
785+
786+//line gititemsummary.qtpl:6
787+func (g *GitItemSummaryPage) Nav(name string) string {
788+//line gititemsummary.qtpl:6
789+ qb422016 := qt422016.AcquireByteBuffer()
790+//line gititemsummary.qtpl:6
791+ g.WriteNav(qb422016, name)
792+//line gititemsummary.qtpl:6
793+ qs422016 := string(qb422016.B)
794+//line gititemsummary.qtpl:6
795+ qt422016.ReleaseByteBuffer(qb422016)
796+//line gititemsummary.qtpl:6
797+ return qs422016
798+//line gititemsummary.qtpl:6
799+}
800+
801+//line gititemsummary.qtpl:8
802+func (g *GitItemSummaryPage) StreamGitContent(qw422016 *qt422016.Writer) {
803+//line gititemsummary.qtpl:8
804+ qw422016.N().S(`
805+<h4>Summary</h4>
806+`)
807+//line gititemsummary.qtpl:10
808+}
809+
810+//line gititemsummary.qtpl:10
811+func (g *GitItemSummaryPage) WriteGitContent(qq422016 qtio422016.Writer) {
812+//line gititemsummary.qtpl:10
813+ qw422016 := qt422016.AcquireWriter(qq422016)
814+//line gititemsummary.qtpl:10
815+ g.StreamGitContent(qw422016)
816+//line gititemsummary.qtpl:10
817+ qt422016.ReleaseWriter(qw422016)
818+//line gititemsummary.qtpl:10
819+}
820+
821+//line gititemsummary.qtpl:10
822+func (g *GitItemSummaryPage) GitContent() string {
823+//line gititemsummary.qtpl:10
824+ qb422016 := qt422016.AcquireByteBuffer()
825+//line gititemsummary.qtpl:10
826+ g.WriteGitContent(qb422016)
827+//line gititemsummary.qtpl:10
828+ qs422016 := string(qb422016.B)
829+//line gititemsummary.qtpl:10
830+ qt422016.ReleaseByteBuffer(qb422016)
831+//line gititemsummary.qtpl:10
832+ return qs422016
833+//line gititemsummary.qtpl:10
834+}
835diff --git a/templates/gititemtree.qtpl b/templates/gititemtree.qtpl
836new file mode 100644
837index 0000000000000000000000000000000000000000..778cc004ad00863b1b10e95b19a50e4b9a6dec8e
838--- /dev/null
839+++ b/templates/gititemtree.qtpl
840@@ -0,0 +1,10 @@
841+{% code
842+type GitItemTreePage struct {
843+}
844+%}
845+
846+{% func (g *GitItemTreePage) Nav(name string) %}{%= GitItemNav(name, Tree) %}{% endfunc %}
847+
848+{% func (g *GitItemTreePage) GitContent() %}
849+<h4>Tree</h4>
850+{% endfunc %}
851diff --git a/templates/gititemtree.qtpl.go b/templates/gititemtree.qtpl.go
852new file mode 100644
853index 0000000000000000000000000000000000000000..04861d1539348a8bad52ac42f30228b356496c99
854--- /dev/null
855+++ b/templates/gititemtree.qtpl.go
856@@ -0,0 +1,90 @@
857+// Code generated by qtc from "gititemtree.qtpl". DO NOT EDIT.
858+// See https://github.com/valyala/quicktemplate for details.
859+
860+//line gititemtree.qtpl:1
861+package templates
862+
863+//line gititemtree.qtpl:1
864+import (
865+ qtio422016 "io"
866+
867+ qt422016 "github.com/valyala/quicktemplate"
868+)
869+
870+//line gititemtree.qtpl:1
871+var (
872+ _ = qtio422016.Copy
873+ _ = qt422016.AcquireByteBuffer
874+)
875+
876+//line gititemtree.qtpl:2
877+type GitItemTreePage struct {
878+}
879+
880+//line gititemtree.qtpl:6
881+func (g *GitItemTreePage) StreamNav(qw422016 *qt422016.Writer, name string) {
882+//line gititemtree.qtpl:6
883+ StreamGitItemNav(qw422016, name, Tree)
884+//line gititemtree.qtpl:6
885+}
886+
887+//line gititemtree.qtpl:6
888+func (g *GitItemTreePage) WriteNav(qq422016 qtio422016.Writer, name string) {
889+//line gititemtree.qtpl:6
890+ qw422016 := qt422016.AcquireWriter(qq422016)
891+//line gititemtree.qtpl:6
892+ g.StreamNav(qw422016, name)
893+//line gititemtree.qtpl:6
894+ qt422016.ReleaseWriter(qw422016)
895+//line gititemtree.qtpl:6
896+}
897+
898+//line gititemtree.qtpl:6
899+func (g *GitItemTreePage) Nav(name string) string {
900+//line gititemtree.qtpl:6
901+ qb422016 := qt422016.AcquireByteBuffer()
902+//line gititemtree.qtpl:6
903+ g.WriteNav(qb422016, name)
904+//line gititemtree.qtpl:6
905+ qs422016 := string(qb422016.B)
906+//line gititemtree.qtpl:6
907+ qt422016.ReleaseByteBuffer(qb422016)
908+//line gititemtree.qtpl:6
909+ return qs422016
910+//line gititemtree.qtpl:6
911+}
912+
913+//line gititemtree.qtpl:8
914+func (g *GitItemTreePage) StreamGitContent(qw422016 *qt422016.Writer) {
915+//line gititemtree.qtpl:8
916+ qw422016.N().S(`
917+<h4>Tree</h4>
918+`)
919+//line gititemtree.qtpl:10
920+}
921+
922+//line gititemtree.qtpl:10
923+func (g *GitItemTreePage) WriteGitContent(qq422016 qtio422016.Writer) {
924+//line gititemtree.qtpl:10
925+ qw422016 := qt422016.AcquireWriter(qq422016)
926+//line gititemtree.qtpl:10
927+ g.StreamGitContent(qw422016)
928+//line gititemtree.qtpl:10
929+ qt422016.ReleaseWriter(qw422016)
930+//line gititemtree.qtpl:10
931+}
932+
933+//line gititemtree.qtpl:10
934+func (g *GitItemTreePage) GitContent() string {
935+//line gititemtree.qtpl:10
936+ qb422016 := qt422016.AcquireByteBuffer()
937+//line gititemtree.qtpl:10
938+ g.WriteGitContent(qb422016)
939+//line gititemtree.qtpl:10
940+ qs422016 := string(qb422016.B)
941+//line gititemtree.qtpl:10
942+ qt422016.ReleaseByteBuffer(qb422016)
943+//line gititemtree.qtpl:10
944+ return qs422016
945+//line gititemtree.qtpl:10
946+}
947diff --git a/templates/gitlist.qtpl b/templates/gitlist.qtpl
948index e07f1995c4d85f7bfb9cba27449d07888165659d..b7beca58d127482042da362b30d569f03ff67efb 100644
949--- a/templates/gitlist.qtpl
950+++ b/templates/gitlist.qtpl
951@@ -17,12 +17,16 @@ <div class="event-list">
952 {% for _, r := range p.Respositories %}
953 <div class="event">
954 <h4>
955- <a href="/{%s r.Name %}">{%s r.Name %}</a>
956+ <a href="/{%s r.Name %}/summary">{%s r.Name %}</a>
957 </h4>
958 </hr>
959 <p>{%s r.LastCommitMessage %}</p>
960 <p><small>{%s r.LastCommitDate %}</small></p>
961- <p><a href="#">summary</a> <a href="#">log</a> <a href="#">tree</a></p>
962+ <p>
963+ <a href="/{%s r.Name %}/summary">summary</a>
964+ <a href="/{%s r.Name %}/log">log</a>
965+ <a href="/{%s r.Name %}/tree">tree</a>
966+ </p>
967 </div>
968 {% endfor %}
969 </div>
970diff --git a/templates/gitlist.qtpl.go b/templates/gitlist.qtpl.go
971index 130db5db65c14b25974beedf203f3b52cd1d7d4b..73f887ab91d2df83f2be1e6241a0dfd57cd8427c 100644
972--- a/templates/gitlist.qtpl.go
973+++ b/templates/gitlist.qtpl.go
974@@ -109,7 +109,7 @@ <a href="/`)
975 //line gitlist.qtpl:20
976 qw422016.E().S(r.Name)
977 //line gitlist.qtpl:20
978- qw422016.N().S(`">`)
979+ qw422016.N().S(`/summary">`)
980 //line gitlist.qtpl:20
981 qw422016.E().S(r.Name)
982 //line gitlist.qtpl:20
983@@ -126,78 +126,94 @@ //line gitlist.qtpl:24
984 qw422016.E().S(r.LastCommitDate)
985 //line gitlist.qtpl:24
986 qw422016.N().S(`</small></p>
987- <p><a href="#">summary</a> <a href="#">log</a> <a href="#">tree</a></p>
988+ <p>
989+ <a href="/`)
990+//line gitlist.qtpl:26
991+ qw422016.E().S(r.Name)
992+//line gitlist.qtpl:26
993+ qw422016.N().S(`/summary">summary</a>
994+ <a href="/`)
995+//line gitlist.qtpl:27
996+ qw422016.E().S(r.Name)
997+//line gitlist.qtpl:27
998+ qw422016.N().S(`/log">log</a>
999+ <a href="/`)
1000+//line gitlist.qtpl:28
1001+ qw422016.E().S(r.Name)
1002+//line gitlist.qtpl:28
1003+ qw422016.N().S(`/tree">tree</a>
1004+ </p>
1005 </div>
1006 `)
1007-//line gitlist.qtpl:27
1008+//line gitlist.qtpl:31
1009 }
1010-//line gitlist.qtpl:27
1011+//line gitlist.qtpl:31
1012 qw422016.N().S(`
1013 </div>
1014 `)
1015-//line gitlist.qtpl:29
1016+//line gitlist.qtpl:33
1017 }
1018
1019-//line gitlist.qtpl:29
1020+//line gitlist.qtpl:33
1021 func (p *GitListPage) WriteContent(qq422016 qtio422016.Writer) {
1022-//line gitlist.qtpl:29
1023+//line gitlist.qtpl:33
1024 qw422016 := qt422016.AcquireWriter(qq422016)
1025-//line gitlist.qtpl:29
1026+//line gitlist.qtpl:33
1027 p.StreamContent(qw422016)
1028-//line gitlist.qtpl:29
1029+//line gitlist.qtpl:33
1030 qt422016.ReleaseWriter(qw422016)
1031-//line gitlist.qtpl:29
1032+//line gitlist.qtpl:33
1033 }
1034
1035-//line gitlist.qtpl:29
1036+//line gitlist.qtpl:33
1037 func (p *GitListPage) Content() string {
1038-//line gitlist.qtpl:29
1039+//line gitlist.qtpl:33
1040 qb422016 := qt422016.AcquireByteBuffer()
1041-//line gitlist.qtpl:29
1042+//line gitlist.qtpl:33
1043 p.WriteContent(qb422016)
1044-//line gitlist.qtpl:29
1045+//line gitlist.qtpl:33
1046 qs422016 := string(qb422016.B)
1047-//line gitlist.qtpl:29
1048+//line gitlist.qtpl:33
1049 qt422016.ReleaseByteBuffer(qb422016)
1050-//line gitlist.qtpl:29
1051+//line gitlist.qtpl:33
1052 return qs422016
1053-//line gitlist.qtpl:29
1054+//line gitlist.qtpl:33
1055 }
1056
1057 // </div>
1058 // </div>
1059 //
1060
1061-//line gitlist.qtpl:33
1062+//line gitlist.qtpl:37
1063 func (p *GitListPage) StreamScript(qw422016 *qt422016.Writer) {
1064-//line gitlist.qtpl:33
1065+//line gitlist.qtpl:37
1066 qw422016.N().S(`
1067 `)
1068-//line gitlist.qtpl:34
1069+//line gitlist.qtpl:38
1070 }
1071
1072-//line gitlist.qtpl:34
1073+//line gitlist.qtpl:38
1074 func (p *GitListPage) WriteScript(qq422016 qtio422016.Writer) {
1075-//line gitlist.qtpl:34
1076+//line gitlist.qtpl:38
1077 qw422016 := qt422016.AcquireWriter(qq422016)
1078-//line gitlist.qtpl:34
1079+//line gitlist.qtpl:38
1080 p.StreamScript(qw422016)
1081-//line gitlist.qtpl:34
1082+//line gitlist.qtpl:38
1083 qt422016.ReleaseWriter(qw422016)
1084-//line gitlist.qtpl:34
1085+//line gitlist.qtpl:38
1086 }
1087
1088-//line gitlist.qtpl:34
1089+//line gitlist.qtpl:38
1090 func (p *GitListPage) Script() string {
1091-//line gitlist.qtpl:34
1092+//line gitlist.qtpl:38
1093 qb422016 := qt422016.AcquireByteBuffer()
1094-//line gitlist.qtpl:34
1095+//line gitlist.qtpl:38
1096 p.WriteScript(qb422016)
1097-//line gitlist.qtpl:34
1098+//line gitlist.qtpl:38
1099 qs422016 := string(qb422016.B)
1100-//line gitlist.qtpl:34
1101+//line gitlist.qtpl:38
1102 qt422016.ReleaseByteBuffer(qb422016)
1103-//line gitlist.qtpl:34
1104+//line gitlist.qtpl:38
1105 return qs422016
1106-//line gitlist.qtpl:34
1107+//line gitlist.qtpl:38
1108 }
1109diff --git a/templates/navbar.qtpl b/templates/navbar.qtpl
1110index 636c619eaafe24b6bb4ce5bc975a7ad37627ff8c..8b0799d412ad6da105a309a921cfd8a14a51f99b 100644
1111--- a/templates/navbar.qtpl
1112+++ b/templates/navbar.qtpl
1113@@ -8,8 +8,18 @@ Config
1114 )
1115 %}
1116
1117-{% func insertIfEqual(s, d Selection) %}{% if s == d %} selected{% endif %}{% endfunc %}
1118+{% code
1119+type GitSelection int
1120+const (
1121+ Readme GitSelection = iota
1122+ Log
1123+ Summary
1124+ Refs
1125+ Tree
1126+)
1127+%}
1128
1129+{% func insertIfEqual(s, d any) %}{% if s == d %} selected{% endif %}{% endfunc %}
1130
1131 {% func Navbar (s Selection) %}
1132 <nav class="container navbar navbar-expand">
1133@@ -21,3 +31,23 @@ <a class="nav-link{%= insertIfEqual(s, Config) %}" href="/config">config</a>
1134 </div>
1135 </nav>
1136 {% endfunc %}
1137+
1138+{% func GitItemNav (name string, s GitSelection) %}
1139+ <ul class="nav">
1140+ <li class="nav-item">
1141+ <a class="nav-link{%= insertIfEqual(s, Readme) %}" aria-current="page" href="/{%s name %}/about">about</a>
1142+ </li>
1143+ <li class="nav-item">
1144+ <a class="nav-link{%= insertIfEqual(s, Log) %}" aria-current="page" href="/{%s name %}/log">log</a>
1145+ </li>
1146+ <li class="nav-item">
1147+ <a class="nav-link{%= insertIfEqual(s, Summary) %}" aria-current="page" href="/{%s name %}/summary">summary</a>
1148+ </li>
1149+ <li class="nav-item">
1150+ <a class="nav-link{%= insertIfEqual(s, Refs) %}" aria-current="page" href="/{%s name %}/refs">refs</a>
1151+ </li>
1152+ <li class="nav-item">
1153+ <a class="nav-link{%= insertIfEqual(s, Tree) %}" aria-current="page" href="/{%s name %}/tree">tree</a>
1154+ </li>
1155+ </ul>
1156+{% endfunc %}
1157diff --git a/templates/navbar.qtpl.go b/templates/navbar.qtpl.go
1158index 1caade28b3bdef1ce61682b3e130bb2f535da334..acf21b4a0b6c952c2df4a5567b7c34229db8da82 100644
1159--- a/templates/navbar.qtpl.go
1160+++ b/templates/navbar.qtpl.go
1161@@ -27,97 +27,199 @@ About
1162 Config
1163 )
1164
1165-//line navbar.qtpl:11
1166-func streaminsertIfEqual(qw422016 *qt422016.Writer, s, d Selection) {
1167-//line navbar.qtpl:11
1168+//line navbar.qtpl:12
1169+type GitSelection int
1170+
1171+const (
1172+ Readme GitSelection = iota
1173+ Log
1174+ Summary
1175+ Refs
1176+ Tree
1177+)
1178+
1179+//line navbar.qtpl:22
1180+func streaminsertIfEqual(qw422016 *qt422016.Writer, s, d any) {
1181+//line navbar.qtpl:22
1182 if s == d {
1183-//line navbar.qtpl:11
1184+//line navbar.qtpl:22
1185 qw422016.N().S(` selected`)
1186-//line navbar.qtpl:11
1187+//line navbar.qtpl:22
1188 }
1189-//line navbar.qtpl:11
1190+//line navbar.qtpl:22
1191 }
1192
1193-//line navbar.qtpl:11
1194-func writeinsertIfEqual(qq422016 qtio422016.Writer, s, d Selection) {
1195-//line navbar.qtpl:11
1196+//line navbar.qtpl:22
1197+func writeinsertIfEqual(qq422016 qtio422016.Writer, s, d any) {
1198+//line navbar.qtpl:22
1199 qw422016 := qt422016.AcquireWriter(qq422016)
1200-//line navbar.qtpl:11
1201+//line navbar.qtpl:22
1202 streaminsertIfEqual(qw422016, s, d)
1203-//line navbar.qtpl:11
1204+//line navbar.qtpl:22
1205 qt422016.ReleaseWriter(qw422016)
1206-//line navbar.qtpl:11
1207+//line navbar.qtpl:22
1208 }
1209
1210-//line navbar.qtpl:11
1211-func insertIfEqual(s, d Selection) string {
1212-//line navbar.qtpl:11
1213+//line navbar.qtpl:22
1214+func insertIfEqual(s, d any) string {
1215+//line navbar.qtpl:22
1216 qb422016 := qt422016.AcquireByteBuffer()
1217-//line navbar.qtpl:11
1218+//line navbar.qtpl:22
1219 writeinsertIfEqual(qb422016, s, d)
1220-//line navbar.qtpl:11
1221+//line navbar.qtpl:22
1222 qs422016 := string(qb422016.B)
1223-//line navbar.qtpl:11
1224+//line navbar.qtpl:22
1225 qt422016.ReleaseByteBuffer(qb422016)
1226-//line navbar.qtpl:11
1227+//line navbar.qtpl:22
1228 return qs422016
1229-//line navbar.qtpl:11
1230+//line navbar.qtpl:22
1231 }
1232
1233-//line navbar.qtpl:14
1234+//line navbar.qtpl:24
1235 func StreamNavbar(qw422016 *qt422016.Writer, s Selection) {
1236-//line navbar.qtpl:14
1237+//line navbar.qtpl:24
1238 qw422016.N().S(`
1239 <nav class="container navbar navbar-expand">
1240 <div class="navbar-nav">
1241 <a class="nav-link`)
1242-//line navbar.qtpl:17
1243+//line navbar.qtpl:27
1244 streaminsertIfEqual(qw422016, s, Git)
1245-//line navbar.qtpl:17
1246+//line navbar.qtpl:27
1247 qw422016.N().S(`" href="/">git</a>
1248 <a class="nav-link`)
1249-//line navbar.qtpl:18
1250+//line navbar.qtpl:28
1251 streaminsertIfEqual(qw422016, s, List)
1252-//line navbar.qtpl:18
1253+//line navbar.qtpl:28
1254 qw422016.N().S(`" href="/list">list</a>
1255 <a class="nav-link`)
1256-//line navbar.qtpl:19
1257+//line navbar.qtpl:29
1258 streaminsertIfEqual(qw422016, s, About)
1259-//line navbar.qtpl:19
1260+//line navbar.qtpl:29
1261 qw422016.N().S(`" href="/about">about</a>
1262 <a class="nav-link`)
1263-//line navbar.qtpl:20
1264+//line navbar.qtpl:30
1265 streaminsertIfEqual(qw422016, s, Config)
1266-//line navbar.qtpl:20
1267+//line navbar.qtpl:30
1268 qw422016.N().S(`" href="/config">config</a>
1269 </div>
1270 </nav>
1271 `)
1272-//line navbar.qtpl:23
1273+//line navbar.qtpl:33
1274 }
1275
1276-//line navbar.qtpl:23
1277+//line navbar.qtpl:33
1278 func WriteNavbar(qq422016 qtio422016.Writer, s Selection) {
1279-//line navbar.qtpl:23
1280+//line navbar.qtpl:33
1281 qw422016 := qt422016.AcquireWriter(qq422016)
1282-//line navbar.qtpl:23
1283+//line navbar.qtpl:33
1284 StreamNavbar(qw422016, s)
1285-//line navbar.qtpl:23
1286+//line navbar.qtpl:33
1287 qt422016.ReleaseWriter(qw422016)
1288-//line navbar.qtpl:23
1289+//line navbar.qtpl:33
1290 }
1291
1292-//line navbar.qtpl:23
1293+//line navbar.qtpl:33
1294 func Navbar(s Selection) string {
1295-//line navbar.qtpl:23
1296+//line navbar.qtpl:33
1297 qb422016 := qt422016.AcquireByteBuffer()
1298-//line navbar.qtpl:23
1299+//line navbar.qtpl:33
1300 WriteNavbar(qb422016, s)
1301-//line navbar.qtpl:23
1302+//line navbar.qtpl:33
1303 qs422016 := string(qb422016.B)
1304-//line navbar.qtpl:23
1305+//line navbar.qtpl:33
1306 qt422016.ReleaseByteBuffer(qb422016)
1307-//line navbar.qtpl:23
1308+//line navbar.qtpl:33
1309 return qs422016
1310-//line navbar.qtpl:23
1311+//line navbar.qtpl:33
1312+}
1313+
1314+//line navbar.qtpl:35
1315+func StreamGitItemNav(qw422016 *qt422016.Writer, name string, s GitSelection) {
1316+//line navbar.qtpl:35
1317+ qw422016.N().S(`
1318+ <ul class="nav">
1319+ <li class="nav-item">
1320+ <a class="nav-link`)
1321+//line navbar.qtpl:38
1322+ streaminsertIfEqual(qw422016, s, Readme)
1323+//line navbar.qtpl:38
1324+ qw422016.N().S(`" aria-current="page" href="/`)
1325+//line navbar.qtpl:38
1326+ qw422016.E().S(name)
1327+//line navbar.qtpl:38
1328+ qw422016.N().S(`/about">about</a>
1329+ </li>
1330+ <li class="nav-item">
1331+ <a class="nav-link`)
1332+//line navbar.qtpl:41
1333+ streaminsertIfEqual(qw422016, s, Log)
1334+//line navbar.qtpl:41
1335+ qw422016.N().S(`" aria-current="page" href="/`)
1336+//line navbar.qtpl:41
1337+ qw422016.E().S(name)
1338+//line navbar.qtpl:41
1339+ qw422016.N().S(`/log">log</a>
1340+ </li>
1341+ <li class="nav-item">
1342+ <a class="nav-link`)
1343+//line navbar.qtpl:44
1344+ streaminsertIfEqual(qw422016, s, Summary)
1345+//line navbar.qtpl:44
1346+ qw422016.N().S(`" aria-current="page" href="/`)
1347+//line navbar.qtpl:44
1348+ qw422016.E().S(name)
1349+//line navbar.qtpl:44
1350+ qw422016.N().S(`/summary">summary</a>
1351+ </li>
1352+ <li class="nav-item">
1353+ <a class="nav-link`)
1354+//line navbar.qtpl:47
1355+ streaminsertIfEqual(qw422016, s, Refs)
1356+//line navbar.qtpl:47
1357+ qw422016.N().S(`" aria-current="page" href="/`)
1358+//line navbar.qtpl:47
1359+ qw422016.E().S(name)
1360+//line navbar.qtpl:47
1361+ qw422016.N().S(`/refs">refs</a>
1362+ </li>
1363+ <li class="nav-item">
1364+ <a class="nav-link`)
1365+//line navbar.qtpl:50
1366+ streaminsertIfEqual(qw422016, s, Tree)
1367+//line navbar.qtpl:50
1368+ qw422016.N().S(`" aria-current="page" href="/`)
1369+//line navbar.qtpl:50
1370+ qw422016.E().S(name)
1371+//line navbar.qtpl:50
1372+ qw422016.N().S(`/tree">tree</a>
1373+ </li>
1374+ </ul>
1375+`)
1376+//line navbar.qtpl:53
1377+}
1378+
1379+//line navbar.qtpl:53
1380+func WriteGitItemNav(qq422016 qtio422016.Writer, name string, s GitSelection) {
1381+//line navbar.qtpl:53
1382+ qw422016 := qt422016.AcquireWriter(qq422016)
1383+//line navbar.qtpl:53
1384+ StreamGitItemNav(qw422016, name, s)
1385+//line navbar.qtpl:53
1386+ qt422016.ReleaseWriter(qw422016)
1387+//line navbar.qtpl:53
1388+}
1389+
1390+//line navbar.qtpl:53
1391+func GitItemNav(name string, s GitSelection) string {
1392+//line navbar.qtpl:53
1393+ qb422016 := qt422016.AcquireByteBuffer()
1394+//line navbar.qtpl:53
1395+ WriteGitItemNav(qb422016, name, s)
1396+//line navbar.qtpl:53
1397+ qs422016 := string(qb422016.B)
1398+//line navbar.qtpl:53
1399+ qt422016.ReleaseByteBuffer(qb422016)
1400+//line navbar.qtpl:53
1401+ return qs422016
1402+//line navbar.qtpl:53
1403 }