document.getElementById("newsImage").addEventListener("change", function(e) { const fileName = e.target.files[0] ? e.target.files[0].name : "Upload Image for Tampering Check"; document.querySelector(".file-upload-text").textContent = fileName; }); document.getElementById("verifyForm").addEventListener("submit", async function(e) { e.preventDefault(); const form = e.target; const formData = new FormData(form); const btn = document.getElementById("submitBtn"); const btnText = document.querySelector(".btn-text"); const loader = document.querySelector(".loader"); const resultsContainer = document.getElementById("resultsContainer"); btn.disabled = true; btnText.style.display = "none"; loader.style.display = "block"; resultsContainer.classList.add("hidden"); try { const response = await fetch("/api/verify", { method: "POST", body: formData }); if (!response.ok) throw new Error("Server error"); const data = await response.json(); const verdictTag = document.getElementById("finalVerdictTag"); verdictTag.textContent = data.final_verdict; verdictTag.style.backgroundColor = data.verdict_color; verdictTag.style.color = "#fff"; verdictTag.style.boxShadow = `0 0 15px ${data.verdict_color}80`; const isLinguisticallyFake = data.linguistic_score.is_fake; const isEvidencePro = data.evidence_is_pro; const hasEvidence = data.evidence.length > 0; const logicFake = document.getElementById("logicFake"); const logicStance = document.getElementById("logicStance"); const logicSummary = document.getElementById("logicSummary"); logicFake.textContent = isLinguisticallyFake ? "Failed (Looks Deceptive)" : "Passed (Looks Professional)"; logicFake.style.color = isLinguisticallyFake ? "var(--danger)" : "var(--success)"; if (!hasEvidence) { logicStance.textContent = "Unknown (No News Found)"; logicStance.style.color = "var(--text-muted)"; logicSummary.textContent = "Meaning: We couldn't find live news to fact-check this, so we are relying purely on linguistic analysis."; } else { logicStance.textContent = isEvidencePro ? "Passed (News Agrees)" : "Failed (News Disagrees)"; logicStance.style.color = isEvidencePro ? "var(--success)" : "var(--danger)"; if (!isLinguisticallyFake && isEvidencePro) { logicSummary.textContent = "Meaning: The text is professionally written and is backed up by live news. This is verified true."; } else if (isLinguisticallyFake && !isEvidencePro) { logicSummary.textContent = "Meaning: The text is highly deceptive and live news completely contradicts it. This is verified fake."; } else if (isLinguisticallyFake && isEvidencePro) { logicSummary.textContent = "Meaning: Live news confirms this event happened, but the text you provided is written in a highly deceptive, sensationalist, or click-bait manner."; } else if (!isLinguisticallyFake && !isEvidencePro) { logicSummary.textContent = "Meaning: The text is written very professionally (like a real news article), but live news proves that it is factually incorrect."; } } const fProb = (data.linguistic_score.prob_fake * 100).toFixed(1); const rProb = (data.linguistic_score.prob_real * 100).toFixed(1); document.getElementById("fakeProbVal").textContent = `${fProb}%`; document.getElementById("fakeProbFill").style.width = `${fProb}%`; document.getElementById("realProbVal").textContent = `${rProb}%`; document.getElementById("realProbFill").style.width = `${rProb}%`; const imgInd = document.getElementById("imageStatusIndicator"); const imgMsg = document.getElementById("imageStatusMessage"); imgMsg.textContent = data.image_analysis.message; if (data.image_analysis.status === "none") { imgInd.style.backgroundColor = "gray"; } else if (data.image_analysis.tampered_prob < 0.5) { imgInd.style.backgroundColor = "var(--success)"; } else { imgInd.style.backgroundColor = "var(--danger)"; } const evidenceList = document.getElementById("evidenceList"); evidenceList.innerHTML = ""; if (data.evidence.length === 0) { evidenceList.innerHTML = `

No related live news articles found to cross-reference.

`; } else { data.evidence.forEach(item => { const isPro = item.stance === "PRO"; const div = document.createElement("div"); div.className = `evidence-item ${isPro ? "pro" : "con"}`; div.innerHTML = `
${item.source}
"${item.snippet}"
Stance: ${item.stance} (${(item.confidence * 100).toFixed(1)}% Confidence)
`; evidenceList.appendChild(div); }); } resultsContainer.classList.remove("hidden"); } catch (error) { alert("An error occurred during verification. Make sure the backend is running."); console.error(error); } finally { btn.disabled = false; btnText.style.display = "block"; loader.style.display = "none"; } });