mirror of
https://github.com/bigskysoftware/htmx.git
synced 2025-09-28 13:31:06 +00:00
allow filters for polling
This commit is contained in:
parent
c9936b4a35
commit
40ed7b0827
26
src/htmx.js
26
src/htmx.js
@ -853,7 +853,11 @@ return (function () {
|
||||
if (trigger === "every") {
|
||||
var every = {trigger: 'every'};
|
||||
consumeUntil(tokens, NOT_WHITESPACE);
|
||||
every.pollInterval = parseInterval(consumeUntil(tokens, WHITESPACE));
|
||||
every.pollInterval = parseInterval(consumeUntil(tokens, /[,\[\s]/));
|
||||
var eventFilter = maybeGenerateConditional(elt, tokens, "event");
|
||||
if (eventFilter) {
|
||||
every.eventFilter = eventFilter;
|
||||
}
|
||||
triggerSpecs.push(every);
|
||||
} else if (trigger.indexOf("sse:") === 0) {
|
||||
triggerSpecs.push({trigger: 'sse', sseEvent: trigger.substr(4)});
|
||||
@ -919,14 +923,16 @@ return (function () {
|
||||
getInternalData(elt).cancelled = true;
|
||||
}
|
||||
|
||||
function processPolling(elt, verb, path, interval) {
|
||||
function processPolling(elt, verb, path, spec) {
|
||||
var nodeData = getInternalData(elt);
|
||||
nodeData.timeout = setTimeout(function () {
|
||||
if (bodyContains(elt) && nodeData.cancelled !== true) {
|
||||
issueAjaxRequest(verb, path, elt);
|
||||
processPolling(elt, verb, getAttributeValue(elt, "hx-" + verb), interval);
|
||||
if (!maybeFilterEvent(spec, makeEvent('hx:poll:trigger', {triggerSpec:spec}))) {
|
||||
issueAjaxRequest(verb, path, elt);
|
||||
}
|
||||
processPolling(elt, verb, getAttributeValue(elt, "hx-" + verb), spec);
|
||||
}
|
||||
}, interval);
|
||||
}, spec.pollInterval);
|
||||
}
|
||||
|
||||
function isLocalLink(elt) {
|
||||
@ -1360,7 +1366,7 @@ return (function () {
|
||||
loadImmediately(elt, verb, path, nodeData, triggerSpec.delay);
|
||||
} else if (triggerSpec.pollInterval) {
|
||||
nodeData.polling = true;
|
||||
processPolling(elt, verb, path, triggerSpec.pollInterval);
|
||||
processPolling(elt, verb, path, triggerSpec);
|
||||
} else {
|
||||
addEventListener(elt, verb, path, nodeData, triggerSpec);
|
||||
}
|
||||
@ -2131,9 +2137,11 @@ return (function () {
|
||||
var eltData = getInternalData(elt);
|
||||
if (eltData.requestInFlight) {
|
||||
var queueStrategy = 'last';
|
||||
var eventData = getInternalData(event);
|
||||
if (eventData && eventData.triggerSpec && eventData.triggerSpec.queue) {
|
||||
queueStrategy = eventData.triggerSpec.queue;
|
||||
if (event) {
|
||||
var eventData = getInternalData(event);
|
||||
if (eventData && eventData.triggerSpec && eventData.triggerSpec.queue) {
|
||||
queueStrategy = eventData.triggerSpec.queue;
|
||||
}
|
||||
}
|
||||
if (eltData.queuedRequests == null) {
|
||||
eltData.queuedRequests = [];
|
||||
|
@ -316,6 +316,21 @@ describe("hx-trigger attribute", function(){
|
||||
}
|
||||
})
|
||||
|
||||
it('can filter polling', function(complete){
|
||||
this.server.respondWith("GET", "/test", "Called!");
|
||||
window.foo = false;
|
||||
var div = make('<div hx-get="/test" hx-trigger="every 5ms[foo]">Not Called</div>');
|
||||
var div2 = make('<div hx-get="/test" hx-trigger="every 5ms">Not Called</div>');
|
||||
this.server.autoRespond = true;
|
||||
this.server.autoRespondAfter = 0;
|
||||
setTimeout(function () {
|
||||
div.innerHTML.should.equal("Not Called");
|
||||
div2.innerHTML.should.equal("Called!");
|
||||
delete window.foo;
|
||||
complete();
|
||||
}, 100);
|
||||
})
|
||||
|
||||
it('bad condition issues error', function(){
|
||||
this.server.respondWith("GET", "/test", "Called!");
|
||||
var div = make('<div hx-get="/test" hx-trigger="evt[a.b]">Not Called</div>');
|
||||
|
Loading…
x
Reference in New Issue
Block a user