aboutsummaryrefslogtreecommitdiff
path: root/page/page.go
diff options
context:
space:
mode:
Diffstat (limited to 'page/page.go')
-rw-r--r--page/page.go186
1 files changed, 0 insertions, 186 deletions
diff --git a/page/page.go b/page/page.go
deleted file mode 100644
index c5230c6..0000000
--- a/page/page.go
+++ /dev/null
@@ -1,186 +0,0 @@
-package page
-
-import (
- "bufio"
- "bytes"
- "fmt"
- "io"
- "os"
- "path/filepath"
- "strings"
- "text/template"
-
- "github.com/russross/blackfriday"
- "gopkg.in/yaml.v3"
-)
-
-type Page struct {
- Path string
- Title string
- Head string
- Description string
- Tags map[string]interface{}
- Date *PageTime
- Published bool
- Vars map[string]interface{}
- Markdown []byte
-}
-
-// Can be adjusted to change the base template used in rendering
-var BaseTemplate = "inc/base.html"
-
-// Used to split the .md files into yaml and markdown
-var DocumentSplit = "|---\n"
-
-// Renders a page
-func (p *Page) Render(wr io.Writer) error {
- if err := p.Read(); 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"}}
- {{.RenderHead}}
- {{end}}
- `)
- if err != nil {
- return err
- }
- }
-
- return t.Execute(wr, p)
-}
-
-func (p *Page) RenderHead() (string, error) {
- buf := &bytes.Buffer{}
- t, err := template.New("Head").Parse(p.Head)
- if err != nil {
- return "", err
- }
- err = t.Execute(buf, p)
- if err != nil {
- return "", err
- }
- return string(buf.Bytes()), nil
-}
-
-// Reads in the special markdown file format for the website off of the disk
-func (p *Page) Read() error {
- yamlBuf := bytes.NewBuffer(nil)
- markdownBuf := bytes.NewBuffer(nil)
-
- fh, err := os.Open(p.Path + ".md")
- if err != nil {
- return err
- }
- defer fh.Close()
- rdr := bufio.NewReader(fh)
-
- // Read in the file and split between markdown and yaml buffers
- yamlDone := false
- for {
-
- bytes, err := rdr.ReadBytes('\n')
- if err == io.EOF {
- break
- } else if err != nil {
- return err
- }
-
- // Is this the line where we stop reading the yaml and start reading markdown?
- if DocumentSplit == string(bytes) && !yamlDone {
- yamlDone = true
- continue
- }
-
- if !yamlDone {
- yamlBuf.Write(bytes)
- } else {
- markdownBuf.Write(bytes)
- }
- }
-
- err = yaml.Unmarshal(yamlBuf.Bytes(), p)
- if err != nil {
- return err
- }
-
- p.Markdown = markdownBuf.Bytes()
- return nil
-}
-
-func (p *Page) RenderBody() (string, error) {
- buf := &bytes.Buffer{}
- t, err := template.New("Body").Parse(string(p.Markdown))
- if err != nil {
- return "", err
- }
-
- err = t.Execute(buf, p)
- if err != nil {
- return "", err
- }
-
- return string(blackfriday.Run(buf.Bytes())), nil
-}
-
-func (p Page) String() string {
- return fmt.Sprintf("Page: %s", p.Path)
-}
-
-var pageIndex map[string]PageList
-
-// Index returns a map of all pages below the current Page's Path seperated
-// into their respective tags If a Page has multiple tags it will be listed
-// under each
-func (p *Page) Index() (map[string]PageList, error) {
- if pageIndex != nil {
- return pageIndex, nil
- }
- fmt.Fprintln(os.Stderr, "Rebuilding index...")
-
- out := make(map[string]PageList)
-
- var pageErr error
-
- filepath.Walk(filepath.Dir(p.Path),
- func(path string, info os.FileInfo, err error) error {
- if err != nil {
- return err
- }
-
- if !info.IsDir() && strings.HasSuffix(info.Name(), ".md") {
-
- p2 := &Page{Path: strings.ReplaceAll(path, ".md", "")}
- err = p2.Read()
-
- if err != nil {
- pageErr = err
- fmt.Fprintln(os.Stderr, "Error encountered: ", err)
- return err
- }
-
- for tag, _ := range p2.Tags {
- if _, ok := out[tag]; !ok {
- out[tag] = []*Page{p2}
- } else {
- out[tag] = append(out[tag], p2)
- }
- }
-
- }
-
- return nil
- })
-
- pageIndex = out
-
- return out, nil
-}