abc
abc
Ctrl Enter submits comment & reply forms uwu
js
/// ==UserScript== // @name Lemmy Form Submit with Ctrl+Enter // @version 1.0 // @description Submit forms with Ctrl+Enter in Lemmy instances so you don't have to click the button every time you want to post something. // @author God (https://sh.itjust.works/u/god) // @match https://*/post/* // @match https://*/comment/* // @icon https://join-lemmy.org/static/assets/icons/favicon.svg // ==/UserScript== var isLemmy = document.head.querySelector("[name~=Description][content]").content === "Lemmy"; if (isLemmy) { // Define a global variable to keep track of the currently focused textarea. var currentFocusedTextarea = null; // Function to attach focus and blur event handlers to all textareas. function attachEventHandlers() { document.querySelectorAll("textarea").forEach((textarea) => { if (!textarea.dataset.ctrlEnterHandled) { textarea.dataset.ctrlEnterHandled = true; // Check if this textarea is currently focused const wasFocused = document.activeElement === textarea; textarea.addEventListener("focus", function () { currentFocusedTextarea = this; }); textarea.addEventListener("blur", function () { currentFocusedTextarea = null; }); // If this textarea was focused, blur and re-focus it to ensure event handlers get triggered if (wasFocused) { textarea.blur(); textarea.focus(); } } }); } // Attach a keydown event handler to the entire document. document.addEventListener("keydown", function (event) { // If Ctrl + Enter is pressed if (event.ctrlKey && event.key === "Enter") { // If a textarea is focused and contains text if ( currentFocusedTextarea && currentFocusedTextarea.value.trim() !== "" ) { // Your submit logic here handleSubmit(currentFocusedTextarea); } } }); function handleSubmit(textarea) { // find the closest type="submit" button and press it. textarea.closest("form").querySelector('[type="submit"]').click(); } // Call the function initially to cover textareas that exist when the page is first loaded. attachEventHandlers(); // Observe the document for changes and reattach event handlers when new textareas are added. const observer = new MutationObserver(function (mutations) { mutations.forEach((mutation) => { if (mutation.type === "childList") { attachEventHandlers(); } }); }); observer.observe(document.body, { childList: true, subtree: true }); }