« Utilisateur:FanDeNintendoFR/common.js » : différence entre les versions

De Poképédia
mAucun résumé des modifications
m (Page blanchie)
Balise : Blanchiment
 
Ligne 1 : Ligne 1 :
/**
* Accès immédiat au contenu des références et notes en bas de page
* dans une fenêtre contextuelle.
* auteur : http://fr.wikipedia.org/wiki/Utilisateur:Lgd
* licence : MIT
*
* Utilise : http://fr.wikipedia.org/wiki/MediaWiki:Gadget-tooltipRef.css
*
* Paramétrage: ajouter var tooltipRefHover = true dans le common.js personnel
* pour utiliser au survol plutôt qu'au clic
*/


var tooltipRef = function ($) {
    var backClass = '.renvois_vers_le_texte';
    var msg_err1 = 'Erreur : note ou référence non trouvée.';
    var msg_err2 = 'Erreur: entrée non trouvée dans la bibliographie.';
    var msg_err3 = '<br>Cette fonctionnalité peut ne pas être disponible en mode édition si vous prévisualisez une section de page.';
    var msg_close = 'Fermer';
    var msg_go1 = 'Aller';
    var msg_go1title = 'Aller à cette référence en fin de page';
    var msg_go2 ='Aller à la bibliographie';
    var tooltipRefTimer = false;
    function fixId(myid) { // replaces special characters in id name
        return myid.replace(/[\[\]:.]/g, "\\$&");
    }
    function closeNote() {
        $('.hasnote').removeClass('hasnote');
        $('li.tooltipRef').remove();
    }
    function closeNoteAfterDelay() {
        tooltipRefTimer = setTimeout(closeNote, 400);
    }
    function cancelDelayedNoteClosure() {
        clearTimeout(tooltipRefTimer);
    }
    function openNote(ref) {
        closeNote();
        var id = ref.attr('href');
        var note;
        var fallback;
        var idfix = fixId(id);
        if ($(idfix).length != 0) {
            note = $(idfix).clone();
            // copy computed styles to clone as inline styles
            var links1 = $(idfix).find('a.external');
            var links2 = note.find('a.external');
            links1.each(function (i, elm) {
                var computed = $(elm).css(['color', 'background-image', 'background-position', 'background-repeat', 'padding-right']);
                links2.eq(i).css(computed);
            });
            note.removeAttr('id').addClass('tooltipRef');
            note.find(backClass).remove();
            note.find('[href^="#"]').click(function() {
                if ($(this).is('.open')) {
                    $('.subnote').remove();
                    $(this).removeClass('open');
                    return false;
                }
                $('.subnote').remove();
                $('.tooltipRef .open').removeClass('open');
                var id2 = $(this).attr('href');
                var more = $('<a href="'+id2+'">'+msg_go2+'</a>');
                more.click(closeNote);
                var note2;
                id2 = fixId(id2);
                if ($(id2).length != 0) {
                    note2 = $(id2).clone().addClass('subnote').removeAttr('id');
                    var morep = $('<p class="more"></p>');
                    morep.append(more);
                    note2.append(morep);
                } else {
                    note2 = $('<span class="subnote">'+msg_err2+'</span>');
                }
                note.append(note2);
                $(this).addClass('open');
                return false;
            });
            fallback = $('<a href="'+id+'" class="go" title="'+msg_go1title+'">'+msg_go1+'</a>&nbsp;');
            fallback.click(closeNote);
        } else {
            note = $('<li class="tooltipRef">'+msg_err1+'</li>');
        }
        var link = $('<a href="#" class="close" title="'+msg_close+'">X</a>');
        link.click(function() {
            closeNote();
            return false;
        });
        var span = $('<span class="actions">&nbsp;</span>');
        span.prepend(fallback).append(link);
        note.prepend(span);
        if (typeof tooltipRefHover !== 'undefined' && tooltipRefHover) {
            note.mouseover(cancelDelayedNoteClosure);
            note.mouseout(closeNoteAfterDelay);
        }
        $('body').append(note);
        var offset = ref.offset();
        note.offset({
            top: offset.top + ref.height(),
            left: offset.left > 500 ? offset.left - note.outerWidth() : offset.left
        });
        ref.addClass('hasnote');
        return false;
    }
    if (typeof tooltipRefHover !== 'undefined' && tooltipRefHover) {
        $('sup.reference > a').mouseenter(function() {
            openNote($(this));
        });
        $('sup.reference').mouseover(cancelDelayedNoteClosure);
        $('sup.reference').mouseout(closeNoteAfterDelay);
        $('sup.reference > a').click(function() {
            return false;
        });
    } else {
        $('sup.reference > a').click(function() {
            if ($(this).is('.hasnote')) {
                closeNote();
                return false;
            }
            openNote($(this))
            return false;
        });
    }
}
mw.loader.using(["user", "user.options"], function() {
    if (!mw.user.options.get('gadget-tooltipRef')) {
        importStylesheet('MediaWiki:Gadget-tooltipRef.css');
    }
    $(document).ready(tooltipRef);
});
// Permet de zoomer une image ("thumb" ou galerie) au survol de la souris ou au focus du clavier
// Documentation : Projet:JavaScript/Notices/ZoomOnThumb
//<source lang=javascript>
//<pre><nowiki>
////////////////////////////////////////////////////////////// VARIABLES PERSONNALISABLES //////////////////////////////////////////
////  Images thumb  ////
// délai avant zoom en millisecondes
if(typeof(window.ZoomOnThumb_Delay)=="undefined") window.ZoomOnThumb_Delay = 200;
// délai entre deux étapes d'agrandissement en millisecondes
if(typeof(window.ZoomOnThumb_TimeOut)=="undefined") window.ZoomOnThumb_TimeOut = 50;
// multiplicateur de grossissement max
if(typeof(window.ZoomOnThumb_MaxMultiplicator)=="undefined") window.ZoomOnThumb_MaxMultiplicator = 3;
////  Images galeries  ////
// délai avant zoom en millisecondes
if(typeof(window.ZoomOnGallery_Delay)=="undefined") window.ZoomOnGallery_Delay = 200;
// délai entre deux étapes d'agrandissement en millisecondes
if(typeof(window.ZoomOnGallery_TimeOut)=="undefined") window.ZoomOnGallery_TimeOut = 50;
// pourcentage d'agrandissement entre deux étapes
if(typeof(window.ZoomOnGallery_ZoomFactor)=="undefined") window.ZoomOnGallery_ZoomFactor = 4;
// multiplicateur de grossissement max
if(typeof(window.ZoomOnGallery_MaxMultiplicator)=="undefined") window.ZoomOnGallery_MaxMultiplicator = 3;
////////////////////////////////////////////////////////////// FONCTIONS //////////////////////////////////////////
// --------------------------------------------------- IMAGES THUMB -----------------------------------------------------------------
/* VARIABLES */
var ZoomOnThumb_LinkOnImage = [];                // Liste des liens "image"
var ZoomOnThumb_LinkOnImageState = [];            // État de zoom : 1 = zoom avant, -1 = zoom arrière, 0 = taille normale
var ZoomOnThumb_LinkOnImageOriginalWidth = [];    // Largeur originale de l'image
var ZoomOnThumb_LinkOnImageOriginalHeight = [];  // Hauteur originale de l'image
var ZoomOnThumb_LinkOnImageOriginalTarget = [];  // Cible originale de l'image (basse résolution)
var ZoomOnThumb_LinkOnImageZoomedTarget = [];    // Cible zoomée de l'image (haute résolution)
/* ÉTABLISSEMENT DE LA LISTE DES LIENS "IMAGE" */
function ZoomOnThumb_CheckLinks(){
    var Divs = document.getElementsByTagName('div');
    for(var a=0;a<Divs.length;a++){
          if($(Divs[a]).hasClass("thumbinner")){
              var DivThumb = Divs[a];
              var Parent = DivThumb.parentNode;
              while(Parent){
                    if(Parent.className && (Parent.className.indexOf("infobox")!=-1 || Parent.className.indexOf("noZoom")!=-1)) break;
                    Parent = Parent.parentNode;
              }
              if(Parent) continue;
              $(DivThumb).addClass("nopopups");
              var Links = DivThumb.getElementsByTagName('a');
              var LinkOnImage = Links[0];
              if(LinkOnImage){
                    while(LinkOnImage.className != "image"){
                        LinkOnImage = LinkOnImage.nextSibling;
                        if(!LinkOnImage) break;
                    }
              }
              if(LinkOnImage){
                    var Extension = LinkOnImage.href.replace(/.*\./,"").toLowerCase();
                    if(['ogg','ogv','pdf','webm'].indexOf(Extension) == -1){
                        ZoomOnThumb_LinkOnImage.push(LinkOnImage);
                    }
              }
          }
    }
    ZoomOnThumb_ModifyLinks();
}
/* TRANSFORMATION DES LIENS, MISE A JOUR VARIABLES */
function ZoomOnThumb_ModifyLinks(){
    for(var b=0;b<ZoomOnThumb_LinkOnImage.length;b++){
          var ThisLink = ZoomOnThumb_LinkOnImage[b];
          ThisLink.id = "ZoomLink_" +b;
          ThisLink.onmouseover = function(){
              var ID = parseInt(this.id.split('ZoomLink_').join(''));
              ZoomOnThumb_LinkOnImageState[ID] = 1;
              ZoomOnThumb_ReplaceSrc(ID);
              setTimeout("window.ZoomOnThumb_ZoomIn("+ID+");", window.ZoomOnThumb_Delay);
          };
          ThisLink.onfocus = function(){
              var ID = parseInt(this.id.split('ZoomLink_').join(''));
              ZoomOnThumb_LinkOnImageState[ID] = 1;
              ZoomOnThumb_ReplaceSrc(ID);
              setTimeout("window.ZoomOnThumb_ZoomIn("+ID+");", window.ZoomOnThumb_Delay);
          };
          ThisLink.onmouseout = function(){
              var ID = parseInt(this.id.split('ZoomLink_').join(''));
              ZoomOnThumb_LinkOnImageState[ID] = -1;
              window.ZoomOnThumb_ZoomOut(ID);
          };
          ThisLink.onblur = function(){
              var ID = parseInt(this.id.split('ZoomLink_').join(''));
              ZoomOnThumb_LinkOnImageState[ID] = -1;
              window.ZoomOnThumb_ZoomOut(ID);
          };
          var ThisDiv = ThisLink.parentNode;
          ThisDiv.id = "ZoomDiv_" +b;
          var ThisImage = ThisLink.getElementsByTagName('img')[0];
          ThisImage.id = "ZoomImage_" +b;
          ZoomOnThumb_LinkOnImageOriginalWidth[b] = ThisImage.width;
          ZoomOnThumb_LinkOnImageOriginalHeight[b] = ThisImage.height;
          ZoomOnThumb_LinkOnImageOriginalTarget[b] = ThisImage.src;
          ZoomOnThumb_LinkOnImageState[b] = 0;
    }
}
/* ZOOM AVANT */
window.ZoomOnThumb_ZoomIn = function(ID){
    if(ZoomOnThumb_LinkOnImageState[ID]!= 1) return;
    var Image = document.getElementById('ZoomImage_'+ID);
    var Div = document.getElementById('ZoomDiv_'+ID);
    if((!Image)||(!Div)) return;
    var ImageWidth = parseInt(Image.width);
    var ImageHeight = parseInt(Image.height);
    var Content = document.getElementById("bodyContent");
    if(!Content) Content = document.getElementById("mw_contentholder");
    if(!Content) Content = document.getElementById("article");
    var ContentWidth = (parseInt(Content.offsetWidth) - 30);
    if(ImageWidth<(ZoomOnThumb_LinkOnImageOriginalWidth[ID]*window.ZoomOnThumb_MaxMultiplicator)){
          var NewImageWidth = parseInt(ImageWidth * 1.05);
          var NewImageHeight = parseInt(ImageHeight * 1.05);
          if(NewImageWidth>ContentWidth) return;
          Image.width = NewImageWidth;
          Image.height = NewImageHeight;
          Div.style.width = (2+NewImageWidth) + 'px';
          setTimeout("window.ZoomOnThumb_ZoomIn("+ID+");", window.ZoomOnThumb_TimeOut);
    }
};
/* ZOOM ARRIÈRE */
window.ZoomOnThumb_ZoomOut = function(ID){
    if(ZoomOnThumb_LinkOnImageState[ID]!= -1) return;
    var Image = document.getElementById('ZoomImage_'+ID);
    var Div = document.getElementById('ZoomDiv_'+ID);
    if((!Image)||(!Div)) return;
    var ImageWidth = parseInt(Image.width);
    var ImageHeight = parseInt(Image.height);
    if(ImageWidth>ZoomOnThumb_LinkOnImageOriginalWidth[ID]){
          var NewImageWidth = parseInt(ImageWidth * 0.8);
          var NewImageHeight = parseInt(ImageHeight * 0.8);
          if(NewImageWidth<ZoomOnThumb_LinkOnImageOriginalWidth[ID]){
              NewImageWidth = ZoomOnThumb_LinkOnImageOriginalWidth[ID];
              NewImageHeight = ZoomOnThumb_LinkOnImageOriginalHeight[ID];
              Image.src = ZoomOnThumb_LinkOnImageOriginalTarget[ID];
              ZoomOnThumb_LinkOnImageState[ID] = 0;
          }
          Image.width = NewImageWidth;
          Image.height = NewImageHeight;
          Div.style.width = (2+NewImageWidth) + 'px';
          setTimeout("window.ZoomOnThumb_ZoomOut("+ID+");", window.ZoomOnThumb_TimeOut);
    }
};
/* RECHERCHE CIBLE DE L'IMAGE EN HAUTE RÉSOLUTION */
function ZoomOnThumb_ReplaceSrc(ID){
    var Image = document.getElementById('ZoomImage_'+ID);
    var Link = document.getElementById('ZoomLink_'+ID);
    if((!Image)||(!Link)) return;
    if(ZoomOnThumb_LinkOnImageZoomedTarget[ID]){
          Image.src = ZoomOnThumb_LinkOnImageZoomedTarget[ID];
          return;
    }
    var Cible = mw.config.get('wgFormattedNamespaces')[6] + ':' + decodeURIComponent(Link.href).split('File:')[1].replace(/(&|\?)uselang=.*/, '');
    var queryopt = {
          action: 'query',
          prop: 'imageinfo',
          iiprop: 'url',
          iiurlwidth: (ZoomOnThumb_LinkOnImageOriginalWidth[ID]*window.ZoomOnThumb_MaxMultiplicator),
          titles: Cible
    };
    var api = new mw.Api();
    api.get( queryopt ).then( function ( data ) {
          var pages = data.query.pages;
          if ( pages ) {
              for(var index in pages){
                    if(!pages.hasOwnProperty(index)) continue;
                    var imageinfo = pages[index].imageinfo[0];
                    if(!imageinfo) continue;
                    var thumburl = imageinfo.thumburl;
                    ZoomOnThumb_LinkOnImageZoomedTarget[ID] = thumburl;
                    if(ZoomOnThumb_LinkOnImageState[ID]!= 1) return;
                    Image.src = thumburl;
}
          }
    } );
}
/* LANCEMENT */
mw.loader.using( ['mediawiki.api'], function(){ $( document ).ready(ZoomOnThumb_CheckLinks); });
// --------------------------------------------------- IMAGES GALERIES ---------------------------------------------------------------
/* VARIABLES */
var ZoomOnGallery_LinkOnImage = [];                // Liste des liens "image"
var ZoomOnGallery_LinkOnImageState = [];            // État de zoom : 1 = zoom avant, -1 = zoom arrière, 0 = taille normale
var ZoomOnGallery_LinkOnImageOriginalWidth = [];    // Largeur originale de l'image
var ZoomOnGallery_LinkOnImageOriginalHeight = [];  // Hauteur originale de l'image
var ZoomOnGallery_LinkOnImageOriginalTarget = [];  // Cible originale de l'image (basse résolution)
var ZoomOnGallery_LinkOnImageZoomedTarget = [];    // Cible zoomée de l'image (haute résolution)
/* ÉTABLISSEMENT DE LA LISTE DES LIENS "IMAGE" */
function ZoomOnGallery_CheckLinks(){
    var Divs = document.getElementsByTagName('li');
    for(var a=0;a<Divs.length;a++){
          if($(Divs[a]).hasClass("gallerybox")){
              var DivGallery = Divs[a];
              $(DivGallery).addClass("nopopups");
              var Links = DivGallery.getElementsByTagName('a');
              var LinkOnImage = Links[0];
              if(LinkOnImage){
                    while(LinkOnImage.className != "image"){
                        LinkOnImage = LinkOnImage.nextSibling;
                        if(!LinkOnImage) break;
                    }
              }
              if(LinkOnImage){
                    var Extension = LinkOnImage.href.replace(/.*\./,"").toLowerCase();
                    if(['ogg','ogv','pdf','webm'].indexOf(Extension) == -1){
                        ZoomOnGallery_LinkOnImage.push(LinkOnImage);
                    }
              }
          }
    }
    ZoomOnGallery_ModifyLinks();
}
/* TRANSFORMATION DES LIENS, MISE A JOUR VARIABLES */
function ZoomOnGallery_ModifyLinks(){
    for(var b=0;b<ZoomOnGallery_LinkOnImage.length;b++){
          var ThisLink = ZoomOnGallery_LinkOnImage[b];
          ThisLink.id = "ZoomLink_" +(b+1000);
          ThisLink.onmouseover = function(){
              var ID = parseInt(this.id.split('ZoomLink_').join(''));
              ZoomOnGallery_LinkOnImageState[ID] = 1;
              ZoomOnGallery_ReplaceSrc(ID);
              setTimeout("window.ZoomOnGallery_ZoomIn("+ID+");", window.ZoomOnGallery_Delay);
          };
          ThisLink.onfocus = function(){
              var ID = parseInt(this.id.split('ZoomLink_').join(''));
              ZoomOnGallery_LinkOnImageState[ID] = 1;
              ZoomOnGallery_ReplaceSrc(ID);
              setTimeout("window.ZoomOnGallery_ZoomIn("+ID+");", window.ZoomOnGallery_Delay);
          };
          ThisLink.onmouseout = function(){
              var ID = parseInt(this.id.split('ZoomLink_').join(''));
              ZoomOnGallery_LinkOnImageState[ID] = -1;
              window.ZoomOnGallery_ZoomOut(ID);
          };
          ThisLink.onblur = function(){
              var ID = parseInt(this.id.split('ZoomLink_').join(''));
              ZoomOnGallery_LinkOnImageState[ID] = -1;
              window.ZoomOnGallery_ZoomOut(ID);
          };
          var ThisDiv1 = ThisLink.parentNode;
          ThisDiv1.id = "ZoomDiv1_" +(b+1000);
          var ThisThumb = ThisDiv1.parentNode;
          ThisThumb.id = "ZoomThumb_" +(b+1000);
          var ThisDiv2 = ThisThumb.parentNode;
          ThisDiv2.id = "ZoomDiv2_" +(b+1000);
          var ThisGalleryBox = ThisDiv2.parentNode;
          ThisGalleryBox.id = "ZoomGalleryBox_" +(b+1000);
          var ThisImage = ThisLink.getElementsByTagName('img')[0];
          ThisImage.id = "ZoomImage_" +(b+1000);
          ZoomOnGallery_LinkOnImageOriginalWidth[(b+1000)] = ThisImage.width;
          ZoomOnGallery_LinkOnImageOriginalHeight[(b+1000)] = ThisImage.height;
          ZoomOnGallery_LinkOnImageOriginalTarget[(b+1000)] = ThisImage.src;
          ZoomOnGallery_LinkOnImageState[(b+1000)] = 0;
    }
}
/* ZOOM AVANT */
window.ZoomOnGallery_ZoomIn = function(ID){
    if(ZoomOnGallery_LinkOnImageState[ID]!= 1) return;
    var Image = document.getElementById('ZoomImage_'+ID);
    var Div1 = document.getElementById('ZoomDiv1_'+ID);
    var Thumb = document.getElementById('ZoomThumb_'+ID);
    var Div2 = document.getElementById('ZoomDiv2_'+ID);
    var GalleryBox = document.getElementById('ZoomGalleryBox_'+ID);
    if((!Image)||(!Div1)||(!Thumb)||(!Div2)||(!GalleryBox)) return;
    var ImageWidth = parseInt(Image.width);
    var ImageHeight = parseInt(Image.height);
    var Content = document.getElementById("bodyContent");
    if(!Content) Content = document.getElementById("mw_contentholder");
    if(!Content) Content = document.getElementById("article");
    var ContentWidth = (parseInt(Content.offsetWidth) - 30);
    var Factor = (100+window.ZoomOnGallery_ZoomFactor)/100;
    var MaxWidth = (parseInt(ZoomOnGallery_LinkOnImageOriginalWidth[ID])*parseInt(window.ZoomOnGallery_MaxMultiplicator));
    if(ImageWidth<MaxWidth){
          var NewImageWidth = parseInt(ImageWidth * Factor);
          var NewImageHeight = parseInt(ImageHeight * Factor);
          if(NewImageWidth>ContentWidth) return;
          var MaxSize = NewImageWidth;
          if(ImageHeight>NewImageWidth) MaxSize = NewImageHeight;
          Image.width = NewImageWidth;
          Image.height = NewImageHeight;
          Div1.style.width = NewImageWidth + 'px';
          Thumb.style.width = Math.floor( MaxSize+30 ) + 'px';
          Thumb.style.height = Math.floor( MaxSize+30 ) + 'px';
          Div2.style.width = Math.floor( MaxSize+35 ) + 'px';
          GalleryBox.style.width = Math.floor( MaxSize+35 ) + 'px';
          setTimeout("window.ZoomOnGallery_ZoomIn("+ID+");", window.ZoomOnGallery_TimeOut);
    }
};
function ZoomOnGallery_GetWidth(Node){
    return parseInt(Node.style.width.split("px").join(""));
}
function ZoomOnGallery_GetHeight(Node){
    return parseInt(Node.style.height.split("px").join(""));
}
/* ZOOM ARRIÈRE */
window.ZoomOnGallery_ZoomOut = function(ID){
    if(ZoomOnGallery_LinkOnImageState[ID]!= -1) return;
    var Image = document.getElementById('ZoomImage_'+ID);
    var Div1 = document.getElementById('ZoomDiv1_'+ID);
    var Thumb = document.getElementById('ZoomThumb_'+ID);
    var Div2 = document.getElementById('ZoomDiv2_'+ID);
    var GalleryBox = document.getElementById('ZoomGalleryBox_'+ID);
    if((!Image)||(!Div1)||(!Thumb)||(!Div2)||(!GalleryBox)) return;
    var ImageWidth = parseInt(Image.width);
    var ImageHeight = parseInt(Image.height);
    var MinWidth = ZoomOnGallery_LinkOnImageOriginalWidth[ID];
    var Factor = 0.8;
    if(ImageWidth>MinWidth){
          var NewImageWidth = parseInt(ImageWidth * Factor);
          var NewImageHeight = parseInt(ImageHeight * Factor);
          if(NewImageWidth<MinWidth){
              Factor = 0.9;
              NewImageWidth = parseInt(ImageWidth * Factor);
              NewImageHeight = parseInt(ImageHeight * Factor);
              if(NewImageWidth<MinWidth){
                    Factor = 0.95;
                    NewImageWidth = parseInt(ImageWidth * Factor);
                    NewImageHeight = parseInt(ImageHeight * Factor);
                    if(NewImageWidth<MinWidth){
                        NewImageWidth = ZoomOnGallery_LinkOnImageOriginalWidth[ID];
                        NewImageHeight = ZoomOnGallery_LinkOnImageOriginalHeight[ID];
                        Image.src = ZoomOnGallery_LinkOnImageOriginalTarget[ID];
                        ZoomOnGallery_LinkOnImageState[ID] = 0;
                        return;
                    }
              }
          }
          var MaxSize = NewImageWidth;
          if(ImageHeight>NewImageWidth) MaxSize = NewImageHeight;
          Image.width = NewImageWidth;
          Image.height = NewImageHeight;
          Image.width = NewImageWidth;
          Image.height = NewImageHeight;
          Div1.style.width = NewImageWidth + 'px';
          Thumb.style.width = (MaxSize+30) + 'px';
          Thumb.style.height = (MaxSize+30) + 'px';
          Div2.style.width = (MaxSize+35) + 'px';
          GalleryBox.style.width = (MaxSize+35) + 'px';
          setTimeout("window.ZoomOnGallery_ZoomOut("+ID+");", window.ZoomOnGallery_TimeOut);
    }
};
/* RECHERCHE CIBLE DE L'IMAGE EN HAUTE RÉSOLUTION */
function ZoomOnGallery_ReplaceSrc(ID){
    var Image = document.getElementById('ZoomImage_'+ID);
    var Link = document.getElementById('ZoomLink_'+ID);
    if((!Image)||(!Link)) return;
    if(ZoomOnGallery_LinkOnImageZoomedTarget[ID]){
          Image.src = ZoomOnGallery_LinkOnImageZoomedTarget[ID];
          return;
    }
    var Cible = mw.config.get('wgFormattedNamespaces')[6] + ':' + decodeURIComponent(Link.href).split('File:')[1].replace(/(&|\?)uselang=.*/, '');
    var queryopt = {
          action: 'query',
          prop: 'imageinfo',
          iiprop: 'url',
          iiurlwidth: (ZoomOnGallery_LinkOnImageOriginalWidth[ID]*window.ZoomOnGallery_MaxMultiplicator),
          titles: Cible
    };
    var api = new mw.Api();
    api.get( queryopt ).then( function ( data ) {
          var pages = data.query.pages;
          if ( pages ) {
              for(var index in pages){
                    if(!pages.hasOwnProperty(index)) continue;
                    var imageinfo = pages[index].imageinfo[0];
                    if(!imageinfo) continue;
                    var thumburl = imageinfo.thumburl;
                    ZoomOnGallery_LinkOnImageZoomedTarget[ID] = thumburl;
                    if(ZoomOnGallery_LinkOnImageState[ID] != 1) return;
                    Image.src = thumburl;
}
          }
    } );
}
/* LANCEMENT */
mw.loader.using( ['mediawiki.api'], function(){ $( document ).ready(ZoomOnGallery_CheckLinks); });
//</nowiki></pre>
//</source>
if (typeof window.FRpopupsRunning === 'undefined') {
    window.FRpopupsRunning = true;
    mw.loader.load( '//en.wikipedia.org/w/index.php?title=MediaWiki:Gadget-navpop.css&action=raw&ctype=text/css', 'text/css' );
    //////////////////////////////////////////////////
    // Translatable strings
    // Traduit en français par fr:Utilisateur:Leag
    //////////////////////////////////////////////////
    //
    // See instructions at
    // https://en.wikipedia.org/wiki/Wikipedia:Tools/Navigation_popups/Translation
//<nowiki>
    window.popupStrings = {
      /////////////////////////////////////
      // summary data, searching etc.
      /////////////////////////////////////
      'article': 'article',
      'category': 'catégorie',
      'categories': 'catégories',
      'image': 'image',
      'images': 'images',
      'stub': 'ébauche',
      'section stub': 'section ébauche',
      'Empty page': 'Page vide',
      'kB': 'ko',
      'bytes': 'octets',
      'day': 'jour',
      'days': 'jours',
      'hour': 'heure',
      'hours': 'heures',
      'minute': 'minute',
      'minutes': 'minutes',
      'second': 'seconde',
      'seconds': 'secondes',
      'week': 'semaine',
      'weeks': 'semaines',
      'search': 'rechercher',
      'SearchHint': 'Trouver les articles de Wikipédia contenant %s',
      'web': 'web',
      'global': 'global',
      'globalSearchHint': 'Trouver les articles dans toutes les langues de Wikipédia contenant %s',
      'googleSearchHint': 'Rechercher %s avec Google',
      /////////////////////////////////////
      // article-related actions and info
      // (some actions also apply to user pages)
      /////////////////////////////////////
      'actions': 'actions',        ///// view articles and view talk
      'popupsMenu': 'options',
      'togglePreviewsHint': 'Changer la prévisualisation du popups de cette page',
      'toggle previews': 'changer la prévisualisation',
      'enable previews': 'activer la prévisualisation',
      'disable previews': 'désactiver la prévisualisation',
      'show preview': 'afficher la prévisualisation',
      'reset': 'reset',
      'more...': 'plus…',
      'disable': 'désactiver popups',
      'disablePopupsHint': 'Désactiver le popups sur cette page. Recharger la page pour réactiver',
      'historyfeedHint': 'flux RSS des RC sur cette page',
      'purgePopupsHint': 'Reset popups, efface toutes les données du cache',
      'PopupsHint': 'Reset popups, efface toutes les données du cache',
      'spacebar': 'barre d\'espace',
      'view': 'voir',
      'view article': 'voir l\'article',
      'viewHint': 'Voir %s',
      'talk': 'discussion',
      'talk page': 'page de discussion',
      'this&nbsp;revision': 'cette&nbsp;version',
      'revision %s of %s': 'version %s sur %s',
      'Revision %s of %s': 'Version %s sur %s',
      'the revision prior to revision %s of %s': 'la version antérieure à la version %s de %s',
      'Toggle image size': 'Changer la taille de l\'image',
      'del': 'supprimer',                ///// delete, protect, move
      'delete': 'supprimer',
      'deleteHint': 'Supprimer %s',
      'undeleteShort': 'dé',
      'UndeleteHint': 'Voir l\'historique des suppressions de %s',
      'protect': 'protéger',
      'protectHint': 'Protéger %s',
      'unprotectShort': 'dé',
      'unprotectHint': 'Déprotéger %s',
      'move': 'déplacer',
      'move page': 'déplacer la page',
      'MovepageHint': 'Changer le titre de %s',
      'edit': 'modifier',              ///// edit articles and talk
      'edit article': 'modifier l\'article',
      'editHint': 'Changer le contenu de %s',
      'edit talk': 'modifier discussion',
      'new': 'nouveau',
      'new topic': 'nouveau sujet',
      'newSectionHint': 'Démarrer une nouvelle section dans %s',
      'null edit': 'édition nulle',
      'nullEditHint': 'Modifier %s, sans faire de changements',
      'hist': 'hist',              ///// history, diffs, editors, related
      'history': 'historique',
      'historyHint': 'Afficher l\'historique de %s',
      'last': 'dernière',
      'lastEdit': 'dernière modification',
      'mark patrolled': 'marquer vérifié',
      'markpatrolledHint': 'Marquer cette modif comme non vandalisée',
      'show last edit': 'voir dernière modif',
      'Show the last edit': 'Voir les effets de la dernière modification',
      'lastContrib': 'dernière contribution',
      'last set of edits': 'dernières éditions',
      'lastContribHint': 'Voir les effets de la dernière contribution',
      'cur': 'act',
      'diffCur': 'diff/act',
      'Show changes since revision %s': 'Voir les modifications depuis la version %s',
      '%s old': '%s depuis la dernière modification',
      'oldEdit': 'ancienne version',
      'purge': 'purger',
      'purgeHint': 'Purger %s du cache',
      'raw': 'source',
      'rawHint': 'Voir la source de %s',
      'render': 'simple',
      'renderHint': 'Voir %s sans style de mise en page',
      'Show the edit made to get revision': 'Voir les modifications pour avoir cette version',
      'sinceMe': 'depuis moi',
      'changes since mine': 'depuis ma modif',
      'sinceMeHint': 'Voir les changements depuis ma dernière modification',
      'Couldn\'t find an edit by %s\nin the last %s edits to\n%s': 'Impossible de trouver une modification par %s\n dans les dernières %s modifications de\n%s',
      'eds': 'eds',
      'editors': 'contributeurs',
      'editorListHint': 'Liste des utilisateurs qui ont modifié %s',
      'related': 'relatif',
      'relatedChanges': 'modif liées',
      'related changes': 'modif liées',
      'RecentchangeslinkedHint': 'Voir les changements dans les articles relatifs à %s',
      'editOld': 'éditeAncien',          ///// edit old version, or revert
      'rv': 'rv',
      'revert': 'révoquer',
      'revertHint': 'Revenir à %s',
      'defaultpopupRedlinkSummary': 'Suppression du lien vers la page vierge [[%s]] grâce au [[Utilisateur:Leag/Navigation popups|popups]]',
      'defaultpopupFixDabsSummary': 'Page d\'homonymie [[%s]] corrigée en [[%s]] grâce au [[Utilisateur:Leag/Navigation popups|popups]]',
      'defaultpopupFixRedirsSummary': 'Redirection [[%s]] corrigée en [[%s]] grâce au [[Utilisateur:Leag/Navigation popups|popups]]',
      'defaultpopupExtendedRevertSummary': 'Révocation (retour à la version du %s par celle du %s, oldid %s grâce au [[Utilisateur:Leag/Navigation popups|popups]])',
      'defaultpopupRevertToPreviousSummary': 'Révocation (retour à la version antérieure à la version %s grâce au [[Utilisateur:Leag/Navigation popups|popups]])',
      'defaultpopupRevertSummary': 'Révocation (retour à la version %s grâce au [[Utilisateur:Leag/Navigation popups|popups]])',
      'defaultpopupQueriedRevertToPreviousSummary': 'Révocation (retour à la version antérieure à la version $1 du $2 par $3 grâce au [[Utilisateur:Leag/Navigation popups|popups]])',
      'defaultpopupQueriedRevertSummary': 'Révocation (retour à la version $1 du $2 par $3 grâce au [[Utilisateur:Leag/Navigation popups|popups]])',
      'defaultpopupRmDabLinkSummary': 'Suppression du lien vers la page d\'homonymie [[%s]] grâce au [[Utilisateur:Leag/Navigation popups|popups]]',
      'Redirects': 'Redirection', // as in Redirects to ...
      ' to ': ' vers ',          // as in Redirects to ...
      'Bypass redirect': 'Redirection',
      'Fix this redirect': 'Corriger cette redirection',
      'disambig': 'homonymie',          ///// add or remove dab etc.
      'disambigHint': 'Corriger ce lien en [[%s]]',
      'Click to disambiguate this link to:': 'Cliquer pour corriger ce lien en :',
      'remove this link': 'supprimer ce lien',
      'remove all links to this page from this article': 'supprimer tout les liens vers cette page dans l\'article',
      'remove all links to this disambig page from this article': 'supprimer tout les liens vers cette page d\'homonymie dans l\'article',
      'mainlink': 'lien principaux',          ///// links, watch, unwatch
      'wikiLink': 'lien wiki',
      'wikiLinks': 'liens wiki',
      'links here': 'page liées',
      'whatLinksHere': 'pagesliées',
      'what links here': 'pages liées',
      'WhatlinkshereHint': 'Liste des pages liées à %s',
      'unwatchShort': 'ne plus',
      'watchThingy': 'suivre',  // called watchThingy because {}.watch is a function
      'watchHint': 'Ajouter %s à ma liste de suivi',
      'unwatchHint': 'Supprimer %s de ma liste de suivi',
      'Only found one editor: %s made %s edits': 'Seul éditeur trouvé : %s a fait %s modification',
      '%s seems to be the last editor to the page %s': '%s semble être le dernier éditeur de la page %s',
      'rss': 'rss',
      /////////////////////////////////////
      // diff previews
      /////////////////////////////////////
      'Diff truncated for performance reasons': 'Différence tronquée pour raisons de performance',
      'Old revision': 'Ancienne version',
      'New revision': 'Nouvelle version',
      'Something went wrong :-(': 'Quelque chose n\'a pas fonctionné :o(',
      'Empty revision, maybe non-existent': 'Version vierge, peut\-être inexistante',
      'Unknown date': 'Date inconnue',
      /////////////////////////////////////
      // other special previews
      /////////////////////////////////////
      'Empty category': 'catégorie vide',
      'Category members (%s shown)': 'membres de la catégorie (%s vu)',
      'No image links found': 'Pas d\'image liée trouvée',
      'File links': 'Fichiers liés',
      'No image found': 'Pas d\'image trouvée',
      'Image from Commons': 'Image de Commons',
      'Description page': 'Page de description',
      'Alt text:': 'Alt text:',
      'revdel':'Révision cachée',
      /////////////////////////////////////
      // user-related actions and info
      /////////////////////////////////////
      'user': 'utilisateur',              ///// user page, talk, email, space
      'user&nbsp;page': 'page&nbsp;utilisateur',
      'user talk': 'discussion',
      'edit user talk': 'modifier discussion',
      'leave comment': 'laisser commentaire',
      'email': 'e\-mail',
      'email user': 'envoyer un e\-mail',
      'EmailuserHint': 'Envoyer un e\-mail à %s',
      'space': 'espace',
      'PrefixindexHint': 'Voir les pages de l\'espace utilisateur de %s',
      'count': 'contrib',            ///// contributions, tree, log
      'edit counter': 'compteur d\'édition',
      'editCounterLinkHint': 'Compter les contributions de %s',
      'contribs': 'contribs',
      'contributions': 'contributions',
      'deletedContribs': 'contributions supprimées',
      'DeletedcontributionsHint': 'Liste des contributions supprimées de %s',
      'ContributionsHint': 'Liste des contributions de %s',
      'log': 'journal',
      'user log': 'journal utilisateur',
      'userLogHint': 'Voir le journal de %s',
      'arin': 'recherche ARIN',            ///// ARIN lookup, block user or IP
      'Look up %s in ARIN whois database': 'Rechercher %s dans la base ARIN whois',
      'unblockShort': 'dé',
      'block': 'bloquer',
      'block user': 'bloquer utilisateur',
      'IpblocklistHint': 'Débloquer %s',
      'BlockipHint': 'Bloquer %s',
      'block log': 'liste des blocages',
      'blockLogHint': 'Voir l\'historique des blocages de %s',
      'protectLogHint': 'Voir le journal de protection de %s',
      'pageLogHint': 'Voir le journal de %s',
      'deleteLogHint': 'Voir le journal d\'effacement de %s',
      'Invalid %s %s': 'L\'option %s est invalide : %s',
      'No backlinks found': 'Pas de lien retour trouvé',
      ' and more': ' et plus',
      'undo': 'défaire',
      'undoHint': 'défaire cette modif',
      'Download preview data': 'Télécharger les données prévisualisée',
      'Invalid or IP user': 'Non valide ou IP',
      'Not a registered username': 'Utilisateur non enregistré',
      'BLOCKED': 'Bloqué',
      ' edits since: ': ' modifs depuis : ',
      /////////////////////////////////////
      // Autoediting
      /////////////////////////////////////
      'Enter a non-empty edit summary or press cancel to abort': 'Modifiez le résumé de votre modification ou cliquer sur annuler pour abondonner',
      'Failed to get revision information, please edit manually.\n\n': 'Pas d\'information sur la version, éditez manuellement.\n\n',
      'The %s button has been automatically clicked. Please wait for the next page to load.': 'Le bouton %s a été cliqué automatiquement. Veuillez attendre la page suivante pour charger.',
      'Could not find button %s. Please check the settings in your javascript file.': 'Impossible de trouver le bouton %s. Veuillez vérifier la configuration de votre fichier JavaScript.',
      /////////////////////////////////////
      // Popups setup
      /////////////////////////////////////
      'Display navigation links at the top of the popup': 'Afficher les liens de navigation en haut du popups',
      'Load images': 'Charger des images',
      'Never download extra stuff for images/previews': 'Ne jamais télécharger de choses supplémentaires pour les images/prévisualisations',
      'Only start downloading when told to do so': 'Ne commencer à télécharger que lorsque demandé ainsi',
      'Open full-size image': 'Ouvrir l\'image en haute résolution',
      'Preview only on click': 'Prévisualiser seulement par clic',
      'Show/hide options': 'Montrer/cacher les options',
      'Show image previews': 'Prévisualiser les images',
      'Show navigation links': 'Montrer les liens de navigation',
      'Show page summary data': 'Montrer le résumé de la page',
      'Show previews': 'Prévisualiser',
      'Show summary data': 'Montrer le résumé',
      'Show text previews': 'Prévisualiser les textes',
      'Simple popups': 'Popups simples',
      'Toggle this option': 'Changer cette option',
      'zxy': 'zxy'
    };
    //</nowiki>
    mw.loader.load( '//en.wikipedia.org/w/index.php?title=MediaWiki:Gadget-popups.js&action=raw&ctype=text/javascript' );
}
/**
* fork de jQuery makeCollapsible
*
* script initial : http://www.mediawiki.org/wiki/RL/DM#jQuery.makeCollapsible
* auteur initial : Krinkle <krinklemail@gmail.com>
*
* modifications : http://fr.wikipedia.org/wiki/Utilisateur:Lgd
*
* Dual license:
* @license CC-BY 3.0 <http://creativecommons.org/licenses/by/3.0>
* @license GPL2 <http://www.gnu.org/licenses/old-licenses/gpl-2.0.html>
*/
function newCollapsible( $content ) {
return $content.find('.fr-collapsible').each(function() {
// Define reused variables and functions
var $that = $(this),
that = this,
collapsetext = $(this).attr( 'data-collapsetext' ),
expandtext = $(this).attr( 'data-expandtext' ),
toggleElement = function( $collapsible, action, $defaultToggle, instantHide ) {
// Validate parameters
if ( !$collapsible.jquery ) { // $collapsible must be an instance of jQuery
return;
}
if ( action != 'expand' && action != 'collapse' ) {
// action must be string with 'expand' or 'collapse'
return;
}
if ( typeof $defaultToggle == 'undefined' ) {
$defaultToggle = null;
}
if ( $defaultToggle !== null && !($defaultToggle instanceof $) ) {
// is optional (may be undefined), but if defined it must be an instance of jQuery.
// If it's not, abort right away.
// After this $defaultToggle is either null or a valid jQuery instance.
return;
}
var $containers = null;
if ( action == 'collapse' ) {
// Collapse the element
if ( $collapsible.is( 'table' ) &&  $collapsible.find('caption').length ) { // only table with caption
// Hide all table rows of this table
// Slide doens't work with tables, but fade does as of jQuery 1.1.3
// http://stackoverflow.com/questions/467336#920480
$containers = $collapsible.find( '>tbody>tr, >thead>tr' );
if ( $defaultToggle ) {
$containers.stop(true, true).fadeOut();
} else {
if ( instantHide ) {
$containers.hide();
} else {
$containers.stop( true, true ).fadeOut();
}
}
} else if ( !$collapsible.is( 'ul' ) && !$collapsible.is( 'ol' )  && !$that.is( 'table' ) ) { // <div>, <p> etc. but not ul ol and tables without caption
var $collapsibleContent = $collapsible.find( '> .fr-collapsible-content' );
// If a collapsible-content is defined, collapse it
if ( $collapsibleContent.length ) {
if ( instantHide ) {
$collapsibleContent.hide();
} else {
$collapsibleContent.slideUp();
}
// Otherwise assume this is a customcollapse with a remote toggle
// .. and there is no collapsible-content because the entire element should be toggled
} else {
if ( $collapsible.is( 'tr' ) || $collapsible.is( 'td' ) || $collapsible.is( 'th' ) ) {
$collapsible.fadeOut();
} else {
$collapsible.slideUp();
}
}
}
} else {
// Expand the element
if ( $collapsible.is( 'table' ) &&  $collapsible.find('caption').length ) {
$containers = $collapsible.find( '>tbody>tr, >thead>tr' );
if ( $defaultToggle ) {
$containers.stop(true, true).fadeIn();
} else {
$containers.stop(true, true).fadeIn();
}
} else if ( !$collapsible.is( 'ul' ) && !$collapsible.is( 'ol' )  && !$that.is( 'table' ) ) { // <div>, <p> etc.but not ul ol and not tables without caption
var $collapsibleContent = $collapsible.find( '> .fr-collapsible-content' );
// If a collapsible-content is defined, collapse it
if ( $collapsibleContent.length ) {
$collapsibleContent.slideDown();
// Otherwise assume this is a customcollapse with a remote toggle
// .. and there is no collapsible-content because the entire element should be toggled
} else {
if ( $collapsible.is( 'tr' ) || $collapsible.is( 'td' ) || $collapsible.is( 'th' ) ) {
$collapsible.fadeIn();
} else {
$collapsible.slideDown();
}
}
}
}
},
// Toggles collapsible and togglelink class and updates text label
toggleLinkDefault = function( that, e ) {
var $that = $(that),
$collapsible = $that.closest( '.fr-collapsible.fr-made-collapsible' ).toggleClass( 'fr-collapsed' );
e.preventDefault();
e.stopPropagation();
// It's expanded right now
if ( !$that.hasClass( 'fr-collapsible-toggle-collapsed' ) ) {
// Change link to "Show"
$that.removeClass( 'fr-collapsible-toggle-expanded' ).addClass( 'fr-collapsible-toggle-collapsed' );
if ( $that.find( '> a' ).length ) {
$that.find( '> a' ).text( expandtext );
} else {
$that.text( expandtext );
}
// Collapse element
toggleElement( $collapsible, 'collapse', $that );
// It's collapsed right now
} else {
// Change link to "Hide"
$that.removeClass( 'fr-collapsible-toggle-collapsed' ).addClass( 'fr-collapsible-toggle-expanded' );
if ( $that.find( '> a' ).length ) {
$that.find( '> a' ).text( collapsetext );
} else {
$that.text( collapsetext );
}
// Expand element
toggleElement( $collapsible, 'expand', $that );
}
return;
},
// Toggles collapsible and togglelink class
toggleLinkPremade = function( $that, e ) {
var $collapsible = $that.eq(0).closest( '.fr-collapsible.fr-made-collapsible' ).toggleClass( 'fr-collapsed' );
if ( $(e.target).is('a') ) {
return true;
}
e.preventDefault();
e.stopPropagation();
// It's expanded right now
if ( !$that.hasClass( 'fr-collapsible-toggle-collapsed' ) ) {
// Change toggle to collapsed
$that.removeClass( 'fr-collapsible-toggle-expanded' ).addClass( 'fr-collapsible-toggle-collapsed' );
// Collapse element
toggleElement( $collapsible, 'collapse', $that );
// It's collapsed right now
} else {
// Change toggle to expanded
$that.removeClass( 'fr-collapsible-toggle-collapsed' ).addClass( 'fr-collapsible-toggle-expanded' );
// Expand element
toggleElement( $collapsible, 'expand', $that );
}
return;
},
// Toggles customcollapsible
toggleLinkCustom = function( $that, e, $collapsible ) {
// For the initial state call of customtogglers there is no event passed
if (e) {
e.preventDefault();
e.stopPropagation();
}
// Get current state and toggle to the opposite
var action = $collapsible.hasClass( 'fr-collapsed' ) ? 'expand' : 'collapse';
$collapsible.toggleClass( 'fr-collapsed' );
toggleElement( $collapsible, action, $that );
};
// Use custom text or default ?
if( !collapsetext ) {
//collapsetext = mw.message( 'collapsible-collapse' );
collapsetext = 'masquer';
}
if ( !expandtext ) {
//expandtext = mw.message( 'collapsible-expand' );
expandtext = 'afficher';
}
// Create toggle link with a space around the brackets (&nbsp;[text]&nbsp;)
var $toggleLink =
$( '<a href="#"></a>' )
.text( collapsetext )
.wrap( '<span class="fr-collapsible-toggle"></span>' )
.parent()
.bind( 'click.fr-collapse', function(e) {
toggleLinkDefault( this, e );
} );
// Return if it has been enabled already.
if ( $that.hasClass( 'fr-made-collapsible' ) ) {
return;
} else {
$that.addClass( 'fr-made-collapsible' );
}
// Check if this element has a custom position for the toggle link
// (ie. outside the container or deeper inside the tree)
// Then: Locate the custom toggle link(s) and bind them
if ( ( $that.attr( 'id' ) || '' ).indexOf( 'fr-customcollapsible-' ) === 0 ) {
var thatId = $that.attr( 'id' ),
$customTogglers = $content.find( '.' + thatId.replace( 'fr-customcollapsible', 'fr-customtoggle' ) );
// Double check that there is actually a customtoggle link
if ( $customTogglers.length ) {
$customTogglers.bind( 'click.fr-collapse', function( e ) {
toggleLinkCustom( $(this), e, $that );
} );
}
// Initial state
if ( $that.hasClass( 'fr-collapsed' ) ) {
$that.removeClass( 'fr-collapsed' );
toggleLinkCustom( $customTogglers, null, $that );
}
// If this is not a custom case, do the default:
// Wrap the contents add the toggle link
} else {
// Elements are treated differently
if ( $that.is( 'table' )  &&  $that.find('caption').length ) { // only table with caption
// The toggle-link will be in the caption
var $caption = $that.find( 'caption' ),
$toggle = $caption.find( '> .fr-collapsible-toggle' );
// If theres no toggle link, add it to the caption
if ( !$toggle.length ) {
$caption.eq(-1).prepend( $toggleLink );
} else {
$toggleLink = $toggle.unbind( 'click.fr-collapse' ).bind( 'click.fr-collapse', function( e ) {
toggleLinkPremade( $toggle, e );
} );
}
} else if ( !$that.is( 'ul' ) && !$that.is( 'ol' )  && !$that.is( 'table' ) ) { // <div>, <p> etc.but not ol ul and not tables without caption
// The toggle-link will be the first child of the element
var $toggle = $that.find( '> .fr-collapsible-toggle' );
// If a direct child .content-wrapper does not exists, create it
if ( !$that.find( '> .fr-collapsible-content' ).length ) {
$that.wrapInner( '<div class="fr-collapsible-content"></div>' );
}
// If theres no toggle link, add it
if ( !$toggle.length ) {
$that.prepend( $toggleLink );
} else {
$toggleLink = $toggle.unbind( 'click.fr-collapse' ).bind( 'click.fr-collapse', function( e ) {
toggleLinkPremade( $toggle, e );
} );
}
}
}
// Initial state (only for those that are not custom)
if ( $that.hasClass( 'fr-collapsed' ) && ( $that.attr( 'id' ) || '').indexOf( 'fr-customcollapsible-' ) !== 0 ) {
$that.removeClass( 'fr-collapsed' );
// The collapsible element could have multiple togglers
// To toggle the initial state only click one of them (ie. the first one, eq(0) )
// Else it would go like: hide,show,hide,show for each toggle link.
toggleElement( $that, 'collapse', $toggleLink.eq(0), /* instantHide = */ true );
$toggleLink.eq(0).click();
}
} );
};
function newCollapsibleKeyboard($content) {
$content.find('.fr-collapsible-toggle, .fr-collapsible-toggle-keyboard').attr('tabindex',0).keypress(function(event){
if ( event.which == 13 ) {
$(this).click()
}
});
};
function newCollapsibleGroup($content) {
$content.find('.fr-collapsible-group').each(function(){
var $that = $(this);
var text = 'Tout ouvrir';
var $tooglelink = $('<a class="fr-collapsible-toggle fr-collapsible-toggle-collapsed fr-collapsible-group-toogle-all" href="#">Tout ouvrir</a>');
$that.find('.fr-collapsible-group-toogle:first').append($tooglelink).click(function(event){
if(text == 'Tout ouvrir') {
text = 'Tout fermer';
$that.find('.fr-collapsible-toggle-collapsed:not(".fr-collapsible-group-toogle-all")').click();
} else {
text = 'Tout ouvrir';
$that.find('.fr-collapsible-toggle-expanded:not(".fr-collapsible-group-toogle-all")').click();
}
$tooglelink.text(text);
return false;
});
});
};
mw.hook( 'wikipage.content' ).add( [
newCollapsible,
newCollapsibleKeyboard,
newCollapsibleGroup
] );
/**
* Sous-pages
*
* Place un bouton "afficher les sous-pages" dans la boîte à outils
*
* Auteur : Delhovlyn, Lgd pour la mise à jour Mediawiki 1.19
* Date de la dernière révision : 4 mars 2012
*/
(function (mw, $) {
    var NSWithoutSubpages = [-1, 0, 6, 14, 104, 105];
    if (NSWithoutSubpages.indexOf(mw.config.get('wgNamespaceNumber')) !== -1) {
        return;
    }
    mw.loader.using('mediawiki.util', function () {
        $(function ($) {
            var target = 'Spécial:Index/' + mw.config.get('wgPageName') + '/';
            mw.util.addPortletLink('p-tb', mw.util.getUrl(target), 'Sous-pages');
        });
    });
})(mediaWiki, jQuery);
mw.loader.load('//www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-DotsSyntaxHighlighter.js&action=raw&ctype=text/javascript');
/**
* QPreview
*
* Permet une prévisualisation rapide sans recharger la page
* Affiche :
* le texte, catégories et interwikis fournit par le serveur
* N'affiche pas :
* la prévisualisation du résumé
* les modèles utilisés
* autres trucs rares comme les couleurs GeSHi (code de programmation coloré)
*
* Auteur initial : [[:en:User:Alex Smotrov|en:Alex Smotrov]] sur [[:en:User:Alex Smotrov/qpreview.js]],
*  complété par [[:fr:Utilisateur:Seb35|fr:Seb35]] puis [[:fr:Utilisateur:Zebulon84|Zebulon84]]
* Date de la dernière révision : 12 avril 2015
* Projet:JavaScript/Script
*/
var qPreviewBoutonNom = 'Aperçu';
var qPreviewBoutonAttendre = 'Patience…';
var qPreviewTitreIw = 'Autres langues';
var qPreviewHeaderText = 'Aperçu';
var qPreviwGoToEdit = '→ Aller à la zone de modification';
function qPreview() {
var divPreview, ulLang, divCat, btnQPreview, qPreviewTextbox, qPreviewHeader, tablePreview, diffEnCours;
var i, htmlText, htmlCat, langList, langLine, langLink;
divPreview = document.getElementById( 'wikiPreview' );
btnQPreview = document.getElementById( 'btnQPreview' );
btnQPreview.value = qPreviewBoutonAttendre;
qPreviewTextbox = '<div>{{MediaWiki:Previewnote}}&emsp;[[#editform|' + qPreviwGoToEdit + ']]</div><hr>\n';
if ( document.editform.wpSection.value === 'new' ) {
qPreviewTextbox += '== ' + document.editform.wpSummary.value + ' ==\n';
}
qPreviewTextbox += document.getElementById( 'wpTextbox1' ).value;
$.post(
mw.util.wikiScript( 'api' ),
{
        format: 'json',
        action: 'parse',
preview: true,
disableeditsection: true,
pst: true,
title: mw.config.get('wgPageName'),
text: qPreviewTextbox,
        prop: 'text|categorieshtml|langlinks'
    },
function (data) {
// ajout du texte
htmlText = data.parse.text['*'];
divPreview.innerHTML = htmlText;
// ajout entête prévisualisation
qPreviewHeader = document.createElement( 'h2' );
qPreviewHeader.id = 'mw-previewheader';
qPreviewHeader.innerHTML = qPreviewHeaderText;
divPreview.insertBefore( qPreviewHeader, divPreview.firstChild );
tablePreview = document.getElementById( 'previewnote-fr' ).getElementsByTagName( 'table' )[0];
if ( tablePreview ) {
tablePreview.style.backgroundColor = '#E2F2FF';
tablePreview.style.borderColor = '#ACCEFF';
}
// ajout des catégories
divCat = document.getElementById( 'catlinks' );
if ( !divCat ) {
divCat = document.createElement( 'div' );
divPreview.parentNode.insertBefore( divCat, divPreview.nextSibling );
}
htmlCat = data.parse.categorieshtml['*'];
divCat.outerHTML = htmlCat;
//ajout des interWiki
if ( document.getElementById( 'p-lang' ) ) {
ulLang = document.getElementById( 'p-lang' ).getElementsByTagName( 'ul' )[0];
ulLang.innerHTML = '';
langList = data.parse.langlinks;
for ( i = 0; i < langList.length; i++ ) {
langLink = document.createElement( 'a' );
langLink.lang = langList[i].lang;
langLink.setAttribute( 'hreflang', langList[i].lang );
langLink.title = langList[i]['*'] + ' — ' + langList[i].langname;
langLink.href = langList[i].url;
langLink.innerHTML = langList[i].autonym;
langLine = document.createElement( 'li' );
langLine.className = 'interlanguage-link interwiki-' + langList[i].lang;
langLine.appendChild( langLink );
ulLang.appendChild( langLine );
}
}
// suppression de la zone "Changements en cours" si elle est présente.
diffEnCours = document.getElementById( 'wikiDiff' );
if ( diffEnCours ) {
diffEnCours.style.display = 'none';
}
btnQPreview.value = qPreviewBoutonNom;
}
);
}
/* Compatibilité iRef */
window.qPreview = qPreview;
function qPreviewButton() {
var i, sauv, newDiv, toolbox, div, newBtn;
sauv = document.getElementById( 'wpSave' );
if ( !sauv ) {
return;
}
document.getElementById( 'wikiPreview' ).style.display = 'block';
newBtn = document.createElement( 'input' );
newBtn.type = 'button';
newBtn.value = qPreviewBoutonNom;
newBtn.onclick = qPreview;
newBtn.id = 'btnQPreview';
newBtn.setAttribute( 'tabindex', '6' );
sauv.parentNode.insertBefore( newBtn, sauv.nextSibling );
}
mw.loader.using( 'mediawiki.util', function () {
$( qPreviewButton );
} );
/**
* Nom : DeluxeHistory
* Implémentation originale de Dake, basée sur du code Ajax de GôTô
* Réécriture complète par Dr Brains et Od1n, avec améliorations de Ltrlg
* Dépendances :
*  — les habituelles implicites 'mediawiki' & 'jquery' ;
*  — 'mediawiki.util' (fonctions mw.util.*) ;
*  — 'user' (assure le chargement du common.js avant ce script, pour la configuration) ;
*  — 'user.options' (pour tester si le gadget est coché dans les préférences) ;
*  — 'mediawiki.legacy.wikibits' (fonction importStylesheet).
*/
/*global document, localStorage, mw, $ */
/*jslint vars: true, plusplus: true */
mw.loader.using(['mediawiki.util', 'user', 'user.options', 'mediawiki.legacy.wikibits'], function () {
    'use strict';
    if (!mw.user.options.get('gadget-DeluxeHistory')) {
        importStylesheet('MediaWiki:Gadget-DeluxeHistory.css');
    }
    var botMembers, sysopMembers;
    /////////////////////////////////////// DÉTECTION SUPPORT LOCALSTORAGE ///////////////////////////////////////
    var supportLocalStorage;
    try {
        localStorage.setItem('modernizr', 'modernizr');
        localStorage.removeItem('modernizr');
        supportLocalStorage = true;
    } catch (e) {
        supportLocalStorage = false;
    }
    var dateNowUTC = Date.now();
    /////////////////////////////////////// FONCTIONS DE TRAITEMENT DES LIENS ///////////////////////////////////////
    var nsSpecial = mw.config.get('wgFormattedNamespaces')[-1] + ':';
    var watcherName = mw.config.get('wgUserName');
    function isUserIP(userlink) {
        // Les liens des IP sont de la forme « Spécial:Contributions/<IP> »
        return userlink.title.indexOf(nsSpecial) === 0;
    }
    function getUserClass(userlink) {
        var UserName = userlink.textContent;
        if (UserName === watcherName) { return 'UserIs-Self'; }
        if (botMembers.indexOf(UserName) > -1) { return 'UserIs-Bot'; }
        if (sysopMembers.indexOf(UserName) > -1) { return 'UserIs-Sysop'; }
        if (isUserIP(userlink)) { return 'UserIs-IP'; }
        return 'UserIs-User';
    }
    // Renvoie 'UserIs-…' si un seul type, 'UserIs-Mixed' sinon (RC "améliorée").
    // Colore les liens vers les utilisateurs pour disposer de la différentiation même si historique mixte.
    function getMultipleClassName(userlinks) {
        var className = '';
        $.each(userlinks, function () {
            var localClassName = getUserClass(this);
            $(this).addClass(localClassName);
            if (className === '') {
                className = localClassName;
            } else if (className !== localClassName) {
                className = 'UserIs-Mixed';
            }
        });
        return className;
    }
    function userGroupClassName(Li) {
        var userlinks = Li.getElementsByClassName('mw-userlink');
        if (userlinks.length > 1) {  // groupe des RC "améliorées"
            $(Li).addClass(getMultipleClassName(userlinks) + ' UserIs-Multiple');
        } else if (userlinks.length === 1) {
            $(Li).addClass(getUserClass(userlinks[0]));
        }
    }
    /////////////////////////////////////// FONCTIONS DE PARCOURS DES ÉLÉMENTS ///////////////////////////////////////
    function scan_first_ul() {
        $('#mw-content-text').find('ul').eq(0).find('li').each(function () {
            userGroupClassName(this);
        });
    }
    function scan_ul_special_li() {
        $('ul.special li').each(function () {
            userGroupClassName(this);
        });
    }
    function scan_td() {
        $('td').each(function () {
            userGroupClassName(this);
        });
    }
    /////////////////////////////////////// FONCTIONS DE SÉLECTION DES FILTRES ///////////////////////////////////////
    function process_History() {
        $('#pagehistory, .flow-board-history').find('li').each(function () {
            userGroupClassName(this);
        });
    }
    function process_Watchlist() {
        scan_ul_special_li(); // Liste de suivi normale
        scan_td(); // Liste de suivi "améliorée"
    }
    function process_Recentchanges() {
        scan_ul_special_li(); // RC normale
        scan_td(); // RC "améliorées"
    }
    function process_Recentchangeslinked() {
        scan_ul_special_li(); // RC liées normales
        scan_td(); // RC liées "améliorées"
    }
    function process_Newpages() {
        scan_first_ul();
    }
    function process_Log() {
        scan_first_ul();
    }
    function process_AbuseLog() {
        scan_first_ul();
    }
    function process_OtherPages() {
        scan_ul_special_li();
    }
    /////////////////////////////////////// LANCEMENTS ///////////////////////////////////////
    var DeluxeHistory_ClassesApplied = false;
    var DeluxeHistory_Enabled = $.extend({
        "history": true,
        "watchlist": true,
        "recentchanges": true,
        "recentchangeslinked": true,
        "newpages": true,
        "log": true,
        "abuseLog": true,
        "other": true
    }, window.DeluxeHistory_Enabled);
    function enabled(pageType) {
        return DeluxeHistory_Enabled[pageType];
    }
    function applyClasses() {
        if (botMembers && sysopMembers && !DeluxeHistory_ClassesApplied) {
            DeluxeHistory_ClassesApplied = true;
            var paramAction = mw.config.get('wgAction');
            var paramCanonicalSpecialPageName = mw.config.get('wgCanonicalSpecialPageName');
            if ( paramAction === 'history' ) {
                if( enabled("history") ) {
                    $(document).ready(process_History);
                }
            } else if ( paramCanonicalSpecialPageName === 'Watchlist' ) {
                if( enabled("watchlist") ) {
                    $(document).ready(process_Watchlist);
                }
            } else if ( paramCanonicalSpecialPageName === 'Recentchanges' ) {
                if( enabled("recentchanges") ) {
                    $(document).ready(process_Recentchanges);
                }
            } else if ( paramCanonicalSpecialPageName === 'Recentchangeslinked' ) {
                if( enabled("recentchangeslinked") ) {
                    $(document).ready(process_Recentchangeslinked);
                }
            } else if ( paramCanonicalSpecialPageName === 'Newpages' ) {
                if( enabled("newpages") ) {
                    $(document).ready(process_Newpages);
                    mw.util.addCSS('.not-patrolled { text-decoration: underline !important; }');
                }
            } else if ( paramCanonicalSpecialPageName === 'Log' ) {
                if( enabled("log") ) {
                    $(document).ready(process_Log);
                }
            } else if ( paramCanonicalSpecialPageName === 'AbuseLog' ) {
                if( enabled("abuseLog") ) {
                    $(document).ready(process_AbuseLog);
                }
            } else {
                if( enabled("other") ) {
                    $(document).ready(process_OtherPages);
                }
            }
        }
    }
    /////////////////////////////////////// RÉCUPÉRATION DE LA LISTE DES BOTS ET SYSOPS ///////////////////////////////////////
    var validCache;
    function updateUserList(Group, UserList, UserContinue) {
        if (!UserList) { UserList = []; }
        var paramUserGroups = mw.config.get('wgUserGroups');
        var APILimit = paramUserGroups.indexOf('sysop') > -1 || paramUserGroups.indexOf('bot') > -1
            ? 5000 : 500;
        var params = {
            'format'  : 'json',
            'action'  : 'query',
            'list'    : 'allusers',
            'aulimit'  : APILimit,
            'augroup'  : Group,
            'continue' : '' // https://www.mediawiki.org/wiki/API:Query#Continuing_queries
        };
        if (UserContinue) {
            $.extend(params, UserContinue);
        }
        $.get(mw.util.wikiScript('api'), params, function (data) {
            $.each(data.query.allusers, function () {
                UserList.push(this.name);
            });
            if (data['continue']) {
                updateUserList(Group, UserList, data['continue']);
            } else {
                if (supportLocalStorage) {
                    var storedValue = UserList.join('|');
                    localStorage.setItem('HistoryDeluxe_' + Group, storedValue);
                    localStorage.setItem('HistoryDeluxe_lastUpdate', dateNowUTC);
                }
                if (Group === 'bot') {
                    botMembers = UserList;
                } else if (Group === 'sysop') {
                    sysopMembers = UserList;
                }
                applyClasses();
            }
        });
    }
    function testCacheValidity() {
        var lastUpdate;
        if (supportLocalStorage) {
            lastUpdate = localStorage.getItem('HistoryDeluxe_lastUpdate');
            validCache = lastUpdate && dateNowUTC - lastUpdate < 1000 * 3600 * 24 && dateNowUTC - lastUpdate > 0;
        } else {
            validCache = false;
        }
    }
    // Exécutée si validCache, ie. si (supportLocalStorage && lastUpdate pas trop loin)
    function getUserList(Group) {
        var storedValue;
        storedValue = localStorage.getItem('HistoryDeluxe_' + Group);
        return storedValue ? storedValue.split('|') : null;
    }
    /////////////////////////////////////// INITIALISATION ///////////////////////////////////////
    testCacheValidity();
    if (validCache) {
        botMembers = getUserList('bot');
        sysopMembers = getUserList('sysop');
        applyClasses();
    } else {
        updateUserList('bot');
        updateUserList('sysop');
    }
});

Dernière version du 2 juin 2020 à 16:39