support polling

This commit is contained in:
carson 2020-04-28 18:54:10 -07:00
parent f3d79dc505
commit 61d8f18894
2 changed files with 47 additions and 1 deletions

View File

@ -252,7 +252,7 @@ var HTMx = HTMx || (function () {
}
}
// DOM element processing
// DOM element processing
function processClassList(elt, classList, operation) {
var values = classList.split(",");
for (var i = 0; i < values.length; i++) {
@ -271,11 +271,31 @@ var HTMx = HTMx || (function () {
}
}
function processPolling(elt, action) {
var trigger = getTrigger(elt);
if (trigger.trim().indexOf("every ") === 0) {
var args = trigger.split(/\s+/);
var intervalStr = args[1];
if (intervalStr) {
var interval = parseInterval(intervalStr);
// TODO store for cancelling
var timeout = setTimeout(function () {
if (document.body.contains(elt)) {
issueAjaxRequest(elt, getAttributeValue(elt, action));
processPolling(elt, action);
}
}, interval);
}
}
}
function processElement(elt) {
if (getAttributeValue(elt, 'hx-get')) {
var trigger = getTrigger(elt);
if (trigger === 'load') {
issueAjaxRequest(elt, getAttributeValue(elt, 'hx-get'));
} else if (trigger.trim().indexOf('every ') === 0) {
processPolling(elt, 'hx-get');
} else {
elt.addEventListener(trigger, function (evt) {
issueAjaxRequest(elt, getAttributeValue(elt, 'hx-get'));

26
test/scratch.html Normal file
View File

@ -0,0 +1,26 @@
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Scratch File</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="../node_modules/mocha/mocha.css" />
</head>
<body>
<script src="../node_modules/sinon/pkg/sinon.js"></script>
<script src="../src/htmx.js"></script>
<script>
var server = sinon.fakeServer.create();
server.autoRespond = true;
server.respondWith("GET", "/test", "<li>FOO</li>");
</script>
<em>Work Area</em>
<hr/>
<div id="work-area" class="hx-history-element">
<ul hx-get="/test" hx-swap="append" hx-trigger="every 1s">
</ul>
</div>
</body>
</html>