Usuario:Peter Bowman/welcome-user.js

De Wikcionario, el diccionario libre

Nota: Después de publicar, quizás necesite actualizar la caché de su navegador para ver los cambios.

  • Firefox/Safari: Mantenga presionada la tecla Shift mientras pulsa el botón Actualizar, o presiona Ctrl+F5 o Ctrl+R (⌘+R en Mac)
  • Google Chrome: presione Ctrl+Shift+R (⌘+Shift+R en Mac)
  • Internet Explorer/Edge: mantenga presionada Ctrl mientras pulsa Actualizar, o presione Ctrl+F5
  • Opera: Presiona Ctrl+F5.
/**
 * Script para dar la bienvenida a usuarios (registrados) nuevos
 * 
 * Añade 'Dar la bienvenida' en la botonera para páginas relacionadas con un
 * usuario (p. ej. su página de discusión o lista de contribuciones). Después de
 * pulsar el botón, coloca [[Plantilla:Bienvenido usuario]] en la introducción de
 * la página de discusión, créandola si no existe. Si esta existe y ya contiene
 * una bienvenida, aborta la operación.
 * 
 * Discusión: [[Especial:PermaLink/4928580#De estructura]].
 */

( function ( mw, $ ) {

var config = mw.config.get( [
		'wgRelevantUserName',
		'wgTitle',
		'wgUserName',
		'skin'
	] ),
	modules = [
		'mediawiki.api',
		'mediawiki.util',
		'jquery.spinner'
	],
	messages = {
		'welcome-portlet-text': 'Dar la bienvenida',
		'welcome-portlet-tooltip': 'Coloca la plantilla de bienvenida en su página de discusión',
		'welcome-already-welcomed': 'Parece que ya se le ha dado la bienvenida a este usuario.',
		'welcome-summary': 'colocando plantilla de bienvenida'
	},
	targetTemplate = '{' + '{subst:Bienvenido usuario}}\n\n',
	reWelcome = /(?:Wikcionario|WN|Project):Bienvenido, nuevo visitante/i;

if ( !!config.wgRelevantUserName && config.wgRelevantUserName !== config.wgUserName ) {
	mw.messages.set( messages );
	
	$.when(
		mw.loader.using( modules ),
		$.ready
	).done( function () {
		var api = new mw.Api(),
			targetPage = 'User talk:' + config.wgRelevantUserName;
		
		$( mw.util.addPortletLink(
			config.skin === 'timeless' ? 'p-userpagetools' : 'p-cactions',
			'#',
			mw.msg( 'welcome-portlet-text' ),
			'ca-welcome',
			mw.msg( 'welcome-portlet-tooltip' )
		) ).on( 'click', function ( evt ) {
			var $spinner = $.createSpinner( {
					size: 'small',
					type: 'inline'
				} ).appendTo( this );
			
			api.get( {
				formatversion: 2,
				prop: 'revisions',
				rvprop: 'content',
				rvslots: 'main',
				titles: targetPage
			} ).then( function ( res ) {
				var page = res.query.pages[ 0 ];
				
				if (
					!page.missing &&
					reWelcome.test( page.revisions[ 0 ].slots.main.content )
				) {
					mw.notify( mw.msg( 'welcome-already-welcomed' ), { type: 'warn' } );
					$spinner.remove();
					return;
				}
				
				return api.postWithEditToken( api.assertCurrentUser( {
					action: 'edit',
					title: targetPage,
					prependtext: targetTemplate,
					summary: mw.msg( 'welcome-summary' ),
					notminor: true
				} ) ).done( function () {
					window.location = mw.util.getUrl( targetPage );
				} );
			} ).fail( function ( code, data ) {
				mw.notify( api.getErrorMessage( code, data ), { type: 'error' } );
				$spinner.remove();
			} );
			
			return false;
		} );
	} );
}

}( mediaWiki, jQuery ) );