MediaWiki:Gadget-PagesForDeletion.js
Note: After saving, you have to bypass your browser's cache to see the changes. Internet Explorer: hold down the Ctrl key and click the Refresh or Reload button. Firefox: hold down the Shift key while clicking Reload (or press Ctrl-Shift-R). Google Chrome and Safari users can just click the Reload button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
/**
* Get list of pages for deletion on a given date
* @author: [[User:Helder.wiki]]
* @tracking: [[Special:GlobalUsage/User:Helder.wiki/Tools/PagesForDeletion.js]] ([[File:User:Helder.wiki/Tools/PagesForDeletion.js]])
*/
/*jslint browser: true, white: true, plusplus: true */
/*global jQuery, mediaWiki */
( function ( $, mw /* , undefined */ ) {
'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><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.wikiGetlink( 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
}, {
ok: 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.addArchiveLink($('.PEferramentas').last());
};
pfd.addArchiveLink = function (element) {
var page = $(element).children()[0].text, archivePFD = $('<a href="#" class="sysop-show eliminator-show"> Arquivar </a>').click(pfd.nicePrompt('Que tipo de arquivamento deseja fazer?', 'Comentário:', function(comment, archivePage) {
$.ajax({
url : mw.util.wikiScript('api'),
type : 'POST',
dataType : 'json',
data : {
format : 'json',
action : 'edit',
minor : false,
title : 'Wikipédia:Páginas para eliminar/' + archivePage + pfd.selectedDate.substring(4, 6) + ' ' + pfd.selectedDate.substring(0, 4),
text : '*[[Wikipédia:Páginas para eliminar/' + page + ']] - [['+ page + ']]' + (comment ? ' (' + comment + ')' : '') ,
section : pfd.selectedDate.substring(6),
summary : 'arquivando' + '[[' + page + ']]',
token : mw.user.tokens.get('editToken')
},
success : function (data) {
if (data && data.edit && data.edit.result && data.edit.result === 'Success') {
pfd.useDialog('Sucesso', 'Sucesso em arquivar! (<a href="' +
mw.util.wikiGetlink( archivePage ) + '">Abrir</a>) <a href="' +
mw.util.wikiGetlink( archivePage ) + '?diff=0">(diff)</a>', 'nprompt-dialog');
} else {
pfd.useDialog('Erro!!', 'Houve um erro ao requisitar a edição da página. Código: ' + data.error.code + '": ' + data.error.info, 'nprompt-dialog');
}
},
error : function () {
pfd.useDialog('Erro!!', 'Houve um erro ao usar AJAX para editar a página.', 'nprompt-dialog');
}
});
}));
$($(element).children()[1]).before($(archivePFD));
};
pfd.nicePrompt = function (title, label, callback) {
$('<div id="nprompt-dialog" class="ui-widget">' + '<label for="nprompt-input">' + label + '</label>' + '<input type="text" id="nprompt-input-text" /><div></div><input type="radio" name="nprompt-input-radio" value="Arquivo de mantidas/" />Mantida<input type="radio" name="nprompt-input-radio" value="Arquivo de eliminadas/" />Eliminada </div>').dialog({
title: title,
open: function () {
$(".ui-dialog-titlebar-close").hide();
},
close: function () {
$('#nprompt-dialog').dialog('destroy');
$('#nprompt-dialog').remove();
},
buttons: {
"OK": function () {
callback($('#nprompt-input-text').val(), $('input[name=nprompt-input-radio]:checked').val());
},
Cancelar: function() {
pfd.useDialog('Ah!', 'Você cancelou!', 'nprompt-dialog');
}
}
});
};
pfd.useDialog = function (title, message, id) {
$('#' + id).empty();
$('#' + id).dialog("option", "title", title);
$('#' + id).append($('<div>' + message + '</div>'));
$('#' + id).dialog("option", "buttons", { "Fechar": function() {
$(this).dialog("close");
} } );
};
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.wikiGetlink( 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.wikiGetlink(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.wikiGetlink(cat) + '">' + cat + '</a>...' );
pfd.api.get( {
action: 'query',
list: 'categorymembers',
cmnamespace: 4,
cmtitle: cat,
cmprop: 'title|sortkeyprefix',
cmlimit: 500,
cmsort: 'sortkey'
}, {
ok: 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.wikiGetlink( '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.datepicker',
'jquery.tablesorter'
], pfd.run);
}
});
}
} // typeof pfd
}( jQuery, mediaWiki ) );