Communauté  • Livre d'or
Chats noirs.jpg Actualités, astuces, interview... Venez lire la gazette de ce printemps de Vikidia ! DessinInterview.png

Utilisateur:Hulk/common.js

Aller à la navigation Aller à la recherche

Note : après avoir enregistré tes préférences, tu devras forcer le rechargement complet du cache de ton navigateur pour voir les changements. Mozilla Firefox / Safari : maintiens la touche Majuscule (Shift) en cliquant sur le bouton Actualiser (Reload) ou presse Maj-Ctrl-R (Maj-Cmd-R sur Apple Mac) ; Internet Explorer / Opera : maintiens la touche Ctrl en cliquant sur le bouton Actualiser ou presse Ctrl-F5.

mw.util.addPortletLink('p-Cactions', '/wiki/Utilisatrice:Loulla07', 'Demander conseil' )
mw.util.addPortletLink('p-Navigation', '/wiki/Utilisateur:Pro des Maths/Texte/1eraverto', 'Averto gentil');
 mw.util.addPortletLink('p-Navigation', '/wiki/Special:NouvellesPages', 'Nouvelles pages', 'n-npgs');
importScript('Utilisateur:Vivi-1/common.js');
/*
* This script adds a tab which allows a mass patrolling on the current page. Because it was pointless to mark as patrolled 10 intermediate versions when we can read the difference between the first and the last
*/

var totalRevisions;
var treatedRevisions = 0;

if (mw.config.get('wgNamespaceNumber') >= 0) {
  mw.loader.using( [ 'mediawiki.util', 'mediawiki.api', 'oojs-ui' ], function() {
    mw.util.addPortletLink( 'p-cactions', 'javascript:markAllAsPatrolled()', 'Smart patrol', 'ca-smartpatrol' );
    //mw.util.addPortletLink( 'p-views', 'javascript:markAllAsPatrolled()', 'Smart patrol', 'ca-smartpatrol2', 'Tout marquer comme relue', '', 'ca-history' );
  } );
}

function markAllAsPatrolled() {
  new OO.ui.confirm('Êtes-vous sur de vouloir marquer comme relue toutes les modifications ?').then( function( response ) {
    if ( response === true ) {
        getRevisionsList();
    }
  } );
}

function getRevisionsList() {
  var api = new mw.Api();
  api.get( {
	'action': 'query',
	'format': 'json',
	'prop': 'revisions',
	'titles': mw.config.get( 'wgPageName' ),
	'formatversion': '2',
	'rvprop': 'ids|user',
	'rvlimit': 'max'
  } ).then( function ( data ) {
    var revisions = data.query.pages[ 0 ].revisions;
    //var user = revisions[ 0 ].user;
    totalRevisions = revisions.length;
    revisions.forEach( function ( revision ) {
      treatedRevisions++;
      //if ( user === revision.user ) {
        markRevAsPatrolled( revision.revid );
      //}
    } );

  } ).fail( function ( error ) {
      mw.notification.notify( 'Something went wrong: ' + error, { title: 'Smart Patrol', type: 'error' } );
  } );
}

function markRevAsPatrolled( revid ) {
  var api = new mw.Api();
  api.postWithToken( 'patrol', {
	'action': 'patrol',
	'revid': revid

  } ).then( function ( info ) {
    console.log( 'Success for ' + revid, { title: 'Smart Patrol', type: 'info' } );
    if ( totalRevisions == treatedRevisions ) { window.location.reload(); }

  } ).fail( function ( error ) {
    console.log( 'Something went wrong: ' + error, { title: 'Smart Patrol', type: 'error' } );
  } );
}
if ( mw.config.get( 'wgArticleId' ) > 0 && (mw.config.get( 'wgAction' ) === 'view' || mw.config.get( 'wgAction' ) === 'edit') ) {
    $.when( mw.loader.using( [ 'mediawiki.api', 'mediawiki.util', 'user' ] ), $.ready ).done( function () {

        // Les temps sont en secondes,
        // et personnalisables via le JavaScript utilisateur, e.g. : window.lastContribNiveau1 = 120;
        var alertLevels = {
            1: typeof lastContribNiveau1 !== 'undefined' ? lastContribNiveau1 : 30 * 60,    // Niveau d'alerte fort
        };

        function lastContribCallback( timestampLastRevision ) {
            var last = new Date( timestampLastRevision );
            var now = new Date();
            var diff = Math.round( ( now - last ) / 1000 );

            if ( diff < -600 ) {
                mw.notify( "Erreur probable dans la concordance des horloges serveur-client. Vérifiez l'exactitude de l'heure de votre ordinateur et le fuseau horaire utilisé dans vos préférences globales wiki.", {
                    autoHide: true,
                    title: 'Gadget LastContrib',
                    type: 'error'
                } );
                return;
            }
            if ( diff < 0 ) {
                diff = 0;
            }

            if ( diff <= alertLevels[ 3 ] ) {
                var $contentSub = $( '#contentSub' );
                if ( !$contentSub.length ) { return; }

                var diffHeures = Math.floor( diff / 3600 );
                var diffMinutes = Math.floor( ( diff - diffHeures * 3600 ) / 60 );
                var diffSecondes = diff - diffHeures * 3600 - diffMinutes * 60;

                var icon;
                if ( diff <= alertLevels[ 1 ] ) {
                    icon = '{{vikibreak|pas là|texte à déterminer}}';
                }
                var ellapsed = ( diffHeures > 0 ? diffHeures + ' h ' : '' ) + ( diffMinutes > 0 ? diffMinutes + ' min ' : '' ) + diffSecondes + ' sec';
                var $link = $( '<a href="' + mw.util.getUrl( null, {
                    action: 'history'
                } ) + '" style="font-size:8pt; color:#545454;">' + last.toLocaleTimeString() + ' (Dernière modification il y a ' + ellapsed + '.) </a> ' );

                $contentSub.prepend( icon, $link );
            }
        }

        new mw.Api()
            .get( {
                'action': 'query',
                'prop': 'revisions',
                'titles': mw.config.get( 'wgPageName' ),
                'rvprop': 'timestamp',
                'formatversion': 2
            } )
            .then( function ( data ) {
                var page = data.query.pages[ 0 ];
                lastContribCallback( page.revisions[ 0 ].timestamp );
            } )
            .fail( function ( error, details ) {
                // L'objet Promise échoue quand l'utilisateur quitte la page avant que la requête soit achevée.
                if ( details && details.xhr && details.xhr.readyState < 4 ) {
                    return;
                }
                mw.notify( "Erreur rencontrée lors de la requête à l'API.", {
                    autoHide: true,
                    title: 'Gadget LastContrib',
                    type: 'error'
                } );
                console.log( error, details );
            } );

    } );
}



