RtSeverityOrdering

By Yanick Champoux Last update Dec 31, 2007 — Installed 101 times.
// ==UserScript==
// @name           RtSeverityOrdering
// @version        0.05
// @author         Yanick Champoux <yanick+gm@babyl.dyndns.org>
// @namespace      http://babyl.dyndns.org/
// @description    Order RT bugs by severity
// @include        http://rt.cpan.org/Public/Dist/Display.html*
// @include        http://rt.cpan.org/Dist/Display.html*
// ==/UserScript==
//
// Changes
// 0.05 - Dec 31, 2007
// * put duct-tape over the id=\nXXX behavior of RT
//
// 0.04 - Dec 8, 2007
// * clicking a second time gives a reverse ordering
//
// 0.03 - Nov 27, 2007
// * adding 'Critical' level
//
// 0.02 - Nov 26, 2007
// * removed GM_logs
//
// 0.01 - Nov 26, 2007
// * initial release

// first, let's fix those pesky \n in the href
var links = document.evaluate( "//a[@href]", document, 
                   null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
                   null );

for ( var i = 0; i < links.snapshotLength; i++ ) {
    links.snapshotItem(i).href = 
        links.snapshotItem(i).href.replace( /id=\n/, "id=" );
}


var table = document.getElementsByTagName( 'table' )[0];
var rows = table.rows;
var header_row = rows[0];

var ordering = 1;  // 1 => normal ordering, -1 => reverse

if ( header_row.cells[3].innerHTML.match( /Severity/ ) ) {
        header_row.cells[3].innerHTML = 
            "<a id='orderSeverity' href='#dummy'>Severity</a>";
}

document.addEventListener( 'click', function( event ) {
    if( event.target.id != "orderSeverity" ) {
        return;
    }
    order_by_severity();
    ordering *= -1;
    event.stopPropagation();
    event.preventDefault();
}, true );

// --- utility functions ----------------------------------

function order_by_severity() {

    var data_rows = new Array;
    for( var i = 1; i < rows.length; i++ ) { data_rows.push( rows[i] ); } 

    data_rows.sort( by_severity );

    var data_rows_content = new Array();   
    for( var i = 0; i < data_rows.length; i++ ) {
        data_rows_content.push( data_rows[i].innerHTML );
    }

    for( var i = 1; i < rows.length; i++ ) { 
        rows[i].innerHTML = data_rows_content[i-1];
    } 

    return;
}

function by_severity( a, b ) {
    return ordering * ( severity_level( b ) - severity_level( a ) );
}

function severity_level( row ) {
    var severity = row.cells[3].innerHTML;

    // GM_log( severity );

    // GM_log( severity.match( /Important/ ) );

    return   severity.match( /Critical/    ) ?  5
           : severity.match( /Important/   ) ?  4
           : severity.match( /Normal/      ) ?  3
           : severity.match( /Unimportant/ ) ?  2
           : severity.match( /Wishlist/    ) ?  1 
           :                                    0
           ;
}