2023-04-27 14:07:46 +08:00
|
|
|
// main.js
|
|
|
|
|
2023-04-25 08:08:40 +08:00
|
|
|
(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-25 08:08:40 +08:00
|
|
|
|
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-25 08:08:40 +08:00
|
|
|
|
2023-04-27 14:07:46 +08:00
|
|
|
document.addEventListener('click', hideContextMenu);
|
2023-04-25 08:08:40 +08:00
|
|
|
|
2023-04-27 14:07:46 +08:00
|
|
|
menuItem1.addEventListener('click', () => {
|
|
|
|
postVSCodeMessage({
|
|
|
|
command: 'code_apply',
|
|
|
|
content: selectedText,
|
2023-04-25 08:08:40 +08:00
|
|
|
});
|
2023-04-27 14:07:46 +08:00
|
|
|
hideContextMenu();
|
|
|
|
});
|
2023-04-25 08:08:40 +08:00
|
|
|
|
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-25 08:08:40 +08:00
|
|
|
}
|
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);
|
|
|
|
});
|
|
|
|
}
|