aboutsummaryrefslogtreecommitdiff
path: root/write.go
diff options
context:
space:
mode:
authorGravatar Grayson Koonce <grayson.koonce@gmail.com> 2016-09-30 15:34:03 -0700
committerGravatar GitHub <noreply@github.com> 2016-09-30 15:34:03 -0700
commitcba441714f357b9b25d5c0cacbfb2e376bbbe679 (patch)
tree2db58d65d94946f0c5ed6b07162bdcb648a255ca /write.go
parent4754d5ec7e5d162585f2ebdb259132330e9fdf55 (diff)
downloadsally-cba441714f357b9b25d5c0cacbfb2e376bbbe679.tar.gz
sally-cba441714f357b9b25d5c0cacbfb2e376bbbe679.tar.zst
sally-cba441714f357b9b25d5c0cacbfb2e376bbbe679.zip
Starting point (#1)
Diffstat (limited to '')
-rw-r--r--write.go94
1 files changed, 94 insertions, 0 deletions
diff --git a/write.go b/write.go
new file mode 100644
index 0000000..703b386
--- /dev/null
+++ b/write.go
@@ -0,0 +1,94 @@
+package main
+
+import (
+ "bytes"
+ "fmt"
+ "html/template"
+ "io/ioutil"
+ "os"
+ "path/filepath"
+)
+
+const (
+ indexTplPath = "templates/index.tpl"
+ packagesTplPath = "templates/package.tpl"
+)
+
+// Write takes a Config and produces a static html site to outDir
+func Write(c Config, outDir string) error {
+ if err := os.MkdirAll(outDir, 0755); err != nil {
+ return err
+ }
+ if err := writeIndex(c, outDir); err != nil {
+ return err
+ }
+ if err := writePackages(c, outDir); err != nil {
+ return err
+ }
+ return nil
+}
+
+func writeIndex(c Config, outDir string) error {
+ tpl, err := Asset(indexTplPath)
+ if err != nil {
+ return err
+ }
+
+ t, err := template.New(filepath.Base(indexTplPath)).Parse(string(tpl))
+ if err != nil {
+ return err
+ }
+
+ buf := new(bytes.Buffer)
+ if err := t.Execute(buf, c); err != nil {
+ return err
+ }
+
+ err = ioutil.WriteFile(fmt.Sprintf("%s/index.html", outDir), buf.Bytes(), 0644)
+ if err != nil {
+ return err
+ }
+
+ fmt.Println(buf.String())
+ return nil
+}
+
+func writePackages(c Config, outDir string) error {
+ tpl, err := Asset(packagesTplPath)
+ if err != nil {
+ return err
+ }
+
+ t, err := template.New(filepath.Base(packagesTplPath)).Parse(string(tpl))
+ if err != nil {
+ return err
+ }
+
+ for name, pkg := range c.Packages {
+ canonicalURL := fmt.Sprintf("%s/%s", c.URL, name)
+ tpl := struct {
+ Name string
+ CanonicalURL string
+ GodocURL string
+ Package
+ }{
+ Name: name,
+ CanonicalURL: canonicalURL,
+ GodocURL: fmt.Sprintf("https://godoc.org/%s", canonicalURL),
+ Package: pkg,
+ }
+
+ buf := new(bytes.Buffer)
+ if err := t.Execute(buf, tpl); err != nil {
+ return err
+ }
+
+ if err := ioutil.WriteFile(fmt.Sprintf("%s/%s.html", outDir, name), buf.Bytes(), 0644); err != nil {
+ return err
+ }
+
+ fmt.Println(buf)
+ }
+
+ return nil
+}