summaryrefslogtreecommitdiffci
path: root/internal/router/api-v1-general-page-header.go
diff options
from:
to:
context:
space:
mode:
authorGravatar SayaAndy <saya.andy@posteo.com> 2025-08-31 13:16:45 +0700
committerGravatar SayaAndy <saya.andy@posteo.com> 2025-08-31 13:16:45 +0700
commit5eb7b64b3da54e769cc6e52fd6918e4b465b8c0a (patch)
treedd5fdb059baf9c6597eaf7cefb9a428d9c0ec766 /internal/router/api-v1-general-page-header.go
parent3cda48aadae9033f6041e19bbaca4f02ff777d56 (diff)
downloadweb-5eb7b64b3da54e769cc6e52fd6918e4b465b8c0a.tar.gz
web-5eb7b64b3da54e769cc6e52fd6918e4b465b8c0a.zip
feat: integrate partials in page generating
Diffstat (limited to 'internal/router/api-v1-general-page-header.go')
-rw-r--r--internal/router/api-v1-general-page-header.go39
1 files changed, 36 insertions, 3 deletions
diff --git a/internal/router/api-v1-general-page-header.go b/internal/router/api-v1-general-page-header.go
index 8ac7c03..045ff8b 100644
--- a/internal/router/api-v1-general-page-header.go
+++ b/internal/router/api-v1-general-page-header.go
@@ -2,15 +2,21 @@ package router
import (
"fmt"
+ "log/slog"
"net/url"
"slices"
"strings"
+ "github.com/SayaAndy/saya-today-web/internal/b2"
"github.com/SayaAndy/saya-today-web/locale"
"github.com/gofiber/fiber/v2"
)
-func Api_V1_GeneralPage_Header(l map[string]*locale.LocaleConfig, langs []string) func(c *fiber.Ctx) error {
+func init() {
+ tm.Add("general-page-header", "views/partials/general-page-header.html")
+}
+
+func Api_V1_GeneralPage_Header(l map[string]*locale.LocaleConfig, langs []string, b2Client *b2.B2Client) func(c *fiber.Ctx) error {
return func(c *fiber.Ctx) error {
c.Set(fiber.HeaderContentType, fiber.MIMETextPlainCharsetUTF8)
@@ -24,7 +30,7 @@ func Api_V1_GeneralPage_Header(l map[string]*locale.LocaleConfig, langs []string
}
path := urlStruct.EscapedPath()
- pathParts := strings.SplitN(strings.Trim(path, "/"), "/", 2)
+ pathParts := strings.Split(strings.Trim(path, "/"), "/")
if len(pathParts) < 2 {
return c.Status(fiber.ErrBadRequest.Code).SendString("'Referer' header is invalid: expect format '/{lang}/...'")
}
@@ -34,6 +40,33 @@ func Api_V1_GeneralPage_Header(l map[string]*locale.LocaleConfig, langs []string
return c.Status(fiber.ErrNotFound.Code).SendString(fmt.Sprintf("server does not support '%s' language... yet??", lang))
}
- return nil
+ values := fiber.Map{
+ "L": l[lang],
+ "Lang": lang,
+ }
+ var additionalTemplates []string
+
+ if len(pathParts) == 2 && pathParts[1] == "blog" {
+ values["Title"] = l[lang].BlogSearch.Header
+ additionalTemplates = append(additionalTemplates, "views/pages/blog-catalogue.html")
+ } else if len(pathParts) == 3 && pathParts[1] == "blog" {
+ metadata, _, err := b2Client.ReadFrontmatter(lang + "/" + pathParts[2] + ".md")
+ if err != nil {
+ return c.Status(fiber.ErrNotFound.Code).SendString(fmt.Sprintf("could not read '%s' for content", path))
+ }
+ values["Title"] = metadata.Title
+ values["PublishedDate"] = metadata.PublishedTime.Format("2006-01-02 15:04:05 -07:00")
+ values["ActionDate"] = metadata.ActionDate
+ additionalTemplates = append(additionalTemplates, "views/pages/blog-page.html")
+ }
+
+ content, err := tm.Render("general-page-header", values, additionalTemplates...)
+ 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")
+ }
+
+ c.Set(fiber.HeaderContentType, fiber.MIMETextHTMLCharsetUTF8)
+ return c.Status(fiber.StatusOK).Type("html").Send(content)
}
}