124 lines
3.6 KiB
JavaScript
Raw Normal View History

2023-04-27 14:07:46 +08:00
// main.js
(function () {
2023-04-27 14:07:46 +08:00
// Get DOM elements for user interaction and message display
const messagesContainer = document.getElementById('messages-container');
const messageInput = document.getElementById('message-input');
const sendButton = document.getElementById('send-button');
const contextMenu = document.getElementById('context-menu');
const menuItem1 = document.getElementById('menu-item-1');
const menuItem2 = document.getElementById('menu-item-2');
let selectedText = '';
// Initialize input resizing
initInputResizing();
function hideContextMenu() {
contextMenu.style.display = 'none';
}
function getSelectedText() {
const selection = window.getSelection();
return selection.toString();
}
2023-04-27 14:07:46 +08:00
messagesContainer.addEventListener('contextmenu', (event) => {
event.preventDefault();
selectedText = getSelectedText();
contextMenu.style.display = 'block';
contextMenu.style.left = event.pageX + 'px';
contextMenu.style.top = event.pageY + 'px';
});
2023-04-27 14:07:46 +08:00
document.addEventListener('click', hideContextMenu);
2023-04-27 14:07:46 +08:00
menuItem1.addEventListener('click', () => {
postVSCodeMessage({
command: 'code_apply',
content: selectedText,
});
2023-04-27 14:07:46 +08:00
hideContextMenu();
});
2023-04-27 14:07:46 +08:00
menuItem2.addEventListener('click', () => {
navigator.clipboard.writeText(selectedText);
hideContextMenu();
});
// Event listener for receiving messages from the extension
window.addEventListener('message', (event) => {
const message = event.data;
switch (message.command) {
case 'receiveMessage':
// Add the received message to the chat UI as a bot message
addMessageToUI('bot', message.text);
break;
case 'receiveMessagePartial':
// Add the received message to the chat UI as a bot message
addMessageToUI('bot', message.text, true);
break;
case 'loadHistoryMessages':
loadHistoryMessages(message.entries);
break;
case 'file_select':
addFileToMessageInput(message.filePath);
break;
case 'code_select':
addCodeToMessageInput(message.codeBlock);
break
case 'ask_ai':
message_text = message.codeBlock + "\n" + message.question;
processMessageUI(message_text)
break;
}
});
// Event listener for the send button
sendButton.addEventListener('click', () => {
const message = messageInput.value;
if (message) {
// Add the user's message to the chat UI
addMessageToUI('user', message);
// Clear the input field
messageInput.value = '';
// Process and send the message to the extension
processMessage(message);
}
});
// Event listener for the Enter key in the message input field
messageInput.addEventListener('keypress', function (e) {
if (e.key === 'Enter' && !e.shiftKey) {
e.preventDefault();
const message = messageInput.value.trim();
if (message !== '') {
sendButton.click();
}
2023-04-27 14:07:46 +08:00
}
});
function addFileToMessageInput(filePath) {
const formattedPath = `[context|${filePath}] `;
messageInput.value = formattedPath + messageInput.value;
messageInput.focus();
}
function addCodeToMessageInput(codeBlock) {
messageInput.value += "\n" + codeBlock + "\n";
messageInput.focus();
}
// Request history messages when the web view is created and shown
requestHistoryMessages();
})();
// Function to load history messages from the extension
function loadHistoryMessages(entries) {
entries.forEach((entry) => {
addMessageToUI('user', entry.message);
addMessageToUI('bot', entry.response);
});
}