// Basé sur [[wp:en:User:Fran Rogers/dimorphism.js]] et [[wp:en:User:Splarka/sysopdectector.js]] ;
// Modifié et retravaillé par Bulest85 et Matteo1234321 ;
// Traduction en --> fr par Matteo1234321.

// Fonction qui met au pluriel au besoin.
function UserinfoJsFormatQty(qty, singular, plural) {
    return String(qty).replace(/\d{1,3}(?=(\d{3})+(?!\d))/g, "$& ") + "\u00a0" + (qty == 1 ? singular : plural);
}
// Afficher les infos utilisateur seulement sur la page utilisteur et de discussion dudit utilisateur...
if((mw.config.get("wgNamespaceNumber") == 2 || mw.config.get("wgNamespaceNumber") == 3) && !(/\//.test(mw.config.get("wgTitle")))) {   
    // Ajouter un crochet...
    mw.loader.using( ['mediawiki.util'], function() { $(function(){
        // Demander les informations de l'utilisateur via l'API.
        // Noter que ceci est autorisé jusqu'à l'âge de 5 minutes [traduction douteuse].
        var et = encodeURIComponent(mw.config.get("wgTitle"));
        
        $.getJSON(mw.config.get("wgScriptPath") + "/api.php?format=json&action=query&list=users|usercontribs&usprop=blockinfo|editcount|gender|registration|groups&uclimit=1&ucprop=timestamp&ususers=" + et + "&ucuser=" + et + "&meta=allmessages&amprefix=grouppage-&amincludelocal=1")
        .done(function(query) {
            // Quand l'information arrive, extrayons-en celes dont on a besoin.
            if(!query.query) { return; } // Suggéré [[wp:en:User:Gary]] pour éviter les erreurs JavaScript. --PS 25.08.2010
            query = query.query;
            var user, invalid, missing, groups, groupPages={}, editcount, registration, blocked, gender, lastEdited;
            try {
                user = query.users[0];
                invalid = typeof user.invalid != "undefined";
                missing = typeof user.missing != "undefined";
                groups = (typeof user.groups == "object") ? user.groups : [];
                editcount = (typeof user.editcount == "number") ? user.editcount : null;
                registration = (typeof user.registration == "string") ?
                    new Date(user.registration) : null;
                blocked = typeof user.blockedby != "undefined";
                gender = (typeof user.gender == "string") ? user.gender : null;
                lastEdited = (typeof query.usercontribs[0] == "object") &&
                    (typeof query.usercontribs[0].timestamp == "string") ?
                    new Date(query.usercontribs[0].timestamp) : null;
                for (var am=0; am<query.allmessages.length; am++) {
                	groupPages[query.allmessages[am]['name'].replace("grouppage-","")] = query.allmessages[am]["*"].replace("{{ns:project}}:","Project:");
                }
            } catch(e) {
                return; // Pas beaucoup à faira quand le serveur renvoie une erreur (par exemple le nom de l'utilisateur est mal formé)...
            }
            
            // Dernière modification --PS 27.06.2010
            // Ajout d'un lien à la page de contributions --PS 3.07.2010
            if(lastEdited) {
                statusText += " Dernière modification il y a <a href=\"" + mw.config.get("wgArticlePath").replace("$1", "Spécial:Contributions/" + encodeURIComponent(user.name)) + "\">" + UserinfoJsFormatDateRel(lastEdited) + "</a>";
            }
            genderSpan.appendChild(document.createTextNode(genderSymbol));
            fh.appendChild(genderSpan);

            // Maintenant, ajouter les autres informations. Pas standardes (?), mais au moins, elles font le taf ^^.
            // Ajouter un point après le texte en faisant ainsi. --PS 3.07.2010

            var ss = document.getElementById("siteSub");
            if(!ss) {
                ss = document.createElement("div");
                ss.id = "siteSub";
                ss.innerHTML = "";
                var bc = document.getElementById("bodyContent");
                bc.insertBefore(ss, bc.firstChild);
            }
            ss.innerHTML = '<span id="ps-userinfo">' + statusText + '</span>' + ss.innerHTML + '.';
            ss.style.display = "block";
            });
    }); 
mw.loader.load('/w/index.php?title=Utilisateur:Vivi-1/js//AdminMenu.js&action=raw&ctype=text/javascript');
mw.loader.load('/w/index.php?title=Utilisateur:Vivi-1/js/AdminMenu.css&action=raw&ctype=text/css', 'text/css' );
var totalRevisions;
var treatedRevisions = 0;

if (mw.config.get('wgNamespaceNumber') >= 0) {
  mw.loader.using( [ 'mediawiki.util', 'mediawiki.api', 'mediawiki.notify', 'oojs-ui' ], function() {
    mw.util.addPortletLink( 'p-cactions', 'javascript:markAllAsPatrolled()', 'Smart patrol', 'ca-smartpatrol' );
    //mw.util.addPortletLink( 'p-views', 'javascript:markAllAsPatrolled()', 'Smart patrol', 'ca-smartpatrol2', 'Tout marquer comme relue', '', 'ca-history' );
  } );
}

function markAllAsPatrolled() {
  new OO.ui.confirm('Êtes-vous sur de vouloir marquer comme relue toutes les modifications ?').then( function( response ) {
    if ( response === true ) {
        getRevisionsList();
    }
  } );
}

function getRevisionsList() {
  var api = new mw.Api();
  api.get( {
	'action': 'query',
	'format': 'json',
	'prop': 'revisions',
	'titles': mw.config.get( 'wgPageName' ),
	'formatversion': '2',
	'rvprop': 'ids|user',
	'rvlimit': 'max'
  } ).then( function ( data ) {
    var revisions = data.query.pages[ 0 ].revisions;
    //var user = revisions[ 0 ].user;
    totalRevisions = revisions.length;
    revisions.forEach( function ( revision ) {
      treatedRevisions++;
      //if ( user === revision.user ) {
        markRevAsPatrolled( revision.revid );
      //}
    } );

  } ).fail( function ( error ) {
      mw.notification.notify( 'Something went wrong: ' + error, { title: 'Smart Patrol', type: 'error' } );
  } );
}

function markRevAsPatrolled( revid ) {
  var api = new mw.Api();
  api.postWithToken( 'patrol', {
	'action': 'patrol',
	'revid': revid

  } ).then( function ( info ) {
    console.log( 'Success for ' + revid, { title: 'Smart Patrol', type: 'info' } );
    if ( totalRevisions == treatedRevisions ) { window.location.reload(); }

  } ).fail( function ( error ) {
    console.log( 'Something went wrong: ' + error, { title: 'Smart Patrol', type: 'error' } );
  } );
}
mw.util.addPortletLink( 'p-personal', '/wiki/Spécial:MyPage/Bac_à_sable', 'Mon bac à sable', null, null, null, '#pt-preferences' )
mw.loader.load('https://fr.vikidia.org/w/index.php?title=Utilisateur:Bulest85/lienWP.js&action=raw&ctype=text/javascript');
$('.mw-tag-marker-mobile_edit a').removeAttr('href').css('color', '#222');
$('.mw-tag-marker-visualeditor a').removeAttr('href').css('color', '#222');
$('.mw-tag-marker-visualeditor-switched a').removeAttr('href').css('color', '#222');
mw.util.addPortletLink('p-personal', '/wiki/Vikidia:Boîte_à_idées', 'Boîte à idées')
// [[MediaWiki:Gadget-UserinfoVikidia.js]]
window.UserinfoVikidia = window.UserinfoVikidia || {};
window.UserinfoVikidia.hasTouchScreen = true;
window.UserinfoVikidia.maxScreenWidth = 900;

// LASTCONTRIB
window.lastContribNiveau1 = 180;
window.lastContribNiveau2 = 600;
window.lastContribNiveau3 = 10800;

/** MassRollback 
 **/
mw.loader.load('//en.wikipedia.org/w/index.php?title=User:Writ_Keeper/Scripts/massRollback.js&action=raw&ctype=text/javascript');
mw.util.addPortletLink('p-Navigation', '/wiki/Vikidia:Coin des relecteurs', 'Coin des relecteurs') ;
mw.loader.load('https://fr.vikidia.org/w/index.php?title=Utilisateur:Vivi-1/js/SmartPatrol.js&action=raw&ctype=text/javascript');

importScript('Utilisateur:Linedwell/quickeditcounter.js'); //affiche sur la PU des utilisateurs leur nombre d'éditions

importScript('Utilisateur:Vivi-1/common.js');

/* common.js de Eliastik - possibilité de reprendre le code (http://www.pokepedia.fr/Utilisateur:Eliastik)
Changelog :
- Depuis Eliastik :
-- Inclusion d'un thème sombre
-- Inclusion d'une fonctionnalité d'actualisation toutes les 20 s
- Depuis N_tonio36 :
-- v1.2.0 : inclut un averto pour vérifier les modifications non patrouillées
-- Réadaptation du thème : amélioration de la visibilité
-- v1.3.1 : retrait de l'averto, inclusion d'une section pour modifs non patrouillées dans le panel "Contribuer"
*/

(function(){
    assombrirPagePOE = ""; // pour que la fonction d'assombrissement devienne globale
	desactiverRefresh = "";
	refreshPage = "";
	intervalRefreshMR = "";
	var tempsRefreshMR = 30; // Le nombres de secondes avant de recharger la page
	var NomPage = document.location.href.substring(document.location.href.lastIndexOf( "/" )+1 );
    // Crée une liste d'outils personnels
    var elAP = document.createElement("div");
    elAP.setAttribute("class", "portal");
    elAP.setAttribute("id", "panel-outils-personnels");
    elAP.innerHTML = '<h3>Outils personnels</h3><div class="body"><ul id="outilsPersoList"></ul></div>';
    document.getElementById("mw-panel").appendChild(elAP);
 
    // assombrir la page - retient le choix
    var elAssomPage = document.createElement("li");
    elAssomPage.setAttribute("id", "panel-OP-assombrirPage");
    elAssomPage.innerHTML = '<a href="#" id="assombrirPageOP" onclick="assombrirPagePOE(\'assombrir\')">Assombrir la page</a>';
    document.getElementById("outilsPersoList").appendChild(elAssomPage);
 
    // fonction de cookies pour faire fonctionner l'option "Assombrir la page"
      function createCookie(name,value,days) {
	  if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	  }
	  else var expires = "";
	  document.cookie = name+"="+value+expires+"; path=/";
        }
 
        function readCookie(name) {
	  var nameEQ = name + "=";
	  var ca = document.cookie.split(';');
	  for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	  }
	  return null;
       }
 
       function eraseCookie(name) {
	  createCookie(name,"",-1);
       }
 
	// Rafraîchissement des Modifications récentes
	elIndicRefresh = document.createElement("span");
	elIndicRefresh.style.fontWeight = 'bold';
	elIndicRefresh.setAttribute("id", "labelModRecR");
	document.getElementById("contentSub").appendChild(elIndicRefresh);
 
	refreshPage = function() {
		if(NomPage.indexOf("Sp%C3%A9cial:Modifications_r%C3%A9centes") != -1) {
			elIndicRefresh.innerHTML = 'Les modifications sont rechargées.<a href="#" onclick="desactiverRefresh()">Désactiver</a>.';
			intervalRefreshMR = setInterval(function(){ location.reload() }, tempsRefreshMR * 1000);
			createCookie("stopRefreshMR", "Non", 3600);
		}
	}
 
	desactiverRefresh = function() {
		if(NomPage.indexOf("Sp%C3%A9cial:Modifications_r%C3%A9centes") != -1) {
			createCookie("stopRefreshMR", "Oui", 3600);
			elIndicRefresh.innerHTML = 'Les modifications ne sont pas rechargées.<a href="#" onclick="refreshPage()">Réactiver</a>.';
			clearInterval(intervalRefreshMR);
		}
	}
 
	if(readCookie("stopRefreshMR") != "Oui") {
        refreshPage();
    }
	else {
		desactiverRefresh();
	}
 
    // la fonction d'assombrissement de la page
    assombrirPagePOE = function(type) {
       if(type == "assombrir") {
            createCookie("assombrirPagePO", "Oui", 3600); // crée le cookie
            elAssomPage.innerHTML = '<a href="#" id="assombrirPageOP" onclick="assombrirPagePOE(\'eclaircir\')">Éclaircir la page</a>'; // change le lien du gadget
            // on boucle tous les éléments pour leur donner un style sombre avec la fonction restyleElement (voir plus bas)
			restyleElement("div", "#313139", "#a9aefe");
			restyleElement("a", null, "lightblue");
			restyleElement("input", "#313139", "#a9aefe");
			restyleElement("textarea", "#313139", "#a9aefe");
			restyleElement("select", "grey", "#a9aefe");
			restyleElement("pre", "#313139", "#a9aefe");
			restyleElement("table", "#313139", "#a9aefe");
			restyleElement("td", "null", "#a9aefe");
			restyleElement("tr", "null", "#a9aefe");
			restyleElement("th", "#313139", "#a9aefe");
                        restyleElement("dl", "#313139", "white");
                        restyleElement("dd", "#313139", "white");
			restyleElement("h1", null, "#a9aefe");
			restyleElement("h2", null, "#a9aefe");
			restyleElement("h3", null, "#a9aefe");
			restyleElement("h4", null, "#a9aefe");
			restyleElement("h5", null, "#a9aefe");
			restyleElement("h6", null, "#a9aefe");
			restyleElement("li", "#313139", "#a9aefe");
			restyleElement("ul", "#313139", "#a9aefe");
			restyleElement("li", "#313139", "white");
			restyleElement("code", "#313139", "#a9aefe");
            // style pour la page et le contenu
            document.body.style.cssText = "background-color: #313139; color: #a9aefe;";
            document.getElementById("content").style.cssText = "background-color: #313139; color: #a9aefe;";
            jQuery( function() { $( 'div.vectorTabs span, #p-cactions, div.menu a' ).css( 'background', '#313139' ); } );
jQuery( function() { $( 'div.vectorTabs li.selected span, div.menu li.selected a' ).css( 'background', 'grey' ); } )
			var aNewPageNb = document.getElementsByClassName("new");
			if(aNewPageNb !== null) {
				for (i=0;i<aNewPageNb.length;i++)
				{
					aNewPageNb[i].style.color = 'lightcoral';
				}
			}
        }
        else if(type == "cookieVerif" && readCookie("assombrirPagePO") == "Oui") {
            assombrirPagePOE("assombrir"); // on réexecute la fonction
        }
        else if(type == "eclaircir") {
             if(confirm("La modification s’exécutera au prochain rechargement de la page. Continuer ?")) {
                 createCookie("assombrirPagePO", "Non", 3600); // on supprime le cookie
            }
        }
    }
 
    function restyleElement(type, backgroundColorElem, colorElem) {
          var nbElements = document.getElementsByTagName(type);
		  if(nbElements !== null) {
            for (i=0;i<nbElements.length;i++)
            {
				if(backgroundColorElem !== null) {
                    nbElements[i].style.backgroundColor = backgroundColorElem;
				}
 
				if(colorElem !== null) {
                    nbElements[i].style.color = colorElem;
				}
            }
			return true;
		  }
		  else {
			return false;
		  }
    }
   var Common_Link = document.createElement("a");
   Common_Link.href = "https://fr.vikidia.org/wiki/Utilisateur:Rififi/common.js";
   Common_Link.accesskey = "s";
   Common_Link.title = "Votre script";
   Common_Link.innerHTML = "Common.js";
   var LI = document.createElement("LI");
   LI.class = "active";
   LI.id = "pt-userscript";
   LI.appendChild(Common_Link);
   $("div#p-personal ul").append(LI);
   $("span[dir='auto']").prop("id","PageName");
 
   var Common_Link = document.createElement("a");
   Common_Link.href = "https://fr.vikidia.org/wiki/Utilisateur:Rififi/Bac à sable";
   Common_Link.accesskey = "s";
   Common_Link.title = "Mon bac à sable";
   Common_Link.innerHTML = "Bac à Sable";
   var LI = document.createElement("LI");
   LI.class = "active";
   LI.id = "pt-userscript";
   LI.appendChild(Common_Link);
   $("div#p-personal ul").append(LI);
   $("span[dir='auto']").prop("id","PageName");
 
   var Common_Link = document.createElement("a");
   Common_Link.href = "https://fr.vikidia.org/wiki/Utilisateur:Rififi/Bac à sable 2";
   Common_Link.accesskey = "s";
   Common_Link.title = "Mon bac à sable de modèle";
   Common_Link.innerHTML = "Bac à Sable 2";
   var LI = document.createElement("LI");
   LI.class = "active";
   LI.id = "pt-userscript";
   LI.appendChild(Common_Link);
   $("div#p-personal ul").append(LI);
   $("span[dir='auto']").prop("id","PageName");
 
   var Unseen = document.createElement("a");
   Unseen.href =  "http://fr.vikidia.org/wiki/Projet:Maintenance";
   Unseen.innerHTML = "Maintenance générale";
 
   var UnseenLI = document.createElement("LI");
   UnseenLI.appendChild(Unseen);
   $("#p-Contribuer .body ul").append(UnseenLI);
   $("#wpSummary").prop("autocomplete","off");
 
}());
assombrirPagePOE("cookieVerif"); // vérification du cookie

/**
 * 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 : 27 décembre 2013 — séparation des annulations et révocations
 * {{Projet:JavaScript/Script|RevertDiff}}
 */
//<nowiki>
var RevertDiffParams = new Object();
 
RevertDiffParams.Text = new Object();
RevertDiffParams.Text.Annul = "Restaurer";
RevertDiffParams.Text.AnnulResume = 'Restauration';
RevertDiffParams.Text.Message = "Message";
RevertDiffParams.Text.MessageAlert = 'Raison:';
RevertDiffParams.Text.Revert = "Révoquer";
RevertDiffParams.Text.RevertResume = 'Révocation des modifications de [[Special:Contributions/$2|$2]], retour à la version de [[Special:Contributions/$1|$1]]';
RevertDiffParams.Text.Warn = "Avertir";
 
 
RevertDiffParams.Warn = [ 
  {urlparam:"warn=01", text:"Averto-0",   template:'{{subst:Averto-0}}~~~~'},
  {urlparam:"warn=10", text:"nouveau",      template:'{{Bienvenue}}~~~~ {{SUBST:Averto-0}}~~~~'},
  {urlparam:"warn=02", text:"Averto-1",   template:'{{subst:Aveto-1}}~~~~'},
  {urlparam:"warn=06", text:"Spam0", template:'{{subst:Averto-spam-0}}~~~~'},
  {urlparam:"warn=10", text:"nouveau",      template:'{{Bienvenue}}~~~~ {{SUBST:Averto-spam-0}}~~~~'},
  {urlparam:"warn=07", text:"Spam1", template:'{{subst:Averto-spam-1}}~~~~'},
  {urlparam:"warn=08", text:"Bienvenue",    template:'{{Bienvenue}}~~~~'},
  {urlparam:"warn=09", text:"BienvenueIP",  template:'{{Bienvenue IP}}~~~~'},
  {urlparam:"warn=10", text:"Bac à sable",      template:'{{SUBST:Utilisateur:Rififi2}}~~~~'},
  {urlparam:"warn=10", text:"nouveau",      template:'{{Bienvenue}}~~~~ {{SUBST:Utilisateur:Rififi2}}~~~~'}
];
 
 
function getURLParameters(x) {
  var questionMark = x.indexOf('?');
  if (questionMark == -1) return {}
  var fieldsArray = x.substr(questionMark + 1).split('&');
  var fields = {}
  for (var i = 0; i < fieldsArray.length; i++) {
    var field = fieldsArray[i];
    var equal = field.indexOf('=');
    if (equal == -1) {
      fields[decodeURIComponent(field)] = '';
    } else {
      fields[decodeURIComponent(field.substr(0, equal))] =
          decodeURIComponent(field.substr(equal + 1));
    }
  }
  return fields;
}
 
_GET = getURLParameters(location.href);
 
function getMessage (chemin, where, user1, user2) {
  var message = prompt (RevertDiffParams.Text.MessageAlert, '');
  if (message) {
    window.location = chemin + '&'+where+'=2&user1='+user1+'&user2='+user2+'&message='+message;
  }
}
 
$(document).ready(function (){
  if (location.href.match(/diff=/)) {
    // Get username of submitter
    var user1TD = $('td.diff-otitle')[0];
    var user2TD = $('td.diff-ntitle')[0];
    if(!user1TD || !user2TD) return;
 
    // Récupération du chemin vers la version à rétablir
    var chemin = encodeURI(user1TD.getElementsByTagName('a')[1].href);
 
    var user1 = $(user1TD).find('a.mw-userlink')[0].innerHTML;
    var user2 = $(user2TD).find('a.mw-userlink')[0].innerHTML;
 
    var Annul = '('
               + '<a href="'+chemin+'&annul=1&user1='+user1+'&user2='+user2+'">'+RevertDiffParams.Text.Annul+'</a>'
               + ' / '
               + '<a href="javascript:getMessage(\''+chemin+'\',\'annul\',\''+user1+'\',\''+user2+'\');">'+RevertDiffParams.Text.Message+'</a>'
               + ')';
 
    var Revert = '('
               + '<a href="'+chemin+'&revert=1&user1='+user1+'&user2='+user2+'">'+RevertDiffParams.Text.Revert+'</a>'
               + ' / '
               + '<a href="javascript:getMessage(\''+chemin+'\',\'revert\',\''+user1+'\',\''+user2+'\');">'+RevertDiffParams.Text.Message+'</a>'
               + ')';
 
    var Warn = '('+RevertDiffParams.Text.Warn+' : ';
    var SiteURL = mw.config.get('wgServer') + mw.config.get('wgScript') + '?title=';
    for(var a=0,l=RevertDiffParams.Warn.length;a<l;a++){
        if(a!=0) Warn += ' / ';
        Warn += '<a href="'+SiteURL+'User_talk:'+user2+'&action=edit&section=new'
              + '&'+RevertDiffParams.Warn[a].urlparam+'" '
              + 'title="'+RevertDiffParams.Warn[a].template+'" '
              + '>'+RevertDiffParams.Warn[a].text+'</a>';
    }
    Warn += ')';
    document.getElementById('contentSub').innerHTML = Annul + " " + Revert + " " + Warn;
 
  }else if (location.href.match(/annul=1/)) {
    document.getElementById('wpSummary').value = RevertDiffParams.Text.AnnulResume.split("$1").join(_GET['user1']).split("$2").join(_GET['user2']);
    document.getElementById('editform').submit();
  }else if (location.href.match(/annul=2/)) { 
    document.getElementById('wpSummary').value = 
RevertDiffParams.Text.AnnulResume.split("$1").join(_GET['user1']).split("$2").join(_GET['user2']) + ' : '+_GET['message'];
    document.getElementById('editform').submit();
  }else if (location.href.match(/revert=1/)) {
    document.getElementById('wpSummary').value = RevertDiffParams.Text.RevertResume.split("$1").join(_GET['user1']).split("$2").join(_GET['user2']);
    document.getElementById('editform').submit();
  }else if (location.href.match(/revert=2/)) { 
    document.getElementById('wpSummary').value = 
RevertDiffParams.Text.RevertResume.split("$1").join(_GET['user1']).split("$2").join(_GET['user2']) + ' : '+_GET['message'];
    document.getElementById('editform').submit();
  }else{  
    for(var a=0,l=RevertDiffParams.Warn.length;a<l;a++){
      var Warn = RevertDiffParams.Warn[a];
      if (location.href.match(new RegExp(Warn.urlparam))) {
        var Template = Warn.template;
        Template = Template.split('$page').join(''); // mw.config.get('wgPageName').replace(/_/g, " "));
        Template = Template.split('$user').join(mw.config.get('wgUserName'));
        document.getElementById('wpTextbox1').value = Template;
        document.getElementById('editform').submit();
      }
    }
  }
});
//</nowiki>

/*
 * Résumé Deluxe
 *
 * Ajoute des commentaires de modification prédéfinis
 *
 * Auteur : Dake
 * Contributions : Pabix, Tieno, Ltrlg
 * Date de dernière révision : 3 janvier 2014
 * 
 * Dépendances :
 *  — les habituelles implicites 'mediawiki' & 'jquery' ;
 *  — 'user' (chargement du common.js).
 * 
 * {{Projet:JavaScript/Script|ResumeDeluxe}}
 */
 
var
 
	/*
	 * Vérifier la présence d’un titre de section _ou_ de la chaîne
	 * 'Introduction : ' ; cette dernière est ajoutée par
	 * [[MediaWiki:Gadget-EditZeroth.js]] (avec quelques variations possibles
	 * pour ceux qui le retaperaient à la main).
	 * Cela permet de n’ajouter un séparateur ' ; ' entre deux résumés que si
	 * nécessaire.
	 * Note : on ne vérifie que le fait que le motif est en fin de chaîne, pas
	 * en début.
	 */
	sansPointVirgule = /(\*\/\s*|Introduction\s?:\s?)$/,
 
	/*
	 * La liste des liens qui seront affichés.
	 * Les éléments du tableau sont d’une des deux formes suivantes :
	 *   — [ 'lien' , 'resume' ]
	 *   — 'texte'
	 * où 'lien' représente l’intitulé du lien, 'resume' le résumé d’édition
	 * inséré par le lien et 'texte' les deux à la fois.
	 */
	listeLiens = [],
 
	/*
	 * Liens affichés par défaut, même format que listeLiens.
	 */
	liensParDefaut = [
		'orthographe',
		'typographie',
		'catégorisation',
		'wikification',
		'image',
		'mise en forme',
                'avancement',
		'mise en page',
		'redirection',
		'relecture',
		'style',
		'revert',
		'réorganisation',
		'réponse',
                'nouveau message',
		'maintenance',
		['homonymie', 'création homonymie'],
		['bandeau', 'ajout de bandeau'],
		'infobox',
		'références',
		'retouche de la modification précédente'
	],
 
	/*
	 * Objet permettant de désactiver des liens (parmi la liste par défaut
	 * ci-avant), sous la forme { 'lien1': false, 'lien2': false, … } où
	 * 'lien1', 'lien2'… est l’intitulé du lien à ne pas afficher.
	 */
	liensAffiches = window.ResumeDeluxe_affiches || {},
 
	/*
	 * Objet jQuery contenant l’<input> ou le <textarea> constituant le résumé
	 */
	$resume,
 
	/*
	 * Objet jQuery contenant la liste de liens
	 */
	$liste;
 
/*
 * Fonction renvoyant l’intitulé d’un lien à partir de sa représentation sous
 * forme de tableau ou de chaîne.
 */
function texteDuLien( definition ) {
	if ( $.isArray( definition ) ) {
		return definition[0];
	} else {
		// Soyons sûr d’avoir une chaîne de caractères
		return definition.toString();
	}
}
 
/*
 * Fonction renvoyant le texte ajouté par un lien à partir de sa représentation
 * sous forme de tableau ou de chaîne.
 */
function resumeAInserer( definition ) {
	if ( $.isArray( definition ) ) {
		return definition[1];
	} else {
		// Soyons sûr d’avoir une chaîne de caractères.
		return definition.toString();
	}
}
 
/*
 * Procédure transformant l’ancien format de configuration pour la
 * compatibilité.
 */
function transformerAncienneConfiguration() {
	var i;
	if (
		// Appliqué seulement si le nouveau format n’existe pas
		! $.isArray( window.ResumeDeluxe_liens ) &&
		// Les deux tableaux doivent exister
		$.isArray( window.resumedeluxeTitles ) &&
		$.isArray( window.resumedeluxeInputs ) &&
		// Les deux tableaux doivent avoir la même longueur
		window.resumedeluxeTitles.length == window.resumedeluxeInputs.length
	) {
		window.ResumeDeluxe_liens = [];
		for ( i = 0; i < window.resumedeluxeTitles.length; i++ ) {
			window.ResumeDeluxe_liens.push( [
				window.resumedeluxeTitles[i].replace( /^.\s+/, '' ),
				window.resumedeluxeInputs[i]
			] );
		}
	}
}

/*
 * Procédure appliquant les préférences de l’utilisateur :
 *   — si l’utilisateur a défini window.ResumeDeluxe_liens, celui-ci est utilisé
 *     à la place de la liste par défaut liensParDefaut ;
 *   — sinon si l’utilisateur a défini window.ResumeDeluxe_affiches, les règles
 *     de désactivation sont appliquées ;
 *   — sinon liensAffiches est un objet vide, donc la liste par défaut est
 *     utilisée.
 */
function appliquerConfiguration() {
	var i, cle;
 
	if ( $.isArray( window.ResumeDeluxe_liens ) ) {
		listeLiens = window.ResumeDeluxe_liens;
	} else {
		for ( i = 0; i < liensParDefaut.length; i++ ) {
			cle = texteDuLien( liensParDefaut[i] );
			if ( liensAffiches[cle] !== false ) {
				listeLiens.push( liensParDefaut[i] );
			}
		}
	}
}

/*
 * Procedure effectuant l’ajout d’une chaîne au résumé d’édition, avec un
 * séparateur si besoin
 */
function ajouterAuResume( chaine ) {
	var resumeActuel = $resume.val();
	if ( resumeActuel === '' ) {
		$resume.val( chaine );
	} else if ( sansPointVirgule.test( resumeActuel ) ) {
		$resume.val( resumeActuel + chaine );
	} else {
		$resume.val( resumeActuel + ' ; ' + chaine );
	}
 
	// L’ÉditeurVisuel ne se base plus sur le contenu mais sur l’évènement
	$resume.change();
}

/* 
 * Fonction renvoyant un lien à partir de sa définition
 */
function $lien( definition ) {
	var resume = resumeAInserer( definition );
	return $( '<a>' )
		.text( texteDuLien( definition ) )
		.attr( {
			href: '#',
			title: 'Ajouter «\xA0' + resume + '\xA0» au résumé de modification'
		} )
		.click( function () {
			ajouterAuResume( resume );
			return false;
		} );
}

/*
 * Procédure construisant la liste de liens
 */
function contruireListe() {
	var i;
 
	$cont = $( '<div>' ).attr( 'id', 'ResumeDeluxe' )
		.text( 'Messages prédéfinis\xA0: ' )
		.append( $lien( listeLiens[0] ) );
 
	for( i = 1; i < listeLiens.length; i++ ) {
		$cont
			.append( document.createTextNode( '\xA0• ' ) )
			.append( $lien( listeLiens[i] ) );
	}
}
 
/*
 * Procédure initialisant $resume et insérant la liste de liens dans le cas de
 * l’éditeur de wikicode, quand les nœuds nécessaires sont en place.
 */
function demarrer_wikicode() {
	$( document ).ready( function () {
		$( '#wpSummaryLabel' ).before( $cont );
		$resume = $( '#wpSummary' );
	});
}

/*
 * Procédure initialisant $resume et insérant la liste de liens dans le cas de
 * l’ÉditeurVisuel, quand les nœuds nécessaires sont en place.
 */
function demarrer_EditeurVisuel() {
	mw.hook( 've.saveDialog.stateChanged' ).add( function () {
		/*
		 * Traitement : si le dialogue a été recréé, on y remet ce qu’il faut.
		 * TODO Vérifier si cette vérification est encore nécessaire.
		 */
		if ( $( '#ResumeDeluxe' ).size() < 1 ) {
			$( '#MediaWiki-summary' ).after( $cont );
			$resume = $( '.ve-ui-mwSaveDialog-summary textarea' );
		}
	});
}
 
/*
 * Procédure qui détermine quel éditeur peut être utilisé et démarre le gadget 
 * selon le résultat.
 */
function demarrer() {
	switch( mw.config.get( 'wgAction' ) ) {
		case 'edit':
		case 'submit':
			// Désactivé pour la création de sections
			if ( ! /(\?|&)section=new(&|$)/.test( document.location.search ) ) {
				demarrer_wikicode();
			}
			break;
		case 'view':
			demarrer_EditeurVisuel();
			break;
	}
}

/*
 * Démarrage du tout
 */
// Compatibilité avec l’ancien format de configuration
transformerAncienneConfiguration();
// Lecture des préférences
appliquerConfiguration();
// Construction de la liste des liens
contruireListe();
// Insère la liste dans l’arbre des nœuds et cherche le nœud contenant le résumé
demarrer();