Last active
November 26, 2023 21:51
-
-
Save tstirrat/6969101156020d62207221cd47e2e5b5 to your computer and use it in GitHub Desktop.
Tampermonkey Github Review shortcuts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==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