swk's log 最新ページ

bl2clog - from swk's log

2006-10-08 Sun

* (再改版) bloglines のアイテムをまとめて ChangeLog メモに変換する bookmarklet [logging][firefox][bl2clog][bloglines] 2 users

ついで [2006-10-08-2] に bloglines アイテムをクリップボードにコピーする方も改版.こちらは bloglines の変更じゃなくて,Firefox の変更に対する対応になっていると思う.変更箇所は

  • setClipboard が,やっぱりフレームの有るページでは動かなくなっているっぽい.以前入れた対策 [2006-04-22-1] を戻した (ていうか今までのも,ソース表示では省略していただけで実は残していた)
  • 単に a.firstChild.nodeValue とするだけではタイトルを取りこぼすようになった.以前 [2006-07-05-2] 書いた extractText() を使うことにした.

というわけで以下を bookmark してください.

javascript:(function(){
/*
 setClipboard for Firefox
 LastModified : 2006-01-10
 http://la.ma.la/misc/js/setclipboard.txt
*/
function setClipboard(text){
        var url = [
                'data:text/html;charset=utf-8;base64,PGJvZHk+PC9ib2',
                'R5PjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKGZ1',
                'bmN0aW9uKGVuY29kZWQpe3ZhciBzd2ZfZGF0YSA9IFsKICdkYX',
                'RhOmFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoO2Jhc2U2',
                'NCxRMWRUQjJ3JywKICdBQUFCNG5EUGdZbGpBd01qSTRNejAlMk',
                'YlMkY5JTJGZTJaZkJnYUdhV3dNRE1uNUthJywKICdrTU10TjRH',
                'ZGdaZ1NJTXdaWEZKYW01UUFFJTJCQm9iaTFCTG5uTXlDcFB6RW',
                '9oU0dJJywKICdQRnAlMkZBeHNEREJRa3BGWkRGUUZGQ2d1eVM4',
                'QXlqSTRBRVVCaXkwVndBJTNEJTNEJwpdLmpvaW4oIiIpOwpkb2',
                'N1bWVudC5ib2R5LmlubmVySFRNTCA9IFsKICc8ZW1iZWQgc3Jj',
                'PSInLHN3Zl9kYXRhLCciICcsCiAnRmxhc2hWYXJzPSJjb2RlPS',
                'csZW5jb2RlZCwnIj4nLAogJzwvZW1iZWQ+JwpdLmpvaW4oIiIp',
                'Owp9KSgi',btoa(encodeURIComponent(text)+'")</'+'script>')
        ].join("");
        var tmp = document.createElement("div");
        tmp.innerHTML = '<iframe src="'+url+'" width="0" height="0"></iframe>';
        with(tmp.style){
      	  position ="absolute";
      	  left = "-10px";
      	  top  = "-10px";
      	  visibility = "hidden";
        };
        
        var b;
        try { /* modified by swk */
            b = top.frames[0].document.body;
        } catch (e) { 
            b = document.body;
        }
        b.appendChild(tmp);
        setTimeout(function(){b.removeChild(tmp)},1000);
}
function extractText(node) {
    var text = '';
    if (node.nodeType == 3) { /* TEXT_NODE */
        text = node.nodeValue;
    } else if (node.hasChildNodes()) {
        var n = node.childNodes.length;
        for (var i = 0; i < n; i++) {
            text = text + extractText(node.childNodes[i]);
        }
    }
    return text;
}
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(extractText(a), a.href);
}
setClipboard(clog);
})();

しかしこう bloglines や Firefox に仕様変更がある度に振り回されるのは何とかならんものか.何か根本的に方針を間違っている気がしないでもないなあ.

関連記事:
[2006-07-08-1] bloglines の keep new をまとめて解除する bookmarklet
[2006-04-22-1] (改版) bloglines のアイテムをまとめて ChangeLog メモに変換する bookmarklet
[2006-02-11-1] bloglines のアイテムをまとめて ChangeLog メモに変換する bookmarklet

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)

2006-04-22 Sat

* (改版) bloglines のアイテムをまとめて ChangeLog メモに変換する bookmarklet [logging][firefox][bl2clog][bloglines]

以前公開して [2006-02-11-1],その後 Firefox 1.5.0.1 だと動かないことが判明した [2006-03-08-2] bloglines to ChangeLogMemo な bookmarklet ですが,Firefox が 1.5.0.2 に自動更新されてから試してみたところ,普通に動くことが判明.なんですかこれ.

実はちょうど動かない原因を調査していて,回避策が分かった矢先だった. Firefox のJavaScript コンソールによると,フレームのあるページで document.body.appendChild と document.body.removeChild を呼び出そうとすると

