a9be15caf3
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
63 lines
2.2 KiB
JavaScript
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();
|
|
}
|
|
|
|
})();
|