GitLab Reviewer Shortcut

Adds keyboard shortcut to quickly assign reviewers in GitLab MRs

  1. // ==UserScript==
  2. // @name GitLab Reviewer Shortcut
  3. // @namespace kayw
  4. // @version 1.1
  5. // @license MIT
  6. // @description Adds keyboard shortcut to quickly assign reviewers in GitLab MRs
  7. // @match https://*.gitlab.com/*
  8. // @match http://*.gitlab.com/*
  9. // @match https://gitlab.*/*
  10. // @grant none
  11. // ==/UserScript==
  12.  
  13. (function() {
  14. 'use strict';
  15.  
  16. // Key for storing reviewer name in localStorage
  17. const REVIEWER_KEY = 'gitlab_default_reviewer';
  18. // Initialize or get saved reviewer - defaults to 'leo' if not set
  19. const defaultReviewer = localStorage.getItem(REVIEWER_KEY); // example @Jack
  20. // Register keyboard shortcut
  21. document.addEventListener('keydown', function(event) {
  22. // Ctrl+R to assign reviewer
  23. if ((event.ctrlKey || event.metaKey) && !event.shiftKey && event.key === 'r') {
  24. // Prevent browser refresh
  25. event.preventDefault();
  26. // Simulate pressing 'r' key to focus GitLab comment input
  27. const rKeyEvent = new KeyboardEvent('keydown', {
  28. key: 'r',
  29. code: 'KeyR',
  30. keyCode: 82,
  31. which: 82,
  32. bubbles: true
  33. });
  34. document.dispatchEvent(rKeyEvent);
  35. // Wait for input to get focus
  36. setTimeout(function() {
  37. // Find comment input field
  38. const commentInput = document.querySelector('.js-comment-input, .note-textarea');
  39. if (commentInput) {
  40. // Focus the input
  41. commentInput.focus();
  42. // Set text to assign reviewer
  43. commentInput.value = `/assign_reviewer ${defaultReviewer}`;
  44. // Trigger input event for GitLab to recognize the change
  45. commentInput.dispatchEvent(new Event('input', { bubbles: true }));
  46. // Simulate Command+Enter to submit
  47. setTimeout(function() {
  48. const cmdEnterEvent = new KeyboardEvent('keydown', {
  49. key: 'Enter',
  50. code: 'Enter',
  51. keyCode: 13,
  52. which: 13,
  53. metaKey: true,
  54. bubbles: true
  55. });
  56. commentInput.dispatchEvent(cmdEnterEvent);
  57. }, 100);
  58. }
  59. }, 200);
  60. }
  61. });
  62. // Add initialization message
  63. console.log(`GitLab reviewer shortcut initialized. Current reviewer: @${defaultReviewer}`);
  64. console.log('Use Ctrl+R (or Cmd+R) to assign reviewer');
  65. console.log('To change the reviewer, set localStorage.setItem("gitlab_default_reviewer", "username")');
  66. })();