1
0
mirror of https://github.com/osmarks/mycorrhiza.git synced 2025-01-07 02:10:26 +00:00

Siblings: Disable the sidebar by default

This commit is contained in:
Timur Ismagilov 2022-02-19 12:54:20 +03:00
parent 8686204e0f
commit dd3f2c698a
5 changed files with 152 additions and 129 deletions

View File

@ -1,5 +1,6 @@
WikiName = My wiki WikiName = My wiki
NaviTitleIcon = 🐑 NaviTitleIcon = 🐑
UseSiblingHyphaeSidebar = false
[Hyphae] [Hyphae]
HomeHypha = home HomeHypha = home

View File

@ -1,5 +1,6 @@
WikiName = Mycorrhiza (dev) WikiName = Mycorrhiza (dev)
NaviTitleIcon = 🧑‍💻 NaviTitleIcon = 🧑‍💻
UseSiblingHyphaeSidebar = false
[Hyphae] [Hyphae]
HomeHypha = home HomeHypha = home

View File

@ -17,8 +17,9 @@ import (
// See https://mycorrhiza.wiki/hypha/configuration/fields for the // See https://mycorrhiza.wiki/hypha/configuration/fields for the
// documentation. // documentation.
var ( var (
WikiName string WikiName string
NaviTitleIcon string NaviTitleIcon string
UseSiblingHyphaeSidebar bool
HomeHypha string HomeHypha string
UserHypha string UserHypha string
@ -51,8 +52,9 @@ var WikiDir string
// Config represents a Mycorrhiza wiki configuration file. This type is used // Config represents a Mycorrhiza wiki configuration file. This type is used
// only when reading configs. // only when reading configs.
type Config struct { type Config struct {
WikiName string `comment:"This name appears in the header and on various pages."` WikiName string `comment:"This name appears in the header and on various pages."`
NaviTitleIcon string `comment:"This icon is used in the breadcrumbs bar."` NaviTitleIcon string `comment:"This icon is used in the breadcrumbs bar."`
UseSiblingHyphaeSidebar bool `comment:"You are discouraged from using the sibling hyphae sidebar on new wikis. Enable it on old wikis that depend on it heavily."`
Hyphae Hyphae
Network Network
Authorization Authorization
@ -67,8 +69,7 @@ type Hyphae struct {
HeaderLinksHypha string `comment:"You can also specify a hypha to populate your own custom header links from."` HeaderLinksHypha string `comment:"You can also specify a hypha to populate your own custom header links from."`
} }
// Network is a section of Config that has fields related to network stuff: // Network is a section of Config that has fields related to network stuff.
// HTTP and Gemini.
type Network struct { type Network struct {
ListenAddr string ListenAddr string
URL string `comment:"Set your wiki's public URL here. It's used for OpenGraph generation and syndication feeds."` URL string `comment:"Set your wiki's public URL here. It's used for OpenGraph generation and syndication feeds."`
@ -94,6 +95,8 @@ type Authorization struct {
Locked bool `comment:"Set if users have to authorize to see anything on the wiki."` Locked bool `comment:"Set if users have to authorize to see anything on the wiki."`
UseWhiteList bool `comment:"If true, WhiteList is used. Else it is not used."` UseWhiteList bool `comment:"If true, WhiteList is used. Else it is not used."`
WhiteList []string `delim:"," comment:"Usernames of people who can log in to your wiki separated by comma."` WhiteList []string `delim:"," comment:"Usernames of people who can log in to your wiki separated by comma."`
// TODO: let admins enable auth-less editing
} }
// Telegram is the section of Config that sets Telegram authorization. // Telegram is the section of Config that sets Telegram authorization.
@ -106,8 +109,9 @@ type Telegram struct {
// configuration. Call it sometime during the initialization. // configuration. Call it sometime during the initialization.
func ReadConfigFile(path string) error { func ReadConfigFile(path string) error {
cfg := &Config{ cfg := &Config{
WikiName: "Mycorrhiza Wiki", WikiName: "Mycorrhiza Wiki",
NaviTitleIcon: "🍄", NaviTitleIcon: "🍄",
UseSiblingHyphaeSidebar: false,
Hyphae: Hyphae{ Hyphae: Hyphae{
HomeHypha: "home", HomeHypha: "home",
UserHypha: "u", UserHypha: "u",
@ -167,6 +171,7 @@ func ReadConfigFile(path string) error {
// Map the struct to the global variables // Map the struct to the global variables
WikiName = cfg.WikiName WikiName = cfg.WikiName
NaviTitleIcon = cfg.NaviTitleIcon NaviTitleIcon = cfg.NaviTitleIcon
UseSiblingHyphaeSidebar = cfg.UseSiblingHyphaeSidebar
HomeHypha = cfg.HomeHypha HomeHypha = cfg.HomeHypha
UserHypha = cfg.UserHypha UserHypha = cfg.UserHypha
HeaderLinksHypha = cfg.HeaderLinksHypha HeaderLinksHypha = cfg.HeaderLinksHypha

View File

@ -1,5 +1,6 @@
{% import "net/http" %} {% import "net/http" %}
{% import "strings" %} {% import "strings" %}
{% import "github.com/bouncepaw/mycorrhiza/cfg" %}
{% import "github.com/bouncepaw/mycorrhiza/hyphae/backlinks" %} {% import "github.com/bouncepaw/mycorrhiza/hyphae/backlinks" %}
{% import "github.com/bouncepaw/mycorrhiza/l18n" %} {% import "github.com/bouncepaw/mycorrhiza/l18n" %}
{% import "github.com/bouncepaw/mycorrhiza/user" %} {% import "github.com/bouncepaw/mycorrhiza/user" %}
@ -32,10 +33,12 @@
{% endfunc %} {% endfunc %}
{% func siblingHyphaeHTML(siblings string, lc *l18n.Localizer) %} {% func siblingHyphaeHTML(siblings string, lc *l18n.Localizer) %}
{% if cfg.UseSiblingHyphaeSidebar %}
<aside class="sibling-hyphae layout-card"> <aside class="sibling-hyphae layout-card">
<h2 class="sibling-hyphae__title layout-card__title">{%s lc.Get("ui.sibling_hyphae") %}</h2> <h2 class="sibling-hyphae__title layout-card__title">{%s lc.Get("ui.sibling_hyphae") %}</h2>
{%s= siblings %} {%s= siblings %}
</aside> </aside>
{% endif %}
{% endfunc %} {% endfunc %}
{% func SubhyphaeHTML(subhyphae string, lc *l18n.Localizer) %} {% func SubhyphaeHTML(subhyphae string, lc *l18n.Localizer) %}

View File

@ -11,271 +11,284 @@ import "net/http"
import "strings" import "strings"
//line views/nav.qtpl:3 //line views/nav.qtpl:3
import "github.com/bouncepaw/mycorrhiza/hyphae/backlinks" import "github.com/bouncepaw/mycorrhiza/cfg"
//line views/nav.qtpl:4 //line views/nav.qtpl:4
import "github.com/bouncepaw/mycorrhiza/l18n" import "github.com/bouncepaw/mycorrhiza/hyphae/backlinks"
//line views/nav.qtpl:5 //line views/nav.qtpl:5
import "github.com/bouncepaw/mycorrhiza/user" import "github.com/bouncepaw/mycorrhiza/l18n"
//line views/nav.qtpl:6 //line views/nav.qtpl:6
import "github.com/bouncepaw/mycorrhiza/user"
//line views/nav.qtpl:7
import "github.com/bouncepaw/mycorrhiza/hyphae" import "github.com/bouncepaw/mycorrhiza/hyphae"
//line views/nav.qtpl:8 //line views/nav.qtpl:9
import ( import (
qtio422016 "io" qtio422016 "io"
qt422016 "github.com/valyala/quicktemplate" qt422016 "github.com/valyala/quicktemplate"
) )
//line views/nav.qtpl:8 //line views/nav.qtpl:9
var ( var (
_ = qtio422016.Copy _ = qtio422016.Copy
_ = qt422016.AcquireByteBuffer _ = qt422016.AcquireByteBuffer
) )
//line views/nav.qtpl:8 //line views/nav.qtpl:9
func streamhyphaInfoEntry(qw422016 *qt422016.Writer, h hyphae.Hypha, u *user.User, action, displayText string) { func streamhyphaInfoEntry(qw422016 *qt422016.Writer, h hyphae.Hypha, u *user.User, action, displayText string) {
//line views/nav.qtpl:8 //line views/nav.qtpl:9
qw422016.N().S(` qw422016.N().S(`
`) `)
//line views/nav.qtpl:9 //line views/nav.qtpl:10
if u.CanProceed(action) { if u.CanProceed(action) {
//line views/nav.qtpl:9 //line views/nav.qtpl:10
qw422016.N().S(` qw422016.N().S(`
<li class="hypha-info__entry hypha-info__entry_`) <li class="hypha-info__entry hypha-info__entry_`)
//line views/nav.qtpl:10 //line views/nav.qtpl:11
qw422016.E().S(action) qw422016.E().S(action)
//line views/nav.qtpl:10 //line views/nav.qtpl:11
qw422016.N().S(`"> qw422016.N().S(`">
<a class="hypha-info__link" href="/`) <a class="hypha-info__link" href="/`)
//line views/nav.qtpl:11 //line views/nav.qtpl:12
qw422016.E().S(action) qw422016.E().S(action)
//line views/nav.qtpl:11 //line views/nav.qtpl:12
qw422016.N().S(`/`) qw422016.N().S(`/`)
//line views/nav.qtpl:11 //line views/nav.qtpl:12
qw422016.E().S(h.CanonicalName()) qw422016.E().S(h.CanonicalName())
//line views/nav.qtpl:11 //line views/nav.qtpl:12
qw422016.N().S(`">`) qw422016.N().S(`">`)
//line views/nav.qtpl:11 //line views/nav.qtpl:12
qw422016.E().S(displayText) qw422016.E().S(displayText)
//line views/nav.qtpl:11 //line views/nav.qtpl:12
qw422016.N().S(`</a> qw422016.N().S(`</a>
</li> </li>
`) `)
//line views/nav.qtpl:13 //line views/nav.qtpl:14
} }
//line views/nav.qtpl:13 //line views/nav.qtpl:14
qw422016.N().S(` qw422016.N().S(`
`) `)
//line views/nav.qtpl:14 //line views/nav.qtpl:15
} }
//line views/nav.qtpl:14 //line views/nav.qtpl:15
func writehyphaInfoEntry(qq422016 qtio422016.Writer, h hyphae.Hypha, u *user.User, action, displayText string) { func writehyphaInfoEntry(qq422016 qtio422016.Writer, h hyphae.Hypha, u *user.User, action, displayText string) {
//line views/nav.qtpl:14 //line views/nav.qtpl:15
qw422016 := qt422016.AcquireWriter(qq422016) qw422016 := qt422016.AcquireWriter(qq422016)
//line views/nav.qtpl:14 //line views/nav.qtpl:15
streamhyphaInfoEntry(qw422016, h, u, action, displayText) streamhyphaInfoEntry(qw422016, h, u, action, displayText)
//line views/nav.qtpl:14 //line views/nav.qtpl:15
qt422016.ReleaseWriter(qw422016) qt422016.ReleaseWriter(qw422016)
//line views/nav.qtpl:14 //line views/nav.qtpl:15
} }
//line views/nav.qtpl:14 //line views/nav.qtpl:15
func hyphaInfoEntry(h hyphae.Hypha, u *user.User, action, displayText string) string { func hyphaInfoEntry(h hyphae.Hypha, u *user.User, action, displayText string) string {
//line views/nav.qtpl:14 //line views/nav.qtpl:15
qb422016 := qt422016.AcquireByteBuffer() qb422016 := qt422016.AcquireByteBuffer()
//line views/nav.qtpl:14 //line views/nav.qtpl:15
writehyphaInfoEntry(qb422016, h, u, action, displayText) writehyphaInfoEntry(qb422016, h, u, action, displayText)
//line views/nav.qtpl:14 //line views/nav.qtpl:15
qs422016 := string(qb422016.B) qs422016 := string(qb422016.B)
//line views/nav.qtpl:14 //line views/nav.qtpl:15
qt422016.ReleaseByteBuffer(qb422016) qt422016.ReleaseByteBuffer(qb422016)
//line views/nav.qtpl:14 //line views/nav.qtpl:15
return qs422016 return qs422016
//line views/nav.qtpl:14 //line views/nav.qtpl:15
} }
//line views/nav.qtpl:16 //line views/nav.qtpl:17
func streamhyphaInfo(qw422016 *qt422016.Writer, rq *http.Request, h hyphae.Hypha) { func streamhyphaInfo(qw422016 *qt422016.Writer, rq *http.Request, h hyphae.Hypha) {
//line views/nav.qtpl:16 //line views/nav.qtpl:17
qw422016.N().S(` qw422016.N().S(`
`) `)
//line views/nav.qtpl:18 //line views/nav.qtpl:19
u := user.FromRequest(rq) u := user.FromRequest(rq)
lc := l18n.FromRequest(rq) lc := l18n.FromRequest(rq)
backs := backlinks.BacklinksCount(h) backs := backlinks.BacklinksCount(h)
//line views/nav.qtpl:21 //line views/nav.qtpl:22
qw422016.N().S(` qw422016.N().S(`
<nav class="hypha-info"> <nav class="hypha-info">
<ul class="hypha-info__list"> <ul class="hypha-info__list">
`) `)
//line views/nav.qtpl:24 //line views/nav.qtpl:25
streamhyphaInfoEntry(qw422016, h, u, "history", lc.Get("ui.history_link")) streamhyphaInfoEntry(qw422016, h, u, "history", lc.Get("ui.history_link"))
//line views/nav.qtpl:24 //line views/nav.qtpl:25
qw422016.N().S(` qw422016.N().S(`
`) `)
//line views/nav.qtpl:25 //line views/nav.qtpl:26
streamhyphaInfoEntry(qw422016, h, u, "rename-ask", lc.Get("ui.rename_link")) streamhyphaInfoEntry(qw422016, h, u, "rename-ask", lc.Get("ui.rename_link"))
//line views/nav.qtpl:25 //line views/nav.qtpl:26
qw422016.N().S(` qw422016.N().S(`
`) `)
//line views/nav.qtpl:26 //line views/nav.qtpl:27
streamhyphaInfoEntry(qw422016, h, u, "delete-ask", lc.Get("ui.delete_link")) streamhyphaInfoEntry(qw422016, h, u, "delete-ask", lc.Get("ui.delete_link"))
//line views/nav.qtpl:26 //line views/nav.qtpl:27
qw422016.N().S(` qw422016.N().S(`
`) `)
//line views/nav.qtpl:27 //line views/nav.qtpl:28
streamhyphaInfoEntry(qw422016, h, u, "text", lc.Get("ui.text_link")) streamhyphaInfoEntry(qw422016, h, u, "text", lc.Get("ui.text_link"))
//line views/nav.qtpl:27 //line views/nav.qtpl:28
qw422016.N().S(` qw422016.N().S(`
`) `)
//line views/nav.qtpl:28 //line views/nav.qtpl:29
streamhyphaInfoEntry(qw422016, h, u, "attachment", lc.Get("ui.attachment_link")) streamhyphaInfoEntry(qw422016, h, u, "attachment", lc.Get("ui.attachment_link"))
//line views/nav.qtpl:28 //line views/nav.qtpl:29
qw422016.N().S(` qw422016.N().S(`
`) `)
//line views/nav.qtpl:29 //line views/nav.qtpl:30
streamhyphaInfoEntry(qw422016, h, u, "backlinks", lc.GetPlural("ui.backlinks_link", backs)) streamhyphaInfoEntry(qw422016, h, u, "backlinks", lc.GetPlural("ui.backlinks_link", backs))
//line views/nav.qtpl:29 //line views/nav.qtpl:30
qw422016.N().S(` qw422016.N().S(`
</ul> </ul>
</nav> </nav>
`) `)
//line views/nav.qtpl:32 //line views/nav.qtpl:33
} }
//line views/nav.qtpl:32 //line views/nav.qtpl:33
func writehyphaInfo(qq422016 qtio422016.Writer, rq *http.Request, h hyphae.Hypha) { func writehyphaInfo(qq422016 qtio422016.Writer, rq *http.Request, h hyphae.Hypha) {
//line views/nav.qtpl:32 //line views/nav.qtpl:33
qw422016 := qt422016.AcquireWriter(qq422016) qw422016 := qt422016.AcquireWriter(qq422016)
//line views/nav.qtpl:32 //line views/nav.qtpl:33
streamhyphaInfo(qw422016, rq, h) streamhyphaInfo(qw422016, rq, h)
//line views/nav.qtpl:32 //line views/nav.qtpl:33
qt422016.ReleaseWriter(qw422016) qt422016.ReleaseWriter(qw422016)
//line views/nav.qtpl:32 //line views/nav.qtpl:33
} }
//line views/nav.qtpl:32 //line views/nav.qtpl:33
func hyphaInfo(rq *http.Request, h hyphae.Hypha) string { func hyphaInfo(rq *http.Request, h hyphae.Hypha) string {
//line views/nav.qtpl:32 //line views/nav.qtpl:33
qb422016 := qt422016.AcquireByteBuffer() qb422016 := qt422016.AcquireByteBuffer()
//line views/nav.qtpl:32 //line views/nav.qtpl:33
writehyphaInfo(qb422016, rq, h) writehyphaInfo(qb422016, rq, h)
//line views/nav.qtpl:32 //line views/nav.qtpl:33
qs422016 := string(qb422016.B) qs422016 := string(qb422016.B)
//line views/nav.qtpl:32 //line views/nav.qtpl:33
qt422016.ReleaseByteBuffer(qb422016) qt422016.ReleaseByteBuffer(qb422016)
//line views/nav.qtpl:32 //line views/nav.qtpl:33
return qs422016 return qs422016
//line views/nav.qtpl:32 //line views/nav.qtpl:33
} }
//line views/nav.qtpl:34 //line views/nav.qtpl:35
func streamsiblingHyphaeHTML(qw422016 *qt422016.Writer, siblings string, lc *l18n.Localizer) { func streamsiblingHyphaeHTML(qw422016 *qt422016.Writer, siblings string, lc *l18n.Localizer) {
//line views/nav.qtpl:34 //line views/nav.qtpl:35
qw422016.N().S(` qw422016.N().S(`
`)
//line views/nav.qtpl:36
if cfg.UseSiblingHyphaeSidebar {
//line views/nav.qtpl:36
qw422016.N().S(`
<aside class="sibling-hyphae layout-card"> <aside class="sibling-hyphae layout-card">
<h2 class="sibling-hyphae__title layout-card__title">`) <h2 class="sibling-hyphae__title layout-card__title">`)
//line views/nav.qtpl:36 //line views/nav.qtpl:38
qw422016.E().S(lc.Get("ui.sibling_hyphae")) qw422016.E().S(lc.Get("ui.sibling_hyphae"))
//line views/nav.qtpl:36 //line views/nav.qtpl:38
qw422016.N().S(`</h2> qw422016.N().S(`</h2>
`) `)
//line views/nav.qtpl:37 //line views/nav.qtpl:39
qw422016.N().S(siblings) qw422016.N().S(siblings)
//line views/nav.qtpl:37 //line views/nav.qtpl:39
qw422016.N().S(` qw422016.N().S(`
</aside> </aside>
`) `)
//line views/nav.qtpl:39
}
//line views/nav.qtpl:39
func writesiblingHyphaeHTML(qq422016 qtio422016.Writer, siblings string, lc *l18n.Localizer) {
//line views/nav.qtpl:39
qw422016 := qt422016.AcquireWriter(qq422016)
//line views/nav.qtpl:39
streamsiblingHyphaeHTML(qw422016, siblings, lc)
//line views/nav.qtpl:39
qt422016.ReleaseWriter(qw422016)
//line views/nav.qtpl:39
}
//line views/nav.qtpl:39
func siblingHyphaeHTML(siblings string, lc *l18n.Localizer) string {
//line views/nav.qtpl:39
qb422016 := qt422016.AcquireByteBuffer()
//line views/nav.qtpl:39
writesiblingHyphaeHTML(qb422016, siblings, lc)
//line views/nav.qtpl:39
qs422016 := string(qb422016.B)
//line views/nav.qtpl:39
qt422016.ReleaseByteBuffer(qb422016)
//line views/nav.qtpl:39
return qs422016
//line views/nav.qtpl:39
}
//line views/nav.qtpl:41 //line views/nav.qtpl:41
func StreamSubhyphaeHTML(qw422016 *qt422016.Writer, subhyphae string, lc *l18n.Localizer) { }
//line views/nav.qtpl:41 //line views/nav.qtpl:41
qw422016.N().S(` qw422016.N().S(`
`) `)
//line views/nav.qtpl:42 //line views/nav.qtpl:42
if strings.TrimSpace(subhyphae) != "" { }
//line views/nav.qtpl:42 //line views/nav.qtpl:42
func writesiblingHyphaeHTML(qq422016 qtio422016.Writer, siblings string, lc *l18n.Localizer) {
//line views/nav.qtpl:42
qw422016 := qt422016.AcquireWriter(qq422016)
//line views/nav.qtpl:42
streamsiblingHyphaeHTML(qw422016, siblings, lc)
//line views/nav.qtpl:42
qt422016.ReleaseWriter(qw422016)
//line views/nav.qtpl:42
}
//line views/nav.qtpl:42
func siblingHyphaeHTML(siblings string, lc *l18n.Localizer) string {
//line views/nav.qtpl:42
qb422016 := qt422016.AcquireByteBuffer()
//line views/nav.qtpl:42
writesiblingHyphaeHTML(qb422016, siblings, lc)
//line views/nav.qtpl:42
qs422016 := string(qb422016.B)
//line views/nav.qtpl:42
qt422016.ReleaseByteBuffer(qb422016)
//line views/nav.qtpl:42
return qs422016
//line views/nav.qtpl:42
}
//line views/nav.qtpl:44
func StreamSubhyphaeHTML(qw422016 *qt422016.Writer, subhyphae string, lc *l18n.Localizer) {
//line views/nav.qtpl:44
qw422016.N().S(`
`)
//line views/nav.qtpl:45
if strings.TrimSpace(subhyphae) != "" {
//line views/nav.qtpl:45
qw422016.N().S(` qw422016.N().S(`
<section class="subhyphae"> <section class="subhyphae">
<h2 class="subhyphae__title">`) <h2 class="subhyphae__title">`)
//line views/nav.qtpl:44 //line views/nav.qtpl:47
qw422016.E().S(lc.Get("ui.subhyphae")) qw422016.E().S(lc.Get("ui.subhyphae"))
//line views/nav.qtpl:44 //line views/nav.qtpl:47
qw422016.N().S(`</h2> qw422016.N().S(`</h2>
<nav class="subhyphae__nav"> <nav class="subhyphae__nav">
<ul class="subhyphae__list"> <ul class="subhyphae__list">
`) `)
//line views/nav.qtpl:47 //line views/nav.qtpl:50
qw422016.N().S(subhyphae) qw422016.N().S(subhyphae)
//line views/nav.qtpl:47 //line views/nav.qtpl:50
qw422016.N().S(` qw422016.N().S(`
</ul> </ul>
</nav> </nav>
</section> </section>
`) `)
//line views/nav.qtpl:51 //line views/nav.qtpl:54
} }
//line views/nav.qtpl:51 //line views/nav.qtpl:54
qw422016.N().S(` qw422016.N().S(`
`) `)
//line views/nav.qtpl:52 //line views/nav.qtpl:55
} }
//line views/nav.qtpl:52 //line views/nav.qtpl:55
func WriteSubhyphaeHTML(qq422016 qtio422016.Writer, subhyphae string, lc *l18n.Localizer) { func WriteSubhyphaeHTML(qq422016 qtio422016.Writer, subhyphae string, lc *l18n.Localizer) {
//line views/nav.qtpl:52 //line views/nav.qtpl:55
qw422016 := qt422016.AcquireWriter(qq422016) qw422016 := qt422016.AcquireWriter(qq422016)
//line views/nav.qtpl:52 //line views/nav.qtpl:55
StreamSubhyphaeHTML(qw422016, subhyphae, lc) StreamSubhyphaeHTML(qw422016, subhyphae, lc)
//line views/nav.qtpl:52 //line views/nav.qtpl:55
qt422016.ReleaseWriter(qw422016) qt422016.ReleaseWriter(qw422016)
//line views/nav.qtpl:52 //line views/nav.qtpl:55
} }
//line views/nav.qtpl:52 //line views/nav.qtpl:55
func SubhyphaeHTML(subhyphae string, lc *l18n.Localizer) string { func SubhyphaeHTML(subhyphae string, lc *l18n.Localizer) string {
//line views/nav.qtpl:52 //line views/nav.qtpl:55
qb422016 := qt422016.AcquireByteBuffer() qb422016 := qt422016.AcquireByteBuffer()
//line views/nav.qtpl:52 //line views/nav.qtpl:55
WriteSubhyphaeHTML(qb422016, subhyphae, lc) WriteSubhyphaeHTML(qb422016, subhyphae, lc)
//line views/nav.qtpl:52 //line views/nav.qtpl:55
qs422016 := string(qb422016.B) qs422016 := string(qb422016.B)
//line views/nav.qtpl:52 //line views/nav.qtpl:55
qt422016.ReleaseByteBuffer(qb422016) qt422016.ReleaseByteBuffer(qb422016)
//line views/nav.qtpl:52 //line views/nav.qtpl:55
return qs422016 return qs422016
//line views/nav.qtpl:52 //line views/nav.qtpl:55
} }