MediaWiki: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&params=[{ "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( $( ' ' )									.append( $( '  ' ) .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; }				}			}		}	}); })( jQuery );