1
0
mirror of https://github.com/osmarks/mycorrhiza.git synced 2025-03-10 21:48:20 +00:00
mycorrhiza/hypview/hypview.go

88 lines
2.5 KiB
Go
Raw Normal View History

package hypview
import (
"embed"
2022-08-19 22:24:59 +03:00
"html/template"
"log/slog"
"strings"
2022-08-19 22:24:59 +03:00
"github.com/bouncepaw/mycorrhiza/internal/backlinks"
"github.com/bouncepaw/mycorrhiza/internal/cfg"
"github.com/bouncepaw/mycorrhiza/web/viewutil"
)
var (
//go:embed *.html
fs embed.FS
ruTranslation = `
2022-06-16 14:19:42 +03:00
{{define "rename hypha?"}}Переименовать {{beautifulName .}}?{{end}}
{{define "rename [[hypha]]?"}}Переименовать <a href="/hypha/{{.}}">{{beautifulName .}}</a>?{{end}}
{{define "new name"}}Новое название:{{end}}
{{define "rename recursively"}}Также переименовать подгифы{{end}}
2022-07-01 20:51:22 +05:00
{{define "rename tip"}}Переименовывайте аккуратно. <a href="/help/en/rename">Документация на английском.</a>{{end}}
{{define "leave redirection"}}Оставить перенаправление{{end}}
`
2022-06-16 14:05:30 +03:00
chainNaviTitle viewutil.Chain
2022-06-16 14:19:42 +03:00
chainRenameHypha viewutil.Chain
)
func Init() {
chainNaviTitle = viewutil.CopyEnRuWith(fs, "view_navititle.html", "")
2022-06-16 14:19:42 +03:00
chainRenameHypha = viewutil.CopyEnRuWith(fs, "view_rename.html", ruTranslation)
2022-08-19 22:24:59 +03:00
}
type renameData struct {
2022-06-16 14:05:30 +03:00
*viewutil.BaseData
HyphaName string
LeaveRedirectionDefault bool
2022-06-16 14:05:30 +03:00
}
2022-06-16 14:19:42 +03:00
func RenameHypha(meta viewutil.Meta, hyphaName string) {
viewutil.ExecutePage(meta, chainRenameHypha, renameData{
2022-06-16 14:19:42 +03:00
BaseData: &viewutil.BaseData{
Addr: "/rename/" + hyphaName,
},
HyphaName: hyphaName,
LeaveRedirectionDefault: backlinks.BacklinksCount(hyphaName) != 0,
2022-06-16 14:19:42 +03:00
})
}
type naviTitleData struct {
HyphaNameParts []string
HyphaNamePartsWithParents []string
Icon string
HomeHypha string
}
func NaviTitle(meta viewutil.Meta, hyphaName string) template.HTML {
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 {
slog.Error("Failed to render NaviTitle properly; using nevertheless", "err", err)
}
return template.HTML(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)
}
return parts, partsWithParents
}