summaryrefslogtreecommitdiff
path: root/internal/lightgallery/html_renderer.go
diff options
from:
to:
context:
space:
mode:
authorGravatar SayaAndy <montferrat@tuta.io> 2025-08-14 04:18:31 +0700
committerGravatar SayaAndy <montferrat@tuta.io> 2025-08-14 04:18:31 +0700
commit85d4a9799ce2ce663af25be8c7e8f59f8d43761d (patch)
tree1956c3b72dfe132fe044e6b5bede460a49b5b136 /internal/lightgallery/html_renderer.go
parentd15630a014e31835f66b0b50d9cc1e59ee4f203c (diff)
downloadweb-0.5.7.tar.gz
web-0.5.7.zip
feat: parse gallery caption as an inline markdownv0.5.7
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
Diffstat (limited to 'internal/lightgallery/html_renderer.go')
-rw-r--r--internal/lightgallery/html_renderer.go29
1 files changed, 19 insertions, 10 deletions
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("<p>"))
+ captionHTML = bytes.TrimSuffix(captionHTML, []byte("</p>\n"))
+ captionHTML = bytes.TrimSuffix(captionHTML, []byte("</p>"))
+ }
+
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 [
<p class="grow !text-[1vmax]/[0.9] text-left font-spectral text-main-dark">%s</p>
<p class="!text-[1vmax]/[0.9] text-right font-spectral text-secondary">%s</p>
</div>`+"`"+`
- }`, 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, "&", "&amp;")
- s = strings.ReplaceAll(s, "<", "&lt;")
- s = strings.ReplaceAll(s, ">", "&gt;")
- s = strings.ReplaceAll(s, "\"", "&quot;")
- s = strings.ReplaceAll(s, "'", "&#39;")
- return s
-}
-
func generateDivId(length int) string {
const charset = "abcdefghijklmnopqrstuvwxyz"
seededRand := rand.New(rand.NewSource(time.Now().UnixNano())) // Seed with current time