MediaWiki:Gadget-ProgressLevel.js

Origem: Wikilivros, livros abertos por um mundo aberto.

Nota: Depois de publicar, poderá ter de contornar a cache do seu navegador para ver as alterações.

  • Firefox / Safari: Pressione Shift enquanto clica Recarregar, ou pressione Ctrl-F5 ou Ctrl-R (⌘-R no Mac)
  • Google Chrome: Pressione Ctrl-Shift-R (⌘-Shift-R no Mac)
  • Internet Explorer / Edge: Pressione Ctrl enquanto clica Recarregar, ou pressione Ctrl-F5
  • Opera: Pressione Ctrl-F5.
/*  _____________________________________________________________________________
 * |                                                                             |
 * |                    === AVISO: ARQUIVO DE GADGET GLOBAL ===                  |
 * |            Alterações a esta página afetarão vários colaboradores           |
 * |            Por favor discuta alterações na página de discussão ou           |
 * |                    em [[Wikilivros:Gadgets]] antes de editar.               |
 * |_____________________________________________________________________________|
 *
 * Adiciona uma imagem ao lado direito do título de cada modulo, para indicar sua etapa de desenvolvimento (obtida a partir do Índice).
 */
var parentPages;
window.findProgressLevel = function( res ) {
	var baseUrlImg = '//upload.wikimedia.org/wikipedia/commons/thumb/';
	var progress = {
		'0' : { 'img': '9/93/0de8.svg/25px-0de8.svg.png', 'txt': 'O desenvolvimento desta página está na etapa 0 de 8' },
		'1' : { 'img': '9/93/1de8.svg/25px-1de8.svg.png', 'txt': 'O desenvolvimento desta página está na etapa 1 de 8' },
		'2' : { 'img': '9/93/2de8.svg/25px-2de8.svg.png', 'txt': 'O desenvolvimento desta página está na etapa 2 de 8' },
		'3' : { 'img': '9/93/3de8.svg/25px-3de8.svg.png', 'txt': 'O desenvolvimento desta página está na etapa 3 de 8' },
		'4' : { 'img': '9/93/4de8.svg/25px-4de8.svg.png', 'txt': 'O desenvolvimento desta página está na etapa 4 de 8' },
		'5' : { 'img': '9/93/5de8.svg/25px-5de8.svg.png', 'txt': 'O desenvolvimento desta página está na etapa 5 de 8' },
		'6' : { 'img': '9/93/6de8.svg/25px-6de8.svg.png', 'txt': 'O desenvolvimento desta página está na etapa 6 de 8' },
		'7' : { 'img': '9/93/7de8.svg/25px-7de8.svg.png', 'txt': 'O desenvolvimento desta página está na etapa 7 de 8' },
		'8' : { 'img': '9/93/8de8.svg/25px-8de8.svg.png', 'txt': 'O desenvolvimento desta página está na etapa 8 de 8' },
		'00' : { 'img': 'd/d6/00%25.svg/25px-00%25.svg.png', 'txt': 'Esta página está 0% desenvolvida' },
		'25' : { 'img': '3/34/25%25.svg/25px-25%25.svg.png', 'txt': 'Esta página está 25% desenvolvida' },
		'50' : { 'img': 'c/c2/50%25.svg/25px-50%25.svg.png', 'txt': 'Esta página está 50% desenvolvida' },
		'75' : { 'img': '4/49/75%25.svg/25px-75%25.svg.png', 'txt': 'Esta página está 75% desenvolvida' },
		'100' : { 'img': 'c/ce/100%25.svg/25px-100%25.svg.png', 'txt': 'Esta página está 100% desenvolvida' }
	};
	var level = null,
		matches, //Used for keeping regex matches
		match, //Used for keeping a specific regex matches
		wikitext, //Text of a page
		reTextChapterTitle,
		reTextChapterLink,
		reTextLeftRightLevel,
		reTextGroupedLevel,
		reChapter,
		pages,
		page, //A specific page or index of page
		parentPageNames,
		sortable = [];

	pages = res.query.pages;
	parentPageNames = decodeURIComponent( parentPages ).split('|');
	for ( page in pages ) {
		if ( pages[ page ].missing !== '' && pages[ page ].revisions && pages.hasOwnProperty( page ) ) {
			sortable.push([
				pages[ page ].revisions[0]['*'], //Wiki code of page
				parentPageNames.indexOf( pages[ page ].title ), //Order of page
				pages[ page ].title //Title of page
			]);
		}
	}
	//Sort pages in the given order
	sortable.sort( function(a, b) {
		return a[1] - b[1];
	} );

	reTextChapterTitle = mw.config.get( 'wgTitle' ).replace ( sortable[ sortable.length - 1 ][ 2 ] + '/', '')
				.replace(/^.+?\//g, '');
	reTextChapterTitle = mw.util.escapeRegExp( reTextChapterTitle ).replace(/ /g,'[ _]');
	reTextChapterLink = '(?:(?:\\[\\s*|\\/|\\{\\{Capítulo\\|)' + reTextChapterTitle + '(?:\\/?\\s*[\\|\\]]|\\}\\}))';
	reTextLeftRightLevel = '(?:\\[\\[(?:[Ii]magem?|[Ff]icheiro|[Aa]rquivo|[Ff]ile):(?:(\\d)de8|(\\d\\d\\d?)%)\\.svg[\\|\\]]|\\{\\{[Pp]rogresso\\|(\\d\\d\\d?)%\\}\\})';
	reTextGroupedLevel = '(?:\\{\\{[Ee]tapa\\|.*?' + reTextChapterTitle + '.*?\\|(?:p=)?(\\d+)\\}\\})';
	reChapter = '^.*?(?:' + reTextGroupedLevel
			+ '|' + reTextLeftRightLevel + '.*?' + reTextChapterLink
			+ '|' + reTextChapterLink + '.*?' + reTextLeftRightLevel
			+ ').*?$';
	reChapter = new RegExp( reChapter, 'm' );
	pagesloop:
	for ( page = 0 ; page < sortable.length; page++ ) {
		wikitext = sortable[ page ][ 0 ];
		matches = wikitext.match( reChapter );
		if ( !matches ) {
			continue;
		}
		for ( match = 1; match < matches.length; match++ ){
			if ( matches[match] ) {
				level = matches[match];
				break pagesloop;
			}
		}
	}
	if ( level === null ) {
		return;
	}
	$(document).ready(function() {
		$( '#bodyContent').prepend(
			'<div style="float:right; position:relative; top:-30px; height: 25px; width: 25px; background: url('
			+ baseUrlImg + progress[ level ].img
			+ ')" title="'
			+ progress[ level ].txt + '"/>'
		);
	});
};

if ( 0 === mw.config.get( 'wgNamespaceNumber' ) && ( $.inArray( mw.config.get( 'wgAction' ), [ 'view', 'submit' ]) !== -1 ) && -1 !== mw.config.get( 'wgTitle' ).indexOf('/') ) {
	var parts = mw.config.get( 'wgTitle' ).split('/'),
		current = parts[0],
		limit = parts.length - 1;
	parentPages = current;
	for( i=1; i<limit; i++ ) {
		current += '/' + parts[i];
		parentPages += '|' + encodeURIComponent( current );
	}
	mw.loader.load( mw.config.get( 'wgServer' ) + mw.config.get( 'wgScriptPath' ) + '/api.php?action=query&prop=revisions&rvprop=content&format=json&callback=findProgressLevel&titles=' + parentPages );
}
// [[Categoria:Gadgets|ProgressLevel.js]]
// [[Categoria:Scripts do Wikilivros|ProgressLevel.js]]