mirror of
https://github.com/bigskysoftware/htmx.git
synced 2025-09-30 14:31:47 +00:00
Add "ignore:" command for extensions
This commit is contained in:
parent
8bad3b61f5
commit
84ac44b591
37
src/htmx.js
37
src/htmx.js
@ -1735,24 +1735,35 @@ return (function () {
|
||||
delete extensions[name];
|
||||
}
|
||||
|
||||
function getExtensions(elt, extensionsToReturn) {
|
||||
function getExtensions(elt) {
|
||||
return getExtensionNames(elt).map(function (name) {
|
||||
return extensions[name]
|
||||
}).filter(function (extension) {
|
||||
return (extension != undefined)
|
||||
})
|
||||
}
|
||||
|
||||
function getExtensionNames(elt) {
|
||||
|
||||
if (elt == null) {
|
||||
return extensionsToReturn;
|
||||
return []
|
||||
}
|
||||
if (extensionsToReturn == null) {
|
||||
extensionsToReturn = [];
|
||||
}
|
||||
var extensionsForElement = getAttributeValue(elt, "hx-ext");
|
||||
if (extensionsForElement) {
|
||||
forEach(extensionsForElement.split(","), function(extensionName){
|
||||
extensionName = extensionName.replace(/ /g, '');
|
||||
var extension = extensions[extensionName];
|
||||
if (extension && extensionsToReturn.indexOf(extension) < 0) {
|
||||
extensionsToReturn.push(extension);
|
||||
|
||||
var result = getExtensionNames(parentElt(elt));
|
||||
var exts = getAttributeValue(elt, "hx-ext");
|
||||
|
||||
if (exts) {
|
||||
exts = exts.replace(/ /g, '');
|
||||
forEach(exts.split(","), function (name) {
|
||||
if (name.slice(0, 7) == "ignore:") {
|
||||
result = result.filter(function (n) { return n != name.slice(7) });
|
||||
} else if (result.indexOf(name) < 0) {
|
||||
result.push(name)
|
||||
}
|
||||
});
|
||||
}
|
||||
return getExtensions(parentElt(elt), extensionsToReturn);
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
//====================================================================
|
||||
|
@ -94,5 +94,27 @@ describe("hx-ext attribute", function() {
|
||||
ext3Calls.should.equal(0);
|
||||
});
|
||||
|
||||
it('Extensions are ignored properly', function () {
|
||||
this.server.respondWith("GET", "/test", "Clicked!");
|
||||
|
||||
make('<div id="div-AA" hx-ext="ext-1, ext-2"><button id="btn-AA" hx-get="/test">Click Me!</button>' +
|
||||
'<div id="div-BB" hx-ext="ignore:ext-1"><button id="btn-BB" hx-get="/test"></div></div>')
|
||||
|
||||
var btn1 = byId("btn-AA");
|
||||
var btn2 = byId("btn-BB");
|
||||
|
||||
btn1.click();
|
||||
this.server.respond();
|
||||
ext1Calls.should.equal(1);
|
||||
ext2Calls.should.equal(1);
|
||||
ext3Calls.should.equal(0);
|
||||
|
||||
btn2.click();
|
||||
this.server.respond();
|
||||
ext1Calls.should.equal(1);
|
||||
ext2Calls.should.equal(2);
|
||||
ext3Calls.should.equal(0);
|
||||
});
|
||||
|
||||
|
||||
});
|
Loading…
x
Reference in New Issue
Block a user