MediaWiki:Gadget-Wikibugs.js

/* * Original version: http://pl.wikipedia.org/wiki/MediaWiki:Wikibugs.js (2008-12-17) * Russian version by User:Александр Сигачёв, User:Putnik, User:LEMeZza * Converted to OOjs (2017-05-20) by User:Putnik * Spanish version (2018-03-06) by User:Leoncastro */ ( function ( mw, $ ) {	'use strict';

var wb$bugsPage = 'Wikipedia:Informes_de_error'; var wb$badPages = [ "Wikipedia:Portada", "Wikipedia:Informes_de_error", "MSN", "Hotmail", "Facebook", "Twitter", "Skype", "Amazon", "Windows_Live_Messenger", "Correo_Yahoo!", "Windows_Live", "Internet_Explorer" ];

if ( $.inArray( mw.config.get( 'wgNamespaceNumber' ), [ -1, 6 , 7 , 8 ]) > -1 ||		 $.inArray( mw.config.get( 'wgPageName' ), wb$badPages ) > -1 ) { $( '#n-bug_in_article' ).hide; }	var wb$link = function ( page ) { return mw.config.get( 'wgArticlePath' ).replace( /\$1/, page.replace( / /g, '_' ) ); };

var wb$i18n = { nsFile: 'Archivo:', nsSpecial: 'Especial:', nsCat: 'Categoría:', title: 'Informe de errores', btnFix: 'Voy a arreglarlo', btnReport: 'Informar del error', btnCancel: 'Cancelar', btnSend: 'Enviar', fldPage: 'Título de la página', fldText: 'Texto del mensaje', fldTextInfo: 'Por favor, danos la máxima información posible acerca del error que has encontrado. ' +			'A ser posible indica una referencia o sitio web que permita una verificación del dato.', fldCaptcha: 'Código de verificación', fldSign: 'Firma', alertShort: 'El reporte es demasiado corto, por favor, añade más detalles.', alertNoPage: 'Introduce el nombre del artículo.', alertCaptcha: 'Su texto contiene enlaces externos. Por favor,' + ' ingrese el código de la imagen y envíe el mensaje nuevamente.', alertError: 'Se produjo un error al enviar. Intenta nuevamente.', msgSign: '\n\nEnviado por:', newTopic: 'Sección nueva:', htmlIpWarn: ' Atención. Tu dirección IP quedará registrada en el historial y podrá verse.' + ' Puedes crearte una cuenta de usuario. ',		htmlInfo: '' + ' No informes de errores en otros sitios ' + '(como Facebook o Twitter); no lo atenderemos. ' +				' Por favor, no informes sobre artículos que faltan; lo correcto es enviar' + ' una solicitud de creación. ' +			' ' +			' Este sistema sirve únicamente para informar sobre' + ' errores en los artículos de Wikipedia. ' +			'Si has encontrado un error, por favor, intenta arreglarlo tú mismo; la ' + 'tecnología wiki permite que cualquiera pueda ' + 'editar artículos.' + ' ' +			' No dudes en hacerlo, una de las reglas de Wikipedia dice «¡sé valiente editando páginas!».' + ' ' +			' Si no puedes o no sabes arreglar el error, entonces infórmanos de él usando este formulario. ' +			' Si el error ya se ha corregido, no lo informes. ' + ' No dejes tu número de teléfono ni tu correo electrónico. ' +			' Ver los informes de error actuales</a>. ' +			' Lee los <a href="//wikimediafoundation.org/wiki/Términos_de_Uso"' + ' target="_blank">términos de uso</a> y la ' + '<a href="//wikimediafoundation.org/wiki/Política_de_privacidad"' + ' target="_blank">política de privacidad</a>. '	};

var wb$isValidPageName = function (name) { if ( !name || name.substr( 0, name.indexOf( ':' ) + 1 ) === wb$i18n.nsSpecial ) { return false; }		name = name.replace( /_/g, ' ' ); for ( var i = 0; i < wb$badPages.length; i++ ) { if ( name === wb$badPages[i] ) { return false; }		}		return true; };

var wb$popWikibug = function { // Info popup var canEdit = false, $editLink = $( '#ca-edit a' ); if ( $editLink.length ) { canEdit = true; }

// Prepare messages var $infoHtml = $( ' ' ).html( $.parseHTML( wb$i18n.htmlInfo ) ); if ( !mw.config.get( 'wgUserName' ) ) { $infoHtml.append( $( ' ' ).html( $.parseHTML( wb$i18n.htmlIpWarn ) ) ); }

// OOjs window var windowManager = new OO.ui.WindowManager; var infoDialog = new OO.ui.MessageDialog; $( 'body' ).append( windowManager.$element ); windowManager.addWindows( [ infoDialog ] ); windowManager.openWindow( infoDialog, {			title: wb$i18n.title,			message: $infoHtml,			actions: [				{ label: wb$i18n.btnFix, action: 'edit', flags: 'progressive' },				{ label: wb$i18n.btnReport, action: 'report', flags: 'progressive' },				{ label: wb$i18n.btnCancel },			],			size: 'large',		} ).then( function ( opened ) {			function ReportDialog( config ) {				ReportDialog.parent.call( this, config );			}			opened.then( function ( closing, data ) { if ( data && data.action === 'edit' ) { // Go to edit page var $editLink = $( '#ca-edit a' ), editUrl = mw.config.get( 'wgArticlePath' ).replace( /\$1/, wb$bugsPage ); if ( $editLink.length ) { editUrl = $editLink.attr( 'href' ); }					window.location.assign( editUrl );

} else if ( data && data.action === 'report' ) { // Prepare form var inputPage = new OO.ui.TextInputWidget( {						placeholder: wb$i18n.fldPage,						value: mw.config.get( 'wgPageName' ).replace( /_/g, ' ' ),						disabled: wb$isValidPageName( mw.config.get( 'wgPageName' ) ) && !mw.config.get( 'wgNamespaceNumber' ),					} );

var inputText = new OO.ui.MultilineTextInputWidget( {						placeholder: wb$i18n.fldTextInfo,						rows: 5					} );

var inputCaptcha = new OO.ui.TextInputWidget( {						placeholder: wb$i18n.fldCaptcha,					} );

var panelCaptcha = new OO.ui.FieldLayout( inputCaptcha, {						label: wb$i18n.fldCaptcha,					} ); panelCaptcha.toggle( false );

var imageCaptcha = new OO.ui.ToggleWidget; imageCaptcha.$element.css( 'text-align', 'right' ); imageCaptcha.$element.append( $( ' ' )						.attr( 'id', 'wikibugs-captcha-img' )						.attr( 'width', 249 )						.attr( 'height', 63 ) ); imageCaptcha.toggle( false );

var inputSign = new OO.ui.TextInputWidget( {						placeholder: wb$i18n.fldSign,						value: mw.config.get( 'wgUserName' ) ?  +  : '',						disabled: mw.config.get( 'wgUserName' )					} );

var fieldset = new OO.ui.FieldsetLayout( {						classes: [ 'container' ],					} );

fieldset.addItems( [						new OO.ui.FieldLayout( inputPage, { label: wb$i18n.fldPage, align: 'top' } ),						new OO.ui.FieldLayout( inputText, { label: wb$i18n.fldText, align: 'top' } ),						panelCaptcha,						imageCaptcha,						new OO.ui.FieldLayout( inputSign, { label: wb$i18n.fldSign, } ),					] );

// Add the FieldsetLayout to a FormLayout. var form = new OO.ui.FormLayout( {						items: [ fieldset ],					} );

// Open window with report form OO.inheritClass( ReportDialog, OO.ui.MessageDialog ); ReportDialog.static.name = 'reportDialog'; ReportDialog.prototype.getActionProcess = function ( action ) { var dialog = this; if ( action ) { return new OO.ui.Process( function {								if ( action === 'send' ) {									dialog.getActions.setAbilities({ send: false });

// Send message var content = inputText.getValue; if ( content === '' || content.length < 20 || !content.match( ' ' ) ) { mw.notify( wb$i18n.alertShort ); inputText.focus; dialog.getActions.setAbilities({ send: true }); return; }

var page = inputPage.getValue .replace( /^https?:\/\/es\.wikipedia\.org\/wiki\/(.+)$/, '$1' ) .replace( /_/g, ' ' ); page = decodeURIComponent( page );

var section;

if ( page === mw.config.get( 'wgPageName' ).replace( /_/g, ' ' ) &&										wb$isValidPageName( mw.config.get( 'wgPageName' ) )									) { if ( mw.config.get( 'wgNamespaceNumber' ) === 6 ) { section =  + window.wgTitle + ; content = 'thumb|left|100px\n* ' + content + '\n

';										} else { var re = new RegExp( '^('+ wb$i18n.nsCat + '|'+ wb$i18n.nsFile + '|\\/)' ); section = page.replace( re, ':$1' ); section =  + section + ; }									} else { page = page .replace( /\[\[([^\[\]\|]+)\|[^\[\]\|]+\]\]/g, '$1' ) .replace( /[\[\]\|]/g, '' ) .replace( /^\s+/g, '' ) .replace( /\s+$/g, '' );

if ( !wb$isValidPageName( page ) ) { mw.notify( wb$i18n.alertNoPage ); if ( wb$isValidPageName( mw.config.get( 'wgPageName' ) ) ) { inputPage.setValue( mw.config.get( 'wgPageName' ) ); } else { inputPage.setValue( '' ); inputPage.focus; }											dialog.getActions.setAbilities({ send: true }); return; }										if ( page.indexOf( ':' ) > 0 ) { section =  + page + ; } else { section =  + page + ; }									}

content += wb$i18n.msgSign; if ( !mw.config.get( 'wgUserName' ) ) { content += ' ' + inputSign.getValue.trim; }									content += ' ' + '';

dialog.getActions.get[0].pushPending;

var data = { format: 'json', action: 'edit', title: wb$bugsPage, section: 'new', sectiontitle: section, summary: wb$i18n.newTopic + ' /* ' + page + ' */', text: content.trim, token: mw.user.tokens.get( 'editToken' ) };									var captchaId = $( '#wikibugs-captcha-img' ).data( 'id' ); if ( captchaId ) { data.captchaid = captchaId; data.captchaword = inputCaptcha.getValue.trim; }

$.ajax( {										url: '/w/api.php',										type: 'POST',										data: data,										success: function ( xhr ) {											if ( xhr && xhr.edit && xhr.edit.result === 'Success' ) {												// Success												var url = mw.config.get( 'wgArticlePath' )														.replace( /\$1/, wb$bugsPage )														.replace( / /g, '_' );												window.location.href = url + '#' + page;											} else if ( xhr && xhr.edit && xhr.edit.captcha && xhr.edit.captcha.type === 'image' ) {												// Captcha												$( '#wikibugs-captcha-img' )													.attr( 'src', xhr.edit.captcha.url )													.data( 'id', xhr.edit.captcha.id );												imageCaptcha.toggle( true );												inputCaptcha.setValue( '' );												panelCaptcha.toggle( true );												dialog.getActions.get[0].popPending;												mw.notify( wb$i18n.alertCaptcha );												dialog.getActions.setAbilities({ send: true });											} else {												// Error												dialog.getActions.get[0].popPending;												mw.notify( wb$i18n.alertError );												dialog.getActions.setAbilities({ send: true });											}										},										error: function {											dialog.getActions.get[0].popPending;											mw.notify( wb$i18n.alertError );											dialog.getActions.setAbilities({ send: true });										}									} ); } else { dialog.close; }							} );						}						return ReportDialog.parent.prototype.getActionProcess.call( this, action );					};

var reportDialog = new ReportDialog; windowManager.addWindows( [ reportDialog ] );

windowManager.openWindow( reportDialog, {						title: wb$i18n.title,						message: form.$element,						actions: [							{ label: wb$i18n.btnSend, action: 'send', flags: 'progressive' },							{ label: wb$i18n.btnCancel },						],						size: 'medium',					} ); }			} );		} );	};

// Click event $( function {		$( '#n-bug_in_article a' ).click( function ( e ) { e.preventDefault; mw.loader.using( [				'mediawiki.api',				'oojs-ui-core',				'oojs-ui-widgets',				'oojs-ui-windows'			] ).then( wb$popWikibug ); } );	} );

}( mediaWiki, jQuery ) );