-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
118 lines (98 loc) · 4.21 KB
/
script.js
File metadata and controls
118 lines (98 loc) · 4.21 KB
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
110
111
112
113
114
115
116
117
118
// Tab Switching
document.addEventListener('DOMContentLoaded', function() {
const tabButtons = document.querySelectorAll('.tab-button');
const tabContents = document.querySelectorAll('.tab-content');
tabButtons.forEach(button => {
button.addEventListener('click', () => {
const tabId = button.getAttribute('data-tab');
// Remove active class from all buttons and contents
tabButtons.forEach(btn => btn.classList.remove('active'));
tabContents.forEach(content => content.classList.remove('active'));
// Add active class to clicked button and corresponding content
button.classList.add('active');
document.getElementById(tabId).classList.add('active');
});
});
// Initialize Chat functionality
initChat();
// Initialize Text Analysis
initTextAnalysis();
// Initialize Content Generator
initContentGenerator();
});
// ============= CHAT FUNCTIONALITY =============
function initChat() {
const chatInput = document.getElementById('chatInput');
const sendButton = document.getElementById('sendButton');
const chatMessages = document.getElementById('chatMessages');
async function sendMessage() {
const message = chatInput.value.trim();
if (!message) return;
// Add user message
addMessage(message, 'user');
chatInput.value = '';
// Show "AI is typing..." indicator
const typingDiv = document.createElement('div');
typingDiv.className = 'message assistant typing';
typingDiv.innerHTML = `
<div class="message-avatar"><i class="fas fa-robot"></i></div>
<div class="message-content"><em>AI is typing...</em></div>
`;
chatMessages.appendChild(typingDiv);
chatMessages.scrollTop = chatMessages.scrollHeight;
try {
const response = await fetch('/api/chat', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ message })
});
const data = await response.json();
// Remove typing indicator
chatMessages.removeChild(typingDiv);
if (data.response) {
addMessage(data.response, 'assistant');
} else if (data.error) {
addMessage("Error: " + data.error, 'assistant');
} else {
addMessage("Sorry, I didn't understand that.", 'assistant');
}
} catch (err) {
chatMessages.removeChild(typingDiv);
addMessage("Network error. Please try again.", 'assistant');
}
}
function addMessage(text, sender) {
const messageDiv = document.createElement('div');
messageDiv.className = `message ${sender}`;
const avatar = document.createElement('div');
avatar.className = 'message-avatar';
avatar.innerHTML = sender === 'user' ? '<i class="fas fa-user"></i>' : '<i class="fas fa-robot"></i>';
const content = document.createElement('div');
content.className = 'message-content';
content.textContent = text;
messageDiv.appendChild(avatar);
messageDiv.appendChild(content);
chatMessages.appendChild(messageDiv);
// Scroll to bottom
chatMessages.scrollTop = chatMessages.scrollHeight;
}
// Event listeners
sendButton.addEventListener('click', sendMessage);
chatInput.addEventListener('keypress', (e) => {
if (e.key === 'Enter') sendMessage();
});
}
// ============= TEXT ANALYSIS FUNCTIONALITY =============
function initTextAnalysis() {
// ... (unchanged)
}
// ============= CONTENT GENERATOR FUNCTIONALITY =============
function initContentGenerator() {
// ... (unchanged)
}
// Add some interactivity - typing effect for initial chat message
window.addEventListener('load', () => {
console.log('AI Assistant Hub loaded successfully!');
console.log('This application is autonomously developed by GitHub Copilot SDK Agent');
});
This change upgrades the chat to use real AI responses from your backend, making the feature truly useful and impressive.