Files
natascha-rieter.nl-user/plugins/form/assets/form-nonce-refresh.js
T
2026-04-18 23:38:26 +02:00

63 lines
2.2 KiB
JavaScript

(function() {
function refreshNonces() {
var nonces = document.querySelectorAll('.form-nonce-field');
if (nonces.length === 0) return;
var actions = {};
nonces.forEach(function(field) {
var action = field.getAttribute('data-nonce-action');
if (!actions[action]) actions[action] = [];
actions[action].push(field);
});
Object.keys(actions).forEach(function(action) {
try {
var urlObj = new URL(window.location.href);
urlObj.searchParams.set('task', 'get-nonce');
urlObj.searchParams.set('action', action);
var fetchUrl = urlObj.toString();
fetch(fetchUrl, {
headers: { 'X-Requested-With': 'XMLHttpRequest' }
})
.then(function(response) { return response.json(); })
.then(function(data) {
if (data.nonce) {
actions[action].forEach(function(field) {
field.value = data.nonce;
});
}
})
.catch(function(e) {
console.error('Grav Form Plugin: Failed to refresh nonce', e);
});
} catch (e) {
console.error('Grav Form Plugin: URL parsing failed', e);
}
});
}
// Refresh based on configured interval (default to 15 minutes)
var interval = (window.GravForm && window.GravForm.refresh_nonce_interval) || 900000;
function scheduleRefresh() {
var nonces = document.querySelectorAll('.form-nonce-field');
if (nonces.length === 0) return;
var parsed = Number(interval);
var delay = !isNaN(parsed) && parsed > 0 ? parsed : 900000;
delay = Math.max(delay, 1000);
setTimeout(function() {
refreshNonces();
setInterval(refreshNonces, delay);
}, delay);
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', scheduleRefresh);
} else {
scheduleRefresh();
}
})();