From 454e2f3cd84b6c0b02a0c2936a574d3d9c35c5a1 Mon Sep 17 00:00:00 2001 From: SayaAndy Date: Wed, 15 Oct 2025 02:43:04 +0700 Subject: feat: start switching to absolute length units in design --- internal/tailwind/transformer.go | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) (limited to 'internal/tailwind') diff --git a/internal/tailwind/transformer.go b/internal/tailwind/transformer.go index 2f052b9..4057ea4 100644 --- a/internal/tailwind/transformer.go +++ b/internal/tailwind/transformer.go @@ -17,44 +17,44 @@ func (t *TailwindTransformer) Transform(node *ast.Document, reader text.Reader, switch node := n.(type) { case *ast.Heading: classes := map[int]string{ - 1: "font-patua text-[2.5vmax] font-bold text-main-dark mb-[1.2vmin] tracking-[0.04vmin]", - 2: "font-spectral text-[2vmax] font-bold text-main-dark mb-[0.8vmin] tracking-[0.04vmin]", - 3: "font-spectral text-[1.5vmax] font-medium text-main-dark mb-[0.6vmin] tracking-[0.04vmin]", - 4: "font-spectral text-[1.2vmax] font-medium text-main-medium mb-[0.4vmin] tracking-[0.04vmin]", - 5: "font-spectral text-[1vmax] font-medium text-main-medium mb-[0.4vmin] italic tracking-[0.04vmin]", - 6: "font-spectral text-[1vmax] font-medium text-secondary mb-[0.4vmin]", + 1: "font-patua text-4xl font-bold text-main-dark mb-6 tracking-[.0125rem]", + 2: "font-spectral text-3xl font-bold text-main-dark mb-2 tracking-[.0125rem]", + 3: "font-spectral text-2xl font-medium text-main-dark mb-1.5 tracking-[.0125rem]", + 4: "font-spectral text-xl font-medium text-main-medium mb-1 tracking-[.0125rem]", + 5: "font-spectral text-base font-medium text-main-medium mb-1 italic tracking-[.0125rem]", + 6: "font-spectral text-base font-medium text-secondary mb-1", } if class, ok := classes[node.Level]; ok { node.SetAttribute([]byte("class"), []byte(class)) } case *ast.Paragraph: - node.SetAttribute([]byte("class"), []byte("text-[1vmax]/[2] font-spectral tracking-[0.04vmin] -indent-[2vmax] ml-[2vmax] mb-[1.6vmin]")) + node.SetAttribute([]byte("class"), []byte("text-base/[2] font-spectral tracking-[.0125rem] -indent-8 ml-8 mb-8")) case *ast.List: if node.IsOrdered() { - node.SetAttribute([]byte("class"), []byte("list-decimal list-inside space-y-[0.8vmin] mb-[1.6vmin] pl-[2vmax]")) + node.SetAttribute([]byte("class"), []byte("list-decimal list-inside space-y-2 mb-8 pl-8")) } else { - node.SetAttribute([]byte("class"), []byte("list-disc list-inside space-y-[0.8vmin] mb-[1.6vmin] pl-[2vmax]")) + node.SetAttribute([]byte("class"), []byte("list-disc list-inside space-y-2 mb-8 pl-8")) } case *ast.ListItem: - node.SetAttribute([]byte("class"), []byte("text-[1vmax]/[2] font-spectral tracking-[0.04vmin]")) + node.SetAttribute([]byte("class"), []byte("text-base/[2] font-spectral tracking-[.0125rem]")) case *ast.Blockquote: - node.SetAttribute([]byte("class"), []byte("border-l-[0.4vmin] border-main-medium bg-background-dark p-[0.8vmin] mb-[0.8vmin] italic")) + node.SetAttribute([]byte("class"), []byte("border-l-1 border-main-medium bg-background-dark p-2 mb-2 italic")) case *ast.CodeSpan: node.SetAttribute([]byte("class"), []byte("bg-background-dark")) case *ast.CodeBlock, *ast.FencedCodeBlock: - node.SetAttribute([]byte("class"), []byte("bg-background-dark p-[0.8vmin] rounded-lg overflow-x-auto mb-[1.6vmin]")) + node.SetAttribute([]byte("class"), []byte("bg-background-dark p-2 rounded-lg overflow-x-auto mb-8")) case *ast.Link: node.SetAttribute([]byte("class"), []byte("text-secondary hover:text-main-dark underline")) case *ast.Image: - node.SetAttribute([]byte("class"), []byte("max-w-full h-auto rounded-lg shadow-lg mb-[1.6vmin]")) + node.SetAttribute([]byte("class"), []byte("max-w-full h-auto rounded-lg shadow-lg mb-8")) case *ast.Emphasis: switch node.Level { -- cgit v1.3.1+13 From 739a4af71187e82fd58956e5ad36f0baefddf3c4 Mon Sep 17 00:00:00 2001 From: SayaAndy Date: Wed, 15 Oct 2025 18:14:59 +0700 Subject: feat: improve measurements in layout --- internal/lightgallery/html_renderer.go | 6 ++-- internal/tailwind/transformer.go | 24 +++++++------- views/index.html | 6 ++-- views/layouts/general-page.html | 8 ++--- views/pages/blog-catalogue.html | 26 ++++++++-------- views/pages/blog-page.html | 10 +++--- views/pages/global-map.html | 2 +- views/pages/home-page.html | 52 +++++++++++++++---------------- views/partials/blog-page-like-button.html | 4 +-- views/partials/catalogue-blog-cards.html | 12 +++---- views/partials/general-page-footer.html | 2 +- views/partials/general-page-header.html | 8 ++--- 12 files changed, 80 insertions(+), 80 deletions(-) (limited to 'internal/tailwind') diff --git a/internal/lightgallery/html_renderer.go b/internal/lightgallery/html_renderer.go index f02b953..c2f785e 100644 --- a/internal/lightgallery/html_renderer.go +++ b/internal/lightgallery/html_renderer.go @@ -50,10 +50,10 @@ func (r *LightGalleryHTMLRenderer) renderLightGallery(w util.BufWriter, source [ galleryID := generateDivId(8) w.WriteString(fmt.Sprintf(` -
-
+
+
-
+
`, galleryID)) var dynamicElements []string diff --git a/internal/tailwind/transformer.go b/internal/tailwind/transformer.go index 4057ea4..f932533 100644 --- a/internal/tailwind/transformer.go +++ b/internal/tailwind/transformer.go @@ -17,44 +17,44 @@ func (t *TailwindTransformer) Transform(node *ast.Document, reader text.Reader, switch node := n.(type) { case *ast.Heading: classes := map[int]string{ - 1: "font-patua text-4xl font-bold text-main-dark mb-6 tracking-[.0125rem]", - 2: "font-spectral text-3xl font-bold text-main-dark mb-2 tracking-[.0125rem]", - 3: "font-spectral text-2xl font-medium text-main-dark mb-1.5 tracking-[.0125rem]", - 4: "font-spectral text-xl font-medium text-main-medium mb-1 tracking-[.0125rem]", - 5: "font-spectral text-base font-medium text-main-medium mb-1 italic tracking-[.0125rem]", - 6: "font-spectral text-base font-medium text-secondary mb-1", + 1: "font-patua text-4xl font-bold text-main-dark mb-3 tracking-[.0125rem]", + 2: "font-spectral text-3xl font-bold text-main-dark mb-1 tracking-[.0125rem]", + 3: "font-spectral text-2xl font-medium text-main-dark mb-0.8 tracking-[.0125rem]", + 4: "font-spectral text-xl font-medium text-main-medium mb-0.5 tracking-[.0125rem]", + 5: "font-spectral text-base font-medium text-main-medium mb-0.5 italic tracking-[.0125rem]", + 6: "font-spectral text-base font-medium text-secondary mb-0.5", } if class, ok := classes[node.Level]; ok { node.SetAttribute([]byte("class"), []byte(class)) } case *ast.Paragraph: - node.SetAttribute([]byte("class"), []byte("text-base/[2] font-spectral tracking-[.0125rem] -indent-8 ml-8 mb-8")) + node.SetAttribute([]byte("class"), []byte("text-base/[2] font-spectral tracking-[.0125rem] -indent-8 ml-4 mb-8")) case *ast.List: if node.IsOrdered() { - node.SetAttribute([]byte("class"), []byte("list-decimal list-inside space-y-2 mb-8 pl-8")) + node.SetAttribute([]byte("class"), []byte("list-decimal list-inside space-y-2 mb-4 pl-8")) } else { - node.SetAttribute([]byte("class"), []byte("list-disc list-inside space-y-2 mb-8 pl-8")) + node.SetAttribute([]byte("class"), []byte("list-disc list-inside space-y-2 mb-4 pl-8")) } case *ast.ListItem: node.SetAttribute([]byte("class"), []byte("text-base/[2] font-spectral tracking-[.0125rem]")) case *ast.Blockquote: - node.SetAttribute([]byte("class"), []byte("border-l-1 border-main-medium bg-background-dark p-2 mb-2 italic")) + node.SetAttribute([]byte("class"), []byte("border-l-2 border-main-medium bg-background-dark p-1 mb-2 italic")) case *ast.CodeSpan: node.SetAttribute([]byte("class"), []byte("bg-background-dark")) case *ast.CodeBlock, *ast.FencedCodeBlock: - node.SetAttribute([]byte("class"), []byte("bg-background-dark p-2 rounded-lg overflow-x-auto mb-8")) + node.SetAttribute([]byte("class"), []byte("bg-background-dark p-1 rounded-lg overflow-x-auto mb-4")) case *ast.Link: node.SetAttribute([]byte("class"), []byte("text-secondary hover:text-main-dark underline")) case *ast.Image: - node.SetAttribute([]byte("class"), []byte("max-w-full h-auto rounded-lg shadow-lg mb-8")) + node.SetAttribute([]byte("class"), []byte("max-w-full h-auto rounded-lg shadow-lg mb-4")) case *ast.Emphasis: switch node.Level { diff --git a/views/index.html b/views/index.html index 666b9c6..c81d4b7 100644 --- a/views/index.html +++ b/views/index.html @@ -102,14 +102,14 @@ switchTheme(savedTheme); - -
-
+
+
-
+
+ class="blog-cards grow flex flex-col overflow-y-auto bg-background-light inset-shadow p-6"> Loading...
diff --git a/views/pages/blog-page.html b/views/pages/blog-page.html index cc00e1a..78a4b7f 100644 --- a/views/pages/blog-page.html +++ b/views/pages/blog-page.html @@ -16,12 +16,12 @@ {{ end }} {{ define "body" }} -
+
{{ .ParsedMarkdown }} {{- if .MapLocationX }} -
-
-
+
+
+
-{{ end }} \ No newline at end of file +{{ end }} diff --git a/views/pages/global-map.html b/views/pages/global-map.html index 330790b..7d730ea 100644 --- a/views/pages/global-map.html +++ b/views/pages/global-map.html @@ -242,7 +242,7 @@ title: title, }).bindPopup(` `); diff --git a/views/pages/home-page.html b/views/pages/home-page.html index 30f5ad0..9db6d23 100644 --- a/views/pages/home-page.html +++ b/views/pages/home-page.html @@ -1,52 +1,52 @@ {{ define "body" }} -
-
+
+
-

{{ .L.HomePage.Hymn1 }}

-
-

{{ .L.HomePage.Hymn2 }}

-

{{ .L.HomePage.Hymn3 }}

-

{{ .L.HomePage.Hymn4 }}

+
+

{{ .L.HomePage.Hymn2 }}

+

{{ .L.HomePage.Hymn3 }}

+

{{ .L.HomePage.Hymn4 }}

-

{{ .L.HomePage.DidYouKnowThat }}

-
+
    -
  • {{ index .FunFacts 0 }}
  • -
  • {{ index .FunFacts 1 }}
  • -
  • {{ index .FunFacts 2 }}
  • +
  • {{ index .FunFacts 0 }}
  • +
  • {{ index .FunFacts 1 }}
  • +
  • {{ index .FunFacts 2 }}
-
-
-

+

-
+
{{- range $_ := iterate .FilledHeartCount }}
{{- end }} @@ -54,7 +54,7 @@
{{- end }} + class="home-page-gif z-49 -rotate-12 max-w-[70%] max-h-[70%] border-4 border-(--background-dark-color) border-inset">
-

{{ .L.HomePage.SidebarDescription }}

-
+
-

{{ .L.HomePage.HomePageDescription }}

+

{{ .L.HomePage.HomePageDescription }}

-

{{ .L.HomePage.BlogSearchDescription }}

+

{{ .L.HomePage.BlogSearchDescription }}

-

{{ .L.HomePage.MarkerMapDescription }}

+

{{ .L.HomePage.MarkerMapDescription }}

-

{{ .L.HomePage.ThemeSwitchDescription }}

+

{{ .L.HomePage.ThemeSwitchDescription }}

diff --git a/views/partials/blog-page-like-button.html b/views/partials/blog-page-like-button.html index 1dfb5b8..f286471 100644 --- a/views/partials/blog-page-like-button.html +++ b/views/partials/blog-page-like-button.html @@ -1,6 +1,6 @@ \ No newline at end of file diff --git a/views/partials/catalogue-blog-cards.html b/views/partials/catalogue-blog-cards.html index f96e0f1..041f3c8 100644 --- a/views/partials/catalogue-blog-cards.html +++ b/views/partials/catalogue-blog-cards.html @@ -1,15 +1,15 @@ {{- range .BlogPages }} -
+
- -
-
- + +
+
+ {{ .Title }} // {{ .ActionDate }} -

{{ .PublishedTime }}

+

{{ .PublishedTime }}

{{ .ShortDescription }}

diff --git a/views/partials/general-page-footer.html b/views/partials/general-page-footer.html index c0774f6..8979423 100644 --- a/views/partials/general-page-footer.html +++ b/views/partials/general-page-footer.html @@ -1,5 +1,5 @@ {{ block "footer" . }}{{ end }} -

+

All the photos on saya.today are licensed under CC BY-SA 4.0 by Saya Andy © {{ .PublishedYear }}

CC diff --git a/views/partials/general-page-header.html b/views/partials/general-page-header.html index d13a6d8..115ab13 100644 --- a/views/partials/general-page-header.html +++ b/views/partials/general-page-header.html @@ -1,8 +1,8 @@
- -

//

-

{{ .Title }}

+ class="flex flex-row mb-2"> + +

//

+

{{ .Title }}

{{ .PublishedDate }}

{{ block "header" . }}{{ end }} -- cgit v1.3.1+13 From db174993127a8b2faf863a670fd6ce8ca8d7c1af Mon Sep 17 00:00:00 2001 From: SayaAndy Date: Fri, 17 Oct 2025 01:16:18 +0700 Subject: feat: add onclick links in blog post links feat: add href for any onclick links/icons chore: rm any remains of old lightgallery fix: show borders between post rows fix: map redefining --- internal/glightbox/html_renderer.go | 2 +- internal/tailwind/link_renderer.go | 49 +++++++++++++++++++++ internal/tailwind/transformer.go | 7 +++ internal/templatemanager/templatemanager.go | 4 +- main.go | 14 ++++-- static/input.css | 31 ++++---------- views/layouts/general-page.html | 27 +++++++++--- views/pages/blog-page.html | 66 +++++------------------------ views/pages/global-map.html | 16 ++++--- views/partials/catalogue-blog-cards.html | 8 ++-- views/partials/general-page-header.html | 6 ++- 11 files changed, 131 insertions(+), 99 deletions(-) create mode 100644 internal/tailwind/link_renderer.go (limited to 'internal/tailwind') diff --git a/internal/glightbox/html_renderer.go b/internal/glightbox/html_renderer.go index 3b6a533..43d4790 100644 --- a/internal/glightbox/html_renderer.go +++ b/internal/glightbox/html_renderer.go @@ -81,7 +81,7 @@ func (r *GLightboxHTMLRenderer) renderGLightbox(w util.BufWriter, source []byte, elements = append(elements, fmt.Sprintf(` - webp thumbnail + webp thumbnail `, img.URL, galleryID, galleryID, galleryID, dayDate.Format("2006-01-02 15:04:05 -07:00"), dataDescriptionAttribute, imageUrlWithoutExt)) if glightboxDescId != "" { diff --git a/internal/tailwind/link_renderer.go b/internal/tailwind/link_renderer.go new file mode 100644 index 0000000..ff3d437 --- /dev/null +++ b/internal/tailwind/link_renderer.go @@ -0,0 +1,49 @@ +package tailwind + +import ( + "github.com/yuin/goldmark/ast" + "github.com/yuin/goldmark/renderer" + "github.com/yuin/goldmark/renderer/html" + "github.com/yuin/goldmark/util" +) + +type CustomLinkRenderer struct { + html.Config +} + +func NewCustomLinkRenderer(opts ...html.Option) renderer.NodeRenderer { + r := &CustomLinkRenderer{ + Config: html.NewConfig(), + } + for _, opt := range opts { + opt.SetHTMLOption(&r.Config) + } + return r +} + +func (r *CustomLinkRenderer) renderLink(w util.BufWriter, source []byte, node ast.Node, entering bool) (ast.WalkStatus, error) { + n := node.(*ast.Link) + if entering { + _, _ = w.WriteString("") + } else { + _, _ = w.WriteString("") + } + return ast.WalkContinue, nil +} + +func (r *CustomLinkRenderer) RegisterFuncs(reg renderer.NodeRendererFuncRegisterer) { + reg.Register(ast.KindLink, r.renderLink) +} diff --git a/internal/tailwind/transformer.go b/internal/tailwind/transformer.go index f932533..23ba1a3 100644 --- a/internal/tailwind/transformer.go +++ b/internal/tailwind/transformer.go @@ -1,6 +1,9 @@ package tailwind import ( + "bytes" + "fmt" + "github.com/yuin/goldmark/ast" "github.com/yuin/goldmark/parser" "github.com/yuin/goldmark/text" @@ -51,6 +54,10 @@ func (t *TailwindTransformer) Transform(node *ast.Document, reader text.Reader, node.SetAttribute([]byte("class"), []byte("bg-background-dark p-1 rounded-lg overflow-x-auto mb-4")) case *ast.Link: + if bytes.HasPrefix(node.Destination, []byte{'.', '/'}) { + onclickAttr := fmt.Appendf(make([]byte, 0, 21+len(node.Destination)), "return changeUrl('%s');", node.Destination) + node.SetAttribute([]byte("onclick"), onclickAttr) + } node.SetAttribute([]byte("class"), []byte("text-secondary hover:text-main-dark underline")) case *ast.Image: diff --git a/internal/templatemanager/templatemanager.go b/internal/templatemanager/templatemanager.go index 4bf9a49..eebc297 100644 --- a/internal/templatemanager/templatemanager.go +++ b/internal/templatemanager/templatemanager.go @@ -37,7 +37,7 @@ func NewTemplateManager(templates ...TemplateManagerTemplates) (*TemplateManager templateMap := make(map[string]templateManagerRender) for _, tmplStruct := range templates { - tmpl := template.New("").Funcs(templateFuncMap) + tmpl := template.New(tmplStruct.Name).Funcs(templateFuncMap) tmpl, err := tmpl.ParseFiles(tmplStruct.Files...) if err != nil { return nil, err @@ -84,7 +84,7 @@ func (tm *TemplateManager) Add(name string, files ...string) error { return fmt.Errorf("you can't add template without any files") } - tmpl := template.New("").Funcs(templateFuncMap) + tmpl := template.New(name).Funcs(templateFuncMap) tmpl, err := tmpl.ParseFiles(files...) if err != nil { diff --git a/main.go b/main.go index 53dbb74..a6a30b0 100644 --- a/main.go +++ b/main.go @@ -23,7 +23,9 @@ import ( "github.com/golang-migrate/migrate/v4/database/sqlite3" "github.com/yuin/goldmark" "github.com/yuin/goldmark/parser" - gmhtml "github.com/yuin/goldmark/renderer/html" + "github.com/yuin/goldmark/renderer" + "github.com/yuin/goldmark/renderer/html" + "github.com/yuin/goldmark/util" _ "github.com/golang-migrate/migrate/v4/source/file" _ "github.com/mattn/go-sqlite3" @@ -37,9 +39,15 @@ var ( ), goldmark.WithParserOptions( parser.WithAutoHeadingID(), + parser.WithAttribute(), ), - goldmark.WithRendererOptions( - gmhtml.WithXHTML(), + goldmark.WithRenderer( + renderer.NewRenderer( + renderer.WithNodeRenderers( + util.Prioritized(tailwind.NewCustomLinkRenderer(html.WithUnsafe(), html.WithXHTML()), 50), + util.Prioritized(html.NewRenderer(html.WithXHTML()), 100), + ), + ), ), ) b2Client *b2.B2Client diff --git a/static/input.css b/static/input.css index 36d17b2..1e7f9fc 100644 --- a/static/input.css +++ b/static/input.css @@ -236,37 +236,22 @@ a:hover { border-style: outset; } -.desktop-sidebar-custom { - width: 5vw; - background-size: calc(var(--squares-and-triangles-background-size) * 1vw); -} - .bg-sidebar { background-image: var(--squares-and-triangles-background); background-repeat: var(--squares-and-triangles-background-repeat); - background-size: calc(var(--squares-and-triangles-background-width-coef) * 1vw) calc(var(--squares-and-triangles-background-height-coef) * 1vw); + background-size: calc(var(--squares-and-triangles-background-width-coef) * 1dvw) calc(var(--squares-and-triangles-background-height-coef) * 1dvw); } .logo-custom { - width: 3.5vw; - height: 20vw; - font-size: 2.5vw; - -webkit-text-stroke: 0.1vw var(--sidebar-stroke-color); + width: 3.5dvw; + height: 20dvw; + font-size: 2.5dvw; + -webkit-text-stroke: 0.1dvw var(--sidebar-stroke-color); writing-mode: sideways-lr; text-orientation: mixed; display: block; } -.border-left-custom { - width: 0.5vw; - border-right: 0.3vh dashed var(--main-dark-color); -} - -.border-right-custom { - width: 0.5vw; - border-left: 0.5vh dotted var(--main-dark-color); -} - .inset-shadow { box-shadow: inset 0vh 1vh 1vh -1vh rgba(75, 81, 58, 0.5), inset 1vh 0vh 1vh -1vh rgba(75, 81, 58, 0.5), @@ -278,8 +263,8 @@ a:hover { -webkit-text-stroke-color: var(--sidebar-stroke-color); } -.text-stroke-\[0\.1vw\] { - -webkit-text-stroke-width: 0.1vw; +.text-stroke-\[0\.1dvw\] { + -webkit-text-stroke-width: 0.1dvw; } .theme-wheel { @@ -411,7 +396,7 @@ body[data-theme~="ram"] .leaflet-tile { @media (max-aspect-ratio: 0.8/1) { .bg-sidebar { - background-size: calc(var(--squares-and-triangles-background-width-coef) * 1.6vh) calc(var(--squares-and-triangles-background-height-coef) * 1.6vh); + background-size: calc(var(--squares-and-triangles-background-width-coef) * 1.6dvh) calc(var(--squares-and-triangles-background-height-coef) * 1.6dvh); } .ar-lt-0\.8\:bg-background-light { diff --git a/views/layouts/general-page.html b/views/layouts/general-page.html index 88c5de5..b163387 100644 --- a/views/layouts/general-page.html +++ b/views/layouts/general-page.html @@ -14,13 +14,22 @@ + + @@ -165,12 +174,20 @@
saya.today
-
- - - +
diff --git a/views/pages/blog-page.html b/views/pages/blog-page.html index aadebac..9704502 100644 --- a/views/pages/blog-page.html +++ b/views/pages/blog-page.html @@ -1,20 +1,3 @@ -{{ define "top-embeds" }} - -{{ end }} - {{ define "body" }}

{{ .Title }}

@@ -52,16 +35,17 @@ .openPopup(); } - document.addEventListener('htmx:afterRequest', (e) => { - if (e.detail.target.id == 'general-page-body') { - initLocationMap( - 'map-container', - {{ .MapLocationX }}, - {{ .MapLocationY }}, - {{ .MapLocationAreaMeters }} - ); - } - }, {once: true}); + if (map) { + map.remove(); + map = null; + } + + setTimeout(() => initLocationMap( + 'map-container', + {{ .MapLocationX }}, + {{ .MapLocationY }}, + {{ .MapLocationAreaMeters }} + ), 1000); {{- end }}
@@ -70,31 +54,3 @@ {{ define "footer" }}
{{ end }} - -{{ define "bottom-embeds" }} - -{{ end }} diff --git a/views/pages/global-map.html b/views/pages/global-map.html index 4c6fb5e..27c8a73 100644 --- a/views/pages/global-map.html +++ b/views/pages/global-map.html @@ -44,11 +44,17 @@
saya.today
-
- - - - +
diff --git a/views/partials/catalogue-blog-cards.html b/views/partials/catalogue-blog-cards.html index 041f3c8..5c3bb95 100644 --- a/views/partials/catalogue-blog-cards.html +++ b/views/partials/catalogue-blog-cards.html @@ -1,10 +1,12 @@ {{- range .BlogPages }} -
+