Hatena::ブログ(Diary)

AstrO

2008-05-14

Gmail2.0対応版「Gmailで未読のみ表示を切り替えるGreasemonkeyスクリプト」

検索フォームに未読ボタンを付ける id:mara さん作成の gmail_unread_toggle.user.js です。かなり便利で重宝していたので自分なり書き加えてみたんですがさっぱり動きません…

Gmail2.0 になって Greasemonkey が動かない… - ?D::MotionBros

自分もかなり重宝しているid:mala氏謹製GreasemonkeyスクリプトGmailの未読だけ読みたい!といったときに簡単に切り替え可能なボタンを追加してくれるやつです。確かに、Gmailが2.0になって動かなくなってしまってますね。まぁ、あれだけ構造変わってるんだから当然か。。。というわけで、とりあえず動くようにしてみました。

ボタンなどの要素についているidはどうやら環境依存というか、動的につけてて常に一意ではないっぽい。仕方ないので最初のinput要素とかbutton要素とかの決め打ちで回避(汗)あと、iframeのonloadのイベントハンドラでうまく要素をとって来れなかったので、setIntervalで要素が取得できるまで繰り返し試みてたり・・・。setTimeoutでもいいような気がするけど、念のためこんな無駄なことしてますorz

ちなみに、本家と若干挙動を変えてて is:unreadボタンのクリックだけで検索もされるようになってます。もし嫌な場合は52行目の searchBtn.click();コメントアウトすればOK。

// ==UserScript==
// @name           Gmail2.0 unread toggle
// @namespace      http://d.hatena.ne.jp/slack4u/
// @include        https://mail.google.com/*
// ==/UserScript==

(function()
{
	var canvas = document.getElementById( 'canvas_frame' );
	var format = 'is:unread';

	if ( !canvas )
	{
		return;
	}

	canvas.addEventListener( 'load', function( _event )
	{
		var doc = canvas.contentDocument;

		var tryCnt = 0;
		var timerId = setInterval( function()
		{
			++tryCnt;
			if ( tryCnt > 30 )
			{
				clearInterval( timerId );
				return;
			}

			var searchField = doc.getElementsByTagName('input')[0];
			var searchBtn = doc.getElementsByTagName( 'button' )[0];

			if ( searchField )
			{
				clearInterval( timerId );

				var toggleBtn = doc.createElement( 'button' );
				toggleBtn.type = 'button';
				toggleBtn.innerHTML = format;
				toggleBtn.addEventListener( 'click', function()
				{
					if ( searchField.value.indexOf( format ) == -1 )
					{
						searchField.value += ' ' + format;
					}
					else
					{
						searchField.value = searchField.value.replace( /\s*is:unread\s*/, ' ' );
					}

					searchBtn.click();

				}, false );

				searchBtn.parentNode.appendChild( toggleBtn );
			}

		}, 1000 );

	}, false );
})();

2008-05-03

VAIO typeT でミドルクリック

以前、ノートPCはミドルクリックがなくてちょっと困ってるようなことを書いてたりしたんですが、ありました普通に。そりゃあるよね。コントロールパネルからマウスプロパティを開いて、ボタンの設定で左右の同時押しをオートスクロールに設定。それと、[機能]タブにも左コーナーの設定というものがあり、ここもオートスクロールにしておいた。

言い訳すると、オートスクロールってのがピンと来なかったため、今まで気づいてなかったという。。。しかし、設定してみたものの、やはりマウスのミドルクリックには及ばないというか、あまり使いやすくはない・・・素直にマウス使えってことなのだろうか。しばらく使ってみて慣れればそれなりに使えるようになるといいんだけど。

2008-04-20

TracのTagsPluginのテンプレートを日本語化

TracWikiやTicketにタグをつけられるようにするプラグインTagsPluginの表示を日本語化してみた。ここのTrac0.10用のtagswiki.csファイルを変更するだけでOK。Trac日本語版wiki.csテンプレートとほぼ変わらないので、それをベースにして書き換えたものをdiffとってみました。

テンプレートの変更なので表示を日本語にするだけで、タグに日本語を使えない問題が解決するわけではないです。ここらへんも直せれば直したいところだけど。

続きを読む

2008-04-18

explicitOriginalTarget

フォームのonsubmitのイベントハンドラ内で、どこからSubmitされたのかを調べる方法について。

Firefoxはeventオブジェクトに explicitOriginalTarget という素晴らしいプロパティがあるのでそれを利用できる。IEはそんなもの存在しないので、現在アクティブな要素をとってきてあげるという方法で代用してたりするらしい。これが標準的なのかは分からないけれど、一応目的は達せられた。もっと良い方法がありそうだ・・・。

function getExplicitOriginalTarget( _event )
{
    return document.activeElement || _event.explicitOriginalTarget;
}

2008-04-17

wedata

Autopagerizeが0.0.27にバージョンアップしたのですが、今回の更新内容が素晴らしすぎる!ついに自由に書き換えられて、しかもJSONだけでなくJSONPでデータを吐き出してくれるデータベースサービスにSITEINFOが乗っかるようになりました。

そのデータベースサービスの名前は「wedata」。 Autopagerizeの作者の方謹製です。Wikiのように手軽にデータを書き換えられるのが特徴のWebDB。しかも、認証がOpenIDってのが良い。最近、ようやくOpenIDログインできるサービスが(自分の周りに)増えてきていて嬉しい限りです。あと、APIが当然のように用意されてるのもGood。

とにかく、これで好きなタイミングで自由にSITEINFO追加できるようになったのでちょこちょこコミットしていこうと思います。(まぁ、ちょこちょこなら以前からしてたわけですが・・・^^;)

wedata見てて、気になったのがAutoFocusというGreasemonkey。そんなのもあるのか。。。LDRizeのSITEINFOも誰かさんがあげてくれるだろうと思う(人任せw)ので、ここらへん界隈がもっと盛り上がりそうで非常に嬉しいですね!