diff options
-rw-r--r-- | src/htmx.js | 2 | ||||
-rw-r--r-- | test/core/extensions.js | 42 | ||||
-rw-r--r-- | test/index.html | 1 |
3 files changed, 44 insertions, 1 deletions
diff --git a/src/htmx.js b/src/htmx.js index a8fdfa1b..38bdd726 100644 --- a/src/htmx.js +++ b/src/htmx.js @@ -2149,7 +2149,7 @@ return (function () { eventResult = eventResult && elt.dispatchEvent(kebabedEvent) } withExtensions(elt, function (extension) { - eventResult = eventResult && (extension.onEvent(eventName, event) !== false) + eventResult = eventResult && (extension.onEvent(eventName, event) !== false && !event.defaultPrevented) }); return eventResult; } diff --git a/test/core/extensions.js b/test/core/extensions.js new file mode 100644 index 00000000..2bcfe208 --- /dev/null +++ b/test/core/extensions.js @@ -0,0 +1,42 @@ +describe('Core htmx extension tests', function() { + beforeEach(function() { + this.server = makeServer(); + clearWorkArea(); + }); + afterEach(function() { + this.server.restore(); + clearWorkArea(); + }); + + it('should support event cancellation by returning false', function() { + htmx.defineExtension('ext-prevent-request', { + onEvent: function(name, evt) { + if (name === 'htmx:beforeRequest') { + return false; + } + } + }); + + this.server.respondWith('GET', '/test', 'clicked!'); + var div = make('<div hx-get="/test" hx-ext="ext-prevent-request">Click Me!</div>') + div.click(); + this.server.respond(); + div.innerHTML.should.equal('Click Me!'); + }); + + it('should support event cancellation with preventDefault', function() { + htmx.defineExtension('ext-prevent-request', { + onEvent: function(name, evt) { + if (name === 'htmx:beforeRequest') { + evt.preventDefault(); + } + } + }); + + this.server.respondWith('GET', '/test', 'clicked!'); + var div = make('<div hx-get="/test" hx-ext="ext-prevent-request">Click Me!</div>') + div.click(); + this.server.respond(); + div.innerHTML.should.equal('Click Me!'); + }); +}); diff --git a/test/index.html b/test/index.html index f747775b..ea49d60f 100644 --- a/test/index.html +++ b/test/index.html @@ -54,6 +54,7 @@ <script src="core/internals.js"></script> <script src="core/api.js"></script> <script src="core/ajax.js"></script> +<script src="core/extensions.js"></script> <script src="core/verbs.js"></script> <script src="core/parameters.js"></script> <script src="core/headers.js"></script> |