Skip to content

Instantly share code, notes, and snippets.

@BriceShatzer
Last active November 7, 2017 18:23
Show Gist options
  • Save BriceShatzer/56c6526962ca716df424423093582150 to your computer and use it in GitHub Desktop.
Save BriceShatzer/56c6526962ca716df424423093582150 to your computer and use it in GitHub Desktop.
// ==UserScript==
// @name Universal GitHub Tasks
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author https://github.com/BriceShatzer
// @match https://github.com/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
let state_commitTimesConverted = false;
let state_diffCollapserCreated = false;
updateState();
window.onpopstate = function(event) {
console.log('popstate fired');
updateState();
};
function updateState() {
state_commitTimesConverted = document.querySelectorAll('relative-time').length > 0 ? true : false;
state_diffCollapserCreated = document.querySelectorAll('button[aria-label="Toggle diff text"]').length > 0 ? true : false;
console.log('states updated:');
console.log('commitTimesConverted-'+state_commitTimesConverted);
console.log('diffCollapserCreated-'+state_diffCollapserCreated);
createDiffCollapser();
convertCommitTimes();
}
/* Create Tampermonkey Re-run Button */
let reRunButton = document.createElement('img');
reRunButton.setAttribute('src','https://camo.githubusercontent.com/9919bc7e220f6919cdac2d9ec00b99caa9791c3b/687474703a2f2f692e696d6775722e636f6d2f3539566766457a2e706e67');
reRunButton.setAttribute('style','position:fixed;top:16px;left:16px;z-index:50;cursor:pointer;max-width:16px');
reRunButton.addEventListener('click',()=>{
updateState();
});
document.body.append(reRunButton);
/* Convert Commit Times To Non-realtive */
function convertCommitTimes() {
if(state_commitTimesConverted === false) {
window.setTimeout(convertCommitTimes, 750);
} else {
state_commitTimesConverted = true;
let commitTimes = document.querySelectorAll('relative-time');
commitTimes.forEach((el)=>{
let fullTime = el.title;
el.innerHTML = '<strong>'+fullTime+'</strong>';
});
}
}
/* Create Diff Collapser */
function createDiffCollapser() {
if(state_diffCollapserCreated === false) {
window.setTimeout(createDiffCollapser, 750);
} else {
state_diffCollapserCreated = true;
let el = document.createElement('button');
el.setAttribute('style','position:fixed;left:2rem;bottom:50vh;z-index:50;');
el.setAttribute('class', 'btn');
el.innerHTML = 'Collapse Diffs';
el.addEventListener('click',()=>{
if(el.innerHTML === 'Collapse Diffs'){
collapseDiffs();
el.innerHTML = 'Expand Diffs';
} else {
expandDiffs();
el.innerHTML = 'Collapse Diffs';
}
});
document.body.append(el);
}
function expandDiffs() {
let collapsedElements = Object.values(getElements()).filter(el=> el.getAttribute('aria-expanded')==='false');
clickElements(collapsedElements);
}
function collapseDiffs() {
let expandedElements = Object.values(getElements()).filter(el=> el.getAttribute('aria-expanded')==='true');
clickElements(expandedElements);
}
function getElements() {
let allElements = document.querySelectorAll('button[aria-label="Toggle diff text"]');
return allElements;
}
function clickElements(elementsArr) {
elementsArr.forEach((el)=>{
el.click();
});
}
}
// -- adventures in mutationObserving
/*
let target = document.querySelector('div[role="main"]');
let config = { attributes: true, childList: true, characterData: true };
let observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
console.log(mutation.type);
});
});
observer.observe(target, config);
*/
// -- setting state at an interval
/* window.setInterval(function(){
console.log('state_commitTimesConverted: ' + state_commitTimesConverted);
console.log('state_diffCollapserCreated: ' + state_diffCollapserCreated);
}, 3000);
*/
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment