replace-fonts

Replace all fonts by preferred ones.

Bu betiği kurabilmeniz için Tampermonkey, Greasemonkey ya da Violentmonkey gibi bir kullanıcı betiği eklentisini kurmanız gerekmektedir.

You will need to install an extension such as Tampermonkey to install this script.

Bu betiği kurabilmeniz için Tampermonkey ya da Violentmonkey gibi bir kullanıcı betiği eklentisini kurmanız gerekmektedir.

Bu betiği kurabilmeniz için Tampermonkey ya da Userscripts gibi bir kullanıcı betiği eklentisini kurmanız gerekmektedir.

Bu betiği indirebilmeniz için ayrıca Tampermonkey gibi bir eklenti kurmanız gerekmektedir.

Bu komut dosyasını yüklemek için bir kullanıcı komut dosyası yöneticisi uzantısı yüklemeniz gerekecek.

(Zaten bir kullanıcı komut dosyası yöneticim var, kurmama izin verin!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(Zateb bir user-style yöneticim var, yükleyeyim!)

// ==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)
  })
})()