mirror of
https://github.com/osmarks/mycorrhiza.git
synced 2024-10-30 03:36:16 +00:00
c2619a6b82
Implements #198
87 lines
2.2 KiB
Go
87 lines
2.2 KiB
Go
package interwiki
|
||
|
||
import (
|
||
"fmt"
|
||
"github.com/bouncepaw/mycorrhiza/util"
|
||
"log"
|
||
)
|
||
|
||
// WikiEngine is an enumeration of supported interwiki targets.
|
||
type WikiEngine string
|
||
|
||
const (
|
||
Mycorrhiza WikiEngine = "mycorrhiza"
|
||
Betula WikiEngine = "betula"
|
||
Agora WikiEngine = "agora"
|
||
// Generic is any website.
|
||
Generic WikiEngine = "generic"
|
||
)
|
||
|
||
func (we WikiEngine) Valid() bool {
|
||
switch we {
|
||
case Mycorrhiza, Betula, Agora, Generic:
|
||
return true
|
||
}
|
||
return false
|
||
}
|
||
|
||
// Wiki is an entry in the interwiki map.
|
||
type Wiki struct {
|
||
// Name is the name of the wiki, and is also one of the possible prefices.
|
||
Name string `json:"name"`
|
||
|
||
// Aliases are alternative prefices you can use instead of Name. This slice can be empty.
|
||
Aliases []string `json:"aliases,omitempty"`
|
||
|
||
// URL is the address of the wiki.
|
||
URL string `json:"url"`
|
||
|
||
// LinkHrefFormat is a format string for interwiki links. See Mycomarkup internal docs hidden deep inside for more information.
|
||
//
|
||
// This field is optional. If it is not set, it is derived from other data. See the code.
|
||
LinkHrefFormat string `json:"link_href_format"`
|
||
|
||
ImgSrcFormat string `json:"img_src_format"`
|
||
|
||
// Engine is the engine of the wiki. Invalid values will result in a start-up error.
|
||
Engine WikiEngine `json:"engine"`
|
||
}
|
||
|
||
func (w *Wiki) canonize() {
|
||
switch {
|
||
case w.Name == "":
|
||
log.Fatalln("Cannot have a wiki in the interwiki map with no name")
|
||
case w.URL == "":
|
||
log.Fatalf("Wiki ‘%s’ has no URL\n", w.Name)
|
||
case !w.Engine.Valid():
|
||
log.Fatalf("Unknown engine ‘%s’ for wiki ‘%s’\n", w.Engine, w.Name)
|
||
}
|
||
|
||
w.Name = util.CanonicalName(w.Name)
|
||
for i, alias := range w.Aliases {
|
||
w.Aliases[i] = util.CanonicalName(alias)
|
||
}
|
||
|
||
if w.LinkHrefFormat == "" {
|
||
switch w.Engine {
|
||
case Mycorrhiza:
|
||
w.LinkHrefFormat = fmt.Sprintf("%s/hypha/{NAME}", w.URL)
|
||
case Betula:
|
||
w.LinkHrefFormat = fmt.Sprintf("%s/{BETULA-NAME}", w.URL)
|
||
case Agora:
|
||
w.LinkHrefFormat = fmt.Sprintf("%s/node/{NAME}", w.URL)
|
||
default:
|
||
w.LinkHrefFormat = fmt.Sprintf("%s/{NAME}", w.URL)
|
||
}
|
||
}
|
||
|
||
if w.ImgSrcFormat == "" {
|
||
switch w.Engine {
|
||
case Mycorrhiza:
|
||
w.ImgSrcFormat = fmt.Sprintf("%s/binary/{NAME}", w.URL)
|
||
default:
|
||
w.ImgSrcFormat = fmt.Sprintf("%s/{NAME}", w.URL)
|
||
}
|
||
}
|
||
}
|