// ==UserScript== // @name MAM Ratio Prettify // @namespace http://tampermonkey.net/ // @version 0.1 // @description 11/22/23 Reduce the precision of the main menu ratio to prettify it for larger ratios // @author studioninja // @match https://www.myanonamouse.net/* // @icon https://cdn.myanonamouse.net/imagebucket/218812/square_root_icon_512x512_i31wd3km.png // @grant none // @license MIT // @downloadURL none // ==/UserScript== /** ------ CONFIG ------ **/ const RATIO_PRECISION = 4; /** ------ CONFIG ------ **/ const DEBUG = 1; (function() { 'use strict'; const ratioEl = document.querySelector("#tmR").firstChild; updateRatio(ratioEl); // utilize an observer to handle the site or other scripts changing the value const callback = (mutationList, observer) => { DEBUG && console.debug('[MAM-Ratio-Prettify] Observer callback triggered', mutationList, observer); // try to execute after other scripts setTimeout(() => { if(!mutationList?.[0]?.target) return; // disconnect the observer first to prevent causing an infinite loop since we are modifying what we are observing observer.disconnect(); DEBUG && console.debug('[MAM-Ratio-Prettify] Observer updating ratio in element: ', mutationList[0].target); updateRatio(mutationList[0].target); // reconnect the observer to listen again for changes caused by other scripts or xhr changes observer.observe(mutationList[0].target, { characterData: true }); DEBUG && console.debug('[MAM-Ratio-Prettify] Observer reconnected on element: ', mutationList[0].target); }, 100) }; const observer = new MutationObserver(callback); observer.observe(ratioEl, { characterData: true }); DEBUG && console.debug('[MAM-Ratio-Prettify] Observer initiated on element: ', ratioEl); })(); function updateRatio(el) { if(!el) { DEBUG && console.error('[MAM-Ratio-Prettify] Attempted to update the ratio of a nonexistent element'); return; } const ratioText = el.textContent; const ratio = Number(ratioText.replaceAll(',', '')); if(isNaN(ratio)) { DEBUG && console.debug(`[MAM-Ratio-Prettify] Invalid ratio value '${ratio}', skipping prettification`); return; } const roundedRatio = Number(ratio.toPrecision(RATIO_PRECISION)); const prettyRatio = roundedRatio.toLocaleString(); el.textContent = prettyRatio; console.log(`[MAM-Ratio-Prettify] Updated ratio from '${ratioText}' to ${prettyRatio}`); }