Switch to "html/template" and improve the package page

This improves the look of each "package" page, especially with more useful information and links. 👍

Also, this switches the Git clone URLs to "https" (see https://help.github.com/articles/which-remote-url-should-i-use/), and adds an explicit "URL" for each package so we can link to browsable source code.
This commit is contained in:
Tianon Gravi 2015-08-08 09:01:44 -07:00
parent 2fd844bd80
commit 4f39be8f0c
3 changed files with 41 additions and 10 deletions

26
main.go
View file

@ -1,8 +1,10 @@
package main package main
import ( import (
"bytes"
"encoding/json" "encoding/json"
"fmt" "fmt"
"html/template"
"io/ioutil" "io/ioutil"
"net/http" "net/http"
) )
@ -12,6 +14,7 @@ type Package struct {
Repo string Repo string
Path string Path string
Packages []string Packages []string
Url string
} }
func (p Package) GetRoutes() (ret []string) { func (p Package) GetRoutes() (ret []string) {
@ -38,10 +41,17 @@ func writePageError(w http.ResponseWriter, message string, code int) error {
} }
func writePageGo(w http.ResponseWriter, path string, pkg Package, code int) error { func writePageGo(w http.ResponseWriter, path string, pkg Package, code int) error {
return writePage(w, fmt.Sprintf(`<!DOCTYPE html><html> t, err := template.ParseFiles("template.html")
<head><meta charset="utf-8"><title>%s</title><meta name="go-import" content="%s %s %s"></head> if err != nil {
<body>%s</body> return err
</html>`, "Package!", path, "git", pkg.Repo, "Package!"), code) }
pkg.Path = path
var page bytes.Buffer
err = t.Execute(&page, pkg)
if err != nil {
return err
}
return writePage(w, page.String(), code)
} }
// }}} // }}}
@ -81,10 +91,14 @@ func main() {
mux.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) { mux.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {
route := req.URL.Path route := req.URL.Path
var err error
if val, ok := routes[route]; ok { if val, ok := routes[route]; ok {
writePageGo(w, "pault.ag"+val.Path, val, 200) err = writePageGo(w, "pault.ag"+val.Path, val, 200)
} else { } else {
writePageError(w, ":(", 404) err = writePageError(w, ":(", 404)
}
if err != nil {
writePageError(w, fmt.Sprintf("error: %v", err), 400)
} }
}) })
http.ListenAndServe(":8000", mux) http.ListenAndServe(":8000", mux)

View file

@ -1,9 +1,11 @@
[ [
{"Repo": "git://github.com/paultag/go-debian", {"Repo": "https://github.com/paultag/go-debian.git",
"Path": "/go/debian", "Path": "/go/debian",
"Packages": ["control", "dependency", "version"]}, "Packages": ["control", "dependency", "version"],
"Url": "https://github.com/paultag/go-debian"},
{"Repo": "git://github.com/paultag/go-topsort", {"Repo": "https://github.com/paultag/go-topsort.git",
"Path": "/go/topsort", "Path": "/go/topsort",
"Packages": []} "Packages": [],
"Url": "https://github.com/paultag/go-topsort"}
] ]

15
template.html Normal file
View file

@ -0,0 +1,15 @@
<!DOCTYPE html><html>
<head>
<meta charset="utf-8">
<title>{{ .Path }}</title>
<meta name="go-import" content="{{ .Path }} git {{ .Repo }}">
</head>
<body>
<div>package: <code>{{ .Path }}</code></div>
<div>source: <a href="{{ .Url }}">{{ .Url }}</a></div>
<div>godocs:<ul>
<li><a href="https://godoc.org/{{ .Path }}">{{ .Path }}</a></li>{{range .Packages}}
<li><a href="https://godoc.org/{{ $.Path }}/{{ . }}">{{ $.Path }}/{{ . }}</a></li>{{end}}
</ul></div>
</body>
</html>