/*
* Bug Status Update Gadget
* Author: Donald Fortier (User:Technical_13)
* * Based on original code:
* ** Author: Rob Moen (robm)
* ** Source: [[mw:User:Robmoen/bugStatusUpdate.js]]
* Description:
* Finds and updates bug status templates on a page.
* Makes 1 JSONP request to Bugzilla JSON RPC api.
*/
(function($){
var ids = [], target = 'https://bugzilla.wikimedia.org/jsonrpc.cgi';
// // Ugly way to compose the request parameters. Though, bugzilla is happy with it.
var getParams = function ( ids ) {
return 'method=Bug.get&id=158¶ms=[{ "ids": [' + ids.join(',') + '],"include_fields":["last_change_time","status", "id", "summary"]}]';
};
// // Get the bug id numbers on the page
$( '.mw-trackedTemplate' ).each( function() {
var title = $( this ).find( 'a[title^="bugzilla:"]' ).attr( 'title' );
ids.push( title.split( ':' )[1] );
});
// // Do not query if no ids were found
if ( !ids.length ) {
return;
}
// Make jsonp request
$.ajax({
url: target,
dataType: 'jsonp',
data: getParams( ids ),
success: function ( data ) {
var color = {
"RESOLVED": "green",
"CRITICAL": "red"
},
statusProps = {
'font-weight': 'bold',
'font-size': '1.5em',
'text-transform': 'uppercase'
};
if ( data.result.bugs ) {
for( var b in data.result.bugs ) {
// //find the right bug to update
var $item = $( '.mw-trackedTemplate' ).find( 'a[title^="bugzilla:' + data.result.bugs[b].id + '"]' );
var title = $( '.trakbug-' + data.result.bugs[b].id );
if( title ) {
title.text( data.result.bugs[b].summary );
}
if( $item ) {
// // Find child, if it exists.
$status = $item
.parent()
.next( 'p' )
.children( 'span' );
// //create the status element if it does not exist
if( $status.length === 0 ){
$item
.parent()
.parent()
.append(
$( '<p />' ).append(
$( '<span />' ).css( statusProps )
.text( 'Status' )
)
);
}
// // Udpate the status element.
$item
.parent()
.next( 'p' )
.children( 'span' )
.css( 'color', color[data.result.bugs[b].status] || '#333333' )
.text( data.result.bugs[b].status );
$status = null;
}
}
}
}// End of success:
});
})(jQuery);