| document.addEventListener('DOMContentLoaded', () => { |
| const fileInput = document.getElementById('image'); |
| const fileUploadText = document.querySelector('.file-upload-text'); |
| const uploadMessage = document.getElementById('upload-message'); |
| const form = document.getElementById('patient-form'); |
| const submitBtn = document.getElementById('submit-btn'); |
| const resultSection = document.getElementById('result-section'); |
| const resultContent = document.getElementById('result-content'); |
|
|
| |
| fileInput.addEventListener('change', () => { |
| if (fileInput.files && fileInput.files.length > 0) { |
| const file = fileInput.files[0]; |
| const validTypes = ['image/jpeg', 'image/jpg', 'image/png']; |
| const maxSize = 20 * 1024 * 1024; |
|
|
| |
| if (!validTypes.includes(file.type)) { |
| alert('Please upload an image in JPG, JPEG, or PNG format.'); |
| fileInput.value = ''; |
| fileUploadText.textContent = 'Choose Image'; |
| uploadMessage.style.display = 'none'; |
| return; |
| } |
|
|
| if (file.size > maxSize) { |
| alert('File size exceeds 20MB. Please upload a smaller image.'); |
| fileInput.value = ''; |
| fileUploadText.textContent = 'Choose Image'; |
| uploadMessage.style.display = 'none'; |
| return; |
| } |
|
|
| |
| fileUploadText.textContent = file.name; |
|
|
| |
| uploadMessage.innerHTML = ` |
| <span class="message-text">Upload Successful: ${file.name}</span> |
| <button class="close-btn" aria-label="Close message">×</button> |
| `; |
| uploadMessage.style.display = 'flex'; |
| uploadMessage.classList.add('show'); |
|
|
| |
| const closeBtn = uploadMessage.querySelector('.close-btn'); |
| closeBtn.addEventListener('click', () => { |
| uploadMessage.style.display = 'none'; |
| uploadMessage.classList.remove('show'); |
| }); |
| } else { |
| fileUploadText.textContent = 'Choose Image'; |
| uploadMessage.style.display = 'none'; |
| uploadMessage.classList.remove('show'); |
| } |
| }); |
|
|
| |
| form.addEventListener('submit', async (e) => { |
| e.preventDefault(); |
|
|
| |
| submitBtn.disabled = true; |
| submitBtn.textContent = 'Processing...'; |
| resultSection.style.display = 'none'; |
| resultContent.innerHTML = ''; |
|
|
| try { |
| const formData = new FormData(form); |
|
|
| const response = await fetch('/predict', { |
| method: 'POST', |
| body: formData |
| }); |
|
|
| const data = await response.json(); |
|
|
| |
| resultSection.style.display = 'block'; |
| if (data.error) { |
| resultContent.innerHTML = ` |
| <div class="result-error"> |
| <p>${data.error}</p> |
| </div> |
| `; |
| } else if (data.prediction === 'Low confidence') { |
| resultContent.innerHTML = ` |
| <div class="result-warning"> |
| <p><strong>Warning:</strong> ${data.message}</p> |
| <p><strong>Confidence:</strong> ${data.confidence}</p> |
| </div> |
| `; |
| } else { |
| resultContent.innerHTML = ` |
| <div class="result-success"> |
| <p><strong>Prediction:</strong> ${data.prediction}</p> |
| <p><strong>Confidence:</strong> ${data.confidence}</p> |
| </div> |
| `; |
| } |
| } catch (error) { |
| console.error('Error:', error); |
| resultSection.style.display = 'block'; |
| resultContent.innerHTML = ` |
| <div class="result-error"> |
| <p>An error occurred while processing your request. Please try again.</p> |
| </div> |
| `; |
| } finally { |
| |
| submitBtn.disabled = false; |
| submitBtn.textContent = 'Submit Details'; |
| } |
| }); |
| }); |