summaryrefslogtreecommitdiff
path: root/main.go
diff refs
from: back
to: back
| flip
diff options
context:
space:
mode:
Diffstat (limited to 'main.go')
-rw-r--r--main.go47
1 files changed, 28 insertions, 19 deletions
diff --git a/main.go b/main.go
index 6a36f59..4dc9619 100644
--- a/main.go
+++ b/main.go
@@ -93,7 +93,8 @@ func main() {
app.Use(redirect.New(redirect.Config{
Rules: map[string]string{
- "/blog": "/",
+ "/ru": "/",
+ "/en": "/",
},
StatusCode: 301,
}))
@@ -111,7 +112,7 @@ func main() {
return c.Type("html").Send(content)
})
- app.Get("/blog/:lang", func(c *fiber.Ctx) error {
+ app.Get("/:lang/blog", func(c *fiber.Ctx) error {
lang := c.Params("lang")
if !slices.Contains(availableLanguages, lang) {
c.Set(fiber.HeaderContentType, fiber.MIMETextPlainCharsetUTF8)
@@ -120,7 +121,7 @@ func main() {
querySort := c.Query("sort")
if querySort == "" {
- querySort = "titleAsc"
+ querySort = "publicationDateDesc"
}
encodedQuery := c.Request().URI().QueryString()
@@ -145,19 +146,26 @@ func main() {
pages = []*b2.BlogPage{}
}
- tagsSet := make(map[string]struct{})
+ tagsMap := make(map[string]int)
for _, page := range pages {
- slog.Debug("enlist page for catalogue", slog.Any("page", page), slog.String("endpoint", "/"))
+ slog.Debug("enlist page for catalogue", slog.Any("page", page), slog.String("endpoint", "/"+lang+"/blog"))
for _, tag := range page.Metadata.Tags {
- tagsSet[tag] = struct{}{}
+ tagsMap[tag]++
}
}
- tagsArray := make([]string, 0, len(tagsSet))
- for tag := range tagsSet {
- tagsArray = append(tagsArray, tag)
+ type Tag struct {
+ Name string `json:"Name" yaml:"name"`
+ Count int `json:"Count" yaml:"count"`
}
- slices.Sort(tagsArray)
+
+ tagsArray := make([]Tag, 0, len(tagsMap))
+ for tag, count := range tagsMap {
+ tagsArray = append(tagsArray, Tag{tag, count})
+ }
+ slices.SortFunc(tagsArray, func(a Tag, b Tag) int {
+ return strings.Compare(a.Name, b.Name)
+ })
content, err := tm.Render("blog-catalogue", fiber.Map{
"QuerySort": querySort,
@@ -169,7 +177,7 @@ func main() {
"Title": localization[lang].BlogSearch.Header,
})
if err != nil {
- slog.Warn("failed to generate page", slog.String("page", "/blog/"+lang), slog.String("error", err.Error()))
+ slog.Warn("failed to generate page", slog.String("page", "/"+lang+"/blog"), slog.String("error", err.Error()))
c.Set(fiber.HeaderContentType, fiber.MIMETextPlainCharsetUTF8)
return c.Status(fiber.ErrInternalServerError.Code).SendString("failed to generate page")
}
@@ -177,7 +185,7 @@ func main() {
return c.Type("html").Status(status).Send(content)
})
- app.Get("/blog/:lang/:title", func(c *fiber.Ctx) error {
+ app.Get("/:lang/blog/:title", func(c *fiber.Ctx) error {
lang := c.Params("lang")
if !slices.Contains(availableLanguages, lang) {
c.Set(fiber.HeaderContentType, fiber.MIMETextPlainCharsetUTF8)
@@ -211,7 +219,7 @@ func main() {
"Lang": lang,
})
if err != nil {
- slog.Warn("failed to generate page", slog.String("page", "/blog/"+lang+c.Params("title")), slog.String("error", err.Error()))
+ slog.Warn("failed to generate page", slog.String("page", "/"+lang+"/blog/"+c.Params("title")), slog.String("error", err.Error()))
c.Set(fiber.HeaderContentType, fiber.MIMETextPlainCharsetUTF8)
return c.Status(fiber.ErrInternalServerError.Code).SendString("failed to generate page")
}
@@ -255,8 +263,9 @@ func main() {
if len(tags) == 0 || slices.Contains(tags, tag) {
pageMeta = append(pageMeta, map[string]string{
"Link": page.Link,
+ "ArticleLink": "/" + lang + "/blog/" + page.FileName,
"Title": page.Metadata.Title,
- "PublishedTime": page.Metadata.PublishedTime.Format("2006-01-02 15:04:05 -0700"),
+ "PublishedTime": page.Metadata.PublishedTime.Format("2006-01-02 15:04:05 -07:00"),
"ActionDate": page.Metadata.ActionDate,
"ShortDescription": page.Metadata.ShortDescription,
"Thumbnail": page.Metadata.Thumbnail,
@@ -278,12 +287,12 @@ func main() {
case "actionDateDesc":
return strings.Compare(b["ActionDate"], a["ActionDate"])
case "publicationDateAsc":
- publishedTimeA, _ := time.Parse(time.RFC3339, a["PublishedTime"])
- publishedTimeB, _ := time.Parse(time.RFC3339, b["PublishedTime"])
+ publishedTimeA, _ := time.Parse("2006-01-02 15:04:05 -07:00", a["PublishedTime"])
+ publishedTimeB, _ := time.Parse("2006-01-02 15:04:05 -07:00", b["PublishedTime"])
return publishedTimeA.Compare(publishedTimeB)
case "publicationDateDesc":
- publishedTimeA, _ := time.Parse(time.RFC3339, a["PublishedTime"])
- publishedTimeB, _ := time.Parse(time.RFC3339, b["PublishedTime"])
+ publishedTimeA, _ := time.Parse("2006-01-02 15:04:05 -07:00", a["PublishedTime"])
+ publishedTimeB, _ := time.Parse("2006-01-02 15:04:05 -07:00", b["PublishedTime"])
return publishedTimeB.Compare(publishedTimeA)
}
return 0
@@ -294,7 +303,7 @@ func main() {
"L": localization[lang],
})
if err != nil {
- slog.Warn("failed to generate div", slog.String("page", "/blog/"+lang), slog.String("error", err.Error()))
+ slog.Warn("failed to generate div", slog.String("page", "/"+lang+"/blog"), slog.String("error", err.Error()))
c.Set(fiber.HeaderContentType, fiber.MIMETextPlainCharsetUTF8)
return c.Status(fiber.ErrInternalServerError.Code).SendString("failed to generate div")
}