diff --git a/backlinks/backlinks.go b/backlinks/backlinks.go
index 3660580..c019a45 100644
--- a/backlinks/backlinks.go
+++ b/backlinks/backlinks.go
@@ -4,6 +4,7 @@ package backlinks
import (
"log"
"os"
+ "sort"
"github.com/bouncepaw/mycorrhiza/hyphae"
"github.com/bouncepaw/mycorrhiza/util"
@@ -61,6 +62,25 @@ func BacklinksCount(hyphaName string) int {
return 0
}
+func BacklinksFor(hyphaName string) []string {
+ var backlinks []string
+ for b := range yieldHyphaBacklinks(hyphaName) {
+ backlinks = append(backlinks, b)
+ }
+ return backlinks
+}
+
+func Orphans() []string {
+ var orphans []string
+ for h := range hyphae.YieldExistingHyphae() {
+ if BacklinksCount(h.CanonicalName()) == 0 {
+ orphans = append(orphans, h.CanonicalName())
+ }
+ }
+ sort.Strings(orphans)
+ return orphans
+}
+
// Using set here seems like the most appropriate solution
type linkSet map[string]struct{}
diff --git a/backlinks/web.go b/backlinks/web.go
deleted file mode 100644
index 47e95ee..0000000
--- a/backlinks/web.go
+++ /dev/null
@@ -1,79 +0,0 @@
-package backlinks
-
-import (
- "embed"
- "github.com/bouncepaw/mycorrhiza/hyphae"
- "github.com/bouncepaw/mycorrhiza/newtmpl"
- "github.com/bouncepaw/mycorrhiza/util"
- "github.com/bouncepaw/mycorrhiza/viewutil"
- "github.com/gorilla/mux"
- "net/http"
- "sort"
-)
-
-func InitHandlers(rtr *mux.Router) {
- rtr.PathPrefix("/backlinks/").HandlerFunc(handlerBacklinks)
- rtr.PathPrefix("/orphans").HandlerFunc(handlerOrphans)
- chainBacklinks = viewutil.CopyEnRuWith(fs, "view_backlinks.html", ruTranslation)
- pageOrphans = newtmpl.NewPage(fs, "view_orphans.html", map[string]string{
- "orphaned hyphae": "Гифы-сироты",
- "orphan description": "Ниже перечислены гифы без ссылок на них.",
- })
-}
-
-// handlerBacklinks lists all backlinks to a hypha.
-func handlerBacklinks(w http.ResponseWriter, rq *http.Request) {
- var (
- hyphaName = util.HyphaNameFromRq(rq, "backlinks")
- backlinks []string
- )
- for b := range yieldHyphaBacklinks(hyphaName) {
- backlinks = append(backlinks, b)
- }
- viewBacklinks(viewutil.MetaFrom(w, rq), hyphaName, backlinks)
-}
-
-func handlerOrphans(w http.ResponseWriter, rq *http.Request) {
- var orphans []string
- for h := range hyphae.YieldExistingHyphae() {
- if BacklinksCount(h.CanonicalName()) == 0 {
- orphans = append(orphans, h.CanonicalName())
- }
- }
- sort.Strings(orphans)
-
- _ = pageOrphans.RenderTo(viewutil.MetaFrom(w, rq),
- map[string]any{
- "Addr": "/orphans",
- "Orphans": orphans,
- })
-}
-
-var (
- //go:embed *.html
- fs embed.FS
- ruTranslation = `
-{{define "backlinks to text"}}Обратные ссылки на {{.}}{{end}}
-{{define "backlinks to link"}}Обратные ссылки на {{beautifulName .}}{{end}}
-{{define "description"}}Ниже перечислены гифы, на которых есть ссылка на эту гифу, трансклюзия этой гифы или эта гифа вставлена как изображение.{{end}}
-`
- chainBacklinks viewutil.Chain
-
- pageOrphans *newtmpl.Page
-)
-
-type backlinksData struct {
- *viewutil.BaseData
- HyphaName string
- Backlinks []string
-}
-
-func viewBacklinks(meta viewutil.Meta, hyphaName string, backlinks []string) {
- viewutil.ExecutePage(meta, chainBacklinks, backlinksData{
- BaseData: &viewutil.BaseData{
- Addr: "/backlinks/" + hyphaName,
- },
- HyphaName: hyphaName,
- Backlinks: backlinks,
- })
-}
diff --git a/web/pages.go b/web/pages.go
new file mode 100644
index 0000000..a2f08ba
--- /dev/null
+++ b/web/pages.go
@@ -0,0 +1,23 @@
+package web
+
+import (
+ "embed"
+ "github.com/bouncepaw/mycorrhiza/newtmpl"
+)
+
+//go:embed views/*.html
+var fs embed.FS
+
+var pageOrphans, pageBacklinks *newtmpl.Page
+
+func initPages() {
+ pageOrphans = newtmpl.NewPage(fs, "views/orphans.html", map[string]string{
+ "orphaned hyphae": "Гифы-сироты",
+ "orphan description": "Ниже перечислены гифы без ссылок на них.",
+ })
+ pageBacklinks = newtmpl.NewPage(fs, "views/backlinks.html", map[string]string{
+ "backlinks to text": `Обратные ссылки на {{.}}`,
+ "backlinks to link": `Обратные ссылки на {{beautifulName .}}`,
+ "description": `Ниже перечислены гифы, на которых есть ссылка на эту гифу, трансклюзия этой гифы или эта гифа вставлена как изображение.`,
+ })
+}
diff --git a/web/readers.go b/web/readers.go
index 0482a9a..6fcb141 100644
--- a/web/readers.go
+++ b/web/readers.go
@@ -3,6 +3,7 @@ package web
import (
"fmt"
"git.sr.ht/~bouncepaw/mycomarkup/v5"
+ "github.com/bouncepaw/mycorrhiza/backlinks"
"github.com/bouncepaw/mycorrhiza/categories"
"github.com/bouncepaw/mycorrhiza/files"
views2 "github.com/bouncepaw/mycorrhiza/hypview"
@@ -38,6 +39,10 @@ func initReaders(r *mux.Router) {
r.PathPrefix("/media/").HandlerFunc(handlerMedia)
r.Path("/today").HandlerFunc(handlerToday)
r.Path("/edit-today").HandlerFunc(handlerEditToday)
+
+ // Backlinks
+ r.PathPrefix("/backlinks/").HandlerFunc(handlerBacklinks)
+ r.PathPrefix("/orphans").HandlerFunc(handlerOrphans)
}
func handlerEditToday(w http.ResponseWriter, rq *http.Request) {
@@ -238,3 +243,23 @@ func handlerHypha(w http.ResponseWriter, rq *http.Request) {
openGraph))
}
}
+
+// handlerBacklinks lists all backlinks to a hypha.
+func handlerBacklinks(w http.ResponseWriter, rq *http.Request) {
+ hyphaName := util.HyphaNameFromRq(rq, "backlinks")
+
+ _ = pageBacklinks.RenderTo(viewutil.MetaFrom(w, rq),
+ map[string]any{
+ "Addr": "/backlinks/" + hyphaName,
+ "HyphaName": hyphaName,
+ "Backlinks": backlinks.BacklinksFor(hyphaName),
+ })
+}
+
+func handlerOrphans(w http.ResponseWriter, rq *http.Request) {
+ _ = pageOrphans.RenderTo(viewutil.MetaFrom(w, rq),
+ map[string]any{
+ "Addr": "/orphans",
+ "Orphans": backlinks.Orphans(),
+ })
+}
diff --git a/backlinks/view_backlinks.html b/web/views/backlinks.html
similarity index 100%
rename from backlinks/view_backlinks.html
rename to web/views/backlinks.html
diff --git a/backlinks/view_orphans.html b/web/views/orphans.html
similarity index 100%
rename from backlinks/view_orphans.html
rename to web/views/orphans.html
diff --git a/web/web.go b/web/web.go
index 3ebfc14..3b2c0f6 100644
--- a/web/web.go
+++ b/web/web.go
@@ -7,15 +7,14 @@ import (
"net/url"
"github.com/bouncepaw/mycorrhiza/admin"
- "github.com/bouncepaw/mycorrhiza/settings"
"github.com/bouncepaw/mycorrhiza/auth"
- "github.com/bouncepaw/mycorrhiza/backlinks"
"github.com/bouncepaw/mycorrhiza/categories"
"github.com/bouncepaw/mycorrhiza/help"
"github.com/bouncepaw/mycorrhiza/history/histweb"
"github.com/bouncepaw/mycorrhiza/hypview"
"github.com/bouncepaw/mycorrhiza/interwiki"
"github.com/bouncepaw/mycorrhiza/misc"
+ "github.com/bouncepaw/mycorrhiza/settings"
"github.com/gorilla/mux"
@@ -56,14 +55,13 @@ func Handler() http.Handler {
initReaders(wikiRouter)
initMutators(wikiRouter)
help.InitHandlers(wikiRouter)
- backlinks.InitHandlers(wikiRouter)
categories.InitHandlers(wikiRouter)
misc.InitHandlers(wikiRouter)
hypview.Init()
histweb.InitHandlers(wikiRouter)
interwiki.InitHandlers(wikiRouter)
- // Admin routes.
+ // Admin routes
if cfg.UseAuth {
adminRouter := wikiRouter.PathPrefix("/admin").Subrouter()
adminRouter.Use(groupMiddleware("admin"))