const API_BASE_URL = 'http://127.0.0.1:5000/api'; // Tab functionality function openTab(evt, tabName) { const tabcontent = document.getElementsByClassName("tab-content"); const tabbuttons = document.getElementsByClassName("tab-button"); for (let i = 0; i < tabcontent.length; i++) { tabcontent[i].classList.remove("active"); } for (let i = 0; i < tabbuttons.length; i++) { tabbuttons[i].classList.remove("active"); } document.getElementById(tabName).classList.add("active"); evt.currentTarget.classList.add("active"); } // File upload functionality function setupFileUpload(type) { const uploadArea = document.getElementById(`${type}-upload`); const fileInput = document.getElementById(`${type}-input`); const predictBtn = document.getElementById(`${type}-predict`); uploadArea.addEventListener('click', () => fileInput.click()); fileInput.addEventListener('change', (e) => { const file = e.target.files[0]; if (file) { handleFileSelect(file, type); } }); // Drag and drop uploadArea.addEventListener('dragover', (e) => { e.preventDefault(); uploadArea.classList.add('dragover'); }); uploadArea.addEventListener('dragleave', () => { uploadArea.classList.remove('dragover'); }); uploadArea.addEventListener('drop', (e) => { e.preventDefault(); uploadArea.classList.remove('dragover'); const file = e.dataTransfer.files[0]; if (file) { const dt = new DataTransfer(); dt.items.add(file); fileInput.files = dt.files; handleFileSelect(file, type); } }); predictBtn.addEventListener('click', () => { const file = fileInput.files[0]; if (file) { predictFile(file, type); } }); } function handleFileSelect(file, type) { const uploadArea = document.getElementById(`${type}-upload`); const predictBtn = document.getElementById(`${type}-predict`); // Update UI to show file selected uploadArea.innerHTML = `

Selected: ${file.name}

Click "Analyze ${type.charAt(0).toUpperCase() + type.slice(1)}" to process

`; // Show preview for images if (type === 'image' && file.type.startsWith('image/')) { const reader = new FileReader(); reader.onload = (e) => { uploadArea.innerHTML += `Preview`; }; reader.readAsDataURL(file); } // Show preview for videos if (type === 'video' && file.type.startsWith('video/')) { const reader = new FileReader(); reader.onload = (e) => { uploadArea.innerHTML += ``; }; reader.readAsDataURL(file); } predictBtn.disabled = false; } function predictFile(file, type) { const loading = document.getElementById('loading'); const resultDiv = document.getElementById(`${type}-result`); loading.style.display = 'flex'; resultDiv.className = 'result'; resultDiv.textContent = ''; const formData = new FormData(); formData.append('file', file); fetch(`${API_BASE_URL}/predict/${type}`, { method: 'POST', body: formData, headers: { 'Accept': 'application/json', } }) .then(response => { if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } return response.json(); }) .then(data => { loading.style.display = 'none'; if (data.status === 'success') { resultDiv.className = 'result success'; resultDiv.innerHTML = data.result.replace(/\n/g, '
'); } else { resultDiv.className = 'result error'; resultDiv.textContent = `Error: ${data.error}`; } }) .catch(error => { loading.style.display = 'none'; resultDiv.className = 'result error'; resultDiv.textContent = `Error: ${error.message}`; console.error('Error:', error); }); } function loadExample(type, filename) { const resultDiv = document.getElementById(`${type}-result`); resultDiv.className = 'result'; resultDiv.textContent = `Example: ${filename} - Upload a file to test this functionality`; } function resetUploadArea(type) { const uploadArea = document.getElementById(`${type}-upload`); const predictBtn = document.getElementById(`${type}-predict`); const fileInput = document.getElementById(`${type}-input`); const icons = { 'video': '📹', 'image': '🖼️', 'audio': '🎵' }; const fileTypes = { 'video': 'Supported: MP4, AVI, MOV', 'image': 'Supported: JPG, PNG, JPEG', 'audio': 'Supported: WAV, FLAC, MP3' }; uploadArea.innerHTML = `
${icons[type]}

Click to upload ${type} or drag and drop

${fileTypes[type]}

`; fileInput.value = ''; predictBtn.disabled = true; } // Initialize when page loads document.addEventListener('DOMContentLoaded', () => { setupFileUpload('video'); setupFileUpload('image'); setupFileUpload('audio'); });