User:Robmoen/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. * */

(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"]}]';	};	//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]); });   if( ids.length === 0 ) 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.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+'"]');

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);