您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Colors text characters to try and develop association between letter and colors.
// ==UserScript== // @name Synesthesia // @author Squigglez // @namespace RandomTagHere // @description Colors text characters to try and develop association between letter and colors. // @include * // @version 2.0 // @grant none // @run-at document-idle // ==/UserScript== /* There's no license so I believe it defaults to GNU. If you change or redistribute this it'd be nice to get some credit though. Not that I'll know one way or the other. */ /* Sets timeout for recursive calls to stop the browser from locking up. Keep in mind too long will take the a long time for the page to finish coloring. Too short and the browser may still become unresponsive. Set to 0 to disable delay. */ var timeOut = 100; /* Creates colored background behind all colored texts. Set to true to help with pages that have difficult backgrounds. Change color if default doesn't help. */ var backGround = false; var backGroundColor = 'White'; grabText(); function getColor(character){ /* Look up for which color matches given letter. Change colors if desired. By default the 10 digits use the same colors as the first 10 letters. */ var testChar = character.toLowerCase(); var numFlag = parseFloat(character) == character; var colors = { 'a': 'Indigo', 'b': 'Cyan', 'c': 'DarkGoldenRod', 'd': 'Crimson', 'e': 'DarkMagenta', 'f': 'Aquamarine', 'g': 'DarkOrchid', 'h': 'DeepPink', 'i': 'OrangeRed', 'j': 'Gray', 'k': 'Navy', 'l': 'Lime', 'm': 'Khaki', 'n': 'Gold', 'o': 'Sienna', 'p': 'Yellow', 'q': 'DarkRed', 'r': 'LimeGreen', 's': 'DarkGreen', 't': 'BurlyWood', 'u': 'MediumSpringGreen', 'v': 'DarkOrange', 'w': 'Blue', 'x': 'Salmon', 'y': 'HotPink', 'z': 'CadetBlue' } var numColors = { '1':colors['a'], '2':colors['b'], '3':colors['c'], '4':colors['d'], '5':colors['e'], '6':colors['f'], '7':colors['g'], '8':colors['h'], '9':colors['i'], '0':colors['j'] } if(numFlag){ return numColors[character]; } else{ return colors[testChar] || null; //Returns null if the character was a symbol. } } function whiteList(tagName){ /* Whilelist of which tags should be explored further for possible text to color. Any tags not here will be ignored. Add/Remove tags if needed. All tags except #text need to be uppercase. Removing #text will stop the script from functioning. */ var whiteList = [ '#text', 'A', 'P', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'LI', 'UL', 'OL', 'DL', 'DIV', 'STRONG', 'MAIN', 'B', 'I', 'S', 'U', 'EM', 'SMALL', 'MARK', 'ABBR', 'DFN', 'Q', 'BDO', 'BDI', 'EMBED', 'AREA', 'BUTTON', 'LABEL', 'OPTION', 'CODE', 'SUP', 'SUB', 'CITE', 'SPAN', 'HGROUP', 'ADDRESS', 'INS', 'SECTION', 'ARTICLE', 'HEADER', 'FOOTER', 'ASIDE', 'FIGURE', 'TABLE', 'MENU', 'INPUT', 'TBODY', 'TR', 'TD' ] return whiteList.indexOf(tagName) != -1; } function mkSpan(character){ //Colors letters using span tags. var color = getColor(character); if(color == null){ return character; } else{ return '<span style="color:' + color + '">' + character + '</span>'; } } function colorize(string){ //Parses strings to have them colored. var i = 0; var flag = false; var length = string.length; var final = ''; var letter; var temp; for(i;i<length;i++){ temp = string[i]; letter = mkSpan(temp); if(letter != temp && !flag) flag = true; final += letter; } if(!flag) return string; var coloredText = document.createElement('coloredtext'); if(backGround){ coloredText.setAttribute('style','background-color:' + backGroundColor); } coloredText.innerHTML = final; return coloredText; } function nodeWalk(node){ //Main function, uses recursion to get to leaf nodes, sends text to be colored. var children = [].slice.call(node.childNodes); var length = children.length; if(!length) return; var i = 0; var child; var type; var name; var coloredText; var text; for(i;i<length;i++){ child = children[i]; name = child.nodeName; type = child.nodeType; if(!whiteList(name)) continue; if(type == 3){ text = child.textContent; coloredText = colorize(text); if(text == coloredText) continue; node.replaceChild(coloredText,child); continue; } if(type == 1){ if(timeOut > 0){ window.setTimeout(nodeWalk,timeOut,child); } else{ nodeWalk(child); } } } } function grabText(){ //Grabs body and sends it as the start point for nodeWalk. var body = document.body; nodeWalk(body); }