- // ==UserScript==
- // @name replace-fonts
- // @namespace http://tampermonkey.net/
- // @version 202312190930
- // @description Replace all fonts by preferred ones.
- // @author Rafael David Tinoco
- // @match http*://*/*
- // @run-at document-start
- // @grant none
- // ==/UserScript==
-
- ;(function () {
- 'use strict'
-
- var fontsToOpenSans = [
- 'Calibri',
- 'Cambria',
- 'Candara',
- 'Constantia',
- 'Corbel',
- 'Georgia',
- 'Segoe UI',
- 'Trebuchet MS',
- 'Verdana',
- 'sans',
- 'sans-serif',
- 'serif',
- 'Avenir',
- 'Avenir Next',
- 'Comic Sans MS',
- 'Comic Sans',
- 'Lucida Grande',
- 'Lucida Sans',
- 'Roboto'
- ]
- var fontsToCousine = [
- 'Monospace',
- 'Noto Mono',
- 'Consolas',
- 'Courier New',
- 'Courier',
- 'Monaco',
- 'Menlo',
- 'Fira Mono',
- 'Liberation Mono',
- 'Roboto Mono'
- ]
- var fontsToLiberationSans = [
- 'Arial',
- 'Times New Roman',
- 'Arial Narrow',
- 'Tahoma',
- 'Helvetica',
- 'Helvetica Neue',
- 'San Francisco',
- 'Fira Sans',
- 'Noto Sans'
- ]
-
- function adjustElementStyles (node) {
- let fontFamily = window
- .getComputedStyle(node)
- .fontFamily.replace(/["']/g, '')
- let site = window.location.hostname
-
- fontFamily.split(',').some(font => {
- if (fontsToOpenSans.includes(font.trim())) {
- node.style.fontFamily = '"Open Sans", sans-serif'
- return true
- } else if (fontsToCousine.includes(font.trim())) {
- node.style.fontFamily = 'Cousine, monospace'
- return true
- } else if (fontsToLiberationSans.includes(font.trim())) {
- node.style.fontFamily = '"Liberation Sans", sans-serif'
- return true
- }
- return false
- })
- }
-
- function observeDOMChanges () {
- const observer = new MutationObserver(mutations => {
- mutations.forEach(mutation => {
- mutation.addedNodes.forEach(node => {
- if (node.nodeType === Node.ELEMENT_NODE) {
- adjustElementStyles(node)
- node.querySelectorAll('*').forEach(adjustElementStyles)
- }
- })
- })
- })
- observer.observe(document, { childList: true, subtree: true })
- }
-
- window.addEventListener('load', () => {
- document.querySelectorAll('*').forEach(adjustElementStyles)
- observeDOMChanges()
- })
-
- document.addEventListener('DOMContentLoaded', () => {
- document.querySelectorAll('*').forEach(adjustElementStyles)
- })
- })()