diff --git a/backend/internal/web/handlers_discussion_test.go b/backend/internal/web/handlers_discussion_test.go index cdd3e64..7b57fc5 100644 --- a/backend/internal/web/handlers_discussion_test.go +++ b/backend/internal/web/handlers_discussion_test.go @@ -478,7 +478,7 @@ func TestDiscussionStaticScriptSuppressesDuplicateMessageSwap(t *testing.T) { t.Fatalf("read discussion-sse.js: %v", err) } script := string(js) - for _, want := range []string{"htmx:beforeSwap", "messageIdFromHTML", "preventDefault()"} { + for _, want := range []string{"htmx:beforeSwap", "requestConfig.elt", "messageIdFromHTML", "preventDefault()"} { if !strings.Contains(script, want) { t.Fatalf("discussion script missing %q for duplicate swap suppression; script: %.1200s", want, script) } @@ -491,7 +491,7 @@ func TestDiscussionStaticScriptClearsComposerAfterSuccessfulPost(t *testing.T) { t.Fatalf("read discussion-sse.js: %v", err) } script := string(js) - for _, want := range []string{"htmx:afterRequest", "discussion-message-body", ".reset()"} { + for _, want := range []string{"htmx:afterRequest", "requestConfig.elt", "discussion-message-body", ".reset()"} { if !strings.Contains(script, want) { t.Fatalf("discussion script missing %q for composer reset; script: %.1200s", want, script) } diff --git a/backend/static/discussion-sse.js b/backend/static/discussion-sse.js index 56024a1..8d198a3 100644 --- a/backend/static/discussion-sse.js +++ b/backend/static/discussion-sse.js @@ -7,6 +7,10 @@ return Boolean(element && element.matches && element.matches('form[action$="/discussion/messages"]')); } + function requestElement(detail) { + return detail && detail.requestConfig && detail.requestConfig.elt; + } + function messageIdFromHTML(html) { if (!html) return ""; var template = document.createElement("template"); @@ -65,7 +69,7 @@ document.addEventListener("DOMContentLoaded", connectDiscussionStreams); document.body.addEventListener("htmx:afterSwap", connectDiscussionStreams); document.body.addEventListener("htmx:beforeSwap", function (event) { - if (!isDiscussionMessageForm(event.detail && event.detail.elt)) return; + if (!isDiscussionMessageForm(requestElement(event.detail))) return; var messageId = messageIdFromHTML(event.detail.xhr && event.detail.xhr.responseText); if (messageId && messageExists(messageId)) { @@ -74,7 +78,7 @@ } }); document.body.addEventListener("htmx:afterRequest", function (event) { - var form = event.detail && event.detail.elt; + var form = requestElement(event.detail); if (!isDiscussionMessageForm(form) || !event.detail.successful) return; form.reset();