Use yaml library to generate frontmatter
This should fix edge cases for the title etc.kcoram/uplift
parent
1a07bbe047
commit
965bd45f84
14
entry.go
14
entry.go
|
@ -178,13 +178,17 @@ func generateRandomString(now time.Time, n int) string {
|
||||||
return string(b)
|
return string(b)
|
||||||
}
|
}
|
||||||
|
|
||||||
func WriteEntry(entry *Entry) (string, error) {
|
func WriteEntry(entry *Entry) (location string, err error) {
|
||||||
file := WriteHugoPost(entry)
|
file, err := WriteHugoPost(entry)
|
||||||
err := CreateFile(entry.filename, file, entry.title)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return
|
||||||
}
|
}
|
||||||
return entry.location, nil
|
err = CreateFile(entry.filename, file, entry.title)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
location = entry.location
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func analyzeURL(url string) (filePath string, section string, slug string, err error) {
|
func analyzeURL(url string) (filePath string, section string, slug string, err error) {
|
||||||
|
|
2
go.mod
2
go.mod
|
@ -4,5 +4,5 @@ go 1.13
|
||||||
|
|
||||||
require (
|
require (
|
||||||
gopkg.in/yaml.v2 v2.2.7
|
gopkg.in/yaml.v2 v2.2.7
|
||||||
willnorris.com/go/webmention v0.0.0-20191104072158-c7fb13569b62 // indirect
|
willnorris.com/go/webmention v0.0.0-20191104072158-c7fb13569b62
|
||||||
)
|
)
|
||||||
|
|
113
post.go
113
post.go
|
@ -8,61 +8,76 @@ import (
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
func writeFrontMatter(entry *Entry) string {
|
type Frontmatter struct {
|
||||||
var buff bytes.Buffer
|
Title string `yaml:"title,omitempty"`
|
||||||
t := time.Now().Format(time.RFC3339)
|
Date string `yaml:"date,omitempty"`
|
||||||
buff.WriteString("---\n")
|
Lastmod string `yaml:"lastmod,omitempty"`
|
||||||
if len(entry.title) > 0 {
|
Tags []string `yaml:"tags,omitempty"`
|
||||||
buff.WriteString("title: \"" + entry.title + "\"\n")
|
ExternalURL string `yaml:"externalURL,omitempty"`
|
||||||
}
|
Indieweb Indieweb `yaml:"indieweb,omitempty"`
|
||||||
buff.WriteString("date: " + t + "\n")
|
|
||||||
buff.WriteString("tags:\n")
|
|
||||||
for _, tag := range entry.tags {
|
|
||||||
buff.WriteString("- " + tag + "\n")
|
|
||||||
}
|
|
||||||
if len(entry.link) > 0 {
|
|
||||||
buff.WriteString("externalURL: " + entry.link + "\n")
|
|
||||||
}
|
|
||||||
buff.WriteString("indieweb:\n")
|
|
||||||
if len(entry.replyLink) > 0 {
|
|
||||||
buff.WriteString(" reply:\n link: " + entry.replyLink + "\n")
|
|
||||||
if len(entry.replyTitle) > 0 {
|
|
||||||
buff.WriteString(" title: " + entry.replyTitle + "\n")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if len(entry.likeLink) > 0 {
|
|
||||||
buff.WriteString(" like:\n link: " + entry.likeLink + "\n")
|
|
||||||
if len(entry.likeTitle) > 0 {
|
|
||||||
buff.WriteString(" title: " + entry.likeTitle + "\n")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
buff.WriteString("---\n")
|
|
||||||
return buff.String()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func WriteHugoPost(entry *Entry) string {
|
type Indieweb struct {
|
||||||
|
Reply Reply `yaml:"reply,omitempty"`
|
||||||
|
Like Like `yaml:"like,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type Reply struct {
|
||||||
|
Link string `yaml:"link,omitempty"`
|
||||||
|
Title string `yaml:"title,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type Like struct {
|
||||||
|
Link string `yaml:"link,omitempty"`
|
||||||
|
Title string `yaml:"title,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func writeFrontMatter(entry *Entry) (frontmatter string, err error) {
|
||||||
var buff bytes.Buffer
|
var buff bytes.Buffer
|
||||||
buff.WriteString(writeFrontMatter(entry))
|
writeFrontmatter := &Frontmatter{
|
||||||
|
Title: entry.title,
|
||||||
|
Date: time.Now().Format(time.RFC3339),
|
||||||
|
Lastmod: entry.lastmod,
|
||||||
|
Tags: entry.tags,
|
||||||
|
ExternalURL: entry.link,
|
||||||
|
Indieweb: Indieweb{
|
||||||
|
Reply: Reply{
|
||||||
|
Link: entry.replyLink,
|
||||||
|
Title: entry.replyTitle,
|
||||||
|
},
|
||||||
|
Like: Like{
|
||||||
|
Link: entry.likeLink,
|
||||||
|
Title: entry.likeTitle,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
yamlBytes, err := yaml.Marshal(&writeFrontmatter)
|
||||||
|
if err != nil {
|
||||||
|
err = errors.New("failed marshaling frontmatter")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
buff.WriteString("---\n")
|
||||||
|
buff.Write(yamlBytes)
|
||||||
|
buff.WriteString("---\n")
|
||||||
|
frontmatter = buff.String()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func WriteHugoPost(entry *Entry) (string, error) {
|
||||||
|
var buff bytes.Buffer
|
||||||
|
frontmatter, err := writeFrontMatter(entry)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
buff.WriteString(frontmatter)
|
||||||
if len(entry.content) > 0 {
|
if len(entry.content) > 0 {
|
||||||
buff.WriteString(entry.content)
|
buff.WriteString(entry.content)
|
||||||
}
|
}
|
||||||
return buff.String()
|
return buff.String(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func readFrontMatter(frontmatter string, entry *Entry) (err error) {
|
func readFrontMatter(frontmatter string, entry *Entry) (err error) {
|
||||||
parsedFrontmatter := &struct {
|
parsedFrontmatter := &Frontmatter{}
|
||||||
Title string
|
|
||||||
Date string
|
|
||||||
Lastmod string
|
|
||||||
Tags []string
|
|
||||||
ExternalURL string `yaml:"externalURL"`
|
|
||||||
Indieweb struct {
|
|
||||||
Reply struct {
|
|
||||||
Link string
|
|
||||||
Title string
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}{}
|
|
||||||
err = yaml.Unmarshal([]byte(frontmatter), &parsedFrontmatter)
|
err = yaml.Unmarshal([]byte(frontmatter), &parsedFrontmatter)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = errors.New("failed parsing frontmatter")
|
err = errors.New("failed parsing frontmatter")
|
||||||
|
@ -88,6 +103,12 @@ func readFrontMatter(frontmatter string, entry *Entry) (err error) {
|
||||||
if len(parsedFrontmatter.Indieweb.Reply.Title) > 0 {
|
if len(parsedFrontmatter.Indieweb.Reply.Title) > 0 {
|
||||||
entry.replyTitle = parsedFrontmatter.Indieweb.Reply.Title
|
entry.replyTitle = parsedFrontmatter.Indieweb.Reply.Title
|
||||||
}
|
}
|
||||||
|
if len(parsedFrontmatter.Indieweb.Like.Link) > 0 {
|
||||||
|
entry.replyLink = parsedFrontmatter.Indieweb.Like.Link
|
||||||
|
}
|
||||||
|
if len(parsedFrontmatter.Indieweb.Like.Title) > 0 {
|
||||||
|
entry.replyTitle = parsedFrontmatter.Indieweb.Like.Title
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue