summaryrefslogtreecommitdiffci
path: root/internal/router/handlers/lang-blog-title.go
diff refs
from: back
to: back
| flip
diff options
context:
space:
mode:
Diffstat (limited to 'internal/router/handlers/lang-blog-title.go')
-rw-r--r--internal/router/handlers/lang-blog-title.go182
1 files changed, 0 insertions, 182 deletions
diff --git a/internal/router/handlers/lang-blog-title.go b/internal/router/handlers/lang-blog-title.go
deleted file mode 100644
index 76dc335..0000000
--- a/internal/router/handlers/lang-blog-title.go
+++ /dev/null
@@ -1,182 +0,0 @@
-package handlers
-
-import (
- "bytes"
- "fmt"
- "html/template"
- "strings"
- "time"
-
- "github.com/SayaAndy/saya-today-web/internal/blog"
- "github.com/SayaAndy/saya-today-web/internal/frontmatter"
- "github.com/SayaAndy/saya-today-web/internal/router"
- "github.com/SayaAndy/saya-today-web/l10n"
- "github.com/gofiber/fiber/v2"
- "github.com/yuin/goldmark"
-)
-
-func init() {
- router.Routes = append(router.Routes, &BlogPageHandler{})
-}
-
-type BlogPageHandler struct {
- router.BasicHandler
-}
-
-func (r *BlogPageHandler) Filter() (method string, path string) {
- return "GET", "/:lang/blog/:title"
-}
-
-func (r *BlogPageHandler) IsTemplated() bool {
- return true
-}
-
-func (r *BlogPageHandler) TemplatesToInject() []string {
- return []string{"views/pages/blog-page.html"}
-}
-
-func (r *BlogPageHandler) ToCache() router.CacheSetting {
- return router.ByUrlOnly
-}
-
-func (r *BlogPageHandler) CacheDuration() time.Duration {
- return 15 * time.Minute
-}
-
-func (r *BlogPageHandler) ToValidateLang() router.LangSetting {
- return router.InPath
-}
-
-func (r *BlogPageHandler) SitemapInfo(supplements *router.Supplements) []router.SitemapInfo {
- sitemapInfo := []router.SitemapInfo{}
-
- pages, err := supplements.BlogClient.Scan("")
- if err != nil {
- return sitemapInfo
- }
-
- for _, page := range pages {
- sitemapInfo = append(sitemapInfo, router.SitemapInfo{
- Loc: "/" + page.Lang + "/blog/" + page.FileName,
- LastModified: page.ModifiedTime,
- Priority: 1.0,
- })
- }
-
- return sitemapInfo
-}
-
-func (r *BlogPageHandler) AddMeta(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (meta []router.MetaField, err error) {
- metadata, _, err := supplements.BlogClient.ReadFrontmatter(lang + "/" + c.Params("title") + ".md")
- if err != nil {
- return nil, fmt.Errorf("failed to read frontmatter of the desired blog post: %w", err)
- }
- title := metadata.Title
- if metadata.Medley != "" {
- title += " // " + l10n.T.GetPath(lang, "Medleys", metadata.Medley).(string)
- }
-
- return []router.MetaField{
- {Property: "og:title", Content: title},
- {Property: "og:description", Content: fmt.Sprintf("%s [%s]", metadata.ShortDescription, metadata.ActionDate)},
- {Property: "og:image", Content: fmt.Sprintf(supplements.PhotoStorage.Thumbnail560p.BaseUrl, metadata.Thumbnail)},
- {Property: "og:url", Content: fmt.Sprintf("%s/%s/blog/%s", templateMap["CanonicalEndpoint"], lang, c.Params("title"))},
- {Property: "og:type", Content: "website"},
- {Name: "twitter:card", Content: "summary_large_image"},
- }, nil
-}
-
-func (r *BlogPageHandler) AddLinkedData(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (ld map[string]any, err error) {
- metadata, _, err := supplements.BlogClient.ReadFrontmatter(lang + "/" + c.Params("title") + ".md")
- if err != nil {
- return nil, fmt.Errorf("failed to read frontmatter of the desired blog post: %w", err)
- }
- title := metadata.Title
- if metadata.Medley != "" {
- title += " // " + l10n.T.GetPath(lang, "Medleys", metadata.Medley).(string)
- }
-
- return map[string]any{
- "@context": "https://schema.org",
- "@type": "Article",
- "headline": title,
- "description": fmt.Sprintf("%s [%s]", metadata.ShortDescription, metadata.ActionDate),
- "author": map[string]string{"@type": "Person", "name": "Saya Andy"},
- "datePublished": metadata.PublishedTime.UTC().Format(time.RFC3339),
- }, nil
-}
-
-func (r *BlogPageHandler) RenderBody(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (statusCode int, err error) {
- _, pathParts, _, err := router.GetPathFromReferer(c)
- if err != nil {
- return fiber.StatusBadRequest, fmt.Errorf("failed to get path from referer: %w", err)
- }
- title := pathParts[2]
-
- metadata, parsedMarkdown, err := readBlogPost(supplements.MarkdownRenderer, supplements.BlogClient, lang+"/"+title)
- if err != nil {
- return fiber.StatusNotFound, fmt.Errorf("failed to find '%s' post: %w", title, err)
- }
-
- geolocationParts := strings.Split(metadata.Geolocation, " ")
- var x, y, areaError string
- if len(geolocationParts) >= 2 {
- x = geolocationParts[0]
- y = geolocationParts[1]
- }
- if len(geolocationParts) >= 3 {
- areaError = geolocationParts[2]
- }
-
- templateMap["MapLocationX"] = x
- templateMap["MapLocationY"] = y
- templateMap["MapLocationAreaMeters"] = areaError
- templateMap["Title"] = metadata.Title
- templateMap["Codename"] = title
- templateMap["ParsedMarkdown"] = template.HTML(parsedMarkdown)
- templateMap["PublishedDate"] = metadata.PublishedTime.Format("2006-01-02 15:04:05 -07:00")
- templateMap["ActionDate"] = metadata.ActionDate
- templateMap["ShortDescription"] = metadata.ShortDescription
- templateMap["Thumbnail"] = metadata.Thumbnail
- templateMap["Medley"] = metadata.Medley
-
- go supplements.ClientCache.View(c.IP(), title)
-
- return fiber.StatusOK, nil
-}
-
-func (r *BlogPageHandler) RenderHeader(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (statusCode int, err error) {
- path, pathParts, _, err := router.GetPathFromReferer(c)
- if err != nil {
- return fiber.StatusBadRequest, fmt.Errorf("failed to get path from referer: %w", err)
- }
-
- metadata, _, err := supplements.BlogClient.ReadFrontmatter(lang + "/" + pathParts[2] + ".md")
- if err != nil {
- return fiber.StatusNotFound, fmt.Errorf("could not read '%s' for metadata: %w", path, err)
- }
-
- pageTitle := metadata.Title
- if metadata.Medley != "" {
- pageTitle += " // " + l10n.T.GetPath(lang, "Medleys", metadata.Medley).(string)
- }
-
- templateMap["Title"] = metadata.Title
- templateMap["PageTitle"] = pageTitle
-
- return fiber.StatusOK, nil
-}
-
-func readBlogPost(md goldmark.Markdown, blogClient blog.Client, sourceName string) (metadata *frontmatter.Metadata, html string, err error) {
- metadata, markdown, err := blogClient.ReadFrontmatter(sourceName + ".md")
- if err != nil {
- return nil, "", fmt.Errorf("failed to read a frontmatter file: %w", err)
- }
-
- var buf bytes.Buffer
- if err := md.Convert(markdown, &buf); err != nil {
- return nil, "", fmt.Errorf("convert source context from md to html: %w", err)
- }
-
- return metadata, buf.String(), nil
-}