From 85d4a9799ce2ce663af25be8c7e8f59f8d43761d Mon Sep 17 00:00:00 2001
From: SayaAndy
Date: Thu, 14 Aug 2025 04:18:31 +0700
Subject: feat: parse gallery caption as an inline markdown feat: stylize href
links for themes feat: adapt map palette for dark themes like night and ram
feat: add popup for markers on maps feat: dump z-index from 13 to 8 for zoom
on region level feat: show timezone in catalogue with colon fix: ignore empty
lines inside gallery block fix: enable closing tag for gallery block with
slash fix: on filter reset in catalogue default to publication date desc sort
---
internal/lightgallery/html_renderer.go | 29 +++++++++++++++++++----------
1 file changed, 19 insertions(+), 10 deletions(-)
(limited to 'internal/lightgallery/html_renderer.go')
diff --git a/internal/lightgallery/html_renderer.go b/internal/lightgallery/html_renderer.go
index 77b9785..850cd95 100644
--- a/internal/lightgallery/html_renderer.go
+++ b/internal/lightgallery/html_renderer.go
@@ -1,11 +1,13 @@
package lightgallery
import (
+ "bytes"
"fmt"
"math/rand"
"strings"
"time"
+ "github.com/yuin/goldmark"
"github.com/yuin/goldmark/ast"
"github.com/yuin/goldmark/renderer"
"github.com/yuin/goldmark/renderer/html"
@@ -14,11 +16,18 @@ import (
type LightGalleryHTMLRenderer struct {
html.Config
+ md goldmark.Markdown
}
func NewLightGalleryHTMLRenderer(opts ...html.Option) renderer.NodeRenderer {
r := &LightGalleryHTMLRenderer{
Config: html.NewConfig(),
+ md: goldmark.New(
+ goldmark.WithRendererOptions(
+ html.WithHardWraps(),
+ html.WithXHTML(),
+ ),
+ ),
}
for _, opt := range opts {
opt.SetHTMLOption(&r.Config)
@@ -53,6 +62,15 @@ func (r *LightGalleryHTMLRenderer) renderLightGallery(w util.BufWriter, source [
imageUrlWithoutExt := strings.Join(imageUrlSegments[:len(imageUrlSegments)-1], ".")
imageNameParts := strings.Split(imageUrlWithoutExt, "-")
+ var captionBuf bytes.Buffer
+ captionHTML := img.Caption
+ if err := r.md.Convert(img.Caption, &captionBuf); err == nil {
+ captionHTML = captionBuf.Bytes()
+ captionHTML = bytes.TrimPrefix(captionHTML, []byte(""))
+ captionHTML = bytes.TrimSuffix(captionHTML, []byte("
\n"))
+ captionHTML = bytes.TrimSuffix(captionHTML, []byte("
"))
+ }
+
dayDate, _ := time.Parse("20060102 150405", imageNameParts[len(imageNameParts)-2]+" "+imageNameParts[len(imageNameParts)-1])
dayDate = dayDate.In(gallery.Location)
dynamicElements = append(dynamicElements, fmt.Sprintf(`{
@@ -71,7 +89,7 @@ func (r *LightGalleryHTMLRenderer) renderLightGallery(w util.BufWriter, source [
%s
%s
`+"`"+`
- }`, img.URL, img.URL, escapeHTML(img.Caption), imageUrlWithoutExt, imageUrlWithoutExt, escapeHTML(img.Caption), dayDate.Format("2006-01-02 15:04:05 -07:00")))
+ }`, img.URL, img.URL, util.EscapeHTML(captionHTML), imageUrlWithoutExt, imageUrlWithoutExt, captionHTML, dayDate.Format("2006-01-02 15:04:05 -07:00")))
}
w.WriteString(fmt.Sprintf(`
@@ -118,15 +136,6 @@ window.addEventListener("resize", () => {
return ast.WalkContinue, nil
}
-func escapeHTML(s string) string {
- s = strings.ReplaceAll(s, "&", "&")
- s = strings.ReplaceAll(s, "<", "<")
- s = strings.ReplaceAll(s, ">", ">")
- s = strings.ReplaceAll(s, "\"", """)
- s = strings.ReplaceAll(s, "'", "'")
- return s
-}
-
func generateDivId(length int) string {
const charset = "abcdefghijklmnopqrstuvwxyz"
seededRand := rand.New(rand.NewSource(time.Now().UnixNano())) // Seed with current time
--
cgit v1.3.1+13