grok Paste

Paste text into Grok textarea from main page

// ==UserScript==
// @name         grok Paste
// @description  Paste text into Grok textarea from main page
// @match        *://grok.com/*
// @version 0.0.1.20250802224421
// @namespace https://greasyfork.org/users/1435046
// ==/UserScript==

(function () {
  'use strict';

  window.addEventListener("message", event => {
    const data = event.data;

    if (event.data && event.data.type === 'reasonButtonClicked') {
      document.querySelector('button[aria-label="Think"]').click();
      return;
    }

    if (event.data?.type === 'newChatButtonClicked') {
      const customNewChatButton = document.querySelector('a[href="/"]');
      if (customNewChatButton) customNewChatButton.click();
    }

    let chatMessageInput = document.querySelector('div:has(> div > form > div > div > div > textarea[aria-label="Ask Grok anything"])');
    let chatMessageInputBackdrop = document.querySelector('.chat-input-backdrop');
                    let header = document.querySelector('div:has(> div > span > a[href="/"] > svg > path[d^="M10 4V4C8.13623 4"])');

    //if event data type is defaultChatMessageInputDisplay
    if (event.data?.type === 'defaultChatMessageInputDisplay') {
      console.log('default');
      if (chatMessageInput) {

        chatMessageInput.style.removeProperty('display');
        chatMessageInputBackdrop.style.removeProperty('display');
                                        header.style.removeProperty('display');


        //return
        return;
      }
    }

    if (event.data?.type === 'customizeChatMessageInputDisplay') {
      console.log('customize');
      if (chatMessageInput) {

        chatMessageInput.style.display = 'none';
        chatMessageInputBackdrop.style.display = 'none';
                                        header.style.display = 'none';


        //return
        return;
      }
    }


    if (event.data.type === "prompt" && event.data.content.trim()) {
      const textarea = document.querySelector('textarea[aria-label="Ask Grok anything"]');
      if (textarea) {
        const nativeInputValueSetter = Object.getOwnPropertyDescriptor(window.HTMLTextAreaElement.prototype, "value").set;
        nativeInputValueSetter.call(textarea, event.data.content); // Set like the browser would

        // Now trigger a React-compatible InputEvent
        const inputEvent = new InputEvent('input', {
          bubbles: true,
          cancelable: true,
          inputType: 'insertText',
          data: event.data.content,
        });

        textarea.dispatchEvent(inputEvent);

        document.querySelector('button[aria-label="Submit"]').click();
      }
    }
  });
})();