Skip to content

Commit 0151fe9

Browse files
authored
Merge branch 'bigskysoftware:main' into main
2 parents 5690c4f + 09f61d9 commit 0151fe9

File tree

4 files changed

+37
-6
lines changed

4 files changed

+37
-6
lines changed

src/json-enc/json-enc.js

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,21 +14,24 @@
1414
encodeParameters: function(xhr, parameters, elt) {
1515
xhr.overrideMimeType('text/json')
1616

17-
const vals = api.getExpressionVars(elt)
1817
const object = {}
1918
parameters.forEach(function(value, key) {
20-
// FormData encodes values as strings, restore hx-vals/hx-vars with their initial types
21-
const typedValue = Object.hasOwn(vals, key) ? vals[key] : value
2219
if (Object.hasOwn(object, key)) {
2320
if (!Array.isArray(object[key])) {
2421
object[key] = [object[key]]
2522
}
26-
object[key].push(typedValue)
23+
object[key].push(value)
2724
} else {
28-
object[key] = typedValue
25+
object[key] = value
2926
}
3027
})
3128

29+
const vals = api.getExpressionVars(elt)
30+
Object.keys(object).forEach(function(key) {
31+
// FormData encodes values as strings, restore hx-vals/hx-vars with their initial types
32+
object[key] = Object.hasOwn(vals, key) ? vals[key] : object[key]
33+
})
34+
3235
return (JSON.stringify(object))
3336
}
3437
})

src/json-enc/test/ext/json-enc.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ describe('json-enc extension', function() {
143143
xhr.respond(200, {}, 'clicked')
144144
})
145145

146-
make(`<form hx-ext="json-enc" hx-post="/test" hx-vals="js:{'obj': {'x': 123}, 'number': 5000, 'numberString': '5000'}">
146+
make(`<form hx-ext="json-enc" hx-post="/test" hx-vals="js:{'obj': {'x': 123}, 'number': 5000, 'numberString': '5000', 'array': ['text', 123, {'key': 'value'}]}">
147147
<button id="btn" type="submit">Submit</button>
148148
</form>`)
149149
var btn = byId('btn')
@@ -153,6 +153,7 @@ describe('json-enc extension', function() {
153153
values.number.should.equal(5000)
154154
values.numberString.should.equal('5000')
155155
chai.assert.deepEqual(values.obj, {'x': 123})
156+
chai.assert.deepEqual(values.array, ['text', 123, {'key': 'value'}])
156157
})
157158

158159
it('handles multiple values per key', function() {

src/ws/test/ext/ws.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -629,6 +629,32 @@ describe('web-sockets extension', function() {
629629
this.tickMock()
630630
})
631631

632+
it('re-establishes closed connections using reconnect()', function() {
633+
var handledEventTypes = []
634+
var handler = function(evt) { handledEventTypes.push(evt.detail.event.type) }
635+
var reconnect = function(evt) { setTimeout(() => evt.detail.socketWrapper.reconnect()) }
636+
637+
htmx.on('htmx:wsConnecting', handler)
638+
639+
var div = make('<div hx-get="/test" hx-swap="outerHTML" hx-ext="ws" ws-connect="ws://localhost:8080">')
640+
641+
htmx.on(div, 'htmx:wsClose', handler)
642+
htmx.on(div, 'htmx:wsClose', reconnect)
643+
644+
this.tickMock()
645+
this.socketServer.close()
646+
647+
this.tickMock()
648+
handledEventTypes.should.eql(['connecting', 'close', 'connecting'])
649+
650+
this.tickMock()
651+
this.socketServer.close()
652+
653+
htmx.off('htmx:wsConnecting', handler)
654+
htmx.off(div, 'htmx:wsClose', handler)
655+
htmx.off(div, 'htmx:wsClose', reconnect)
656+
})
657+
632658
describe('Send immediately', function() {
633659
function checkCallForWsBeforeSend(spy, wrapper, message, target) {
634660
// Utility function to always check the same for htmx:wsBeforeSend caught by a spy

src/ws/ws.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,7 @@ This extension adds support for WebSockets to htmx. See /www/extensions/ws.md f
289289
wrapper.publicInterface = {
290290
send: wrapper.send.bind(wrapper),
291291
sendImmediately: wrapper.sendImmediately.bind(wrapper),
292+
reconnect: wrapper.init.bind(wrapper),
292293
queue: wrapper.messageQueue
293294
}
294295

0 commit comments

Comments
 (0)