Usuário:Fábio Miguel/Core.js

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.
/**
 * Get list of pages for deletion on a given date
 * @author: [[User:Helder.wiki]]
 */
/*jslint browser: true, white: true, plusplus: true */
/*global jQuery, mediaWiki */
( function ( $, mw ) {
'use strict';
 
var pfd;
if ( typeof pfd === 'undefined' ) {
 
pfd = {};
pfd.generateTOC = function ( data ) {
	var	page, shortTitle, rev, i, l,
		toc = [];
	for (i = 0, l = data.query.pageids.length; i < l; i++) {
		page = data.query.pages[ data.query.pageids[i] ];
		shortTitle = page.title.substr(32); // 'Wikipédia:Páginas para eliminar/'.length
		rev = page.revisions[0];
		toc.push(
			'<tr><td>'+
			'<small>' +
			'(<a href="' + mw.util.getUrl( page.title ) + '">ver</a>' +
			'/<a href="' + mw.util.getUrl( page.title ) + '?action=edit">editar</a>) ' +
			'</small>' +
			'<a href="#' +
			// Ver http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/includes/Sanitizer.php?view=markup#l1056
			// http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/resources/mediawiki/mediawiki.util.js?view=markup#l114
			mw.util.wikiUrlencode( shortTitle ).replace( /\//g, '.2F' ).replace(/%/g, '.') + '">' +
			shortTitle + '</a></td><td>' +
			'<a href="' + mw.util.getUrl( 'Usuário: ' + rev.user ) + '">' + rev.user + '</a></td><td>' +
			rev.timestamp + '</td></tr>'
		);
	}
	pfd.$toc.html(
		'<table class="wikitable sortable"><caption>Índice</caption><thead><tr>' +
		'<th class="headerSort" title="Ordenar por ordem ascendente">Página</th>' +
		'<th class="headerSort" title="Ordenar por ordem ascendente">Último editor</th>' +
		'<th class="headerSort" title="Ordenar por ordem ascendente">Data/Hora</th>' +
//		'<th class="headerSort" title="Ordenar por ordem ascendente">Tamanho</th>' +
		'</tr></thead><tbody>' +
		toc.join('\n') +
		'</tbody></table>'
	).find('table').tablesorter();
};
 
pfd.getDataForTOC = function ( list ) {
	pfd.api.get( {
		action: 'query',
		prop: 'revisions',
		rvprop: 'timestamp|user', // |size
		titles: list.join('|'),
		indexpageids: true
	} ).done( pfd.generateTOC );
};
 
pfd.show = function ( html ) {
	var target;
	pfd.$target.append( html );
	$('#toc').remove();
 
	/* Add popups compatibility */
	target = pfd.$target.get(0);
	if ( $.isFunction( window.setupTooltips ) ) {
		target.ranSetupTooltipsAlready = false;
		window.setupTooltips( target );
	}
};
 
pfd.parse = function ( titles ) {
	pfd.$info.html(
		'Consultando a proposta de eliminação da página "' +
			titles[0].substr(32) + // 'Wikipédia:Páginas para eliminar/'.length === 32
			(titles.length === 1
				? '" (não há mais páginas'
				: '" (há ' + (titles.length - 1) +
					(titles.length === 2
						? ' outra página'
						: ' outras páginas'
					)
			) + ' na lista).'
	);
	$.get(
		mw.util.getUrl( titles.shift() ) + '?action=render',
		function ( pageHTML ) {
			if ( titles.length === 0 ) {
				pfd.$calendar
					.datepicker( 'enable' )
					.datepicker( 'refresh' );
				$.removeSpinner('pfd');
				pfd.$info.empty();
			} else {
				pfd.parse( titles );
			}
			pfd.show( pageHTML );
		}
	);
};
 
pfd.filter = function ( date ) {
	var	today = $.datepicker.formatDate('yymmdd', new Date() );
	pfd.selectedDate = date || mw.util.getParamValue('data') || today;
	pfd.selectedPages = [];
	/*jslint unparam: true*/
	$.each(pfd.allPages, function (i, page) {
		if ( page.sortkeyprefix === pfd.selectedDate ) {
			pfd.selectedPages.push( page.title );
		}
	});
	/*jslint unparam: false*/
	pfd.numberOfPagesToShow = pfd.selectedPages.length;
	if ( pfd.numberOfPagesToShow === 0 ) {
		pfd.$info.html(
			'Nenhuma das votações de páginas propostas para eliminação termina em ' +
				$.datepicker.formatDate(
					'dd/mm/yy',
					$.datepicker.parseDate('yymmdd', pfd.selectedDate)
				)  + '.'
		);
		pfd.$calendar
			.datepicker( 'enable' )
			.datepicker( 'refresh' );
		$.removeSpinner('pfd');
		return;
	}
	pfd.$info.html(
		'Obtendo o conteúdo de ' + pfd.selectedPages.length +
			(pfd.selectedPages.length !== 1 ? ' propostas' : ' proposta' ) + ' de eliminação...'
	);
	pfd.getDataForTOC( pfd.selectedPages );
	pfd.parse( pfd.selectedPages );
};
 
pfd.beforeShowDay = function ( date ) {
	var pages;
	if ( typeof pfd.total === 'undefined' ) {
		return [ true, '' ];
	}
	pages = pfd.total[ $.datepicker.formatDate('yymmdd', date) ];
	return [
		typeof pages !== 'undefined' && pages !== 0, // Enabled on days with at least one page
		pages === pfd.orderedTotals[0] // Is it the day with most pages?
			? 'top-1'
			: pages === pfd.orderedTotals[1]
				? 'top-2'
				: '',
		pages
			? pages + (pages !== 1 ? ' votações terminam' : ' votação termina' ) + ' neste dia'
			: 'Nenhuma votação termina neste dia'
	];
};
 
pfd.analyseAndFilterCategory = function ( data ) {
	var reDays = /\d+ de (?:(?:jan|fever)eiro|março|abril|maio|ju[nl]ho|agosto|(?:outu|(?:set|nov|dez)em)bro)$/g;
	pfd.total = {};
	pfd.allPages = $.grep( data.query.categorymembers, function (n) {
		if ( reDays.test( n.title ) ) {
			// This is a page from old system, and is not used for voting
			return false;
		}
		if ( typeof pfd.total[ n.sortkeyprefix ] === 'undefined' ) {
			pfd.total[ n.sortkeyprefix ] = 1;
		} else {
			pfd.total[ n.sortkeyprefix ]++;
		}
		return true;
	});
	// Get quantities, discarding the dates
	pfd.orderedTotals = $.map( pfd.total, function ( quantity /*, date */ ) {
		return quantity;
	}).sort(function (a, b) {
		return b - a; // Descending order
	});
 
	if ( mw.config.get('wgPageName') === 'Wikipédia:Páginas_para_eliminar/Lista' ) {
		pfd.$calendar
			.datepicker( 'disable' )
			.datepicker( 'refresh' );
		pfd.filter();
	} else {
		pfd.$target.empty();
		pfd.$info.empty();
		pfd.$calendar.datepicker( 'refresh' );
		$.removeSpinner('pfd');
	}
};
 
pfd.run = function () {
	var	cat = 'Categoria:!Itens propostos para eliminação',
		urlDate = mw.util.getParamValue('data');
	pfd.api = new mw.Api({
		ajax: {
			err: function ( code, result ) {
				var	msg = 'Houve um erro ao usar a API (code=' + code +
						', exception=' + result.exception +
						', textStatus=' + result.textStatus + '). ',
					date = $.datepicker.parseDate('yymmdd', pfd.selectedDate),
					months = [
						'janeiro', 'fevereiro', 'março',
						'abril', 'maio', 'junho',
						'julho', 'agosto', 'setembro',
						'outubro', 'novembro', 'dezembro'
					],
					cat;
				if (pfd.selectedDate) {
					cat = 'Categoria:Itens candidatos à eliminação/' +
						$.datepicker.formatDate( 'dd', date ) + ' de ' +
						months[ parseInt( $.datepicker.formatDate( 'm', date ), 10 ) - 1 ];
					msg += 'Tente novamente ou utilize a <a href="' +
						mw.util.getUrl(cat) + '">' + cat +
						'</a> enquanto o problema persistir.';
				}
				pfd.$info.html( msg );
				pfd.$calendar
					.datepicker( 'enable' )
					.datepicker( 'refresh' );
				$.removeSpinner('pfd');
			}
		}
	});
	pfd.$target = $('#pfd-content');
	if ( pfd.$target.length === 0 ) {
		pfd.$info = $('<div id="pfd-info"></div>');
		pfd.$toc = $('<div id="custom-toc"></div>');
		pfd.$target = $( '<div id="pfd-content"></div>' ).appendTo(
			mw.util.$content.find('.mw-content-ltr').first()
		).after( pfd.$info ).before( pfd.$toc );
	}
	pfd.$info.injectSpinner('pfd');
	pfd.$info.html( 'Consultando a <a href="' + mw.util.getUrl(cat) + '">' + cat + '</a>...' );
	pfd.api.get( {
		action: 'query',
		list: 'categorymembers',
		cmnamespace: 4,
		cmtitle: cat,
		cmprop: 'title|sortkeyprefix',
		cmlimit: 500,
		cmsort: 'sortkey'
	} ).done( pfd.analyseAndFilterCategory );
	mw.util.addCSS('#calendar .ui-datepicker {margin: 0 auto;} .top-1 { background-color: #f66; } .top-2 { background-color: #ff6; }');
	pfd.$calendar = $('#calendar').empty();
	pfd.$calendar.datepicker({
		onSelect: function (dateText /*, inst */ ) {
			var	date = $.datepicker.parseDate('dd/mm/yy', dateText),
				formattedDate = $.datepicker.formatDate('yymmdd', date );
			if ( mw.config.get('wgPageName') === 'Wikipédia:Páginas_para_eliminar/Lista' ) {
				pfd.$calendar
					.datepicker( 'disable' )
					.datepicker( 'refresh' );
				pfd.$target.empty();
				pfd.$toc.empty();
				pfd.$info.injectSpinner('pfd');
				pfd.filter( formattedDate );
			} else {
				window.location.href = mw.util.getUrl( 'Wikipédia:Páginas para eliminar/Lista' ) +
					'?data=' + formattedDate;
			}
		},
		beforeShowDay: pfd.beforeShowDay
	});
	if ( urlDate ) {
		pfd.$calendar.datepicker('setDate', $.datepicker.parseDate('yymmdd', urlDate) );
	}
};
 
if ( $.inArray( mw.config.get('wgAction'), ['view', 'purge'] ) !== -1 ) {
	$(function () {
		if ( $('#pe-header').length !== 0 ) {
			mw.loader.using([
				'mediawiki.api',
				'jquery.spinner',
				'jquery.ui',
				'jquery.tablesorter'
			], pfd.run);
		}
	});
}
 
} // typeof pfd
 
}( jQuery, mediaWiki ) );