From 7d106c3f8f5a2f7c76c11d4faf449be365b8a6c9 Mon Sep 17 00:00:00 2001 From: Seongmin Lee Date: Wed, 14 Jan 2026 22:31:12 +0900 Subject: [PATCH] appview/pages: embed `hx-swap-oob` to star button `hx-swap-oob` on breaks on `hx-boost` swaps (star button vainishing repo tab changes), so that was why I made `starBtn-oob` fragment. But `hx-swap-oob="outerHTML:..."` doesn't strip the wrapper element, adding `div` wrappers to star button on every star/unstar interactions. To fix this, dynamically put `hx-swap-oob` attribute to star button itself by using `.HxSwapOob` param. Signed-off-by: Seongmin Lee --- appview/pages/pages.go | 4 +++- appview/pages/templates/fragments/starBtn-oob.html | 5 ----- appview/pages/templates/fragments/starBtn.html | 1 + 3 files changed, 4 insertions(+), 6 deletions(-) delete mode 100644 appview/pages/templates/fragments/starBtn-oob.html diff --git a/appview/pages/pages.go b/appview/pages/pages.go index 5ffdc998..ed01f8eb 100644 --- a/appview/pages/pages.go +++ b/appview/pages/pages.go @@ -649,10 +649,12 @@ type StarBtnFragmentParams struct { IsStarred bool SubjectAt syntax.ATURI StarCount int + HxSwapOob bool } func (p *Pages) StarBtnFragment(w io.Writer, params StarBtnFragmentParams) error { - return p.executePlain("fragments/starBtn-oob", w, params) + params.HxSwapOob = true + return p.executePlain("fragments/starBtn", w, params) } type RepoIndexParams struct { diff --git a/appview/pages/templates/fragments/starBtn-oob.html b/appview/pages/templates/fragments/starBtn-oob.html deleted file mode 100644 index 34350b02..00000000 --- a/appview/pages/templates/fragments/starBtn-oob.html +++ /dev/null @@ -1,5 +0,0 @@ -{{ define "fragments/starBtn-oob" }} -
- {{ template "fragments/starBtn" . }} -
-{{ end }} diff --git a/appview/pages/templates/fragments/starBtn.html b/appview/pages/templates/fragments/starBtn.html index a05088e2..08982701 100644 --- a/appview/pages/templates/fragments/starBtn.html +++ b/appview/pages/templates/fragments/starBtn.html @@ -9,6 +9,7 @@ {{ else }} hx-post="/star?subject={{ .SubjectAt }}&countHint={{ .StarCount }}" {{ end }} + {{ if .HxSwapOob }}hx-swap-oob='outerHTML:#starBtn[data-star-subject-at="{{ .SubjectAt }}"]'{{ end }} hx-trigger="click" hx-disabled-elt="#starBtn" -- 2.54.0