MediaWiki:Gadget-fastbuttons.js and Ajuda:Página de testes/1: Difference between pages

From Wikipédia
(Difference between pages)
Content deleted Content added
repondo a versão de http://pt.wikipedia.org/w/index.php?diff=26542340&oldid=26491496, com correções tb. do Helder: http://pt.wikipedia.org/w/index.php?diff=26543744&oldid=26543456
 
m Ajuste para (tentar) evitar o problema descrito no Bug 30441 e no café dos programadores
 
Line 350: Line 350:
'action': 'edit',
'action': 'edit',
'fastb': code
'fastb': code
};
},
param = [];
if( extraText ){
if( extraText ){
data.fbtxt = extraText;
data.fbtxt = extraText;
}
}
$.each( data, function( key, value){
param.push( key + '=' + encodeURIComponent( value ) );
})
$patrol = mw.util.$content.find('span.patrollink a').first();
$patrol = mw.util.$content.find('span.patrollink a').first();
rcid = mw.util.getParamValue( 'rcid', $patrol.attr('href') || '' );
rcid = mw.util.getParamValue( 'rcid', $patrol.attr('href') || '' );
if ( rcid ) {
if ( rcid ) {
fb.patrolRevision( rcid, function(){
fb.patrolRevision( rcid, function(){
location.href = url + $.param( data );
location.href = url + param.join( '&' );
} );
} );
} else{
} else{
location.href = url + $.param( data );
location.href = url + param.join( '&' );
}
}
break;
break;

Revision as of 13:40, 18 August 2011

/** FastButtons

* @author:  (versão original do script, na Wikipédia em espanhol)
* @author:  (versão adaptada para a Wikipédia inglesa)
* @author: Outros editores que aparecem no histórico
* @source:  (https://secure.wikimedia.org/wikipedia/en/w/index.php?oldid=230473471)
* @source: 
*/

