2006-02-28 ========== flickr で CC じゃない写真を消す GM スクリプト --------------------------------------------- Reference URI: http://lowreal.net/logs/2006/02/28/2 Written Time: 2006-02-28T17:00:16+09:00 Tags: js gm [ignore-not-cc-photo.user.js](/2006/ignore-not-cc-photo.user.js) 実際は消すんじゃなくて半透明にします。適用先は他の人の写真一覧のページ (/photo/us ername/) 以下スクリプトの説明 実は 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_Photo に appendChild (一旦ノードは削除される) 5. また h4 がでてきたら DocumentFragment に突っ込む 6. ループ終わったら残ってる div.__GM_Photo も DocumentFragment に突っ込む 7. div.StreamView に DocumentFragment を appendChild (戻す) DocumentFragment は DOM (Document Object Model) における無名ノードみたいなもの。名前そのまんまだけど!!! appenChild は既に同じドキュメントにあるノードを追加するとき、一旦そのノードを取り除く。すな わち移動したいときはいちいち削除する必要はない。逆にコピーしたいときは cloneNode する必要がある。 そいでもって、Set がない場合は div.StreamView のクラス名に __GM_Photo を追加するだけしとく。 あとは、Set のあるなしに関わらず、CC (Creative Commons) の画像を含んでいない div.__GM_Photo にアレしてコレした的な何か。