您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Attempts to convert any numbers on all webpages to base 2. Based on the video https://youtu.be/rDDaEVcwIJM
当前为
- // ==UserScript==
- // @name Convert to binary
- // @author Nick M
- // @namespace https://youtu.be/rDDaEVcwIJM
- // @version 2024-09-29
- // @description Attempts to convert any numbers on all webpages to base 2. Based on the video https://youtu.be/rDDaEVcwIJM
- // @match *://*/*
- // @grant none
- // @license MIT
- // ==/UserScript==
- (function() {
- 'use strict';
- const baseChars = ["ı","l"];
- const multipliers = {
- 'k': {value: 1000, replacement:[""]},
- 'm': 1000000,
- 'b': 1000000000
- };
- function toNewBase(str) {
- // Remove commas and handle multipliers
- str = str.replace(/,/g, '');
- let multiplier = 1;
- let match = str.match(/([0-9.]+)([kMB])?/i);
- if (match) {
- str = match[1];
- if (match[2]) multiplier = multipliers[match[2].toLowerCase()];
- }
- // Convert to number and apply multiplier
- let n = parseFloat(str) * multiplier;
- // Handle decimal part
- let intPart = Math.floor(n);
- let fracPart = n - intPart;
- let newStr = "";
- // Convert integer part
- if (intPart === 0) return baseChars[0];
- while (intPart > 0) {
- let remainder = intPart % baseChars.length;
- newStr = baseChars[remainder] + newStr;
- intPart = Math.floor(intPart / baseChars.length);
- }
- // Add decimal part if exists
- if (fracPart > 0) {
- newStr += '.';
- for (let i = 0; i < 4; i++) { // Convert up to 4 decimal places
- fracPart *= baseChars.length;
- let digit = Math.floor(fracPart);
- newStr += baseChars[digit];
- fracPart -= digit;
- if (fracPart === 0) break;
- }
- }
- return newStr;
- }
- function replaceNumbers(node) {
- if (node.nodeType === Node.TEXT_NODE) {
- node.textContent = node.textContent.replace(/\b\d{1,3}(,\d{3})*(\.\d+)?([kMB])?\b|\b\d+(\.\d+)?([kMB])?\b/gi, match => toNewBase(match));
- } else if (node.nodeType === Node.ELEMENT_NODE && !['SCRIPT', 'STYLE', 'NOSCRIPT'].includes(node.nodeName)) {
- for (let i = 0; i < node.childNodes.length; i++) {
- replaceNumbers(node.childNodes[i]);
- }
- }
- }
- let mutatedNodes = new Set();
- let processingScheduled = false;
- function scheduleProcessing() {
- if (!processingScheduled) {
- processingScheduled = true;
- setTimeout(() => {
- processMutations();
- processingScheduled = false;
- }, 10);
- }
- }
- function processMutations() {
- mutatedNodes.forEach(node => {
- if (node.isConnected) {
- replaceNumbers(node);
- }
- });
- mutatedNodes.clear();
- }
- function observeChanges() {
- const observer = new MutationObserver(mutations => {
- mutations.forEach(mutation => {
- if (mutation.type === 'childList') {
- mutation.addedNodes.forEach(node => {
- if (node.nodeType === Node.ELEMENT_NODE) {
- mutatedNodes.add(node);
- }
- });
- } else if (mutation.type === 'characterData') {
- mutatedNodes.add(mutation.target);
- }
- });
- scheduleProcessing();
- });
- observer.observe(document.body, {
- childList: true,
- subtree: true,
- characterData: true
- });
- }
- // Initial replacement
- replaceNumbers(document.body);
- // Observe future changes
- observeChanges();
- })();