NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name GitHub: Black favicon
// @description Change GitHub's White favicon to black. Forked from the opposite version of this: https://gist.github.com/tobbez/017bc8b455095f8e4b4f973b09d33ce2
// @version 1.3
// @author tobbez
// @collaborator jtagcat
// @icon https://github.githubassets.com/favicons/favicon.svg
// @match https://github.community/*
// @match https://*.github.com/*
// @match https://github.com/*
// @grant none
// @downloadURL https://openuserjs.org/install/jtagcat/GitHub_Black_favicon.user.js
// @updateURL https://openuserjs.org/meta/jtagcat/GitHub_Black_favicon.meta.js
// @licence MIT
// ==/UserScript==
/*
* Replaces the icon for github sites with a white one.
*
* This is for browsers with the dark theme enabled.
*
* To install this script, first get the Violentmonkey or
* Tampermonkey addon, then click the 'Raw' link.
*/
function get_url_filename(url) {
let u = new URL(url);
let p = u.pathname.split('/');
return p[p.length - 1];
}
(function() {
'use strict';
let icon_data = "PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9u" +
"ZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJl" +
"dmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNiAwQzcuMTYgMCAwIDcuMTYgMCAxNkMw" +
"IDIzLjA4IDQuNTggMjkuMDYgMTAuOTQgMzEuMThDMTEuNzQgMzEuMzIgMTIuMDQgMzAuODQgMTIu" +
"MDQgMzAuNDJDMTIuMDQgMzAuMDQgMTIuMDIgMjguNzggMTIuMDIgMjcuNDRDOCAyOC4xOCA2Ljk2" +
"IDI2LjQ2IDYuNjQgMjUuNTZDNi40NiAyNS4xIDUuNjggMjMuNjggNSAyMy4zQzQuNDQgMjMgMy42" +
"NCAyMi4yNiA0Ljk4IDIyLjI0QzYuMjQgMjIuMjIgNy4xNCAyMy40IDcuNDQgMjMuODhDOC44OCAy" +
"Ni4zIDExLjE4IDI1LjYyIDEyLjEgMjUuMkMxMi4yNCAyNC4xNiAxMi42NiAyMy40NiAxMy4xMiAy" +
"My4wNkM5LjU2IDIyLjY2IDUuODQgMjEuMjggNS44NCAxNS4xNkM1Ljg0IDEzLjQyIDYuNDYgMTEu" +
"OTggNy40OCAxMC44NkM3LjMyIDEwLjQ2IDYuNzYgOC44MiA3LjY0IDYuNjJDNy42NCA2LjYyIDgu" +
"OTggNi4yIDEyLjA0IDguMjZDMTMuMzIgNy45IDE0LjY4IDcuNzIgMTYuMDQgNy43MkMxNy40IDcu" +
"NzIgMTguNzYgNy45IDIwLjA0IDguMjZDMjMuMSA2LjE4IDI0LjQ0IDYuNjIgMjQuNDQgNi42MkMy" +
"NS4zMiA4LjgyIDI0Ljc2IDEwLjQ2IDI0LjYgMTAuODZDMjUuNjIgMTEuOTggMjYuMjQgMTMuNCAy" +
"Ni4yNCAxNS4xNkMyNi4yNCAyMS4zIDIyLjUgMjIuNjYgMTguOTQgMjMuMDZDMTkuNTIgMjMuNTYg" +
"MjAuMDIgMjQuNTIgMjAuMDIgMjYuMDJDMjAuMDIgMjguMTYgMjAgMjkuODggMjAgMzAuNDJDMjAg" +
"MzAuODQgMjAuMyAzMS4zNCAyMS4xIDMxLjE4QzI3LjQyIDI5LjA2IDMyIDIzLjA2IDMyIDE2QzMy" +
"IDcuMTYgMjQuODQgMCAxNiAwVjBaIiBmaWxsPSIjMDAwMDAwIi8+Cjwvc3ZnPgo=";
let icon_data_success = "PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9u" +
"ZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTAgMTZDMCA3" +
"LjE2IDcuMTYgMCAxNiAwQzIzLjAzNyAwIDI5LjAwOTQgNC41MzcxMiAzMS4xNTI5IDEwLjg0NzFM" +
"MjYuMjI3MSAxNS43NzNDMjYuMjM1NiAxNS41NzQxIDI2LjI0IDE1LjM2OTggMjYuMjQgMTUuMTZD" +
"MjYuMjQgMTMuNCAyNS42MiAxMS45OCAyNC42IDEwLjg2QzI0Ljc2IDEwLjQ2IDI1LjMyIDguODIg" +
"MjQuNDQgNi42MkMyNC40NCA2LjYyIDIzLjEgNi4xOCAyMC4wNCA4LjI2QzE4Ljc2IDcuOSAxNy40" +
"IDcuNzIgMTYuMDQgNy43MkMxNC42OCA3LjcyIDEzLjMyIDcuOSAxMi4wNCA4LjI2QzguOTggNi4y" +
"IDcuNjQgNi42MiA3LjY0IDYuNjJDNi43NiA4LjgyIDcuMzIgMTAuNDYgNy40OCAxMC44NkM2LjQ2" +
"IDExLjk4IDUuODQgMTMuNDIgNS44NCAxNS4xNkM1Ljg0IDIwLjYzODcgOC44MjExOSAyMi4zMTg3" +
"IDEyIDIyLjg5NzZWMjUuMjQ0MkMxMS4wMjI0IDI1LjY2MzIgOC44MzAzNSAyNi4yMTY2IDcuNDQg" +
"MjMuODhDNy4xNCAyMy40IDYuMjQgMjIuMjIgNC45OCAyMi4yNEMzLjY0IDIyLjI2IDQuNDQgMjMg" +
"NSAyMy4zQzUuNjggMjMuNjggNi40NiAyNS4xIDYuNjQgMjUuNTZDNi45NTk0NyAyNi40NTg1IDcu" +
"OTk2NTUgMjguMTc0MyAxMiAyNy40NDM3VjMwLjY4MTRDMTEuODk1MSAzMS4wMTE2IDExLjU3NTEg" +
"MzEuMjkxMSAxMC45NCAzMS4xOEM0LjU4IDI5LjA2IDAgMjMuMDggMCAxNloiIGZpbGw9IiMwMDAw" +
"MDAiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0z" +
"MC43MDcxIDIxLjIwNzFMMjAuNSAzMS40MTQyTDE1LjI5MjkgMjYuMjA3MUwxNi43MDcxIDI0Ljc5" +
"MjlMMjAuNSAyOC41ODU4TDI5LjI5MjkgMTkuNzkyOUwzMC43MDcxIDIxLjIwNzFaIiBmaWxsPSIj" +
"MDA3OTFDIi8+Cjwvc3ZnPgo=";
let icon_data_failure = "PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9u" +
"ZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTAgMTZDMCA3" +
"LjE2IDcuMTYgMCAxNiAwQzI0LjE2MjYgMCAzMC44OTI5IDYuMTA0NzkgMzEuODc2NCAxNEgyNi4x" +
"NDQ0QzI1LjkzMzkgMTIuNzYzMiAyNS4zODU2IDExLjcyMjYgMjQuNiAxMC44NkMyNC43NiAxMC40" +
"NiAyNS4zMiA4LjgyIDI0LjQ0IDYuNjJDMjQuNDQgNi42MiAyMy4xIDYuMTggMjAuMDQgOC4yNkMx" +
"OC43NiA3LjkgMTcuNCA3LjcyIDE2LjA0IDcuNzJDMTQuNjggNy43MiAxMy4zMiA3LjkgMTIuMDQg" +
"OC4yNkM4Ljk4IDYuMiA3LjY0IDYuNjIgNy42NCA2LjYyQzYuNzYgOC44MiA3LjMyIDEwLjQ2IDcu" +
"NDggMTAuODZDNi40NiAxMS45OCA1Ljg0IDEzLjQyIDUuODQgMTUuMTZDNS44NCAyMC42Mzg3IDgu" +
"ODIxMTkgMjIuMzE4NyAxMiAyMi44OTc2VjI1LjI0NDJDMTEuMDIyNCAyNS42NjMyIDguODMwMzUg" +
"MjYuMjE2NiA3LjQ0IDIzLjg4QzcuMTQgMjMuNCA2LjI0IDIyLjIyIDQuOTggMjIuMjRDMy42NCAy" +
"Mi4yNiA0LjQ0IDIzIDUgMjMuM0M1LjY4IDIzLjY4IDYuNDYgMjUuMSA2LjY0IDI1LjU2QzYuOTU5" +
"NDcgMjYuNDU4NSA3Ljk5NjU1IDI4LjE3NDMgMTIgMjcuNDQzN1YzMC42ODE0QzExLjg5NTEgMzEu" +
"MDExNiAxMS41NzUxIDMxLjI5MTEgMTAuOTQgMzEuMThDNC41OCAyOS4wNiAwIDIzLjA4IDAgMTZa" +
"IiBmaWxsPSIjMDAwMDAwIi8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJl" +
"dmVub2RkIiBkPSJNMjMuMDg1OCAyNC41TDE4LjI5MjkgMjkuMjkyOUwxOS43MDcxIDMwLjcwNzFM" +
"MjQuNSAyNS45MTQyTDI5LjI5MjkgMzAuNzA3MUwzMC43MDcxIDI5LjI5MjlMMjUuOTE0MiAyNC41" +
"TDMwLjcwNzEgMTkuNzA3MUwyOS4yOTI5IDE4LjI5MjlMMjQuNSAyMy4wODU4TDE5LjcwNzEgMTgu" +
"MjkyOUwxOC4yOTI5IDE5LjcwNzFMMjMuMDg1OCAyNC41WiIgZmlsbD0iI0FCMDAwRCIvPgo8L3N2" +
"Zz4K";
let icon_map = new Map([
['favicon.svg', `data:image/svg+xml;base64,${icon_data}`],
['favicon-success.svg', `data:image/svg+xml;base64,${icon_data_success}`],
['favicon-failure.svg', `data:image/svg+xml;base64,${icon_data_failure}`],
['favicon.ico', `data:image/svg+xml;base64,${icon_data}`], // github.community
]);
function update_favicon () {
let icon_link = document.querySelector('link[rel="icon"]');
if (icon_link) {
let fname = icon_map.get(get_url_filename(icon_link.href));
if (fname !== undefined) {
icon_link.setAttribute('href', fname);
}
}
}
let icon_link = document.querySelector('link[rel="icon"]');
let mutobs = new MutationObserver(update_favicon);
mutobs.observe(icon_link, {
attributes: true,
});
update_favicon();
})();