let selectedFile = null;
document.addEventListener('DOMContentLoaded', () => {
const form = document.getElementById('analysisForm');
const fileInput = document.getElementById('fileInput');
const textInput = document.getElementById('textInput');
const textClaim = document.getElementById('textClaim');
const dropZone = document.getElementById('dropZone');
const fileLabel = document.getElementById('fileLabel');
if (!form) return;
const resetFileState = () => {
selectedFile = null;
fileInput.value = '';
fileLabel.textContent = 'Drop media here or click to upload';
dropZone.classList.remove('upload-active');
};
fileInput.addEventListener('change', () => {
if (fileInput.files.length > 0) {
selectedFile = fileInput.files[0];
fileLabel.innerHTML = `Ready: ${selectedFile.name}`;
dropZone.classList.add('upload-active');
textInput.value = '';
} else {
resetFileState();
}
});
textInput.addEventListener('input', () => {
if (textInput.value.trim().length > 0) {
resetFileState();
}
});
form.addEventListener('submit', async (event) => {
event.preventDefault();
const resultBox = document.getElementById('resultBox');
const loader = document.getElementById('loader');
if (!textInput.value.trim() && !selectedFile && !textClaim.value.trim()) {
resultBox.innerHTML = '
Please provide a media file, a URL, or a text claim.
';
return;
}
resultBox.innerHTML = '';
loader.classList.remove('hidden');
const formData = new FormData();
if (selectedFile) formData.append('file', selectedFile);
if (textInput.value.trim()) formData.append('input', textInput.value.trim());
if (textClaim.value.trim()) formData.append('text_claim', textClaim.value.trim());
try {
const response = await fetch('/analyze', {
method: 'POST',
body: formData,
headers: { 'X-Requested-With': 'XMLHttpRequest' }
});
const data = await response.json();
loader.classList.add('hidden');
if (response.status === 401) {
window.location.href = '/login';
return;
}
if (!response.ok || data.error) {
resultBox.innerHTML = `Error: ${data.error || 'Analysis failed.'}
`;
return;
}
const sourcesHtml = (data.context_sources || []).length
? ``
: '';
const score = Number(data.confidence || 0);
const verdict = String(data.verdict || 'Unknown');
const verdictClass = verdict.toLowerCase().includes('fake') ? 'text-danger' : verdict.toLowerCase().includes('authentic') ? 'text-success' : 'text-warning';
resultBox.innerHTML = `
Analysis complete
${verdict}
${data.reasoning || ''}
${score}%
${sourcesHtml}
`;
const anotherBtn = document.getElementById('startAnotherBtn');
if (anotherBtn) {
anotherBtn.addEventListener('click', () => {
form.reset();
resetFileState();
resultBox.innerHTML = '';
});
}
} catch (err) {
loader.classList.add('hidden');
resultBox.innerHTML = `Server error: ${err}
`;
}
});
});