// ==UserScript== // @name grok Paste // @description Paste text into Grok textarea from main page // @match *://grok.com/* // @version 0.0.1.20251215185344 // @namespace https://greasyfork.org/users/1435046 // @downloadURL none // ==/UserScript== (function () { 'use strict'; let queueArray = []; let cycleInProgress = false; window.addEventListener("message", event => { const data = event.data; if (event.data === 'reload') { window.location.reload(); } if (event.data && event.data.type === 'reasonButtonClicked') { document.querySelector('button[aria-label="Think"]').click(); return; } if (event.data && event.data.type === 'newChatButtonClicked') { const customNewChatButton = document.querySelector('a[href="/"]'); if (customNewChatButton) customNewChatButton.click(); queueArray = []; cycleInProgress = false; } //grab style element let grokCssStyleId = document.getElementById('grokCssStyleId'); let chatMessageInput = document.querySelector('div:has(> div > div > div > form > div > div > div > div > div > div[contenteditable].tiptap.ProseMirror)'); let chatMessageInputRule = 'div:has(> div > div > div > form > div > div > div > div > div > div[contenteditable].tiptap.ProseMirror) {display: none !important;}'; let chatMessageInputBackdrop = document.querySelector('.chat-input-backdrop'); let chatMessageInputBackdropRule = '.chat-input-backdrop {display: none !important;}'; let header = document.querySelector('div:has(> div > div > button[aria-label="Toggle sidebar"] > svg > path[d="M3 12h18"])'); let headerCssRule = 'div:has(> div > div > button[aria-label="Toggle sidebar"] > svg > path[d="M3 12h18"]) {display: none !important;}' //if event data type is defaultChatMessageInputDisplay if (event.data?.type === 'defaultChatMessageInputDisplay') { console.log('default'); if (chatMessageInput) { //delete the rule here grokCssStyleId.innerHTML = grokCssStyleId.innerHTML.replace(`${chatMessageInputRule}`, '') grokCssStyleId.innerHTML = grokCssStyleId.innerHTML.replace(`${chatMessageInputBackdropRule}`, '') grokCssStyleId.innerHTML = grokCssStyleId.innerHTML.replace(`${headerCssRule}`, ''); //header.style.removeProperty('display'); //return return; } } //if the event data type is customize chat message input display if (event.data?.type === 'customizeChatMessageInputDisplay') { console.log('customize'); if (chatMessageInput) { console.log('chatMessageInput found') grokCssStyleId.innerHTML += `${chatMessageInputRule}` grokCssStyleId.innerHTML += `${chatMessageInputBackdropRule}` grokCssStyleId.innerHTML += `${headerCssRule}` //header.style.display = 'none'; //return return; } } if (event.data.type === "prompt" && event.data.content.trim()) { queueArray.push(event.data.content); console.log(cycleInProgress) function queue() { if (cycleInProgress || queueArray.length === 0) { return }; cycleInProgress = true; const contentEditableDiv = document.querySelector('div[contenteditable="true"].tiptap.ProseMirror:has(> p)'); if (!contentEditableDiv) return; /*const nativeInputValueSetter = Object.getOwnPropertyDescriptor(window.HTMLTextAreaElement.prototype, "value").set; nativeInputValueSetter.call(textarea, queueArray[0]); // Set like the browser would*/ contentEditableDiv.focus(); //change the inner HTML contentEditableDiv.innerHTML = '
' + queueArray[0].replace(/\n/g, '
') + '