swk's log 最新ページ

unkeepnew - from swk's log

2006-10-08 Sun

* (改版) bloglines の keep new をまとめて解除する bookmarklet [logging][unkeepnew][bloglines] 2 users

いろいろ文句言いながらも,しつこく bloglines 使ってます.

以前書いた keep new を解除する bookmarklet [2006-07-08-1] が動かなくなっていたので修正.

今までの bloglines では keep new のチェックボックスをクリックするとそのたびにページ遷移が発生していたのだけど,最近 Ajax 対応したらしくページ遷移しなくなった.というわけで bookmarklet の方で自前で Ajax 化する必要はなくなって,本家が用意してくれている JavaScript 関数を呼びまくるだけでよい.ずいぶんシンプルになった.

javascript:(function(){
var ipts = top.basefrm.document.getElementsByTagName("input");
for (var i = 0, k = 0; i < ipts.length; i++) {
    if (ipts[i].type == "checkbox"
        && String(ipts[i].onclick).match(/markUnreadItem\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,.*\)/)
        && ipts[i].checked == true) {
        var siteid = RegExp.$1;
        var subid = RegExp.$2;
        var itemid = RegExp.$3;
        
        ipts[i].checked = false;
        top.treeframe.keepItem(siteid, subid, itemid, false);
    }
  }
})();
関連記事:
[2006-10-08-3] (再改版) bloglines のアイテムをまとめて ChangeLog メモに変換する bookmarklet
[2006-07-08-1] bloglines の keep new をまとめて解除する bookmarklet
[ コメントを全部見る / コメントを書く] [ TrackBack ( )] [固定リンク]

* [Pragnesh] Wow, this is in every rseepct what I nee... (2013-01-01 19:28:22)

2006-07-08 Sat

* bloglines の keep new をまとめて解除する bookmarklet [logging][firefox][bl2clog][unkeepnew][bloglines]

改版しました [2006-10-08-2]


他人様のコードをいじっているうちに [2006-07-05-2] [2006-07-05-3] 何となく勘がつかめてきたような気がするので,調子に乗って懸案事項に手をつけてみる.

以前,bloglines で表示中の記事のタイトル名,URL をまとめてクリップボードにコピーする bookmarklet (Firefox 専用) を書いた [2006-02-11-1] [2006-04-22-1].これ使うときは,

  • 気になった記事をさくさく keep new していく
  • 最後にまとめて bookmarklet でクリップボードにコピー
  • その後,keep new された記事を 1 個ずつ解除 (← ここがイヤ)

という流れが多くて,何とかならんかなと思ってたのだ.

というわけでこんな感じ.

onload を使っているので MSIE では動作しないはず.直すのは簡単だと思うけど,とりあえず放置.

ソース:

javascript:(function(){

function phandler (paths) {
  if (paths.length < 1) {
    return;
  } else if (paths.length == 1) {
    top.treeframe.location = paths[0];
    return;
  }
  var p = paths.shift();
  var xhr = new XMLHttpRequest();
  xhr.onload = function () { phandler(paths); };
  xhr.open('GET', p, true);
  xhr.send(null);
}

var paths = new Array;
var ipts = top.basefrm.document.getElementsByTagName("input");
for (var i = 0, k = 0; i < ipts.length; i++) {
  if (ipts[i].type == "checkbox"
      && String(ipts[i].onclick).match(/markUnreadItem\(\s*(\d+)\s*,\s*(\d+)\s*\)/)
      && ipts[i].checked == true) {
    var subid = RegExp.$1;
    var itemid = RegExp.$2;
    ipts[i].checked = false;
    paths[k++] = '/myblogs_subs?ui=1&subid='+subid+'&itemid='+itemid;
  }
}
phandler(paths);
})();

期せずして Ajax デビューしてしまった.(XML 使ってないから Aj デビューか?)

やってることは単純で,keep new のチェックボックスについている onclick 属性から,その記事の subid と itemid を取り出して,それらからパス名 '/myblogs_subs?ui=1&subid='+subid+'&itemid='+itemid を生成して,GET しに行っている.

bloglines で実際に keep new のボタンを押した場合は, parent.treeframe.location にこのパス名を直接代入するコードが実行されるのだけど,複数の記事についてこれを単純に繰り返すと,前のやつの読み込みが終わる前に次のやつを読みに行ってしまってうまく行かない.というわけで XMLHttpRequest を使ってみた.

(open の第3引数を false にすればもっと簡単に書けるかと思ったけど,そうすると解除がすべて終わるまで操作を受け付けなくなってしまって,使いにくかった)


ついでなので,まとめてクリップボードにコピーする方もちょっとだけ書き直しておく.以前のは正規表現で無理矢理抽出してたけど,真面目に DOM ツリーをたどるようにした.

ソース:

javascript:(function(){
function setClipboard(text){
    /* 省略 (http://la.ma.la/misc/js/setclipboard.txt) */
}
function fmt(title, href) {
    return '\r\n\t* ' + title + ':\r\n\t- ' + href + '\r\n';
}
var clog = '';
var h3s = top.basefrm.document.getElementsByTagName("h3");
for (var i = 0; i < h3s.length; i++) {
    var a = h3s[i].getElementsByTagName("a")[0];
    clog = clog + fmt(a.firstChild.nodeValue, a.href);
}
setClipboard(clog);
})();

ChangeLogメモ以外の形式に変換したい場合は,fmt() の中身を適当にいじってください.

関連記事:
[2006-10-08-2] (改版) bloglines の keep new をまとめて解除する bookmarklet
[2006-08-16-1] うっかり Flash Player 9 を入れてしまったので 8 に戻す
[2006-08-07-2] なんか bloglines が全然ダメな件
[2006-04-22-1] (改版) bloglines のアイテムをまとめて ChangeLog メモに変換する bookmarklet
[2006-02-11-1] bloglines のアイテムをまとめて ChangeLog メモに変換する bookmarklet
[ コメントを全部見る / コメントを書く] [ TrackBack ( )] [固定リンク]

* [Sandroo] An inetlglinet point of view, well expre... (2013-01-01 20:46:17)

最終更新時間: 2009-01-04 15:31


Shingo W. Kagami - swk(at)kagami.org