// ==UserScript== // @name YingYingYing // @namespace https://github.com/YukariChiba/ying // @version 0.2.1 // @description Replace Yings in Chinese // @author Yukari Chiba // @match http*://*/* // @grant GM_addStyle // @run-at document-idle // @downloadURL https://update.greasyfork.icu/scripts/383437/YingYingYing.user.js // @updateURL https://update.greasyfork.icu/scripts/383437/YingYingYing.meta.js // ==/UserScript== GM_addStyle( 'ying::after { content: "嘤"; } ying:hover::after { content: attr(ori); } ' ); (function () { "use strict"; try { new Function(""); } catch (e) { console.log("[YingYingYing] CSP is enabled. Turn off plugin."); return; } var yin = "陻音阴愔慇瘖磤禋欭殷氤洇姻喑噾因堙骃溵湮濦絪緸茵荫裀諲闉", yin_2 = "霪银夤訚狺峾崟寅婬犾唫嚚圻垠冘吟龈龂淫蟫訔誾鄞", yin_4 = "隐窨慭懚梀廕印胤酳", ying = "韺瑛锳璎撄孾柍樱嫈媖婴啨应鹦鹰瀴缨罂膺莺英荥蘡蠳譍譻賏", ying_2 = "盈禜籯桯楹浧嬴莹滢潆濙濚瀛瀯茔荧萤萦营蝇謍赢迎", ying_4 = "硬映媵", ying_reg = RegExp( "(?<=(^|>)[^<]*)[" + ying + ying_2 + ying_4 + "](?=[^>]*)", "g" ), yin_reg = RegExp( "(?<=(^|>)[^<]*)[" + yin + yin_2 + yin_4 + "](?=[^>]*)", "g" ); function regex_replace(base, child) { if (ying_reg.test(child.textContent) || yin_reg.test(child.textContent)) { base.innerHTML = base.innerHTML .replace(ying_reg, '') .replace(yin_reg, ''); return true; } else return false; } function iter(nodes) { if (ying_reg.test(nodes.innerHTML) || yin_reg.test(nodes.innerHTML)) { var replaced = false; for (var i = 0, n = nodes.childNodes.length; i < n; i++) { if (nodes.childNodes[i].nodeType == 3 || !replaced) { if (regex_replace(nodes, nodes.childNodes[i])) replaced = true; } if (nodes.childNodes[i].childNodes.length != 0) { iter(nodes.childNodes[i]); } } } } iter(document.body); })();