Mirror for https://github.com/STBoyden/go-portfolio
3
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat: add preload functionality to increase interactivity

stboyden.com 5d3435ca 91600841

verified
+34 -5
+1 -1
Dockerfile
··· 1 1 ARG GO_VERSION=1 2 - FROM golang:${GO_VERSION}-bookworm as builder 2 + FROM golang:${GO_VERSION}-bookworm AS builder 3 3 4 4 WORKDIR /usr/src/app 5 5 RUN apt-get update && apt-get install nodejs npm -y
+9
internal/pkg/handlers/htmx/htmx.go
··· 1 + // htmx contains a Handler function that handles the rendering of pages 2 + // depending on received HTMX attributes. 3 + // 4 + // See: [Handler] 1 5 package htmx 2 6 3 7 import ( ··· 8 12 "github.com/STBoyden/go-portfolio/internal/pkg/routes/site/views" 9 13 ) 10 14 15 + // Simple handler to optionally render views.Root alongside the provided 16 + // component depending on the HX-Request header. This provides the benefit of 17 + // being able to get a partial and a full page from the same endpoint, with the 18 + // decision being made on the presence of the header - allowing a cleaner SPA 19 + // feel. 11 20 func Handler(component templ.Component, options ...func(*templ.ComponentHandler)) http.Handler { 12 21 return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 13 22 render := component
-1
internal/pkg/routes/site/views/blog_admin_authed.templ
··· 17 17 <div class="mt-5"> 18 18 <div 19 19 hx-get="/api/v1/blog/admin/posts" 20 - hx-params="*" 21 20 hx-trigger="load" 22 21 hx-swap="outerHTML" 23 22 ></div>
+1 -1
internal/pkg/routes/site/views/blog_admin_login.templ
··· 20 20 hx-swap="innerHTML" 21 21 hx-trigger="login-page-reload from:body" 22 22 ></div> 23 - <div x-data="login"> 23 + <div x-data="login" hx-history="false"> 24 24 <form 25 25 class="max-w-md mx-auto p-6 rounded shadow-md bg-base-300" 26 26 hx-post="/api/v1/blog/authenticate"
+3
internal/pkg/routes/site/views/components/navbar.templ
··· 9 9 hx-swap="innerHTML" 10 10 hx-get="/" 11 11 hx-push-url="true" 12 + preload-images="true" 12 13 > 13 14 Home 14 15 </li> ··· 43 44 tabindex="0" 44 45 hx-boost="true" 45 46 class="menu menu-sm dropdown-content bg-base-300 rounded-box z-1 mt-3 w-52 p-2 shadow" 47 + preload 46 48 > 47 49 @links() 48 50 </ul> ··· 54 56 tabindex="0" 55 57 class="menu menu-horizontal" 56 58 hx-boost="true" 59 + preload="mouseover" 57 60 > 58 61 @links() 59 62 </ul>
+1 -1
internal/pkg/routes/site/views/components/post_list_item.templ
··· 36 36 No blog posts (yet...) 37 37 </div> 38 38 } else { 39 - <div class="grid grid-cols-2 justify-center gap-2 w-[75%] mx-auto"> 39 + <div class="grid grid-cols-2 justify-center gap-2 w-[75%] mx-auto" preload="mouseover" preload-images="true"> 40 40 if showEdit { 41 41 <button 42 42 class="btn btn-md btn-info text-info-content col-span-2"
+2 -1
internal/pkg/routes/site/views/root.templ
··· 9 9 <title>Samuel Boyden</title> 10 10 <link href="/static/css/styles.css" rel="stylesheet"/> 11 11 <script src="/static/js/htmx.min.js" defer></script> 12 + <script src="/static/js/htmx-preload.min.js" defer></script> 12 13 <script src="/static/js/alpinejs.min.js" defer></script> 13 14 <meta name="viewport" content="width=device-width, initial-scale=1.0"/> 14 15 </head> 15 - <body> 16 + <body hx-ext="preload"> 16 17 @components.Navbar() 17 18 <div class="p-4" id="body"> 18 19 if subview != nil {
+1
justfile
··· 2 2 pnpm install 3 3 mkdir -p static/js 4 4 cp node_modules/htmx.org/dist/htmx.min.js static/js 5 + cp node_modules/htmx-ext-preload/dist/preload.min.js static/js/htmx-preload.min.js 5 6 cp node_modules/alpinejs/dist/cdn.min.js static/js/alpinejs.min.js 6 7 go mod download 7 8 go mod verify
+1
package.json
··· 7 7 "devDependencies": { 8 8 "alpinejs": "^3.14.9", 9 9 "daisyui": "^5.0.6", 10 + "htmx-ext-preload": "^2.1.1", 10 11 "htmx.org": "^1.9.12", 11 12 "rust-just": "^1.40.0" 12 13 },
+15
pnpm-lock.yaml
··· 21 21 daisyui: 22 22 specifier: ^5.0.6 23 23 version: 5.0.6 24 + htmx-ext-preload: 25 + specifier: ^2.1.1 26 + version: 2.1.1 24 27 htmx.org: 25 28 specifier: ^1.9.12 26 29 version: 1.9.12 ··· 278 281 graceful-fs@4.2.11: 279 282 resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 280 283 284 + htmx-ext-preload@2.1.1: 285 + resolution: {integrity: sha512-Gm9NJTMgbR4OAhZ8a4abkBSVccuI+yCVJs5Nrsn2mWDv+Ha5bSwSw8Bc4Y8D+TCaeNSFd8Qz/fe1sqBIVmv0GA==} 286 + 281 287 htmx.org@1.9.12: 282 288 resolution: {integrity: sha512-VZAohXyF7xPGS52IM8d1T1283y+X4D+Owf3qY1NZ9RuBypyu9l8cGsxUMAG5fEAb/DhT7rDoJ9Hpu5/HxFD3cw==} 289 + 290 + htmx.org@2.0.4: 291 + resolution: {integrity: sha512-HLxMCdfXDOJirs3vBZl/ZLoY+c7PfM4Ahr2Ad4YXh6d22T5ltbTXFFkpx9Tgb2vvmWFMbIc3LqN2ToNkZJvyYQ==} 283 292 284 293 human-signals@8.0.0: 285 294 resolution: {integrity: sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA==} ··· 745 754 746 755 graceful-fs@4.2.11: {} 747 756 757 + htmx-ext-preload@2.1.1: 758 + dependencies: 759 + htmx.org: 2.0.4 760 + 748 761 htmx.org@1.9.12: {} 762 + 763 + htmx.org@2.0.4: {} 749 764 750 765 human-signals@8.0.0: {} 751 766