document.addEventListener('DOMContentLoaded', () => { const fileInput = document.getElementById('fileInput'); const fileNameDisplay = document.getElementById('fileName'); const imagePreview = document.getElementById('imagePreview'); const previewSection = document.getElementById('preview-section'); const uploadForm = document.getElementById('uploadForm'); const loadingDiv = document.getElementById('loading'); const resultsDiv = document.getElementById('results'); // Handle file selection fileInput.addEventListener('change', (e) => { const file = e.target.files[0]; if (file) { fileNameDisplay.textContent = file.name; // Show preview const reader = new FileReader(); reader.onload = (e) => { imagePreview.src = e.target.result; previewSection.classList.remove('hidden'); resultsDiv.classList.add('hidden'); // Hide previous results }; reader.readAsDataURL(file); } }); // Handle form submission uploadForm.addEventListener('submit', async (e) => { e.preventDefault(); const file = fileInput.files[0]; if (!file) { alert('Please select an image first.'); return; } const preprocessing = 'v2'; const formData = new FormData(); formData.append('file', file); formData.append('preprocessing', preprocessing); // Show loading state loadingDiv.classList.remove('hidden'); resultsDiv.classList.add('hidden'); resultsDiv.innerHTML = ''; try { const response = await fetch('/predict', { method: 'POST', body: formData }); if (!response.ok) { throw new Error(`Server error: ${response.statusText}`); } const data = await response.json(); displayResults(data); } catch (error) { console.error('Error:', error); resultsDiv.innerHTML = `
Error: ${error.message}
Status: ${s1.label}
Subtype: ${s2.label}
Confidence: ${(s2.confidence * 100).toFixed(2)}%
${s2.label === 'ALL' ? 'Acute Lymphoblastic Leukemia' : 'Hematological Malignancies'}
Stage 2 model not loaded or failed.
Sample classified as Healthy, so subtype classification is not needed.