diff --git a/content.go b/content.go new file mode 100644 index 0000000..b7ceba7 --- /dev/null +++ b/content.go @@ -0,0 +1,82 @@ +package caddyhugo + +import ( + "fmt" + "os" + "path" + "path/filepath" + "sort" + "time" + + "github.com/gohugoio/hugo/hugolib" +) + +type Content struct { + Filename string + Modtime time.Time + Metadata *Metadata +} + +type Metadata struct { + Title string + Path string + Date, Lastmod time.Time +} + +func ListContent() ([]Content, error) { + return nil, nil +} + +func GetContent(siteRoot string, sites *hugolib.HugoSites) ([]Content, error) { + var files = []Content{} + + err := filepath.Walk(path.Join(siteRoot, "content"), func(name string, fi os.FileInfo, err error) error { + if err != nil { + return err + } + + if fi.IsDir() { + return nil + } + + name, err = filepath.Rel(siteRoot, name) + if err != nil { + return err + } + + files = append(files, Content{ + Filename: name, + Modtime: fi.ModTime(), + }) + return nil + }) + + sort.Slice(files, func(i, j int) bool { + return files[i].Modtime.Before(files[j].Modtime) + }) + + if err != nil { + fmt.Println(err) + return nil, err + } + + pages := sites.Pages() + for _, page := range pages { + if page.Kind == hugolib.KindPage { + for i, file := range files { + path := path.Join("content", page.Source.Path()) + if file.Filename == path { + files[i].Metadata = &Metadata{ + Title: page.Title, + Path: path, + Date: page.Date, + Lastmod: page.Lastmod, + } + break + } + } + } + } + + return files, nil +} diff --git a/templates.go b/templates.go index a8a2196..ad4b75a 100644 --- a/templates.go +++ b/templates.go @@ -8,36 +8,14 @@ import ( "path" "path/filepath" "strings" - "time" "git.stephensearles.com/stephen/acedoc" - "github.com/gohugoio/hugo/hugolib" "github.com/mholt/caddy/caddyhttp/httpserver" ) -type Content struct { - Title string - Path string - Date, Lastmod time.Time -} - func (t tmplData) Content() ([]Content, error) { - var files []Content - - pages := t.HugoSites.Pages().ByDate() - for _, page := range pages { - if page.Kind == hugolib.KindPage { - files = append(files, Content{ - Title: page.Title, - Path: path.Join("content", page.Source.Path()), - Date: page.Date, - Lastmod: page.Lastmod, - }) - } - } - - return files, nil + return GetContent(t.Site.Root, t.HugoSites) } func (t tmplData) ContentTypes() ([]string, error) { @@ -423,8 +401,29 @@ var AuthorPage = `

Edit content:

{{ range .Content }} - - {{- end }} + + {{ if .Metadata }} + + + {{ else }} + + + {{ end }} + + {{- end }}
{{ .Title }}{{ .Date.Format $timeFormat }}{{ if not (.Lastmod.Equal .Date) }} (last modified {{.Lastmod.Format $timeFormat }}){{end}}
+ + {{ .Metadata.Title }} + + + {{ .Metadata.Date.Format $timeFormat }} + {{ if not (.Metadata.Lastmod.Equal .Metadata.Date) }} + (last modified {{.Metadata.Lastmod.Format $timeFormat }}) + {{end}} + + + {{ .Filename }} + + (unable to load metadata)
`