Google Calendar で自宅時間をグレーで塗りつぶす Greasemonkey



TIME HACKS!



TIME HACKS!

私は持ち時間を視覚で把握するために、自宅時間をグレーで塗りつぶしておくようにします。
(中略)
これをやっていなかったころは、スケジュール帳を眺めていると、
24時間すべて使えるかのような錯覚を覚えていました。
グレーに塗りつぶすことによって、自分の持ち時間を把握できるのが、このハックのポイント。
持ち時間が意外に少ない印象を受けるはずです。


一日は24時間あるのだけれど、頭がフルパワーで使える時間は意外と少ない。
作業の取り掛かりを早くするためにいいハックだと思ったので Greasemonkey で実現してみた。
インストールすると以下の画像のように、土日と朝と夜はグレーになる。



gcal_daytime.user.js をインストール

Opera 9.64 と Firefox 3 で動作確認している。


日曜始まり決め打ちでスクリプトを書いているので月曜始まりの人は適当に修正してください。
始業時間とか終業時間が違うよという人は

var start_work = 8;
var end_work = 18;

あたりを適当に修正してください。

実装の話

Google CalendarGreaseMonkey を書くにあたって
http://userscripts.org/scripts/show/7873
のコードを一部利用させてもらっている。
Opera で動かすために改悪したりもしている。


改悪の内容は w.hc という JavaScript 圧縮ツールが機械的に吐き出したであろう関数名を直接参照している点。
オリジナルのスクリプトでは、w[original.name] として関数名が出てこないように工夫されている。
しかし、Opera では関数オブジェクトの name プロパティから関数名を
取得できないため、この方法が使えない。

(function a(){}).name // Firefox では "a" が返るが Opera では Undefined

Opera で関数オブジェクトから関数名を取得する方法を誰か教えてくだしあ><
コメントで id:margin に教えてもらった!

(function foo(){}).toString().match(/^function (\w*)\(/m)[1] // => "foo"

素直に toString() 使えばよかったのね。
ということでスクリプトも更新。
id:margin どうもありがとうございました。

2009.04.11 追記

最近の Google カレンダーのアップデートで動かなくなっていたのを修正。
DOMNodeInserted イベントを捕まえているので Opera でひどく重くなってしまった。
でも気づかなかったことにする方向で!