phpBBv3 Show Old Posts

By Glenn Carr Last update Mar 17, 2008 — Installed 201 times.
// ==UserScript==
// @name           phpBBv3 Show Old Posts
// @namespace      http://glenncarr.com/greasemonkey/phpbb
// @description    Shows posts older than 24 hours
// @include        *viewforum.php*
// $LastChangedRevision: 421 $
// $LastChangedDate: 2008-03-17 09:25:58 -0500 (Mon, 17 Mar 2008) $
// ==/UserScript==

/*
   This requires that your current phpBBv3 displayed date format (configurable in your UCP) be parseable by Date.parse()
   
   Updates:
   17-Mar-2008  Correctly skips cells without a date
*/
(function(){

String.prototype.stripTags = function() {
  return this.replace(/<\/?[^>]+>|&[^;]+;|^\s+|\s+$/gi,'');
}

var boardHome = document.evaluate( "//a[contains(@href, 'index.php')]", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null );
if ( boardHome.snapshotLength == 0 )
    return;

boardHome = boardHome.snapshotItem( 0 );

GM_xmlhttpRequest({
    method: 'GET',
    url: boardHome.href,
    onload: function( responseDetails )
    {
        var lastPosts = document.evaluate( "//dd[@class='lastpost']", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null );
        if ( lastPosts.snapshotLength == 0 )
            return;

        var currDateTime = responseDetails.responseText.match( /<p>It is currently ([^<]+)<\/p>/ )[ 1 ];
        var dt = new Date();
        var msCurrent = Date.parse( currDateTime );

        for ( var iLastPost = 1; iLastPost < lastPosts.snapshotLength; iLastPost++ )
        {
            var lastPost = lastPosts.snapshotItem( iLastPost );
            var m = lastPost.innerHTML.stripTags().match( /on (.*$)/i );
            if ( !m )
                continue;
            m = m[ 1 ];
            var msPost = Date.parse( m );
            var msDiff = msCurrent - msPost;
            var hoursDiff = msDiff / 1000 / 60 / 60;
            if ( hoursDiff >= 24.0 )
            {
                lastPost.style.background = '#ddd';
            }
            else
            {
                var hoursLeft = 24 - hoursDiff;
                var hours = Math.floor( hoursLeft );
                var min = ( '0' + Math.floor( ( hoursLeft - hours ) * 60 ) ).match( /(\d{2})$/ )[ 1 ];
                lastPost.getElementsByTagName( 'span' )[ 0 ].innerHTML += ' (' + hours + ':' + min + ')';
                if ( hoursDiff > 23.0 )
                {
                    lastPost.style.background = '#f90';
                }
                else if ( hoursDiff > 22.0 )
                {
                    lastPost.style.background = '#ff3';
                }
                else if ( hoursDiff > 21.0 )
                {
                    lastPost.style.background = '#ff6';
                }
                else if ( hoursDiff > 20.0 )
                {
                    lastPost.style.background = '#ff9';
                }
                else if ( hoursDiff > 12.0 )
                {
                    lastPost.style.background = '#ffb';
                }
            }
        }
    },
    });

})();