mirror of
https://github.com/bigskysoftware/htmx.git
synced 2025-10-02 23:35:13 +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];
|
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) {
|
if (elt == null) {
|
||||||
return extensionsToReturn;
|
return []
|
||||||
}
|
}
|
||||||
if (extensionsToReturn == null) {
|
|
||||||
extensionsToReturn = [];
|
var result = getExtensionNames(parentElt(elt));
|
||||||
}
|
var exts = getAttributeValue(elt, "hx-ext");
|
||||||
var extensionsForElement = getAttributeValue(elt, "hx-ext");
|
|
||||||
if (extensionsForElement) {
|
if (exts) {
|
||||||
forEach(extensionsForElement.split(","), function(extensionName){
|
exts = exts.replace(/ /g, '');
|
||||||
extensionName = extensionName.replace(/ /g, '');
|
forEach(exts.split(","), function (name) {
|
||||||
var extension = extensions[extensionName];
|
if (name.slice(0, 7) == "ignore:") {
|
||||||
if (extension && extensionsToReturn.indexOf(extension) < 0) {
|
result = result.filter(function (n) { return n != name.slice(7) });
|
||||||
extensionsToReturn.push(extension);
|
} 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);
|
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