Compare commits
5 Commits
41dca2aaf5
...
05c203607d
Author | SHA1 | Date |
---|---|---|
Nico | 05c203607d | |
Nico | 0f0ab8a26d | |
Nico | 945749a734 | |
Nico | 7b07244ba2 | |
Nico | 906f398022 |
138
main.go
138
main.go
|
@ -26,6 +26,8 @@ var inputDir string = filepath.Join(root, "content")
|
|||
var tagFile string = filepath.Join(root, "tags.json")
|
||||
var feedFile string = filepath.Join(root, "feeds.json")
|
||||
|
||||
var templates *t.Template = t.Must(t.ParseGlob(templateDir + "/*"))
|
||||
|
||||
type filePathInfo struct {
|
||||
Path string
|
||||
New bool
|
||||
|
@ -62,18 +64,16 @@ func RemoveIndexFeed(s []*feeds.Item, index int) []*feeds.Item {
|
|||
return append(s[:index], s[index+1:]...)
|
||||
}
|
||||
}
|
||||
// wraps the string in a basic standalone HTML document.
|
||||
func htmlWrap(d *string) string {
|
||||
header := `<!DOCTYPE html><head><link rel=stylesheet href="https://itwont.work/style.css"><title>Nico's site</title></head><body><article>`
|
||||
footer := `</article></body>`
|
||||
return header + *d + footer
|
||||
|
||||
// publishedAfter returns true if a was updated after b.
|
||||
func publishedAfter(a, b *feeds.Item) bool {
|
||||
return b.Updated.Before(a.Updated)
|
||||
}
|
||||
|
||||
var tagData map[string][]pageInfo = make(map[string][]pageInfo)
|
||||
|
||||
var feed *feeds.Feed = &feeds.Feed{
|
||||
Title: "Nico's site",
|
||||
Link: &feeds.Link{Href: geminiPrefix},
|
||||
Author: &feeds.Author{Name: "Nico", Email: "nico@itwont.work"},
|
||||
}
|
||||
|
||||
|
@ -165,12 +165,7 @@ func processPage(f filePathInfo) error {
|
|||
}
|
||||
}
|
||||
}
|
||||
// TODO maybe feeds for html?
|
||||
ls, err := processLinkString(f.Path, GEMINI)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
l := &feeds.Link{Href: ls}
|
||||
l := &feeds.Link{Href: f.Path}
|
||||
for i, d := range feed.Items {
|
||||
if *l == *d.Link {
|
||||
fmt.Println("got dupe!")
|
||||
|
@ -200,7 +195,7 @@ func processPage(f filePathInfo) error {
|
|||
}
|
||||
feed.Add(&feeds.Item{
|
||||
Title: info.Title,
|
||||
Link: &feeds.Link{Href: ls},
|
||||
Link: &feeds.Link{Href: f.Path},
|
||||
Updated: s.ModTime(),
|
||||
Description: "New/Updated Page: " + info.Title,
|
||||
})
|
||||
|
@ -224,9 +219,9 @@ func processPage(f filePathInfo) error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
output := filepath.Join(geminiOutputDir, rel)
|
||||
|
||||
err = ioutil.WriteFile(output, []byte(geminiRender), 0644)
|
||||
output, err := os.Create(filepath.Join(geminiOutputDir, rel))
|
||||
defer output.Close()
|
||||
err = templates.ExecuteTemplate(output, "page.gmi", geminiRender)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -234,8 +229,11 @@ func processPage(f filePathInfo) error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
output = strings.Replace(filepath.Join(htmlOutputDir, rel), ".gmi", ".html", -1)
|
||||
err = ioutil.WriteFile(output, []byte(htmlWrap(&htmlRender)), 0644)
|
||||
output, err = os.Create(strings.Replace(filepath.Join(htmlOutputDir, rel), ".gmi", ".html", -1))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = templates.ExecuteTemplate(output, "page.html", htmlRender)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -280,12 +278,15 @@ func walkInputDir(path string, info os.FileInfo, err error) error {
|
|||
}
|
||||
|
||||
// writeTagPage writes a tag page.
|
||||
func writeTagPage(tag string, pages *[]pageInfo, t *t.Template, basePath string, linkType int) error {
|
||||
func writeTagPage(tag string, pages *[]pageInfo, basePath string, linkType int) error {
|
||||
var outPath string
|
||||
var tmpl string
|
||||
if linkType == HTML {
|
||||
outPath = filepath.Join(basePath, tag+".html")
|
||||
tmpl = "tag.html"
|
||||
} else {
|
||||
outPath = filepath.Join(basePath, tag+".gmi")
|
||||
tmpl = "tag.gmi"
|
||||
}
|
||||
f, err := os.Create(filepath.Join(outPath))
|
||||
defer f.Close()
|
||||
|
@ -300,7 +301,7 @@ func writeTagPage(tag string, pages *[]pageInfo, t *t.Template, basePath string,
|
|||
return err
|
||||
}
|
||||
}
|
||||
err = t.Execute(f, templateTag{Name: tag, Pages: np})
|
||||
err = templates.ExecuteTemplate(f, tmpl, templateTag{Name: tag, Pages: np})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -342,22 +343,6 @@ func main() {
|
|||
}
|
||||
}
|
||||
feed.Updated = time.Now()
|
||||
htmlTagPageTemplateFile, err := ioutil.ReadFile(filepath.Join(templateDir, "tag.html"))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
htmlTagPageTemplate, err := t.New("htmlTagPage").Parse(string(htmlTagPageTemplateFile))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
geminiTagPageTemplateFile, err := ioutil.ReadFile(filepath.Join(templateDir, "tag.gmi"))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
geminiTagPageTemplate, err := t.New("geminiTagPage").Parse(string(geminiTagPageTemplateFile))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
err = filepath.Walk(inputDir, walkInputDir) // walks the tree, creates the files slice and updates tagData
|
||||
if err != nil {
|
||||
panic(err)
|
||||
|
@ -378,59 +363,70 @@ func main() {
|
|||
panic(err)
|
||||
}
|
||||
}
|
||||
// Write out index page
|
||||
templateFile, err := ioutil.ReadFile(filepath.Join(templateDir, "index.gmi"))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
indexTemplate, err := t.New("gemtextIndex").Parse(string(templateFile))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
f, err := os.Create(filepath.Join(geminiOutputDir, "index.gmi"))
|
||||
defer f.Close()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
err = indexTemplate.Execute(f, tagData)
|
||||
err = templates.ExecuteTemplate(f, "index.gmi", tagData)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
f.Sync()
|
||||
|
||||
// Write out HTML index page
|
||||
templateFile, err = ioutil.ReadFile(filepath.Join(templateDir, "index.html"))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
indexTemplate, err = t.New("htmlIndex").Parse(string(templateFile))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
hf, err := os.Create(filepath.Join(htmlOutputDir, "index.html"))
|
||||
defer hf.Close()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
err = indexTemplate.Execute(hf, tagData)
|
||||
err = templates.ExecuteTemplate(hf, "index.html", tagData)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
hf.Sync()
|
||||
// Write tag pages
|
||||
for tag, pages := range tagData {
|
||||
err = writeTagPage(tag, &pages, htmlTagPageTemplate, filepath.Join(htmlOutputDir, "/_tags/"), HTML)
|
||||
err = writeTagPage(tag, &pages, filepath.Join(htmlOutputDir, "/_tags/"), HTML)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
err = writeTagPage(tag, &pages, geminiTagPageTemplate, filepath.Join(geminiOutputDir, "/_tags/"), GEMINI)
|
||||
err = writeTagPage(tag, &pages, filepath.Join(geminiOutputDir, "/_tags/"), GEMINI)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
// Write Feeds
|
||||
fe, err := feed.ToAtom()
|
||||
gemFeed := &feeds.Feed{
|
||||
Title: feed.Title,
|
||||
Author: feed.Author,
|
||||
Link: &feeds.Link{Href: geminiPrefix},
|
||||
}
|
||||
HTMLFeed := &feeds.Feed{
|
||||
Title: feed.Title,
|
||||
Author: feed.Author,
|
||||
Link: &feeds.Link{Href: htmlPrefix},
|
||||
}
|
||||
for _, i := range feed.Items {
|
||||
gi := *i // gemini item
|
||||
hi := *i // HTML item
|
||||
hl, err := processLinkString(i.Link.Href,HTML)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
gl, err := processLinkString(i.Link.Href, GEMINI)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
hi.Link = &feeds.Link{Href: hl}
|
||||
gi.Link = &feeds.Link{Href: gl}
|
||||
gemFeed.Add(&gi)
|
||||
HTMLFeed.Add(&hi)
|
||||
}
|
||||
gemFeed.Sort(publishedAfter)
|
||||
HTMLFeed.Sort(publishedAfter)
|
||||
fe, err := gemFeed.ToAtom()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
@ -438,6 +434,32 @@ func main() {
|
|||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
fe, err = HTMLFeed.ToAtom()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
err = ioutil.WriteFile(filepath.Join(htmlOutputDir,"atom.xml"), []byte(fe), 0644)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
// Write recently edited pages
|
||||
gp, err := os.Create(filepath.Join(geminiOutputDir, "edits.gmi"))
|
||||
defer gp.Close()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
err = templates.ExecuteTemplate(gp, "edits.gmi", gemFeed)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
gp, err = os.Create(filepath.Join(htmlOutputDir, "edits.html"))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
err = templates.ExecuteTemplate(gp, "edits.html", HTMLFeed)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
j, err := json.Marshal(tagData)
|
||||
err = ioutil.WriteFile(tagFile, j, 0644)
|
||||
if err != nil {
|
||||
|
|
Reference in New Issue