エラー: uncaught exception: [Exception... "Node was not found" code: "8" nsresult: "0x80530008 (NS_ERROR_DOM_NOT_FOUND_ERR)" location: (コード略) Line: 1"]

となっていたらしい.

バグフィクスリストを見ても,とくに該当しそうなものに見当がつかないんだけどな.まいいか.


というわけで,Firefox 1.5.0.1 で動かさない限りは動作は変わりませんが,一応新しいの置いておきます.

以前のは,sacja TTT-protokolo さんの bookmarklet が元ネタでしたが,上記の原因調査の過程で,そのさらに元ネタである 最速インターフェース研究会さんの に遡りました.

中身は

javascript:(function(){

function setClipboard(text){
  (略)
}

var src = top.frames[1].document.body.innerHTML;
var pat = /<h3><a title=%22.*href=%22(.*)%22 target=%22_blank%22>(.*)<\/a>.*<\/h3>/g;
var clog = '';
var result;
while ((result = pat.exec(src)) != null) {
  clog = clog + '\r\n\t* ' + result[2] + ':\r\n\t- ' + result[1] + '\r\n';
};
setClipboard(clog);

})();

setClipboard() の中身は http://la.ma.la/misc/js/setclipboard.txt です.途中の appendChild, removeChild するところをいじってますが,敢えて Firefox 1.5.0.1 で使わない限りはオリジナルのままでよいです.

ChangeLog じゃなくて他のフォーマット変換したいときは clog = clog + ... のあたりを適当に.

関連記事:
[2006-10-08-3] (再改版) bloglines のアイテムをまとめて ChangeLog メモに変換する bookmarklet
[2006-07-08-1] bloglines の keep new をまとめて解除する bookmarklet
[2006-03-08-2] Firefox 1.5.0.1 にしてみたら
[2006-02-11-1] bloglines のアイテムをまとめて ChangeLog メモに変換する bookmarklet
[ コメントを全部見る / コメントを書く] [ TrackBack ( )] [固定リンク]

* [Nickey] The expertise shines through. Thanks for... (2012-12-30 17:30:07)

2006-02-11 Sat

* bloglines のアイテムをまとめて ChangeLog メモに変換する bookmarklet [logging][firefox][bl2clog][bloglines] 13 users

新しくなりました.こちらへ [2006-10-08-3]


bloglines で開いているフィードのアイテムをごっそり ChangeLog 形式に変換して,クリップボードへコピーする bookmarklet を書いてみた.ただし firefox 専用.

書いてみたというか,下記の「ページタイトル+選択文字列+リンクを clipboardにコピーするbookmarklet」をちょっと書き換えてみただけです. bl2clog() って関数が新しいところで,他はほとんど同じ.

bl2clog() の中の clog = clog + ... のところをいじれば,違う出力フォーマットにも簡単に対応できるはず (実際,自分では ChangeLog とはちょっと違うフォーマットでメモを取っている).

JavaScript は読むことも書くこともできないので,なんか変なことやってる可能性大.実際,正規表現で力まかせに処理しているのがちょっとダサい感じ.bloglines のページ構成が変わったらアウト.もっと真面目に element や attribute を抽出するのが正しいんだろうなとか思うのだけど,まあ当面はこれでいいか.

最近は,気になったアイテムはとりあえず keep new しておいて,時間があるときにまとめて読むことが多いんだけど,ふと気づくと数十個 keep new されていて自分のメモに転記するのも億劫になってしまう(で,さらにたまる).というわけで,keep new なものをまとめて自分メモに変換する手段が欲しかった.

ついでに keep new の一斉解除もできるといいんだけど,どうすればいいのかな… (追記: できました [2006-07-08-1])

(追記) Firefox 1.5.0.1 だと動かないようです [2006-03-08-2].付け焼き刃なのでどこをどう直せばよいのかさっぱり分かりません…

(追記) Firefox 1.5.0.2 だと普通に動くようです [2006-04-22-1].なんだかさっぱり分かりません.

関連記事:
[2006-07-08-1] bloglines の keep new をまとめて解除する bookmarklet
[2006-04-22-1] (改版) bloglines のアイテムをまとめて ChangeLog メモに変換する bookmarklet
[2006-03-08-2] Firefox 1.5.0.1 にしてみたら
[ コメントを全部見る / コメントを書く] [ TrackBack ( 1 )] [固定リンク]

* [erargedadjumn] Bowling TowelsTowels are important and u... (2017-03-29 23:40:55)

* [rokalkacleGab] If you are going to themotion pictures, ... (2017-03-29 18:56:19)

* [jemiamacede] If, on the contrary, you use a smaller p... (2017-03-29 03:46:49)

* [BlinelmBera] A couple of years ago, the thought of ma... (2017-03-29 03:43:12)

* [rokalkacleGab] The company has a large product collecti... (2017-03-28 18:31:42)

* ...

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


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