Skip to content

Instantly share code, notes, and snippets.

@liggitt
Last active March 29, 2021 13:48
Show Gist options
  • Save liggitt/8f0e3e10e42bea8f5d56658f5b80da45 to your computer and use it in GitHub Desktop.
Save liggitt/8f0e3e10e42bea8f5d56658f5b80da45 to your computer and use it in GitHub Desktop.
{
"manifest_version": 2,
"content_scripts": [ {
"exclude_globs": [ ],
"include_globs": [ ],
"js": [ "github-review.user.js" ],
"matches": [ "https://*.github.com/*",
"https://github.com/*"
],
"run_at": "document_end"
} ],
"description": "",
"name": "Github Review",
"version": "1"
}
// ==UserScript==
// @match https://*.github.com/*
// @match https://github.com/*
// ==/UserScript==
//
// Drag/drop into Chrome chrome://extensions/ tab to install.
// Buttons appear in the code review gear popup dialog.
(function(){
var register = function() {
// console.log("register");
var helpers = document.querySelector('p#github-review-helpers');
if (helpers) {
// don't double register
return true;
}
var whitespaceCheckbox = document.querySelector('input[name=w]');
if (!whitespaceCheckbox) {
// don't register if we can't find our checkbox
return false;
}
var markViewed = function(path, viewed) {
if (!path) { return; }
var checkboxes = document.querySelectorAll(
'.file-header[data-path*="' + path + '"] ' +
'input.js-reviewed-checkbox[type="checkbox"]' + (viewed ? ":not(:checked)" : ":checked")
);
checkboxes.forEach(function(i){i.click();});
};
var markExpanded = function(path, expanded) {
if (!path) { return; }
var toggles = document.querySelectorAll(
' .file' + (expanded ? ':not(.open)':'.open') +
' .file-header[data-path*="' + path + '"]' +
' button.js-details-target[aria-expanded]'
);
toggles.forEach(function(i){i.click();});
};
var p = document.createElement("p");
p.id = "github-review-helpers";
p.style.display = "block";
p.style.textAlign = "center";
var appendButton = function(label, f) {
var b = document.createElement("button");
b.style.padding="0px 2px";
b.innerText=label;
b.className="btn btn-sm";
p.appendChild(b);
b.onclick = function(event) {
event.preventDefault();
var path = prompt("Path","");
if (path) { f(path); }
};
};
appendButton("View", function(path) { markViewed(path,true); });
appendButton("Unview", function(path) { markViewed(path,false); });
appendButton("Expand", function(path) { markExpanded(path,true); });
appendButton("Collapse",function(path) { markExpanded(path,false); });
whitespaceCheckbox.insertAdjacentElement("beforebegin", p);
return true;
};
// register at start, or keep attempting until we succeed
if (register()) {
// console.log("success");
} else {
var interval;
interval = window.setInterval(function(){
if (register()) {
window.clearInterval(interval);
// console.log("success");
}
}, 1000);
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment