2022-04-23 23:35:36 +03:00
|
|
|
package hypview
|
|
|
|
|
|
|
|
import (
|
|
|
|
"embed"
|
2022-08-19 22:24:59 +03:00
|
|
|
"html/template"
|
2024-09-07 23:55:39 +03:00
|
|
|
"log/slog"
|
2022-04-23 23:35:36 +03:00
|
|
|
"strings"
|
2022-08-19 22:24:59 +03:00
|
|
|
|
2024-09-07 21:22:41 +03:00
|
|
|
"github.com/bouncepaw/mycorrhiza/internal/backlinks"
|
|
|
|
"github.com/bouncepaw/mycorrhiza/internal/cfg"
|
|
|
|
"github.com/bouncepaw/mycorrhiza/web/viewutil"
|
2022-04-23 23:35:36 +03:00
|
|
|
)
|
|
|
|
|
|
|
|
var (
|
|
|
|
//go:embed *.html
|
2022-04-24 14:11:53 +03:00
|
|
|
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}}
|
2022-08-20 23:06:31 +05:00
|
|
|
{{define "leave redirection"}}Оставить перенаправление{{end}}
|
2022-09-21 11:22:48 +03:00
|
|
|
|
2024-09-07 21:22:41 +03:00
|
|
|
|
2022-04-24 14:11:53 +03:00
|
|
|
`
|
2022-06-16 14:05:30 +03:00
|
|
|
chainNaviTitle viewutil.Chain
|
2022-06-16 14:19:42 +03:00
|
|
|
chainRenameHypha viewutil.Chain
|
2022-04-23 23:35:36 +03:00
|
|
|
)
|
|
|
|
|
|
|
|
func Init() {
|
2022-05-18 19:58:24 +03:00
|
|
|
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
|
|
|
}
|
|
|
|
|
2022-08-20 23:06:31 +05:00
|
|
|
type renameData struct {
|
2022-06-16 14:05:30 +03:00
|
|
|
*viewutil.BaseData
|
2022-08-20 23:06:31 +05:00
|
|
|
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) {
|
2022-08-20 23:06:31 +05:00
|
|
|
viewutil.ExecutePage(meta, chainRenameHypha, renameData{
|
2022-06-16 14:19:42 +03:00
|
|
|
BaseData: &viewutil.BaseData{
|
|
|
|
Addr: "/rename/" + hyphaName,
|
|
|
|
},
|
2022-08-20 23:06:31 +05:00
|
|
|
HyphaName: hyphaName,
|
|
|
|
LeaveRedirectionDefault: backlinks.BacklinksCount(hyphaName) != 0,
|
2022-06-16 14:19:42 +03:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2022-04-23 23:35:36 +03:00
|
|
|
type naviTitleData struct {
|
|
|
|
HyphaNameParts []string
|
|
|
|
HyphaNamePartsWithParents []string
|
|
|
|
Icon string
|
|
|
|
HomeHypha string
|
|
|
|
}
|
|
|
|
|
2024-09-07 21:22:41 +03:00
|
|
|
func NaviTitle(meta viewutil.Meta, hyphaName string) template.HTML {
|
2022-04-23 23:35:36 +03:00
|
|
|
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 {
|
2024-09-07 23:55:39 +03:00
|
|
|
slog.Error("Failed to render NaviTitle properly; using nevertheless", "err", err)
|
2022-04-23 23:35:36 +03:00
|
|
|
}
|
2024-09-07 21:22:41 +03:00
|
|
|
return template.HTML(buf.String())
|
2022-04-23 23:35:36 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
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
|
|
|
|
}
|