Twitterのホームに新UIが適用されたので、自作のスクリプトをいくつか見直してみた

右に左に忙しいなw

前UIはTLが左で、各種情報などが右側でしたが、新UIはTLが右で、各種情報などが左側となっていますね。
このように変わること自体は知ってたんですけど、知ってから時間が経っていたんで「今頃かよっ!」と思っちゃいました。


WebサービスのUIが変わったならば、HTMLの構造も大幅に変わっている可能性大なわけなので、早速自前スクリプトの動作チェックしてみました。
一応このエントリで載っけた3つはSleipnir2.9.9(+IE9)、Firefox 10.0*1Chrome 18βにて動作確認しました。

特定のユーザをTLで非表示にするユーザスクリプト

Twitterのタイムラインで特定のユーザのツイートを非表示にするスクリプト
の続編の以前書いたTwitter向けスクリプトをユーザスクリプト化したです。
今回は特に修正の必要ありませんでしたが、ついでに張っておきます。

  • TwitterInvisibleSpecificUser.user.js
// ==UserScript==
// @name         Twitter Invisible Specific User
// @namespace    http://d.hatena.ne.jp/barrackdo/
// @include      http://twitter.com/
// @include      http://twitter.com/#*
// @include      https://twitter.com/
// @include      https://twitter.com/#*
// ==/UserScript==

(function(){
	var rm = "\t" + new Array(

"hoge",
"fuga",
"piyo"
	).join("\t") + "\t";
	
	var d = document.getElementsByTagName("div");
	
	setInterval(function(){
		for(var i = 0; i < d.length; i++) {
			if(rm.match("\t" + new String(d[i].getAttribute("data-screen-name")) + "\t") != null) {
				d[i].parentNode.parentNode.removeChild(d[i].parentNode);
				i=0;
				d = document.getElementsByTagName("div");
			}
		}
	},1000);
	
})();

以下の部分に非表示にしたいユーザの"ユーザー名"を入れてください。

"hoge",
"fuga",
"piyo"

"foo",
"bar",
"hoge",
"fuga",
"piyo"
特定の語が入っているツイートを非表示にするユーザスクリプト

以前から作ってはいたんですが、未公開でしたw
こちらは少し修正が必要でした。
まぁ、DOM取得しやすくなってバンザイな変更でしたがw

  • TwitterInvisibleSpecificTweet.user.js
// ==UserScript==
// @name         Twitter Invisible Specific Tweet
// @namespace    http://d.hatena.ne.jp/barrackdo/
// @include      http://twitter.com/
// @include      http://twitter.com/#*
// @include      https://twitter.com/
// @include      https://twitter.com/#*
// ==/UserScript==

(function(){
	var rm = new Array(

"ほげ",
"ふが"
	)
	
	var p = document.getElementsByTagName("p");
	
	setInterval(function(){
		for(var i = 0; i < p.length; i++) {
			if(p[i].className.match("tweet-text") != null) {
				
				for(var j = 0; j < rm.length; j++) {
					var txt = p[i].textContent !== undefined ? p[i].textContent : p[i].innerText;
					if(txt.match(rm[j]) != null) {
						p[i].parentNode.parentNode.parentNode.parentNode.removeChild(p[i].parentNode.parentNode.parentNode);
						i=0;
						p = document.getElementsByTagName("p");
					}
				}
				
			}
		}
	},1000);
	
})();

こちらも上記のと同じように語句を追記してください。

"ほげ",
"ふが"

"フー",
"bar",
"ほげ",
"ふが"

※なお、一部の文字の前には"\"(バックスラッシュまたは円記号)でエスケープする必要があります。
.(ドット、ピリオド)、^(サーカムフレックス)、$(ドルマーク)、[(角括弧、ブラケット)、](角括弧、ブラケット)、*(アスタリスク)、+(プラス)、?(クエスチョン)、|(縦線)、((丸括弧、パーレン)、)(丸括弧、パーレン)、\(バックスラッシュ、円記号)、"(ダブルクォート)などです。*2
これらの記号を使う場合は次のように記述してください。

