diff --git a/interwiki/interwiki.go b/interwiki/interwiki.go index 80b5680..b266efe 100644 --- a/interwiki/interwiki.go +++ b/interwiki/interwiki.go @@ -16,6 +16,7 @@ func Init() { log.Fatalln(err) } for _, wiki := range record { + wiki := wiki // This line is required wiki.canonize() theMap.list = append(theMap.list, &wiki) for _, prefix := range wiki.Names { diff --git a/interwiki/view_interwiki.html b/interwiki/view_interwiki.html new file mode 100644 index 0000000..4bfc94e --- /dev/null +++ b/interwiki/view_interwiki.html @@ -0,0 +1,34 @@ +{{define "interwiki map"}}Interwiki map{{end}} +{{define "title"}}{{template "interwiki map"}}{{end}} + +{{define "body"}} +
+

{{template "interwiki map"}}

{{$emojies := .Emojies}} + {{if len .Entries}} + + {{else}} +

No interwiki map set.

+ {{end}} +
+{{end}} \ No newline at end of file diff --git a/interwiki/web.go b/interwiki/web.go new file mode 100644 index 0000000..21c4a14 --- /dev/null +++ b/interwiki/web.go @@ -0,0 +1,48 @@ +package interwiki + +import ( + "embed" + "github.com/bouncepaw/mycorrhiza/viewutil" + "github.com/gorilla/mux" + "net/http" +) + +var ( + //go:embed *html + fs embed.FS + ruTranslation = `` + chainInterwiki viewutil.Chain +) + +func InitHandlers(rtr *mux.Router) { + chainInterwiki = viewutil.CopyEnRuWith(fs, "view_interwiki.html", ruTranslation) + rtr.HandleFunc("/interwiki", handlerInterwiki) +} + +func handlerInterwiki(w http.ResponseWriter, rq *http.Request) { + viewInterwiki(viewutil.MetaFrom(w, rq)) +} + +type interwikiData struct { + *viewutil.BaseData + Entries []*Wiki + // Emojies contains emojies that represent wiki engines. Emojies[i] is an emoji for Entries[i].Engine + Emojies []string + CanEdit bool +} + +func viewInterwiki(meta viewutil.Meta) { + viewutil.ExecutePage(meta, chainInterwiki, interwikiData{ + BaseData: &viewutil.BaseData{}, + Entries: theMap.list, + Emojies: emojiesForEngines(theMap.list), + CanEdit: meta.U.Group == "admin", + }) +} + +func emojiesForEngines(list []*Wiki) (emojies []string) { + for _, entry := range list { + emojies = append(emojies, entry.Engine.EmojiWithName()) + } + return emojies +} diff --git a/interwiki/wiki.go b/interwiki/wiki.go index 9ffad01..a1595db 100644 --- a/interwiki/wiki.go +++ b/interwiki/wiki.go @@ -20,6 +20,26 @@ const ( Generic ) +// EmojiWithName returns a Unicode emoji that kinda represents the engine and the engine name. One day we might move to actual images. OK for now. +func (we WikiEngine) EmojiWithName() string { + switch we { + case Mycorrhiza: + return "🍄 Mycorrhiza" + case OddMuse: + return "🐫 OddMuse" + case MediaWiki: + return "🌻 MediaWiki" + case MoinMoin1: + return "Ⓜ️ MoinMoin 1.9" + case MoinMoin2: + return "Ⓜ️ MoinMoin 2.*" + case DokuWiki: + return "📝 DokuWiki" + default: + return "🌐 Generic" + } +} + // Wiki is an entry in the interwiki map. type Wiki struct { // Names is a slice of link prefices that correspond to this wiki. diff --git a/main.go b/main.go index ad09d2a..44e6924 100644 --- a/main.go +++ b/main.go @@ -7,6 +7,7 @@ package main import ( "github.com/bouncepaw/mycorrhiza/backlinks" "github.com/bouncepaw/mycorrhiza/categories" + "github.com/bouncepaw/mycorrhiza/interwiki" "github.com/bouncepaw/mycorrhiza/migration" "github.com/bouncepaw/mycorrhiza/viewutil" "log" @@ -51,7 +52,7 @@ func main() { migration.MigrateHeadingsMaybe() shroom.SetHeaderLinks() categories.Init() - // interwiki.Init() + interwiki.Init() // Static files: static.InitFS(files.StaticFiles()) diff --git a/static/default.css b/static/default.css index d3ffa91..0c69515 100644 --- a/static/default.css +++ b/static/default.css @@ -857,11 +857,11 @@ kbd { } /* - * About page + * Definition list */ -.about-page dt { +dt { font-weight: bold; } -.about-page dd + dt { +dd + dt { margin-top: .5rem; } \ No newline at end of file diff --git a/web/web.go b/web/web.go index 8b3eda1..ad6d585 100644 --- a/web/web.go +++ b/web/web.go @@ -8,6 +8,7 @@ import ( "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" "io" "net/http" @@ -56,6 +57,7 @@ func Handler() http.Handler { misc.InitHandlers(wikiRouter) hypview.Init() histweb.InitHandlers(wikiRouter) + interwiki.InitHandlers(wikiRouter) // Admin routes. if cfg.UseAuth {