File size: 3,576 Bytes
ed925c4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
document.addEventListener('DOMContentLoaded', () => {
    const checkBtn = document.getElementById('check-btn');
    const clearBtn = document.getElementById('clear-btn');
    const contentInput = document.getElementById('content-input');
    
    // UI Elements
    const btnText = document.querySelector('.btn-text');
    const btnLoader = document.getElementById('btn-loader');
    const resultContainer = document.getElementById('result-container');
    
    const statusIcon = document.getElementById('status-icon');
    const resultLabel = document.getElementById('result-label');
    const progressFill = document.getElementById('progress-fill');
    const scoreText = document.getElementById('score-text');
    const explanationText = document.getElementById('explanation-text');

    checkBtn.addEventListener('click', async () => {
        const text = contentInput.value.trim();
        
        if (!text) {
            alert("Please enter some text or a URL to analyze.");
            return;
        }

        // Set Loading State
        setLoading(true);

        try {
            const response = await fetch('/api/analyze', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify({ content: text })
            });

            const data = await response.json();

            if (!response.ok) {
                throw new Error(data.error || "Failed to analyze content");
            }

            displayResult(data);

        } catch (error) {
            alert(`Error: ${error.message}`);
            // Reset UI slightly
            resultContainer.classList.add('hidden');
        } finally {
            setLoading(false);
        }
    });

    clearBtn.addEventListener('click', () => {
        contentInput.value = '';
        resultContainer.classList.add('hidden');
        // Reset classes
        resultContainer.className = 'result-card glass-panel hidden';
        progressFill.style.width = '0%';
    });

    function setLoading(isLoading) {
        if (isLoading) {
            checkBtn.disabled = true;
            btnText.classList.add('hidden');
            btnLoader.classList.remove('hidden');
            resultContainer.classList.add('hidden');
        } else {
            checkBtn.disabled = false;
            btnText.classList.remove('hidden');
            btnLoader.classList.add('hidden');
        }
    }

    function displayResult(data) {
        // Remove existing state classes
        resultContainer.className = 'result-card glass-panel';
        
        const result = data.result; // "Real", "Fake", or "Uncertain"
        const score = data.confidence; // 0 - 100
        const explanation = data.explanation;

        // Apply new state class
        resultContainer.classList.add(`state-${result.toLowerCase()}`);
        
        // Update text
        resultLabel.textContent = `${result} Content`;
        scoreText.textContent = `${score}%`;
        explanationText.textContent = explanation;

        // Icons
        if (result === 'Real') {
            statusIcon.textContent = '✓';
        } else if (result === 'Fake') {
            statusIcon.textContent = '✕';
        } else {
            statusIcon.textContent = '?';
        }

        // Show container
        resultContainer.classList.remove('hidden');

        // Animate progress bar slightly after container shows
        setTimeout(() => {
            progressFill.style.width = `${score}%`;
        }, 100);
    }
});