- // ==UserScript==
- // @name replace-font-sizes
- // @namespace http://tampermonkey.net/
- // @version 202312190930
- // @description Replace all fonts sizes by preferred ones.
- // @author Rafael David Tinoco
- // @match http*://*/*
- // @run-at document-start
- // @grant none
- // ==/UserScript==
-
- ;(function () {
- 'use strict'
-
- var fixedWidthFonts = [
- 'Monospace',
- 'Courier',
- 'Courier New',
- 'Consolas',
- 'Monaco',
- 'Menlo',
- 'Fire Mono',
- 'Liberation Mono',
- 'Monospace',
- 'Noto Mono',
- 'Roboto Mono'
- ]
-
- var domainFontSettings = [
- {
- domain: 'twitter.com',
- minFontSize: 18,
- maxFontSize: 18,
- minFixedWidthFontSize: 18,
- maxFixedWidthFontSize: 18,
- lineHeight: 1.2,
- fixedWidthLineHeight: 1.2
- },
- {
- domain: 'github.com',
- minFontSize: 17,
- maxFontSize: 24,
- minFixedWidthFontSize: 17,
- maxFixedWidthFontSize: 17,
- lineHeight: 1.2,
- fixedWidthLineHeight: 1.2
- },
- {
- domain: 'google.com',
- minFontSize: 16,
- maxFontSize: 22,
- minFixedWidthFontSize: 16,
- maxFixedWidthFontSize: 22,
- lineHeight: 0,
- fixedWidthLineHeight: 0
- },
- {
- domain: 'openai.com',
- minFontSize: 18,
- maxFontSize: 18,
- minFixedWidthFontSize: 18,
- maxFixedWidthFontSize: 18,
- lineHeight: 1.4,
- fixedWidthLineHeight: 1.2
- }
- ]
-
- function adjustFontSize (node) {
- let currentDomain = window.location.hostname
- let fontFamily = window.getComputedStyle(node).fontFamily.toLowerCase()
- let fontSize = parseFloat(window.getComputedStyle(node).fontSize)
- let isFixedWidth = fixedWidthFonts.some(font =>
- fontFamily.includes(font.toLowerCase())
- )
-
- let applicableSettings = domainFontSettings.find(setting =>
- currentDomain.includes(setting.domain)
- )
- if (!applicableSettings) return
-
- let newFontSize = 0
- let newLineHeight = 0
-
- let {
- minFontSize,
- maxFontSize,
- minFixedWidthFontSize,
- maxFixedWidthFontSize,
- lineHeight,
- fixedWidthLineHeight
- } = applicableSettings
-
- if (isFixedWidth) {
- if (fontSize < minFixedWidthFontSize) {
- newFontSize = minFixedWidthFontSize
- }
- if (fontSize > maxFixedWidthFontSize) {
- newFontSize = maxFixedWidthFontSize
- }
- if (fixedWidthLineHeight) {
- newLineHeight = fixedWidthLineHeight
- }
- } else {
- if (fontSize < minFontSize) {
- newFontSize = minFontSize
- }
- if (fontSize > maxFontSize) {
- newFontSize = maxFontSize
- }
- if (lineHeight) {
- newLineHeight = lineHeight
- }
- }
-
- if (newFontSize) {
- node.style.fontSize = `${newFontSize}px`
- }
- if (newLineHeight) {
- node.style.lineHeight = `${newLineHeight}em`
- }
- }
-
- function observeDOMChanges () {
- const observer = new MutationObserver(mutations => {
- mutations.forEach(mutation => {
- mutation.addedNodes.forEach(node => {
- if (node.nodeType === Node.ELEMENT_NODE) {
- adjustFontSize(node)
- node.querySelectorAll('*').forEach(adjustFontSize)
- }
- })
- if (mutation.type === 'attributes') {
- adjustFontSize(mutation.target)
- }
- })
- })
- observer.observe(document, {
- childList: true,
- subtree: true,
- attributes: true
- })
- }
-
- window.addEventListener('load', () => {
- document.querySelectorAll('*').forEach(adjustFontSize)
- observeDOMChanges()
- })
-
- document.addEventListener('DOMContentLoaded', () => {
- document.querySelectorAll('*').forEach(adjustFontSize)
- })
- })()