diff --git a/assets/config.ini b/assets/config.ini
index aec2b33..c4c3b3d 100644
--- a/assets/config.ini
+++ b/assets/config.ini
@@ -1,5 +1,6 @@
WikiName = My wiki
NaviTitleIcon = 🐑
+UseSiblingHyphaeSidebar = false
[Hyphae]
HomeHypha = home
diff --git a/assets/devconfig.ini b/assets/devconfig.ini
index a85cff3..3269421 100644
--- a/assets/devconfig.ini
+++ b/assets/devconfig.ini
@@ -1,5 +1,6 @@
WikiName = Mycorrhiza (dev)
NaviTitleIcon = 🧑💻
+UseSiblingHyphaeSidebar = false
[Hyphae]
HomeHypha = home
diff --git a/cfg/config.go b/cfg/config.go
index 52d8122..c13f00c 100644
--- a/cfg/config.go
+++ b/cfg/config.go
@@ -17,8 +17,9 @@ import (
// See https://mycorrhiza.wiki/hypha/configuration/fields for the
// documentation.
var (
- WikiName string
- NaviTitleIcon string
+ WikiName string
+ NaviTitleIcon string
+ UseSiblingHyphaeSidebar bool
HomeHypha string
UserHypha string
@@ -51,8 +52,9 @@ var WikiDir string
// Config represents a Mycorrhiza wiki configuration file. This type is used
// only when reading configs.
type Config struct {
- WikiName string `comment:"This name appears in the header and on various pages."`
- NaviTitleIcon string `comment:"This icon is used in the breadcrumbs bar."`
+ WikiName string `comment:"This name appears in the header and on various pages."`
+ 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
Network
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."`
}
-// Network is a section of Config that has fields related to network stuff:
-// HTTP and Gemini.
+// Network is a section of Config that has fields related to network stuff.
type Network struct {
ListenAddr string
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."`
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."`
+
+ // TODO: let admins enable auth-less editing
}
// Telegram is the section of Config that sets Telegram authorization.
@@ -106,8 +109,9 @@ type Telegram struct {
// configuration. Call it sometime during the initialization.
func ReadConfigFile(path string) error {
cfg := &Config{
- WikiName: "Mycorrhiza Wiki",
- NaviTitleIcon: "🍄",
+ WikiName: "Mycorrhiza Wiki",
+ NaviTitleIcon: "🍄",
+ UseSiblingHyphaeSidebar: false,
Hyphae: Hyphae{
HomeHypha: "home",
UserHypha: "u",
@@ -167,6 +171,7 @@ func ReadConfigFile(path string) error {
// Map the struct to the global variables
WikiName = cfg.WikiName
NaviTitleIcon = cfg.NaviTitleIcon
+ UseSiblingHyphaeSidebar = cfg.UseSiblingHyphaeSidebar
HomeHypha = cfg.HomeHypha
UserHypha = cfg.UserHypha
HeaderLinksHypha = cfg.HeaderLinksHypha
diff --git a/views/nav.qtpl b/views/nav.qtpl
index 479b728..2223e1b 100644
--- a/views/nav.qtpl
+++ b/views/nav.qtpl
@@ -1,5 +1,6 @@
{% import "net/http" %}
{% import "strings" %}
+{% import "github.com/bouncepaw/mycorrhiza/cfg" %}
{% import "github.com/bouncepaw/mycorrhiza/hyphae/backlinks" %}
{% import "github.com/bouncepaw/mycorrhiza/l18n" %}
{% import "github.com/bouncepaw/mycorrhiza/user" %}
@@ -32,10 +33,12 @@
{% endfunc %}
{% func siblingHyphaeHTML(siblings string, lc *l18n.Localizer) %}
+{% if cfg.UseSiblingHyphaeSidebar %}
+{% endif %}
{% endfunc %}
{% func SubhyphaeHTML(subhyphae string, lc *l18n.Localizer) %}
diff --git a/views/nav.qtpl.go b/views/nav.qtpl.go
index 822cc3e..8f7519d 100644
--- a/views/nav.qtpl.go
+++ b/views/nav.qtpl.go
@@ -11,271 +11,284 @@ import "net/http"
import "strings"
//line views/nav.qtpl:3
-import "github.com/bouncepaw/mycorrhiza/hyphae/backlinks"
+import "github.com/bouncepaw/mycorrhiza/cfg"
//line views/nav.qtpl:4
-import "github.com/bouncepaw/mycorrhiza/l18n"
+import "github.com/bouncepaw/mycorrhiza/hyphae/backlinks"
//line views/nav.qtpl:5
-import "github.com/bouncepaw/mycorrhiza/user"
+import "github.com/bouncepaw/mycorrhiza/l18n"
//line views/nav.qtpl:6
+import "github.com/bouncepaw/mycorrhiza/user"
+
+//line views/nav.qtpl:7
import "github.com/bouncepaw/mycorrhiza/hyphae"
-//line views/nav.qtpl:8
+//line views/nav.qtpl:9
import (
qtio422016 "io"
qt422016 "github.com/valyala/quicktemplate"
)
-//line views/nav.qtpl:8
+//line views/nav.qtpl:9
var (
_ = qtio422016.Copy
_ = 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) {
-//line views/nav.qtpl:8
+//line views/nav.qtpl:9
qw422016.N().S(`
`)
-//line views/nav.qtpl:9
+//line views/nav.qtpl:10
if u.CanProceed(action) {
-//line views/nav.qtpl:9
+//line views/nav.qtpl:10
qw422016.N().S(`
`)
-//line views/nav.qtpl:11
+//line views/nav.qtpl:12
qw422016.E().S(displayText)
-//line views/nav.qtpl:11
+//line views/nav.qtpl:12
qw422016.N().S(`
`)
-//line views/nav.qtpl:13
+//line views/nav.qtpl:14
}
-//line views/nav.qtpl:13
+//line views/nav.qtpl:14
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) {
-//line views/nav.qtpl:14
+//line views/nav.qtpl:15
qw422016 := qt422016.AcquireWriter(qq422016)
-//line views/nav.qtpl:14
+//line views/nav.qtpl:15
streamhyphaInfoEntry(qw422016, h, u, action, displayText)
-//line views/nav.qtpl:14
+//line views/nav.qtpl:15
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 {
-//line views/nav.qtpl:14
+//line views/nav.qtpl:15
qb422016 := qt422016.AcquireByteBuffer()
-//line views/nav.qtpl:14
+//line views/nav.qtpl:15
writehyphaInfoEntry(qb422016, h, u, action, displayText)
-//line views/nav.qtpl:14
+//line views/nav.qtpl:15
qs422016 := string(qb422016.B)
-//line views/nav.qtpl:14
+//line views/nav.qtpl:15
qt422016.ReleaseByteBuffer(qb422016)
-//line views/nav.qtpl:14
+//line views/nav.qtpl:15
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) {
-//line views/nav.qtpl:16
+//line views/nav.qtpl:17
qw422016.N().S(`
`)
-//line views/nav.qtpl:18
+//line views/nav.qtpl:19
u := user.FromRequest(rq)
lc := l18n.FromRequest(rq)
backs := backlinks.BacklinksCount(h)
-//line views/nav.qtpl:21
+//line views/nav.qtpl:22
qw422016.N().S(`
`)
-//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) {
-//line views/nav.qtpl:32
+//line views/nav.qtpl:33
qw422016 := qt422016.AcquireWriter(qq422016)
-//line views/nav.qtpl:32
+//line views/nav.qtpl:33
streamhyphaInfo(qw422016, rq, h)
-//line views/nav.qtpl:32
+//line views/nav.qtpl:33
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 {
-//line views/nav.qtpl:32
+//line views/nav.qtpl:33
qb422016 := qt422016.AcquireByteBuffer()
-//line views/nav.qtpl:32
+//line views/nav.qtpl:33
writehyphaInfo(qb422016, rq, h)
-//line views/nav.qtpl:32
+//line views/nav.qtpl:33
qs422016 := string(qb422016.B)
-//line views/nav.qtpl:32
+//line views/nav.qtpl:33
qt422016.ReleaseByteBuffer(qb422016)
-//line views/nav.qtpl:32
+//line views/nav.qtpl:33
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) {
-//line views/nav.qtpl:34
+//line views/nav.qtpl:35
qw422016.N().S(`
+`)
+//line views/nav.qtpl:36
+ if cfg.UseSiblingHyphaeSidebar {
+//line views/nav.qtpl:36
+ qw422016.N().S(`
`)
-//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
-func StreamSubhyphaeHTML(qw422016 *qt422016.Writer, subhyphae string, lc *l18n.Localizer) {
+ }
//line views/nav.qtpl:41
qw422016.N().S(`
`)
//line views/nav.qtpl:42
- if strings.TrimSpace(subhyphae) != "" {
+}
+
//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(`
`)
-//line views/nav.qtpl:44
+//line views/nav.qtpl:47
qw422016.E().S(lc.Get("ui.subhyphae"))
-//line views/nav.qtpl:44
+//line views/nav.qtpl:47
qw422016.N().S(`
`)
-//line views/nav.qtpl:51
+//line views/nav.qtpl:54
}
-//line views/nav.qtpl:51
+//line views/nav.qtpl:54
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) {
-//line views/nav.qtpl:52
+//line views/nav.qtpl:55
qw422016 := qt422016.AcquireWriter(qq422016)
-//line views/nav.qtpl:52
+//line views/nav.qtpl:55
StreamSubhyphaeHTML(qw422016, subhyphae, lc)
-//line views/nav.qtpl:52
+//line views/nav.qtpl:55
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 {
-//line views/nav.qtpl:52
+//line views/nav.qtpl:55
qb422016 := qt422016.AcquireByteBuffer()
-//line views/nav.qtpl:52
+//line views/nav.qtpl:55
WriteSubhyphaeHTML(qb422016, subhyphae, lc)
-//line views/nav.qtpl:52
+//line views/nav.qtpl:55
qs422016 := string(qb422016.B)
-//line views/nav.qtpl:52
+//line views/nav.qtpl:55
qt422016.ReleaseByteBuffer(qb422016)
-//line views/nav.qtpl:52
+//line views/nav.qtpl:55
return qs422016
-//line views/nav.qtpl:52
+//line views/nav.qtpl:55
}