2006年 06月 07日

はてダの編集テキストボックスを自動スクロールさせる GM

hatena-textarea-scroll.user.js

はてなの編集画面を開くたびにいちいち下までスクロールするのが面倒くさいので作った。ついでに編集画面開いたらキャレット位置を最後にしてフォーカスさせるようにした。すぐ書ける。編集しやすい。

Ajax でインラインエディットできたらいいんだけど

過去のページでもいけるように @include を書き換えました。

はてダの表示順を常に新しい順にする GM

hatena-newest-top.user.js

*t* 記法で書かれた日記やらブログを、新しい順にソートしなおします。

殆どテストしてない。*t* 記法使ってない場合どうなるかは知らない。

  • footnote (((..)) 記法) が上にきます。ひたすら appendChild しかしてないせいです。解決法:別によくね?

今時 *t* とか書かねぇよプププ らしいです! 編集設定の「見出しの時刻」を「保存する」にすると勝手に保存してくれるらしい。知らなかった><

このぐらいのスクリプトで30分かかってます。10分で開発とか普通に無理です。

ハッシュ指定で飛んでくると見失うので自動スクロールさせるよう修正した。

はてダの「続きを読む」を展開する GM

hatena-kill-seemore.user.js

「続きを読む」を展開して表示します。それだけです。完成度が低いです。複数の「続きを読む」が一日の中 (日記モード) にあるとまざります。

  • 「続きを読む」のリンク先ページに複数の展開された「続きを読む」部分 (a@name="seemore")があるとまざります。解決法:わからない。

このスクリプトも30分ぐらい。どうすればいいか微妙に悩んだ。


一つ前 とこれはのりさんのアイデアです。

諸事情により XMLHttpRequest 版も作りました。機能も何も変わりません。XPath は使えるけど GM_xmlhttpRequest は使えないという特異な環境ではこちらが動くはず。hatena-kill-seemore-XHR.user.js

GM_xmlhttpRequest のほうが名前以外はいいなぁ。

ブログモードかつその日の最後のセクションの場合余計な展開をしていたので修正

2006年 06月 03日

Youtube get_video, GreaseMonkey

get_video_youtube.user.js

普通に /watch のアクション部分に Save Video のリンクをつけるのと、/results の画面のビデオ一覧からも直接ダウンロードできるように。ポップアップ許可しないとだめ。

2006年 03月 02日

はてブと del.icio.us を同時に使うように

CGI 設置するのとかめんどいので xpost-del-hatena.user.js, GM スクリプトにした。

はてなの認証方法がややこしいので、はてなをメインにして、del.icio.us をスクリプトで同期するように。新規ブックマーク, 編集, 削除がそれぞれ del.icio.us にも反映される。ただ、編集の場合、del.icio.us で上にあがってしまう問題がある (はてなの編集画面にはポスト時刻が表示されないのでめんどい)。

最初なぜか API 使わないで実装してた。頭が悪い

ちょっと補足します。

Fx 1.5.0.1 + GreaseMonkey 0.6.4 ではとりあえず動いています。中身で無駄に E4X 使っているので、1.5 未満では絶対に動かないです。

ついでに動いてても何も言われません。淡々と del.icio.us に追加されたり削除されたりします。(最初の一回は del.icio.us の API Basic 認証がでます。これには del.icio.us のユーザ名とパスを入れます。)

del.icio.us 側の操作ははてブに反映されません。「はてなをメインにして」はそういう意味です。

2006年 02月 28日

flickr で CC じゃない写真を消す GM スクリプト

ignore-not-cc-photo.user.js

実際は消すんじゃなくて半透明にします。適用先は他の人の写真一覧のページ (/photo/username/)

以下スクリプトの説明

実は Set があるときとないときとで構造化の度合いみたいなのが違っててややこしい。具体的には Set がない人の一覧では div.StreamView 一個に対し、一つの写真と写真の情報が含まれる望ましい構造であるのに対し、Set がある人の一覧では、写真一覧が全部 div.StreamView 一個に含まれている。

ということで、Set がある場合とない場合にわけてる。きもいー。

Set がある場合、div.StreamView 以下の要素を一旦構造化する。

  1. DocumentFragment を作っておく。
  2. div.StreamView 以下列挙してループ
  3. h4 がでてきたら div (class="__GM_Photo") という要素を作る
  4. 他の要素だったら div.__GM_PhotoappendChild (一旦ノードは削除される)
  5. また h4 がでてきたら DocumentFragment に突っ込む
  6. ループ終わったら残ってる div.__GM_PhotoDocumentFragment に突っ込む
  7. div.StreamViewDocumentFragmentappendChild (戻す)

DocumentFragmentDOM における無名ノードみたいなもの。名前そのまんまだけど!!!

appenChild は既に同じドキュメントにあるノードを追加するとき、一旦そのノードを取り除く。すなわち移動したいときはいちいち削除する必要はない。逆にコピーしたいときは cloneNode する必要がある。

そいでもって、Set がない場合は div.StreamView のクラス名に __GM_Photo を追加するだけしとく。

あとは、Set のあるなしに関わらず、CC の画像を含んでいない div.__GM_Photo にアレしてコレした的な何か。