Utilizador:Giovanni L. Zanchet/Gadget-diffTools.js/core.js

Fonte: Wikivoyage

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 [[WP:Scripts/Reversão e avisos]] * @see [[MediaWiki:Gadget-diffTools.js/buttonsList.js]] * @update 13/sep/2016 * @author [[w:en:User:Lorian]] * @author Helder (https://github.com/he7d3r) * @author [[w:pt:User:!Silent]] */ /* jshint laxbreak: true */ /* global mediaWiki, jQuery */ ( function ( mw, $ ) { 'use strict'; var df, 	api = new mw.Api(); function DiffTools() { 	/** 	 * User to be reverted () 	 * @property {string} revertUser 	 */ 	this.revertUser = ( $( '#mw-diff-ntitle2' ).find( 'a' ).first().html() || $( '#mw-revision-name' ).find( '.mw-userlink' ).html() ).replace( /<\/?bdi>/g, '' ); 	/** 	 * Name of current page 	 * @property {string } pageName 	 */ 	this.pageName = mw.config.get( 'wgPageName' ).replace( /_/g, ' ' ); 	/** 	 * List of buttons 	 * @property {object} 	 */ 	this.buttons = {}; } /** * Reverts an edit * * @param {string} page * @param {string|number} oldid * @param {string} summary */ DiffTools.prototype.revert = function ( page, oldid, summary ) { 	mw.notify( $.parseHTML( df.message( 'df-getPageHistory', mw.util.getUrl( page ), page.replace( /_/g, ' ' ) ) ) ); 	$.getJSON( mw.util.wikiScript( 'api' ), { 		'format': 'json', 		'action': 'query', 		'titles': page, 		'prop': 'revisions', 		'rvprop': 'user|content|ids', 		'rvstartid': oldid, 		'rvlimit': 1, 		'indexpageids': true 	} ).done( function ( data ) { 		var rev; 		if ( data.error !== undefined ) { 			mw.notify( df.message( 'df-error-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 === '' ) { 				mw.notify( $( df.message( 'df-error-pageNotExist', mw.util.getUrl( page ), page ) ) ); 			} else { 				rev = rev.revisions[ 0 ]; 				df.editPage( 					page, 					rev[ '*' ], 					summary.replace( /\$1/g, rev.user ) 						.replace( /\$2/g, df.revertUser ) 						.replace( /\$3/g, rev.revid ) 				); 				$( '.patrollink a' ).first().click(); 			} 		} else { 			mw.notify( df.message( 'df-error-unknown' ) ); 		} 	} ).fail( function () { 		mw.notify( df.message( 'df-error-ajaxFail-1' ) ); 	} ); }; /** * Reverts an edit with a commentary */ DiffTools.prototype.revertWithComment = function () { 	var $commentary, 		buttons = {}, 		initialRemaining = 255 - df.message( 'df-edit-summaryPrefix', df.revertUser ).length - df.message( 'df-edit-summarySufix' ).length - 7, 		remainingControl = function( e ) { 			if ( initialRemaining - $( this ).val().length <= 0 && e.which !== 8 && !e.ctrlKey ) { 				e.preventDefault(); 			} 			if ( $commentary.val().length > initialRemaining ) { 				$commentary.val( $commentary.val().substr( 0, initialRemaining ) ); 			} 			$( '#df-dialog-remainingChar' ).text( df.message( 'df-dialog-remainingChar', initialRemaining - $( this ).val().length ) ); 		}; 	buttons[ df.message( 'df-OK' ) ] = function() { 		if ( $commentary.val() === '' ) { 			$commentary.addClass( 'df-fillField' ); 			return; 		} 		df.revert( 			df.pageName, 			mw.util.getParamValue( 'oldid', $( '#mw-diff-otitle1' ).find( 'a' ).first().attr( 'href' ) ), 			df.message( 'df-edit-summaryPrefix', df.revertUser ) + ' (' + $commentary.val() + '),' 		); 		$( this ).dialog( 'close' ); 	}; 	buttons[ df.message( 'df-cancel' ) ] = function() { 		$( this ).dialog( 'close' ); 	}; 	df.dialog( { 		content: 			'<label>' 				+ df.message( 'df-dialog-commentary' ) + '<br />' 				+ '<textarea id="df-dialog-commentary" />' 			+ '</label>' 			+ '<div id="df-dialog-remainingChar">' + df.message( 'df-dialog-remainingChar', initialRemaining ) + '</div>', 		buttons: buttons 	} ); 	$commentary = $( '#df-dialog-commentary' ); 	$commentary.keydown( remainingControl ); 	$commentary.keyup( remainingControl ); }; /** * Edits a page * * @param {string} page * @param {string} text * @param {string} summary * @param {string} [section] */ DiffTools.prototype.editPage = function ( page, text, summary, section ) { 	mw.notify( df.message( 'df-edit-preparing', page.replace( /_/g, ' ' ) ) ); 	var data = { 		format: 'json', 		action: 'edit', 		minor: true, 		watchlist: 'nochange', 		title: page, 		text: text, 		summary: summary + df.message( 'df-edit-summarySufix' ), 		token: mw.user.tokens.get( 'editToken' ), 		done: { 			success: function ( data ) { 				mw.notify( 					$( df.message( 						'df-edit-success', 						page.replace( /_/g, ' ' ), 						mw.util.getUrl( page, { 							diff: data.newrevid 						} ), 						mw.util.getUrl( page ) 					) ) 				); 			}, 			apiError: function () { 				mw.notify( df.message( 'df-error-requestFail' ) ); 			} 		} 	}; 	if ( section === 'new' ) { 		data.appendtext = '\n\n' + text; 		data.text = ''; 	} 	api.editPage( data ).fail( function () { 		mw.notify( df.message( 'df-error-ajaxFail-2' ) ); 	} ); }; /** * @object df Instance of DiffTools */ df = new DiffTools(); /** * Messages * @see [[mw:ResourceLoader/Default_modules#mediaWiki.message]] * @return {string} */ df.message = function ( /*name[, $1[, $2[, ... $N ]]]*/ ) { 	return mw.message.apply( this, arguments ).plain(); }; /** * Creates a dialog * @param {jQuery.dialog} info Dialog info * @return {jQuery} */ df.dialog = function ( info ) { 	var $dfDialog = $( '<div class="df-dialog" class="ui-widget"></div>' ).append( info.content ); 	if ( !info.modal ) { 		info.modal = true; 	} 	if ( !info.buttons ) { 		info.buttons = { 			'OK': function () { 				$( this ).dialog( 'close' ); 			} 		}; 	} 	$.extend( info, { 		title: df.message( 'df-diffTools' ), 		height: 'auto', 		width: 'auto', 		open: function () { 			$( '.ui-dialog-titlebar-close' ).hide(); 		}, 		close: function () { 			$dfDialog.dialog( 'destroy' ).remove(); 		} 	} ); 	return $dfDialog.dialog( info ); }; /** * Sets the links (buttons) * * @param {string} text * @param {string} data * @param {string} action * @return {jQuery} */ df.setLink = 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') { 				df.revert( 					mw.config.get( 'wgPageName' ), 					mw.util.getParamValue( 						'oldid', 						$( '#mw-diff-otitle1' ).find( 'a' ).first().attr( 'href' ) 					), 					data.sum 				); 			} else { 				// edit user talk 				df.editPage( 					mw.config.get( 'wgFormattedNamespaces' )[ 3 ] + ':' + df.revertUser, 					'{' + '{subst:' + data.subst + '}} ~~' + '~~', 					data.sum, // = section title 					'new' 				); 			} 		} ); 	} 	return $link; }; /** * Inserts additional tools on diff pages */ df.run = function () { 	var $liSection, $ulSubSections, $ulItems, $liSubSection, 		$ulSections = $( '<ul></ul>' ); 	$.each( df.buttons, function ( section, list ) { 		$liSection = $( '<li class="diff-tools-section"></li>' ); 		$ulSubSections = $( '<ul></ul>' ); 		$.each( list, function ( subsection, sublist ) { 			$ulItems = $( '<ul></ul>' ); 			$liSubSection = $( '<li class="diff-tools-subsection"></li>' ); 			if ( subsection === 'description' ) { 				$liSection.prepend( sublist || '' ); 			} else { 				$.each( sublist, function ( text, data ) { 					$ulItems.append( 						$( '<li></li>' ).append( df.setLink( text, data, section ) ) 					); 				} ); 				$liSubSection.append( $ulItems ); 				$ulSubSections.append( $liSubSection ); 			} 		} ); 		$liSection.append( $ulSubSections ); 		$ulSections.append( $liSection ); 	} ); 	$( '#contentSub' ).prepend( 		$( '<span id="diff-tools"></span>' ).append( $ulSections ) 	); }; window.diffTools = new DiffTools(); $.getScript( '//pt.wikipedia.org/w/index.php?title=MediaWiki:Gadget-diffTools.js/buttonsList.js&action=raw&ctype=text/javascript' ).done( function () { 	df.buttons = window.diffTools.buttons; 	// Executes the script when page is ready 	$( df.run ); } ); }( mediaWiki, jQuery ) ); // [[Categoria:!Código-fonte de scripts|Reversão e avisos]]