こないだのスパムがらみエントリでも書いたが、アサブロのトラックバック管理画面で「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*」にマッチしないのでこのスクリプト無効になっちゃいます。
もう少し使えるフィルタを実装してほしいなぁ > アサブロ
セコメントをする