Convert to binary

Attempts to convert any numbers on all webpages to base 2. Based on the video https://youtu.be/rDDaEVcwIJM

目前為 2024-02-07 提交的版本,檢視 最新版本

// ==UserScript==
// @name         Convert to binary
// @version      2024-02-07
// @description  Attempts to convert any numbers on all webpages to base 2. Based on the video https://youtu.be/rDDaEVcwIJM
// @author       Nick M
// @match      *://*/*
// @run-at       document-idle
// @namespace    https://youtu.be/rDDaEVcwIJM
// @license MIT
// ==/UserScript==

(function() {
    'use strict';
    function toNewBase(n){
        let baseChars = ["ı","l"];
        let newStr = "";
        if (n==0) return baseChars[0];
        while (n > 0){
            let remainder = n%baseChars.length;
            newStr = baseChars[remainder]+newStr
            n = (n-remainder)/baseChars.length;
        }
        return newStr;
    }
    function replaceNumbers(text){
        var pattern1 = /\b\d+(\d+,)*\.?(\d+,)*(k|m|b)?\b/gi;
        var pattern2 = /\b\d+(\d+,)*\.?(\d+,)*(k|m|b)?\b/i;
        let result = [...text.matchAll(pattern1)];
        let newText = text
        for (var i=0; i<result.length; i++){
            newText = newText.replace(pattern2,"`,`,`");
        }
        var pattern3 = /`,`,`/;
        var groupings = 4
        for (var n=0; n<result.length; n++){
            var curNum = result[n][0].replaceAll(",","");
            console.log(curNum)
            var newStr1;
            if (curNum == "00"){
                newStr1 = toNewBase(0)+toNewBase(0)
            } else {
                if (curNum[curNum.length-1].toUpperCase() == "K") curNum = Number(curNum.substr(0,curNum.length-1))*1000;
                else if (curNum[curNum.length-1].toUpperCase() == "M") curNum = Number(curNum.substr(0,curNum.length-1))*1000000;
                else if (curNum[curNum.length-1].toUpperCase() == "B") curNum = Number(curNum.substr(0,curNum.length-1))*1000000000;
                else curNum = Number(curNum);
                newStr1 = toNewBase(curNum);
            }
            var newStr2 = "";
            for (var e = newStr1.length-groupings; e > -groupings; e -= groupings){
                if (e>=0){
                    newStr2 = "<u style=\"padding-left:1px\">"+newStr1.substr(e,groupings)+"</u>"+newStr2
                } else {
                    newStr2 = "<u style=\"padding-left:1px\">"+newStr1.substr(0,newStr1.length%groupings)+"</u>"+newStr2
                }
            }
            newText = newText.replace(pattern3,newStr2);
        }
        return newText;
    }
    function replaceInners(currentNode){
        if (!currentNode) currentNode = document.getElementsByTagName("body")[0];
        if (currentNode.nodeName == "SCRIPT") return;
        if (currentNode.nodeName == "STYLE") return;
        if (currentNode.nodeName == "NOSCRIPT") return;
        //console.log(currentNode.nodeName)
        if (currentNode.childNodes.length > 0){
            var nodelist = []
            for (var i = 0; i<currentNode.childNodes.length; i++){
                nodelist.push(currentNode.childNodes[i])
            }
            for (var n = 0; n<nodelist.length; n++){
                //console.log("childnode:"+nodelist[n].nodeName)
                if (nodelist[n].nodeName == "#text"){
                    var newText = replaceNumbers(nodelist[n].textContent)
                    if (newText != nodelist[n].textContent){
                        var replacementNode = document.createElement('span');
                        replacementNode.innerHTML = newText
                        currentNode.insertBefore(replacementNode, nodelist[n]);
                        currentNode.removeChild(nodelist[n]);
                    }
                } else {
                    replaceInners(nodelist[n])
                }
            }
        }
    }
    replaceInners()
    setTimeout(replaceInners,2000);
    setTimeout(replaceInners,4000);
    setTimeout(replaceInners,8000);
    setTimeout(replaceInners,16000);
})();