« Utilisateur:Arkanosis/xdone.js » : différence entre les versions

Une page de Wikipédia, l'encyclopédie libre.
Contenu supprimé Contenu ajouté
pour le "window.xdone_options", notamment pour si un jour ce script est transformé en gadget
Utilisation de GadgetPreferences
Ligne 24 : Ligne 24 :
'Wikipédia:Requête_aux_administrateurs', // RA
'Wikipédia:Requête_aux_administrateurs', // RA
'Wikipédia:Vérificateur_d\'adresses_IP/Requêtes', // RCU
'Wikipédia:Vérificateur_d\'adresses_IP/Requêtes', // RCU
'MediaWiki:Préférences_des_Gadgets',
];
];


Ligne 32 : Ligne 33 :
importStylesheet('User:Arkanosis/xdone.css');
importStylesheet('User:Arkanosis/xdone.css');


mw.loader.using( [ 'user', 'user.options' ], function () {
mw.loader.using( [ 'user', 'user.options', 'ext.gadget.GadgetsPreferences' ], function () {
mw.hook( 'gadgets-preferences.ready' ).add( function () {
$( function ( $ ) {


var _i18n = ( function () {
var _i18n = ( function () {
Ligne 41 : Ligne 42 :
fr: {
fr: {
summary: '[[Discussion_utilisateur:Arkanosis/xdone.js|xdone]]' + nbsp + ': fait',
summary: '[[Discussion_utilisateur:Arkanosis/xdone.js|xdone]]' + nbsp + ': fait',
done_message: '{{Fait}} ~~~~'
done_message: '{{Fait}} ~~~~',
done_message_label: 'Message à apposer',
done_message_help: 'Pensez à inclure "~~~~" à la fin pour que le message soit signé.'
}
}
};
};
Ligne 60 : Ligne 63 :
}() );
}() );


var _option = $.extend( {
var _option = mw.gadgetsPreferences.register( 'xdone', 'xDone', {
'done_message': _i18n( 'done_message' )
done_message: { label: _i18n( 'done_message_label' ), type: 'string', default: _i18n( 'done_message' ), help: _i18n( 'done_message_help' ) }
}, window.xdone_options );
} );
_option = $.extend( _option, window.xdone_options );


var _templates = '(DIMS|DIPP|DPH|DPP|DR|DRP|RA|RCU)';
var _templates = '(DIMS|DIPP|DPH|DPP|DR|DRP|RA|RCU)';

Version du 8 octobre 2019 à 02:57

/*
 * xdone — Mark tasks as done
 * (C) 2013-2017 Arkanosis <jroquet@arkanosis.net>
 * (C) 2017 Zebulon84 <wiki@zebulon84.com>
 * (C) 2017-2018 Od1n
 * Released under the MIT/X11 license
 */

/*global window, alert, mw, $, importStylesheet */
/*jslint vars: true, plusplus: true */

// <nowiki>

( function () {
	'use strict';

	var relevantPages = [
		'Wikipédia:Demande_de_protection_de_page', // DPP
		'Wikipédia:Demande_de_purge_d\'historique', // DPH
		'Wikipédia:Demande_de_renommage', // DR
		'Wikipédia:Demande_de_restauration_de_page', // DRP
		'Wikipédia:Demande_d\'intervention_sur_un_message_système', // DIMS
		'Wikipédia:Demande_d\'intervention_sur_une_page_protégée', // DIPP
		'Wikipédia:Requête_aux_administrateurs', // RA
		'Wikipédia:Vérificateur_d\'adresses_IP/Requêtes', // RCU
		'MediaWiki:Préférences_des_Gadgets',
	];

	if ( relevantPages.indexOf( mw.config.get( 'wgPageName' ) ) === -1 ) {
		return;
	}

	importStylesheet('User:Arkanosis/xdone.css');

	mw.loader.using( [ 'user', 'user.options', 'ext.gadget.GadgetsPreferences' ], function () {
		mw.hook( 'gadgets-preferences.ready' ).add( function () {

			var _i18n = ( function () {
				var nbsp = String.fromCharCode( 0xA0 ); // non-breaking space

				var l10n = {
					fr: {
						summary: '[[Discussion_utilisateur:Arkanosis/xdone.js|xdone]]' + nbsp + ': fait',
						done_message: '{{Fait}} ~~~~',
						done_message_label: 'Message à apposer',
						done_message_help: 'Pensez à inclure "~~~~" à la fin pour que le message soit signé.'
					}
				};
				l10n[ 'nb' ] = l10n.no;
				l10n[ 'pt-br' ] = l10n.pt;

				var lang = mw.user.options.get( 'language' );
				if ( !l10n[ lang ] ) {
					lang = 'fr';
				}

				return function ( key ) {
					if ( l10n[ lang ][ key ] ) {
						return l10n[ lang ][ key ];
					}
					return l10n[ 'fr' ][ key ];
				};
			}() );

			var _option = mw.gadgetsPreferences.register( 'xdone', 'xDone', {
				done_message: { label: _i18n( 'done_message_label' ), type: 'string', default: _i18n( 'done_message' ), help: _i18n( 'done_message_help' ) }
			} );
			_option = $.extend( _option, window.xdone_options );

			var _templates = '(DIMS|DIPP|DPH|DPP|DR|DRP|RA|RCU)';

			var _apiDone = function ( data ) {
				if ( data && data.edit && data.edit.result === 'Success' ) {
					window.location.reload();
				} else if ( data && data.error ) {
					alert( 'Error: API returned error code "' + data.error.code + '": ' + data.error.info );
				} else {
					alert( 'Error: Unknown result from API.' );
				}
			};

			var _apiFail = function ( _ ) {
				alert( 'Error: Request failed.' );
			};

			var _getSectionValue = function ( $section ) {
				var $title = $section.prev( 'h2' );
				// fallback pour {{DR début}}
				if ( !$title.length ) {
					$title = $section.prev().prev( 'h2' );
				}
				if ( !$title.length ) {
					return;
				}

				var link = $title.find( '.mw-editsection a:not(.mw-editsection-visualeditor)' )[ 0 ];
				if ( !link ) {
					return;
				}

				var sectionMatch = /[?&]section=([^&]+)/.exec( link.search );
				if ( !sectionMatch ) {
					return;
				}

				return decodeURIComponent( sectionMatch[1].replace( /\+/g, ' ' ) );
			};

			$( '#mw-content-text' ).find( '.request-pending' ).each( function ( _, section ) {
				var $section = $( section );

				var sectionValue = _getSectionValue( $section );
				if ( !sectionValue ) {
					return;
				}

				var $status = $section.find( '.request-status' );
				if ( !$status.length ) {
					return;
				}

				var $button = $( '<a class="xdone-button">marquer comme traité</a>' ).click( function () {
					$.get(
						mw.util.wikiScript( 'api' ),
						{
							format: 'json',
							action: 'query',
							titles: mw.config.get( 'wgPageName' ),
							prop: 'revisions',
							rvprop: 'content',
							rvsection: sectionValue
						}
					).done( function ( data ) {
						$.each( data.query.pages, function ( _, page ) {
							var text = page.revisions[ 0 ][ '*' ];
							$.each( [
								[ '<!-- S\'il vous plaît, n\'utilisez pas de modèles ou de liens internes dans le titre de votre requête -->', '' ],
								[ '<!-- Indiquez votre requête ici -->', '' ],
								[ '<!-- Indiquez le titre exact de l\'article dans le modèle {{a-court}} ci-dessus-->', '' ],
								[ '<!-- Écrivez dans la boîte \'\'Sujet/titre\'\' ci-dessus : [[MediaWiki:nom de la page]], puis remplissez les rubriques ci-dessous -->', '' ],
								[ '<!-- Ne pas modifier la ligne ci-avant -->', '' ],
								[ '<!-- Ne pas modifier la ligne ci-après -->', '' ],
								[ '<!-- Ne pas modifier la ligne qui précède -->', '' ],
								[ '<!-- Ne pas modifier la ligne qui suit -->', '' ],
								[ '<!-- NE PAS MODIFIER NI ÉCRIRE SOUS LA LIGNE CI-APRÈS -->', '' ],
								[ '<!-- toujours écrire au-dessus de cette ligne -->', '' ],
								[ ' <!-- ne pas modifier cette ligne -->', '' ],
								[ ' <!-- NE PAS modifier CETTE LIGNE -->', '' ],
								[ ' <!-- Indiquez votre justification ici -->', '' ],
								[ '<!-- Indiquez votre requête après cette ligne -->', '' ],
								[ '<!--  L\'intervention d\'un administrateur n\'est pas nécessaire si l\'historique de l\'article qui porte le nom cible ne contient qu\'une ligne et que son contenu est une redirection vers le titre actuel.  -->', '' ],
								[ /\n\n\n*/g, '\n\n' ],
								[ new RegExp('\\{\\{' + _templates + ' début\\|traitée=\\|date=(<!--~~~~~-->)?\\}\\}(<!-- ne pas modifier cette ligne -->)?\n+', 'g'), '{{$1 début|traitée=oui|date=~~~~~}}\n' ],
								[ new RegExp('\\{\\{' + _templates + ' début\\|statut=\\|date=(<!--~~~~~-->)?\\}\\}(<!-- ne pas modifier cette ligne -->)?\n+', 'g'), '{{$1 début|statut=oui|date=~~~~~}}\n' ],
								[ new RegExp('\n*\\{\\{' + _templates + ' fin\\}\\}', 'g'), '\n:' + _option[ 'done_message' ] + '\n{{$1 fin}}' ],
								[ new RegExp('(\n:[^:\n][^\n]*\n)(:[^\n]*\n\\{\\{' + _templates + ' fin\\}\\})', 'g'), '$1\n$2' ]
							], function ( _, pattern ) {
								text = text.replace( pattern[ 0 ], pattern[ 1 ], 'g' );
							} );
							var summary = text.split( '\n' )[ 0 ];
							$.each( [
								[ /^== */, '' ],
								[ / *==.*/, '' ]
							], function ( _, pattern ) {
								summary = summary.replace( pattern[ 0 ], pattern[ 1 ] );
							} );
							$.post(
								mw.util.wikiScript( 'api' ),
								{
									format: 'json',
									action: 'edit',
									title: mw.config.get( 'wgPageName' ),
									section: sectionValue,
									summary: '/* ' + summary + ' */ ' + _i18n( 'summary' ),
									minor: 'true',
									text: text,
									token: mw.user.tokens.get( 'editToken' )
								}
							).done( _apiDone ).fail( _apiFail );
						});
					} ).fail( _apiFail );
				} );

				$status.append( ' ', $button );
			} );

		} );
	} );

}() );

// </nowiki>