* Fix old npm dependencies
* implement web-test-runner tests for headless alongside Mocha browser tests
* Increase test and code coverage
* update to 100% coverage and impove eslint
* Update testing Doco
* revert all htmx changes and updates/disable tests needed
* fix browser mocha test
* Default testing to use playwrite only instead of puppeter
* playwright install fix
* Imporve test summary reporting
* flatten false looks closer to original
* Initial suggestion (squashed)
Support multiple extended selectors for hx-include
Additional test for nested standard selector
Add @MichaelWest22 hx-disabled-elt multiple selector test
Add hx-trigger `from` test with multiple extended selectors
Simplify
Include #2915 fix
Update htmx.js
Split for readability
Don't apply global to previous selectors
Rewrite loop, restore global recursive call, minimize diff
Use break for better readability
Co-Authored-By: MichaelWest22 <12867972+MichaelWest22@users.noreply.github.com>
* Keep global as a first-position-only keyword
* Wrapped selector syntax
* Replace substring check by individual chars check
* Fix format
---------
Co-authored-by: MichaelWest22 <12867972+MichaelWest22@users.noreply.github.com>
* Adjust hx-trigger's changed modifier for multiple sources
The `changed` trigger modifier can see different event targets, either due
to the `from` modifier or event bubbling. The existing behavior trigger
only for one node (`from` modifier) or inconsistently (bubbling).
Use a nested weak map to keep track of the last value per distinguished
(trigger specification, event target node) pair. The weak map ensures
that Garbage Collection can still recycle the nodes.
If a event target was not seen via `from`, it is assumed changed for the
first time the trigger is hit.
* Add test case for separate triggers with changed modifier
* Update parseInterval to handle "0" correctly
When a parameter like "0ms" is passed in to parseInterval it gets parsed to 0.
Previously this would result in a return value of "undefined" because 0 is falsy
and thus the `return 0 || undefined` statements return undefined.
The purpose of the form `parseFloat(str) || undefined` was to return "undefined" if
parseFloat failed (parseFloat returns NaN, a falsy value, if it can't parse its
argument). Unfortunately, as mentioned, parseFloat can also succeed and return a
falsy value -- when the argument is "0" (or "0.0", etc.). So the new code, rather
than depending on the falsiness of the result of parseFloat, explicitly checks for
a NaN.
* Adds some semicolons
Adds some semicolons to parseInterval (and tests) for consistency.
* Add one more parseInterval test for "0"
Adds test test to make sure parseInterval works on "0".
* Adds functional tests for every, swap, settle, throttle, and delay
* Explcitly check that setTimeout values are > 0
These values come from user settings that are read from parseInterval,
so they could be a number or undefined.
If the value being checked is > 0 setTimeout will be called with some
associated function. If the value is 0 or 'undefined' the associated function
will be called immediately ('undefined' is not greater than 0).
* Change '!== undefined' to '> 0'
`pollInterval !== undefined` is a subtly different conditional than just `pollInterval` or `pollInterval > 0` (which are equivalent). Changes the conditional to `pollInterval > 0` so as to not change the behavior but also be more explicit in the test.
* Allow CSS selectors with whitespace in `hx-trigger`
Parsing of `hx-trigger` scans for whitespace, so if a CSS selector is used that contains whitespace, e.g. `form input`, a syntax error is raised.
A workaround is implemented by allowing such a CSS selector to be wrapped in either curly braces or parentheses.
* Add explanation whitespace in CSS selector to docs
* Tests for CSS selectors containing whitespace
* Use faster RegEx test, remove redundant variable declarations
* Added Descendant Combinator support to `root` and `target` modifiers
* Add missing semicolon
* Tests for descendant combinators in `root` and `target` modifiers
* Improve descendant combinator test coverage
The `htmx:trigger` event is fired whenever an HTMX AJAX request would
be. Now, `hx-trigger` can also be specified on an element without an
AJAX request, which will simply fire the `htmx:trigger` event on the
action specified by the attribute, and do nothing else.
This pattern allows for specifying client-side actions that don't
require a network request, while remaining within the HTMX control
paradigm.
this fixes an ugly bug introduced when the trigger logic was pulled out, where the handler of the first revealed element was used over and over again for any future elements that also were revealed. many braincells lost mmm.
Triggers are separated by commas, and each will get handled with its
own options. If we are unable to parse any triggers, the default
trigger for each element is used.