mirror of
https://github.com/bigskysoftware/htmx.git
synced 2025-09-30 22:41:23 +00:00
support header-based triggers after swaps and settles
This commit is contained in:
parent
af0ae86325
commit
6da50570bc
44
src/htmx.js
44
src/htmx.js
@ -619,22 +619,21 @@ return (function () {
|
||||
}
|
||||
}
|
||||
|
||||
function handleTrigger(elt, trigger) {
|
||||
if (trigger) {
|
||||
if (trigger.indexOf("{") === 0) {
|
||||
var triggers = parseJSON(trigger);
|
||||
for (var eventName in triggers) {
|
||||
if (triggers.hasOwnProperty(eventName)) {
|
||||
var detail = triggers[eventName];
|
||||
if (!isRawObject(detail)) {
|
||||
detail = {"value": detail}
|
||||
}
|
||||
triggerEvent(elt, eventName, detail);
|
||||
function handleTrigger(xhr, header, elt) {
|
||||
var triggerBody = xhr.getResponseHeader(header);
|
||||
if (triggerBody.indexOf("{") === 0) {
|
||||
var triggers = parseJSON(triggerBody);
|
||||
for (var eventName in triggers) {
|
||||
if (triggers.hasOwnProperty(eventName)) {
|
||||
var detail = triggers[eventName];
|
||||
if (!isRawObject(detail)) {
|
||||
detail = {"value": detail}
|
||||
}
|
||||
triggerEvent(elt, eventName, detail);
|
||||
}
|
||||
} else {
|
||||
triggerEvent(elt, trigger, []);
|
||||
}
|
||||
} else {
|
||||
triggerEvent(elt, triggerBody, []);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1613,6 +1612,10 @@ return (function () {
|
||||
}
|
||||
}
|
||||
|
||||
function hasHeader(xhr, regexp) {
|
||||
return xhr.getAllResponseHeaders().match(regexp);
|
||||
}
|
||||
|
||||
function issueAjaxRequest(elt, verb, path, eventTarget) {
|
||||
var target = getTarget(elt);
|
||||
if (target == null) {
|
||||
@ -1726,11 +1729,11 @@ return (function () {
|
||||
try {
|
||||
if (!triggerEvent(elt, 'htmx:beforeOnLoad', eventDetail)) return;
|
||||
|
||||
if (xhr.getAllResponseHeaders().search(/HX-Trigger/i) >= 0) {
|
||||
handleTrigger(elt, this.getResponseHeader("HX-Trigger"));
|
||||
if (hasHeader(xhr, /HX-Trigger:/i)) {
|
||||
handleTrigger(xhr, "HX-Trigger", elt);
|
||||
}
|
||||
|
||||
if (xhr.getAllResponseHeaders().search(/HX-Push/i) >= 0) {
|
||||
if (hasHeader(xhr,/HX-Push:/i)) {
|
||||
var pushedUrl = this.getResponseHeader("HX-Push");
|
||||
}
|
||||
|
||||
@ -1792,6 +1795,11 @@ return (function () {
|
||||
if (anchor) {
|
||||
location.hash = anchor;
|
||||
}
|
||||
|
||||
if (hasHeader(xhr, /HX-Trigger-After-Swap:/i)) {
|
||||
handleTrigger(xhr, "HX-Trigger-After-Swap", elt);
|
||||
}
|
||||
|
||||
var doSettle = function(){
|
||||
forEach(settleInfo.tasks, function (task) {
|
||||
task.call();
|
||||
@ -1809,6 +1817,10 @@ return (function () {
|
||||
triggerEvent(getDocument().body, 'htmx:pushedIntoHistory', {path:pathToPush});
|
||||
}
|
||||
updateScrollState(target, settleInfo.elts, swapSpec);
|
||||
|
||||
if (hasHeader(xhr, /HX-Trigger-After-Settle:/i)) {
|
||||
handleTrigger(xhr, "HX-Trigger-After-Settle", elt);
|
||||
}
|
||||
}
|
||||
|
||||
if (swapSpec.settleDelay > 0) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user