From dedfebeecab3fde3b20155911b46f368ae9ad0f1 Mon Sep 17 00:00:00 2001 From: Andrea Ambu Date: Thu, 14 Nov 2024 11:10:09 +0000 Subject: [PATCH 1/2] websocket presence check --- src/ws/ws.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/ws/ws.js b/src/ws/ws.js index be1f08d..4b09b20 100644 --- a/src/ws/ws.js +++ b/src/ws/ws.js @@ -411,8 +411,12 @@ This extension adds support for WebSockets to htmx. See /www/extensions/ws.md f */ function maybeCloseWebSocketSource(elt) { if (!api.bodyContains(elt)) { - api.getInternalData(elt).webSocket.close() - return true + var internalData = api.getInternalData(elt) + if (internalData.webSocket) { + internalData.webSocket.close() + return true + } + return false } return false } From 963eaff841c30d81d4ee5d69e81d5f0133a54052 Mon Sep 17 00:00:00 2001 From: Andrea Ambu Date: Fri, 15 Nov 2024 09:52:00 +0000 Subject: [PATCH 2/2] with tests --- src/ws/test/ext/ws.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/ws/test/ext/ws.js b/src/ws/test/ext/ws.js index 3220b40..28590dd 100644 --- a/src/ws/test/ext/ws.js +++ b/src/ws/test/ext/ws.js @@ -618,6 +618,17 @@ describe('web-sockets extension', function() { this.messages[1].should.contains('"action":"B"') }) + it('maybeClose does not raise when there is no socket', function() { + var div = make('
div1
') + this.tickMock() + var internalData = div['htmx-internal-data'] + should.exist(internalData.webSocket) + delete internalData.webSocket + should.not.exist(internalData.webSocket) + div.parentNode.removeChild(div) + this.tickMock() + }) + describe('Send immediately', function() { function checkCallForWsBeforeSend(spy, wrapper, message, target) { // Utility function to always check the same for htmx:wsBeforeSend caught by a spy