-
Notifications
You must be signed in to change notification settings - Fork 0
/
replace-fonts.js
124 lines (112 loc) · 3.43 KB
/
replace-fonts.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
// ==UserScript==
// @name replace-fonts
// @namespace http://tampermonkey.net/
// @version 20240131
// @description Replace all fonts by preferred ones.
// @author Rafael David Tinoco
// @match http*://*/*
// @run-at document-start
// @grant none
// ==/UserScript==
; (function () {
'use strict'
// Don't change fonts for these domains.
var domainExceptionList = [
'docs.google.com',
'netflix.com',
'youtube.com',
// ... add more domains as needed
]
// Fonts to be changed to Open Sans.
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'
].map(font => font.toLowerCase());
// Fonts to be changed to Cousine (fixed-width).
var fontsToCousine = [
'Monospace',
'Noto Mono',
'Consolas',
'Courier New',
'Courier',
'Monaco',
'Menlo',
'Fira Mono',
'Liberation Mono',
'Roboto Mono'
].map(font => font.toLowerCase());
// Fonts to be changed to Liberation Sans (more condensed sans).
var fontsToLiberationSans = [
'Arial',
'Times New Roman',
'Arial Narrow',
'Tahoma',
'Helvetica',
'Helvetica Neue',
'San Francisco',
'Fira Sans',
'Noto Sans'
].map(font => font.toLowerCase());
function adjustElementStyles(node) {
let currentDomain = window.location.hostname
// Nothing to do for these domains.
if (domainExceptionList.some(domain => currentDomain.includes(domain))) {
return
}
let fontFamily = window
.getComputedStyle(node)
.fontFamily.replace(/["']/g, '')
.toLowerCase();
fontFamily.split(',').some(font => {
font = font.trim();
if (fontsToOpenSans.includes(font)) {
node.style.fontFamily = '"Open Sans", sans-serif';
return true;
} else if (fontsToCousine.includes(font)) {
node.style.fontFamily = 'Cousine, monospace';
return true;
} else if (fontsToLiberationSans.includes(font)) {
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)
})
})()