Confirm GitLab Merge Request Creator

Confirm GitLab merge request when creator differs from the current user.

// ==UserScript==
// @name         Confirm GitLab Merge Request Creator
// @namespace    http://tampermonkey.net/
// @version      1.0.0
// @description  Confirm GitLab merge request when creator differs from the current user.
// @author       Ben L
// @match        https://gitlab.covergenius.biz/*/merge_requests/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=covergenius.biz
// @grant        none
// @license MIT
// ==/UserScript==

(function () {
  "use strict";

  let hasConfirmed = false;

  const handleMergeButtonClick = (event) => {
    if (hasConfirmed) {
      return;
    }

    const currentUserId = window.gon?.current_user_id;
    const creatorElement = document.querySelector("[data-user-id]");

    if (!creatorElement) {
      return;
    }

    const creatorUserId = parseInt(
      creatorElement.getAttribute("data-user-id"),
      10
    );

    if (currentUserId !== creatorUserId) {
      event.stopImmediatePropagation();
      const confirmed = confirm(
        "The creator of this MR is not you. Do you want to proceed with the merge?"
      );

      if (!confirmed) {
        event.preventDefault();
      } else {
        hasConfirmed = true;
        event.target.click();
      }
    }
  };

  const observer = new MutationObserver(() => {
    const mergeButton = document.querySelector(
      ".accept-merge-request.btn-confirm"
    );

    if (mergeButton) {
      mergeButton.addEventListener("click", handleMergeButtonClick, true);
      observer.disconnect();
    }
  });

  observer.observe(document.body, { childList: true, subtree: true });
})();