mirror of
				https://github.com/osmarks/mycorrhiza.git
				synced 2025-11-04 01:23:02 +00:00 
			
		
		
		
	Backlinks: Fix the bug
This commit is contained in:
		@@ -4,9 +4,9 @@ import (
 | 
				
			|||||||
	"github.com/bouncepaw/mycomarkup/v5"
 | 
						"github.com/bouncepaw/mycomarkup/v5"
 | 
				
			||||||
	"github.com/bouncepaw/mycomarkup/v5/links"
 | 
						"github.com/bouncepaw/mycomarkup/v5/links"
 | 
				
			||||||
	"github.com/bouncepaw/mycomarkup/v5/mycocontext"
 | 
						"github.com/bouncepaw/mycomarkup/v5/mycocontext"
 | 
				
			||||||
	"github.com/bouncepaw/mycomarkup/v5/options"
 | 
					 | 
				
			||||||
	"github.com/bouncepaw/mycomarkup/v5/tools"
 | 
						"github.com/bouncepaw/mycomarkup/v5/tools"
 | 
				
			||||||
	"github.com/bouncepaw/mycorrhiza/hyphae"
 | 
						"github.com/bouncepaw/mycorrhiza/hyphae"
 | 
				
			||||||
 | 
						"github.com/bouncepaw/mycorrhiza/mycoopts"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// UpdateBacklinksAfterEdit is a creation/editing hook for backlinks index
 | 
					// UpdateBacklinksAfterEdit is a creation/editing hook for backlinks index
 | 
				
			||||||
@@ -35,7 +35,7 @@ func extractHyphaLinks(h hyphae.Hypha) []string {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// extractHyphaLinksFromContent extracts local hypha links from the provided text.
 | 
					// extractHyphaLinksFromContent extracts local hypha links from the provided text.
 | 
				
			||||||
func extractHyphaLinksFromContent(hyphaName string, contents string) []string {
 | 
					func extractHyphaLinksFromContent(hyphaName string, contents string) []string {
 | 
				
			||||||
	ctx, _ := mycocontext.ContextFromStringInput(contents, options.Options{HyphaName: hyphaName}.FillTheRest())
 | 
						ctx, _ := mycocontext.ContextFromStringInput(contents, mycoopts.MarkupOptions(hyphaName))
 | 
				
			||||||
	linkVisitor, getLinks := tools.LinkVisitor(ctx)
 | 
						linkVisitor, getLinks := tools.LinkVisitor(ctx)
 | 
				
			||||||
	// Ignore the result of BlockTree because we call it for linkVisitor.
 | 
						// Ignore the result of BlockTree because we call it for linkVisitor.
 | 
				
			||||||
	_ = mycomarkup.BlockTree(ctx, linkVisitor)
 | 
						_ = mycomarkup.BlockTree(ctx, linkVisitor)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,7 @@ package help
 | 
				
			|||||||
// stuff.go is used for meta stuff about the wiki or all hyphae at once.
 | 
					// stuff.go is used for meta stuff about the wiki or all hyphae at once.
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"github.com/bouncepaw/mycomarkup/v5"
 | 
						"github.com/bouncepaw/mycomarkup/v5"
 | 
				
			||||||
	"github.com/bouncepaw/mycorrhiza/shroom"
 | 
						"github.com/bouncepaw/mycorrhiza/mycoopts"
 | 
				
			||||||
	"github.com/bouncepaw/mycorrhiza/viewutil"
 | 
						"github.com/bouncepaw/mycorrhiza/viewutil"
 | 
				
			||||||
	"github.com/gorilla/mux"
 | 
						"github.com/gorilla/mux"
 | 
				
			||||||
	"io"
 | 
						"io"
 | 
				
			||||||
@@ -78,7 +78,7 @@ func handlerHelp(w http.ResponseWriter, rq *http.Request) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// TODO: change for the function that uses byte array when there is such function in mycomarkup.
 | 
						// TODO: change for the function that uses byte array when there is such function in mycomarkup.
 | 
				
			||||||
	ctx, _ := mycocontext.ContextFromStringInput(string(content), shroom.MarkupOptions(articlePath))
 | 
						ctx, _ := mycocontext.ContextFromStringInput(string(content), mycoopts.MarkupOptions(articlePath))
 | 
				
			||||||
	ast := mycomarkup.BlockTree(ctx)
 | 
						ast := mycomarkup.BlockTree(ctx)
 | 
				
			||||||
	result := mycomarkup.BlocksToHTML(ctx, ast)
 | 
						result := mycomarkup.BlocksToHTML(ctx, ast)
 | 
				
			||||||
	w.WriteHeader(http.StatusOK)
 | 
						w.WriteHeader(http.StatusOK)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										1
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								main.go
									
									
									
									
									
								
							@@ -1,6 +1,7 @@
 | 
				
			|||||||
//go:generate go run github.com/valyala/quicktemplate/qtc -dir=views
 | 
					//go:generate go run github.com/valyala/quicktemplate/qtc -dir=views
 | 
				
			||||||
//go:generate go run github.com/valyala/quicktemplate/qtc -dir=tree
 | 
					//go:generate go run github.com/valyala/quicktemplate/qtc -dir=tree
 | 
				
			||||||
//go:generate go run github.com/valyala/quicktemplate/qtc -dir=history
 | 
					//go:generate go run github.com/valyala/quicktemplate/qtc -dir=history
 | 
				
			||||||
 | 
					//go:generate go run github.com/valyala/quicktemplate/qtc -dir=mycoopts
 | 
				
			||||||
// Command mycorrhiza is a program that runs a mycorrhiza wiki.
 | 
					// Command mycorrhiza is a program that runs a mycorrhiza wiki.
 | 
				
			||||||
package main
 | 
					package main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										54
									
								
								mycoopts/mycoopts.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								mycoopts/mycoopts.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
				
			|||||||
 | 
					package mycoopts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"errors"
 | 
				
			||||||
 | 
						"github.com/bouncepaw/mycomarkup/v5/options"
 | 
				
			||||||
 | 
						"github.com/bouncepaw/mycorrhiza/cfg"
 | 
				
			||||||
 | 
						"github.com/bouncepaw/mycorrhiza/hyphae"
 | 
				
			||||||
 | 
						"github.com/bouncepaw/mycorrhiza/interwiki"
 | 
				
			||||||
 | 
						"github.com/bouncepaw/mycorrhiza/util"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func MarkupOptions(hyphaName string) options.Options {
 | 
				
			||||||
 | 
						return options.Options{
 | 
				
			||||||
 | 
							HyphaName:             hyphaName,
 | 
				
			||||||
 | 
							WebSiteURL:            cfg.URL,
 | 
				
			||||||
 | 
							TransclusionSupported: true,
 | 
				
			||||||
 | 
							RedLinksSupported:     true,
 | 
				
			||||||
 | 
							InterwikiSupported:    true,
 | 
				
			||||||
 | 
							HyphaExists: func(hyphaName string) bool {
 | 
				
			||||||
 | 
								switch hyphae.ByName(hyphaName).(type) {
 | 
				
			||||||
 | 
								case *hyphae.EmptyHypha:
 | 
				
			||||||
 | 
									return false
 | 
				
			||||||
 | 
								default:
 | 
				
			||||||
 | 
									return true
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							IterateHyphaNamesWith: func(λ func(string)) {
 | 
				
			||||||
 | 
								for h := range hyphae.YieldExistingHyphae() {
 | 
				
			||||||
 | 
									λ(h.CanonicalName())
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							HyphaHTMLData: func(hyphaName string) (rawText, binaryBlock string, err error) {
 | 
				
			||||||
 | 
								switch h := hyphae.ByName(hyphaName).(type) {
 | 
				
			||||||
 | 
								case *hyphae.EmptyHypha:
 | 
				
			||||||
 | 
									err = errors.New("Hypha " + hyphaName + " does not exist")
 | 
				
			||||||
 | 
								case *hyphae.TextualHypha:
 | 
				
			||||||
 | 
									rawText, err = hyphae.FetchMycomarkupFile(h)
 | 
				
			||||||
 | 
								case *hyphae.MediaHypha:
 | 
				
			||||||
 | 
									rawText, err = hyphae.FetchMycomarkupFile(h)
 | 
				
			||||||
 | 
									binaryBlock = mediaRaw(h)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							LocalTargetCanonicalName: util.CanonicalName,
 | 
				
			||||||
 | 
							LocalLinkHref: func(hyphaName string) string {
 | 
				
			||||||
 | 
								return "/hypha/" + util.CanonicalName(hyphaName)
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							LocalImgSrc: func(hyphaName string) string {
 | 
				
			||||||
 | 
								return "/binary/" + util.CanonicalName(hyphaName)
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							LinkHrefFormatForInterwikiPrefix: interwiki.HrefLinkFormatFor,
 | 
				
			||||||
 | 
							ImgSrcFormatForInterwikiPrefix:   interwiki.ImgSrcFormatFor,
 | 
				
			||||||
 | 
						}.FillTheRest()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -2,11 +2,8 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
{% import "github.com/bouncepaw/mycorrhiza/hyphae" %}
 | 
					{% import "github.com/bouncepaw/mycorrhiza/hyphae" %}
 | 
				
			||||||
{% import "github.com/bouncepaw/mycorrhiza/l18n" %}
 | 
					{% import "github.com/bouncepaw/mycorrhiza/l18n" %}
 | 
				
			||||||
{% import "github.com/bouncepaw/mycorrhiza/util" %}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
{% func beautifulLink(hyphaName string) %}<a href="/hypha/{%s= hyphaName %}">{%s util.BeautifulName(hyphaName) %}</a>{% endfunc %}
 | 
					{% func mediaRaw(h *hyphae.MediaHypha) %}{%= Media(h, l18n.New("en", "en")) %}{% endfunc %}
 | 
				
			||||||
 | 
					 | 
				
			||||||
{% func MediaRaw(h *hyphae.MediaHypha) %}{%= Media(h, l18n.New("en", "en")) %}{% endfunc %}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
{% func Media(h *hyphae.MediaHypha, lc *l18n.Localizer) %}
 | 
					{% func Media(h *hyphae.MediaHypha, lc *l18n.Localizer) %}
 | 
				
			||||||
	{% switch filepath.Ext(h.MediaFilePath()) %}
 | 
						{% switch filepath.Ext(h.MediaFilePath()) %}
 | 
				
			||||||
							
								
								
									
										190
									
								
								mycoopts/view.qtpl.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										190
									
								
								mycoopts/view.qtpl.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,190 @@
 | 
				
			|||||||
 | 
					// Code generated by qtc from "view.qtpl". DO NOT EDIT.
 | 
				
			||||||
 | 
					// See https://github.com/valyala/quicktemplate for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:1
 | 
				
			||||||
 | 
					package mycoopts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:1
 | 
				
			||||||
 | 
					import "path/filepath"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:3
 | 
				
			||||||
 | 
					import "github.com/bouncepaw/mycorrhiza/hyphae"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:4
 | 
				
			||||||
 | 
					import "github.com/bouncepaw/mycorrhiza/l18n"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:6
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						qtio422016 "io"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						qt422016 "github.com/valyala/quicktemplate"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:6
 | 
				
			||||||
 | 
					var (
 | 
				
			||||||
 | 
						_ = qtio422016.Copy
 | 
				
			||||||
 | 
						_ = qt422016.AcquireByteBuffer
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:6
 | 
				
			||||||
 | 
					func streammediaRaw(qw422016 *qt422016.Writer, h *hyphae.MediaHypha) {
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:6
 | 
				
			||||||
 | 
						StreamMedia(qw422016, h, l18n.New("en", "en"))
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:6
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:6
 | 
				
			||||||
 | 
					func writemediaRaw(qq422016 qtio422016.Writer, h *hyphae.MediaHypha) {
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:6
 | 
				
			||||||
 | 
						qw422016 := qt422016.AcquireWriter(qq422016)
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:6
 | 
				
			||||||
 | 
						streammediaRaw(qw422016, h)
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:6
 | 
				
			||||||
 | 
						qt422016.ReleaseWriter(qw422016)
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:6
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:6
 | 
				
			||||||
 | 
					func mediaRaw(h *hyphae.MediaHypha) string {
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:6
 | 
				
			||||||
 | 
						qb422016 := qt422016.AcquireByteBuffer()
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:6
 | 
				
			||||||
 | 
						writemediaRaw(qb422016, h)
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:6
 | 
				
			||||||
 | 
						qs422016 := string(qb422016.B)
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:6
 | 
				
			||||||
 | 
						qt422016.ReleaseByteBuffer(qb422016)
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:6
 | 
				
			||||||
 | 
						return qs422016
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:6
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:8
 | 
				
			||||||
 | 
					func StreamMedia(qw422016 *qt422016.Writer, h *hyphae.MediaHypha, lc *l18n.Localizer) {
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:8
 | 
				
			||||||
 | 
						qw422016.N().S(`
 | 
				
			||||||
 | 
						`)
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:9
 | 
				
			||||||
 | 
						switch filepath.Ext(h.MediaFilePath()) {
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:11
 | 
				
			||||||
 | 
						case ".jpg", ".gif", ".png", ".webp", ".svg", ".ico":
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:11
 | 
				
			||||||
 | 
							qw422016.N().S(`
 | 
				
			||||||
 | 
						<div class="binary-container binary-container_with-img">
 | 
				
			||||||
 | 
							<a href="/binary/`)
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:13
 | 
				
			||||||
 | 
							qw422016.N().S(h.CanonicalName())
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:13
 | 
				
			||||||
 | 
							qw422016.N().S(`"><img src="/binary/`)
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:13
 | 
				
			||||||
 | 
							qw422016.N().S(h.CanonicalName())
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:13
 | 
				
			||||||
 | 
							qw422016.N().S(`"/></a>
 | 
				
			||||||
 | 
						</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						`)
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:16
 | 
				
			||||||
 | 
						case ".ogg", ".webm", ".mp4":
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:16
 | 
				
			||||||
 | 
							qw422016.N().S(`
 | 
				
			||||||
 | 
						<div class="binary-container binary-container_with-video">
 | 
				
			||||||
 | 
							<video controls>
 | 
				
			||||||
 | 
								<source src="/binary/`)
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:19
 | 
				
			||||||
 | 
							qw422016.N().S(h.CanonicalName())
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:19
 | 
				
			||||||
 | 
							qw422016.N().S(`"/>
 | 
				
			||||||
 | 
								<p>`)
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:20
 | 
				
			||||||
 | 
							qw422016.E().S(lc.Get("ui.media_novideo"))
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:20
 | 
				
			||||||
 | 
							qw422016.N().S(` <a href="/binary/`)
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:20
 | 
				
			||||||
 | 
							qw422016.N().S(h.CanonicalName())
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:20
 | 
				
			||||||
 | 
							qw422016.N().S(`">`)
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:20
 | 
				
			||||||
 | 
							qw422016.E().S(lc.Get("ui.media_novideo_link"))
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:20
 | 
				
			||||||
 | 
							qw422016.N().S(`</a></p>
 | 
				
			||||||
 | 
							</video>
 | 
				
			||||||
 | 
						</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						`)
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:24
 | 
				
			||||||
 | 
						case ".mp3":
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:24
 | 
				
			||||||
 | 
							qw422016.N().S(`
 | 
				
			||||||
 | 
						<div class="binary-container binary-container_with-audio">
 | 
				
			||||||
 | 
							<audio controls>
 | 
				
			||||||
 | 
								<source src="/binary/`)
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:27
 | 
				
			||||||
 | 
							qw422016.N().S(h.CanonicalName())
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:27
 | 
				
			||||||
 | 
							qw422016.N().S(`"/>
 | 
				
			||||||
 | 
								<p>`)
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:28
 | 
				
			||||||
 | 
							qw422016.E().S(lc.Get("ui.media_noaudio"))
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:28
 | 
				
			||||||
 | 
							qw422016.N().S(` <a href="/binary/`)
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:28
 | 
				
			||||||
 | 
							qw422016.N().S(h.CanonicalName())
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:28
 | 
				
			||||||
 | 
							qw422016.N().S(`">`)
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:28
 | 
				
			||||||
 | 
							qw422016.E().S(lc.Get("ui.media_noaudio_link"))
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:28
 | 
				
			||||||
 | 
							qw422016.N().S(`</a></p>
 | 
				
			||||||
 | 
							</audio>
 | 
				
			||||||
 | 
						</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						`)
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:32
 | 
				
			||||||
 | 
						default:
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:32
 | 
				
			||||||
 | 
							qw422016.N().S(`
 | 
				
			||||||
 | 
						<div class="binary-container binary-container_with-nothing">
 | 
				
			||||||
 | 
							<p><a href="/binary/`)
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:34
 | 
				
			||||||
 | 
							qw422016.N().S(h.CanonicalName())
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:34
 | 
				
			||||||
 | 
							qw422016.N().S(`">`)
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:34
 | 
				
			||||||
 | 
							qw422016.E().S(lc.Get("ui.media_download"))
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:34
 | 
				
			||||||
 | 
							qw422016.N().S(`</a></p>
 | 
				
			||||||
 | 
						</div>
 | 
				
			||||||
 | 
					`)
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:36
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:36
 | 
				
			||||||
 | 
						qw422016.N().S(`
 | 
				
			||||||
 | 
					`)
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:37
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:37
 | 
				
			||||||
 | 
					func WriteMedia(qq422016 qtio422016.Writer, h *hyphae.MediaHypha, lc *l18n.Localizer) {
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:37
 | 
				
			||||||
 | 
						qw422016 := qt422016.AcquireWriter(qq422016)
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:37
 | 
				
			||||||
 | 
						StreamMedia(qw422016, h, lc)
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:37
 | 
				
			||||||
 | 
						qt422016.ReleaseWriter(qw422016)
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:37
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:37
 | 
				
			||||||
 | 
					func Media(h *hyphae.MediaHypha, lc *l18n.Localizer) string {
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:37
 | 
				
			||||||
 | 
						qb422016 := qt422016.AcquireByteBuffer()
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:37
 | 
				
			||||||
 | 
						WriteMedia(qb422016, h, lc)
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:37
 | 
				
			||||||
 | 
						qs422016 := string(qb422016.B)
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:37
 | 
				
			||||||
 | 
						qt422016.ReleaseByteBuffer(qb422016)
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:37
 | 
				
			||||||
 | 
						return qs422016
 | 
				
			||||||
 | 
					//line mycoopts/view.qtpl:37
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -6,6 +6,7 @@ import (
 | 
				
			|||||||
	"github.com/bouncepaw/mycomarkup/v5/mycocontext"
 | 
						"github.com/bouncepaw/mycomarkup/v5/mycocontext"
 | 
				
			||||||
	"github.com/bouncepaw/mycorrhiza/cfg"
 | 
						"github.com/bouncepaw/mycorrhiza/cfg"
 | 
				
			||||||
	"github.com/bouncepaw/mycorrhiza/hyphae"
 | 
						"github.com/bouncepaw/mycorrhiza/hyphae"
 | 
				
			||||||
 | 
						"github.com/bouncepaw/mycorrhiza/mycoopts"
 | 
				
			||||||
	"github.com/bouncepaw/mycorrhiza/viewutil"
 | 
						"github.com/bouncepaw/mycorrhiza/viewutil"
 | 
				
			||||||
	"os"
 | 
						"os"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@@ -40,7 +41,7 @@ func setDefaultHeaderLinks() {
 | 
				
			|||||||
// parseHeaderLinks extracts all rocketlinks from the given text and saves them as header links.
 | 
					// parseHeaderLinks extracts all rocketlinks from the given text and saves them as header links.
 | 
				
			||||||
func parseHeaderLinks(text string) {
 | 
					func parseHeaderLinks(text string) {
 | 
				
			||||||
	viewutil.HeaderLinks = []viewutil.HeaderLink{}
 | 
						viewutil.HeaderLinks = []viewutil.HeaderLink{}
 | 
				
			||||||
	ctx, _ := mycocontext.ContextFromStringInput(text, MarkupOptions(""))
 | 
						ctx, _ := mycocontext.ContextFromStringInput(text, mycoopts.MarkupOptions(""))
 | 
				
			||||||
	// We call for side-effects
 | 
						// We call for side-effects
 | 
				
			||||||
	_ = mycomarkup.BlockTree(ctx, func(block blocks.Block) {
 | 
						_ = mycomarkup.BlockTree(ctx, func(block blocks.Block) {
 | 
				
			||||||
		switch launchpad := block.(type) {
 | 
							switch launchpad := block.(type) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,55 +1 @@
 | 
				
			|||||||
package shroom
 | 
					package shroom
 | 
				
			||||||
 | 
					 | 
				
			||||||
import (
 | 
					 | 
				
			||||||
	"errors"
 | 
					 | 
				
			||||||
	"github.com/bouncepaw/mycomarkup/v5/options"
 | 
					 | 
				
			||||||
	"github.com/bouncepaw/mycorrhiza/cfg"
 | 
					 | 
				
			||||||
	"github.com/bouncepaw/mycorrhiza/hyphae"
 | 
					 | 
				
			||||||
	"github.com/bouncepaw/mycorrhiza/interwiki"
 | 
					 | 
				
			||||||
	"github.com/bouncepaw/mycorrhiza/util"
 | 
					 | 
				
			||||||
	"github.com/bouncepaw/mycorrhiza/views"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func MarkupOptions(hyphaName string) options.Options {
 | 
					 | 
				
			||||||
	return options.Options{
 | 
					 | 
				
			||||||
		HyphaName:             hyphaName,
 | 
					 | 
				
			||||||
		WebSiteURL:            cfg.URL,
 | 
					 | 
				
			||||||
		TransclusionSupported: true,
 | 
					 | 
				
			||||||
		RedLinksSupported:     true,
 | 
					 | 
				
			||||||
		InterwikiSupported:    true,
 | 
					 | 
				
			||||||
		HyphaExists: func(hyphaName string) bool {
 | 
					 | 
				
			||||||
			switch hyphae.ByName(hyphaName).(type) {
 | 
					 | 
				
			||||||
			case *hyphae.EmptyHypha:
 | 
					 | 
				
			||||||
				return false
 | 
					 | 
				
			||||||
			default:
 | 
					 | 
				
			||||||
				return true
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		IterateHyphaNamesWith: func(λ func(string)) {
 | 
					 | 
				
			||||||
			for h := range hyphae.YieldExistingHyphae() {
 | 
					 | 
				
			||||||
				λ(h.CanonicalName())
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		HyphaHTMLData: func(hyphaName string) (rawText, binaryBlock string, err error) {
 | 
					 | 
				
			||||||
			switch h := hyphae.ByName(hyphaName).(type) {
 | 
					 | 
				
			||||||
			case *hyphae.EmptyHypha:
 | 
					 | 
				
			||||||
				err = errors.New("Hypha " + hyphaName + " does not exist")
 | 
					 | 
				
			||||||
			case *hyphae.TextualHypha:
 | 
					 | 
				
			||||||
				rawText, err = hyphae.FetchMycomarkupFile(h)
 | 
					 | 
				
			||||||
			case *hyphae.MediaHypha:
 | 
					 | 
				
			||||||
				rawText, err = hyphae.FetchMycomarkupFile(h)
 | 
					 | 
				
			||||||
				binaryBlock = views.MediaRaw(h)
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			return
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		LocalTargetCanonicalName: util.CanonicalName,
 | 
					 | 
				
			||||||
		LocalLinkHref: func(hyphaName string) string {
 | 
					 | 
				
			||||||
			return "/hypha/" + util.CanonicalName(hyphaName)
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		LocalImgSrc: func(hyphaName string) string {
 | 
					 | 
				
			||||||
			return "/binary/" + util.CanonicalName(hyphaName)
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		LinkHrefFormatForInterwikiPrefix: interwiki.HrefLinkFormatFor,
 | 
					 | 
				
			||||||
		ImgSrcFormatForInterwikiPrefix:   interwiki.ImgSrcFormatFor,
 | 
					 | 
				
			||||||
	}.FillTheRest()
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,234 +0,0 @@
 | 
				
			|||||||
// Code generated by qtc from "hypha.qtpl". DO NOT EDIT.
 | 
					 | 
				
			||||||
// See https://github.com/valyala/quicktemplate for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:1
 | 
					 | 
				
			||||||
package views
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:1
 | 
					 | 
				
			||||||
import "path/filepath"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:3
 | 
					 | 
				
			||||||
import "github.com/bouncepaw/mycorrhiza/hyphae"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:4
 | 
					 | 
				
			||||||
import "github.com/bouncepaw/mycorrhiza/l18n"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:5
 | 
					 | 
				
			||||||
import "github.com/bouncepaw/mycorrhiza/util"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:7
 | 
					 | 
				
			||||||
import (
 | 
					 | 
				
			||||||
	qtio422016 "io"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	qt422016 "github.com/valyala/quicktemplate"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:7
 | 
					 | 
				
			||||||
var (
 | 
					 | 
				
			||||||
	_ = qtio422016.Copy
 | 
					 | 
				
			||||||
	_ = qt422016.AcquireByteBuffer
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:7
 | 
					 | 
				
			||||||
func streambeautifulLink(qw422016 *qt422016.Writer, hyphaName string) {
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:7
 | 
					 | 
				
			||||||
	qw422016.N().S(`<a href="/hypha/`)
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:7
 | 
					 | 
				
			||||||
	qw422016.N().S(hyphaName)
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:7
 | 
					 | 
				
			||||||
	qw422016.N().S(`">`)
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:7
 | 
					 | 
				
			||||||
	qw422016.E().S(util.BeautifulName(hyphaName))
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:7
 | 
					 | 
				
			||||||
	qw422016.N().S(`</a>`)
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:7
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:7
 | 
					 | 
				
			||||||
func writebeautifulLink(qq422016 qtio422016.Writer, hyphaName string) {
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:7
 | 
					 | 
				
			||||||
	qw422016 := qt422016.AcquireWriter(qq422016)
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:7
 | 
					 | 
				
			||||||
	streambeautifulLink(qw422016, hyphaName)
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:7
 | 
					 | 
				
			||||||
	qt422016.ReleaseWriter(qw422016)
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:7
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:7
 | 
					 | 
				
			||||||
func beautifulLink(hyphaName string) string {
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:7
 | 
					 | 
				
			||||||
	qb422016 := qt422016.AcquireByteBuffer()
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:7
 | 
					 | 
				
			||||||
	writebeautifulLink(qb422016, hyphaName)
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:7
 | 
					 | 
				
			||||||
	qs422016 := string(qb422016.B)
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:7
 | 
					 | 
				
			||||||
	qt422016.ReleaseByteBuffer(qb422016)
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:7
 | 
					 | 
				
			||||||
	return qs422016
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:7
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:9
 | 
					 | 
				
			||||||
func StreamMediaRaw(qw422016 *qt422016.Writer, h *hyphae.MediaHypha) {
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:9
 | 
					 | 
				
			||||||
	StreamMedia(qw422016, h, l18n.New("en", "en"))
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:9
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:9
 | 
					 | 
				
			||||||
func WriteMediaRaw(qq422016 qtio422016.Writer, h *hyphae.MediaHypha) {
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:9
 | 
					 | 
				
			||||||
	qw422016 := qt422016.AcquireWriter(qq422016)
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:9
 | 
					 | 
				
			||||||
	StreamMediaRaw(qw422016, h)
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:9
 | 
					 | 
				
			||||||
	qt422016.ReleaseWriter(qw422016)
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:9
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:9
 | 
					 | 
				
			||||||
func MediaRaw(h *hyphae.MediaHypha) string {
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:9
 | 
					 | 
				
			||||||
	qb422016 := qt422016.AcquireByteBuffer()
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:9
 | 
					 | 
				
			||||||
	WriteMediaRaw(qb422016, h)
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:9
 | 
					 | 
				
			||||||
	qs422016 := string(qb422016.B)
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:9
 | 
					 | 
				
			||||||
	qt422016.ReleaseByteBuffer(qb422016)
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:9
 | 
					 | 
				
			||||||
	return qs422016
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:9
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:11
 | 
					 | 
				
			||||||
func StreamMedia(qw422016 *qt422016.Writer, h *hyphae.MediaHypha, lc *l18n.Localizer) {
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:11
 | 
					 | 
				
			||||||
	qw422016.N().S(`
 | 
					 | 
				
			||||||
	`)
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:12
 | 
					 | 
				
			||||||
	switch filepath.Ext(h.MediaFilePath()) {
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:14
 | 
					 | 
				
			||||||
	case ".jpg", ".gif", ".png", ".webp", ".svg", ".ico":
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:14
 | 
					 | 
				
			||||||
		qw422016.N().S(`
 | 
					 | 
				
			||||||
	<div class="binary-container binary-container_with-img">
 | 
					 | 
				
			||||||
		<a href="/binary/`)
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:16
 | 
					 | 
				
			||||||
		qw422016.N().S(h.CanonicalName())
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:16
 | 
					 | 
				
			||||||
		qw422016.N().S(`"><img src="/binary/`)
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:16
 | 
					 | 
				
			||||||
		qw422016.N().S(h.CanonicalName())
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:16
 | 
					 | 
				
			||||||
		qw422016.N().S(`"/></a>
 | 
					 | 
				
			||||||
	</div>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	`)
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:19
 | 
					 | 
				
			||||||
	case ".ogg", ".webm", ".mp4":
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:19
 | 
					 | 
				
			||||||
		qw422016.N().S(`
 | 
					 | 
				
			||||||
	<div class="binary-container binary-container_with-video">
 | 
					 | 
				
			||||||
		<video controls>
 | 
					 | 
				
			||||||
			<source src="/binary/`)
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:22
 | 
					 | 
				
			||||||
		qw422016.N().S(h.CanonicalName())
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:22
 | 
					 | 
				
			||||||
		qw422016.N().S(`"/>
 | 
					 | 
				
			||||||
			<p>`)
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:23
 | 
					 | 
				
			||||||
		qw422016.E().S(lc.Get("ui.media_novideo"))
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:23
 | 
					 | 
				
			||||||
		qw422016.N().S(` <a href="/binary/`)
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:23
 | 
					 | 
				
			||||||
		qw422016.N().S(h.CanonicalName())
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:23
 | 
					 | 
				
			||||||
		qw422016.N().S(`">`)
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:23
 | 
					 | 
				
			||||||
		qw422016.E().S(lc.Get("ui.media_novideo_link"))
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:23
 | 
					 | 
				
			||||||
		qw422016.N().S(`</a></p>
 | 
					 | 
				
			||||||
		</video>
 | 
					 | 
				
			||||||
	</div>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	`)
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:27
 | 
					 | 
				
			||||||
	case ".mp3":
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:27
 | 
					 | 
				
			||||||
		qw422016.N().S(`
 | 
					 | 
				
			||||||
	<div class="binary-container binary-container_with-audio">
 | 
					 | 
				
			||||||
		<audio controls>
 | 
					 | 
				
			||||||
			<source src="/binary/`)
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:30
 | 
					 | 
				
			||||||
		qw422016.N().S(h.CanonicalName())
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:30
 | 
					 | 
				
			||||||
		qw422016.N().S(`"/>
 | 
					 | 
				
			||||||
			<p>`)
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:31
 | 
					 | 
				
			||||||
		qw422016.E().S(lc.Get("ui.media_noaudio"))
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:31
 | 
					 | 
				
			||||||
		qw422016.N().S(` <a href="/binary/`)
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:31
 | 
					 | 
				
			||||||
		qw422016.N().S(h.CanonicalName())
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:31
 | 
					 | 
				
			||||||
		qw422016.N().S(`">`)
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:31
 | 
					 | 
				
			||||||
		qw422016.E().S(lc.Get("ui.media_noaudio_link"))
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:31
 | 
					 | 
				
			||||||
		qw422016.N().S(`</a></p>
 | 
					 | 
				
			||||||
		</audio>
 | 
					 | 
				
			||||||
	</div>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	`)
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:35
 | 
					 | 
				
			||||||
	default:
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:35
 | 
					 | 
				
			||||||
		qw422016.N().S(`
 | 
					 | 
				
			||||||
	<div class="binary-container binary-container_with-nothing">
 | 
					 | 
				
			||||||
		<p><a href="/binary/`)
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:37
 | 
					 | 
				
			||||||
		qw422016.N().S(h.CanonicalName())
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:37
 | 
					 | 
				
			||||||
		qw422016.N().S(`">`)
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:37
 | 
					 | 
				
			||||||
		qw422016.E().S(lc.Get("ui.media_download"))
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:37
 | 
					 | 
				
			||||||
		qw422016.N().S(`</a></p>
 | 
					 | 
				
			||||||
	</div>
 | 
					 | 
				
			||||||
`)
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:39
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:39
 | 
					 | 
				
			||||||
	qw422016.N().S(`
 | 
					 | 
				
			||||||
`)
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:40
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:40
 | 
					 | 
				
			||||||
func WriteMedia(qq422016 qtio422016.Writer, h *hyphae.MediaHypha, lc *l18n.Localizer) {
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:40
 | 
					 | 
				
			||||||
	qw422016 := qt422016.AcquireWriter(qq422016)
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:40
 | 
					 | 
				
			||||||
	StreamMedia(qw422016, h, lc)
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:40
 | 
					 | 
				
			||||||
	qt422016.ReleaseWriter(qw422016)
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:40
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:40
 | 
					 | 
				
			||||||
func Media(h *hyphae.MediaHypha, lc *l18n.Localizer) string {
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:40
 | 
					 | 
				
			||||||
	qb422016 := qt422016.AcquireByteBuffer()
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:40
 | 
					 | 
				
			||||||
	WriteMedia(qb422016, h, lc)
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:40
 | 
					 | 
				
			||||||
	qs422016 := string(qb422016.B)
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:40
 | 
					 | 
				
			||||||
	qt422016.ReleaseByteBuffer(qb422016)
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:40
 | 
					 | 
				
			||||||
	return qs422016
 | 
					 | 
				
			||||||
//line views/hypha.qtpl:40
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,7 +1,8 @@
 | 
				
			|||||||
{% import "github.com/bouncepaw/mycorrhiza/cfg" %}
 | 
					 | 
				
			||||||
{% import "github.com/bouncepaw/mycorrhiza/backlinks" %}
 | 
					{% import "github.com/bouncepaw/mycorrhiza/backlinks" %}
 | 
				
			||||||
{% import "github.com/bouncepaw/mycorrhiza/user" %}
 | 
					{% import "github.com/bouncepaw/mycorrhiza/cfg" %}
 | 
				
			||||||
{% import "github.com/bouncepaw/mycorrhiza/hyphae" %}
 | 
					{% import "github.com/bouncepaw/mycorrhiza/hyphae" %}
 | 
				
			||||||
 | 
					{% import "github.com/bouncepaw/mycorrhiza/user" %}
 | 
				
			||||||
 | 
					{% import "github.com/bouncepaw/mycorrhiza/util" %}
 | 
				
			||||||
{% import "github.com/bouncepaw/mycorrhiza/viewutil" %}
 | 
					{% import "github.com/bouncepaw/mycorrhiza/viewutil" %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{% func hyphaInfoEntry(h hyphae.Hypha, u *user.User, action, displayText string) %}
 | 
					{% func hyphaInfoEntry(h hyphae.Hypha, u *user.User, action, displayText string) %}
 | 
				
			||||||
@@ -35,3 +36,5 @@
 | 
				
			|||||||
<script src="{%s scriptPath %}"></script>
 | 
					<script src="{%s scriptPath %}"></script>
 | 
				
			||||||
{% endfor %}
 | 
					{% endfor %}
 | 
				
			||||||
{% endfunc %}
 | 
					{% endfunc %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% func beautifulLink(hyphaName string) %}<a href="/hypha/{%s= hyphaName %}">{%s util.BeautifulName(hyphaName) %}</a>{% endfunc %}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,217 +5,261 @@
 | 
				
			|||||||
package views
 | 
					package views
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//line views/nav.qtpl:1
 | 
					//line views/nav.qtpl:1
 | 
				
			||||||
import "github.com/bouncepaw/mycorrhiza/cfg"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//line views/nav.qtpl:2
 | 
					 | 
				
			||||||
import "github.com/bouncepaw/mycorrhiza/backlinks"
 | 
					import "github.com/bouncepaw/mycorrhiza/backlinks"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//line views/nav.qtpl:3
 | 
					//line views/nav.qtpl:2
 | 
				
			||||||
import "github.com/bouncepaw/mycorrhiza/user"
 | 
					import "github.com/bouncepaw/mycorrhiza/cfg"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//line views/nav.qtpl:4
 | 
					//line views/nav.qtpl:3
 | 
				
			||||||
import "github.com/bouncepaw/mycorrhiza/hyphae"
 | 
					import "github.com/bouncepaw/mycorrhiza/hyphae"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//line views/nav.qtpl:4
 | 
				
			||||||
 | 
					import "github.com/bouncepaw/mycorrhiza/user"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//line views/nav.qtpl:5
 | 
					//line views/nav.qtpl:5
 | 
				
			||||||
 | 
					import "github.com/bouncepaw/mycorrhiza/util"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//line views/nav.qtpl:6
 | 
				
			||||||
import "github.com/bouncepaw/mycorrhiza/viewutil"
 | 
					import "github.com/bouncepaw/mycorrhiza/viewutil"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//line views/nav.qtpl:7
 | 
					//line views/nav.qtpl:8
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	qtio422016 "io"
 | 
						qtio422016 "io"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	qt422016 "github.com/valyala/quicktemplate"
 | 
						qt422016 "github.com/valyala/quicktemplate"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//line views/nav.qtpl:7
 | 
					//line views/nav.qtpl:8
 | 
				
			||||||
var (
 | 
					var (
 | 
				
			||||||
	_ = qtio422016.Copy
 | 
						_ = qtio422016.Copy
 | 
				
			||||||
	_ = qt422016.AcquireByteBuffer
 | 
						_ = qt422016.AcquireByteBuffer
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//line views/nav.qtpl:7
 | 
					//line views/nav.qtpl:8
 | 
				
			||||||
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:7
 | 
					//line views/nav.qtpl:8
 | 
				
			||||||
	qw422016.N().S(`
 | 
						qw422016.N().S(`
 | 
				
			||||||
`)
 | 
					`)
 | 
				
			||||||
//line views/nav.qtpl:8
 | 
					//line views/nav.qtpl:9
 | 
				
			||||||
	if u.CanProceed(action) {
 | 
						if u.CanProceed(action) {
 | 
				
			||||||
//line views/nav.qtpl:8
 | 
					//line views/nav.qtpl:9
 | 
				
			||||||
		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:9
 | 
					//line views/nav.qtpl:10
 | 
				
			||||||
		qw422016.E().S(action)
 | 
							qw422016.E().S(action)
 | 
				
			||||||
//line views/nav.qtpl:9
 | 
					//line views/nav.qtpl:10
 | 
				
			||||||
		qw422016.N().S(`">
 | 
							qw422016.N().S(`">
 | 
				
			||||||
	<a class="hypha-info__link" href="/`)
 | 
						<a class="hypha-info__link" href="/`)
 | 
				
			||||||
//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(`/`)
 | 
				
			||||||
//line views/nav.qtpl:10
 | 
					//line views/nav.qtpl:11
 | 
				
			||||||
		qw422016.E().S(h.CanonicalName())
 | 
							qw422016.E().S(h.CanonicalName())
 | 
				
			||||||
//line views/nav.qtpl:10
 | 
					//line views/nav.qtpl:11
 | 
				
			||||||
		qw422016.N().S(`">`)
 | 
							qw422016.N().S(`">`)
 | 
				
			||||||
//line views/nav.qtpl:10
 | 
					//line views/nav.qtpl:11
 | 
				
			||||||
		qw422016.E().S(displayText)
 | 
							qw422016.E().S(displayText)
 | 
				
			||||||
//line views/nav.qtpl:10
 | 
					//line views/nav.qtpl:11
 | 
				
			||||||
		qw422016.N().S(`</a>
 | 
							qw422016.N().S(`</a>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
`)
 | 
					`)
 | 
				
			||||||
//line views/nav.qtpl:12
 | 
					//line views/nav.qtpl:13
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
//line views/nav.qtpl:12
 | 
					//line views/nav.qtpl:13
 | 
				
			||||||
	qw422016.N().S(`
 | 
						qw422016.N().S(`
 | 
				
			||||||
`)
 | 
					`)
 | 
				
			||||||
//line views/nav.qtpl:13
 | 
					//line views/nav.qtpl:14
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//line views/nav.qtpl:13
 | 
					//line views/nav.qtpl:14
 | 
				
			||||||
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:13
 | 
					//line views/nav.qtpl:14
 | 
				
			||||||
	qw422016 := qt422016.AcquireWriter(qq422016)
 | 
						qw422016 := qt422016.AcquireWriter(qq422016)
 | 
				
			||||||
//line views/nav.qtpl:13
 | 
					//line views/nav.qtpl:14
 | 
				
			||||||
	streamhyphaInfoEntry(qw422016, h, u, action, displayText)
 | 
						streamhyphaInfoEntry(qw422016, h, u, action, displayText)
 | 
				
			||||||
//line views/nav.qtpl:13
 | 
					//line views/nav.qtpl:14
 | 
				
			||||||
	qt422016.ReleaseWriter(qw422016)
 | 
						qt422016.ReleaseWriter(qw422016)
 | 
				
			||||||
//line views/nav.qtpl:13
 | 
					//line views/nav.qtpl:14
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//line views/nav.qtpl:13
 | 
					//line views/nav.qtpl:14
 | 
				
			||||||
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:13
 | 
					//line views/nav.qtpl:14
 | 
				
			||||||
	qb422016 := qt422016.AcquireByteBuffer()
 | 
						qb422016 := qt422016.AcquireByteBuffer()
 | 
				
			||||||
//line views/nav.qtpl:13
 | 
					//line views/nav.qtpl:14
 | 
				
			||||||
	writehyphaInfoEntry(qb422016, h, u, action, displayText)
 | 
						writehyphaInfoEntry(qb422016, h, u, action, displayText)
 | 
				
			||||||
//line views/nav.qtpl:13
 | 
					//line views/nav.qtpl:14
 | 
				
			||||||
	qs422016 := string(qb422016.B)
 | 
						qs422016 := string(qb422016.B)
 | 
				
			||||||
//line views/nav.qtpl:13
 | 
					//line views/nav.qtpl:14
 | 
				
			||||||
	qt422016.ReleaseByteBuffer(qb422016)
 | 
						qt422016.ReleaseByteBuffer(qb422016)
 | 
				
			||||||
//line views/nav.qtpl:13
 | 
					//line views/nav.qtpl:14
 | 
				
			||||||
	return qs422016
 | 
						return qs422016
 | 
				
			||||||
//line views/nav.qtpl:13
 | 
					//line views/nav.qtpl:14
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//line views/nav.qtpl:15
 | 
					//line views/nav.qtpl:16
 | 
				
			||||||
func streamhyphaInfo(qw422016 *qt422016.Writer, meta viewutil.Meta, h hyphae.Hypha) {
 | 
					func streamhyphaInfo(qw422016 *qt422016.Writer, meta viewutil.Meta, h hyphae.Hypha) {
 | 
				
			||||||
//line views/nav.qtpl:15
 | 
					//line views/nav.qtpl:16
 | 
				
			||||||
	qw422016.N().S(`
 | 
						qw422016.N().S(`
 | 
				
			||||||
`)
 | 
					`)
 | 
				
			||||||
//line views/nav.qtpl:17
 | 
					//line views/nav.qtpl:18
 | 
				
			||||||
	u := meta.U
 | 
						u := meta.U
 | 
				
			||||||
	lc := meta.Lc
 | 
						lc := meta.Lc
 | 
				
			||||||
	backs := backlinks.BacklinksCount(h)
 | 
						backs := backlinks.BacklinksCount(h)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//line views/nav.qtpl:20
 | 
					//line views/nav.qtpl:21
 | 
				
			||||||
	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:23
 | 
					//line views/nav.qtpl:24
 | 
				
			||||||
	streamhyphaInfoEntry(qw422016, h, u, "history", lc.Get("ui.history_link"))
 | 
						streamhyphaInfoEntry(qw422016, h, u, "history", lc.Get("ui.history_link"))
 | 
				
			||||||
//line views/nav.qtpl:23
 | 
					//line views/nav.qtpl:24
 | 
				
			||||||
	qw422016.N().S(`
 | 
						qw422016.N().S(`
 | 
				
			||||||
		`)
 | 
							`)
 | 
				
			||||||
//line views/nav.qtpl:24
 | 
					//line views/nav.qtpl:25
 | 
				
			||||||
	streamhyphaInfoEntry(qw422016, h, u, "rename", lc.Get("ui.rename_link"))
 | 
						streamhyphaInfoEntry(qw422016, h, u, "rename", lc.Get("ui.rename_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, "delete", lc.Get("ui.delete_link"))
 | 
						streamhyphaInfoEntry(qw422016, h, u, "delete", lc.Get("ui.delete_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, "text", lc.Get("ui.text_link"))
 | 
						streamhyphaInfoEntry(qw422016, h, u, "text", lc.Get("ui.text_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, "media", lc.Get("ui.media_link"))
 | 
						streamhyphaInfoEntry(qw422016, h, u, "media", lc.Get("ui.media_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, "backlinks", lc.GetPlural("ui.backlinks_link", backs))
 | 
						streamhyphaInfoEntry(qw422016, h, u, "backlinks", lc.GetPlural("ui.backlinks_link", backs))
 | 
				
			||||||
//line views/nav.qtpl:28
 | 
					//line views/nav.qtpl:29
 | 
				
			||||||
	qw422016.N().S(`
 | 
						qw422016.N().S(`
 | 
				
			||||||
	</ul>
 | 
						</ul>
 | 
				
			||||||
</nav>
 | 
					</nav>
 | 
				
			||||||
`)
 | 
					`)
 | 
				
			||||||
//line views/nav.qtpl:31
 | 
					//line views/nav.qtpl:32
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//line views/nav.qtpl:31
 | 
					//line views/nav.qtpl:32
 | 
				
			||||||
func writehyphaInfo(qq422016 qtio422016.Writer, meta viewutil.Meta, h hyphae.Hypha) {
 | 
					func writehyphaInfo(qq422016 qtio422016.Writer, meta viewutil.Meta, h hyphae.Hypha) {
 | 
				
			||||||
//line views/nav.qtpl:31
 | 
					//line views/nav.qtpl:32
 | 
				
			||||||
	qw422016 := qt422016.AcquireWriter(qq422016)
 | 
						qw422016 := qt422016.AcquireWriter(qq422016)
 | 
				
			||||||
//line views/nav.qtpl:31
 | 
					//line views/nav.qtpl:32
 | 
				
			||||||
	streamhyphaInfo(qw422016, meta, h)
 | 
						streamhyphaInfo(qw422016, meta, h)
 | 
				
			||||||
//line views/nav.qtpl:31
 | 
					//line views/nav.qtpl:32
 | 
				
			||||||
	qt422016.ReleaseWriter(qw422016)
 | 
						qt422016.ReleaseWriter(qw422016)
 | 
				
			||||||
//line views/nav.qtpl:31
 | 
					//line views/nav.qtpl:32
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//line views/nav.qtpl:31
 | 
					//line views/nav.qtpl:32
 | 
				
			||||||
func hyphaInfo(meta viewutil.Meta, h hyphae.Hypha) string {
 | 
					func hyphaInfo(meta viewutil.Meta, h hyphae.Hypha) string {
 | 
				
			||||||
//line views/nav.qtpl:31
 | 
					//line views/nav.qtpl:32
 | 
				
			||||||
	qb422016 := qt422016.AcquireByteBuffer()
 | 
						qb422016 := qt422016.AcquireByteBuffer()
 | 
				
			||||||
//line views/nav.qtpl:31
 | 
					//line views/nav.qtpl:32
 | 
				
			||||||
	writehyphaInfo(qb422016, meta, h)
 | 
						writehyphaInfo(qb422016, meta, h)
 | 
				
			||||||
//line views/nav.qtpl:31
 | 
					//line views/nav.qtpl:32
 | 
				
			||||||
	qs422016 := string(qb422016.B)
 | 
						qs422016 := string(qb422016.B)
 | 
				
			||||||
//line views/nav.qtpl:31
 | 
					//line views/nav.qtpl:32
 | 
				
			||||||
	qt422016.ReleaseByteBuffer(qb422016)
 | 
						qt422016.ReleaseByteBuffer(qb422016)
 | 
				
			||||||
//line views/nav.qtpl:31
 | 
					//line views/nav.qtpl:32
 | 
				
			||||||
	return qs422016
 | 
						return qs422016
 | 
				
			||||||
//line views/nav.qtpl:31
 | 
					//line views/nav.qtpl:32
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//line views/nav.qtpl:33
 | 
					//line views/nav.qtpl:34
 | 
				
			||||||
func streamcommonScripts(qw422016 *qt422016.Writer) {
 | 
					func streamcommonScripts(qw422016 *qt422016.Writer) {
 | 
				
			||||||
//line views/nav.qtpl:33
 | 
					//line views/nav.qtpl:34
 | 
				
			||||||
	qw422016.N().S(`
 | 
						qw422016.N().S(`
 | 
				
			||||||
`)
 | 
					`)
 | 
				
			||||||
//line views/nav.qtpl:34
 | 
					//line views/nav.qtpl:35
 | 
				
			||||||
	for _, scriptPath := range cfg.CommonScripts {
 | 
						for _, scriptPath := range cfg.CommonScripts {
 | 
				
			||||||
//line views/nav.qtpl:34
 | 
					//line views/nav.qtpl:35
 | 
				
			||||||
		qw422016.N().S(`
 | 
							qw422016.N().S(`
 | 
				
			||||||
<script src="`)
 | 
					<script src="`)
 | 
				
			||||||
//line views/nav.qtpl:35
 | 
					//line views/nav.qtpl:36
 | 
				
			||||||
		qw422016.E().S(scriptPath)
 | 
							qw422016.E().S(scriptPath)
 | 
				
			||||||
//line views/nav.qtpl:35
 | 
					//line views/nav.qtpl:36
 | 
				
			||||||
		qw422016.N().S(`"></script>
 | 
							qw422016.N().S(`"></script>
 | 
				
			||||||
`)
 | 
					`)
 | 
				
			||||||
//line views/nav.qtpl:36
 | 
					//line views/nav.qtpl:37
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
//line views/nav.qtpl:36
 | 
					//line views/nav.qtpl:37
 | 
				
			||||||
	qw422016.N().S(`
 | 
						qw422016.N().S(`
 | 
				
			||||||
`)
 | 
					`)
 | 
				
			||||||
//line views/nav.qtpl:37
 | 
					//line views/nav.qtpl:38
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//line views/nav.qtpl:37
 | 
					//line views/nav.qtpl:38
 | 
				
			||||||
func writecommonScripts(qq422016 qtio422016.Writer) {
 | 
					func writecommonScripts(qq422016 qtio422016.Writer) {
 | 
				
			||||||
//line views/nav.qtpl:37
 | 
					//line views/nav.qtpl:38
 | 
				
			||||||
	qw422016 := qt422016.AcquireWriter(qq422016)
 | 
						qw422016 := qt422016.AcquireWriter(qq422016)
 | 
				
			||||||
//line views/nav.qtpl:37
 | 
					//line views/nav.qtpl:38
 | 
				
			||||||
	streamcommonScripts(qw422016)
 | 
						streamcommonScripts(qw422016)
 | 
				
			||||||
//line views/nav.qtpl:37
 | 
					//line views/nav.qtpl:38
 | 
				
			||||||
	qt422016.ReleaseWriter(qw422016)
 | 
						qt422016.ReleaseWriter(qw422016)
 | 
				
			||||||
//line views/nav.qtpl:37
 | 
					//line views/nav.qtpl:38
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//line views/nav.qtpl:37
 | 
					//line views/nav.qtpl:38
 | 
				
			||||||
func commonScripts() string {
 | 
					func commonScripts() string {
 | 
				
			||||||
//line views/nav.qtpl:37
 | 
					//line views/nav.qtpl:38
 | 
				
			||||||
	qb422016 := qt422016.AcquireByteBuffer()
 | 
						qb422016 := qt422016.AcquireByteBuffer()
 | 
				
			||||||
//line views/nav.qtpl:37
 | 
					//line views/nav.qtpl:38
 | 
				
			||||||
	writecommonScripts(qb422016)
 | 
						writecommonScripts(qb422016)
 | 
				
			||||||
//line views/nav.qtpl:37
 | 
					//line views/nav.qtpl:38
 | 
				
			||||||
	qs422016 := string(qb422016.B)
 | 
						qs422016 := string(qb422016.B)
 | 
				
			||||||
//line views/nav.qtpl:37
 | 
					//line views/nav.qtpl:38
 | 
				
			||||||
	qt422016.ReleaseByteBuffer(qb422016)
 | 
						qt422016.ReleaseByteBuffer(qb422016)
 | 
				
			||||||
//line views/nav.qtpl:37
 | 
					//line views/nav.qtpl:38
 | 
				
			||||||
	return qs422016
 | 
						return qs422016
 | 
				
			||||||
//line views/nav.qtpl:37
 | 
					//line views/nav.qtpl:38
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//line views/nav.qtpl:40
 | 
				
			||||||
 | 
					func streambeautifulLink(qw422016 *qt422016.Writer, hyphaName string) {
 | 
				
			||||||
 | 
					//line views/nav.qtpl:40
 | 
				
			||||||
 | 
						qw422016.N().S(`<a href="/hypha/`)
 | 
				
			||||||
 | 
					//line views/nav.qtpl:40
 | 
				
			||||||
 | 
						qw422016.N().S(hyphaName)
 | 
				
			||||||
 | 
					//line views/nav.qtpl:40
 | 
				
			||||||
 | 
						qw422016.N().S(`">`)
 | 
				
			||||||
 | 
					//line views/nav.qtpl:40
 | 
				
			||||||
 | 
						qw422016.E().S(util.BeautifulName(hyphaName))
 | 
				
			||||||
 | 
					//line views/nav.qtpl:40
 | 
				
			||||||
 | 
						qw422016.N().S(`</a>`)
 | 
				
			||||||
 | 
					//line views/nav.qtpl:40
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//line views/nav.qtpl:40
 | 
				
			||||||
 | 
					func writebeautifulLink(qq422016 qtio422016.Writer, hyphaName string) {
 | 
				
			||||||
 | 
					//line views/nav.qtpl:40
 | 
				
			||||||
 | 
						qw422016 := qt422016.AcquireWriter(qq422016)
 | 
				
			||||||
 | 
					//line views/nav.qtpl:40
 | 
				
			||||||
 | 
						streambeautifulLink(qw422016, hyphaName)
 | 
				
			||||||
 | 
					//line views/nav.qtpl:40
 | 
				
			||||||
 | 
						qt422016.ReleaseWriter(qw422016)
 | 
				
			||||||
 | 
					//line views/nav.qtpl:40
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//line views/nav.qtpl:40
 | 
				
			||||||
 | 
					func beautifulLink(hyphaName string) string {
 | 
				
			||||||
 | 
					//line views/nav.qtpl:40
 | 
				
			||||||
 | 
						qb422016 := qt422016.AcquireByteBuffer()
 | 
				
			||||||
 | 
					//line views/nav.qtpl:40
 | 
				
			||||||
 | 
						writebeautifulLink(qb422016, hyphaName)
 | 
				
			||||||
 | 
					//line views/nav.qtpl:40
 | 
				
			||||||
 | 
						qs422016 := string(qb422016.B)
 | 
				
			||||||
 | 
					//line views/nav.qtpl:40
 | 
				
			||||||
 | 
						qt422016.ReleaseByteBuffer(qb422016)
 | 
				
			||||||
 | 
					//line views/nav.qtpl:40
 | 
				
			||||||
 | 
						return qs422016
 | 
				
			||||||
 | 
					//line views/nav.qtpl:40
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,6 +3,7 @@ package web
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"github.com/bouncepaw/mycomarkup/v5"
 | 
						"github.com/bouncepaw/mycomarkup/v5"
 | 
				
			||||||
 | 
						"github.com/bouncepaw/mycorrhiza/mycoopts"
 | 
				
			||||||
	"github.com/bouncepaw/mycorrhiza/viewutil"
 | 
						"github.com/bouncepaw/mycorrhiza/viewutil"
 | 
				
			||||||
	"log"
 | 
						"log"
 | 
				
			||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
@@ -208,7 +209,7 @@ func handlerUploadText(w http.ResponseWriter, rq *http.Request) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if action == "Preview" {
 | 
						if action == "Preview" {
 | 
				
			||||||
		ctx, _ := mycocontext.ContextFromStringInput(textData, shroom.MarkupOptions(hyphaName))
 | 
							ctx, _ := mycocontext.ContextFromStringInput(textData, mycoopts.MarkupOptions(hyphaName))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		util.HTTP200Page(
 | 
							util.HTTP200Page(
 | 
				
			||||||
			w,
 | 
								w,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,7 +4,7 @@ import (
 | 
				
			|||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"github.com/bouncepaw/mycomarkup/v5"
 | 
						"github.com/bouncepaw/mycomarkup/v5"
 | 
				
			||||||
	"github.com/bouncepaw/mycorrhiza/files"
 | 
						"github.com/bouncepaw/mycorrhiza/files"
 | 
				
			||||||
	"github.com/bouncepaw/mycorrhiza/shroom"
 | 
						"github.com/bouncepaw/mycorrhiza/mycoopts"
 | 
				
			||||||
	"github.com/bouncepaw/mycorrhiza/viewutil"
 | 
						"github.com/bouncepaw/mycorrhiza/viewutil"
 | 
				
			||||||
	"io"
 | 
						"io"
 | 
				
			||||||
	"log"
 | 
						"log"
 | 
				
			||||||
@@ -124,7 +124,7 @@ func handlerRevision(w http.ResponseWriter, rq *http.Request) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	textContents, err = history.FileAtRevision(mycoFilePath, revHash)
 | 
						textContents, err = history.FileAtRevision(mycoFilePath, revHash)
 | 
				
			||||||
	if err == nil {
 | 
						if err == nil {
 | 
				
			||||||
		ctx, _ := mycocontext.ContextFromStringInput(textContents, shroom.MarkupOptions(hyphaName))
 | 
							ctx, _ := mycocontext.ContextFromStringInput(textContents, mycoopts.MarkupOptions(hyphaName))
 | 
				
			||||||
		contents = mycomarkup.BlocksToHTML(ctx, mycomarkup.BlockTree(ctx))
 | 
							contents = mycomarkup.BlocksToHTML(ctx, mycomarkup.BlockTree(ctx))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -196,7 +196,7 @@ func handlerHypha(w http.ResponseWriter, rq *http.Request) {
 | 
				
			|||||||
	case hyphae.ExistingHypha:
 | 
						case hyphae.ExistingHypha:
 | 
				
			||||||
		fileContentsT, errT := os.ReadFile(h.TextFilePath())
 | 
							fileContentsT, errT := os.ReadFile(h.TextFilePath())
 | 
				
			||||||
		if errT == nil {
 | 
							if errT == nil {
 | 
				
			||||||
			ctx, _ := mycocontext.ContextFromStringInput(string(fileContentsT), shroom.MarkupOptions(hyphaName))
 | 
								ctx, _ := mycocontext.ContextFromStringInput(string(fileContentsT), mycoopts.MarkupOptions(hyphaName))
 | 
				
			||||||
			getOpenGraph, descVisitor, imgVisitor := tools.OpenGraphVisitors(ctx)
 | 
								getOpenGraph, descVisitor, imgVisitor := tools.OpenGraphVisitors(ctx)
 | 
				
			||||||
			ast := mycomarkup.BlockTree(ctx, descVisitor, imgVisitor)
 | 
								ast := mycomarkup.BlockTree(ctx, descVisitor, imgVisitor)
 | 
				
			||||||
			contents = mycomarkup.BlocksToHTML(ctx, ast)
 | 
								contents = mycomarkup.BlocksToHTML(ctx, ast)
 | 
				
			||||||
@@ -204,7 +204,7 @@ func handlerHypha(w http.ResponseWriter, rq *http.Request) {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		switch h := h.(type) {
 | 
							switch h := h.(type) {
 | 
				
			||||||
		case *hyphae.MediaHypha:
 | 
							case *hyphae.MediaHypha:
 | 
				
			||||||
			contents = views.Media(h, lc) + contents
 | 
								contents = mycoopts.Media(h, lc) + contents
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		util.HTTP200Page(w,
 | 
							util.HTTP200Page(w,
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user