Diffstat (limited to 'internal')
| -rw-r--r-- | internal/frontmatter/parser.go | 19 | ||||
| -rw-r--r-- | internal/glightbox/block.go | 5 | ||||
| -rw-r--r-- | internal/glightbox/html_renderer.go | 47 | ||||
| -rw-r--r-- | internal/glightbox/parser.go | 9 | ||||
| -rw-r--r-- | internal/router/basic-handler.go | 6 | ||||
| -rw-r--r-- | internal/router/handlers/lang-blog-title.go | 14 | ||||
| -rw-r--r-- | internal/router/handlers/lang-map.go | 8 | ||||
| -rw-r--r-- | internal/router/handlers/lang-user.go | 7 | ||||
| -rw-r--r-- | internal/router/handlers/lang.go | 8 | ||||
| -rw-r--r-- | internal/router/handlers/root.go | 7 | ||||
| -rw-r--r-- | internal/router/router.go | 12 | ||||
| -rw-r--r-- | internal/templatemanager/templatemanager.go | 3 |
12 files changed, 39 insertions, 106 deletions
diff --git a/internal/frontmatter/parser.go b/internal/frontmatter/parser.go index 6062113..83312dc 100644 --- a/internal/frontmatter/parser.go +++ b/internal/frontmatter/parser.go @@ -9,16 +9,15 @@ import ( ) type Metadata struct { - Title string `yaml:"title"` - ShortDescription string `yaml:"shortDescription"` - ActionDate string `yaml:"actionDate"` - PublishedTime time.Time `yaml:"publishedTime"` - Thumbnail string `yaml:"thumbnail"` - Tags []string `yaml:"tags"` - Geolocation string `yaml:"geolocation"` - Medley string `yaml:"medley"` - MedleyPart int `yaml:"medleyPart"` - ContentSettings map[string]string `yaml:"contentSettings"` + Title string `yaml:"title"` + ShortDescription string `yaml:"shortDescription"` + ActionDate string `yaml:"actionDate"` + PublishedTime time.Time `yaml:"publishedTime"` + Thumbnail string `yaml:"thumbnail"` + Tags []string `yaml:"tags"` + Geolocation string `yaml:"geolocation"` + Medley string `yaml:"medley"` + MedleyPart int `yaml:"medleyPart"` } func ParseFrontmatter(content []byte) (metadata *Metadata, markdown []byte, err error) { diff --git a/internal/glightbox/block.go b/internal/glightbox/block.go index 30cda1c..e53e67b 100644 --- a/internal/glightbox/block.go +++ b/internal/glightbox/block.go @@ -9,9 +9,8 @@ import ( // GLightboxBlock represents a light gallery block in the AST type GLightboxBlock struct { ast.BaseBlock - Images []GLightboxImage - Location *time.Location - Namespace string + Images []GLightboxImage + Location *time.Location } type GLightboxImage struct { diff --git a/internal/glightbox/html_renderer.go b/internal/glightbox/html_renderer.go index ac34880..b7b256a 100644 --- a/internal/glightbox/html_renderer.go +++ b/internal/glightbox/html_renderer.go @@ -68,8 +68,7 @@ func (r *GLightboxHTMLRenderer) renderGLightbox(w util.BufWriter, source []byte, var elements []string for i, img := range gallery.Images { - fullImageUrl := gallery.Namespace + img.URL - imageUrlSegments := strings.Split(fullImageUrl, ".") + imageUrlSegments := strings.Split(img.URL, ".") imageUrlWithoutExt := strings.Join(imageUrlSegments[:len(imageUrlSegments)-1], ".") imageUrlParts := strings.Split(imageUrlWithoutExt, "/") imageNameParts := strings.Split(imageUrlParts[len(imageUrlParts)-1], "-") @@ -123,7 +122,7 @@ func (r *GLightboxHTMLRenderer) renderGLightbox(w util.BufWriter, source []byte, </picture> <span class="grid-tooltip-text"><p>%s</p></span> <span class="grid-item-index">%d</span> - </a>`, fullImageUrl, strings.Join(tagClassList, " "), galleryID, dayDate.Format("2006-01-02 15:04:05 -07:00"), dataDescriptionAttribute, imageUrlWithoutExt, imageUrlWithoutExt, imageUrlWithoutExt, imageUrlWithoutExt, imageUrlWithoutExt, imageUrlWithoutExt, anchorlessCaptionHTML, i+1)) + </a>`, img.URL, strings.Join(tagClassList, " "), galleryID, dayDate.Format("2006-01-02 15:04:05 -07:00"), dataDescriptionAttribute, imageUrlWithoutExt, imageUrlWithoutExt, imageUrlWithoutExt, imageUrlWithoutExt, imageUrlWithoutExt, imageUrlWithoutExt, anchorlessCaptionHTML, i+1)) if glightboxDescId != "" { elements = append(elements, fmt.Sprintf(` @@ -133,43 +132,43 @@ func (r *GLightboxHTMLRenderer) renderGLightbox(w util.BufWriter, source []byte, } } - w.WriteString(strings.ReplaceAll(` + w.WriteString(fmt.Sprintf(` <div class="items-center flex flex-col"> <hr class="border-t-3 border-dotted border-main-hard mt-1 mb-2 w-[80%%] ml-auto mr-auto"> - <div class="grid masonry-grid-{id}"> - <div class="grid-sizer grid-sizer-{id}"></div> - `+strings.Join(elements, "\n")+` + <div class="grid masonry-grid-%s"> + <div class="grid-sizer grid-sizer-%s"></div> + %s </div> <hr class="border-t-3 border-dotted border-main-hard mt-1 mb-2 w-[80%%] ml-auto mr-auto"> -</div> +</div>`, galleryID, galleryID, strings.Join(elements, "\n"))) + w.WriteString(fmt.Sprintf(` <script> - var pckry_{id} = new Packery('.masonry-grid-{id}', { - itemSelector: '.grid-item-{id}', - columnWidth: '.grid-sizer-{id}', + var pckry_%s = new Packery('.masonry-grid-%s', { + itemSelector: '.grid-item-%s', + columnWidth: '.grid-sizer-%s', percentPosition: false }); - var imgLoad_{id}_timer; - var imgLoad_{id} = imagesLoaded('.masonry-grid-{id}'); + var imgLoad_%s_timer; + var imgLoad_%s = imagesLoaded('.masonry-grid-%s'); - function initMasonryLayout_{id}(tm) { - clearTimeout(imgLoad_{id}_timer); - imgLoad_{id}_timer = setTimeout(() => pckry_{id}.layout(), 100); + function initMasonryLayout_%s(tm) { + clearTimeout(imgLoad_%s_timer); + imgLoad_%s_timer = setTimeout(() => pckry_%s.layout(), 100); } - imgLoad_{id}.on('progress', initMasonryLayout_{id}); + imgLoad_%s.on('progress', initMasonryLayout_%s); - window.addEventListener('resize', initMasonryLayout_{id}); + window.addEventListener('resize', initMasonryLayout_%s); document.addEventListener('popout', (e) => { - window.removeEventListener('resize', initMasonryLayout_{id}); - imgLoad_{id}.off('progress', initMasonryLayout_{id}); - initMasonryLayout_{id} = null; - imgLoad_{id} = null; + window.removeEventListener('resize', initMasonryLayout_%s); + imgLoad_%s.off('progress', initMasonryLayout_%s); + initMasonryLayout_%s = null; + imgLoad_%s = null; }, {once: true}); -</script> -`, "{id}", galleryID)) +</script>`, galleryID, galleryID, galleryID, galleryID, galleryID, galleryID, galleryID, galleryID, galleryID, galleryID, galleryID, galleryID, galleryID, galleryID, galleryID, galleryID, galleryID, galleryID, galleryID)) } return ast.WalkContinue, nil diff --git a/internal/glightbox/parser.go b/internal/glightbox/parser.go index b376034..6780090 100644 --- a/internal/glightbox/parser.go +++ b/internal/glightbox/parser.go @@ -29,7 +29,7 @@ func (p *GLightboxParser) Open(parent ast.Node, reader text.Reader, pc parser.Co return nil, parser.NoChildren } - r := regexp.MustCompile(`^\{Gallery:([A-Za-z0-9\+\-/]+)(:([A-Za-z0-9\+\-/]+))?\}$`) + r := regexp.MustCompile(`^\{Gallery:([A-Za-z0-9\+\-/]+)\}$`) trimmed := bytes.TrimSpace(line) parts := r.FindSubmatch(trimmed) @@ -44,12 +44,7 @@ func (p *GLightboxParser) Open(parent ast.Node, reader text.Reader, pc parser.Co return nil, parser.NoChildren } - ns := "" - if len(parts) >= 4 { - ns = string(parts[3]) - } - - return &GLightboxBlock{Location: loc, Namespace: ns}, parser.NoChildren + return &GLightboxBlock{Location: loc}, parser.NoChildren } func (p *GLightboxParser) Continue(node ast.Node, reader text.Reader, pc parser.Context) parser.State { diff --git a/internal/router/basic-handler.go b/internal/router/basic-handler.go index 4a94a48..a859d10 100644 --- a/internal/router/basic-handler.go +++ b/internal/router/basic-handler.go @@ -41,12 +41,6 @@ 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 97de089..0f4f564 100644 --- a/internal/router/handlers/lang-blog-title.go +++ b/internal/router/handlers/lang-blog-title.go @@ -46,20 +46,6 @@ 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 7df6104..dbf1437 100644 --- a/internal/router/handlers/lang-map.go +++ b/internal/router/handlers/lang-map.go @@ -3,7 +3,6 @@ package handlers import ( "fmt" "log/slog" - "slices" "strconv" "strings" @@ -42,9 +41,6 @@ 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", @@ -56,7 +52,6 @@ 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"` @@ -66,7 +61,7 @@ func (r *MapHandler) Render(c *fiber.Ctx, supplements *router.Supplements, lang } mapMarkers := make([]*MapMarker, 0, len(pages)) - for i, page := range pages { + for _, page := range pages { geolocationParts := strings.Split(page.Metadata.Geolocation, " ") if len(geolocationParts) < 2 { continue @@ -83,7 +78,6 @@ 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 c22bcac..db566fe 100644 --- a/internal/router/handlers/lang-user.go +++ b/internal/router/handlers/lang-user.go @@ -37,13 +37,6 @@ 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 74166ae..fc4deb6 100644 --- a/internal/router/handlers/lang.go +++ b/internal/router/handlers/lang.go @@ -41,14 +41,6 @@ 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 9f15782..c8c4cd4 100644 --- a/internal/router/handlers/root.go +++ b/internal/router/handlers/root.go @@ -35,13 +35,6 @@ 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 f28add2..c0556f0 100644 --- a/internal/router/router.go +++ b/internal/router/router.go @@ -60,7 +60,6 @@ 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) @@ -383,18 +382,11 @@ func (r *Router) generalPage(c *fiber.Ctx, route Route, lang string) error { return c.Status(fiber.StatusOK).Type("html").Send(val) } - valueMap := fiber.Map{ + content, err := r.supplements.TemplateManager.Render("general-page", 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") diff --git a/internal/templatemanager/templatemanager.go b/internal/templatemanager/templatemanager.go index b23e2e8..75309e4 100644 --- a/internal/templatemanager/templatemanager.go +++ b/internal/templatemanager/templatemanager.go @@ -32,9 +32,6 @@ var templateFuncMap = template.FuncMap{ return items }, "replace": strings.ReplaceAll, - "fdiv": func(a, b int) float64 { - return float64(a) / float64(b) - }, } func NewTemplateManager(templates ...TemplateManagerTemplates) (*TemplateManager, error) { |