PukiWikiで古いコメントを非表示にするグリースモンキースクリプト

タイトルの通り PukiWiki の pcomment モジュールを使っている場合に新着マーク New! がついていない古いコメントを、非表示にするグリースモンキースクリプトです。
pcomment を使って大量にコメントをやりとりしている場合に、古いコメントに返信が来たのが分かりづらいので古いコメントを消してくれます。
短時間で適当に作ったので動作がおかしかったらコメント等でお知らせください。
グリースモンキーなんて知らないよという人ははてなグリースモンキーあたりを読むと分かるかも。


ダウンロード「PukiWikiShowNewCommentsOnly.user.js


ソースは

// Copyright (C) 2006, higepon
// Released under the GPL license
// http://www.gnu.org/copyleft/gpl.html
//
// ==UserScript==
// @name           Pukiwiki Show Only New Comments
// @include        http://wiki.monaos.org/*
// ==/UserScript==
//
(function() {

     function fetchCommentDateSpans(root) {
         var spans = document.evaluate(
             './/span[@class="comment_date"]', root, null,
             XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null
         );
         return spans;
     }

     function isOldComment(comment_date) {
         return !comment_date.hasChildNodes() || comment_date.firstChild.nextSibling.className != "new1";
     }

     function hasNewCommentChildren(parent) {
         var children = fetchCommentDateSpans(parent);
         var childrenLength = children.snapshotLength;
         for (var i = 0; i < childrenLength; i++) {
             var c = children.snapshotItem(i);
             if (!isOldComment(c)) {
                 return true;
             }
         }
         return false;
     }

     function hideOldComments() {
         var spans = fetchCommentDateSpans(document.body);
         var spansLength = spans.snapshotLength;
         for (var i = 0; i < spansLength; i++) {
             var comment_date = spans.snapshotItem(i);
             var parent = comment_date.parentNode;
             if (isOldComment(comment_date) && !hasNewCommentChildren(parent)) {
                 parent.style.display = 'none';
             }
         }
     }

     hideOldComments();

})();