mirror of
https://github.com/bigskysoftware/htmx.git
synced 2025-09-27 13:01:03 +00:00
docs update & prep for v1.1.0
This commit is contained in:
parent
a41f689f23
commit
b0f00c4677
2
dist/ext/class-tools.js
vendored
2
dist/ext/class-tools.js
vendored
@ -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
4
dist/ext/preload.js
vendored
@ -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;
|
||||
}
|
||||
|
||||
|
2
dist/ext/remove-me.js
vendored
2
dist/ext/remove-me.js
vendored
@ -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
28
dist/htmx.js
vendored
@ -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
2
dist/htmx.min.js
vendored
File diff suppressed because one or more lines are too long
BIN
dist/htmx.min.js.gz
vendored
BIN
dist/htmx.min.js.gz
vendored
Binary file not shown.
@ -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) {
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
//====================================================================
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
//====================================================================
|
||||
|
@ -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);
|
||||
})
|
||||
|
||||
});
|
@ -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);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user