| -rw-r--r-- | internal/router/api-v1-blog-search.go | 7 | ||||
| -rw-r--r-- | internal/router/lang-blog-title.go | 7 | ||||
| -rw-r--r-- | internal/router/lang-blog.go | 7 | ||||
| -rw-r--r-- | internal/router/lang-map.go | 7 | ||||
| -rw-r--r-- | internal/router/root.go | 7 | ||||
| -rw-r--r-- | internal/router/tm.go | 18 | ||||
| -rw-r--r-- | internal/templatemanager/templatemanager.go | 24 | ||||
| -rw-r--r-- | main.go | 23 | ||||
| -rw-r--r-- | views/pages/global-map.html | 11 |
9 files changed, 32 insertions, 79 deletions
diff --git a/internal/router/api-v1-blog-search.go b/internal/router/api-v1-blog-search.go index 51ace85..2997407 100644 --- a/internal/router/api-v1-blog-search.go +++ b/internal/router/api-v1-blog-search.go @@ -10,15 +10,12 @@ import ( "time" "github.com/SayaAndy/saya-today-web/internal/b2" + "github.com/SayaAndy/saya-today-web/internal/templatemanager" "github.com/SayaAndy/saya-today-web/locale" "github.com/gofiber/fiber/v2" ) -func init() { - tm.Add("catalogue-blog-cards", "views/partials/catalogue-blog-cards.html", "views/partials/catalogue-blog-card-tags.html") -} - -func Api_V1_BlogSearch(l map[string]*locale.LocaleConfig, langs []string, b2Client *b2.B2Client) func(c *fiber.Ctx) error { +func Api_V1_BlogSearch(tm *templatemanager.TemplateManager, l map[string]*locale.LocaleConfig, langs []string, b2Client *b2.B2Client) func(c *fiber.Ctx) error { return func(c *fiber.Ctx) error { sort := c.Query("sort") lang := c.Query("lang") diff --git a/internal/router/lang-blog-title.go b/internal/router/lang-blog-title.go index b7b5d7e..39d4252 100644 --- a/internal/router/lang-blog-title.go +++ b/internal/router/lang-blog-title.go @@ -11,16 +11,13 @@ import ( "github.com/SayaAndy/saya-today-web/internal/b2" "github.com/SayaAndy/saya-today-web/internal/frontmatter" + "github.com/SayaAndy/saya-today-web/internal/templatemanager" "github.com/SayaAndy/saya-today-web/locale" "github.com/gofiber/fiber/v2" "github.com/yuin/goldmark" ) -func init() { - tm.Add("blog-page", "views/layouts/general-page.html", "views/pages/blog-page.html") -} - -func Lang_Blog_Title(l map[string]*locale.LocaleConfig, langs []string, b2Client *b2.B2Client, md goldmark.Markdown) func(c *fiber.Ctx) error { +func Lang_Blog_Title(tm *templatemanager.TemplateManager, l map[string]*locale.LocaleConfig, langs []string, b2Client *b2.B2Client, md goldmark.Markdown) func(c *fiber.Ctx) error { return func(c *fiber.Ctx) error { lang := c.Params("lang") if !slices.Contains(langs, lang) { diff --git a/internal/router/lang-blog.go b/internal/router/lang-blog.go index 650c4b1..1a7cbca 100644 --- a/internal/router/lang-blog.go +++ b/internal/router/lang-blog.go @@ -9,15 +9,12 @@ import ( "strings" "github.com/SayaAndy/saya-today-web/internal/b2" + "github.com/SayaAndy/saya-today-web/internal/templatemanager" "github.com/SayaAndy/saya-today-web/locale" "github.com/gofiber/fiber/v2" ) -func init() { - tm.Add("blog-catalogue", "views/layouts/general-page.html", "views/pages/blog-catalogue.html") -} - -func Lang_Blog(l map[string]*locale.LocaleConfig, langs []string, b2Client *b2.B2Client) func(c *fiber.Ctx) error { +func Lang_Blog(tm *templatemanager.TemplateManager, l map[string]*locale.LocaleConfig, langs []string, b2Client *b2.B2Client) func(c *fiber.Ctx) error { return func(c *fiber.Ctx) error { lang := c.Params("lang") if !slices.Contains(langs, lang) { diff --git a/internal/router/lang-map.go b/internal/router/lang-map.go index e94d756..8cc070a 100644 --- a/internal/router/lang-map.go +++ b/internal/router/lang-map.go @@ -8,15 +8,12 @@ import ( "strings" "github.com/SayaAndy/saya-today-web/internal/b2" + "github.com/SayaAndy/saya-today-web/internal/templatemanager" "github.com/SayaAndy/saya-today-web/locale" "github.com/gofiber/fiber/v2" ) -func init() { - tm.Add("global-map", "views/pages/global-map.html") -} - -func Lang_Map(l map[string]*locale.LocaleConfig, langs []string, b2Client *b2.B2Client) func(c *fiber.Ctx) error { +func Lang_Map(tm *templatemanager.TemplateManager, l map[string]*locale.LocaleConfig, langs []string, b2Client *b2.B2Client) func(c *fiber.Ctx) error { return func(c *fiber.Ctx) error { lang := c.Params("lang") if !slices.Contains(langs, lang) { diff --git a/internal/router/root.go b/internal/router/root.go index f4a0692..f5be6cb 100644 --- a/internal/router/root.go +++ b/internal/router/root.go @@ -4,14 +4,11 @@ import ( "log/slog" "github.com/SayaAndy/saya-today-web/config" + "github.com/SayaAndy/saya-today-web/internal/templatemanager" "github.com/gofiber/fiber/v2" ) -func init() { - tm.Add("index", "views/index.html") -} - -func Root(localeCfg []config.AvailableLanguageConfig) func(c *fiber.Ctx) error { +func Root(tm *templatemanager.TemplateManager, localeCfg []config.AvailableLanguageConfig) func(c *fiber.Ctx) error { return func(c *fiber.Ctx) error { content, err := tm.Render("index", fiber.Map{ "AvailableLanguages": localeCfg, diff --git a/internal/router/tm.go b/internal/router/tm.go deleted file mode 100644 index e8095ee..0000000 --- a/internal/router/tm.go +++ /dev/null @@ -1,18 +0,0 @@ -package router - -import ( - "log/slog" - "os" - - "github.com/SayaAndy/saya-today-web/internal/templatemanager" -) - -var tm = assert(templatemanager.NewTemplateManager()) - -func assert[T any](t T, err error) T { - if err != nil { - slog.Error("fail to initialize template manager", slog.String("error", err.Error())) - os.Exit(1) - } - return t -} diff --git a/internal/templatemanager/templatemanager.go b/internal/templatemanager/templatemanager.go index f89d0c8..5effcb3 100644 --- a/internal/templatemanager/templatemanager.go +++ b/internal/templatemanager/templatemanager.go @@ -22,7 +22,7 @@ type TemplateManagerTemplates struct { Files []string } -func NewTemplateManager(templates ...TemplateManagerTemplates) (*TemplateManager, error) { +func NewTemplateManager(templates []TemplateManagerTemplates) (*TemplateManager, error) { templateMap := make(map[string]templateManagerRender) for _, tmplStruct := range templates { @@ -37,6 +37,7 @@ func NewTemplateManager(templates ...TemplateManagerTemplates) (*TemplateManager Main: filepath.Base(tmplStruct.Files[0]), Tmpl: tmpl, } + } return &TemplateManager{ @@ -54,24 +55,3 @@ func (tm *TemplateManager) Render(name string, data interface{}) ([]byte, error) err := tmpl.Tmpl.ExecuteTemplate(&buf, tmpl.Main, data) return buf.Bytes(), err } - -func (tm *TemplateManager) Add(name string, files ...string) error { - if len(files) == 0 { - return fmt.Errorf("you can't add template without any files") - } - - tmpl := template.New("").Funcs(template.FuncMap{ - "contains": strings.Contains, - }) - - tmpl, err := tmpl.ParseFiles(files...) - if err != nil { - return fmt.Errorf("failed to add template into manager: %w", err) - } - - tm.templates[name] = templateManagerRender{ - Main: filepath.Base(files[0]), - Tmpl: tmpl, - } - return nil -} @@ -11,6 +11,7 @@ import ( "github.com/SayaAndy/saya-today-web/internal/lightgallery" "github.com/SayaAndy/saya-today-web/internal/router" "github.com/SayaAndy/saya-today-web/internal/tailwind" + "github.com/SayaAndy/saya-today-web/internal/templatemanager" "github.com/SayaAndy/saya-today-web/locale" "github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2/middleware/redirect" @@ -68,6 +69,18 @@ func main() { localization[lang.Name] = localeCfg } + tm, err := templatemanager.NewTemplateManager([]templatemanager.TemplateManagerTemplates{ + {Name: "blog-page", Files: []string{"views/layouts/general-page.html", "views/pages/blog-page.html"}}, + {Name: "blog-catalogue", Files: []string{"views/layouts/general-page.html", "views/pages/blog-catalogue.html"}}, + {Name: "index", Files: []string{"views/index.html"}}, + {Name: "catalogue-blog-cards", Files: []string{"views/partials/catalogue-blog-cards.html", "views/partials/catalogue-blog-card-tags.html"}}, + {Name: "global-map", Files: []string{"views/pages/global-map.html"}}, + }) + if err != nil { + slog.Error("fail to initialize template manager", slog.String("error", err.Error())) + os.Exit(1) + } + app := fiber.New(fiber.Config{}) app.Use(redirect.New(redirect.Config{ @@ -78,12 +91,12 @@ func main() { StatusCode: 301, })) - app.Get("/", router.Root(cfg.AvailableLanguages)) - app.Get("/:lang/map", router.Lang_Map(localization, availableLanguages, b2Client)) - app.Get("/:lang/blog", router.Lang_Blog(localization, availableLanguages, b2Client)) - app.Get("/:lang/blog/:title", router.Lang_Blog_Title(localization, availableLanguages, b2Client, md)) + app.Get("/", router.Root(tm, cfg.AvailableLanguages)) + app.Get("/:lang/map", router.Lang_Map(tm, localization, availableLanguages, b2Client)) + app.Get("/:lang/blog", router.Lang_Blog(tm, localization, availableLanguages, b2Client)) + app.Get("/:lang/blog/:title", router.Lang_Blog_Title(tm, localization, availableLanguages, b2Client, md)) app.Get("/api/v1/tz", router.Api_V1_TZ()) - app.Get("/api/v1/blog-search", router.Api_V1_BlogSearch(localization, availableLanguages, b2Client)) + app.Get("/api/v1/blog-search", router.Api_V1_BlogSearch(tm, localization, availableLanguages, b2Client)) app.Static("/", "./static") diff --git a/views/pages/global-map.html b/views/pages/global-map.html index 05c39a1..09d7ab2 100644 --- a/views/pages/global-map.html +++ b/views/pages/global-map.html @@ -11,8 +11,6 @@ {{ block "header" . }}{{ end }} <link href="/output.css" rel="stylesheet"> <link rel="stylesheet" href="https://f003.backblazeb2.com/file/sayana-static/libs/leaflet/1.9.4/leaflet.css"> - <link rel="stylesheet" href="https://f003.backblazeb2.com/file/sayana-static/libs/leaflet.markercluster/1.4.1/MarkerCluster.css"> - <link rel="stylesheet" href="https://f003.backblazeb2.com/file/sayana-static/libs/leaflet.markercluster/1.4.1/MarkerCluster.Default.css"> </head> <body data-theme="ram" class="font-spectral text-main-dark overflow-hidden bg-interlocked-hexagons h-screen flex flex-row ar-lt-0.8:flex-col"> @@ -62,7 +60,6 @@ <script src="https://f003.backblazeb2.com/file/sayana-static/libs/htmx/2.0.6/htmx.min.js"></script> <script src="https://f003.backblazeb2.com/file/sayana-static/libs/leaflet/1.9.4/leaflet.js"></script> - <script src="https://f003.backblazeb2.com/file/sayana-static/libs/leaflet.markercluster/1.4.1/leaflet.markercluster.js"></script> <script> const themeWheel = document.getElementById('theme-wheel'); @@ -177,7 +174,6 @@ <script> var map; - var markers = L.markerClusterGroup(); function initLocationMap() { map = L.map('map-container').setView([{{ .MapLocationLat }}, {{ .MapLocationLong }}], 4); @@ -186,8 +182,6 @@ maxZoom: 18, attribution: '© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>' }).addTo(map); - - map.addLayer(markers); } function stringToColor(str) { @@ -219,13 +213,12 @@ var marker = L.marker([x, y], { title: title, - }).bindPopup(` + }).addTo(map) + .bindPopup(` <div class="flex flex-row justify-center justify-items-center"> <img onclick="location.href='${link}';" class="cursor-pointer object-cover rounded-[10%] select-none w-[3vmax] h-[3vmax] mr-[0.5vmax]" src="https://f003.backblazeb2.com/file/sayana-photos/webp-320p/${thumbnail}.webp"> <span><b><a href="${link}">${title}</a></b><br><a href="https://www.openstreetmap.org/#map=13/${x}/${y}">${x}, ${y}</a></span> </div>`); - - markers.addLayer(marker); } document.addEventListener('DOMContentLoaded', () => { |