Greasy Fork is available in English.
11/22/23 Reduce the precision of the main menu ratio to prettify it for larger ratios
当前为
// ==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
// ==/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}`);
}