mirror of
https://github.com/osmarks/mycorrhiza.git
synced 2024-12-13 05:50:27 +00:00
Make it render hyphae independently with some UI and add configs
This commit is contained in:
parent
de7b7faca2
commit
fc3f2963c3
15
config.go
Normal file
15
config.go
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
const (
|
||||||
|
FooterText = `
|
||||||
|
<hr>
|
||||||
|
This website runs <a href="https://github.com/bouncepaw/mycorrhiza">MycorrhizaWiki</a>.
|
||||||
|
`
|
||||||
|
TitleTemplate = `%s at MycorrhizaWiki`
|
||||||
|
DefaultStyles = `
|
||||||
|
<link rel="stylesheet" href="/sys/main.css?action=raw">
|
||||||
|
`
|
||||||
|
DefaultHeader = `
|
||||||
|
<h1 class="header__site-title">MycorrhizaWiki</h1>
|
||||||
|
` // TODO: Search input
|
||||||
|
)
|
2
go.mod
2
go.mod
@ -3,7 +3,7 @@ module github.com/bouncepaw/mycorrhiza
|
|||||||
go 1.14
|
go 1.14
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/gomarkdown/markdown v0.0.0-20200609195525-3f9352745725 // indirect
|
github.com/gomarkdown/markdown v0.0.0-20200609195525-3f9352745725
|
||||||
github.com/gorilla/mux v1.7.4
|
github.com/gorilla/mux v1.7.4
|
||||||
github.com/sirupsen/logrus v1.6.0 // indirect
|
github.com/sirupsen/logrus v1.6.0 // indirect
|
||||||
gopkg.in/ini.v1 v1.57.0
|
gopkg.in/ini.v1 v1.57.0
|
||||||
|
46
main.gg
46
main.gg
@ -1,46 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"github.com/gorilla/mux"
|
|
||||||
"log"
|
|
||||||
"net/http"
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
func RegexForHypha(s string) string {
|
|
||||||
return s + ":[^\\s\\d:/?&\\\\][^:?&\\\\]*}"
|
|
||||||
}
|
|
||||||
|
|
||||||
func EditFillHandler(w http.ResponseWriter, r *http.Request) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
func HyphaHandler(w http.ResponseWriter, r *http.Request) {
|
|
||||||
vars := mux.Vars(r)
|
|
||||||
fmt.Fprintf(w, "Accessing hypha %v\n", vars["hypha"])
|
|
||||||
fmt.Fprintf(w, "Request at %v", r)
|
|
||||||
}
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
r := mux.NewRouter()
|
|
||||||
r.Queries(
|
|
||||||
"action", "edit",
|
|
||||||
"fill", "{templateName}").
|
|
||||||
Path(RegexForHypha("/{hypha")).
|
|
||||||
HandlerFunc(EditFillHandler)
|
|
||||||
|
|
||||||
r.HandleFunc(RegexForHypha("/{hypha"), HyphaHandler)
|
|
||||||
r.HandleFunc("/kek", HyphaHandler)
|
|
||||||
http.Handle("/", r)
|
|
||||||
|
|
||||||
srv := &http.Server{
|
|
||||||
Handler: r,
|
|
||||||
Addr: "127.0.0.1:8000",
|
|
||||||
// Good practice: enforce timeouts for servers you create!
|
|
||||||
WriteTimeout: 15 * time.Second,
|
|
||||||
ReadTimeout: 15 * time.Second,
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Fatal(srv.ListenAndServe())
|
|
||||||
}
|
|
20
main.go
20
main.go
@ -65,6 +65,26 @@ func main() {
|
|||||||
log.Println("Showing image of", rev.FullName)
|
log.Println("Showing image of", rev.FullName)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
r.HandleFunc("/{hypha:"+hyphaPattern+"}",
|
||||||
|
func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
vars := mux.Vars(r)
|
||||||
|
rev, err := GetRevision(hyphae, vars["hypha"], "0")
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Failed to show image of", rev.FullName)
|
||||||
|
w.WriteHeader(http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
html, err := rev.Render(hyphae)
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Failed to show image of", rev.FullName)
|
||||||
|
w.WriteHeader(http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
w.WriteHeader(http.StatusOK)
|
||||||
|
fmt.Fprint(w, HyphaPage(hyphae, rev, html))
|
||||||
|
log.Println("Rendering", rev.FullName)
|
||||||
|
})
|
||||||
|
|
||||||
r.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
r.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
||||||
w.Header().Set("Content-Type", "text/html; charset=utf-8")
|
w.Header().Set("Content-Type", "text/html; charset=utf-8")
|
||||||
w.WriteHeader(http.StatusOK)
|
w.WriteHeader(http.StatusOK)
|
||||||
|
49
render.go
Normal file
49
render.go
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Layout(f map[string]string) string {
|
||||||
|
template := `
|
||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>%s</title>
|
||||||
|
%s
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<header class="header">%s</header>
|
||||||
|
<main class="main">%s</main>
|
||||||
|
<aside class="sidebar">%s</aside>
|
||||||
|
<footer class="footer">%s</footer>
|
||||||
|
%s
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
`
|
||||||
|
return fmt.Sprintf(template, f["title"], f["head"], f["header"], f["main"], f["sidebar"], FooterText, f["bodyBottom"])
|
||||||
|
}
|
||||||
|
|
||||||
|
func HyphaPage(hyphae map[string]*Hypha, rev Revision, content string) string {
|
||||||
|
template := `
|
||||||
|
<div class="naviwrapper">
|
||||||
|
<form class="naviwrapper__buttons">
|
||||||
|
<input type="submit" name="action" value="edit"/>
|
||||||
|
<input type="submit" name="action" value="getBinary"/>
|
||||||
|
<input type="submit" name="action" value="zen"/>
|
||||||
|
<input type="submit" name="action" value="raw"/>
|
||||||
|
</form>
|
||||||
|
%s
|
||||||
|
</div>
|
||||||
|
`
|
||||||
|
args := map[string]string{
|
||||||
|
"title": fmt.Sprintf(TitleTemplate, rev.FullName),
|
||||||
|
"head": DefaultStyles,
|
||||||
|
"header": DefaultHeader,
|
||||||
|
"main": fmt.Sprintf(template, content),
|
||||||
|
"sidebar": "",
|
||||||
|
"footer": FooterText,
|
||||||
|
}
|
||||||
|
|
||||||
|
return Layout(args)
|
||||||
|
}
|
@ -53,7 +53,7 @@ func (r Revision) Render(hyphae map[string]*Hypha) (ret string, err error) {
|
|||||||
// If it is a binary hypha (we support only images for now):
|
// If it is a binary hypha (we support only images for now):
|
||||||
// TODO: support things other than images.
|
// TODO: support things other than images.
|
||||||
if r.MimeType != "application/x-hypha" {
|
if r.MimeType != "application/x-hypha" {
|
||||||
ret += fmt.Sprintf(`<img src="%s" class="page__image"/>`, r.BinaryRequest)
|
ret += fmt.Sprintf(`<img src="/%s" class="page__image"/>`, r.BinaryRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
contents, err := ioutil.ReadFile(r.TextPath)
|
contents, err := ioutil.ReadFile(r.TextPath)
|
||||||
|
Loading…
Reference in New Issue
Block a user