मीडियाविकि:Gadget-BugStatusUpdate.js
/*
* Bug Status Update Gadget
* Author: Rob Moen (robm)
* Description:
* Finds and updates bug status templates on a page.
* Makes 1 JSONP request to Bugzilla JSON RPC api.
* Source: [[mw:User:Robmoen/bugStatusUpdate.js]]
*/
( 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
$.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 && data.result.bugs ) {
for( var b in data.result.bugs ) {
// Find the right bug to update
$item = $( '.mw-trackedTemplate' )
.find( 'a[title^="bugzilla:' + data.result.bugs[b].id + '"]');
title = $( '.trakbug-'+data.result.bugs[b].id )
if ( title ) {
title.text( data.result.bugs[b].summary );
}
if( $item ) {
// Find child, if 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></p>' )
.append( $( '<span></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.replace( /_/g, ' ' ) );
$status = null;
}
}
}
}
});
})( jQuery );
Text is available under the CC BY-SA 4.0 license; additional terms may apply.
Images, videos and audio are available under their respective licenses.