AllenAI Playground Auto-Focus

Automatically focuses the input on AllenAI Playground when typing

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey, Greasemonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да инсталирате разширение, като например Tampermonkey .

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Userscripts.

За да инсталирате скрипта, трябва да инсталирате разширение като Tampermonkey.

За да инсталирате този скрипт, трябва да имате инсталиран скриптов мениджър.

(Вече имам скриптов мениджър, искам да го инсталирам!)

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

(Вече имам инсталиран мениджър на стиловете, искам да го инсталирам!)

// ==UserScript==
// @name         AllenAI Playground Auto-Focus
// @description  Automatically focuses the input on AllenAI Playground when typing
// @match        https://playground.allenai.org/*
// @version 0.0.1.20250501101156
// @namespace https://greasyfork.org/users/1435046
// ==/UserScript==

document.addEventListener('keydown', e => {
    const textarea = document.querySelector('textarea.auto-sized-input');
    const active = document.activeElement;
    
    if (textarea && !/^textarea|input$/i.test(active.tagName) && 
        e.key.length === 1 && /^[\w\s\W]$/.test(e.key) && !e.ctrlKey && !e.metaKey) {
        
        e.preventDefault();
        textarea.focus();
        
        // Insert text at cursor position
        const start = textarea.selectionStart;
        const end = textarea.selectionEnd;
        textarea.setRangeText(e.key, start, end, "end");
        
        // Trigger input events for React state updates
        textarea.dispatchEvent(new Event('input', { bubbles: true }));
        textarea.dispatchEvent(new Event('change', { bubbles: true }));
    }
});