// ==UserScript== // @name ChatGPT Custom Button // @namespace http://tampermonkey.net/ // @version 0.1 // @description Add a custom button to the ChatGPT site // @author Stucci // @license MIT // @match https://chat.openai.com/* // @grant none // @downloadURL none // ==/UserScript== (function() { 'use strict'; function autoResize(textArea) { textArea.style.height = 'auto'; textArea.style.height = textArea.scrollHeight + 'px'; } function createButton(text, handler) { const button = document.createElement('button'); button.className = 'custombtn btn relative btn-neutral border-0 md:border'; button.innerHTML = text; button.onclick = handler; return button; } function addButtonIfNotExists() { if (document.querySelector('.custombtn')) { return; } const textBox = document.querySelector('form'); if (!textBox) { return; } const buttonContainer = document.createElement('div'); buttonContainer.style.display = 'flex'; buttonContainer.style.justifyContent = 'center'; buttonContainer.style.marginBottom = '10px'; buttonContainer.append( createButton('Continue⏎', function() { const textArea = document.querySelector('textarea'); textArea.value = 'Continue'; textArea.focus(); const keyDownEvent = new KeyboardEvent('keydown', { key: 'Enter', keyCode: 13, which: 13 }); textArea.dispatchEvent(keyDownEvent); const keyUpEvent = new KeyboardEvent('keyup', { key: 'Enter', keyCode: 13, which: 13 }); textArea.dispatchEvent(keyUpEvent); }) ); textBox.parentNode.insertBefore(buttonContainer, textBox); } const targetNode = document.body; const config = { childList: true, subtree: true }; const observer = new MutationObserver(addButtonIfNotExists); observer.observe(targetNode, config); })();