fix(12-03): use htmx request source for discussion posts

This commit is contained in:
Arthur Belleville 2026-05-16 10:27:56 +02:00
parent 6f17c3016f
commit 426d89c43b
No known key found for this signature in database
2 changed files with 8 additions and 4 deletions

View file

@ -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)
}

View file

@ -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();