1
0
mirror of https://github.com/osmarks/mycorrhiza.git synced 2024-10-30 11:46:16 +00:00
mycorrhiza/name.go

65 lines
1.9 KiB
Go
Raw Normal View History

package main
import (
"fmt"
2021-01-30 18:29:56 +00:00
"log"
"net/http"
"strings"
2020-10-25 15:06:51 +00:00
"git.sr.ht/~adnano/go-gemini"
2020-10-25 15:06:51 +00:00
"github.com/bouncepaw/mycorrhiza/util"
)
// naviTitle turns `canonicalName` into html string with each hypha path parts higlighted as links.
2020-10-25 15:06:51 +00:00
// TODO: rework as a template
func naviTitle(canonicalName string) string {
var (
2020-10-25 15:06:51 +00:00
html = fmt.Sprintf(`<h1 class="navi-title" id="navi-title">
2021-02-17 18:41:35 +00:00
<a href="/hypha/%s">%s</a><span aria-hidden="true" class="navi-title__colon">:</span>`, util.HomePage, util.SiteNavIcon)
prevAcc = `/hypha/`
parts = strings.Split(canonicalName, "/")
2021-01-14 11:51:17 +00:00
rel = "up"
)
2021-01-10 11:58:02 +00:00
for i, part := range parts {
if i > 0 {
html += `<span aria-hidden="true" class="navi-title__separator">/</span>`
}
2021-01-14 11:51:17 +00:00
if i == len(parts)-1 {
rel = "bookmark"
}
2021-01-10 11:58:02 +00:00
html += fmt.Sprintf(
2021-01-14 11:51:17 +00:00
`<a href="%s" rel="%s">%s</a>`,
prevAcc+part,
2021-01-14 11:51:17 +00:00
rel,
2021-01-10 11:58:02 +00:00
util.BeautifulName(part),
)
prevAcc += part + "/"
}
return html + "</h1>"
}
2021-01-30 18:29:56 +00:00
// HyphaNameFromRq extracts hypha name from http request. You have to also pass the action which is embedded in the url or several actions. For url /hypha/hypha, the action would be "hypha".
func HyphaNameFromRq(rq *http.Request, actions ...string) string {
p := rq.URL.Path
for _, action := range actions {
if strings.HasPrefix(p, "/"+action+"/") {
return util.CanonicalName(strings.TrimPrefix(p, "/"+action+"/"))
}
}
log.Fatal("HyphaNameFromRq: no matching action passed")
return ""
}
// geminiHyphaNameFromRq extracts hypha name from gemini request. You have to also pass the action which is embedded in the url or several actions. For url /hypha/hypha, the action would be "hypha".
func geminiHyphaNameFromRq(rq *gemini.Request, actions ...string) string {
p := rq.URL.Path
for _, action := range actions {
if strings.HasPrefix(p, "/"+action+"/") {
return util.CanonicalName(strings.TrimPrefix(p, "/"+action+"/"))
}
}
log.Fatal("HyphaNameFromRq: no matching action passed")
return ""
}