Add "ignore:" command for extensions

This commit is contained in:
Ben Pate 2020-12-14 13:26:34 -07:00
parent 8bad3b61f5
commit 84ac44b591
2 changed files with 46 additions and 13 deletions

View File

@ -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
} }
//==================================================================== //====================================================================

View File

@ -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);
});
}); });