diff options
Diffstat (limited to 'page/page.go')
| -rw-r--r-- | page/page.go | 69 |
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 +} |
