Spaces:
Running
Running
Update js/app.js
Browse files
js/app.js
CHANGED
@@ -128,16 +128,32 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
128 |
const messageElement = document.createElement('div');
|
129 |
messageElement.classList.add('message', `${sender}-message`);
|
130 |
messageElement.textContent = content;
|
131 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
132 |
// Add for screen readers
|
133 |
messageElement.setAttribute('role', 'log');
|
134 |
messageElement.setAttribute('aria-label', `${sender} message: ${content}`);
|
135 |
-
|
136 |
chatMessages.appendChild(messageElement);
|
137 |
messageElement.scrollIntoView({ behavior: 'smooth' });
|
138 |
saveChat();
|
139 |
}
|
140 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
141 |
function showTypingIndicator() {
|
142 |
typingIndicator.classList.remove('hidden');
|
143 |
typingIndicator.scrollIntoView({ behavior: 'smooth' });
|
@@ -201,4 +217,4 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
201 |
function updateThemeButton() {
|
202 |
themeToggle.innerHTML = `<i class="fas fa-${darkMode ? 'sun' : 'moon'}"></i>`;
|
203 |
}
|
204 |
-
});
|
|
|
128 |
const messageElement = document.createElement('div');
|
129 |
messageElement.classList.add('message', `${sender}-message`);
|
130 |
messageElement.textContent = content;
|
131 |
+
|
132 |
+
// Add copy button
|
133 |
+
const copyButton = document.createElement('button');
|
134 |
+
copyButton.classList.add('copy-button');
|
135 |
+
copyButton.innerHTML = '<i class="fas fa-copy"></i>';
|
136 |
+
copyButton.addEventListener('click', () => copyToClipboard(content));
|
137 |
+
messageElement.appendChild(copyButton);
|
138 |
+
|
139 |
// Add for screen readers
|
140 |
messageElement.setAttribute('role', 'log');
|
141 |
messageElement.setAttribute('aria-label', `${sender} message: ${content}`);
|
142 |
+
|
143 |
chatMessages.appendChild(messageElement);
|
144 |
messageElement.scrollIntoView({ behavior: 'smooth' });
|
145 |
saveChat();
|
146 |
}
|
147 |
|
148 |
+
function copyToClipboard(text) {
|
149 |
+
navigator.clipboard.writeText(text).then(() => {
|
150 |
+
showToast('Copied to clipboard!', 'success');
|
151 |
+
}).catch(err => {
|
152 |
+
console.error('Failed to copy: ', err);
|
153 |
+
showToast('Failed to copy. Please try again.', 'error');
|
154 |
+
});
|
155 |
+
}
|
156 |
+
|
157 |
function showTypingIndicator() {
|
158 |
typingIndicator.classList.remove('hidden');
|
159 |
typingIndicator.scrollIntoView({ behavior: 'smooth' });
|
|
|
217 |
function updateThemeButton() {
|
218 |
themeToggle.innerHTML = `<i class="fas fa-${darkMode ? 'sun' : 'moon'}"></i>`;
|
219 |
}
|
220 |
+
});
|