delete tumblr on Minibuffer
http://d.hatena.ne.jp/Constellation/20080405/1207403014
// ==UserScript== // @name DeleteCommand // @namespace http://d.hatena.ne.jp/Constellation/ // @description delete tumblr on Minibuffer // @include http://www.tumblr.com/dashboard* // @include http://www.tumblr.com/show* // @version 0.0.1 // ==/UserScript== if(!window.Minibuffer) return; //Minibufferの存在確認。もはやお約束。 var $X = window.Minibuffer.$X; //$X関数を参照。でも参照しときながら使わなかった。 // Tumblr::Deleteのコマンドを登録 window.Minibuffer.addCommand({ name : 'Tumblr::Delete', command : function(stdin){ //渡されてくるものをstdinとして受け取る。あとでpinされたnodeのnodelistを投げるつもり。 stdin.forEach(function(obj){ //forEachでlistそれぞれのnodeに実行。objでそれぞれのnodeを受け取ってます。 if (obj.className.match(/is_mine/)){ // 渡されたnodeのクラスにis_mineがはいっているか確かめている。入っていなかったら他人のエントリなので{}の中身を実行しない。今考えるとindexOfのほうが効率がよかった。 var id = obj.id.match(/post([\d]+)/)[1]; // Deleteのための必須情報、Tumblrのエントリのidを手に入れる。 window.Minibuffer.status('DeleteCommand'+id, 'Delete...'); //status情報表示。上でやったやつです。 var data = encodeURIComponent('id') + '=' + encodeURIComponent(id); //手に入れたidからdeleteするためにpostするときのdataを作成。 //GM_xmlhttpRequestに投げるオブジェクト。 //自分はGM_xmlhttpRequest内に直接書くのが嫌なのでいつもopt作ってから投げてます。 //optの中身の諸情報についてはGM_xmlhttpRequestの説明を探してください。 var opt = { method: 'POST', url: 'http://www.tumblr.com/delete', headers : { 'Content-Type' : 'application/x-www-form-urlencoded' }, data: data, //onload内にはRequestが帰ってきてからの処理が書いてあります。 //逆に言えばここの中身が実行されるのは、POSTが成功し、終了したときです。 //引数のresはGM_xmlhttpRequestのresponseオブジェクトです。 //POSTの場合なのでこの場合はあまり使いませんが。 onload: function(res){ window.Minibuffer.status('DeleteCommand'+id, 'Delete... done.', 100); //さっきのstatusを更新し、Deleteが成功したことを明示します。 }, } GM_xmlhttpRequest(opt); //GM_xmlhttpRequestを実行しています。 } }); }, }); //以下がショートカットキー登録です。 window.Minibuffer.addShortcutkey({ //Shift+Dにショートカットキーを設定。 key: 'D', description: 'Tumblr::Delete', // 説明文 command: function(){ var stdin = []; //nodelistがなかったときに備えてからの配列を宣言。 try{ //LDRizeに標準で入っているpinned-or-current-nodeコマンドを実行 //このコマンドは、pinしているものがあったらそのnodelistを、 //なかったら今さしているnodeをlistとして返します。 //何にもなかった場合に備えてtryで実行 //そしてそのnodelistをstdinで参照しています。 stdin = window.Minibuffer.execute('pinned-or-current-node'); } catch (e){} //Tumblr::Deleteコマンドを実行。 //nodelistのstdinを渡しています。 window.Minibuffer.execute('Tumblr::Delete', stdin); //終わった後Minibuffer標準搭載のclear-pinコマンドを実行し、pinをclearしています。 window.Minibuffer.execute('clear-pin'); } }); //debug用 function log (e){ GM_log(e) }