summaryrefslogtreecommitdiffstatshomepage
path: root/src/ext/sse.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/ext/sse.js')
-rw-r--r--src/ext/sse.js35
1 files changed, 22 insertions, 13 deletions
diff --git a/src/ext/sse.js b/src/ext/sse.js
index 88e23d51..473f23da 100644
--- a/src/ext/sse.js
+++ b/src/ext/sse.js
@@ -51,7 +51,6 @@ This extension adds support for Server Sent Events to htmx. See /www/extensions
// Try to create EventSources when elements are processed
case "htmx:afterProcessNode":
ensureEventSourceOnElement(evt.target);
- registerSSE(evt.target);
}
}
});
@@ -112,19 +111,18 @@ This extension adds support for Server Sent Events to htmx. See /www/extensions
* @param {HTMLElement} elt
*/
function registerSSE(elt) {
- // Find closest existing event source
- var sourceElement = api.getClosestMatch(elt, hasEventSource);
- if (sourceElement == null) {
- // api.triggerErrorEvent(elt, "htmx:noSSESourceError")
- return null; // no eventsource in parentage, orphaned element
- }
-
- // Set internalData and source
- var internalData = api.getInternalData(sourceElement);
- var source = internalData.sseEventSource;
-
// Add message handlers for every `sse-swap` attribute
- queryAttributeOnThisOrChildren(elt, "sse-swap").forEach(function(child) {
+ queryAttributeOnThisOrChildren(elt, "sse-swap").forEach(function (child) {
+ // Find closest existing event source
+ var sourceElement = api.getClosestMatch(child, hasEventSource);
+ if (sourceElement == null) {
+ // api.triggerErrorEvent(elt, "htmx:noSSESourceError")
+ return null; // no eventsource in parentage, orphaned element
+ }
+
+ // Set internalData and source
+ var internalData = api.getInternalData(sourceElement);
+ var source = internalData.sseEventSource;
var sseSwapAttr = api.getAttributeValue(child, "sse-swap");
if (sseSwapAttr) {
@@ -164,6 +162,16 @@ This extension adds support for Server Sent Events to htmx. See /www/extensions
// Add message handlers for every `hx-trigger="sse:*"` attribute
queryAttributeOnThisOrChildren(elt, "hx-trigger").forEach(function(child) {
+ // Find closest existing event source
+ var sourceElement = api.getClosestMatch(child, hasEventSource);
+ if (sourceElement == null) {
+ // api.triggerErrorEvent(elt, "htmx:noSSESourceError")
+ return null; // no eventsource in parentage, orphaned element
+ }
+
+ // Set internalData and source
+ var internalData = api.getInternalData(sourceElement);
+ var source = internalData.sseEventSource;
var sseEventName = api.getAttributeValue(child, "hx-trigger");
if (sseEventName == null) {
@@ -224,6 +232,7 @@ This extension adds support for Server Sent Events to htmx. See /www/extensions
ensureEventSource(child, sseURL, retryCount);
});
+ registerSSE(elt);
}
function ensureEventSource(elt, url, retryCount) {