// Khởi tạo khi trang load document.addEventListener('DOMContentLoaded', function() { loadHistory(); // Event listeners document.getElementById('analyzeBtn').addEventListener('click', analyzeSentiment); document.getElementById('refreshBtn').addEventListener('click', loadHistory); document.querySelector('.popup-close').addEventListener('click', closePopup); // Enter key để phân tích document.getElementById('inputText').addEventListener('keypress', function(e) { if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault(); analyzeSentiment(); } }); }); // Hàm phân loại cảm xúc async function analyzeSentiment() { const inputText = document.getElementById('inputText').value.trim(); const loading = document.getElementById('loading'); const analyzeBtn = document.getElementById('analyzeBtn'); // Validate input if (!inputText) { showPopup('Vui lòng nhập câu cần phân loại!'); return; } if (inputText.length < 5) { showPopup('Câu quá ngắn! Vui lòng nhập ít nhất 5 ký tự.'); return; } // Show loading loading.style.display = 'block'; analyzeBtn.disabled = true; try { const response = await fetch('/analyze', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ text: inputText }) }); const data = await response.json(); if (data.success) { displayResult(data.result); loadHistory(); // Refresh history document.getElementById('inputText').value = ''; // Clear input } else { showPopup(data.error || 'Đã xảy ra lỗi khi phân loại'); } } catch (error) { showPopup('Không thể kết nối đến server. Vui lòng thử lại!'); console.error('Error:', error); } finally { loading.style.display = 'none'; analyzeBtn.disabled = false; } } // Hiển thị kết quả phân loại function displayResult(result) { const resultSection = document.getElementById('resultSection'); const sentimentBadge = document.getElementById('sentimentBadge'); const analyzedText = document.getElementById('analyzedText'); const confidenceScore = document.getElementById('confidenceScore'); // Map sentiment to Vietnamese const sentimentMap = { 'POSITIVE': { text: '😊 Tích cực', class: 'sentiment-positive' }, 'NEGATIVE': { text: '😞 Tiêu cực', class: 'sentiment-negative' }, 'NEUTRAL': { text: '😐 Trung tính', class: 'sentiment-neutral' } }; const sentiment = sentimentMap[result.sentiment] || sentimentMap['NEUTRAL']; // Update badge sentimentBadge.textContent = sentiment.text; sentimentBadge.className = 'sentiment-badge ' + sentiment.class; // Update text analyzedText.textContent = `"${result.text}"`; // Update confidence if (result.score) { confidenceScore.textContent = `Độ tin cậy: ${(result.score * 100).toFixed(0)}%`; } else { confidenceScore.textContent = ''; } // Show result section resultSection.style.display = 'block'; // Scroll to result resultSection.scrollIntoView({ behavior: 'smooth', block: 'nearest' }); } // Load lịch sử phân loại async function loadHistory() { const historyList = document.getElementById('historyList'); try { const response = await fetch('/history'); const data = await response.json(); if (data.success && data.history.length > 0) { historyList.innerHTML = data.history.map(item => createHistoryItem(item)).join(''); } else { historyList.innerHTML = '

Chưa có lịch sử phân loại

'; } } catch (error) { console.error('Error loading history:', error); historyList.innerHTML = '

Không thể tải lịch sử

'; } } // Tạo HTML cho item lịch sử function createHistoryItem(item) { const sentimentMap = { 'POSITIVE': { text: 'Tích cực', class: 'sentiment-positive' }, 'NEGATIVE': { text: 'Tiêu cực', class: 'sentiment-negative' }, 'NEUTRAL': { text: 'Trung tính', class: 'sentiment-neutral' } }; const sentiment = sentimentMap[item.sentiment] || sentimentMap['NEUTRAL']; return `
${sentiment.text} ${item.timestamp}
${item.text}
`; } // Hiển thị popup thông báo function showPopup(message) { const popup = document.getElementById('popup'); const popupMessage = document.getElementById('popupMessage'); popupMessage.textContent = message; popup.style.display = 'flex'; // Auto close after 3 seconds setTimeout(closePopup, 3000); } // Đóng popup function closePopup() { document.getElementById('popup').style.display = 'none'; } // Close popup when clicking outside window.addEventListener('click', function(e) { const popup = document.getElementById('popup'); if (e.target === popup) { closePopup(); } });