Aller au contenu

MediaWiki:Gadget-RevertDiff.js

Une page de Wikipédia, l'encyclopédie libre.
Ceci est la version actuelle de cette page, en date du 8 avril 2025 à 12:25 et modifiée en dernier par Escargot bleu (discuter | contributions). L'URL présente est un lien permanent vers cette version.
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Note : après avoir enregistré la page, vous devrez forcer le rechargement complet du cache de votre navigateur pour voir les changements.

Mozilla / Firefox / Konqueror / Safari : maintenez la touche Majuscule (Shift) en cliquant sur le bouton Actualiser (Reload) ou pressez Maj-Ctrl-R (Cmd-R sur Apple Mac) ;

Firefox (sur GNU/Linux) / Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5.
/**
 * Outils pour réverter
 *
 * fournit des liens dans les pages de diff pour révoquer facilement une modification et avertir son auteur
 *
 * Auteurs : Lorian (en), Chphe (fr)
 * Dernière révision : 28 octobre 2018
 * {{Projet:JavaScript/Script|RevertDiff}}
 */
//<nowiki>

mw.loader.using(['mediawiki.util', 'mediawiki.api'], function () {
    $(function ($) {
    	var api = new mw.Api( { userAgent: 'RevertDiff/1.0.0' } );

        var Texts = {
            Annul        : 'Annuler',
            Revert       : 'Révoquer',
            Message      : 'Message',
            Warn         : 'Avertir',
            MessageAlert : 'Quel message faut-il laisser ?',
            AnnulResume  : 'Annulation des modifications de [[Special:Contributions/$2|$2]] (retour à la version précédente de [[Special:Contributions/$1|$1]])',
            RevertResume : 'Révocation des modifications de [[Special:Contributions/$2|$2]] (retour à la version précédente de [[Special:Contributions/$1|$1]])',
        };

        var Warns = [
            {text: 'Test1',        template: '{{subst:Test 1|$page}} ~~~~'},
            {text: 'Test2',        template: '{{subst:Test 2}} ~~~~'},
            {text: 'Test3',        template: '{{subst:Test 3}} ~~~~'},
            {text: 'Test4',        template: '{{subst:Seul avertissement}} ~~~~'},
            {text: 'Lien externe', template: '{{subst:Bienvenue spammeur|$page}} ~~~~'},
            {text: 'Faut sourcer', template: '{{subst:Faut sourcer|$page}} ~~~~'},
            {text: 'Bienvenue',    template: '{{subst:Bienvenue nouveau|sign=~~~~}}'},
            {text: 'BienvenueIP',  template: '{{subst:Bienvenue IP|sign=~~~~}}'},
            {text: 'MerciIP',      template: '{{subst:Bienvenue IP méritante|{{safesubst:REVISIONUSER}}|sign=~~~~}}'},
        ];

        function isDiffPage() {
            return !!mw.config.get('wgDiffNewId');
        }

        function processAnnulOrRevert(action, user1, user2, withMessage) {
            var summary;
            if (action === 'annul') {
                summary = Texts.AnnulResume;

            } else if (action === 'revert') {
                summary = Texts.RevertResume;

            }
            summary = summary
                .split('$1').join(user1)
                .split('$2').join(user2);
            if (withMessage) {
                var message = prompt(Texts.MessageAlert);
                if (message) {
                    summary += '\xA0: ' + message;
                } else {
                	mw.notify('Aucun message saisi. La modification n\'a pas été annulée.', { type: 'error'});
                    return;
                }
            }
            api.postWithEditToken({
            	title: mw.config.get('wgPageName'),
            	action: 'edit',
            	undoafter: mw.config.get('wgDiffOldId'),
            	undo: action === 'revert' ? mw.config.get('wgCurRevisionId') : mw.config.get('wgDiffNewId'),
            	summary: summary
        	}).done( function ( ) {
				mw.notify('Modification annulée.', { type: 'success'});
			});
        }

        if (isDiffPage()) {
            // Get username of submitter
            var $user1TD = $('td.diff-otitle');
            var $user2TD = $('td.diff-ntitle');
            if (!$user1TD.length || !$user2TD.length) return;

            var user1 = $user1TD.find('a.mw-userlink').text();
            var user2 = $user2TD.find('a.mw-userlink').text();

            var $linkAnnulDirect = $('<a>')
                .attr('href', '#')
                .text(Texts.Annul)
                .click(function (e) {
                    e.preventDefault();
                    processAnnulOrRevert('annul', user1, user2, false);
                });

            var $linkAnnulMessage = $('<a>')
                .attr('href', '#')
                .text(Texts.Message)
                .click(function (e) {
                    e.preventDefault();
                    processAnnulOrRevert('annul', user1, user2, true);
                });

            var $linkRevertDirect = $('<a>')
                .attr('href', '#')
                .text(Texts.Revert)
                .click(function (e) {
                    e.preventDefault();
                    processAnnulOrRevert('revert', user1, user2, false);
                });

            var $linkRevertMessage = $('<a>')
                .attr('href', '#')
                .text(Texts.Message)
                .click(function (e) {
                    e.preventDefault();
                    processAnnulOrRevert('revert', user1, user2, true);
                });

            var $links = $('<span>');

            $links.append('(', $linkAnnulDirect, ' / ', $linkAnnulMessage, ') (', $linkRevertDirect, ' / ', $linkRevertMessage, ')');

            $links.append(' (' + Texts.Warn + ' : ');

            Warns.forEach(function (Warn, index) {
                var Template = Warn.template
                	.split('$page').join(mw.config.get('wgPageName').replace(/_/g, ' '))
                	.split('$user').join(user2);

                if (index !== 0) {
                    $links.append(' / ');
                }

                var $linkWarn = $('<a>')
                    .attr('href', '#')
                    .attr('title', Warn.template)
                    .text(Warn.text)
	                .click(function (e) {
	                    e.preventDefault();
	                    api.newSection( 'User_talk:' + user2, '', Template )
						.done( function ( ) {
							mw.notify('Avertissement envoyé.', { type: 'success'});
						});
                	});

                $links.append($linkWarn);
            });

            $links.append(')');

            if (!document.getElementById('contentSub')) {
                $('<div id="contentSub"></div>').insertBefore('#mw-content-text');
            }
            $('#contentSub').append($links);

        }

    });
});

//</nowiki>