Greasy Fork

来自缓存

正确跟帖的方式

绕过国内网站的审核, 目前支持网易, v2ex

// ==UserScript==
// @name         正确跟帖的方式
// @namespace    ysaerg
// @version      1.1
// @description  绕过国内网站的审核, 目前支持网易, v2ex
// @author       ysaerg
// @include       /^https?:\/\/comment.\w+\.163\.com\/.*\/.*\.html$/
// @include       /^https?:\/\/v2ex\.com\/t\/.*$/
// @todo      /https?:\/\/tieba\.baidu\.com\/.*/
// @grant        none
// ==/UserScript==

var chinese = {
民: '泯',
自: '目',
杀: '纱',
死: '屎',
主: '猪',
统: '捅',
村: '木寸',
科: '禾斗',
处: '畜',
局: '菊',
部: '步',
厅: '汀',
省: '绳',
县: '馅',
国: '掴',
家: '稼',
马: '玛',
宁: '狞',
毛: '猫',
邓: '灯',
江: '茳',
泽: '沢',
谋: '某',
王: '仼',
周: '週',
胡: '葫',
刘: '浏',
李: '锂',
吴: '捂',
温: '溫',
习: '夕',
贺: '赫',
贾: '價',
彭: '嘭',
潭: '覃',
新: '亲斤',
诚: '铖',
事: 'story',
职: '耳只',
称: '禾尔',
英: '瑛',
语: '言吾',
答: '嗒',
案: '桉',
公: '蚣',
务: '兀',
员: '猿',
宝: '孢',
轮: '纶',
胎: '肽',
政: '钲',
变: '煸',
枪: '炝',
声: '笙',
戒: '琾',
严: '盐',
京: '菁',
真: '稹',
理: '锂',
贼: '戝',
假: '茄',
异: '弈',
士: '仕',
军: '莙',
日: '衵',
高: '篙',
刊: '衎',
物: '焐',
议: '仪',
人: '朲',
权: '荃',
党: '谠',
独: '牍',
裁: '菜',
迫: '珀',
害: '嗐',
委: '萎',
论: '抡',
探: '镡',
斯: '嘶',
哲: '喆',
胜: '笙',
藏: '臧',
经: '泾',
命: '掵',
革: '諽',
劳: '捞',
牢: '涝',
佬: '姥',
监: '鉴',
狱: '域',
左: '佐',
右: '佑',
上: '丄',
下: '丅',
东: '岽',
南: '喃',
西: '茜',
北: '邶',
前: '偂',
后: '逅',
报: '铇',
进: '琎',
禁: '僸',
美: '镁',
业: '邺',
帝: '蒂',
城: '铖',
团: '団',
派: 'π',
怨: '鸳',
冤: '鸳',
封: '葑',
锁: '琐',
血: '桖',
邪: '偕',
地: '递',
岸: '堓',
宪: '筅',
社: '渉',
操: '鄵',
镇: '嫃',
审: '渖',
明: '朙',
文: '呅',
攻: '杛',
打: '哒',
骂: '瑪'
};


var sites = [
{
	url: /https?:\/\/comment\..+\.163\.com\/.*\/.*.html/,
	ele: ['#replyBody']
},
{
	url: /https?:\/\/v2ex\.com\/t\/.*/,
	ele: ['#reply_content']
},

{
	url:/https?:\/\/tieba\.baidu\.com\/f\?kw=.*/,
	ele: ['.editor_textfield','#ueditor_replace']
}
];

String.prototype.toUnicode = function(){
	var str ='';
	var text = this.toString();
	for(var i=0;i<text.length;i++)
	{
	   str+="\\u"+parseInt(text[i].charCodeAt(0),10).toString(16);
	}
	return str;
};

String.prototype.toChinese = function () {
	var text = this.toString();
	data = text.split('\\u');
	   var str ='';
	   for(var i=0;i<data.length;i++)
	   {
	       str+=String.fromCharCode(parseInt(data[i],16).toString(10));
	   }
	   return str;
};



function chooseEle(url){
	for (var i = sites.length - 1; i >= 0; i--) {
		if(url.match(sites[i].url) !== null)
			return sites[i].ele;
	}
}


var currentURL = window.location.href;
console.log(currentURL);
window.setTimeout(replaceCharactor(currentURL), 3000);

function replaceCharactor(url){
	var selectorArray = chooseEle(url);
	console.log('selector array: ' + selectorArray);
	if(selectorArray === false){
		console.log('url not support');
		return false;
	}

	addListeners(getDOMs(selectorArray),function(ele){
		console.log('dom: '+ele);
		if(eleIs(ele,'ueditor_replace')){
			console.log('unsupport yet');
			return;
		}

		var replaceText = function (){
			text = ele.value;
			if(text.length < 2) return;
			console.log('original texts: '+ text);
			text=text.toUnicode().split('\\').join(' \\');

			var patterns = Object.keys(chinese);
			for (var i = patterns.length - 1; i >= 0; i--) {
				var p = new RegExp('\\'+patterns[i].toUnicode(),"g");
				text=text.replace(p, chinese[patterns[i]].toUnicode());
			}

			var finalTexts = text.split(' ').join('').toChinese();

			console.log('final texts: '+finalTexts);
			ele.value=finalTexts;
			ele.removeEventListener('mouseout', replaceText ,false);
		};

		var watchText = function() {
			ele.addEventListener('mouseout',replaceText, false);
		};

		ele.addEventListener('input',watchText,false);
	});
}




function getDOMs(selectorArray) {
	var DOMs = [];
	for (var i = selectorArray.length - 1; i >= 0; i--) {
		var d = document.querySelector(selectorArray[i]);
		DOMs.push(d);
	}
	console.log('doms: ' + DOMs);
	return DOMs;
}

function addListeners(DOMArray, callback) {
	for (var i = DOMArray.length - 1; i >= 0; i--) {
		callback(DOMArray[i]);
	}
}

function eleIs(ele,classOrIdName) {
	// check http://stackoverflow.com/questions/1789945/how-can-i-check-if-one-string-contains-another-substring
	if(~ele.id.indexOf(classOrIdName) || ~ele.className.indexOf(classOrIdName))
		return true;
	return false;
}