Makes "Add comment now" the default action in GitLab and remove the Start a Review
// ==UserScript==
// @name GitLab - Default Add Comment
// @namespace https://github.com/yourname
// @version 1.0
// @description Makes "Add comment now" the default action in GitLab and remove the Start a Review
// @author Squiter
// @match https://gitlab.com/*
// @icon https://gitlab.com/favicon.ico
// @license MIT
// @grant none
// ==/UserScript==
(function () {
'use strict';
// ---------- CONFIG ----------
const START_REVIEW_SELECTOR = '[data-testid="start-review-button"]';
const COMMENT_NOW_SELECTOR = '[data-testid="comment-now-button"]';
const TEXTAREA_SELECTOR = 'textarea[data-testid="reply-field"]';
// ---------- HELPERS ----------
function hideStartReview() {
document.querySelectorAll(START_REVIEW_SELECTOR).forEach(btn => {
btn.style.display = 'none';
});
}
function getCommentButton() {
return document.querySelector(COMMENT_NOW_SELECTOR);
}
function shouldSubmit(e) {
// Enter = submit
// Shift+Enter = newline (keep normal behavior)
return e.key === "Enter" && !e.shiftKey;
}
function attachEnterHandler(textarea) {
if (textarea.dataset.enterHandlerAttached) return;
textarea.dataset.enterHandlerAttached = "true";
textarea.addEventListener("keydown", (e) => {
if (!shouldSubmit(e)) return;
const btn = getCommentButton();
if (!btn || btn.disabled) return;
e.preventDefault();
e.stopPropagation();
btn.click();
});
}
function init() {
hideStartReview();
document.querySelectorAll(TEXTAREA_SELECTOR)
.forEach(attachEnterHandler);
}
// ---------- OBSERVER ----------
// GitLab rerenders often (Vue), so we watch DOM changes
const observer = new MutationObserver(() => {
init();
});
observer.observe(document.body, {
childList: true,
subtree: true
});
// initial run
init();
})();