aboutsummaryrefslogtreecommitdiff
path: root/local
diff options
context:
space:
mode:
authorMitchell Riedstra <mitch@riedstra.dev>2021-02-15 15:31:37 -0500
committerMitchell Riedstra <mitch@riedstra.dev>2021-02-15 15:32:05 -0500
commitfe9ec7a0b45c9fd23a615a8b95ade3e9c1ea2d12 (patch)
tree80844a62d5d18b30862cfdc610aae88713fe97d9 /local
parentd83f4bca3f7026696a41225caac11807ed06fc2f (diff)
downloadgo-website-0.0.12.tar.gz
go-website-0.0.12.tar.xz
Another re-structure. Deleting code is wonderful.v0.0.12
Diffstat (limited to 'local')
-rw-r--r--local/index.go71
-rw-r--r--local/page.go199
-rw-r--r--local/pagelist.go21
-rw-r--r--local/time.go23
4 files changed, 0 insertions, 314 deletions
diff --git a/local/index.go b/local/index.go
deleted file mode 100644
index 7b821f6..0000000
--- a/local/index.go
+++ /dev/null
@@ -1,71 +0,0 @@
-package local
-
-import (
- "fmt"
- "os"
- "path/filepath"
- "strings"
- "time"
-)
-
-var pageIndex map[string]PageList
-
-// RebuildIndex can be called in order to rebuild the entire website
-// index
-func (p *Page) RebuildIndex() error {
- pageIndex = nil
- _, err := p.Index()
- return err
-}
-
-// 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(), Suffix) {
-
- p2 := NewPage(strings.ReplaceAll(path, Suffix, ""))
- 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
-}
-
-func (p *Page) Time() time.Time {
- return p.Date.Time
-}
diff --git a/local/page.go b/local/page.go
deleted file mode 100644
index 0ccaf2e..0000000
--- a/local/page.go
+++ /dev/null
@@ -1,199 +0,0 @@
-// local implements the website backed by a local filesystem.
-//
-// Reading the base template off the disk, then any markdown files which are
-// split into two sections by the DocumentSplit global variable. The first
-// section is parsed as yaml to populate the Page struct. The second portion is
-// markdown, first executed as part of the text/template then rendered by
-// blackfriday.
-//
-// Usage:
-//
-// import (
-// "fmt"
-// "os"
-// site "riedstra.dev/mitch/go-website/local"
-// )
-// // Where some/path.md exists
-// p := site.NewPage("/some/path")
-// // Dump the rendered HTML to stdout
-// err := p.Render(os.Stdout)
-// if err != nil {
-// fmt.Fprintln(os.Stderr, err)
-// }
-package local
-
-import (
- "bufio"
- "bytes"
- "fmt"
- "io"
- "os"
- "text/template"
-
- "github.com/russross/blackfriday"
- "gopkg.in/yaml.v3"
-)
-
-// Page should not be created directly as it will not set the interal path
-// properly. Use NewPage instead.
-//
-// The exported fields can be filled in the yaml at the top of a page and
-// utilized within.
-type Page struct {
- path string
- Title string
- Head string
- Description string
- // Tags to apply to the page in question. Useful for Index()
- Tags map[string]interface{}
- Date *PageTime
- Published bool
- Vars map[string]interface{}
- markdown []byte
-}
-
-// Global is meant to be supplied by external users of this package to populate
-// globally accessable information across all of the templates accessiable via
-// .Global care must be taken when utilizing this functionality
-var Global interface{}
-
-// BaseTemplate can be adjusted to change the base template used in rendering
-var BaseTemplate = "inc/base.html"
-
-// Suffix is applied to all pages for reading off of the disk
-var Suffix = ".md"
-
-// DocumentSplit is used to split the .md files into yaml and markdown
-var DocumentSplit = "|---\n"
-
-// NewPage returns a page struct with the path populated
-func NewPage(pth string) *Page {
- return &Page{path: pth}
-}
-
-// NewPage Allow for the creation of a new page from the current page, does
-// not inlcude any information about the current page.
-func (p Page) NewPage(pth string) *Page {
- return NewPage(pth)
-}
-
-// Path gets the current path set on the struct for the page in question
-// Useful if you're say iterating across tags to print out a list of
-// relevant posts on a blog or so by topic.
-func (p Page) Path() string {
- return p.path
-}
-
-// Global is specifically for use inside of a page markdown file or
-// in a base template. This simply returns the package Global variable
-func (p *Page) Global() interface{} {
- return Global
-}
-
-// SetVars Will set to `nil` if provided
-func (p *Page) SetVars(vars map[string]interface{}) {
- p.Vars = vars
-}
-
-// 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 + Suffix)
- 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)
-}
diff --git a/local/pagelist.go b/local/pagelist.go
deleted file mode 100644
index ea76117..0000000
--- a/local/pagelist.go
+++ /dev/null
@@ -1,21 +0,0 @@
-package local
-
-import (
- "sort"
-)
-
-type PageList []*Page
-
-func (p PageList) SortDate() PageList {
- sort.Slice(p, func(i, j int) bool {
- return p[i].Time().After(p[j].Time())
- })
- return p
-}
-
-func (p PageList) SortDateReverse() PageList {
- sort.Slice(p, func(i, j int) bool {
- return p[i].Time().Before(p[j].Time())
- })
- return p
-}
diff --git a/local/time.go b/local/time.go
deleted file mode 100644
index 27efc88..0000000
--- a/local/time.go
+++ /dev/null
@@ -1,23 +0,0 @@
-package local
-
-import (
- "gopkg.in/yaml.v3"
- "time"
-)
-
-type PageTime struct {
- time.Time
-}
-
-// TimeFormat is the format string used when unmarshaling the time
-// from the yaml information.
-var TimeFormat = "01.02.2006 15:04:05 MST"
-
-func (pt *PageTime) UnmarshalYAML(n *yaml.Node) error {
- t, err := time.Parse(TimeFormat, n.Value)
- if err != nil {
- return err
- }
- pt.Time = t
- return nil
-}