MediaWiki:Gadget-RevertDiff.js
Apparence
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>