docs update & prep for v1.1.0

This commit is contained in:
carson 2021-01-03 15:27:41 -07:00
parent a41f689f23
commit b0f00c4677
13 changed files with 142 additions and 36 deletions

View File

@ -69,7 +69,7 @@
htmx.defineExtension('class-tools', {
onEvent: function (name, evt) {
if (name === "htmx:processedNode") {
if (name === "htmx:afterProcessNode") {
var elt = evt.detail.elt;
maybeProcessClasses(elt);
if (elt.querySelectorAll) {

4
dist/ext/preload.js vendored
View File

@ -6,8 +6,8 @@ htmx.defineExtension("preload", {
onEvent: function(name, event) {
// Only take actions on "htmx:processedNode"
if (name !== "htmx:processedNode") {
// Only take actions on "htmx:afterProcessNode"
if (name !== "htmx:afterProcessNode") {
return;
}

View File

@ -10,7 +10,7 @@
htmx.defineExtension('remove-me', {
onEvent: function (name, evt) {
if (name === "htmx:processedNode") {
if (name === "htmx:afterProcessNode") {
var elt = evt.detail.elt;
if (elt.getAttribute) {
maybeRemoveMe(elt);

28
dist/htmx.js vendored
View File

@ -1250,6 +1250,7 @@ return (function () {
var nodeData = getInternalData(elt);
if (!nodeData.initialized) {
nodeData.initialized = true;
triggerEvent(elt, "htmx:beforeProcessNode")
if (elt.value) {
nodeData.lastValue = elt.value;
@ -1271,7 +1272,7 @@ return (function () {
if (wsInfo) {
processWebSocketInfo(elt, nodeData, wsInfo);
}
triggerEvent(elt, "htmx:processedNode");
triggerEvent(elt, "htmx:afterProcessNode");
}
}
@ -1305,7 +1306,7 @@ return (function () {
}
function ignoreEventForLogging(eventName) {
return eventName === "htmx:processedNode"
return eventName === "htmx:afterProcessNode"
}
function withExtensions(elt, toDo) {
@ -2180,24 +2181,33 @@ return (function () {
delete extensions[name];
}
function getExtensions(elt, extensionsToReturn) {
if (elt == null) {
function getExtensions(elt, extensionsToReturn, extensionsToIgnore) {
if (elt == undefined) {
return extensionsToReturn;
}
if (extensionsToReturn == null) {
if (extensionsToReturn == undefined) {
extensionsToReturn = [];
}
if (extensionsToIgnore == undefined) {
extensionsToIgnore = [];
}
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);
if (extensionName.slice(0, 7) == "ignore:") {
extensionsToIgnore.push(extensionName.slice(7));
return;
}
if (extensionsToIgnore.indexOf(extensionName) < 0) {
var extension = extensions[extensionName];
if (extension && extensionsToReturn.indexOf(extension) < 0) {
extensionsToReturn.push(extension);
}
}
});
}
return getExtensions(parentElt(elt), extensionsToReturn);
return getExtensions(parentElt(elt), extensionsToReturn, extensionsToIgnore);
}
//====================================================================

2
dist/htmx.min.js vendored

File diff suppressed because one or more lines are too long

BIN
dist/htmx.min.js.gz vendored

Binary file not shown.

View File

@ -69,7 +69,7 @@
htmx.defineExtension('class-tools', {
onEvent: function (name, evt) {
if (name === "htmx:processedNode") {
if (name === "htmx:afterProcessNode") {
var elt = evt.detail.elt;
maybeProcessClasses(elt);
if (elt.querySelectorAll) {

View File

@ -1250,6 +1250,7 @@ return (function () {
var nodeData = getInternalData(elt);
if (!nodeData.initialized) {
nodeData.initialized = true;
triggerEvent(elt, "htmx:beforeProcessNode")
if (elt.value) {
nodeData.lastValue = elt.value;
@ -1271,7 +1272,7 @@ return (function () {
if (wsInfo) {
processWebSocketInfo(elt, nodeData, wsInfo);
}
triggerEvent(elt, "htmx:processedNode");
triggerEvent(elt, "htmx:afterProcessNode");
}
}
@ -1305,7 +1306,7 @@ return (function () {
}
function ignoreEventForLogging(eventName) {
return eventName === "htmx:processedNode"
return eventName === "htmx:afterProcessNode"
}
function withExtensions(elt, toDo) {
@ -2180,24 +2181,33 @@ return (function () {
delete extensions[name];
}
function getExtensions(elt, extensionsToReturn) {
if (elt == null) {
function getExtensions(elt, extensionsToReturn, extensionsToIgnore) {
if (elt == undefined) {
return extensionsToReturn;
}
if (extensionsToReturn == null) {
if (extensionsToReturn == undefined) {
extensionsToReturn = [];
}
if (extensionsToIgnore == undefined) {
extensionsToIgnore = [];
}
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);
if (extensionName.slice(0, 7) == "ignore:") {
extensionsToIgnore.push(extensionName.slice(7));
return;
}
if (extensionsToIgnore.indexOf(extensionName) < 0) {
var extension = extensions[extensionName];
if (extension && extensionsToReturn.indexOf(extension) < 0) {
extensionsToReturn.push(extension);
}
}
});
}
return getExtensions(parentElt(elt), extensionsToReturn);
return getExtensions(parentElt(elt), extensionsToReturn, extensionsToIgnore);
}
//====================================================================

View File

@ -6,8 +6,8 @@ htmx.defineExtension("preload", {
onEvent: function(name, event) {
// Only take actions on "htmx:processedNode"
if (name !== "htmx:processedNode") {
// Only take actions on "htmx:afterProcessNode"
if (name !== "htmx:afterProcessNode") {
return;
}

View File

@ -10,7 +10,7 @@
htmx.defineExtension('remove-me', {
onEvent: function (name, evt) {
if (name === "htmx:processedNode") {
if (name === "htmx:afterProcessNode") {
var elt = evt.detail.elt;
if (elt.getAttribute) {
maybeRemoveMe(elt);

View File

@ -1250,6 +1250,7 @@ return (function () {
var nodeData = getInternalData(elt);
if (!nodeData.initialized) {
nodeData.initialized = true;
triggerEvent(elt, "htmx:beforeProcessNode")
if (elt.value) {
nodeData.lastValue = elt.value;
@ -1271,7 +1272,7 @@ return (function () {
if (wsInfo) {
processWebSocketInfo(elt, nodeData, wsInfo);
}
triggerEvent(elt, "htmx:processedNode");
triggerEvent(elt, "htmx:afterProcessNode");
}
}
@ -1305,7 +1306,7 @@ return (function () {
}
function ignoreEventForLogging(eventName) {
return eventName === "htmx:processedNode"
return eventName === "htmx:afterProcessNode"
}
function withExtensions(elt, toDo) {
@ -2180,24 +2181,33 @@ return (function () {
delete extensions[name];
}
function getExtensions(elt, extensionsToReturn) {
if (elt == null) {
function getExtensions(elt, extensionsToReturn, extensionsToIgnore) {
if (elt == undefined) {
return extensionsToReturn;
}
if (extensionsToReturn == null) {
if (extensionsToReturn == undefined) {
extensionsToReturn = [];
}
if (extensionsToIgnore == undefined) {
extensionsToIgnore = [];
}
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);
if (extensionName.slice(0, 7) == "ignore:") {
extensionsToIgnore.push(extensionName.slice(7));
return;
}
if (extensionsToIgnore.indexOf(extensionName) < 0) {
var extension = extensions[extensionName];
if (extension && extensionsToReturn.indexOf(extension) < 0) {
extensionsToReturn.push(extension);
}
}
});
}
return getExtensions(parentElt(elt), extensionsToReturn);
return getExtensions(parentElt(elt), extensionsToReturn, extensionsToIgnore);
}
//====================================================================

View File

@ -110,7 +110,29 @@ describe("hx-ext attribute", function() {
ext2Calls.should.equal(0);
ext3Calls.should.equal(0);
ext4Calls.should.equal(1);
});
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);
})
});

View File

@ -292,5 +292,59 @@ describe("Core htmx Events", function() {
}
});
it("htmx:beforeProcessNode is called when replacing outerHTML", function () {
var called = false;
var handler = htmx.on("htmx:beforeProcessNode", function (evt) {
called = true;
});
try {
this.server.respondWith("POST", "/test", function (xhr) {
xhr.respond(200, {}, "<button>Bar</button>");
});
var div = make("<button hx-post='/test' hx-swap='outerHTML'>Foo</button>");
div.click();
this.server.respond();
should.equal(called, true);
} finally {
htmx.off("htmx:beforeProcessNode", handler);
}
});
it("htmx:beforeProcessNode allows htmx attribute tweaking", function () {
var called = false;
var handler = htmx.on("htmx:beforeProcessNode", function (evt) {
evt.target.setAttribute("hx-post", "/success")
called = true;
});
try {
this.server.respondWith("POST", "/success", function (xhr) {
xhr.respond(200, {}, "<button>Bar</button>");
});
var div = make("<button hx-post='/fail' hx-swap='outerHTML'>Foo</button>");
div.click();
this.server.respond();
should.equal(called, true);
} finally {
htmx.off("htmx:beforeProcessNode", handler);
}
});
it("htmx:afterProcessNode is called after replacing outerHTML", function () {
var called = false;
var handler = htmx.on("htmx:afterProcessNode", function (evt) {
called = true;
});
try {
this.server.respondWith("POST", "/test", function (xhr) {
xhr.respond(200, {}, "<button>Bar</button>");
});
var div = make("<button hx-post='/test' hx-swap='outerHTML'>Foo</button>");
div.click();
this.server.respond();
should.equal(called, true);
} finally {
htmx.off("htmx:afterProcessNode", handler);
}
});
});