diff --git a/hypview/hypview.go b/hypview/hypview.go new file mode 100644 index 0000000..54bc232 --- /dev/null +++ b/hypview/hypview.go @@ -0,0 +1,62 @@ +package hypview + +import ( + "embed" + "fmt" + "github.com/bouncepaw/mycorrhiza/cfg" + "github.com/bouncepaw/mycorrhiza/viewutil" + "log" + "strings" + "text/template" +) + +var ( + //go:embed *.html + fs embed.FS + ruTranslation = `` + chainNaviTitle viewutil.Chain +) + +func Init() { + chainNaviTitle = viewutil. + En(viewutil.CopyEnWith(fs, "view_navititle.html")). + Ru(template.Must(viewutil.CopyRuWith(fs, "view_navititle.html").Parse(ruTranslation))) +} + +type naviTitleData struct { + HyphaNameParts []string + HyphaNamePartsWithParents []string + Icon string + HomeHypha string +} + +func NaviTitle(meta viewutil.Meta, hyphaName string) string { + parts, partsWithParents := naviTitleify(hyphaName) + var buf strings.Builder + err := chainNaviTitle.Get(meta).ExecuteTemplate(&buf, "navititle", naviTitleData{ + HyphaNameParts: parts, + HyphaNamePartsWithParents: partsWithParents, + Icon: cfg.NaviTitleIcon, + HomeHypha: cfg.HomeHypha, + }) + if err != nil { + log.Println(err) + } + return buf.String() +} + +func naviTitleify(hyphaName string) ([]string, []string) { + var ( + prevAcc = "/hypha" + parts = strings.Split(hyphaName, "/") + partsWithParents []string + ) + + for _, part := range parts { + prevAcc += "/" + part + partsWithParents = append(partsWithParents, prevAcc) + } + + fmt.Printf("%q — %q\n", parts, partsWithParents) + return parts, partsWithParents +} diff --git a/hypview/view_navititle.html b/hypview/view_navititle.html new file mode 100644 index 0000000..98f6013 --- /dev/null +++ b/hypview/view_navititle.html @@ -0,0 +1,17 @@ +{{define "navititle"}} +

+ {{- $withParents := .HyphaNamePartsWithParents -}} + {{- $parts := .HyphaNameParts -}} + + {{- .Icon -}} + + {{- range $i, $part := .HyphaNameParts -}} + {{- if gt $i 0 -}} + + {{- end -}} + + {{- beautifulName $part -}} + + {{- end}} +

+{{end}} \ No newline at end of file diff --git a/views/hypha.qtpl b/views/hypha.qtpl index 924cff3..cdf07df 100644 --- a/views/hypha.qtpl +++ b/views/hypha.qtpl @@ -1,5 +1,4 @@ {% import "path/filepath" %} -{% import "strings" %} {% import "github.com/bouncepaw/mycorrhiza/cfg" %} {% import "github.com/bouncepaw/mycorrhiza/hyphae" %} @@ -47,34 +46,6 @@ {% endfunc %} -{% func NaviTitle(h hyphae.Hypha) %} -{% code - var ( - prevAcc = "/hypha/" - parts = strings.Split(h.CanonicalName(), "/") - ) -%} -

-{% stripspace %} - - {%-s= cfg.NaviTitleIcon -%} - - - - {% for i, part := range parts %} - {% if i > 0 %} - - {% endif %} - - - {%s= util.BeautifulName(part) %} - - {% code prevAcc += part + "/" %} - {% endfor %} -{% endstripspace %} -

-{% endfunc %} - {% func MediaRaw(h *hyphae.MediaHypha) %}{%= Media(h, l18n.New("en", "en")) %}{% endfunc %} {% func Media(h *hyphae.MediaHypha, lc *l18n.Localizer) %} diff --git a/views/hypha.qtpl.go b/views/hypha.qtpl.go index b5882d8..f36fe0d 100644 --- a/views/hypha.qtpl.go +++ b/views/hypha.qtpl.go @@ -7,204 +7,201 @@ package views //line views/hypha.qtpl:1 import "path/filepath" -//line views/hypha.qtpl:2 -import "strings" - -//line views/hypha.qtpl:4 +//line views/hypha.qtpl:3 import "github.com/bouncepaw/mycorrhiza/cfg" -//line views/hypha.qtpl:5 +//line views/hypha.qtpl:4 import "github.com/bouncepaw/mycorrhiza/hyphae" -//line views/hypha.qtpl:6 +//line views/hypha.qtpl:5 import "github.com/bouncepaw/mycorrhiza/l18n" -//line views/hypha.qtpl:7 +//line views/hypha.qtpl:6 import "github.com/bouncepaw/mycorrhiza/user" -//line views/hypha.qtpl:8 +//line views/hypha.qtpl:7 import "github.com/bouncepaw/mycorrhiza/util" -//line views/hypha.qtpl:10 +//line views/hypha.qtpl:9 import ( qtio422016 "io" qt422016 "github.com/valyala/quicktemplate" ) -//line views/hypha.qtpl:10 +//line views/hypha.qtpl:9 var ( _ = qtio422016.Copy _ = qt422016.AcquireByteBuffer ) -//line views/hypha.qtpl:10 +//line views/hypha.qtpl:9 func streambeautifulLink(qw422016 *qt422016.Writer, hyphaName string) { -//line views/hypha.qtpl:10 +//line views/hypha.qtpl:9 qw422016.N().S(``) -//line views/hypha.qtpl:10 +//line views/hypha.qtpl:9 qw422016.E().S(util.BeautifulName(hyphaName)) -//line views/hypha.qtpl:10 +//line views/hypha.qtpl:9 qw422016.N().S(``) -//line views/hypha.qtpl:10 +//line views/hypha.qtpl:9 } -//line views/hypha.qtpl:10 +//line views/hypha.qtpl:9 func writebeautifulLink(qq422016 qtio422016.Writer, hyphaName string) { -//line views/hypha.qtpl:10 +//line views/hypha.qtpl:9 qw422016 := qt422016.AcquireWriter(qq422016) -//line views/hypha.qtpl:10 +//line views/hypha.qtpl:9 streambeautifulLink(qw422016, hyphaName) -//line views/hypha.qtpl:10 +//line views/hypha.qtpl:9 qt422016.ReleaseWriter(qw422016) -//line views/hypha.qtpl:10 +//line views/hypha.qtpl:9 } -//line views/hypha.qtpl:10 +//line views/hypha.qtpl:9 func beautifulLink(hyphaName string) string { -//line views/hypha.qtpl:10 +//line views/hypha.qtpl:9 qb422016 := qt422016.AcquireByteBuffer() -//line views/hypha.qtpl:10 +//line views/hypha.qtpl:9 writebeautifulLink(qb422016, hyphaName) -//line views/hypha.qtpl:10 +//line views/hypha.qtpl:9 qs422016 := string(qb422016.B) -//line views/hypha.qtpl:10 +//line views/hypha.qtpl:9 qt422016.ReleaseByteBuffer(qb422016) -//line views/hypha.qtpl:10 +//line views/hypha.qtpl:9 return qs422016 -//line views/hypha.qtpl:10 +//line views/hypha.qtpl:9 } -//line views/hypha.qtpl:12 +//line views/hypha.qtpl:11 func streammycoLink(qw422016 *qt422016.Writer, lc *l18n.Localizer) { -//line views/hypha.qtpl:12 +//line views/hypha.qtpl:11 qw422016.N().S(``) -//line views/hypha.qtpl:12 +//line views/hypha.qtpl:11 qw422016.E().S(lc.Get("ui.notexist_write_myco")) -//line views/hypha.qtpl:12 +//line views/hypha.qtpl:11 qw422016.N().S(``) -//line views/hypha.qtpl:12 +//line views/hypha.qtpl:11 } -//line views/hypha.qtpl:12 +//line views/hypha.qtpl:11 func writemycoLink(qq422016 qtio422016.Writer, lc *l18n.Localizer) { -//line views/hypha.qtpl:12 +//line views/hypha.qtpl:11 qw422016 := qt422016.AcquireWriter(qq422016) -//line views/hypha.qtpl:12 +//line views/hypha.qtpl:11 streammycoLink(qw422016, lc) -//line views/hypha.qtpl:12 +//line views/hypha.qtpl:11 qt422016.ReleaseWriter(qw422016) -//line views/hypha.qtpl:12 +//line views/hypha.qtpl:11 } -//line views/hypha.qtpl:12 +//line views/hypha.qtpl:11 func mycoLink(lc *l18n.Localizer) string { -//line views/hypha.qtpl:12 +//line views/hypha.qtpl:11 qb422016 := qt422016.AcquireByteBuffer() -//line views/hypha.qtpl:12 +//line views/hypha.qtpl:11 writemycoLink(qb422016, lc) -//line views/hypha.qtpl:12 +//line views/hypha.qtpl:11 qs422016 := string(qb422016.B) -//line views/hypha.qtpl:12 +//line views/hypha.qtpl:11 qt422016.ReleaseByteBuffer(qb422016) -//line views/hypha.qtpl:12 +//line views/hypha.qtpl:11 return qs422016 -//line views/hypha.qtpl:12 +//line views/hypha.qtpl:11 } -//line views/hypha.qtpl:14 +//line views/hypha.qtpl:13 func streamnonExistentHyphaNotice(qw422016 *qt422016.Writer, h hyphae.Hypha, u *user.User, lc *l18n.Localizer) { -//line views/hypha.qtpl:14 +//line views/hypha.qtpl:13 qw422016.N().S(`

`) -//line views/hypha.qtpl:16 +//line views/hypha.qtpl:15 qw422016.E().S(lc.Get("ui.notexist_heading")) -//line views/hypha.qtpl:16 +//line views/hypha.qtpl:15 qw422016.N().S(`

`) -//line views/hypha.qtpl:17 +//line views/hypha.qtpl:16 if cfg.UseAuth && u.Group == "anon" { -//line views/hypha.qtpl:17 +//line views/hypha.qtpl:16 qw422016.N().S(`

`) -//line views/hypha.qtpl:18 +//line views/hypha.qtpl:17 qw422016.E().S(lc.Get("ui.notexist_norights")) -//line views/hypha.qtpl:18 +//line views/hypha.qtpl:17 qw422016.N().S(`

`) -//line views/hypha.qtpl:23 +//line views/hypha.qtpl:22 } else { -//line views/hypha.qtpl:23 +//line views/hypha.qtpl:22 qw422016.N().S(`

📝 `) -//line views/hypha.qtpl:27 +//line views/hypha.qtpl:26 qw422016.E().S(lc.Get("ui.notexist_write")) -//line views/hypha.qtpl:27 +//line views/hypha.qtpl:26 qw422016.N().S(`

`) -//line views/hypha.qtpl:28 +//line views/hypha.qtpl:27 qw422016.N().S(lc.Get("ui.notexist_write_tip1", &l18n.Replacements{"myco": mycoLink(lc)})) -//line views/hypha.qtpl:28 +//line views/hypha.qtpl:27 qw422016.N().S(`

`) -//line views/hypha.qtpl:29 +//line views/hypha.qtpl:28 qw422016.E().S(lc.Get("ui.notexist_write_tip2")) -//line views/hypha.qtpl:29 +//line views/hypha.qtpl:28 qw422016.N().S(`

`) -//line views/hypha.qtpl:30 +//line views/hypha.qtpl:29 qw422016.E().S(lc.Get("ui.notexist_write_button")) -//line views/hypha.qtpl:30 +//line views/hypha.qtpl:29 qw422016.N().S(`

🖼 `) -//line views/hypha.qtpl:34 +//line views/hypha.qtpl:33 qw422016.E().S(lc.Get("ui.notexist_media")) -//line views/hypha.qtpl:34 +//line views/hypha.qtpl:33 qw422016.N().S(`

`) -//line views/hypha.qtpl:35 +//line views/hypha.qtpl:34 qw422016.E().S(lc.Get("ui.notexist_media_tip1")) -//line views/hypha.qtpl:35 +//line views/hypha.qtpl:34 qw422016.N().S(`

@@ -212,301 +209,208 @@ func streamnonExistentHyphaNotice(qw422016 *qt422016.Writer, h hyphae.Hypha, u *
`) -//line views/hypha.qtpl:46 +//line views/hypha.qtpl:45 } -//line views/hypha.qtpl:46 +//line views/hypha.qtpl:45 qw422016.N().S(`
`) -//line views/hypha.qtpl:48 +//line views/hypha.qtpl:47 } -//line views/hypha.qtpl:48 +//line views/hypha.qtpl:47 func writenonExistentHyphaNotice(qq422016 qtio422016.Writer, h hyphae.Hypha, u *user.User, lc *l18n.Localizer) { -//line views/hypha.qtpl:48 +//line views/hypha.qtpl:47 qw422016 := qt422016.AcquireWriter(qq422016) -//line views/hypha.qtpl:48 +//line views/hypha.qtpl:47 streamnonExistentHyphaNotice(qw422016, h, u, lc) -//line views/hypha.qtpl:48 +//line views/hypha.qtpl:47 qt422016.ReleaseWriter(qw422016) -//line views/hypha.qtpl:48 +//line views/hypha.qtpl:47 } -//line views/hypha.qtpl:48 +//line views/hypha.qtpl:47 func nonExistentHyphaNotice(h hyphae.Hypha, u *user.User, lc *l18n.Localizer) string { -//line views/hypha.qtpl:48 +//line views/hypha.qtpl:47 qb422016 := qt422016.AcquireByteBuffer() -//line views/hypha.qtpl:48 +//line views/hypha.qtpl:47 writenonExistentHyphaNotice(qb422016, h, u, lc) -//line views/hypha.qtpl:48 +//line views/hypha.qtpl:47 qs422016 := string(qb422016.B) -//line views/hypha.qtpl:48 +//line views/hypha.qtpl:47 qt422016.ReleaseByteBuffer(qb422016) -//line views/hypha.qtpl:48 +//line views/hypha.qtpl:47 return qs422016 -//line views/hypha.qtpl:48 +//line views/hypha.qtpl:47 } -//line views/hypha.qtpl:50 -func StreamNaviTitle(qw422016 *qt422016.Writer, h hyphae.Hypha) { -//line views/hypha.qtpl:50 - qw422016.N().S(` -`) -//line views/hypha.qtpl:52 - var ( - prevAcc = "/hypha/" - parts = strings.Split(h.CanonicalName(), "/") - ) - -//line views/hypha.qtpl:56 - qw422016.N().S(` -

-`) -//line views/hypha.qtpl:58 - qw422016.N().S(``) -//line views/hypha.qtpl:60 - qw422016.N().S(cfg.NaviTitleIcon) -//line views/hypha.qtpl:60 - qw422016.N().S(``) -//line views/hypha.qtpl:64 - for i, part := range parts { -//line views/hypha.qtpl:65 - if i > 0 { -//line views/hypha.qtpl:65 - qw422016.N().S(``) -//line views/hypha.qtpl:67 - } -//line views/hypha.qtpl:67 - qw422016.N().S(``) -//line views/hypha.qtpl:70 - qw422016.N().S(util.BeautifulName(part)) -//line views/hypha.qtpl:70 - qw422016.N().S(``) -//line views/hypha.qtpl:72 - prevAcc += part + "/" - -//line views/hypha.qtpl:73 - } -//line views/hypha.qtpl:74 - qw422016.N().S(` -

-`) -//line views/hypha.qtpl:76 -} - -//line views/hypha.qtpl:76 -func WriteNaviTitle(qq422016 qtio422016.Writer, h hyphae.Hypha) { -//line views/hypha.qtpl:76 - qw422016 := qt422016.AcquireWriter(qq422016) -//line views/hypha.qtpl:76 - StreamNaviTitle(qw422016, h) -//line views/hypha.qtpl:76 - qt422016.ReleaseWriter(qw422016) -//line views/hypha.qtpl:76 -} - -//line views/hypha.qtpl:76 -func NaviTitle(h hyphae.Hypha) string { -//line views/hypha.qtpl:76 - qb422016 := qt422016.AcquireByteBuffer() -//line views/hypha.qtpl:76 - WriteNaviTitle(qb422016, h) -//line views/hypha.qtpl:76 - qs422016 := string(qb422016.B) -//line views/hypha.qtpl:76 - qt422016.ReleaseByteBuffer(qb422016) -//line views/hypha.qtpl:76 - return qs422016 -//line views/hypha.qtpl:76 -} - -//line views/hypha.qtpl:78 +//line views/hypha.qtpl:49 func StreamMediaRaw(qw422016 *qt422016.Writer, h *hyphae.MediaHypha) { -//line views/hypha.qtpl:78 +//line views/hypha.qtpl:49 StreamMedia(qw422016, h, l18n.New("en", "en")) -//line views/hypha.qtpl:78 +//line views/hypha.qtpl:49 } -//line views/hypha.qtpl:78 +//line views/hypha.qtpl:49 func WriteMediaRaw(qq422016 qtio422016.Writer, h *hyphae.MediaHypha) { -//line views/hypha.qtpl:78 +//line views/hypha.qtpl:49 qw422016 := qt422016.AcquireWriter(qq422016) -//line views/hypha.qtpl:78 +//line views/hypha.qtpl:49 StreamMediaRaw(qw422016, h) -//line views/hypha.qtpl:78 +//line views/hypha.qtpl:49 qt422016.ReleaseWriter(qw422016) -//line views/hypha.qtpl:78 +//line views/hypha.qtpl:49 } -//line views/hypha.qtpl:78 +//line views/hypha.qtpl:49 func MediaRaw(h *hyphae.MediaHypha) string { -//line views/hypha.qtpl:78 +//line views/hypha.qtpl:49 qb422016 := qt422016.AcquireByteBuffer() -//line views/hypha.qtpl:78 +//line views/hypha.qtpl:49 WriteMediaRaw(qb422016, h) -//line views/hypha.qtpl:78 +//line views/hypha.qtpl:49 qs422016 := string(qb422016.B) -//line views/hypha.qtpl:78 +//line views/hypha.qtpl:49 qt422016.ReleaseByteBuffer(qb422016) -//line views/hypha.qtpl:78 +//line views/hypha.qtpl:49 return qs422016 -//line views/hypha.qtpl:78 +//line views/hypha.qtpl:49 } -//line views/hypha.qtpl:80 +//line views/hypha.qtpl:51 func StreamMedia(qw422016 *qt422016.Writer, h *hyphae.MediaHypha, lc *l18n.Localizer) { -//line views/hypha.qtpl:80 +//line views/hypha.qtpl:51 qw422016.N().S(` `) -//line views/hypha.qtpl:81 +//line views/hypha.qtpl:52 switch filepath.Ext(h.MediaFilePath()) { -//line views/hypha.qtpl:83 +//line views/hypha.qtpl:54 case ".jpg", ".gif", ".png", ".webp", ".svg", ".ico": -//line views/hypha.qtpl:83 +//line views/hypha.qtpl:54 qw422016.N().S(`
`) -//line views/hypha.qtpl:88 +//line views/hypha.qtpl:59 case ".ogg", ".webm", ".mp4": -//line views/hypha.qtpl:88 +//line views/hypha.qtpl:59 qw422016.N().S(`
`) -//line views/hypha.qtpl:96 +//line views/hypha.qtpl:67 case ".mp3": -//line views/hypha.qtpl:96 +//line views/hypha.qtpl:67 qw422016.N().S(`
`) -//line views/hypha.qtpl:104 +//line views/hypha.qtpl:75 default: -//line views/hypha.qtpl:104 +//line views/hypha.qtpl:75 qw422016.N().S(`

`) -//line views/hypha.qtpl:106 +//line views/hypha.qtpl:77 qw422016.E().S(lc.Get("ui.media_download")) -//line views/hypha.qtpl:106 +//line views/hypha.qtpl:77 qw422016.N().S(`

`) -//line views/hypha.qtpl:108 +//line views/hypha.qtpl:79 } -//line views/hypha.qtpl:108 +//line views/hypha.qtpl:79 qw422016.N().S(` `) -//line views/hypha.qtpl:109 +//line views/hypha.qtpl:80 } -//line views/hypha.qtpl:109 +//line views/hypha.qtpl:80 func WriteMedia(qq422016 qtio422016.Writer, h *hyphae.MediaHypha, lc *l18n.Localizer) { -//line views/hypha.qtpl:109 +//line views/hypha.qtpl:80 qw422016 := qt422016.AcquireWriter(qq422016) -//line views/hypha.qtpl:109 +//line views/hypha.qtpl:80 StreamMedia(qw422016, h, lc) -//line views/hypha.qtpl:109 +//line views/hypha.qtpl:80 qt422016.ReleaseWriter(qw422016) -//line views/hypha.qtpl:109 +//line views/hypha.qtpl:80 } -//line views/hypha.qtpl:109 +//line views/hypha.qtpl:80 func Media(h *hyphae.MediaHypha, lc *l18n.Localizer) string { -//line views/hypha.qtpl:109 +//line views/hypha.qtpl:80 qb422016 := qt422016.AcquireByteBuffer() -//line views/hypha.qtpl:109 +//line views/hypha.qtpl:80 WriteMedia(qb422016, h, lc) -//line views/hypha.qtpl:109 +//line views/hypha.qtpl:80 qs422016 := string(qb422016.B) -//line views/hypha.qtpl:109 +//line views/hypha.qtpl:80 qt422016.ReleaseByteBuffer(qb422016) -//line views/hypha.qtpl:109 +//line views/hypha.qtpl:80 return qs422016 -//line views/hypha.qtpl:109 +//line views/hypha.qtpl:80 } diff --git a/views/readers.qtpl b/views/readers.qtpl index 952ec7b..3797b72 100644 --- a/views/readers.qtpl +++ b/views/readers.qtpl @@ -5,6 +5,7 @@ {% import "github.com/bouncepaw/mycorrhiza/cfg" %} {% import "github.com/bouncepaw/mycorrhiza/hyphae" %} +{% import "github.com/bouncepaw/mycorrhiza/hypview" %} {% import "github.com/bouncepaw/mycorrhiza/categories" %} {% import "github.com/bouncepaw/mycorrhiza/l18n" %} {% import "github.com/bouncepaw/mycorrhiza/mimetype" %} @@ -109,7 +110,7 @@ If you rename .prevnext, change the docs too. {% endif %} {% endif %} - {%s= NaviTitle(h) %} + {%s= hypview.NaviTitle(meta, h.CanonicalName()) %} {% switch h.(type) %} {% case *hyphae.EmptyHypha %} {%= nonExistentHyphaNotice(h, meta.U, meta.Lc) %} @@ -135,11 +136,11 @@ If you rename .prevnext, change the docs too. {%= viewScripts() %} {% endfunc %} -{% func Revision(rq *http.Request, lc *l18n.Localizer, h hyphae.Hypha, contents, revHash string) %} +{% func Revision(meta viewutil.Meta, h hyphae.Hypha, contents, revHash string) %}
-

{%s lc.Get("ui.revision_warning") %} {%s lc.Get("ui.revision_link") %}

- {%s= NaviTitle(h) %} +

{%s meta.Lc.Get("ui.revision_warning") %} {%s meta.Lc.Get("ui.revision_link") %}

+ {%s= hypview.NaviTitle(meta, h.CanonicalName()) %} {%s= contents %}
diff --git a/views/readers.qtpl.go b/views/readers.qtpl.go index bf5f036..27c2bf3 100644 --- a/views/readers.qtpl.go +++ b/views/readers.qtpl.go @@ -23,613 +23,616 @@ import "github.com/bouncepaw/mycorrhiza/cfg" import "github.com/bouncepaw/mycorrhiza/hyphae" //line views/readers.qtpl:8 -import "github.com/bouncepaw/mycorrhiza/categories" +import "github.com/bouncepaw/mycorrhiza/hypview" //line views/readers.qtpl:9 -import "github.com/bouncepaw/mycorrhiza/l18n" +import "github.com/bouncepaw/mycorrhiza/categories" //line views/readers.qtpl:10 -import "github.com/bouncepaw/mycorrhiza/mimetype" +import "github.com/bouncepaw/mycorrhiza/l18n" //line views/readers.qtpl:11 -import "github.com/bouncepaw/mycorrhiza/tree" +import "github.com/bouncepaw/mycorrhiza/mimetype" //line views/readers.qtpl:12 -import "github.com/bouncepaw/mycorrhiza/user" +import "github.com/bouncepaw/mycorrhiza/tree" //line views/readers.qtpl:13 -import "github.com/bouncepaw/mycorrhiza/util" +import "github.com/bouncepaw/mycorrhiza/user" //line views/readers.qtpl:14 +import "github.com/bouncepaw/mycorrhiza/util" + +//line views/readers.qtpl:15 import "github.com/bouncepaw/mycorrhiza/viewutil" -//line views/readers.qtpl:16 +//line views/readers.qtpl:17 import ( qtio422016 "io" qt422016 "github.com/valyala/quicktemplate" ) -//line views/readers.qtpl:16 +//line views/readers.qtpl:17 var ( _ = qtio422016.Copy _ = qt422016.AcquireByteBuffer ) -//line views/readers.qtpl:16 +//line views/readers.qtpl:17 func StreamMediaMenu(qw422016 *qt422016.Writer, rq *http.Request, h hyphae.Hypha, u *user.User) { -//line views/readers.qtpl:16 +//line views/readers.qtpl:17 qw422016.N().S(` `) -//line views/readers.qtpl:18 +//line views/readers.qtpl:19 lc := l18n.FromRequest(rq) -//line views/readers.qtpl:19 +//line views/readers.qtpl:20 qw422016.N().S(`

`) -//line views/readers.qtpl:21 +//line views/readers.qtpl:22 qw422016.N().S(lc.Get("ui.media_title", &l18n.Replacements{"name": beautifulLink(h.CanonicalName())})) -//line views/readers.qtpl:21 +//line views/readers.qtpl:22 qw422016.N().S(`

`) -//line views/readers.qtpl:22 +//line views/readers.qtpl:23 switch h.(type) { -//line views/readers.qtpl:23 +//line views/readers.qtpl:24 case *hyphae.MediaHypha: -//line views/readers.qtpl:23 +//line views/readers.qtpl:24 qw422016.N().S(`

`) -//line views/readers.qtpl:24 +//line views/readers.qtpl:25 qw422016.E().S(lc.Get("ui.media_tip")) -//line views/readers.qtpl:24 +//line views/readers.qtpl:25 qw422016.N().S(` `) -//line views/readers.qtpl:24 +//line views/readers.qtpl:25 qw422016.E().S(lc.Get("ui.media_what_is")) -//line views/readers.qtpl:24 +//line views/readers.qtpl:25 qw422016.N().S(`

`) -//line views/readers.qtpl:25 +//line views/readers.qtpl:26 default: -//line views/readers.qtpl:25 +//line views/readers.qtpl:26 qw422016.N().S(`

`) -//line views/readers.qtpl:26 +//line views/readers.qtpl:27 qw422016.E().S(lc.Get("ui.media_empty")) -//line views/readers.qtpl:26 +//line views/readers.qtpl:27 qw422016.N().S(` `) -//line views/readers.qtpl:26 +//line views/readers.qtpl:27 qw422016.E().S(lc.Get("ui.media_what_is")) -//line views/readers.qtpl:26 +//line views/readers.qtpl:27 qw422016.N().S(`

`) -//line views/readers.qtpl:27 +//line views/readers.qtpl:28 } -//line views/readers.qtpl:27 +//line views/readers.qtpl:28 qw422016.N().S(`
`) -//line views/readers.qtpl:30 +//line views/readers.qtpl:31 switch h := h.(type) { -//line views/readers.qtpl:31 +//line views/readers.qtpl:32 case *hyphae.MediaHypha: -//line views/readers.qtpl:31 +//line views/readers.qtpl:32 qw422016.N().S(` `) -//line views/readers.qtpl:33 +//line views/readers.qtpl:34 mime := mimetype.FromExtension(path.Ext(h.MediaFilePath())) fileinfo, err := os.Stat(h.MediaFilePath()) -//line views/readers.qtpl:34 +//line views/readers.qtpl:35 qw422016.N().S(` `) -//line views/readers.qtpl:35 +//line views/readers.qtpl:36 if err == nil { -//line views/readers.qtpl:35 +//line views/readers.qtpl:36 qw422016.N().S(`
`) -//line views/readers.qtpl:37 +//line views/readers.qtpl:38 qw422016.E().S(lc.Get("ui.media_stat")) -//line views/readers.qtpl:37 +//line views/readers.qtpl:38 qw422016.N().S(`

`) -//line views/readers.qtpl:39 +//line views/readers.qtpl:40 qw422016.E().S(lc.Get("ui.media_stat_mime")) -//line views/readers.qtpl:39 +//line views/readers.qtpl:40 qw422016.N().S(` `) -//line views/readers.qtpl:39 +//line views/readers.qtpl:40 qw422016.E().S(mime) -//line views/readers.qtpl:39 +//line views/readers.qtpl:40 qw422016.N().S(`

`) -//line views/readers.qtpl:41 +//line views/readers.qtpl:42 } -//line views/readers.qtpl:41 +//line views/readers.qtpl:42 qw422016.N().S(` `) -//line views/readers.qtpl:43 +//line views/readers.qtpl:44 if strings.HasPrefix(mime, "image/") { -//line views/readers.qtpl:43 +//line views/readers.qtpl:44 qw422016.N().S(`
`) -//line views/readers.qtpl:45 +//line views/readers.qtpl:46 qw422016.E().S(lc.Get("ui.media_include")) -//line views/readers.qtpl:45 +//line views/readers.qtpl:46 qw422016.N().S(`
img { `)
-//line views/readers.qtpl:47
+//line views/readers.qtpl:48
 			qw422016.E().S(h.CanonicalName())
-//line views/readers.qtpl:47
+//line views/readers.qtpl:48
 			qw422016.N().S(` }
`) -//line views/readers.qtpl:49 +//line views/readers.qtpl:50 } -//line views/readers.qtpl:49 +//line views/readers.qtpl:50 qw422016.N().S(` `) -//line views/readers.qtpl:50 +//line views/readers.qtpl:51 } -//line views/readers.qtpl:50 +//line views/readers.qtpl:51 qw422016.N().S(` `) -//line views/readers.qtpl:52 +//line views/readers.qtpl:53 if u.CanProceed("upload-binary") { -//line views/readers.qtpl:52 +//line views/readers.qtpl:53 qw422016.N().S(` `) -//line views/readers.qtpl:65 +//line views/readers.qtpl:66 } -//line views/readers.qtpl:65 +//line views/readers.qtpl:66 qw422016.N().S(` `) -//line views/readers.qtpl:68 +//line views/readers.qtpl:69 switch h := h.(type) { -//line views/readers.qtpl:69 +//line views/readers.qtpl:70 case *hyphae.MediaHypha: -//line views/readers.qtpl:69 +//line views/readers.qtpl:70 qw422016.N().S(` `) -//line views/readers.qtpl:70 +//line views/readers.qtpl:71 if u.CanProceed("remove-media") { -//line views/readers.qtpl:70 +//line views/readers.qtpl:71 qw422016.N().S(` `) -//line views/readers.qtpl:78 +//line views/readers.qtpl:79 } -//line views/readers.qtpl:78 +//line views/readers.qtpl:79 qw422016.N().S(` `) -//line views/readers.qtpl:79 +//line views/readers.qtpl:80 } -//line views/readers.qtpl:79 +//line views/readers.qtpl:80 qw422016.N().S(`
`) -//line views/readers.qtpl:83 +//line views/readers.qtpl:84 } -//line views/readers.qtpl:83 +//line views/readers.qtpl:84 func WriteMediaMenu(qq422016 qtio422016.Writer, rq *http.Request, h hyphae.Hypha, u *user.User) { -//line views/readers.qtpl:83 +//line views/readers.qtpl:84 qw422016 := qt422016.AcquireWriter(qq422016) -//line views/readers.qtpl:83 +//line views/readers.qtpl:84 StreamMediaMenu(qw422016, rq, h, u) -//line views/readers.qtpl:83 +//line views/readers.qtpl:84 qt422016.ReleaseWriter(qw422016) -//line views/readers.qtpl:83 +//line views/readers.qtpl:84 } -//line views/readers.qtpl:83 +//line views/readers.qtpl:84 func MediaMenu(rq *http.Request, h hyphae.Hypha, u *user.User) string { -//line views/readers.qtpl:83 +//line views/readers.qtpl:84 qb422016 := qt422016.AcquireByteBuffer() -//line views/readers.qtpl:83 +//line views/readers.qtpl:84 WriteMediaMenu(qb422016, rq, h, u) -//line views/readers.qtpl:83 +//line views/readers.qtpl:84 qs422016 := string(qb422016.B) -//line views/readers.qtpl:83 +//line views/readers.qtpl:84 qt422016.ReleaseByteBuffer(qb422016) -//line views/readers.qtpl:83 +//line views/readers.qtpl:84 return qs422016 -//line views/readers.qtpl:83 +//line views/readers.qtpl:84 } // If `contents` == "", a helpful message is shown instead. // // If you rename .prevnext, change the docs too. -//line views/readers.qtpl:88 +//line views/readers.qtpl:89 func StreamHypha(qw422016 *qt422016.Writer, meta viewutil.Meta, h hyphae.Hypha, contents string) { -//line views/readers.qtpl:88 +//line views/readers.qtpl:89 qw422016.N().S(` `) -//line views/readers.qtpl:90 +//line views/readers.qtpl:91 siblings, subhyphae, prevHyphaName, nextHyphaName := tree.Tree(h.CanonicalName()) lc := meta.Lc -//line views/readers.qtpl:92 +//line views/readers.qtpl:93 qw422016.N().S(`
`) -//line views/readers.qtpl:95 +//line views/readers.qtpl:96 if meta.U.CanProceed("edit") { -//line views/readers.qtpl:95 +//line views/readers.qtpl:96 qw422016.N().S(` `) -//line views/readers.qtpl:99 +//line views/readers.qtpl:100 } -//line views/readers.qtpl:99 +//line views/readers.qtpl:100 qw422016.N().S(` `) -//line views/readers.qtpl:101 +//line views/readers.qtpl:102 if cfg.UseAuth && util.IsProfileName(h.CanonicalName()) && meta.U.Name == strings.TrimPrefix(h.CanonicalName(), cfg.UserHypha+"/") { -//line views/readers.qtpl:101 +//line views/readers.qtpl:102 qw422016.N().S(` `) -//line views/readers.qtpl:105 +//line views/readers.qtpl:106 if meta.U.Group == "admin" { -//line views/readers.qtpl:105 +//line views/readers.qtpl:106 qw422016.N().S(` `) -//line views/readers.qtpl:109 +//line views/readers.qtpl:110 } -//line views/readers.qtpl:109 +//line views/readers.qtpl:110 qw422016.N().S(` `) -//line views/readers.qtpl:110 +//line views/readers.qtpl:111 } -//line views/readers.qtpl:110 +//line views/readers.qtpl:111 qw422016.N().S(` `) -//line views/readers.qtpl:112 - qw422016.N().S(NaviTitle(h)) -//line views/readers.qtpl:112 +//line views/readers.qtpl:113 + qw422016.N().S(hypview.NaviTitle(meta, h.CanonicalName())) +//line views/readers.qtpl:113 qw422016.N().S(` `) -//line views/readers.qtpl:113 +//line views/readers.qtpl:114 switch h.(type) { -//line views/readers.qtpl:114 +//line views/readers.qtpl:115 case *hyphae.EmptyHypha: -//line views/readers.qtpl:114 +//line views/readers.qtpl:115 qw422016.N().S(` `) -//line views/readers.qtpl:115 +//line views/readers.qtpl:116 streamnonExistentHyphaNotice(qw422016, h, meta.U, meta.Lc) -//line views/readers.qtpl:115 +//line views/readers.qtpl:116 qw422016.N().S(` `) -//line views/readers.qtpl:116 +//line views/readers.qtpl:117 default: -//line views/readers.qtpl:116 +//line views/readers.qtpl:117 qw422016.N().S(` `) -//line views/readers.qtpl:117 +//line views/readers.qtpl:118 qw422016.N().S(contents) -//line views/readers.qtpl:117 +//line views/readers.qtpl:118 qw422016.N().S(` `) -//line views/readers.qtpl:118 +//line views/readers.qtpl:119 } -//line views/readers.qtpl:118 +//line views/readers.qtpl:119 qw422016.N().S(`
`) -//line views/readers.qtpl:121 +//line views/readers.qtpl:122 if prevHyphaName != "" { -//line views/readers.qtpl:121 +//line views/readers.qtpl:122 qw422016.N().S(` `) -//line views/readers.qtpl:123 +//line views/readers.qtpl:124 } -//line views/readers.qtpl:123 +//line views/readers.qtpl:124 qw422016.N().S(` `) -//line views/readers.qtpl:124 +//line views/readers.qtpl:125 if nextHyphaName != "" { -//line views/readers.qtpl:124 +//line views/readers.qtpl:125 qw422016.N().S(` `) -//line views/readers.qtpl:126 +//line views/readers.qtpl:127 } -//line views/readers.qtpl:126 +//line views/readers.qtpl:127 qw422016.N().S(`
`) -//line views/readers.qtpl:128 +//line views/readers.qtpl:129 StreamSubhyphae(qw422016, subhyphae, meta.Lc) -//line views/readers.qtpl:128 +//line views/readers.qtpl:129 qw422016.N().S(`
`) -//line views/readers.qtpl:130 +//line views/readers.qtpl:131 streamhyphaInfo(qw422016, meta, h) -//line views/readers.qtpl:130 +//line views/readers.qtpl:131 qw422016.N().S(`
`) -//line views/readers.qtpl:133 +//line views/readers.qtpl:134 qw422016.N().S(categories.CategoryCard(meta, h.CanonicalName())) -//line views/readers.qtpl:133 +//line views/readers.qtpl:134 qw422016.N().S(` `) -//line views/readers.qtpl:134 +//line views/readers.qtpl:135 streamsiblingHyphae(qw422016, siblings, meta.Lc) -//line views/readers.qtpl:134 +//line views/readers.qtpl:135 qw422016.N().S(` `) -//line views/readers.qtpl:135 +//line views/readers.qtpl:136 streamviewScripts(qw422016) -//line views/readers.qtpl:135 +//line views/readers.qtpl:136 qw422016.N().S(` `) -//line views/readers.qtpl:136 +//line views/readers.qtpl:137 } -//line views/readers.qtpl:136 +//line views/readers.qtpl:137 func WriteHypha(qq422016 qtio422016.Writer, meta viewutil.Meta, h hyphae.Hypha, contents string) { -//line views/readers.qtpl:136 +//line views/readers.qtpl:137 qw422016 := qt422016.AcquireWriter(qq422016) -//line views/readers.qtpl:136 +//line views/readers.qtpl:137 StreamHypha(qw422016, meta, h, contents) -//line views/readers.qtpl:136 +//line views/readers.qtpl:137 qt422016.ReleaseWriter(qw422016) -//line views/readers.qtpl:136 +//line views/readers.qtpl:137 } -//line views/readers.qtpl:136 +//line views/readers.qtpl:137 func Hypha(meta viewutil.Meta, h hyphae.Hypha, contents string) string { -//line views/readers.qtpl:136 +//line views/readers.qtpl:137 qb422016 := qt422016.AcquireByteBuffer() -//line views/readers.qtpl:136 +//line views/readers.qtpl:137 WriteHypha(qb422016, meta, h, contents) -//line views/readers.qtpl:136 +//line views/readers.qtpl:137 qs422016 := string(qb422016.B) -//line views/readers.qtpl:136 +//line views/readers.qtpl:137 qt422016.ReleaseByteBuffer(qb422016) -//line views/readers.qtpl:136 +//line views/readers.qtpl:137 return qs422016 -//line views/readers.qtpl:136 +//line views/readers.qtpl:137 } -//line views/readers.qtpl:138 -func StreamRevision(qw422016 *qt422016.Writer, rq *http.Request, lc *l18n.Localizer, h hyphae.Hypha, contents, revHash string) { -//line views/readers.qtpl:138 +//line views/readers.qtpl:139 +func StreamRevision(qw422016 *qt422016.Writer, meta viewutil.Meta, h hyphae.Hypha, contents, revHash string) { +//line views/readers.qtpl:139 qw422016.N().S(`

`) -//line views/readers.qtpl:141 - qw422016.E().S(lc.Get("ui.revision_warning")) -//line views/readers.qtpl:141 +//line views/readers.qtpl:142 + qw422016.E().S(meta.Lc.Get("ui.revision_warning")) +//line views/readers.qtpl:142 qw422016.N().S(` `) -//line views/readers.qtpl:141 - qw422016.E().S(lc.Get("ui.revision_link")) -//line views/readers.qtpl:141 +//line views/readers.qtpl:142 + qw422016.E().S(meta.Lc.Get("ui.revision_link")) +//line views/readers.qtpl:142 qw422016.N().S(`

`) -//line views/readers.qtpl:142 - qw422016.N().S(NaviTitle(h)) -//line views/readers.qtpl:142 +//line views/readers.qtpl:143 + qw422016.N().S(hypview.NaviTitle(meta, h.CanonicalName())) +//line views/readers.qtpl:143 qw422016.N().S(` `) -//line views/readers.qtpl:143 +//line views/readers.qtpl:144 qw422016.N().S(contents) -//line views/readers.qtpl:143 +//line views/readers.qtpl:144 qw422016.N().S(`
`) -//line views/readers.qtpl:146 +//line views/readers.qtpl:147 streamviewScripts(qw422016) -//line views/readers.qtpl:146 +//line views/readers.qtpl:147 qw422016.N().S(` `) -//line views/readers.qtpl:147 +//line views/readers.qtpl:148 } -//line views/readers.qtpl:147 -func WriteRevision(qq422016 qtio422016.Writer, rq *http.Request, lc *l18n.Localizer, h hyphae.Hypha, contents, revHash string) { -//line views/readers.qtpl:147 +//line views/readers.qtpl:148 +func WriteRevision(qq422016 qtio422016.Writer, meta viewutil.Meta, h hyphae.Hypha, contents, revHash string) { +//line views/readers.qtpl:148 qw422016 := qt422016.AcquireWriter(qq422016) -//line views/readers.qtpl:147 - StreamRevision(qw422016, rq, lc, h, contents, revHash) -//line views/readers.qtpl:147 +//line views/readers.qtpl:148 + StreamRevision(qw422016, meta, h, contents, revHash) +//line views/readers.qtpl:148 qt422016.ReleaseWriter(qw422016) -//line views/readers.qtpl:147 +//line views/readers.qtpl:148 } -//line views/readers.qtpl:147 -func Revision(rq *http.Request, lc *l18n.Localizer, h hyphae.Hypha, contents, revHash string) string { -//line views/readers.qtpl:147 +//line views/readers.qtpl:148 +func Revision(meta viewutil.Meta, h hyphae.Hypha, contents, revHash string) string { +//line views/readers.qtpl:148 qb422016 := qt422016.AcquireByteBuffer() -//line views/readers.qtpl:147 - WriteRevision(qb422016, rq, lc, h, contents, revHash) -//line views/readers.qtpl:147 +//line views/readers.qtpl:148 + WriteRevision(qb422016, meta, h, contents, revHash) +//line views/readers.qtpl:148 qs422016 := string(qb422016.B) -//line views/readers.qtpl:147 +//line views/readers.qtpl:148 qt422016.ReleaseByteBuffer(qb422016) -//line views/readers.qtpl:147 +//line views/readers.qtpl:148 return qs422016 -//line views/readers.qtpl:147 +//line views/readers.qtpl:148 } -//line views/readers.qtpl:149 +//line views/readers.qtpl:150 func streamviewScripts(qw422016 *qt422016.Writer) { -//line views/readers.qtpl:149 +//line views/readers.qtpl:150 qw422016.N().S(` `) -//line views/readers.qtpl:150 +//line views/readers.qtpl:151 for _, scriptPath := range cfg.ViewScripts { -//line views/readers.qtpl:150 +//line views/readers.qtpl:151 qw422016.N().S(` `) -//line views/readers.qtpl:152 +//line views/readers.qtpl:153 } -//line views/readers.qtpl:152 +//line views/readers.qtpl:153 qw422016.N().S(` `) -//line views/readers.qtpl:153 +//line views/readers.qtpl:154 } -//line views/readers.qtpl:153 +//line views/readers.qtpl:154 func writeviewScripts(qq422016 qtio422016.Writer) { -//line views/readers.qtpl:153 +//line views/readers.qtpl:154 qw422016 := qt422016.AcquireWriter(qq422016) -//line views/readers.qtpl:153 +//line views/readers.qtpl:154 streamviewScripts(qw422016) -//line views/readers.qtpl:153 +//line views/readers.qtpl:154 qt422016.ReleaseWriter(qw422016) -//line views/readers.qtpl:153 +//line views/readers.qtpl:154 } -//line views/readers.qtpl:153 +//line views/readers.qtpl:154 func viewScripts() string { -//line views/readers.qtpl:153 +//line views/readers.qtpl:154 qb422016 := qt422016.AcquireByteBuffer() -//line views/readers.qtpl:153 +//line views/readers.qtpl:154 writeviewScripts(qb422016) -//line views/readers.qtpl:153 +//line views/readers.qtpl:154 qs422016 := string(qb422016.B) -//line views/readers.qtpl:153 +//line views/readers.qtpl:154 qt422016.ReleaseByteBuffer(qb422016) -//line views/readers.qtpl:153 +//line views/readers.qtpl:154 return qs422016 -//line views/readers.qtpl:153 +//line views/readers.qtpl:154 } diff --git a/viewutil/viewutil.go b/viewutil/viewutil.go index c7018d3..08791ca 100644 --- a/viewutil/viewutil.go +++ b/viewutil/viewutil.go @@ -35,6 +35,7 @@ func Init() { BaseEn = m(m(template.New(""). Funcs(template.FuncMap{ "beautifulName": util.BeautifulName, + "inc": func(i int) int { return i + 1 }, }).ParseFS(fsys, "base.html")). Parse(dataText)) if !cfg.UseAuth { diff --git a/web/readers.go b/web/readers.go index acccb33..577f57b 100644 --- a/web/readers.go +++ b/web/readers.go @@ -145,8 +145,7 @@ func handlerRevision(w http.ResponseWriter, rq *http.Request) { } } page := views.Revision( - rq, - lc, + viewutil.MetaFrom(w, rq), h, contents, revHash, diff --git a/web/web.go b/web/web.go index 2511e6b..9cf16b4 100644 --- a/web/web.go +++ b/web/web.go @@ -5,6 +5,7 @@ import ( "github.com/bouncepaw/mycorrhiza/backlinks" "github.com/bouncepaw/mycorrhiza/categories" "github.com/bouncepaw/mycorrhiza/help" + "github.com/bouncepaw/mycorrhiza/hypview" "github.com/bouncepaw/mycorrhiza/misc" "io" "net/http" @@ -52,6 +53,7 @@ func Handler() http.Handler { backlinks.InitHandlers(wikiRouter) categories.InitHandlers(wikiRouter) misc.InitHandlers(wikiRouter) + hypview.Init() // Admin routes. if cfg.UseAuth {