diff options
Diffstat (limited to 'page')
| -rw-r--r-- | page/checkup.go | 85 | ||||
| -rw-r--r-- | page/misc.go | 31 | ||||
| -rw-r--r-- | page/page.go | 33 |
3 files changed, 116 insertions, 33 deletions
diff --git a/page/checkup.go b/page/checkup.go new file mode 100644 index 0000000..c4501c2 --- /dev/null +++ b/page/checkup.go @@ -0,0 +1,85 @@ +package page + +import ( + "fmt" + "os" + "path/filepath" + "reflect" + "strings" +) + +// Checkup will return a map[string]PageList of all the pages broken down by +// the status of their fields. For instance, whehter or not they have a date +func (p *Page) Checkup() (map[string]PageList, error) { + Logger.Println("Checking up on all files...") + + out := make(map[string]PageList) + + filepath.Walk(filepath.Dir("."), + 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 { + Logger.Println("Error encountered: ", err) + return err + } + + r := reflect.ValueOf(*p2) + + for i := 0; i < r.NumField(); i++ { + key := "" + f := r.Field(i) + fi := r.Type().Field(i) + + if fi.PkgPath != "" { + continue + } + + name := fi.Name + + switch f.Interface().(type) { + case string: + if f.String() == "" { + key = fmt.Sprintf("Empty \"%s\"", name) + } else { + key = fmt.Sprintf("Not Empty \"%s\"", name) + } + case bool: + if !f.Bool() { + key = fmt.Sprintf("\"%s\" is false", name) + } else { + key = fmt.Sprintf("\"%s\" is true", name) + } + case map[string]interface{}: + case *PageTime: + if f.IsNil() { + key = fmt.Sprintf("\"%s\" is empty", name) + } + } + + if key == "" { + continue + } + + if _, ok := out[key]; !ok { + out[key] = []*Page{p2} + } else { + out[key] = append(out[key], p2) + } + + } + + } + + return nil + }) + + return out, nil +} diff --git a/page/misc.go b/page/misc.go new file mode 100644 index 0000000..0dbd059 --- /dev/null +++ b/page/misc.go @@ -0,0 +1,31 @@ +package page + +import ( + "encoding/json" + + "gopkg.in/yaml.v3" +) + +func (p Page) EncodeYaml(data interface{}) string { + if data == nil { + data = p + } + + b, err := yaml.Marshal(data) + if err != nil { + Logger.Println("Encountered error in EncodeYaml: ", err) + } + return string(b) +} + +func (p Page) EncodeJson(data interface{}) string { + if data == nil { + data = p + } + + b, err := json.MarshalIndent(data, "", " ") + if err != nil { + Logger.Println("Encountered error in EncodeJson: ", err) + } + return string(b) +} diff --git a/page/page.go b/page/page.go index 8b84099..e984383 100644 --- a/page/page.go +++ b/page/page.go @@ -25,7 +25,6 @@ package page import ( "bufio" "bytes" - "encoding/json" "fmt" "io" "log" @@ -44,7 +43,6 @@ import ( type Page struct { path string Title string - Head string Description string AuthorName string AuthorEmail string @@ -112,34 +110,9 @@ func (p *Page) Render(wr io.Writer) error { 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) @@ -203,9 +176,3 @@ func (p *Page) RenderBody() (string, error) { func (p Page) String() string { return fmt.Sprintf("Page: %s", p.path) } - -// StringDetail prints a detailed string of the page -func (p Page) StringDetail() string { - b, _ := json.MarshalIndent(p, "", " ") - return fmt.Sprintf("Page: %s\n%s\n", p.path, b) -} |
