मीडियाविकि:Gadget-BugStatusUpdate.js

सूचना: सम्पादनहरू प्रकाशित गरेपछि, परिवर्तनहरू हेर्नको लागि तपाईंले आफ्नो ब्राउजरको क्यासलाई बाइपास गर्नुपर्छ। गुगल क्रोम, फायरफक्स, माइक्रोसफ्ट एजसफारी: Shift कुञ्जी थिचिराखेर रिलोड उपकरणपट्टी बटनमा थिच्नुहोस्।
/* 
 * 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( $( '<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 );