素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: すかいぷ:javascripter_  か javascripter あっと tsukkun.net skypeのほうがいいです

FilterinGoogleのバグ修正や機能追加

バグの修正:

  1. AutoPagerizeで継ぎ足ししたページが全部削除されてしまう単純なミスの修正
  2. wedataのurlの正規表現に、iやgなどのオプションを設定できなかったバグの修正

追加した機能:

  1. フィルタリングしないサイトを設定できるようにした
  2. Greasemonkeyのメニューから、キャッシュをクリアできるようにした。(ただしクリア後リロードが必要。)

FilterinGoogle.user.js

// ==UserScript==
// @name           FilterinGoogle
// @namespace      http://d.hatena.ne.jp/javascripter/
// @include        http://www.google.co.jp/
// ==/UserScript==
var ITEM_DELETE=false;//trueだと削除、falseだと半透明

var NOT_EXE_RULES=[
'http://b.hatena.ne.jp'
];

var USER_RULES=[
'http://swik.net/'

];//文字列または正規表現で指定

var IMPORT_URL='http://wedata.net/databases/FilterinGoogle/items.json';

var clear_cache=function(){
	GM_setValue('cache','');
}
var get_cache=function(callback){
	var cache=GM_getValue('cache');
	if(cache){
		callback(eval(cache));
	}else{
		GM_xmlhttpRequest({
			method:'GET',
			url:IMPORT_URL,
			onload:function(res){
				var urls=eval(res.responseText).map(
					function(i){
					if(i.data.url.indexOf('/')){
					return i.data.url;
					}else{
					var [,pattern,flags]=i.data.url.match(/^\/(.+)\/([gimy]*)$/i);
					return RegExp(pattern,flags);
					}
					});
				GM_setValue('cache',uneval(urls));
				callback(urls);
			}
		});
	};
}

GM_registerMenuCommand('FilterinGoogle - clear cache',clear_cache);

get_cache(function(SITEINFO_RULE){
	var RULES=USER_RULES.concat(SITEINFO_RULE);
	var deleteItem=ITEM_DELETE?
	function(element){
		element.parentNode.removeChild(element);
	}
	:
	function(element){
		element.style.opacity='0.5';
	};
	var gc=function(root){
		Array.filter(root.getElementsByClassName('g'),
			function(item){
				var item_url=item.getElementsByClassName('l')[0].href;
				return NOT_EXE_RULES.every(function(url)
					item_url[typeof(url)=='string'?'indexOf':'search'](url)==-1
					)&&
				RULES.some(function(url)
					item_url[typeof(url)=='string'?'indexOf':'search'](url)!=-1
					
			)
				}
		).forEach(deleteItem);
	}
	gc(document.getElementById('res'));
	
	window.AutoPagerize&&
	 window.AutoPagerize.addFilter(
		 function(docs){
			 docs.forEach(gc);
		 }
	);
});