Hatena::ブログ(Diary)

HM weblog

 | 

2006-04-20

はてなダイアリーの過去ログを日附昇順に竝べ替へるユーザスクリプト

「月別表示」にしたはてなダイアリー(http://d.hatena.ne.jp/sample/200408 といったURLで得られる)を時系列順にみ進めたいので書いたユーザスクリプト。正確には「日附昇順(古い記事が「上」) に」するのではなく單にび順を逆にするだけ。その結果として日附昇順になることを期待する物。idea:5504とかidea:6853りが實裝されたら用無し。DOM XPathが使へるUA(Greasemonkey等)向け。

// ==UserScript==
// @name           reverse Hatena Diary
// @namespace      http://d.hatena.ne.jp/mhrs/
// @include        http://d.hatena.ne.jp/*
// @include        http://*.g.hatena.ne.jp/*
// @exclude        http://*.hatena.ne.jp/asin/*
// @exclude        http://*.hatena.ne.jp/keyword/*
// ==/UserScript==

(function(){
  var url = /^http:\/\/([^.]+\.g\.|d\.)hatena\.ne\.jp\/([^\/]+)\/([0-9]+|searchdiary|\?of=).+/;
  url = window.location.href.match(url);
  if(url && !url[2].match(/^(asin|keyword)$/)) {
    var xpath = '/html/body/descendant::div[attribute::class="day"]/h2/a[attribute::href]';
    var nodes = document.evaluate(xpath, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
    if(nodes.snapshotLength == 0)
      return;
    var div = nodes.snapshotItem(0).parentNode.parentNode.parentNode; // <div class="main">
    div.insertBefore(nodes.snapshotItem(0).parentNode.parentNode,
                     nodes.snapshotItem(0).parentNode.parentNode.previousSibling);
    for(var i = 1; i < nodes.snapshotLength; i++) {
      div.insertBefore(nodes.snapshotItem(i).parentNode.parentNode,
                       nodes.snapshotItem(i-1).parentNode.parentNode);
    }
  }
})();
2006-05-23
URLが http://d.hatena.ne.jp/sample/?of=n の場合にも動くやうに正規表現を變更
2006-05-06
http://d.hatena.ne.jp/sample/sampleの部分がkeywordasinの場合、實行しないやうにした。
@name變更。以前のをGreasemonkeyでインストールしてゐた場合はメニューの「Tools→Manage User Scripts」にて「Uninstall」してからインストールしなほすか、ファイルを直接編輯、上書きしてください。直接編輯する場合、以前のはtypoがあったのでhtenadiarydaysreverse.user.js といふ名前で、プロファイルディレクトリ以下のgm_scriptsディレクトリに保存されてゐる筈です。
2006-05-03
正規表現が間違ってゐたので修正。
 | 
Connection: close