window.fb = { //Replace this string by 5~ before saving: version: '00h22min de 18 de agosto de 2011 (UTC)', ns: mw.config.get('wgNamespaceNumber'), title: mw.config.get('wgTitle'), catScanUrl: 'http://toolserver.org/~daniel/WikiSense/CategoryIntersect.php' + $.param( { 'wikilang': mw.config.get('wgContentLanguage'), 'wikifam': '.wikipedia.org', 'userlang': mw.config.get('wgUserLanguage'), 'basecat': mw.config.get('wgTitle'), 'basedeep': '1', 'go': 'Examinar', 'format': 'html', 'mode': } ), submenu: {},

$menu: $( '

' ), $submenu: $( '
' )

};

// TODO: Mover estas variáveis para o escopo em que são realmente utilizadas var esbText = , esbText2 = ;

/* Cria os links que ativam a função fb.run()

* @param {string} func
* @param {string} text Text for link
* @param {string} title Title for link
* @param {string=} promptMsg Text for prompt message (optional)
* @return {string} The HTML string of the link
* FIXME: Usar onClick em vez de onKeyPress, para melhor compatiblidade (mw:RL/MGU#Event_binding)
*/

fb.link = function (func, text, title, promptMsg) { if (func.indexOf( 'ER' ) === 0) { func = 'var obs=prompt(\'Se necessário, coloque uma observação.\');' + 'fb.run(\ + func + '\',obs)'; } else if (promptMsg) { func = 'var obs=prompt(\ + promptMsg + '\');fb.run(\ + func + '\',obs)'; } else { func = 'fb.run(\ + func + '\')'; } return '<a class="fb-button fb-action-button" title="' + title + '" onClick="' + func + '">' + text + '</a>'; };

fb.submenu = { /*** Submenu [ER] ***/ ER: 'Regra: 1' + [ fb.link('ER|5', '5', 'Aparecimento recorrente (se o conteúdo for igual' + ' ao eliminado por votação)'), (($.inArray(fb.ns, [0, 102]) !== -1) ? fb.link('ER|6', '6', 'Título é spam') : '6'), fb.link('ER|7', '7', 'Próprio criador reconhece que se enganou'), (($.inArray('sysop', mw.config.get('wgUserGroups')) > -1) ? fb.link('ER|8', '8', 'Eliminações temporárias sem perda de histórico' + ' para resolver problemas técnicos') : '8'), fb.link('ER|9', '9', 'Eliminar redirect, página sem histórico relevante' + ' (mover página redirecionada para cá)'), ((fb.ns === 0) ? fb.link('ER|10', '10', 'Namespaces que não existem (WikipÉdia, AjUda)') : '10' ), fb.link('ER|11', '11', 'Má configuração do teclado (Página,' + ' Usuário:Sicrano)'), (fb.ns == 6) ? fb.link('ER|12', '12', 'Imagens, somente por quem a carregou') : '12', ($.inArray(fb.ns, [0, 102]) !== -1) ? fb.link('ER|13', '13', 'Páginas sem histórico relevante que são' + ' violações flagrantes de direitos autorais de outras páginas' + ' na internet.') : '13', (fb.ns == 6) ? fb.link('ER|14', '14', 'Ficheiros (arquivos) duplicados') : '14', fb.link('ER|17', '17', 'Salto de domínio'), (fb.ns == 1) ? fb.link('ER|18', '18', 'Discussão cujos artigos não existem') : '18', (fb.ns == 6) ? fb.link('ER|19', '19', 'Ficheiros (domínio Ficheiro:) que não são som,' + ' imagem ou vídeo') : '19', fb.link('ER|20', '20', 'Impróprio'), (mw.config.get('wgPageName').indexOf('Wikipédia:Páginas_para_eliminar/') === 0) ? fb.link('ER|21', '21', 'Página de eliminação de um artigo antes de' + ' passados 6 meses da última votação') : '21', ($.inArray(fb.ns, [0, 102]) !== -1) ? fb.link('ER|A1', 'A1', 'Páginas com o título malformatado, absurdo,' + ' com palavras que não o são, com erros devidos à má configuração' + ' do teclado, com codificação incorreta do sistema ou que expressem' + ' domínios que não existem.') : 'A1', (fb.ns == 14) ? fb.link('ER|C1', 'C1', 'Categorias vazias, desnecessárias ou substituídas') : 'C1', (fb.ns % 2 == 1) ? fb.link('ER|D1', 'D1', 'Discussões de páginas inexistentes') : 'D1', (fb.ns % 2 == 1) ? fb.link('ER|D2', 'D2', 'Discussões de páginas para eliminação ou com' + ' histórico irrelevante') : 'D2', ($.inArray(fb.ns, [2, 3]) !== -1) ? fb.link('ER|U1', 'U1', 'Uso impróprio da página de usuário') : 'U1', (fb.ns == 2) ? fb.link('ER|U2', 'U2', 'PU criada por outro usuário') : 'U2', (fb.ns == 10) ? fb.link('ER|P1', 'P1', 'Predefinições vazias, desnecessárias ou' + ' substituídas') : 'P1', fb.link('ER|R1', 'R1', 'Redirecionamento indevido, desnecessário, sem' + ' afluentes, para páginas inexistente ou eliminadas'), (fb.ns % 2 == 1) ? fb.link('ER|R2', 'R2', 'Redirecionamento de página de discussão') : 'R2' ].join(' '), /*** Submenu [ESR] ***/ // FIXME: Usar jQuery em vez de onKeyPress e onMouseDown, para melhor compatiblidade (mw:RL/MGU#Event_binding) ESR: fb.link('subst:ESR-banda|1=~~' + '~~', 'banda', 'Artigo sobre banda sem fontes e sem notoriedade') + fb.link('subst:ESR-bio|1=~~' + '~~', 'biografia', 'Biografia sem fontes e sem notoriedade') + fb.link('subst:ESR-empresa|1=~~' + '~~', 'empresa', 'Empresa sem fontes e sem notoriedade') + 'outra: <input type="text" id="fb-esr-input" onKeyPress="fb.ok(event, \'ESR\')" size=55/>' + '<input type="button" onMouseDown="fb.ok(\'ok\', \'ESR\')" value="OK"/>', /*** Submenu [esboço] ***/ // FIXME: Usar jQuery em vez de onkeyup, onKeyPress e onMouseDown, para melhor compatiblidade (mw:RL/MGU#Event_binding) esb: fb.link('mínimo', 'mínimo', 'Artigo com apenas uma frase') + ' ' + fb.link('esboço', 'esboço', 'Artigo ainda pouco desenvolvido') + ' esboço-' + '<input id="fb-esb-input" onkeyup="fb.callAPI(\'esb\')"' + ' onKeyPress="fb.ok(event, \'esb\')" size=14/>' + '<input type="button" onMouseDown="fb.ok(\'ok\', \'esb\')" value="OK"/>', /*** Submenu [manuteção] ***/ man: [ fb.link('subst:wkf', 'wikificar', 'Não está formatado de acordo com o livro' + ' de estilo'), fb.link('subst:s-fontes', 'sem fontes', 'Página não cita nenhuma fonte ou' + ' referência'), fb.link('sem cat', 'sem cat', 'Página não está em nenhuma categoria'), fb.link('subst:rec', 'reciclagem', 'Página precisa ser reciclada de acordo' + ' com o livro de estilo'), fb.link('parcial', 'parcial', 'Artigo possui passagens que não respeitam o' + ' princípio da imparcialidade'), fb.link('subst:ctx', 'contexto', 'Página carece de contexto'), fb.link('controverso|artigo', 'controverso', 'controverso devido às disputas' + ' sobre o seu conteúdo'), fb.link('subst:f-referências', 'formatar referências', 'Artigo contém' + ' referências que necessitam de formatação'), fb.link('subst:m-notas', 'mais notas', 'Página cita fontes fiáveis, mas não' + ' cobre todo o texto'), fb.link('subst:s-notas', 'sem notas', 'Existem fontes no final da página,' + ' mas não são citadas no corpo do artigo'), fb.link('subst:s-fontes-bpv', 'bpv sem fontes', 'Biografia de pessoa viva' + ' que não cita nenhuma fonte'), fb.link('subst:fpr', 'fonte primária', 'Artigo necessita de fontes' + ' secundárias fiáveis publicadas por terceiros') ].join(' '), /*** Submenu [busca] ***/ search: [ '<a href="http://www.google.com/search?&as_eq=wikipedia&as_epq=', '" class="external text">Google</a> — <a href="http://news.google.com/archivesearch?&as_src=-newswire+-wire+-presswire+-PR+-press+-release&as_epq=', '" class="external text">notícias</a>, <a href="http://books.google.com/books?&as_brr=0&as_epq=', '" class="external text">livros</a>, <a href="http://scholar.google.com/scholar?as_epq=', '" class="external text">acadêmico</a> — <a href="http://www.scirus.com/srsapp/search?q=', '&t=all&sort=0&g=s" class="external text">Scirus</a>' ].join( encodeURIComponent( ( fb.title.indexOf( ' ' ) > -1 ) ? '"' + fb.title + '"': fb.title ) ),

/*** Submenu [aviso] ***/ warn: [fb.link('subst:bem-vindo IP', 'BV-IP', 'Boas-vindas para usuário(a) não registrado(a)'), fb.link('subst:bem-vindo', 'BV', 'Bem-vindo(a) à Wikipédia'), fb.link('subst:bem-vinda', 'BVª', 'Bem-vinda à Wikipédia'), fb.link('subst:bv-av', 'av-BV-IP', 'Aviso sobre erro em artigo e boas-vindas para usuário(a) não registrado(a)', 'Aviso sobre qual artigo?'), fb.link('subst:bv-av-registrado', 'av-BV', 'Aviso sobre erro em artigo e boas-vindas para usuário(a) registrado', 'Aviso sobre qual artigo?'), fb.link('subst:aviso-ER', 'av-ER', 'Aviso sobre eliminação rápida', 'Qual página foi proposta para eliminação?'), fb.link('subst:av-bv-ER', 'av-BV-ER', 'Aviso sobre eliminação rápida + boas-vindas', 'Qual página foi proposta para eliminação?'), fb.link('subst:aviso-ESR', 'av-ESR', 'Aviso sobre eliminação semirrápida', 'Qual página foi proposta para eliminação?'), fb.link('subst:aviso-PE', 'av-PE', 'Aviso sobre eliminação por votação', 'Qual página foi proposta para eliminação?'), fb.link('subst:aviso-PE-criador', 'av-PE-criador', 'Aviso ao criador sobre eliminação por votação', 'Qual página foi proposta para eliminação?'), fb.link('subst:bv-propaganda', 'prop-BV', 'Caro editor, por favor não faça' + ' propaganda, [...] Apesar disso, bem-vindo à Wikipédia'), fb.link('subst:propaganda', 'prop', 'Caro editor, por favor não faça propaganda...', 'Em que página foi feita propaganda?'), fb.link('subst:aviso', 'av', 'Aviso sobre erro em artigo', 'Aviso sobre qual artigo?'), fb.link('subst:aviso2', 'av2', 'Aviso sobre vandalismo', 'Qual página foi vandalizada?'), fb.link('subst:BSRE', 'BSRE', 'Aviso de biografia sem relevo enciclopédico', 'Qual artigo?'), fb.link('subst:cópia', 'cópia', 'Aviso sobre artigo copiado de fonte externa/VDA', 'Preencha usando \'|2=\' como separador: página da Wikipédia' + '|2=url da página copiada'), fb.link('subst:linguagem incorreta', 'linguagem', 'Não insulte nem use linguagem inadequada em artigos ou discussões'), fb.link('subst:ortografia', 'ortografia', 'Não mude a versão da língua'), fb.link('subst:mostrar previsão', 'salvamento sucessivo', 'Não faça salvamentos sucessivos, utilize o botão \'Mostrar previsão\, 'Em que artigo foram feitos salvamentos sucessivos?'), fb.link('subst:Av-boas vindas', 'aviso-BV', 'Não dê boas-vindas a usuários' + ' que não contribuíram com pelo menos uma edição válida'), fb.link('subst:Av-página de usuário', 'av-PU', 'Considere refazer a página de usuário(a)'), fb.link('subst:Aviso/Página pessoal', 'av-PU-outro', 'Não edite páginas de outros usuários', 'Qual página de outro(a) usuário(a) foi editada?'), fb.link('subst:não remova', 'não remova', 'Não remova marcações de eliminação das páginas', 'Qual página em que a marcação de eliminação foi removida?'), fb.link('subst:autobiografia', 'autobiografia', 'Não crie autobiografias', 'Qual autobiografia foi criada?') ].join(' '), /** Submenu [CatScan] **/ cat: 'Procurar nesta categoria: ' + [ '<a class="fb-button" href="' + fb.catScanUrl + 'ts&templates=Sem-fontes">sem fontes</a>', '<a class="fb-button" href="' + fb.catScanUrl + 'ts&templates=Revis%C3%A3o&go=">revisão</a>', '<a class="fb-button" href="' + fb.catScanUrl + 'ts&templates=Wikifica%C3%A7%C3%A3o&go=">wikificação</a>', '<a class="fb-button" href="' + fb.catScanUrl + 'ss&size=1000&stubop=or&links=4&go=">menos de 1 000 bytes ou 4 links</a>', '<a class="fb-button" href="' + fb.catScanUrl + 'ss&size=500&stubop=or&links=2&go=">menos de 500 bytes ou 2 links</a>' ].join(' ') };

// TODO: Consider using jQuery: $('#target').keypress() fb.ok = function( evt, option ) { if (window.event && window.event.keyCode == 13) { evt = 'ok'; } else if (evt && evt.which == 13) { evt = 'ok'; } if (evt == 'ok') { if ( option == 'esb' ) { fb.run('esboço-' + $( '#fb-esb-input').val()); } else if ( option == 'ESR' ) { fb.run('subst:ESR', $( '#fb-esr-input').val() + ' ~~' + '~~'); } } };

/* Patrol the edit currently displayed

* @param {function()} succes Callback function to be executed after the edit is pattroled
*/

fb.patrolRevision = function ( rcid, success ) { $.getJSON( mw.util.wikiScript( 'api' ), { format: 'json', action: 'query', list: 'recentchanges', rctoken: 'patrol', rcprop: , rclimit: '1' }, function( data ) { var query = data.query, rc = query && query.recentchanges, token = rc && rc[ 0 ] && rc[ 0 ].patroltoken; if ( !token ) { mw.log( 'Não foi possível obter um token para patrulhar a edição.' ); return false; } else if ( !rcid ) { mw.log( 'Não foi possível identificar a edição a ser patrulhada.' ); return false; } $.post( mw.util.wikiScript( 'api' ), { action: 'patrol', format: 'json', token: token, rcid: rcid }, function( data ) { if ( data.error ) { mw.log( 'Não foi possível patrulhar a edição: ' + data.error.info ); return false; } else { if ( $.isFunction( success ) ){ success(); } mw.log( 'A edição foi marcada como patrulhada.' ); return true; } } ).error(function() { alert( 'Houve um erro inesperado ao usar a API do MediaWiki.' ); return false; }); } ).error(function() { alert( 'A API retornou um erro ao tentar obter um token para patrulhar a edição.' ); return false; }); };

/* Função de edição

* @param: {string} code A template name, possibly preceded by "subst:",
*                         and optionally followed by "|" and some parameter(s)
* @param: {(string|null)=} extraText Extra text for templates and redirects (optional)
* @return: {boolean} Returns false if the user canceled or the page already has a template
*/

fb.run = function (code, extraText) { var $patrol, rcid, $textBox = $('#wpTextbox1'), summaries = { 'subst:VDA': 'Página marcada como VDA', 'subst:apagar': 'Página proposta para [[Wikipedia:Eliminação' + ' por votação|eliminação por votação]]', 'subst:s-fontes': 'Página marcada como sem fontes', 'subst:wkf': 'Página marcada para wikificação', 'subst:rec': 'Página marcada para reciclagem', 'parcial': 'Página marcada como parcial', 'subst:ctx': 'Página marcada como sem contexto', 'controverso|artigo': 'Marcado como controverso', 'subst:f-referências': 'Marcado que existem referências sem formatação', 'subst:m-notas': 'Marcado que carece de mais fontes', 'subst:s-notas': 'Página marcada como sem notas', 'subst:s-fontes-bpv': 'Marcado como biografia de pessoa' + ' viva sem fontes', 'subst:fpr': 'Página marcada como sem fontes secundárias fiáveis', 'subst:ESR': 'Página proposta para eliminação semirrápida' }; if (extraText === null) { // Do nothing if the user canceled the prompt box return false; } switch (mw.config.get('wgAction')) { case 'view': var url = mw.util.wikiGetlink( mw.config.get('wgPageName') ) + '?', data = { 'action': 'edit', 'fastb': code }, param = []; if( extraText ){ data.fbtxt = extraText; } $.each( data, function( key, value){ param.push( key + '=' + encodeURIComponent( value ) ); }) $patrol = mw.util.$content.find('span.patrollink a').first(); rcid = mw.util.getParamValue( 'rcid', $patrol.attr('href') || ); if ( rcid ) { fb.patrolRevision( rcid, function(){ location.href = url + param.join( '&' ); } ); } else{ location.href = url + param.join( '&' ); } break; case 'edit': var value = $textBox.val(); var summary = ' (usando FastButtons)'; if ( value.match(/\{\{(?:ER|ESR2|Usuário\:Salebot\/Impróprio)\|/i) ) { alert('Já existe uma predefinição de eliminação nesta página.'); return false; } if (code.indexOf('ER') === 0) { extraText = extraText? '|3=' + extraText: ; extraText = '{' + '{' + code + '|2=~~' + '~~' + extraText + '}}\n\n'; $textBox.val( extraText + value ); if (this.salve) { document.editform.wpSummary.value = 'Página proposta para' + ' eliminação rápida (regra ' + code.substring(3) + ')' + summary; } } else if (code == 'redirect') { if (mw.config.get('wgNamespaceNumber') == 14) { if (extraText) { $textBox.val( '{' + '{redirecionamento de categoria|' + extraText + '}}' ); } if (this.salve) { document.editform.wpSummary.value = 'Redirecionando para' + ' a ' + summary; } } else { if (extraText) { $textBox.val( '#Redirecionamento ' + extraText + '' ); } } } else { extraText = extraText? '|1=' + extraText: ; extraText = '{' + '{' + code + extraText + '}}'; if (mw.config.get('wgNamespaceNumber') == 3) { value += '\n\n' + extraText + ' ~~' + '~~'; } else if (code == 'mínimo' || code.indexOf('esboço') === 0) { if (value.match(/\n\n\[\[/)) { value = value.substring(0, value.search(/\n\n\[\[/)) + '\n\n' + extraText + value.substring(value.search(/\n\n\[\[/)); } else { value += '\n\n' + extraText; } this.salve = (code == 'mínimo') ? 'Página marcada como mínimo' : 'Página marcada como esboço'; } else if ($.inArray( code, [ 'subst:VDA' , 'subst:matrad' ]) > -1) { value = extraText; } else { value = extraText + '\n\n' + value; } $textBox.val(value ); if (this.salve) { if (mw.config.get('wgNamespaceNumber') == 3) { this.salve = 'Adicionando aviso'; } else { if ( code.indexOf( 'subst:ESR' ) === 0 ) { code = 'subst:ESR'; } this.salve = summaries[ code ] || 'Adicionando marcação'; } document.editform.wpSummary.value = this.salve + summary; } } if (this.salve) { document.editform.submit(); } break; } };

/* Callback function for API calls

* @param {string} code An abreviation such as "esb", "afl", "PV",
*/

fb.callAPI = function ( code ) { var user, that = this, esb, apiParams = { 'esb': { 'list': 'allpages', 'aplimit': '1', 'apnamespace': '10' }, 'afl': { 'list': 'backlinks', 'bllimit': '1', 'blfilterredir': 'nonredirects', 'blnamespace': '0', 'bltitle': mw.config.get('wgPageName') }, 'PV': { 'list': 'watchlist', 'wlprop': 'user|comment|title|sizes', 'wlexcludeuser': mw.config.get('wgUserName') }, 'PN': { 'list': 'recentchanges', 'rctype': 'new', 'rcnamespace': '0', 'rcshow': '!patrolled', 'rcprop': 'user|comment|title|sizes|ids' }, 'MR': { 'list': 'recentchanges', 'rctype': 'edit', 'rcnamespace': '0', 'rcshow': 'anon', 'rcprop': 'user|comment|title|sizes' }, 'usu': { 'list': 'allusers', 'aulimit': '1', 'auprop': 'editcount|registration', 'aufrom': mw.config.get('wgTitle').split('/')[0] } }; if ( 'esb' == code ) { esb = $( '#fb-esb-input' ).val(); if ( $.inArray( esb, [ esbText, esbText2 ] ) !== -1 ) { return; } esbText = esb; if (esbText == esb.substr(0, (esb.length - 1))) { return; } apiParams.esb.apprefix = 'Esboço-' + esb; } apiParams[ code ].format = 'json'; apiParams[ code ].action = 'query'; $.getJSON( mw.util.wikiScript( 'api' ), apiParams[ code ], function( data ) { that.processAPI( code, data ); } ); };

/* Callback function for API calls

* @param {string} code An abreviation such as "esb", "afl", "PV",
* @param {Object} data JSON content returned by API
*/

fb.processAPI = function (code, data) { var i, title, length, comment, user, query = data && data.query, pages = [], charnum = 0, that = this;

/** Processamento da resposta do API **/ switch ( code ) { case 'afl': var backlinks, info = '('; info += (document.getElementById('Refer.C3.AAncias') || document.getElementById('Notas_e_refer.C3.AAncias')) ? 'ref' : 'ref'; var catLine = document.getElementById( 'mw-normal-catlinks' ); // FIXME: Não usar 'screen scraping' para obter esta informação! if (catLine && catLine.innerHTML.indexOf( '><a href="' + mw.config.get('wgArticlePath').replace('$1', )) > -1) { info += ' · cat'; } else { info += ' · cat'; } info += (document.getElementById( 'p-lang' )) ? ' · iw' : ' · iw';

// Afluentes backlinks = query && query.backlinks; if ( !backlinks ) { mw.log( 'The backlinks query returned no data.' ); } else if ( backlinks.length ) { info += ' · <a href="' + mw.util.wikiGetlink( 'Especial:Páginas afluentes/' + mw.config.get('wgPageName') ) + '" title="afluentes">afl</a>)'; } else { info += ' · afl)'; } this.$submenu.html( info ); if ( document.getElementById( 'ca-talk' ).className != 'new' ) { $.getJSON( mw.util.wikiScript( 'api' ), { 'format': 'json', 'action': 'query', 'prop': 'categories', 'indexpageids': '1', 'titles': mw.config.get('wgFormattedNamespaces')[ mw.config.get('wgNamespaceNumber') + 1 ] + ':' + mw.config.get('wgTitle') }, function( data ) { that.processAPI( 'qualidade', data ); } ); } else { var hiddenCats = document.getElementById('mw-hidden-catlinks'); if (hiddenCats) { hiddenCats = hiddenCats.innerHTML; if (hiddenCats.indexOf('!Artigos de qualidade') > -1) { hiddenCats = hiddenCats.substr(hiddenCats.indexOf('!Artigos de qualidade') + 22, 1); if (hiddenCats == 'd') { hiddenCats = '?'; } this.$submenu.html( this.$submenu.html() + ' Q-' + hiddenCats + '' ); } } } break; case 'qualidade': var cats, cat, pageids, quality; if ( query ) { cats = query.pages; pageids = query.pageids; if ( cats && pageids && pageids.length ) { cats = cats[ pageids[0] ].categories; if ( !cats ){ mw.log( 'The categories query returned incomplete data.' ); return false; } } else { mw.log( 'The categories query returned incomplete data.' ); return false; } } else { mw.log( 'The categories query returned no data.' ); return false; } // Qualidade do artigo for (i = 0; i < cats.length; i++) { cat = cats[i].title; if ( cat && cat.indexOf( '!Artigos de qualidade' ) > -1 ){ // Categoria:!Artigos de qualidade 1 sobre ... // ^ quality = cat.substr( 32, 1 ); if (quality == 'd') { quality = '?'; } this.$submenu.html( this.$submenu.html() + ' Q-' + quality + '' ); break; } } break; case 'esb': var template, esb = document.getElementById( 'fb-esb-input' ); if ( query ) { template = query.allpages && query.allpages[0] && query.allpages[0].title; if ( !template ) { mw.log( 'The categories query returned incomplete data.' ); return false; } template = template.replace( /^Predefinição:Esboço-/gi, ); } else { mw.log( 'The categories query returned no data.' ); return false; } if ((esb.setSelectionRange || esb.createTextRange || typeof (esb.selectionStart) != 'undefined' && typeof (esb.selectionEnd) != 'undefined' ) && esb.value == template.substr(0, esb.value.length) ) { // Exibe sugestões. Baseado no script do HotCat var start = esb.value.length; esb.value = template; esbText2 = template; if (esb.setSelectionRange) { esb.setSelectionRange(start, template.length); } else if (esb.createTextRange) { var sel = esb.createTextRange(); sel.move( 'character', start ); sel.moveEnd( 'character', template.length - start ); sel.select(); } else { esb.selectionStart = start; esb.selectionEnd = template.length; } } break; case 'PN': case 'MR': // Mudanças recentes case 'PV': // Páginas vigiadas var item, j, listName = { 'PV': 'watchlist', 'MR': 'recentchanges', 'PN': 'recentchanges' }, summaryChanges = { 'PV' : [ [ '', ], [ '/*', '→' ], [ '*/', ':' ] ], 'MR' : [ [ '/*', '→' ], [ '*/', ':' ] ], 'PN' : [ [ '? ', ] ] }, urlParam = { 'PV': 'diff=last', 'MR': 'diff=last', 'PN': 'redirect=no&rcid=' }, list = query[ listName[ code ] ], max = ( list.length < 10 )? list.length : 10;

for ( i = 0; i < max; i++ ) { item = list[ i ]; if ( !item ){ continue; } title = item.title; charnum += title.length; if (charnum > 180) { break; } length = item.newlen - item.oldlen; if (length > 0) { length = '+' + length; } comment = item.comment || ; for ( j=0; j < summaryChanges[ code ].length; j++ ){ comment = comment.replace( summaryChanges[ code ][0], summaryChanges[ code ][1] ); } if (comment) { comment = '(' + comment + ')'; } if ( code === 'PN' ){ urlParam[ code ] += item.rcid; } pages.push( '<a href="' + mw.util.wikiGetlink( title ) + '?' + urlParam[ code ] + '" title="(' + length + ') ' + item.user + ' ' + comment + '">' + title + '</a>' ); }

this.$submenu.html( '
' + pages.join( ' ' ) + '
' );

break; case 'usu': // Informações do(a) usuário(a) if ( !query ) { mw.log( 'The categories query returned no data.' ); return false; } user = query.allusers && query.allusers[0]; if ( user ) { // Ex.: YYYY-MM-DDThh:mm:ssZ var regDate = user.registration; regDate = regDate.substr(8, 2) + '/' + regDate.substr(5, 2) + '/' + regDate.substr(0, 4); var encUser = encodeURI( user.name ); this.$submenu.html( [ user.editcount + ' edições desde ' + regDate + '.', '<a class="fb-button" href="' + mw.util.wikiGetlink( 'Especial:Contribuições/' ) + encUser + '" title="Abrir a lista de contribuições deste editor" >contribuições</a>', '<a class="fb-button" href="' + mw.util.wikiGetlink( 'Especial:Registo/' ) + encUser + '" title="Abrir a lista de registros deste editor" >registros</a>', '<a class="fb-button" href="' + mw.util.wikiGetlink( 'Especial:Registo' ) + '?type=block&page=User%3A' + encUser + '" title="Abrir a lista de registros de bloqueio deste editor">registros de bloqueio</a>', '<a class="external text fb-button"' + 'title="Abrir a contagem de edições deste editor"' + ' href="http://toolserver.org/~river/cgi-bin/count_edits?user=' + encUser + '&dbname=' + mw.config.get('wgDBname') + '_p">contador de edições</a>' ].join( ' ' ) ); } else { return; } break; } };

/* Initialize the gadget */ fb.init = function () { var inUserNS, $contentSub = $( '#contentSub' ), param = mw.util.getParamValue('fastb'); fb.$menu.attr( 'id', 'fb-menu' ); fb.$submenu.attr( 'id', 'fb-submenu' ); if ($.inArray(mw.config.get('wgAction'), ['view', 'edit']) !== -1) { fb.$submenu.html( ); /*** Menu Principal ***/ if (mw.config.get('wgNamespaceNumber') > -1) { inUserNS = $.inArray(mw.config.get('wgNamespaceNumber'), [2, 3]) > -1 && mw.config.get('wgTitle').indexOf(mw.config.get('wgUserName')) === 0; if (inUserNS) { fb.$menu.html( fb.link('ER|1', 'ER1', 'Marcar subpágina do próprio usuário para eliminação') ); } else { // FIXME: Usar jQuery em vez de onClick, para melhor compatiblidade (mw:RL/MGU#Event_binding) fb.$menu.html( '<a class="fb-button fb-menu-button" title="Exibir regras' + ' para a eliminação rápida" onClick="fb.$submenu.html(fb.submenu.ER)">ER</a>' ); } } if ($.inArray(mw.config.get('wgNamespaceNumber'), [0, 102]) !== -1) { // FIXME: Usar jQuery em vez de onClick, para melhor compatiblidade (mw:RL/MGU#Event_binding) fb.$menu.html( fb.$menu.html() + [ '<a class="fb-button fb-menu-button" title="Exibir regras para a eliminação semi-rápida"' + ' onClick="fb.$submenu.html(fb.submenu.ESR)">ESR</a>', fb.link( 'subst:apagar', 'PE', 'Marcar para eliminação por votação'), '<a class="fb-button fb-action-button"' + ' title="Marcar como cópia ou violação de direito autoral"' + ' onClick="obs=prompt(\'Informe o url da página copiada\',' + ' \'http://\');fb.run(\'subst:VDA\',obs)">VDA</a>', fb.link( 'subst:suspeito', 'susp', 'Marcar como suspeito de violação de direitos autorais'), fb.link( 'subst:matrad', 'trad', 'Marcar esta tradução como sendo de baixa qualidade', 'De qual língua a página foi maltraduzida (ca, de, en, es,' + ' fr, it, ja, nl, no, pl, ru, sv, zh)?' ), fb.link( 'redirect', '#R', 'Redirecionar para outro título', 'Redirecionar para qual página?'), '<a class="fb-button fb-menu-button" title="Exibir predefinições para manutenção"' + ' onClick="fb.$submenu.html(fb.submenu.man)">manutenção</a>', '<a class="fb-button fb-menu-button" title="Exibir predefinições para esboços"' + ' onClick="fb.$submenu.html(fb.submenu.esb)">esboço</a>', '<a class="fb-button fb-menu-button" title="Exibir opções para a busca de fontes"' + ' onClick="fb.$submenu.html(fb.submenu.search)">busca</a>' ].join() ); if (mw.config.get('wgAction') === 'view') { fb.callAPI('afl'); } } else { if ($.inArray(mw.config.get('wgNamespaceNumber'), [2, 10]) !== -1) { fb.$menu.html( fb.$menu.html() + fb.link('subst:apagar', 'PE', 'Marcar para eliminação por votação') ); } if (mw.config.get('wgNamespaceNumber') % 2 === 0) { fb.$menu.html( fb.$menu.html() + fb.link('redirect', '#R', 'Redirecionar para outro título', 'Redirecionar para qual página?') ); } if (mw.config.get('wgNamespaceNumber') === 14) { // FIXME: Usar jQuery em vez de onClick, para melhor compatiblidade (mw:RL/MGU#Event_binding) fb.$menu.html( fb.$menu.html() + '<a class="fb-button fb-menu-button"' + ' title="Exibir opções do CatScan para procurar páginas nesta categoria"' + ' onClick="fb.$submenu.html(fb.submenu.cat)">CatScan</a>' ); } } if (mw.config.get('wgNamespaceNumber') === 3) { // FIXME: Usar jQuery em vez de onClick, para melhor compatiblidade (mw:RL/MGU#Event_binding) fb.$menu.html( fb.$menu.html() + '<a class="fb-button fb-menu-button"' + ' title="Exibir lista de predefinições para avisos"' + ' onClick="fb.$submenu.html(fb.submenu.warn)">aviso</a>' ); } if ($.inArray(mw.config.get('wgNamespaceNumber'), [2, 3]) !== -1) { // FIXME: Usar jQuery em vez de onClick, para melhor compatiblidade (mw:RL/MGU#Event_binding) fb.$menu.html( fb.$menu.html() + '<a class="fb-button fb-menu-button" title="Exibir informações sobre esta conta"' + ' onClick="fb.callAPI(\'usu\')">sobre a conta</a>' ); } } // FIXME: Usar jQuery em vez de onClick, para melhor compatiblidade (mw:RL/MGU#Event_binding) fb.$menu.html( fb.$menu.html() + [ '<a class="fb-button fb-menu-button"' + ' title="Exibir páginas vigiadas que foram alteradas recentemente" onClick="fb.callAPI(\'PV\')">PV</a>', '<a class="fb-button fb-menu-button"' + ' title="Exibir páginas novas que ainda não foram patrulhadas"' + ' onClick="fb.callAPI(\'PN\')">PN</a>', '<a class="fb-button fb-menu-button"' + ' title="Exibir mudanças recentes feitas por IPs em páginas do domínio principal"' + ' onClick="fb.callAPI(\'MR\')">MR</a>' ].join() ); $contentSub.append( fb.$menu ).append( fb.$submenu ); switch (mw.config.get('wgAction')) { case 'edit': fb.salve = (param !== null); if (fb.salve) { fb.run(param, mw.util.getParamValue('fbtxt') || ); } break; case 'markpatrolled': if (param !== null) { location.href = mw.util.wikiGetlink( mw.config.get('wgPageName') ) + '?action=edit&fastb=' + param; } break; default: // Não faz nada nas demais ações } mw.loader.using( 'jquery.tipsy', function() { $('#fb-menu, #fb-submenu').find( 'a' ).tipsy(); } ); };

/* Executes the gadget when document is ready */ $( fb.init );