summaryrefslogtreecommitdiff
diff options
from:
to:
context:
space:
mode:
authorGravatar Saya Andy <145215889+SayaAndy@users.noreply.github.com> 2025-11-04 14:49:41 +0300
committerGravatar GitHub <noreply@github.com> 2025-11-04 14:49:41 +0300
commit77a43ebb42d80e3c6bbdf39b16a38f0f3ec4b30c (patch)
treea098615be83bf760a4643e5752f990ef9f29fe98
parentce86bf8e7a32a98aeab696bf38b0cc2f4ada4905 (diff)
parent05d7fe78450219e85ebe9c4372a20f8edd264d8d (diff)
downloadweb-77a43ebb42d80e3c6bbdf39b16a38f0f3ec4b30c.tar.gz
web-77a43ebb42d80e3c6bbdf39b16a38f0f3ec4b30c.zip
v0.11.3 (#20)v0.11.3
- [fix: correctly pack galleries on mobiles](https://github.com/SayaAndy/saya-today-web/commit/c52a07e3fa738135eaa5272d9f115e4740b60c61) - [feat: move published date info from header into start of the body](https://github.com/SayaAndy/saya-today-web/commit/05d7fe78450219e85ebe9c4372a20f8edd264d8d) - feat: show action date on any screen - feat: show short description together with dates in page's body - feat: switch masonry to packery - debug: log app shutdown more
-rw-r--r--internal/glightbox/html_renderer.go11
-rw-r--r--internal/router/handlers/lang-blog-title.go3
-rw-r--r--internal/router/router.go5
-rw-r--r--static/input.css16
-rw-r--r--views/layouts/general-page.html36
-rw-r--r--views/pages/blog-page.html12
-rw-r--r--views/pages/language-pick.html2
-rw-r--r--views/partials/general-page-header.html4
8 files changed, 61 insertions, 28 deletions
diff --git a/internal/glightbox/html_renderer.go b/internal/glightbox/html_renderer.go
index 7022793..b7b256a 100644
--- a/internal/glightbox/html_renderer.go
+++ b/internal/glightbox/html_renderer.go
@@ -133,9 +133,9 @@ func (r *GLightboxHTMLRenderer) renderGLightbox(w util.BufWriter, source []byte,
}
w.WriteString(fmt.Sprintf(`
-<div class="justify-content-center display-block">
+<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-%s mx-auto">
+ <div class="grid masonry-grid-%s">
<div class="grid-sizer grid-sizer-%s"></div>
%s
</div>
@@ -144,11 +144,10 @@ func (r *GLightboxHTMLRenderer) renderGLightbox(w util.BufWriter, source []byte,
w.WriteString(fmt.Sprintf(`
<script>
- var msnry_%s = new Masonry('.masonry-grid-%s', {
+ var pckry_%s = new Packery('.masonry-grid-%s', {
itemSelector: '.grid-item-%s',
columnWidth: '.grid-sizer-%s',
- percentPosition: false,
- fitWidth: true
+ percentPosition: false
});
var imgLoad_%s_timer;
@@ -156,7 +155,7 @@ func (r *GLightboxHTMLRenderer) renderGLightbox(w util.BufWriter, source []byte,
function initMasonryLayout_%s(tm) {
clearTimeout(imgLoad_%s_timer);
- imgLoad_%s_timer = setTimeout(() => msnry_%s.layout(), 100);
+ imgLoad_%s_timer = setTimeout(() => pckry_%s.layout(), 100);
}
imgLoad_%s.on('progress', initMasonryLayout_%s);
diff --git a/internal/router/handlers/lang-blog-title.go b/internal/router/handlers/lang-blog-title.go
index f1be2cd..0f4f564 100644
--- a/internal/router/handlers/lang-blog-title.go
+++ b/internal/router/handlers/lang-blog-title.go
@@ -74,6 +74,7 @@ func (r *BlogPageHandler) RenderBody(c *fiber.Ctx, supplements *router.Supplemen
templateMap["ParsedMarkdown"] = template.HTML(parsedMarkdown)
templateMap["PublishedDate"] = metadata.PublishedTime.Format("2006-01-02 15:04:05 -07:00")
templateMap["ActionDate"] = metadata.ActionDate
+ templateMap["ShortDescription"] = metadata.ShortDescription
go supplements.ClientCache.View(c.IP(), pathParts[2])
@@ -92,8 +93,6 @@ func (r *BlogPageHandler) RenderHeader(c *fiber.Ctx, supplements *router.Supplem
}
templateMap["Title"] = metadata.Title
- templateMap["PublishedDate"] = metadata.PublishedTime.Format("2006-01-02 15:04:05 -07:00")
- templateMap["ActionDate"] = metadata.ActionDate
return fiber.StatusOK, nil
}
diff --git a/internal/router/router.go b/internal/router/router.go
index ef3f063..c0556f0 100644
--- a/internal/router/router.go
+++ b/internal/router/router.go
@@ -340,18 +340,23 @@ func (r *Router) Listen(endpoint string) error {
func (r *Router) Close() (err error) {
allErrors := make([]error, 0)
+ slog.Debug("shutting down blog trigger scheduler")
if err = r.supplements.BlogTrigger.Close(); err != nil {
allErrors = append(allErrors, fmt.Errorf("fail to shutdown blog trigger scheduler: %w", err))
}
+ slog.Debug("shutting down fiber server")
if err = r.app.Shutdown(); err != nil {
allErrors = append(allErrors, fmt.Errorf("fail to shutdown fiber server: %w", err))
}
+ slog.Debug("dumping cache")
if err = r.supplements.ClientCache.Close(); err != nil {
allErrors = append(allErrors, fmt.Errorf("fail to dump cache: %w", err))
}
+ slog.Debug("closing db connection")
if err = r.supplements.DB.Close(); err != nil {
allErrors = append(allErrors, fmt.Errorf("fail to close db connection: %w", err))
}
+ slog.Debug("closing page cache")
r.supplements.PageCache.Close()
return errors.Join(allErrors...)
}
diff --git a/static/input.css b/static/input.css
index 739caa3..8b69162 100644
--- a/static/input.css
+++ b/static/input.css
@@ -468,15 +468,11 @@ form.crossable.htmx-request input {
}
.grid-item {
- position: relative;
- display: inline-block;
width: 10rem;
}
.grid-sizer {
- position: relative;
- display: inline-block;
- width: 10.1rem;
+ width: 10.5rem;
}
.grid-item-index {
@@ -508,7 +504,7 @@ form.crossable.htmx-request input {
}
.grid-sizer {
- width: 12.1rem;
+ width: 12.5rem;
}
.grid-item-2x {
@@ -517,14 +513,10 @@ form.crossable.htmx-request input {
}
@container main (width >= 76rem) {
- .grid-item {
+ .grid-item, .grid-sizer {
width: 18rem;
}
- .grid-sizer {
- width: 18.1rem;
- }
-
.grid-item-2x {
width: 36rem;
}
@@ -536,7 +528,7 @@ form.crossable.htmx-request input {
}
.grid-sizer {
- width: 24.1rem;
+ width: 24.5rem;
}
.grid-item-2x {
diff --git a/views/layouts/general-page.html b/views/layouts/general-page.html
index 62360ad..fe6bc78 100644
--- a/views/layouts/general-page.html
+++ b/views/layouts/general-page.html
@@ -137,6 +137,7 @@
document.body.append(frame);
}
break;
+ case "lilac": break;
}
}
@@ -267,7 +268,40 @@
<script src="https://f003.backblazeb2.com/file/sayana-static/libs/htmx/2.0.6/htmx.min.js"></script>
<script src="https://f003.backblazeb2.com/file/sayana-static/libs/leaflet/1.9.4/leaflet.js"></script>
<script src="https://f003.backblazeb2.com/file/sayana-static/libs/imagesloaded/5.0.0/imagesloaded.pkgd.min.js"></script>
- <script src="https://f003.backblazeb2.com/file/sayana-static/libs/masonry-layout/4.2.2/masonry.pkgd.min.js"></script>
+ <script src="https://f003.backblazeb2.com/file/sayana-static/libs/packery/3.0.0/dist/packery.pkgd.min.js"></script>
+
+ <script>
+ // Enable fitWidth-like attribute for Packery. Source: https://codepen.io/desandro/pen/kVmLYz
+ var __resetLayout = Packery.prototype._resetLayout;
+ Packery.prototype._resetLayout = function() {
+ __resetLayout.call( this );
+ var parentSize = getSize( this.element.parentNode );
+ var colW = this.columnWidth + this.gutter;
+ this.fitWidth = Math.floor( ( parentSize.innerWidth + this.gutter ) / colW ) * colW;
+ this.packer.width = this.fitWidth;
+ this.packer.height = Number.POSITIVE_INFINITY;
+ this.packer.reset();
+ };
+
+ Packery.prototype._getContainerSize = function() {
+ var emptyWidth = 0;
+ for ( var i=0, len = this.packer.spaces.length; i < len; i++ ) {
+ var space = this.packer.spaces[i];
+ if ( space.y === 0 && space.height === Number.POSITIVE_INFINITY ) {
+ emptyWidth += space.width;
+ }
+ }
+
+ return {
+ width: this.fitWidth - this.gutter - emptyWidth,
+ height: this.maxY - this.gutter
+ };
+ };
+
+ Packery.prototype.needsResizeLayout = function() {
+ return true;
+ };
+ </script>
<div id="general-page-bottom-embeds" class="flex"
hx-get="/api/v1/general-page/bottom-embeds{{ if .QueryString }}?{{ .QueryString }}{{ end }}" hx-trigger="load" hx-target="this" hx-swap="innerHTML">
diff --git a/views/pages/blog-page.html b/views/pages/blog-page.html
index 7170ad8..f95c23b 100644
--- a/views/pages/blog-page.html
+++ b/views/pages/blog-page.html
@@ -1,9 +1,15 @@
{{ define "body" }}
<div class="bg-background-light flex flex-col inset-shadow-[0_0_0.4rem_black] px-8 py-4 overflow-y-auto">
<p class="max-xs:block [@media(max-height:32rem)]:block hidden font-andika text-2xl font-bold italic text-main-hard tracking-[.0125rem] mb-1">{{ .Title }}</p>
- <p class="max-xs:block [@media(max-height:32rem)]:block hidden grow text-lg font-andika text-secondary">{{ .L.Metadata.Published }}: {{ .PublishedDate }}</p>
- <p class="max-xs:block [@media(max-height:32rem)]:block hidden grow text-lg font-andika text-secondary">{{ .L.Metadata.Action }}: {{ .ActionDate }}</p>
- <hr class="max-xs:block [@media(max-height:32rem)]:block hidden border-t-2 border-dotted border-main-hard mt-1 mb-2 w-full ml-auto mr-auto">
+ <p class="block grow text-lg font-andika text-secondary">
+ <b>{{ .L.Metadata.Published }}</b>:
+ <span hx-get="/api/v1/tz" hx-vals='js:{timestamp: "{{ .PublishedDate }}", tz: clientTimeZone}' hx-target="this" hx-swap="innerHTML" hx-trigger="load">
+ {{ .PublishedDate }}
+ </span>
+ </p>
+ <p class="block grow text-lg font-andika text-secondary"><b>{{ .L.Metadata.Action }}</b>: {{ .ActionDate }}</p>
+ <p class="block grow text-md font-andika italic text-main-hard">{{ .ShortDescription }}</p>
+ <hr class="block border-t-2 border-dotted border-main-hard mt-1 mb-2 w-full ml-auto mr-auto">
{{ .ParsedMarkdown }}
{{- if .MapLocationX }}
<hr class="border-t-3 border-dotted border-main-hard mt-1 mb-2 w-[80%] ml-auto mr-auto">
diff --git a/views/pages/language-pick.html b/views/pages/language-pick.html
index 5a9d229..775c18e 100644
--- a/views/pages/language-pick.html
+++ b/views/pages/language-pick.html
@@ -1,5 +1,5 @@
{{ define "body" }}
-<div class="flex flex-col justify-center text-3xl h-[100%]">
+<div class="flex flex-col justify-center text-3xl h-full">
{{- range .AvailableLanguages }}
<hr class="border-t-2 border-dotted border-main-hard">
<div class="nth-[2n+1_of_div]:bg-(--background-medium-color)/50 nth-[2n_of_div]:bg-(--background-light-color)/50 p-2.5 flex flex-row justify-center justify-items-center">
diff --git a/views/partials/general-page-header.html b/views/partials/general-page-header.html
index 90180de..83a1058 100644
--- a/views/partials/general-page-header.html
+++ b/views/partials/general-page-header.html
@@ -1,7 +1,5 @@
<title>{{ .Title }} // SAYA TODAY</title>
-<div {{ if .PublishedDate }} hx-get="/api/v1/tz" hx-vals='js:{timestamp: "{{ .PublishedDate }}", tz: clientTimeZone}' hx-target="#published-date" hx-swap="innerHTML" hx-trigger="load" {{ end }}
- class="flex flex-row mb-2">
+<div class="flex flex-row mb-2">
<p class="text-4xl font-andika font-light italic text-shadow-[0_2px_2px_var(--main-soft-color)] text-left mt-auto">{{ .Title }}</p>
- <p id="published-date" class="grow text-2xl font-andika italic text-secondary text-right mt-auto">{{ .PublishedDate }}</p>
</div>
{{ block "header" . }}{{ end }}