Usuário:Chicocvenancio/teste.js

Origem: Wikipédia, a enciclopédia livre.

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.
/**
 * Ferramentas para diffs (Reversão e avisos)
 *
 * Em páginas de comparação de 2 edições, inclui atalhos de reverter e avisar o usuário.
 * @source: [[:en:Wikipedia:WikiProject_User_scripts/Scripts/Revert_tools]]
 * @see: [[Wikipedia:Software/Scripts/Reversão e avisos]]
 * @author: [[:en:User:Lorian]]
 * @author: Helder (https://github.com/he7d3r)
 * @license: CC BY-SA 3.0 <https://creativecommons.org/licenses/by-sa/3.0/>
 */
 
/* jslint browser: true, white: true, devel: true */
/* global jQuery, mediaWiki, jsMsg */
 
( function( $, mw /*, undefined */ ) {
'use strict';
 
window.DiffTools = function () {
	/* Private Members */
	var     $patrolLink, options,
		that = this,
		// user1 = $('#mw-diff-otitle2').find('a').first().html(),
		user2    = $('#mw-diff-ntitle2').find('a').first().html(),
		pageName = mw.config.get( 'wgPageName' ).replace( /_/g, ' ' );
		
 
	options = {
	'revert': {
		'description': false,
		
		'Opções': {
			'Reverter': {
				'desc': 'Reverte o artigo para a versão mostrada' +
					' à esquerda',
				'sum': 'Reversão de uma ou mais' +
					' edições de [[Special:Contribs/$2|$2]] para a' +
					' versão $3 de [[User:$1|$1]],'
			},
 
			'+comentário': {
				'desc': 'Reverte o artigo para a versão mostrada' +
					' à esquerda, mas permite incluir informações' +
					' extras no sumário de edição',
				'url': function () {
					var	sum   = 'Reversão de uma ou mais edições de [[Special:Contribs/$2|$2]]' 
							+ ' para a versão $3 de [[User:$1|$1]],',
						oldid = mw.util.getParamValue(
							'oldid',
							$( '#mw-diff-otitle1' ).find( 'a' ).first().attr( 'href' )
						),
						text = prompt( 'Comentário a acrescentar ao sumário da reversão:', 'inadequado' );
 
					if ( text ) {
						sum += ' (' + text + ')';
						that.revert(
							pageName,
							oldid,
							sum
						);
					}
				}
			}
		}
	},
 
	'warn': {
		'description': 'Usuário: ',
		
		'Boas-vindas': {
			'bv': {
				'desc': 'Envia uma mensagem de boas-vindas ao novo usuário',
				'subst': 'Bem-vindo',
				'sum': 'Mensagem de boas-vindas a novo usuário'
			},
			
			'bv-ip': {
				'desc': 'Envia uma mensagem de boas-vindas ao usuário anônimo',
				'subst': 'Bem-vindo IP',
				'sum': 'Mensagem de boas-vindas a usuário anônimo'
			}
		},
		
		'Avisos 1': {
			'av': {
				'desc': 'Envia um aviso ao usuário',
				'subst': 'Aviso|' + pageName,
				'sum': 'Aviso'
			},
			
			'av2': {
				'desc': 'Envia um segundo aviso ao usuário',
				'subst': 'Aviso2|' + pageName,
				'sum': 'Aviso 2'
			},
			
			'bv-av-reg': {
				'desc': 'Envia uma mensagem de boas-vindas e um aviso ao usuário',
				'subst': 'Bv-av-registrado|' + pageName,
				'sum': 'Mensagem de boas-vindas e aviso a usuário registrado'
			},
			
			'bv-av': {
				'desc': 'Envia uma mensagem de boas-vindas e um aviso ao usuário iniciante',
				'subst': 'Bv-av|' + pageName,
				'sum': 'Mensagem de boas-vindas e aviso a iniciante'
			}
		},
		
		'Avisos 2': {
			'propaganda': {
				'desc': 'Envia um aviso sobre propagandas ao usuário',
				'subst': 'Propaganda|' + pageName,
				'sum': 'Aviso sobre propaganda'
			},
			
			'mudança de grafia': {
				'desc': 'Envia um aviso sobre mudança de grafia ao usuário',
				'subst': 'Ortografia|' + pageName,
				'sum': 'Aviso sobre ortografia'
			},
			
			'assinatura em artigo': {
				'desc': 'Envia um aviso sobre assinatura em artigo ao usuário',
				'subst': 'Aviso-assinatura|' + pageName,
				'sum': 'Aviso sobre assinatura em artigo'
			},
			
			'cópia': {
				'desc': 'Envia um aviso sobre os direitos de autor ao usuário',
				'subst': 'Não copie',
				'sum': 'Aviso sobre direitos de autor'
			},
			
			'data': {
				'desc': 'Envia um aviso sobre datas ao usuário',
				'subst': 'Av-data|' + pageName,
				'sum': 'Aviso sobre datas'
			},
			
			'cite fonte': {
			       'desc': 'Envia um aviso sobre citar fontes ao usuário.',
			       'subst': 'cite fonte|' + pageName,
			       'sum': 'Aviso sobre citar fontes'
			}
		},
		
		'Avisos de eliminação': {
			'aviso-ER': {
				'desc': 'Envia um aviso sobre eliminação rápida ao usuário',
				'subst': 'aviso-ER|' + pageName,
				'sum': 'Aviso sobre eliminação rápida'
			},
			
			'aviso-ESR': {
				'desc': 'Envia um aviso sobre eliminação semirrápida ao usuário',
				'subst': 'aviso-ESR|' + pageName,
				'sum': 'Aviso sobre eliminação semirrápida'
			},
			
			'aviso-PE': {
				'desc': 'Envia um aviso sobre eliminação por votação ao usuário',
				'subst': 'aviso-PE|' + pageName,
				'sum': 'Aviso sobre eliminação por votação'
			},
			
			'aviso-PE-criador': {
				'desc': 'Envia um aviso sobre eliminação por votação ao usuário',
				'subst': 'aviso-PE-criador|' + pageName,
				'sum': 'Aviso ao criador sobre eliminação por votação'
			}
		},
		
		'Avisos de remoção de marcação de eliminação': {
			'av-nr': {
				'desc': 'Envia um aviso sobre remoção da marcação de eliminação ao usuário',
				'subst': 'Não remova|' + pageName,
				'sum': 'Aviso sobre remoção da marcação de eliminação'
			},
			
			'av-nr-er': {
				'desc': 'Envia um aviso sobre remoção da marcação de eliminação rápida ao usuário',
				'subst': 'Não remova|' + pageName + '|er',
				'sum': 'Aviso sobre remoção da marcação de eliminação rápida'
			},
			
			'av-nr-esr': {
				'desc': 'Envia um aviso sobre remoção da marcação de eliminação semirrápida ao usuário',
				'subst': 'Não remova|' + pageName + '|esr',
				'sum': 'Aviso sobre remoção da marcação de eliminação semirrápida'
			},
			
			'av-nr-matrad': {
				'desc': 'Envia um aviso sobre remoção da marcação de eliminação por problemas de tradução ao usuário',
				'subst': 'Não remova|' + pageName + '|matrad',
				'sum': 'Aviso sobre remoção da marcação de eliminação por problemas de tradução'
			},
			
			'av-nr-pe': {
				'desc': 'Envia um aviso sobre remoção da marcação de eliminação por votação ao usuário',
				'subst': 'Não remova|' + pageName + '|pe',
				'sum': 'Aviso sobre remoção da marcação de eliminação por votação'
			},
			
			'av-nr-susp': {
				'desc': 'Envia um aviso sobre remoção da marcação de suspeita de violação de direitos autorais ao usuário',
				'subst': 'Não remova|' + pageName + '|suspeito',
				'sum': 'Aviso sobre remoção da marcação de suspeita de violação de direitos autorais'
			},
			
			'av-nr-vda': {
				'desc': 'Envia um aviso sobre remoção da marcação de eliminação por problemas de direitos autorais ao usuário',
				'subst': 'Não remova|' + pageName + '|vda',
				'sum': 'Aviso sobre remoção da marcação de eliminação por problemas de direitos autorais'
			}
		},
		
		'Avisos de nível': {
			'av-v1': {
				'desc': 'Envia o primeiro aviso sobre vandalismo ao usuário',
				'subst': 'Vandalismo|1|' + pageName,
				'sum': 'Aviso sobre vandalismo'
			},
			
			'av-v2': {
				'desc': 'Envia o segundo aviso sobre vandalismo ao usuário',
				'subst': 'Vandalismo|2|' + pageName,
				'sum': 'Segundo aviso sobre vandalismo'
			},
			
			'av-v3': {
				'desc': 'Envia o terceiro aviso sobre vandalismo ao usuário',
				'subst': 'Vandalismo|3|' + pageName,
				'sum': 'Terceiro aviso sobre vandalismo'
			},
			
			'av-s1': {
				'desc': 'Envia o primeiro aviso sobre spam ao usuário',
				'subst': 'Av-Spam|1|' + pageName,
				'sum': 'Aviso sobre spam'
			},
			
			'av-s2': {
				'desc': 'Envia o segundo aviso sobre spam ao usuário',
				'subst': 'Av-Spam|2|' + pageName,
				'sum': 'Segundo aviso sobre spam'
			},
			
			'av-s3': {
				'desc': 'Envia o terceiro aviso sobre spam ao usuário',
				'subst': 'Av-Spam|3|' + pageName,
				'sum': 'Terceiro aviso sobre spam'
			},
			
			'av-t1': {
				'desc': 'Envia o primeiro aviso sobre testes ao usuário',
				'subst': 'Av-teste|1|' + pageName,
				'sum': 'Aviso sobre testes'
			},
			
			'av-t2': {
				'desc': 'Envia o segundo aviso sobre testes ao usuário',
				'subst': 'Av-teste|2|' + pageName,
				'sum': 'Segundo aviso sobre testes'
			},
			
			'av-t3': {
				'desc': 'Envia o terceiro aviso sobre testes ao usuário',
				'subst': 'Av-teste|3|' + pageName,
				'sum': 'Terceiro aviso sobre testes'
			},
			
			'av-r1': {
				'desc': 'Envia o primeiro aviso sobre remoção de conteúdos ao usuário',
				'subst': 'Av-Remoção|1|' + pageName,
				'sum': 'Aviso sobre remoção de conteúdos'
			},
			
			'av-r2': {
				'desc': 'Envia o segundo aviso sobre remoção de conteúdos ao usuário',
				'subst': 'Av-Remoção|2|' + pageName,
				'sum': 'Segundo aviso sobre remoção de conteúdos'
			},
			
			'av-r3': {
				'desc': 'Envia o terceiro aviso sobre remoção de conteúdos ao usuário',
				'subst': 'Av-Remoção|3|' + pageName,
				'sum': 'Terceiro aviso sobre remoção de conteúdos'
			}
		}
       }
       };
 
	/* Public Methods */
 
	// Description: Makes patrollinks for edits or new pages excecute without
	// an additional page load. Including self-closing bookmarklet option.
	// Author: [[meta:User:Krinkle]]
	// Version: 0.15
	// Information: meta.wikimedia.org/wiki/User:Krinkle/Scripts/AjaxPatrolLinks
	// Stats: [[File:Krinkle_AjaxPatrolLinks.js]]
	this.ajaxPatrolLinks = function() {
		var $patrollinks = $( '.patrollink a' );
		$patrolLink = $patrollinks.first();
		
		if ( $patrollinks.length !== 0 ) {
			$patrollinks.click( function( event ) {
				event.preventDefault();
				
				var href = $( this ).attr( 'href' );
				$patrollinks.text( 'Marcando como patrulhada...' );
				$patrollinks = $patrollinks.parent();
				
				/*jslint unparam: true*/
				$.get(
					href,
					null,
					function( data, status /* , request */ ) {
						if ( status === 'success' ) {
							// [[MediaWiki:Markedaspatrolled]]
							$patrollinks.html( '<span style="color:green">Marcada como patrulhada</span>' );
						} else {
							// [[MediaWiki:Markedaspatrollederror]]
							$patrollinks.html( '<span style="color:red">Não é possível marcar como patrulhada</span>' );
						}
					}	
				);
				/*jslint unparam: false*/
			});
		}
	};
 
	this.revert = function ( page, oldid, summary ) {
		jsMsg(
			'Consultando o histórico da página "<a href="'
			+ mw.util.getUrl( page ) + '">' + page.replace( /_/g, ' ' ) + '</a>"...'
		);
		
		// TODO: Patrulhar automaticamente as edições revertidas!
		// [[meta:User:Krinkle/Scripts/AjaxPatrolLinks.js]]
		$.ajax({
			url: mw.util.wikiScript( 'api' ),
			dataType: 'json',
			data: {
				'format': 'json',
				'action': 'query',
				'titles': page,
				'prop': 'revisions',
				'rvprop': 'user|content|ids',
				'rvstartid': oldid,
				'rvlimit': 1,
				'indexpageids': true
			},
			success: function( data ) {
				var rev;
				
				if ( data.error !== undefined ) {
					alert( 'Erro da API: ' + data.error.code + '. ' + data.error.info );
				} else if ( data.query && data.query.pages && data.query.pageids ) {
					rev = data.query.pages[ data.query.pageids[ 0 ] ];
					
					if ( rev.missing === '' ) {
						jsMsg(
							'A página "<a href="' +
							mw.util.getUrl( page ) + '">' + page + '</a> não existe!'
						);
					} else {
						rev = rev.revisions[ 0 ];
						
						that.editPage(
							page,
							rev[ '*' ],
							summary.replace( /\$1/g, rev.user )
								.replace( /\$2/g, user2 )
								.replace( /\$3/g, rev.revid )
						);
						
						$patrolLink.click();
					}
				} else {
					alert( 'Houve um erro inesperado ao usar a API do MediaWiki.' );
				}
			},
			error: function() {
				alert( 'Houve um erro ao usar AJAX para consultar o conteúdo da página.' );
			}
		});
	};
	
	this.editPage = function( page, text, summary, section ) {
		jsMsg(
			'Preparando a edição da página "' + page.replace( /_/g, ' ' ) + '"...'
		);
		
		var data = {
			format: 'json',
			action: 'edit',
			minor: true,
			title: page,
			text: text,
			summary: summary,
			token: mw.user.tokens.get( 'editToken' )
		};
		
		if (section === 'new') {
            data.appendtext = '\n\n' + text;
            data.text = '';
		} 
		
		$.ajax({
			url: mw.util.wikiScript( 'api' ),
			type: 'POST',
			dataType: 'json',
			data: data,
			success: function( data ) {
				if ( data && data.edit && data.edit.result && data.edit.result === 'Success' ) {
					jsMsg(
						'A página "' + page.replace( /_/g, ' ' ) + '" <a href="'
						+ mw.util.getUrl( page ) + '?diff=0">foi editada</a> (<a href="'
						+ mw.util.getUrl( page ) + '">abrir</a>).'
					);
				} else {
					alert( 'Houve um erro ao requisitar a edição da página.' );
				}
			},
			error: function() {
				alert( 'Houve um erro ao usar AJAX para editar a página.' );
			}
		});
	};
 
	this.getLink = function ( text, data, action ) {
		var $link = $( '<a href="#" title="' + data.desc + '">' + text + '</a>' );
		
		if ( typeof data.url === 'string' ) {
			$link.attr( 'href', data.url );
		} else {
			$link.click( function( event ) {
				event.preventDefault(); // avoid jumping to the top (href=#)
				
				if ( $.isFunction( data.url ) ) {
					data.url();
				} else if ( action === 'revert') {
					that.revert(
						mw.config.get( 'wgPageName' ),
						mw.util.getParamValue(
							'oldid',
							$( '#mw-diff-otitle1' ).find( 'a' ).first().attr( 'href' )
						),
						data.sum + ' com [[WP:RA|Reversão e avisos]].'
					);
				} else if ( action === 'warn' ) {
					// edit user talk
					that.editPage(
						mw.config.get( 'wgFormattedNamespaces' )[ 3 ] + ':' + user2,
						'{' + '{subst:' + data.subst + '}} ~~' + '~~',
						data.sum + ' com [[WP:RA|Reversão e avisos]].', // = section title
						'new'
					);
				}
			} );
		}
 
		return $link;
	};
	
	/**
	 * Inserts additional tools on diff pages
	 */
	this.addOptions = function () {
		var     $html = $( '<span id="diff-tools"></span>' ),
			$ulSections = $( '<ul></ul>' );
 
		$.each( options, function( section, list ) {
			var	$liSection = $( '<li class="diff-tools-section"></li>' ),
				$ulSubSections = $( '<ul></ul>' );
				
			$.each( list, function( subsection, sublist ) {
				var	$ulItems = $( '<ul></ul>' ),
					$liSubSection = $( '<li class="diff-tools-subsection"></li>' );
					
				if ( subsection === 'description' ) {
					$liSection.prepend( sublist || '' );
				} else {
					$.each( sublist, function( text, data ) {
						var $item = $( '<li></li>' );
						
						$item.append( that.getLink( text, data, section ) );
						$ulItems.append( $item );
					} );
					
					$liSubSection.append( $ulItems );
					$ulSubSections.append( $liSubSection );
				}
			} );
			
			$liSection.append( $ulSubSections );
			$ulSections.append( $liSection );
		} );
		
		$html.append( $ulSections );
		$( '#contentSub' ).prepend( $html );
	};
 
	/**
	 * Prepare and execute the tools
	*/
	this.run = function () {
		if ( mw.config.get( 'wgNamespaceNumber' ) !== -1 && !!mw.util.getParamValue( 'diff' ) ) {		
			that.addOptions();
			that.ajaxPatrolLinks();
		}	
	};
		

};

// Executes the script when page is ready
$( new window.DiffTools().run );
	
}( jQuery, mediaWiki ) );
 
// [[Categoria:!Código-fonte de scripts|Reversão e avisos]]
// [[en:Wikipedia:WikiProject User scripts/Scripts/Revert tools]]