diff options
| -rw-r--r-- | internal/glightbox/html_renderer.go | 11 | ||||
| -rw-r--r-- | internal/router/handlers/lang-blog-title.go | 3 | ||||
| -rw-r--r-- | internal/router/router.go | 5 | ||||
| -rw-r--r-- | static/input.css | 16 | ||||
| -rw-r--r-- | views/layouts/general-page.html | 36 | ||||
| -rw-r--r-- | views/pages/blog-page.html | 12 | ||||
| -rw-r--r-- | views/pages/language-pick.html | 2 | ||||
| -rw-r--r-- | views/partials/general-page-header.html | 4 |
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 }} |