summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--src/htmx.js2
-rw-r--r--test/core/extensions.js42
-rw-r--r--test/index.html1
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>