Skip to content

Instantly share code, notes, and snippets.

@tstirrat
Last active November 26, 2023 21:51
Show Gist options
  • Save tstirrat/6969101156020d62207221cd47e2e5b5 to your computer and use it in GitHub Desktop.
Save tstirrat/6969101156020d62207221cd47e2e5b5 to your computer and use it in GitHub Desktop.
Tampermonkey Github Review shortcuts
// ==UserScript==
// @name GitHub code review shortcuts
// @namespace http://tampermonkey.net/
// @version 0.3
// @description Code review shortcuts for the PR files page: e = mark/unmark as reviewed, h/l = open/collapse the active file
// @source https://gist.github.com/tstirrat/6969101156020d62207221cd47e2e5b5
// @author tstirrat
// @homepage https://github.com/tstirrat
// @match https://github.com/*
// ==/UserScript==
(function() {
'use strict';
if (window.disposeMarkAsViewedByEscape) {
window.disposeMarkAsViewedByEscape()
}
window.disposeMarkAsViewedByEscape = start();
function start() {
window.addEventListener('keydown', handleKeyDown);
return ()=>{
window.removeEventListener('keydown', handleKeyDown);
}
function toggleFileViewed(file) {
const fileViewedCheckbox = file.querySelector(`.js-reviewed-checkbox`);
fileViewedCheckbox?.click();
}
function markFileViewed(file) {
const fileViewedCheckbox = file.querySelector(`.js-reviewed-checkbox`);
if (fileViewedCheckbox && !fileViewedCheckbox.matches(':checked')) {
fileViewedCheckbox?.click();
}
}
function collapseFile(file) {
if (file.matches('.open')) {
file.querySelector('.file-header')?.click();
}
}
function expandFile(file) {
if (!file.matches('.open')) {
file.querySelector('.file-header')?.click();
}
}
function handleKeyDown(event) {
// if keypress is in a form field don't process these shortcuts
if (event.target.name) return;
const fileElement = document.querySelector('[data-details-container-group="file"]:target')
if (!fileElement) return;
switch (event.key) {
case 'e':
toggleFileViewed(fileElement);
break;
case 'm':
markFileViewed(fileElement);
break;
case 'h':
collapseFile(fileElement);
break;
case 'l':
expandFile(fileElement);
break;
}
}
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment