tumblrで特定のポストを隠すGreasemonkeyスクリプト(A smart dashboard is mineの改造)

自分のポストを隠すスクリプトならA smart dashboard is_mine | Userstyles.orgがある。自分のポストかどうかの判定をXPathで行っているので、それだったらテキストとしてxxxx reblogged youと表示される、“自分のポストから直接リブログされたポスト”を隠すことも出来るのではないかと考えた。
それを実現するための格闘の残滓がこれ。
http://ohmizaiju.tumblr.com/post/323869916/a-smart-dashboard-is-reblogged-mine
で、過去に作った分だと、全ページに対してis_reblogged_mine関数を適用して、際限なくクラス名is_reblogeed_mineが追加されていく状況にあった。

そのあたりの問題を、document.evaluateの動作を調べつつ解決できたのが以下のソース。

// ==UserScript==
// @name          A smart dashboard is_reblogged_mine
// @description	  Tumblrのダッシュボードの内、自分が投稿したpostからreblogされたものを折りたたみ&半透明化し、ダッシュボードをスマートにします
// @include       http://www.tumblr.com/*
// @include       https://www.tumblr.com/*
// @include       http://*.www.tumblr.com/*
// @include       https://*.www.tumblr.com/*
// ==/UserScript==
(function() {
var css = <![CDATA[
li[id^="post"][class*="is_reblogged_mine"] {
		-moz-opacity:0.9 !important;
		opacity:0.9 !important;
		max-height:1em !important;
		overflow:hidden !important;
	}
li[id^="post"][class*="is_reblogged_mine"] img {
		display:none !important;
	}
li[id^="post"][class*="is_reblogged_mine"] blockquote {
		display:none !important;
}
]]>;

if (typeof GM_addStyle != "undefined") {
	GM_addStyle(css);
} else if (typeof PRO_addStyle != "undefined") {
	PRO_addStyle(css);
} else if (typeof addStyle != "undefined") {
	addStyle(css);
} else {
	var heads = document.getElementsByTagName("head");
	if (heads.length > 0) {
		var node = document.createElement("style");
		node.type = "text/css";
		node.appendChild(document.createTextNode(css));
		heads[0].appendChild(node); 
	}
}

function is_reblogged_mine(doc, xpath){
  var target = document.evaluate(xpath,doc,null,7,null);
  for(var i = 0, maxi = target.snapshotLength; i < maxi; i++){
    target.snapshotItem(i).className += " is_reblogged_mine ";//" notification is_reblogged_mine ";
  }
}

var boot=function(){
  is_reblogged_mine(document,'.//li[contains(@class,"not_mine")][contains(@class,"is_reblog")][div[@class="post_info"][text()[contains(self::text(),"reblogged you")]]]');
  window.addEventListener('AutoPagerize_DOMNodeInserted', function(evt){
    is_reblogged_mine(evt.target,'.//div[@class="post_info"][text()[contains(self::text(),"reblogged you")]]/parent::li');
  }, false);
}
if(window.AutoPagerize){
  boot();
}else{
  window.addEventListener('GM_AutoPagerizeLoaded', boot, false);
}
})();