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 |
+
});
|