aboutsummaryrefslogtreecommitdiff
path: root/page
diff options
context:
space:
mode:
Diffstat (limited to 'page')
-rw-r--r--page/page.go69
1 files changed, 69 insertions, 0 deletions
diff --git a/page/page.go b/page/page.go
new file mode 100644
index 0000000..83e3c9e
--- /dev/null
+++ b/page/page.go
@@ -0,0 +1,69 @@
+package page
+
+import (
+ "fmt"
+ "io"
+ "io/ioutil"
+ "text/template"
+ "time"
+
+ "gopkg.in/russross/blackfriday.v2"
+ "gopkg.in/yaml.v2"
+)
+
+type Page struct {
+ Name string
+ Head string
+ Body string
+ Date *time.Time
+ Published bool
+}
+
+// Can be adjusted to change the base template used in rendering
+var BaseTemplate = "inc/base.html"
+
+func (p *Page) Render(wr io.Writer) error {
+ if err := p.readYaml(); err != nil {
+ return err
+ }
+ if err := p.readMarkdown(); err != nil {
+ return err
+ }
+
+ t, err := template.ParseFiles(BaseTemplate)
+ if err != nil {
+ return err
+ }
+
+ // Automatically pull from the yml file if applicable
+ if p.Head != "" {
+ t, err = t.Parse(`
+ {{define "head"}}
+ {{.Head}}
+ {{end}}
+ `)
+ if err != nil {
+ return err
+ }
+ }
+
+ return t.Execute(wr, p)
+}
+
+func (p *Page) readYaml() error {
+ fname := p.Name + ".yml"
+ b, err := ioutil.ReadFile(fname)
+ if err != nil {
+ return fmt.Errorf("While unmarshaling file '%s': %v", fname, err)
+ }
+ return yaml.Unmarshal(b, p)
+}
+
+func (p *Page) readMarkdown() error {
+ b, err := ioutil.ReadFile(p.Name + ".md")
+ if err != nil {
+ return err
+ }
+ p.Body = string(blackfriday.Run(b))
+ return nil
+}