// ==UserScript== // @name GitHub Diff File Toggle // @version 0.1.3 // @description A userscript that adds global diff file toggles // @license MIT // @author Rob Garrison // @namespace https://github.com/Mottie // @match https://github.com/* // @run-at document-idle // @grant none // @require https://greasyfork.org/scripts/28721-mutations/code/mutations.js?version=1108163 // @require https://greasyfork.org/scripts/398877-utils-js/code/utilsjs.js?version=1079637 // @icon https://github.githubassets.com/pinned-octocat.svg // @updateURL https://raw.githubusercontent.com/Mottie/Github-userscripts/master/github-diff-file-toggle.user.js // @downloadURL https://raw.githubusercontent.com/Mottie/Github-userscripts/master/github-diff-file-toggle.user.js // @supportURL https://github.com/Mottie/GitHub-userscripts/issues // ==/UserScript== /* global $ $$ on debounce make */ (() => { "use strict"; let timer; let busy = false; const setToggleStyle = state => { const mainToggle = $(".ghdt-toggle"); mainToggle.classList.toggle("ghdt-selected", state); mainToggle.style = state ? "background-color: var(--color-btn-selected-bg);" : ""; }; const buildButton = () => { if (!$(".ghdt-toggle")) { const button = make({ el: "button", className: "btn btn-sm ghdt-toggle tooltipped tooltipped-s float-right", text: "Toggle viewed", attrs: { "aria-label": "Toggle all viewed files" } }); on(button, "click", event => { toggle(document, !event.target.classList.contains("ghdt-selected")); }); $("#files.diff-view")?.prepend(button); } // Update toggle button state after initialized; timer for progressive // loading clearTimeout(timer); timer = setTimeout(() => { if ($$(".js-reviewed-checkbox").every(el => el.checked)) { setToggleStyle(true); } }, 1000); }; const toggle = (target, state) => { $$(".js-reviewed-checkbox").forEach(checkbox => { if (target !== checkbox && checkbox.checked !== state) { checkbox.click(); } }); setToggleStyle(state); }; const handleChange = event => { const { target, altKey, shiftKey } = event; const anyModifier = altKey || shiftKey; if (!busy && anyModifier && target.matches(".js-reviewed-checkbox")) { busy = true; toggle(target, target.checked); setTimeout(() => { busy = false; }); } }; const init = () => { if ($("#files.diff-view") || $(".pr-toolbar")) { buildButton(); } }; on(document, "ghmo:container ghmo:diff", init); on(document, "click", debounce(handleChange)); on(document, "keydown", debounce(handleChange)); init(); })(); pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy