* Process sse-swap properly when swapped in
Previously `sse-swap` were only processed when `sse-connect` was on the
root of what was being swapped in.
This is now fixed so that the closest sseEventSource is found and used as the
event source
* Pass for code readabiltiy
remove the nested if statements as there is no difference in handling
between sseURL and LegacySSEUrl.
* Fix indenting
* Initial attempt at sse extension tests
* Make existing tests pass
* Add test case for #916
* backport test for #916 to hx-sse for completeness
* add a distinct test for sse-swap
* more tests, fix tests
+ more tests differentiating the implementation of sse-swap and
hx-trigger
* fix for "is closed after removal with no close and activity"
* Cleanup listener if element is gone
* Revert "Cleanup listener if element is gone"
This reverts commit bbe3715276302656d1a422fbc4778842776e35f6.
* Clean up listeners if element gone, fix indenting
* Incorportate feedback from first review
+ seperate eventSource creation logic and event registering logic
+ manually create event handling, still confused by how hx-trigger works
* `createEventSourceOnElement` now looks for event sources in children
* explicitly handle legacy sse handling instead of having extra
selectors in `querySelectorOnThisOrChildren`
+ a few readability changes
+ add regression check to make sure that sseEventSource is only created
on elements with sse-connect or equivalent
+ add test to make sure that sse-connect in the child of a swapped
element is handled
* Allow multiple listeners in eventsource mock
* Backport eventsource mocks to legacy tests
---------
Co-authored-by: 1cg <469183+1cg@users.noreply.github.com>
* Make htmx IE11 compatible again + tests IE11 compatible
* IE11 compatible handmade socket mock for ws-ext tests
* Fallback when xpath isn't supported, hx-on wildcard now working on IE11
* Merge remote-tracking branch 'upstream/relative-url-in-hx-boost' into ie11-compatibility
* Fix submit buttons/inputs handling
* Removed useless concatenation
* Don't initNode links and forms that shouldn't be initialized
* Removed selectors filtering to alleviate PR
* Add @1cg 's addValueToValues function to factor code
* Use formValues variable for clicked button's value including
* Allow extensions to set request bodies for GET and DELETE
Even though the semantics of request bodies for GET and DELETE are
undefined, it is legal to set request bodies for them. By default, GET
and DELETE form parameters should be encoded as URLs. If, however, an
extension defines `encodeParameters`, that should override the default
and set the request bodies for GET and DELETE methods, just like it does
for all the other HTTP methods.
* Don't use URL params by default with DELETE
* Re-enable skipped DELETE test
* Remove reference to DELETE in comment
* Add "useUrlParams" to requestConfig
* Add config.methodsThatUseUrlParams
* Add methodsThatUseUrlParams config tests
* Don't switch to body params based on extension
* Closes#1241: Add wsConnecting event
* Remove redundant tests
(The separate tests for connecting, open, and close events are handled by the one lifecycle event test which both tests that the events are called as expected and in the order expected.)
* Add event.type to detail object of wsConnecting event
(This makes the event polymorphic for this property path with the other lifecycle events – wsOpen and wsClose – which proxy the underlying socket’s event object. This means all lifecycle events can be handled by one handler – e.g., a status indication function – if desired.)
* Minor: Add missing semicolon
* Document wsConnecting event
(And fix two tiny grammar issues.)
* Add events support for WebSockets
* Stop reconnection attempts after element has been removed
* Add tests for websockets
* Hide socker wrapper behind a more strict interface to avoid breaking changes in the future
* Fix legacy websocket tests interfering with new extension tests
* Minor doc fixes
* Add `wsBinaryType` configuration option
* Add data-loading-aria-busy directive for loading-states extension; add tests for the extension
* Update docs
* Fix tests of scoped loading states
* Commit test files
* Improve delay tests by using sinon timer
* Add reference to MDN about `aria-busy` attribute
Before this commit, the content that were swapped by an extension via
`handleSwap` was not handled by htmx: elemtents with `hx-` attributes,
scripts, no `load.htmx` event...
With this commit, if the `handleSwap` command returns an array of newly
added elements (only the first level), then they will be handled by htmx
like it's done for internal swap.
To not break existing extensions, `handleSwap` can still return `true`
to tell that the swap was handled, assuming than there is no new
elements to handle.
A new test was added with a button that, when clicked, loads a text and
a span with `hx-trigger=load`, both handled by an extension. This commit
allows this span to be loaded.
The return of the `morphdom-swap` extension was updated to return the
target element, even if unchanged, to let htmx check in the maybe new
content that there is something new to handle. This is tested in a new
test.
If an element is replaced by an extension in `handleSwap`, the events
(`afterSwap.htmx` and `afterSettle.htmx`) were not received by the
`onLoad` method of extensions defined on parents of the target, because
theses extensions were retrieved after the replacement, and so it was
not possible to get through the parents, the target not being in the dom
anymore.
This commits loads the extensions for the target and save them in
`eventDetail` before doing the swap, so they are accessible in
`triggerEvent`, and passed to `withExtensions` that use this list if
passed (else load them).
A new test is added that fails without the updates in `htmx.js`.