Last active
November 7, 2017 18:23
-
-
Save BriceShatzer/56c6526962ca716df424423093582150 to your computer and use it in GitHub Desktop.
This file contains hidden or 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 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