diff --git a/templates/main/instance_detail.html b/templates/main/instance_detail.html index 34be9de..2fe11d8 100644 --- a/templates/main/instance_detail.html +++ b/templates/main/instance_detail.html @@ -750,8 +750,8 @@ document.addEventListener('DOMContentLoaded', function() { // Initial update updateAllStatuses(); - // Set up periodic updates (every 30 seconds) - statusUpdateInterval = setInterval(updateAllStatuses, 30000); + // Set up periodic updates (every 10 minutes) + statusUpdateInterval = setInterval(updateAllStatuses, 600000); console.log('Periodic updates initialized'); }); diff --git a/templates/main/instances.html b/templates/main/instances.html index 4301ec1..6a413e7 100644 --- a/templates/main/instances.html +++ b/templates/main/instances.html @@ -246,13 +246,10 @@
- -
@@ -800,6 +797,46 @@ + + + {% endblock %} {% block extra_js %} @@ -2504,5 +2541,48 @@ document.addEventListener('DOMContentLoaded', function() { // Remove the payment plan fetching from here since fetchVersionInfo handles it // The periodic refresh (every 30 seconds) will handle payment plan updates properly }); + +let deleteInstanceId = null; +let deleteInstanceModal = null; + +document.addEventListener('DOMContentLoaded', function() { + deleteInstanceModal = new bootstrap.Modal(document.getElementById('deleteInstanceModal')); + const confirmDeleteCheckbox = document.getElementById('confirmDelete'); + const confirmDeleteBtn = document.getElementById('confirmDeleteBtn'); + if (confirmDeleteCheckbox && confirmDeleteBtn) { + confirmDeleteCheckbox.addEventListener('change', function() { + confirmDeleteBtn.disabled = !this.checked; + }); + } +}); + +function showDeleteInstanceModal(instanceId) { + deleteInstanceId = instanceId; + const confirmDeleteCheckbox = document.getElementById('confirmDelete'); + const confirmDeleteBtn = document.getElementById('confirmDeleteBtn'); + if (confirmDeleteCheckbox && confirmDeleteBtn) { + confirmDeleteCheckbox.checked = false; + confirmDeleteBtn.disabled = true; + } + deleteInstanceModal.show(); +} + +async function confirmDeleteInstance() { + if (!deleteInstanceId) return; + const csrfToken = document.querySelector('input[name="csrf_token"]').value; + try { + const response = await fetch(`/instances/${deleteInstanceId}`, { + method: 'DELETE', + headers: { + 'X-CSRF-Token': csrfToken + } + }); + if (!response.ok) throw new Error('Failed to delete instance'); + deleteInstanceModal.hide(); + location.reload(); + } catch (error) { + alert('Error deleting instance: ' + error.message); + } +} {% endblock %}