summaryrefslogtreecommitdiff
path: root/internal/router
diff options
from:
to:
context:
space:
mode:
Diffstat (limited to 'internal/router')
-rw-r--r--internal/router/basic-handler.go6
-rw-r--r--internal/router/handlers/lang-blog-title.go14
-rw-r--r--internal/router/handlers/lang-map.go8
-rw-r--r--internal/router/handlers/lang-user.go7
-rw-r--r--internal/router/handlers/lang.go8
-rw-r--r--internal/router/handlers/root.go7
-rw-r--r--internal/router/router.go12
7 files changed, 59 insertions, 3 deletions
diff --git a/internal/router/basic-handler.go b/internal/router/basic-handler.go
index a859d10..4a94a48 100644
--- a/internal/router/basic-handler.go
+++ b/internal/router/basic-handler.go
@@ -41,6 +41,12 @@ func (r *BasicHandler) Render(c *fiber.Ctx, supplements *Supplements, lang strin
return fiber.StatusNoContent, nil
}
+func (r *BasicHandler) AddMeta(c *fiber.Ctx, supplements *Supplements, lang string, templateMap fiber.Map) (meta map[string]string, err error) {
+ return map[string]string{
+ "robots": "noindex,nofollow",
+ }, nil
+}
+
func (r *BasicHandler) RenderHeader(c *fiber.Ctx, supplements *Supplements, lang string, templateMap fiber.Map) (statusCode int, err error) {
return fiber.StatusNoContent, nil
}
diff --git a/internal/router/handlers/lang-blog-title.go b/internal/router/handlers/lang-blog-title.go
index 0f4f564..97de089 100644
--- a/internal/router/handlers/lang-blog-title.go
+++ b/internal/router/handlers/lang-blog-title.go
@@ -46,6 +46,20 @@ func (r *BlogPageHandler) ToValidateLang() router.LangSetting {
return router.InPath
}
+func (r *BlogPageHandler) AddMeta(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (meta map[string]string, err error) {
+ metadata, _, err := supplements.B2Client.ReadFrontmatter(lang + "/" + c.Params("title") + ".md")
+ if err != nil {
+ return nil, fmt.Errorf("failed to read frontmatter of the desired blog post: %w", err)
+ }
+
+ return map[string]string{
+ "og:title": metadata.Title,
+ "og:description": fmt.Sprintf("%s [%s]", metadata.ShortDescription, metadata.ActionDate),
+ "og:image": fmt.Sprintf("https://f003.backblazeb2.com/file/sayana-photos/webp-320p/%s.webp", metadata.Thumbnail),
+ "twitter:card": "summary_large_image",
+ }, 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 {
diff --git a/internal/router/handlers/lang-map.go b/internal/router/handlers/lang-map.go
index dbf1437..7df6104 100644
--- a/internal/router/handlers/lang-map.go
+++ b/internal/router/handlers/lang-map.go
@@ -3,6 +3,7 @@ package handlers
import (
"fmt"
"log/slog"
+ "slices"
"strconv"
"strings"
@@ -41,6 +42,9 @@ func (r *MapHandler) ToValidateLang() router.LangSetting {
func (r *MapHandler) Render(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (statusCode int, err error) {
pages, err := supplements.B2Client.Scan(lang + "/")
+ slices.SortFunc(pages, func(a *b2.BlogPage, b *b2.BlogPage) int {
+ return a.Metadata.PublishedTime.Compare(b.Metadata.PublishedTime)
+ })
status := fiber.StatusOK
if err != nil {
slog.Error("received an error while scanning b2 pages",
@@ -52,6 +56,7 @@ func (r *MapHandler) Render(c *fiber.Ctx, supplements *router.Supplements, lang
}
type MapMarker struct {
+ Index int `json:"Index"`
Title string `json:"Title"`
PageLink string `json:"PageLink"`
Lat float64 `json:"Lat"`
@@ -61,7 +66,7 @@ func (r *MapHandler) Render(c *fiber.Ctx, supplements *router.Supplements, lang
}
mapMarkers := make([]*MapMarker, 0, len(pages))
- for _, page := range pages {
+ for i, page := range pages {
geolocationParts := strings.Split(page.Metadata.Geolocation, " ")
if len(geolocationParts) < 2 {
continue
@@ -78,6 +83,7 @@ func (r *MapHandler) Render(c *fiber.Ctx, supplements *router.Supplements, lang
}
mapMarkers = append(mapMarkers, &MapMarker{
+ Index: i,
Title: page.Metadata.Title,
PageLink: fmt.Sprintf("/%s/blog/%s", lang, page.FileName),
Lat: x,
diff --git a/internal/router/handlers/lang-user.go b/internal/router/handlers/lang-user.go
index db566fe..c22bcac 100644
--- a/internal/router/handlers/lang-user.go
+++ b/internal/router/handlers/lang-user.go
@@ -37,6 +37,13 @@ func (r *UserHandler) ToValidateLang() router.LangSetting {
return router.InPath
}
+func (r *UserHandler) AddMeta(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (meta map[string]string, err error) {
+ return map[string]string{
+ "og:title": supplements.Localization[lang].BlogSearch.Header,
+ "og:description": supplements.Localization[lang].BlogSearch.Description,
+ }, nil
+}
+
func (r *UserHandler) RenderBody(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (statusCode int, err error) {
templateMap["Title"] = supplements.Localization[lang].UserProfile.Header
diff --git a/internal/router/handlers/lang.go b/internal/router/handlers/lang.go
index fc4deb6..74166ae 100644
--- a/internal/router/handlers/lang.go
+++ b/internal/router/handlers/lang.go
@@ -41,6 +41,14 @@ func (r *HomeHandler) ToValidateLang() router.LangSetting {
return router.InPath
}
+func (r *HomeHandler) AddMeta(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (meta map[string]string, err error) {
+ return map[string]string{
+ "og:title": supplements.Localization[lang].HomePage.Header,
+ "og:description": supplements.Localization[lang].HomePage.HomePageDescription,
+ "og:image": "https://f003.backblazeb2.com/file/sayana-static/home-page-gifs/" + fmt.Sprintf("otter-%d.gif", rand.Int()%3+1),
+ }, nil
+}
+
func (r *HomeHandler) RenderBody(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (statusCode int, err error) {
templateMap["Title"] = supplements.Localization[lang].HomePage.Header
templateMap["FilledHeartCount"] = uint(40)
diff --git a/internal/router/handlers/root.go b/internal/router/handlers/root.go
index c8c4cd4..9f15782 100644
--- a/internal/router/handlers/root.go
+++ b/internal/router/handlers/root.go
@@ -35,6 +35,13 @@ func (r *RootHandler) CacheDuration() time.Duration {
return 24 * time.Hour
}
+func (r *RootHandler) AddMeta(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (meta map[string]string, err error) {
+ return map[string]string{
+ "og:title": "Saya Blog",
+ "og:description": "The blog of a 25 years old, travelling God knows where, proud to be not mainstream // Личный блог 25-летки, странствующего по ебеням, зато не мейнстрим",
+ }, nil
+}
+
func (r *RootHandler) RenderBody(c *fiber.Ctx, supplements *router.Supplements, _ string, templateMap fiber.Map) (statusCode int, err error) {
templateMap["Title"] = "Choose Your Language"
templateMap["AvailableLanguages"] = supplements.AvailableLanguages
diff --git a/internal/router/router.go b/internal/router/router.go
index c0556f0..f28add2 100644
--- a/internal/router/router.go
+++ b/internal/router/router.go
@@ -60,6 +60,7 @@ type Route interface {
ToValidateLang() LangSetting
TemplatesToInject() []string
Render(c *fiber.Ctx, supplements *Supplements, lang string, templateMap fiber.Map) (statusCode int, err error)
+ AddMeta(c *fiber.Ctx, supplements *Supplements, lang string, templateMap fiber.Map) (meta map[string]string, err error)
RenderHeader(c *fiber.Ctx, supplements *Supplements, lang string, templateMap fiber.Map) (statusCode int, err error)
RenderBody(c *fiber.Ctx, supplements *Supplements, lang string, templateMap fiber.Map) (statusCode int, err error)
RenderFooter(c *fiber.Ctx, supplements *Supplements, lang string, templateMap fiber.Map) (statusCode int, err error)
@@ -382,11 +383,18 @@ func (r *Router) generalPage(c *fiber.Ctx, route Route, lang string) error {
return c.Status(fiber.StatusOK).Type("html").Send(val)
}
- content, err := r.supplements.TemplateManager.Render("general-page", fiber.Map{
+ valueMap := fiber.Map{
"L": r.supplements.Localization[lang],
"Lang": lang,
"QueryString": queryString,
- })
+ }
+
+ var err error
+ if valueMap["Meta"], err = route.AddMeta(c, r.supplements, lang, valueMap); err != nil {
+ slog.Warn("failed to receive meta", slog.String("path", path), slog.String("error", err.Error()))
+ }
+
+ content, err := r.supplements.TemplateManager.Render("general-page", valueMap)
if err != nil {
slog.Warn("failed to generate div", slog.String("path", path), slog.String("error", err.Error()))
return c.Status(fiber.ErrInternalServerError.Code).SendString("failed to generate div")