2007年 12月 20日

Haiku のはてスタのリンク先を Haiku のユーザページにする GM

やっつけ

// ==UserScript==
// @name        Jump to haiku user page on clicking star
// @namespace   http://lowreal.net/
// @include     http://h.hatena.ne.jp/*
// ==/UserScript==

location.href = "javascript:"+encodeURIComponent(uneval(function () {
	Hatena.Star.User.prototype.userPage = function () {
		return "/" + this.name + "/";
	};
}))+"()";

Greasemonkey / prototype かきかえ / Fx3

b2 + GM 1208 でもだめだなぁ。

GM_* 系のをつかっていないなら、

location.href = "javascript:"+encodeURIComponent(uneval(function () {
body
}))+"()";

でかこえば使えるけど、めんどくさい

gerry++

なんでだろ……

2007年 12月 19日

Firefox 3.0 b2

いれた。常用プロファイル続行

Tree Style Tab と Stylish は install.rdf のバージョン書きかえでうごく

Haiku のキャンバスリサイザ (縦だけ)

このスクリプトを script appendChild するようなブックマークレットかけばブックマークレットにもなるとおもう。図みたいなの書きたいときはデフォのキャンバスだとかなしいのでかいてみた。(書きはじめてからのリサイズはできません)


Greasemonkey からページ内コンテキストでJS実行するときのイディオム (こうするとシンタックスハイライトきかしたまま自由な感じに書ける)

location.href = "javascript:"+encodeURIComponent(uneval(function () {
...
}))+"()";

縮小されるときは fotolife の設定確認

オフィシャルで対応されたのでもう必要ありません。

2007年 12月 17日

Haiku の Reply を全部展開する Greasemonkey

Reply がついたエントリや、あるエントリへの Reply の本文部分をクリックで全部展開してツリーにします。

親と子は同時に展開を開始しますが、二度目以降の展開は一応 1sec ウェイトを入れてます。

複数 reply のとき順がくずれると思うんですがあんまりそういうケースないのでなんもやってないです (テストケースがみつからなかったし、そんなのわざわざつくるのもアレ)

  • 体感ロードスピードをあげた (全体では遅くなるけど)
  • はてなスターを適用するように
  • いろいろ変更した
  • 同じページに展開エントリがある場合はそれを移動して展開

HTTP リクエストが一部の展開で劇的に減るはずです (キーワードページでの展開はだいたいリクエストなしでいけるかな)

二個以上の返信ついてる場合とかはてスタが多重ロードされますがめんどくさいので気がむいたら対応します。

あとたまに Node cannot be inserted がでるかもしれませんが安定して再現するページがみつからないので放置してます。

スター適用するとき一時的にエントリ1つを唯一子にもつ親をつくることで重複しないようにしました

Expand リンクをつけるようにした。

2007年 12月 16日

Haiku でイラストを投稿するとき、コメントも一緒にいれられるようにする

(他のスクリプトより先に読みこむ必要あり)

オリジナルの postDrawing を上書きして、イラスト投稿のときに、そのままポストではなくテキストとして URL を挿入する。


最初めんどくさがって

with (unsafeWindow) {
Hatena.Haiku.EntryForm.postDrawing = function (uri) {
	if (!uri) return;
	var form = Hatena.Haiku.EntryForm.currentForm;
	if (!form) return;
	form.textarea.value += uri;
	form.submit.disabled = false;
	form.showTextForm();
	// form.form.submit();
};
}

とかやってたんだけど、これだと他のユーザJSがこの関数を実行しようとしたとき (?) にセキュリティエラーがでてしまう。

javascript: によるロードとかいろいろためしたけどうまくかなくて、結局こうしてみたらうまくいった……

2007年 12月 15日

はてなハイクのお絵描き機能で fotolife の変わりに tumblr をつかう

fotolife は容量制限が厳しくて、落書きを大量に投稿する、というときちょっと不安 (制限に逹っしたとき、消さないといけないなぁという不安) があるので、tumblr を使うようにする userscript を書きました。(月別の容量制限とかならいいんだけどなぁ)

(イラスト投稿を確実にする GM より前に実行する必要があります)

といっても、tumblr はいまいち安定感 (いろんないみで) がないように思えるのでなんともいえない……

URL をうけとって保存してくれるサービス/そういうAPIがあるサービスなら簡単に対応できるんですが、そういうのあんまないっすね……

postDrawing がよばれないことが多々ある、そういうときはブックマークレットでよぶ

javascript:Hatena.Haiku.EntryForm.postDrawing("fotolife の該当画像の URL");

書きはじめてから一定時間おきに fotolife の feed を監視して投稿する、みたいなのをつくろうとおもったけど、二重投稿とか考えるのがめんどくてやめた……

Firefox3 の Greasemonkey, unsafeWindow 内の prototype がとれない

なぜかわからないけど unsafeWindow 中のオブジェクトの prototype がとれないっぽい……

unsafeWindow.Hatena.Haiku.EntryForm.prototype //=> undefined

でもって回避しようとして以下のようなコードを書いてみたけど

	function unsafeeval (code) {
		var d = new Deferred;
		unsafeWindow.___eval = arguments.callee;
		arguments.callee.callback = function (r) {
			delete unsafeWindow.___eval
			d.call(r);
		};
		unsafeWindow.location.href = "javascript:"+encodeURIComponent("___eval.callback("+code+")");
		return d;
	}

	unsafeeval("Hatena.Haiku.EntryForm.prototype").
	next(function (proto) {
		alert(proto.showDrawForm); // とれてる
		proto.showDrawForm = function () {
			alert("aaa"); // 実行されない orz
		};
		alert(proto.showDrawForm); // かきかえはできてる
	});

って感じになる。javascript:alert(Hatena.Haiku.EntryForm.prototype.showDrawForm) するとちゃんと設定された関数が表示されるんだけど、実行はされない (もとの関数はもちろんよばれない)。だれかたすけて>< これは Fx のバグ?

prototype 以外への書きかえはもちろんうごく……

Haiku のイラスト投稿を確実にする Greasemonkey script

postDrawing がたびたびよびだしされないので、fotolife を GM_xhr で監視して投稿するようにするスクリプトです。

流れは

  1. ページロード時に fotolife のフィードを取得 (ほんとはおえかきに切り替えしたときにしたいけど、prototype かきかえができない……)
  2. currentForm がセットされるのを監視 (Haiku! をおすとセットされる)
  3. セットされたら fotolife のフィードを監視開始
  4. ページロード時の状況と比較して、増えたものをハイクから投稿されたものとみなし、postDrawing をキック

tumblr に投稿しなおすスクリプトより後に実行する必要があります。

なかなか投稿できないなぁってときは API がエラーだしていたりするので http://f.hatena.ne.jp/rkatom/feed にアクセスして確認してみるとよいかもです