"t\.co",
"\"ツイッター\"",
"C:\\Windows\\System32",
広告、"おすすめユーザー"、"トレンド"を折り畳むユーザスクリプト

新UIになったら目だって仕方が無いので新規に書きました。
たまには見たい場合もある鴨なので、展開も可能になっています。
展開/折り畳みがイベントリスナーじゃなくブックマークレットで書いてあるのは見ないことにしてw

  • TwitterComponentFold.user.js
// ==UserScript==
// @name         Twitter Component Fold
// @namespace    http://d.hatena.ne.jp/barrackdo/
// @include      http://twitter.com/
// @include      http://twitter.com/#*
// @include      https://twitter.com/
// @include      https://twitter.com/#*
// ==/UserScript==

(function() {
	var flag = false;
	var timer = setInterval(function(){
		var h3 = document.getElementsByTagName("h3");
		var cst = document.getElementById("custom_49");
		
		if(flag) {
			clearInterval(timer);
		}else if(h3.length > 1 && cst!=null) {
			for(var i = 0; i < h3.length; i++) {
				if(!h3[i].parentNode.parentNode.getElementsByTagName("ul").length) {
					h3[i].parentNode.parentNode.getElementsByTagName("div")[1].style.display = "none";
					var a1 = document.createElement("a");
					a1.id = "whoToFollow";
					a1.innerText = "★";
					a1.textContent = "★";
					a1.href = "javascript:(function(){var d=document.getElementsByTagName('h3')[" + i + "].parentNode.parentNode.getElementsByTagName('div')[1],wtf=document.getElementById('whoToFollow');if(d.style.display!='none'){d.style.display='none';wtf.innerText='★';wtf.textContent='★'}else{d.style.display='block';wtf.innerText='☆';wtf.textContent='☆'}})();";
					h3[i].parentNode.insertBefore(a1, h3[i]);
				}else {
					h3[i].parentNode.parentNode.getElementsByTagName("div")[1].style.display = "none";
					var a2 = document.createElement("a");
					a2.id = "trends";
					a2.innerText = "★";
					a2.textContent = "★";
					a2.href = "javascript:(function(){var d=document.getElementsByTagName('h3')[" + i + "].parentNode.parentNode.getElementsByTagName('div')[1],trd=document.getElementById('trends');if(d.style.display!='none'){d.style.display='none';trd.innerText='★';trd.textContent='★'}else{d.style.display='block';trd.innerText='☆';trd.textContent='☆'}})();";
					h3[i].parentNode.insertBefore(a2, h3[i]);
				}
			}
			
			cst.style.backgroundColor = "#f9f9f9";
			cst.className = "module";
			var a3 = document.createElement("a");
			a3.id = "ads";
			a3.innerText = "広告の表示";
			a3.textContent = "広告の表示";
			a3.style.color = "#000000";
			a3.style.marginLeft = "1.0em";
			a3.href = "javascript:(function(){var d=document.getElementById('custom_49'),ad=d.parentNode.getElementsByTagName('iframe')[0];if(ad.style.display!='none'){ad.style.display='none';d.style.marginBottom='10px'}else{ad.style.display='block';d.style.marginBottom='0';ad.style.marginBottom='10px'}})();";
			cst.appendChild(a3);
			cst.parentNode.getElementsByTagName("iframe")[0].style.display = "none";
			flag = true;
		}
		
	},1000);
}());

あと、たまに"おすすめユーザー"が呼ばれない場合があるんだけど、ずっと呼ばれないままなのか、まだ表示されて無いだけなのかの判定方法が分からなかったので前者の場合は発動しません。
それぞれにタイマー処理使えば行けるんだろうけど、そこまで目くじらを立ててやらなけりゃならないものでもないしね。
素直にリロードすればイインダヨー。

*1:アドオンはGreasemonkeyじゃなくScriptish

*2:詳しくは「javascript 正規表現 メタ文字」、「エスケープシーケンス バックスラッシュ」などで検索すると宜しいかと