おクスリトラバを強調するGMスクリプト2008年03月27日 12時53分48秒

こないだのスパムがらみエントリでも書いたが、アサブロのトラックバック管理画面で「spam」指定しておくとアサブロ側で情報を収集してくれるっぽいので即削除をやめてspam指定をするようにしてみた。

が、トラックバック管理画面はデフォルトで 10件 / 1ページ の表示なのであっという間に画面はspamだらけになり、管理しづらい。

なので、せめてもう少し見やすくしようとGreasemonkeyでユーザスクリプトを書いてみた。グリモンでしか確認してないが、ほかのブラウザのユーザスクリプトにも移植できるかも。そうでもないかも。

以下のスクリプトを、実行対象のページに「http://www.asablo.jp/app?cmd=edit_tb*」を指定しておくと、トラックバック一覧を表示したときに指定キーワードに一致する行の文字を赤(すでにspam指定済みの場合は暗い赤)で強調する。

var K = function(x) { return x; }

Object.extend = function(destination, source) {
	for(var key in source) destination[key] = source[key];
	return destination;
}

var $break = {};
var $continue = {};
var Enumerable = {
	each : function(iterator) {
		var i = 0;
		try {
			this._each( function(value) {
				try {
					iterator(value, i++);
				} catch(e) {
					if( e != $continue ) throw e;
				}
			} );
		} catch(e) {
			if( e != $break ) throw e;
		}
	},
	find : function(iterator) {
		var result = null;
		this.each( function(value, index) {
			if( iterator(value, index) ) {
				result = value;
				throw $break;
			}
		} );
		return result;
	},
	findAll : function(iterator) {
		var results = [];
		this.each( function(value, index) {
			if( iterator(value, index) ) results.push( value );
		} );
		return results;
	}
}
Array.prototype._each = function(iterator) {
	for(var i = 0, l = this.length; i < l; i++) iterator(this[i]);
}
Object.extend( Array.prototype, Enumerable );

Array.from = $A = function(list) {
	Object.extend( list, { _each : Array.prototype._each } );
	return Object.extend( list, Enumerable );
}

document.getElementsByClassName = function(className) {
	return $A( (arguments[1] || document).getElementsByTagName("*") ).findAll( function(ele) {
		var classes = ( ele.className || "" ).split(" ");
		return classes.find( function(c) { return c == className; } );
	} );
}

/* spam認定キーワード。うまく引っかからんやつもある */
var ng_words = /(drug|buy|price|cheap|tramadol|medication|side\seffects|hydrocodone|oxycodone|zithromax|phentermine)/ig;

$A(document.getElementsByClassName("list")[0].getElementsByTagName("tr")).findAll( function(tr) {
	return ng_words.test( tr.innerHTML );
} ).each( function(tr) {
	var state = tr.getElementsByTagName("select")[0].value;
	Object.extend( tr.style, {
		color : state == "spam" ? "brown" : "red"
	} );
} );

Enumerableだとか、prototype.jsの機能を一部実装してるのでちょっと長いが。

追記

ちなみにトラックバック一覧から絞込みや並べ替えやっちゃうと「http://www.asablo.jp/app?cmd=edit_tb*」にマッチしないのでこのスクリプト無効になっちゃいます。

もう少し使えるフィルタを実装してほしいなぁ > アサブロ

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://dara-j.asablo.jp/blog/2008/03/27/2858281/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。