Font Substitution v3

Substitutes arbitrary fonts on webpages

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, Greasemonkey alebo Violentmonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey alebo Userscripts.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie správcu používateľských skriptov.

(Už mám správcu používateľských skriptov, nechajte ma ho nainštalovať!)

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

(Už mám správcu používateľských štýlov, nechajte ma ho nainštalovať!)

// ==UserScript==
// @name           Font Substitution v3
// @description    Substitutes arbitrary fonts on webpages
// @author         Alan Davies
// @copyright      2015, Alan Davies
// @version        3.0.2
// @date           2015-08-26
// @namespace      FontSub3
// @include        *
// @grant          GM_addStyle
// @run-at         document-start
// ==/UserScript==

var globalDebug = false;

if (globalDebug) console.log("Font substitution start");

var fontMap = new Map([
	[ "arial",			"Verdana" ],
	[ "helvetica",		"Verdana" ],
	[ "courier",		"Consolas" ],
	[ "courier new",	"Consolas" ]
]);

var weights = [ "normal" , "bold" ];
var styles = [ "normal" , "italic" ];

function Capitalize(string)
{
	return string.charAt(0).toUpperCase() + string.slice(1);
}

function OverrideFontFaces()
{
	for (let fontSub of fontMap)
	{
		for (w = 0; w < weights.length; ++w)
		{
			let weight = weights[w];

			for (s = 0; s < styles.length; ++s)
			{
				let style = styles[s];
			
				let replacementFont = fontSub[1];
				if (weight != "normal")
					replacementFont = replacementFont + " " + Capitalize(weight);

				if (style != "normal")
					replacementFont = replacementFont + " " + Capitalize(style);

				let css =
					"@font-face {" +
						"font-family: \'" + fontSub[0] + "\'; " +
						"src: local(\'" + replacementFont + "\'); " +
						"font-weight: " + weight + "; " +
						"font-style: " + style + "; " +
					"}";

				if (globalDebug) console.log("Adding CSS: " + css);

				GM_addStyle(css);
			}
		}
	}
}

var done = false;

// create an observer instance
var observer = new MutationObserver(function(mutations) {
	if (globalDebug) console.log("Mutation event");
	
	// Add the font face overrides once we have a body element
	if (!done && (null != document.body))
	{
		observer.disconnect();
		OverrideFontFaces();
		done = true;
	}
});

observer.observe(document, { childList: true, attributes: false, characterData: false, subtree: true });