mirror of
https://git.sr.ht/~adnano/kiln
synced 2024-10-30 09:23:09 +00:00
Provide index file metadata to index templates
This commit is contained in:
parent
804de9b94d
commit
b4c3d7f442
35
dir.go
35
dir.go
|
@ -11,11 +11,13 @@ import (
|
||||||
|
|
||||||
// Dir represents a directory.
|
// Dir represents a directory.
|
||||||
type Dir struct {
|
type Dir struct {
|
||||||
Path string // Directory path.
|
Title string // Directory title.
|
||||||
Pages []*Page // Pages in this directory.
|
Content string // Directory index content.
|
||||||
Dirs []*Dir // Subdirectories.
|
Path string // Directory path.
|
||||||
files map[string][]byte // Static files.
|
Pages []*Page // Pages in this directory.
|
||||||
index *Page // The index page.
|
Dirs []*Dir // Subdirectories.
|
||||||
|
files map[string][]byte // Static files.
|
||||||
|
index *Page // The index page.
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewDir returns a new Dir with the given path.
|
// NewDir returns a new Dir with the given path.
|
||||||
|
@ -59,11 +61,12 @@ func (d *Dir) read(srcDir string, path string) error {
|
||||||
}
|
}
|
||||||
if pathpkg.Ext(name) == ".gmi" {
|
if pathpkg.Ext(name) == ".gmi" {
|
||||||
// Gather page data
|
// Gather page data
|
||||||
page := NewPage(path, content)
|
|
||||||
if name == "index.gmi" {
|
if name == "index.gmi" {
|
||||||
d.index = page
|
d.index = NewPage(d.Path, content)
|
||||||
|
d.Title = d.index.Title
|
||||||
|
d.Content = d.index.Content
|
||||||
} else {
|
} else {
|
||||||
d.Pages = append(d.Pages, page)
|
d.Pages = append(d.Pages, NewPage(path, content))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Static file
|
// Static file
|
||||||
|
@ -76,17 +79,14 @@ func (d *Dir) read(srcDir string, path string) error {
|
||||||
|
|
||||||
// manipulate processes and manipulates the directory's contents.
|
// manipulate processes and manipulates the directory's contents.
|
||||||
func (d *Dir) manipulate(cfg *Config) error {
|
func (d *Dir) manipulate(cfg *Config) error {
|
||||||
// Create the directory index file, if it doesn't exist
|
// Create index
|
||||||
if d.index == nil {
|
if d.index != nil {
|
||||||
var b strings.Builder
|
var b strings.Builder
|
||||||
tmpl := cfg.Templates.FindTemplate(d.Path, "index.gmi")
|
tmpl := cfg.Templates.FindTemplate(d.Path, "index.gmi")
|
||||||
if err := tmpl.Execute(&b, d); err != nil {
|
if err := tmpl.Execute(&b, d); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
d.index = &Page{
|
d.index.Content = b.String()
|
||||||
Path: d.Path,
|
|
||||||
Content: b.String(),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Manipulate pages
|
// Manipulate pages
|
||||||
|
@ -102,6 +102,7 @@ func (d *Dir) manipulate(cfg *Config) error {
|
||||||
// Feed represents a feed.
|
// Feed represents a feed.
|
||||||
type Feed struct {
|
type Feed struct {
|
||||||
Title string // Feed title.
|
Title string // Feed title.
|
||||||
|
Path string // Feed path.
|
||||||
Updated time.Time // Last updated time.
|
Updated time.Time // Last updated time.
|
||||||
Entries []*Page // Feed entries.
|
Entries []*Page // Feed entries.
|
||||||
}
|
}
|
||||||
|
@ -111,6 +112,7 @@ func (d *Dir) manipulate(cfg *Config) error {
|
||||||
var b strings.Builder
|
var b strings.Builder
|
||||||
feed := &Feed{
|
feed := &Feed{
|
||||||
Title: title,
|
Title: title,
|
||||||
|
Path: d.Path,
|
||||||
Updated: time.Now(),
|
Updated: time.Now(),
|
||||||
Entries: d.Pages,
|
Entries: d.Pages,
|
||||||
}
|
}
|
||||||
|
@ -119,6 +121,7 @@ func (d *Dir) manipulate(cfg *Config) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
d.Pages = append(d.Pages, &Page{
|
d.Pages = append(d.Pages, &Page{
|
||||||
|
Title: title,
|
||||||
Path: pathpkg.Join(d.Path, "feed"),
|
Path: pathpkg.Join(d.Path, "feed"),
|
||||||
Content: b.String(),
|
Content: b.String(),
|
||||||
})
|
})
|
||||||
|
@ -154,7 +157,7 @@ func (d *Dir) write(dstDir string, format outputFormat, cfg *Config) error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write the pages
|
// Write pages
|
||||||
for _, page := range d.Pages {
|
for _, page := range d.Pages {
|
||||||
path, content := format(page, cfg)
|
path, content := format(page, cfg)
|
||||||
dstPath := pathpkg.Join(dstDir, path)
|
dstPath := pathpkg.Join(dstDir, path)
|
||||||
|
@ -173,6 +176,8 @@ func (d *Dir) write(dstDir string, format outputFormat, cfg *Config) error {
|
||||||
if d.index != nil {
|
if d.index != nil {
|
||||||
path, content := format(d.index, cfg)
|
path, content := format(d.index, cfg)
|
||||||
dstPath := pathpkg.Join(dstDir, path)
|
dstPath := pathpkg.Join(dstDir, path)
|
||||||
|
dir := pathpkg.Dir(dstPath)
|
||||||
|
os.MkdirAll(dir, 0755)
|
||||||
f, err := os.Create(dstPath)
|
f, err := os.Create(dstPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
|
@ -93,6 +93,10 @@ Index templates are provided with the following information:
|
||||||
|
|
||||||
[[ *Variable*
|
[[ *Variable*
|
||||||
:[ *Description*
|
:[ *Description*
|
||||||
|
| Title
|
||||||
|
: Title of the directory
|
||||||
|
| Content
|
||||||
|
: The contents of the directory index file
|
||||||
| Path
|
| Path
|
||||||
: Path to the directory
|
: Path to the directory
|
||||||
| Pages
|
| Pages
|
||||||
|
@ -100,6 +104,9 @@ Index templates are provided with the following information:
|
||||||
| Dirs
|
| Dirs
|
||||||
: List of subdirectories
|
: List of subdirectories
|
||||||
|
|
||||||
|
The title and content are taken from the index.gmi file in the directory.
|
||||||
|
If no index.gmi file exists, then the index template will not be rendered.
|
||||||
|
|
||||||
## FEED TEMPLATES
|
## FEED TEMPLATES
|
||||||
|
|
||||||
Feed templates are provided with the following information:
|
Feed templates are provided with the following information:
|
||||||
|
|
Loading…
Reference in a new issue