diff options
Diffstat (limited to 'src/ext/sse.js')
-rw-r--r-- | src/ext/sse.js | 35 |
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) { |