119 lines
2.3 KiB
Go
119 lines
2.3 KiB
Go
package owl
|
|
|
|
import (
|
|
"bytes"
|
|
_ "embed"
|
|
"html/template"
|
|
)
|
|
|
|
//go:embed embed/user-list.html
|
|
var userListTemplateStr string
|
|
|
|
//go:embed embed/post.html
|
|
var postTemplateStr string
|
|
|
|
type PageContent struct {
|
|
Title string
|
|
Content template.HTML
|
|
}
|
|
|
|
type PostRenderData struct {
|
|
Title string
|
|
Post template.HTML
|
|
}
|
|
|
|
func renderIntoBaseTemplate(user User, data PageContent) (string, error) {
|
|
baseTemplate, _ := user.Template()
|
|
t, err := template.New("index").Parse(baseTemplate)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
user_config, _ := user.Config()
|
|
full_data := struct {
|
|
Title string
|
|
Content template.HTML
|
|
UserTitle string
|
|
UserSubtitle string
|
|
HeaderColor string
|
|
}{
|
|
Title: data.Title,
|
|
Content: data.Content,
|
|
UserTitle: user_config.Title,
|
|
UserSubtitle: user_config.SubTitle,
|
|
HeaderColor: user_config.HeaderColor,
|
|
}
|
|
|
|
var html bytes.Buffer
|
|
t.Execute(&html, full_data)
|
|
|
|
return html.String(), nil
|
|
}
|
|
|
|
func RenderPost(post Post) (string, error) {
|
|
buf, _ := post.MarkdownData()
|
|
|
|
postTemplate, _ := template.New("post").Parse(postTemplateStr)
|
|
var postHtml bytes.Buffer
|
|
err := postTemplate.Execute(&postHtml, PostRenderData{
|
|
Title: post.Title(),
|
|
Post: template.HTML(buf.String()),
|
|
})
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
data := PageContent{
|
|
Title: post.Title(),
|
|
Content: template.HTML(postHtml.String()),
|
|
}
|
|
|
|
return renderIntoBaseTemplate(post.user, data)
|
|
}
|
|
|
|
func RenderIndexPage(user User) (string, error) {
|
|
posts, _ := user.Posts()
|
|
|
|
postHtml := ""
|
|
for _, postId := range posts {
|
|
post, _ := user.GetPost(postId)
|
|
postHtml += "<h2><a href=\"" + post.UrlPath() + "\">" + post.Title() + "</a></h2>\n"
|
|
}
|
|
|
|
data := PageContent{
|
|
Title: "Index",
|
|
Content: template.HTML(postHtml),
|
|
}
|
|
|
|
return renderIntoBaseTemplate(user, data)
|
|
|
|
}
|
|
|
|
func RenderUserList(repo Repository) (string, error) {
|
|
baseTemplate, _ := repo.Template()
|
|
users, _ := repo.Users()
|
|
t, err := template.New("user_list").Parse(userListTemplateStr)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
var userHtml bytes.Buffer
|
|
t.Execute(&userHtml, users)
|
|
|
|
data := PageContent{
|
|
Title: "Index",
|
|
Content: template.HTML(userHtml.String()),
|
|
}
|
|
|
|
var html bytes.Buffer
|
|
t, err = template.New("index").Parse(baseTemplate)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
t.Execute(&html, data)
|
|
|
|
return html.String(), nil
|
|
|
|
}
|