cerrado @ 242ba7f412d4e54f21385afff3f2b884f57f6ced

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