// Create button
const button = document.createElement('button');
button.textContent = 'Submit File';
button.style.backgroundColor = 'green';
button.style.color = 'white';
button.style.padding = '5px';
button.style.border = 'none';
button.style.borderRadius = '5px';
button.style.margin = '5px';
// Create progress element
const progress = document.createElement('progress');
progress.style.width = '99%';
progress.style.height = '5px';
progress.style.backgroundColor = 'grey';
// Create progress bar inside progress element
const progressBar = document.createElement('div');
progressBar.style.width = '0%';
progressBar.style.height = '100%';
progressBar.style.backgroundColor = 'blue';
// Append progress bar to progress element
progress.appendChild(progressBar);
// Find the target element to insert before
const targetElement = document.querySelector('.flex.flex-col.w-full.py-2.flex-grow.md\\:py-3.md\\:pl-4');
// Insert button and progress element before the target element
targetElement.parentNode.insertBefore(progress, targetElement);
targetElement.parentNode.insertBefore(button, targetElement);
// Button click event handler
button.addEventListener('click', async () => {
const fileInput = document.createElement('input');
fileInput.type = 'file';
fileInput.accept = '.txt, .js, .py, .html, .css, .json, .csv';
// File selected event handler
fileInput.addEventListener('change', async (event) => {
const file = event.target.files[0];
const filename = file.name;
const reader = new FileReader();
reader.onload = async (event) => {
const text = event.target.result;
const chunkSize = 15000;
const numChunks = Math.ceil(text.length / chunkSize);
for (let i = 0; i < numChunks; i++) {
const start = i * chunkSize;
const end = start + chunkSize;
const chunk = text.substring(start, end);
await submitConversation(chunk, i + 1, filename);
// Update progress bar
progressBar.style.width = `${((i + 1) / numChunks) * 100}%`;
}
// Check if chatgpt is ready
let chatgptReady = false;
while (!chatgptReady) {
await new Promise((resolve) => setTimeout(resolve, 1000));
chatgptReady = !document.querySelector('.text-2xl > span:not(.invisible)');
}
// All chunks submitted, turn progress bar blue
progressBar.style.backgroundColor = 'blue';
};
reader.readAsText(file);
});
fileInput.click();
});
// Function to submit conversation
async function submitConversation(text, part, filename) {
const textarea = document.querySelector("textarea[tabindex='0']");
const enterKeyEvent = new KeyboardEvent('keydown', {
bubbles: true,
cancelable: true,
keyCode: 13,
});
textarea.value = `Part ${part} of ${filename}:\n\n${text}`;
textarea.dispatchEvent(enterKeyEvent);
}