Skip to content

Instantly share code, notes, and snippets.

@DelphicOkami
Last active August 10, 2017 10:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save DelphicOkami/64521e9ad97bf1399c9349e4080106d8 to your computer and use it in GitHub Desktop.
Save DelphicOkami/64521e9ad97bf1399c9349e4080106d8 to your computer and use it in GitHub Desktop.
Adds controls for expanding and collapsing all files in github pull requests. Add this to greasemonkey / tampermonkey
// ==UserScript==
// @name Github File collapser
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author Micheal Wilkinson
// @match https://github.com/*/*/pull/*/files*
// @grant none
// ==/UserScript==
(function () {
var classes = 'open Details--on';
var file_count = parseInt(document.getElementById('files_tab_counter').innerHTML.trim());
var collapse_all = function() {
for(int_diff = 0; int_diff < file_count; int_diff++) {
var element = document.getElementById("diff-" + int_diff);
if (null !== element) {
var elementClasses = element.className;
elementClasses = elementClasses.replace(new RegExp('(?:^|\\s)' + classes + '(?:\\s|$)'), ' ');
elementClasses += ' ' + classes;
document.getElementById("diff-" + int_diff).className = elementClasses;
} else {
break;
}
}
};
var expand_all = function() {
for(int_diff = 0; int_diff < file_count; int_diff++) {
var element = document.getElementById("diff-" + int_diff);
if (null !== element) {
var elementClasses = element.className;
elementClasses = elementClasses.replace(new RegExp('(?:^|\\s)' + classes + '(?:\\s|$)'), ' ');
document.getElementById("diff-" + int_diff).className = elementClasses;
} else {
break;
}
}
expanded = true;
};
var outer_div = document.createElement('div');
var inner_div = document.createElement('div');
var expand_link = document.createElement('a');
var collapse_link = document.createElement('a');
var tool_div = document.getElementsByClassName('float-right pr-review-tools')[0];
outer_div.className = 'diffbar-item';
inner_div.className = 'BtnGroup';
expand_link.className = 'btn btn-sm btn-outline BtnGroup-item tooltipped tooltipped-s';
collapse_link.className = 'btn btn-sm btn-outline BtnGroup-item tooltipped tooltipped-s';
expand_link.setAttribute('id', 'expand_all_link');
collapse_link.setAttribute('id', 'collapse_all_link');
expand_link.setAttribute('aria-label', 'Expand all files');
collapse_link.setAttribute('aria-label', 'Collapse all files');
expand_link.appendChild(document.createTextNode('Expand all'));
collapse_link.appendChild(document.createTextNode('Collapse all'));
inner_div.appendChild(expand_link);
inner_div.appendChild(collapse_link);
outer_div.appendChild(inner_div);
tool_div.insertBefore(outer_div, tool_div.firstChild);
document.getElementById("expand_all_link").addEventListener("click", expand_all);
document.getElementById("collapse_all_link").addEventListener("click", collapse_all);
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment