Aller au contenu

« MediaWiki:Common.js » : différence entre les versions

47 989 octets ajoutés ,  24 juin 2013
aucun résumé des modifications
Aucun résumé des modifications
Aucun résumé des modifications
 
Ligne 1 : Ligne 1 :
/* Tout JavaScript ici sera chargé avec chaque page accédée par n’importe quel utilisateur. */
/**
/**
  * Caractères spéciaux
  * IMPORTANT: There is a re-writing/jquerization of this page in [[Projet:JavaScript/Refonte Common.js avec jQuery]], but has not been tested.
  *
  * Il y a une ré-écriture de cette page en utilisant jQuery sur [[Projet:JavaScript/Refonte Common.js avec jQuery]], mais n'a pas été testé.
* Ajouter un menu pour choisir des sous-ensembles de caractères spéciaux.
* Ecrit par Zelda, voir sur [[Utilisateur:Zelda/Edittools.js]].
* Remplace l'ancienne fonction par une variante plus rapide.
  */
  */


/**
/**
  * Ajoute un menu déroulant permettant de choisir un jeu de caractères spéciaux
  * N'importe quel JavaScript ici sera chargé pour n'importe quel utilisateur et pour chaque page accédée.
  * Les caractères spéciaux sont définis dans Mediawiki:Edittools
*
* ATTENTION : Avant de modifier cette page, veuillez tester vos changements avec votre propre
* vector.js. Une erreur sur cette page peut faire bugger le site entier (et gêner l'ensemble des
* visiteurs), même plusieurs heures après la modification !
*
* Prière de ranger les nouvelles fonctions dans les sections adaptées :
* - Fonctions JavaScript
* - Fonctions spécifiques pour MediaWiki
* - Applications spécifiques à la fenêtre d'édition
* - Applications qui peuvent être utilisées sur toute page
* - Applications spécifiques à un espace de nom ou une page
  *
* <nowiki> /!\ Ne pas retirer cette balise
  */
  */
function addCharSubsetMenu() {
  var specialchars = document.getElementById('specialcharsets');
  if (!specialchars) return;


  // Construction du menu de selection
  var charSubsetSelect = document.createElement("select");
  charSubsetSelect.setAttribute("style", "display:inline");
  charSubsetSelect.onchange = function () { chooseCharSubset(this.selectedIndex); };


  // Ajout des options au menu
  var p = document.getElementById('specialcharsets').getElementsByTagName('p');
  for (var i = 0; i < p.length ; i++) {
    var opt = document.createElement("option");
    var txt = document.createTextNode(p[i].title);
    opt.appendChild(txt);
    charSubsetSelect.appendChild(opt);
  }


  specialchars.insertBefore(charSubsetSelect, specialchars.childNodes[0]);
/*************************************************************/
/* Fonctions JavaScript : pallient les limites de JavaScript */
/* Surveiller : http://www.ecmascript.org/                  */
/*************************************************************/


  /* default subset - try to use a cookie some day */
/**
   chooseCharSubset(0);
* insertAfter : insérer un élément dans une page
*/
function insertAfter(parent, node, referenceNode) {
   parent.insertBefore(node, referenceNode.nextSibling);
}
}


/**
/**
  * Affichage du jeu de caractères sélectionné
  * getElementsByClass : rechercher les éléments de la page dont le paramètre "class" est celui recherché
  */
  */
function chooseCharSubset(index) {
function getElementsByClass(searchClass, node, tag) {
   var p = document.getElementById('specialcharsets').getElementsByTagName('p');
   if (node == null) node = document;
   for (var i = 0; i < p.length ; i++) {
   if (tag == null) tag = '*';
    // Initialisation du jeu de caractères sélectionné
  return getElementsByClassName(node, tag, searchClass);
    if (i == index) {
    initializeCharSubset(p[i]);
    }
    // Affichage du jeu sélectionné, masquage des autres
    p[i].style.display = i == index ? 'inline' : 'none';
    p[i].style.visibility = i == index ? 'visible' : 'hidden';
  }
}
}


/**
/**
  * Initialisation du jeu de caractères sélectionné
  * Diverses fonctions manipulant les classes
  * Paramètre : paragraphe contenant le jeu à initialiser. Initialise tous les
* Utilise des expressions régulières et un cache pour de meilleures perfs
  * caractères contenus dans les sous-spans du paragraphe
* isClass et whichClass depuis http://fr.wikibooks.org/w/index.php?title=MediaWiki:Common.js&oldid=140211
  * hasClass, addClass, removeClass et eregReplace depuis http://drupal.org.in/doc/misc/drupal.js.source.html
  * surveiller l'implémentation de .classList http://www.w3.org/TR/2008/WD-html5-diff-20080122/#htmlelement-extensions
  */
  */
function initializeCharSubset(p) {
function isClass(element, classe) {
  // recherche des sous-elements de type span à traiter
    return hasClass(element, classe);
  var spans = p.getElementsByTagName("span");
}
  if (!spans) return;
 
function whichClass(element, classes) {
    var s=" "+element.className+" ";
    for(var i=0;i<classes.length;i++)
        if (s.indexOf(" "+classes[i]+" ")>=0) return i;
    return -1;
}


  // regexp pour echapper les caractères JS spéciaux : \ et '
function hasClass(node, className) {
  var re = new RegExp("(\\\\|')", "g");
    var haystack = node.className;
  // gestion du caractère d'échappement '\'
    if(!haystack) return false;
  var escapeRe = new RegExp("[^\\\\](\\\\\\\\)*\\\\$", "g");
    if (className === haystack) {
  var unescapeRe = new RegExp("\\\\\\\\", "g");
        return true;
    }
    return (" " + haystack + " ").indexOf(" " + className + " ") > -1;
}


  // traitement des spans du paragraphe
function addClass(node, className) {
  for (var j = 0; j < spans.length; j++) {
    if (hasClass(node, className)) {
     // span deja traité
        return false;
     if (spans[j].childNodes.length == 0 || spans[j].childNodes[0].nodeType != 3) continue;
    }
    var cache = node.className;
    if (cache) {
        node.className = cache + ' ' + className;
    } else {
        node.className = className;
     }
     return true;
}
 
function removeClass(node, className) {
  if (!hasClass(node, className)) {
    return false;
  }
  node.className = eregReplace('(^|\\s+)'+ className +'($|\\s+)', ' ', node.className);
  return true;
}
 
function eregReplace(search, replace, subject) {
    return subject.replace(new RegExp(search,'g'), replace);
}


    // On parse le contenu du span
    var chars = spans[j].childNodes[0].nodeValue.split(" ");
    for (var k = 0; k < chars.length; k++) {
      var a = document.createElement("a");
      var tags = chars[k];


      // regroupement des mots se terminant par un espace protégé par un \
/**
      while (k < chars.length && chars[k].match(escapeRe)) {
* Récupère la valeur du cookie
      k++;
*/
tags = tags.substr(0, tags.length - 1) + " " + chars[k];
function getCookieVal(name) {
  var cookiePos = document.cookie.indexOf(name + "=");
  var cookieValue = false;
  if (cookiePos > -1) {
    cookiePos += name.length + 1;
    var endPos = document.cookie.indexOf(";", cookiePos);
    if (endPos > -1)
      cookieValue = document.cookie.substring(cookiePos, endPos);
    else
      cookieValue = document.cookie.substring(cookiePos);
  }
  return cookieValue;
}
 
// Récupère proprement le contenu textuel d'un noeud et de ses noeuds descendants
// Copyright Harmen Christophe, http://openweb.eu.org/articles/validation_avancee, CC
function getTextContent(oNode) {
  if(!oNode) return null;
  if (typeof(oNode.textContent)!="undefined") {return oNode.textContent;}
  switch (oNode.nodeType) {
    case 3: // TEXT_NODE
    case 4: // CDATA_SECTION_NODE
      return oNode.nodeValue;
      break;
    case 7: // PROCESSING_INSTRUCTION_NODE
    case 8: // COMMENT_NODE
      if (getTextContent.caller!=getTextContent) {
        return oNode.nodeValue;
       }
       }
      break;
    case 9: // DOCUMENT_NODE
    case 10: // DOCUMENT_TYPE_NODE
    case 12: // NOTATION_NODE
      return null;
      break;
  }
  var _textContent = "";
  oNode = oNode.firstChild;
  while (oNode) {
    _textContent += getTextContent(oNode);
    oNode = oNode.nextSibling;
  }
  return _textContent;
}
// Array.indexOf : recherche un élément dans un tableau


      // création du lien insertTag(tagBegin, tagEnd, defaultValue) en protegeant les caractères JS \ et '
if (!Array.prototype.indexOf) {
      tags = (tags.replace(unescapeRe, "\\")).split("+");
Array.prototype.indexOf = function(obj) {
      var tagBegin = tags[0].replace(re, "\\$1");
for (var i=0; i<this.length; i++) {
      var tagEnd = tags.length > 1 ? tags[1].replace(re, "\\$1") : "";
if (this[i] == obj){
      var defaultValue = tags.length > 2 ? tags[2].replace(re, "\\$1") : "";
return i;
      a.href = "javascript:insertTags('" + tagBegin + "','" + tagEnd + "', '" + defaultValue + "')";
}
      //a.href="#";
}
      //eval("a.onclick = function() { insertTags('" + tagBegin + "','" + tagEnd + "', '" + defaultValue + "'); return false; }");
return -1;
}
}


      a.appendChild(document.createTextNode((tagBegin + tagEnd).replace(unescapeRe, "\\")));
if(!String.prototype.HTMLize){
       spans[j].appendChild(a);
  String.prototype.HTMLize = function() {
       spans[j].appendChild(document.createTextNode(" "));
    var chars = new Array('&','<','>','"');
    var entities = new Array('amp','lt','gt','quot');
    var string = this;
    for (var i=0; i<chars.length; i++) {
       var regex = new RegExp(chars[i], "g");
       string = string.replace(regex, '&' + entities[i] + ';');
     }
     }
     // suppression de l'ancien contenu
     return string;
    spans[j].removeChild(spans[j].firstChild);
   }
   }
}
}


addOnloadHook(addCharSubsetMenu);
 
/**********************************************************************************************************/
/* Fonctions générales MediaWiki (pallient les limitations du logiciel)                                  */
/* Surveiller : http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/skins/common/wikibits.js?view=log  */
/**********************************************************************************************************/
 
/*
* Fonction générales de lancement de fonctions ou de script
* DÉPRÉCIÉ : utiliser addOnloadHook simplement
*/
function addLoadEvent(func) {
  addOnloadHook(func);
}
 
/**
* Insérer un JavaScript d'une page particulière, idée de Mickachu
* DÉPRÉCIÉ : utiliser importScript qui fait partie du logiciel
*/
function loadJs(page) {
  importScript(page);
}
 
/**
* Projet JavaScript
*/
function obtenir(name) {
  importScript('MediaWiki:Gadget-' + name + '.js');
}


/**
/**
  * Permet d'ajouter d'un jeu de caractères spéciaux dans le menu déroulant
  * Transformer les pages du Bistro, du BA et les pages spécifiées en page de discussion
* paramètres :
* - nom du jeu de caractères
* - contenu HTML. Les caractères spéciaux doivent être dans des spans
*  exemple : "caractères : <span>â ê î ô û</span>"
  */
  */
function addSpecialCharsetHTML(title, charsHTML) {
function TransformeEnDiscussion() {
   var specialchars = document.getElementById('specialcharsets');
   if(  (wgPageName.search('Wikipédia:Le_Bistro') != -1)
   if (!specialchars) return;
    || (wgPageName.search('Wikipédia:Bulletin_des_administrateurs') != -1)
    || document.getElementById('transformeEnPageDeDiscussion')) {
    removeClass(document.body, 'ns-subject');
    addClass(document.body, 'ns-talk');
   }
}
addOnloadHook(TransformeEnDiscussion);


  // Ajout des caractères spéciaux. Les liens seront initialisé par initializeCharSubset()
/**
  // lors de la sélection
* Transformer certaines pages en pseudo-article
  var specialcharsets = document.getElementById('specialcharsets');
* c'est raisonnable ? --Tavernier
  var p = document.createElement("p");
*/
  p.style.display = "none";
function TransformeEnArticle() {
  p.title = title;
  var transformeEnA = document.getElementById("transformeEnArticle");
  p.innerHTML = charsHTML;
  if(transformeEnA) document.body.className = "ns-0";
  specialcharsets.appendChild(p);
}
}
addOnloadHook(TransformeEnArticle);


/**
/**
  * Permet d'ajouter d'un jeu de caractères spéciaux dans le menu déroulant
  * Ajouter un bouton à la fin de la barre d'outils
* paramètres :
* - nom du jeu de caractères
* - caractères spéciaux
* exemple d'utilisation : addSpecialCharset("Français", "â ê î ô û");
  */
  */
function addSpecialCharset(title, chars) {
 
  addSpecialCharsetHTML(title, "<span>" + chars + "</span>");
if(typeof(mwCustomEditButtons)=="undefined") mwCustomEditButtons = new Array();
 
if(typeof(addCustomButton)=="undefined"){
  function addCustomButton(imageFile, speedTip, tagOpen, tagClose, sampleText, imageId) {
    mwCustomEditButtons[mwCustomEditButtons.length] =
      {"imageId": imageId,
      "imageFile": imageFile,
      "speedTip": speedTip,
      "tagOpen": tagOpen,
      "tagClose": tagClose,
      "sampleText": sampleText};
  }
}
}


/****************************************/
/* Applications pour l'ensemble du site */
/****************************************/


/**
/**
  * Utilisation du modèle Modèle:Images
  * Tout ce qui concerne la page d'édition
* Voir MediaWiki:Common.js/edit.js pour ces fonctions
  */
  */
function toggleImage(group, remindex, shwindex) {
if( mw.config.get('wgAction') == 'edit' || mw.config.get('wgAction') == 'submit' ) {
  document.getElementById("ImageGroupsGr"+group+"Im"+remindex).style.display="none";
   importScript( 'MediaWiki:Common.js/edit.js' );
   document.getElementById("ImageGroupsGr"+group+"Im"+shwindex).style.display="inline";
}
}


function imageGroup(){
/**
   if (document.URL.match(/printable/g)) return;
* Réécriture des titres
  var bc=document.getElementById("bodyContent");
*
  if( !bc ) bc = document.getElementById("mw_contentholder");
* Fonction utilisée par [[Modèle:Titre incorrect]]
  if( !bc ) return;
*
  var divs=bc.getElementsByTagName("div");
* La fonction cherche un bandeau de la forme
  var i = 0, j = 0;
* <div id="RealTitleBanner">
  var units, search;
*  <span id="RealTitle">titre</span>
  var currentimage;
* </div>
  var UnitNode;
*
  for (i = 0; i < divs.length ; i++) {
* Un élément comportant id="DisableRealTitle" désactive la fonction
    if (divs[i].className != "ImageGroup") continue;
*/
    UnitNode=undefined;
function rewritePageH1() {
    search=divs[i].getElementsByTagName("div");
  var realTitleBanner = document.getElementById('RealTitleBanner');
    for (j = 0; j < search.length ; j++) {
   if (realTitleBanner) {
      if (search[j].className != "ImageGroupUnits") continue;
    if (!document.getElementById('DisableRealTitle')) {
       UnitNode=search[j];
      var realTitle = document.getElementById('RealTitle');
      break;
      var h1 = document.getElementById('firstHeading');
      if(!h1) h1 = document.getElementsByTagName('h1')[0]; // Nostalgia, Standard
      var realH1 = getTextContent(h1);
      if (realTitle && h1) {
        var titleText = realTitle.innerHTML;
        if (titleText == '') h1.style.display = 'none';
        else h1.innerHTML = titleText;
        realTitleBanner.style.display = 'none';
        var avert = document.createElement('p')
        avert.style.fontSize = '80%';
        avert.innerHTML = 'Titre à utiliser pour créer un lien interne : <b>'+realH1.HTMLize()+'</b>';
        insertAfter(h1.parentNode,avert,h1);
       }
     }
     }
    if (UnitNode==undefined) continue;
  }
    units=Array();
}
    for (j = 0 ; j < UnitNode.childNodes.length ; j++ ) {
addOnloadHook(rewritePageH1);
      var temp = UnitNode.childNodes[j];
 
      if (temp.className=="center") units.push(temp);
/**
* Icônes de titre
*
* Cherche les icônes de titre (class="icone_de_titre") et les
* déplace à droite du titre de la page.
* Doit être exécuté après une éventuelle correction de titre.
*/
function IconesDeTitre() {
  var h1 = document.getElementById('firstHeading');
  if(!h1) h1 = document.getElementsByTagName('h1')[0]; // Nostalgia, Standard
  if(!h1) return;
  var icones = getElementsByClass( "icone_de_titre", document, "div" );
  for( var j = icones.length; j > 0; --j ){
    icones[j-1].style.display = "block"; /* annule display:none par défaut */
    if(( skin == "modern" )||( skin == "vector" )){
      icones[j-1].style.marginTop = "0em";
     }
     }
     for (j = 0 ; j < units.length ; j++) {
     h1.parentNode.insertBefore(icones[j-1], h1); /* déplacement de l'élément */
      currentimage=units[j];
  }
      currentimage.id="ImageGroupsGr"+i+"Im"+j;
}
      var imghead = document.createElement("div");
addOnloadHook(IconesDeTitre);
      var leftlink;
 
      var rightlink;
/**
      if (j != 0) {
* Déplacement de coordonnées qui apparaissent en haut de la page
        leftlink = document.createElement("a");
*/
        leftlink.href = "javascript:toggleImage("+i+","+j+","+(j-1)+");";
function moveCoord() {
        leftlink.innerHTML="◀";
  var h1 = document.getElementById('firstHeading');
      } else {
  if(!h1) h1 = document.getElementsByTagName('h1')[0]; // Nostalgia, Standard
        leftlink = document.createElement("span");
  var coord = document.getElementById('coordinates');
        leftlink.innerHTML="&nbsp;";
  if ( !coord || !h1 ) return;
      }
  coord.id = "coordinates-title";
      if (j != units.length - 1) {
  h1.parentNode.insertBefore(coord, h1); /* déplacement de l'élément */
        rightlink = document.createElement("a");
}
        rightlink.href = "javascript:toggleImage("+i+","+j+","+(j+1)+");";
addOnloadHook(moveCoord);
        rightlink.innerHTML="▶";
 
      } else {
// Verwendung von OpenStreetMap in Wikipedia.
        rightlink = document.createElement("span");
// (c) 2008 by Magnus Manske
        rightlink.innerHTML="&nbsp;";
// Released under GPL
      }
// Modifié pour marcher après moveCoord() ci-dessus
      var comment = document.createElement("tt");
 
      comment.innerHTML = "("+ (j+1) + "/" + units.length + ")";
if(typeof(MoveResizeAbsolute_AddMoveArea)!="function") obtenir('MoveResizeAbsolute');
      with(imghead) {
 
        style.fontSize="110%";
function openStreetMap_Init () {
        style.fontweight="bold";
  var c = document.getElementById ( 'coordinates-title' ) ;
        appendChild(leftlink);
  if ( !c ) return ;
        appendChild(comment);
 
        appendChild(rightlink);
  var a = c.getElementsByTagName ( 'a' ) ;
      }
  var geohack = false;
       currentimage.insertBefore(imghead,currentimage.childNodes[0]);
  for ( var i = 0 ; i < a.length ; i++ ) {
       if (j != 0) currentimage.style.display="none";
    var h = a[i].href ;
    if ( !h.match(/geohack/) ) continue ;
    if (h.match(/skyhack/)) continue;
    if (h.match(/_globe:/)) continue; // no OSM for moon, mars, etc
    geohack = true ;
    break ;
  }
  if ( !geohack ) return ;
 
  var na = document.createElement ( 'a' ) ;
  na.href = 'javascript:openStreetMap_Toggle();' ;
  na.title = 'Afficher/Masquer la carte' ;
  na.appendChild ( document.createTextNode ( 'carte' ) ) ;
  c.appendChild ( document.createTextNode ( ' (' ) ) ;
  c.appendChild ( na ) ;
  c.appendChild ( document.createTextNode ( ')  ' ) ) ;
}
 
function openStreetMap_Toggle () {
  var c = document.getElementById ( 'coordinates-title' ) ;
  if ( !c) return ;
  var osm = document.getElementById ( 'OpenStreetMap' ) ;
 
  if (osm) {
    if ( osm.style.display == 'none' ) {
       osm.style.display = 'block' ;
    } else {
       osm.style.display = 'none' ;
     }
     }
    return;
   }
   }
  var found_link = false ;
  var a = c.getElementsByTagName ( 'a' ) ;
  var h;
  for ( var i = 0 ; i < a.length ; i++ ) {
    h = a[i].href ;
    if ( !h.match(/geohack/) ) continue ;
    if (h.match(/skyhack/)) continue;
    if (h.match(/_globe:/)) continue; // no OSM for moon, mars, etc
    found_link = true ;
    break ;
  }
  if ( !found_link ) return ; // No geohack link found
  h = h.split('params=')[1] ;
  var LargeurEcran = MoveResizeAbsolute_GetScreenWidth();
  var HauteurEcran = MoveResizeAbsolute_GetScreenHeight();
  var OSMDiv = document.createElement('div');
  OSMDiv.id = 'OpenStreetMap' ;
  OSMDiv.style.position = "absolute";
  OSMDiv.style.zIndex = 5000;
  OSMDiv.style.top = (HauteurEcran*10/100) + "px";
  OSMDiv.style.left = (LargeurEcran*15/100) + "px";
  OSMDiv.style.width = "70%";
  OSMDiv.style.height = (HauteurEcran*80/100) + "px";
  OSMDiv.style.border = "2px solid black";
  OSMDiv.style.backgroundColor = "white";
  OSMDiv.style.overflow = "hidden";
  var MoveArea = document.createElement('div');
  MoveArea.style.position = "relative";
  MoveArea.style.top = "0";
  MoveArea.style.width = "100%";
  MoveArea.style.height = "50px";
  MoveArea.title = "Cliquer et glisser pour déplacer la carte";
  var CloseLink = document.createElement('a');
  CloseLink.setAttribute("style", "float:right;margin:10px;");
  CloseLink.innerHTML = "Masquer";
  CloseLink.title = "Cliquer pour masquer la carte";
  CloseLink.href = "javascript:openStreetMap_Toggle();";
  MoveArea.appendChild(CloseLink);
  var iFrame = document.createElement ( 'iframe' ) ;
  var url = '//toolserver.org/~kolossos/openlayers/kml-on-ol.php?'
          + 'lang=' + mw.config.get('wgUserLanguage')
          + '&params=' + h
          + '&title=' + mw.util.wikiUrlencode( mw.config.get( 'wgTitle' ) )
          + ( window.location.protocol == 'https:' ? '&secure=1' : '' ) ;
  iFrame.style.width = '100%' ;
  iFrame.style.height = ((HauteurEcran*80/100)-100) + 'px' ;
  iFrame.style.clear = 'both' ;
  iFrame.src = url ;
  var ResizeArea = document.createElement('div');
  ResizeArea.style.position = "relative";
  ResizeArea.style.top = "0";
  ResizeArea.style.width = "100%";
  ResizeArea.style.height = "50px";
  ResizeArea.title = "Cliquer et glisser pour redimensionner la carte";
  OSMDiv.appendChild(MoveArea);
  OSMDiv.appendChild(iFrame);
  OSMDiv.appendChild(ResizeArea);
  document.body.appendChild ( OSMDiv ) ;
  var ElementsToMove = new Array(OSMDiv);
  var ElementsToResize = new Array(OSMDiv, iFrame);
  var ElementsMinWidth = new Array(150, 150);
  var ElementsMinHeights = new Array(200, 100);
  MoveResizeAbsolute_AddMoveArea(MoveArea, ElementsToMove);
  MoveResizeAbsolute_AddResizeArea(ResizeArea, ElementsToResize, ElementsMinWidth, ElementsMinHeights);
}
}


addOnloadHook(imageGroup);
addOnloadHook(openStreetMap_Init);
 
/**
* Ajout d'un sous-titre
*
* Fonction utilisée par [[Modèle:Sous-titre]]
*
* La fonction cherche un élément de la forme
* <span id="sous_titre_h1">Sous-titre</span>
*
* Doit être exécutée après les fonctions d'icônes de titre
*/
 
function sousTitreH1() {
  var span= document.getElementById('sous_titre_h1');
  var title=document.getElementById('firstHeading');
  if(!title) title = document.getElementsByTagName('h1')[0]; // Nostalgia, Standard
  if (span && title) {
      var subtitle=span.cloneNode(true);
      title.appendChild(document.createTextNode(' '));
      title.appendChild(subtitle);
      span.parentNode.removeChild(span);
  }
}
addOnloadHook(sousTitreH1);




Ligne 217 : Ligne 479 :
  * Pour [[Modèle:Méta palette de navigation]]
  * Pour [[Modèle:Méta palette de navigation]]
  */
  */
 
var Palette_Enrouler = '[masquer]';
var Palette_Enrouler = '[masquer]';
var Palette_Derouler  = '[afficher]';
var Palette_Derouler  = '[afficher]';
 
var Palette_max = 1;
var Palette_max = 1;
var Palette_index = -1;
var Palette_index = -1;
 
function Palette_toggle(indexPalette){
function Palette_toggle(indexPalette){
   var Button = document.getElementById( "collapseButton" + indexPalette);
   var Button = document.getElementById( "collapseButton" + indexPalette);
   var Table = document.getElementById( "collapsibleTable" + indexPalette);
   var Table = document.getElementById( "collapsibleTable" + indexPalette);
   if (!Table || !Button) return false;
   if (!Table || !Button) return false;
 
   var Rows = Table.rows;
   var Rows = Table.rows;
   var RowDisplay = "none";
   var RowDisplay = "none";
Ligne 241 : Ligne 503 :
   }
   }
}
}
 
function Palette(Element){
function Palette(Element){
   if(!Element) Element = document;
   if(!Element) Element = document;
Ligne 278 : Ligne 540 :
}
}
addOnloadHook(Palette);
addOnloadHook(Palette);
 


/**
/**
  * Pour [[Modèle:Boîte déroulante]]
  * Pour [[Modèle:Boîte déroulante]]
  */
  */
 
var BoiteDeroulante_Enrouler = '[masquer]';
var BoiteDeroulante_Enrouler = '[masquer]';
var BoiteDeroulante_Derouler  = '[afficher]';
var BoiteDeroulante_Derouler  = '[afficher]';
var BoiteDeroulante_max = 0;
var BoiteDeroulante_max = 0;
var BoiteDeroulante_index = -1;
var BoiteDeroulante_index = -1;
 
function BoiteDeroulante_toggle(indexBoiteDeroulante){
function BoiteDeroulante_toggle(indexBoiteDeroulante){
       var NavFrame = document.getElementById("NavFrame" + indexBoiteDeroulante);
       var NavFrame = document.getElementById("NavFrame" + indexBoiteDeroulante);
Ligne 299 : Ligne 560 :
       caption[0] = CaptionSpans[0].innerHTML;
       caption[0] = CaptionSpans[0].innerHTML;
       caption[1] = CaptionSpans[1].innerHTML;
       caption[1] = CaptionSpans[1].innerHTML;
 
       var Contents = NavFrame.getElementsByTagName('div');
       var Contents = NavFrame.getElementsByTagName('div');
       if (NavToggle.innerHTML == caption[1]) {
       if (NavToggle.innerHTML == caption[1]) {
Ligne 319 : Ligne 580 :
       }
       }
}
}
 
function BoiteDeroulante(Element){
function BoiteDeroulante(Element){
       if(!Element) Element = document;
       if(!Element) Element = document;
Ligne 329 : Ligne 590 :
                   NavFrameCount++;
                   NavFrameCount++;
                   BoiteDeroulante_index++;
                   BoiteDeroulante_index++;
 
                   if (NavFrame.title && NavFrame.title.indexOf("/")!=-1) {
                   if (NavFrame.title && NavFrame.title.indexOf("/")!=-1) {
                         var Enrouler = NavFrame.title.HTMLize().split("/")[1];
                         var Enrouler = NavFrame.title.HTMLize().split("/")[1];
Ligne 343 : Ligne 604 :
                   CaptionContainer.innerHTML = '<span>' + Derouler + '</span><span>' + Enrouler + '</span>';
                   CaptionContainer.innerHTML = '<span>' + Derouler + '</span><span>' + Enrouler + '</span>';
                   NavFrame.appendChild(CaptionContainer);
                   NavFrame.appendChild(CaptionContainer);
 
                   var NavToggle = document.createElement("a");
                   var NavToggle = document.createElement("a");
                   NavToggle.className = 'NavToggle';
                   NavToggle.className = 'NavToggle';
Ligne 350 : Ligne 611 :
                   var NavToggleText = document.createTextNode(Enrouler);
                   var NavToggleText = document.createTextNode(Enrouler);
                   NavToggle.appendChild(NavToggleText);
                   NavToggle.appendChild(NavToggleText);
 
                   NavFrame.insertBefore( NavToggle, NavFrame.firstChild );
                   NavFrame.insertBefore( NavToggle, NavFrame.firstChild );
                   NavFrame.id = 'NavFrame' + BoiteDeroulante_index;
                   NavFrame.id = 'NavFrame' + BoiteDeroulante_index;
Ligne 358 : Ligne 619 :
             }
             }
       }
       }
}
addOnloadHook(BoiteDeroulante);
/**
* Utilisation du modèle Modèle:Images
*/
function toggleImage(group, remindex, shwindex) {
    document.getElementById('ImageGroupsGr' + group + 'Im' + remindex).style.display = 'none';
    document.getElementById('ImageGroupsGr' + group + 'Im' + shwindex).style.display = 'block';
}
function imageGroup(cible) {
    if (/^[^#]*[?&](%20)*printable=[^&#]/.test(document.URL)) {
        return;
    }
    var conteneur;
    if (cible) {
        conteneur = cible;
    } else {
        conteneur = document.getElementById('bodyContent');
        if (!conteneur) { conteneur = document.getElementById('mw_contentholder'); }
        if (!conteneur) { conteneur = document.getElementById('article'); }
        if (!conteneur) { return; }
    }
    var jGroups = $(conteneur).find('div.ImageGroup');
    var i, il, j, jl;
    var jUnits;
    var currentimage;
    for (i = 0, il = jGroups.length; i < il; i++) {
        jUnits = jGroups.eq(i).find('div.thumb');
        for (j = 0, jl = jUnits.length; j < jl; j++) {
            currentimage = jUnits[j];
            currentimage.id = 'ImageGroupsGr' + i + 'Im' + j;
            var imghead = document.createElement('div');
            imghead.style.fontSize = '110%';
            var leftArrow = document.createElement('img');
            leftArrow.src = '//upload.wikimedia.org/wikipedia/commons/thumb/4/49/ArrowLeftNavbox.svg/12px-ArrowLeftNavbox.svg.png';
            leftArrow.width = '12';
            leftArrow.height = '12';
            if (j > 0) {
                leftArrow.alt = 'Précédent';
                var leftLink = document.createElement('a');
                leftLink.href = 'javascript:toggleImage('+i+','+j+','+(j-1)+');';
                leftLink.title = 'Image précédente';
                leftLink.appendChild(leftArrow);
                imghead.appendChild(leftLink);
            } else {
                leftArrow.style.visibility = 'hidden';
                imghead.appendChild(leftArrow);
            }
            $(imghead).append(' <tt>(' + (j+1) + '/' + jl + ')</tt> ');
            var rightArrow = document.createElement('img');
            rightArrow.src = '//upload.wikimedia.org/wikipedia/commons/thumb/1/10/ArrowRightNavbox.svg/12px-ArrowRightNavbox.svg.png';
            rightArrow.width = '12';
            rightArrow.height = '12';
            if (j < jl - 1) {
                rightArrow.alt = 'Suivant';
                var rightLink = document.createElement('a');
                rightLink.href = 'javascript:toggleImage('+i+','+j+','+(j+1)+');';
                rightLink.title = 'Image suivante';
                rightLink.appendChild(rightArrow);
                imghead.appendChild(rightLink);
            } else {
                rightArrow.style.visibility = 'hidden';
                imghead.appendChild(rightArrow);
            }
            currentimage.insertBefore(imghead, currentimage.childNodes[0]);
            if (j !== 0) {
                currentimage.style.display = 'none';
            }
        }
    }
}
$(document).ready(function ($) {
    imageGroup();
});
/**
* Utilisation du modèle Modèle:Animation
*/
var Diaporama = new Object();
Diaporama.Params = new Object();
Diaporama.Fonctions = new Object();
Diaporama.Params.DiaporamaIndex = 0;
Diaporama.Params.ImageDelay = 1;
Diaporama.Params.Paused = new Array();
Diaporama.Params.Visible = new Array();
Diaporama.Params.Length = new Array();
Diaporama.Params.Delay = new Array();
Diaporama.Params.Timeout = new Array();
Diaporama.Fonctions.Init = function(node){
    if(!node) node = document;
    var Diaporamas = getElementsByClassName(node, "div", "diaporama");
    for(var a=0,l=Diaporamas.length;a<l;a++){
        Diaporama.Fonctions.InitDiaporama(Diaporamas[a]);
    }
}
Diaporama.Fonctions.InitDiaporama = function(DiaporamaDiv){
    var index = Diaporama.Params.DiaporamaIndex;
    Diaporama.Params.DiaporamaIndex++;
    DiaporamaDiv.id = "Diaporama_"+index;
    var DiaporamaFileContainer = getElementsByClassName(DiaporamaDiv, "div", "diaporamaFiles")[0];
    var DiaporamaControl = getElementsByClassName(DiaporamaDiv, "div", "diaporamaControl")[0];
    if(!DiaporamaFileContainer || !DiaporamaControl) return;
    var DiaporamaFiles = getElementsByClassName(DiaporamaFileContainer, "div", "ImageFile");
    var width;
    var firstTumbinner = getElementsByClassName(DiaporamaFileContainer, "div", "thumbinner")[0];
    if(firstTumbinner){ // force la largeur du diaporama (pour IE)
        width = firstTumbinner.style.width.split("px").join("");
    }else{
        if(DiaporamaFileContainer.firstChild.firstChild) width = DiaporamaFileContainer.firstChild.firstChild.offsetWidth;
    }
    if(width) DiaporamaDiv.style.width = (parseInt(width)+30) + "px";
    if(DiaporamaFiles.length<2) return;
    Diaporama.Params.Length[index] = DiaporamaFiles.length;
    DiaporamaFileContainer.id = "DiaporamaFileContainer_"+index;
    DiaporamaControl.id = "DiaporamaControl_"+index;
    Diaporama.Params.Delay[index] = Diaporama.Params.ImageDelay;
    var DiaporamaDivClass = DiaporamaDiv.className.HTMLize();
    var ParamDelay = DiaporamaDivClass.match(/Delay[0-9]+(\.|,)?[0-9]*/);
    if(ParamDelay!=null){
        ParamDelay = parseFloat(ParamDelay[0].split("Delay").join("").split(",").join("."));
        if(ParamDelay && ParamDelay>0) Diaporama.Params.Delay[index] = ParamDelay;
    }
    Diaporama.Fonctions.ShowThisDiapo(index, 0);
    var ControlLinks = DiaporamaControl.getElementsByTagName("a");
    ControlLinks[0].firstChild.id = "DiaporamaPlay"+index;
    ControlLinks[0].href = "javascript:Diaporama.Fonctions.Play("+index+");";
    ControlLinks[1].firstChild.id = "DiaporamaPause"+index;
    ControlLinks[1].href = "javascript:Diaporama.Fonctions.Pause("+index+");";
    ControlLinks[2].firstChild.id = "DiaporamaStop"+index;
    ControlLinks[2].href = "javascript:Diaporama.Fonctions.Stop("+index+");";
    ControlLinks[3].firstChild.id = "DiaporamaLast"+index;
    ControlLinks[3].href = "javascript:Diaporama.Fonctions.ToggleDiapo("+index+",-1);";
    ControlLinks[4].firstChild.id = "DiaporamaNext"+index;
    ControlLinks[4].href = "javascript:Diaporama.Fonctions.ToggleDiapo("+index+", 1);";
    ControlLinks[5].parentNode.appendChild(Diaporama.Fonctions.CreateSelect(index, ControlLinks[5].title));
    ControlLinks[5].parentNode.removeChild(ControlLinks[5]);
    for(var e=0,t=ControlLinks.length;e<t;e++){
        ControlLinks[e].onmousedown = function(){Diaporama.Fonctions.Onclick(this);};
        ControlLinks[e].onmouseup = function(){Diaporama.Fonctions.Offclick(this, index);};
        ControlLinks[e].firstChild.style.backgroundColor = "white";
        ControlLinks[e].onmouseover = function(){ this.focus(); };
    }
    DiaporamaControl.style.display = "block";
    if(hasClass("Autoplay", DiaporamaDiv)){
        Diaporama.Fonctions.Play(index);
    }else{
        Diaporama.Fonctions.Pause(index);
    }
}
Diaporama.Fonctions.Play = function(index){
    if(Diaporama.Params.Paused[index] === false) return;
    Diaporama.Params.Paused[index] = false;
    clearTimeout(Diaporama.Params.Timeout[index]);
    Diaporama.Params.Timeout[index] = setTimeout("Diaporama.Fonctions.ToggleDiapo("+index+",1);", Diaporama.Params.Delay[index]*1000);
    var ButtonPlay = document.getElementById("DiaporamaPlay"+index);
    ButtonPlay.style.backgroundColor = "silver";
    var ButtonPause = document.getElementById("DiaporamaPause"+index);
    ButtonPause.style.backgroundColor = "white";
    var ButtonStop = document.getElementById("DiaporamaStop"+index);
    ButtonStop.style.backgroundColor = "white";
}
Diaporama.Fonctions.Pause = function(index){
    Diaporama.Params.Paused[index] = true;
    clearTimeout(Diaporama.Params.Timeout[index]);
    var ButtonPlay = document.getElementById("DiaporamaPlay"+index);
    ButtonPlay.style.backgroundColor = "white";
    var ButtonPause = document.getElementById("DiaporamaPause"+index);
    ButtonPause.style.backgroundColor = "silver";
    var ButtonStop = document.getElementById("DiaporamaStop"+index);
    ButtonStop.style.backgroundColor = "white";
}
Diaporama.Fonctions.Stop = function(index){
    Diaporama.Params.Paused[index] = true;
    clearTimeout(Diaporama.Params.Timeout[index]);
    Diaporama.Fonctions.ShowThisDiapo(index, 0);
    var ButtonPlay = document.getElementById("DiaporamaPlay"+index);
    ButtonPlay.style.backgroundColor = "white";
    var ButtonPause = document.getElementById("DiaporamaPause"+index);
    ButtonPause.style.backgroundColor = "white";
    var ButtonStop = document.getElementById("DiaporamaStop"+index);
    ButtonStop.style.backgroundColor = "silver";
}
Diaporama.Fonctions.ToggleDiapo = function(index, diff){
    clearTimeout(Diaporama.Params.Timeout[index]);
    var DiaporamaFileContainer = document.getElementById("DiaporamaFileContainer_"+index);
    var DiaporamaFiles = getElementsByClassName(DiaporamaFileContainer, "div", "ImageFile");
    var VisibleIndex = Diaporama.Params.Visible[index];
    var NextDiaporamaIndex = (VisibleIndex+diff);
    if(NextDiaporamaIndex==DiaporamaFiles.length || NextDiaporamaIndex<0){
        var DiaporamaDiv = document.getElementById("Diaporama_"+index);
        if(diff<0 || !hasClass("AutoLoop", DiaporamaDiv)){
            return;
        }
        NextDiaporamaIndex = 0;
    }
    Diaporama.Fonctions.ShowThisDiapo(index, NextDiaporamaIndex);
}
Diaporama.Fonctions.ShowThisDiapo = function(index, Value){
    clearTimeout(Diaporama.Params.Timeout[index]);
    var DiaporamaFileContainer = document.getElementById("DiaporamaFileContainer_"+index);
    var DiaporamaFiles = getElementsByClassName(DiaporamaFileContainer, "div", "ImageFile");
    for(var x=0,z=DiaporamaFiles.length;x<z;x++){
        if(x!=Value){
            DiaporamaFiles[x].style.display = "none";
        }else{
            DiaporamaFiles[x].style.display = "block";
        }
    }
    Diaporama.Params.Visible[index] = Value;
    Diaporama.Fonctions.UpdateBar(index);
    Diaporama.Fonctions.UpdateSelect(index);
    if(!Diaporama.Params.Paused[index]){
        var multipl = 1;
        if(Value==(Diaporama.Params.Length[index]-1)) multipl = 3;
        Diaporama.Params.Timeout[index] = setTimeout("Diaporama.Fonctions.ToggleDiapo("+index+",1);", Diaporama.Params.Delay[index]*1000*multipl);
    }
}
Diaporama.Fonctions.CreateSelect = function(index, Title){
    var Total = Diaporama.Params.Length[index];
    var Select = document.createElement('select');
    Select.id = "DiaporamaSelect"+index;
    Select.title = Title;
    for(var s=0;s<Total;s++){
        var Opt = document.createElement('option');
        if(s==0) Opt.selected = "selected";
        Opt.text = (s+1)+"/"+Total;
        Opt.innerHTML = (s+1)+"/"+Total;
        Opt.value = s;
        Select.appendChild(Opt);
    }
    Select.onchange = function(){ Diaporama.Fonctions.SelectDiapo(Diaporama.Fonctions.getIndex(this)); };
    Select.onmouseover = function(){ this.focus(); };
    return Select;
}
Diaporama.Fonctions.SelectDiapo = function(index){
    var Select = document.getElementById("DiaporamaSelect"+index);
    if(!Select) return;
    var Opts = Select.getElementsByTagName('option');
    for(var o=0,p=Opts.length;o<p;o++){
        if(Opts[o].selected) {
            var Value = parseInt(Opts[o].value);
            return Diaporama.Fonctions.ShowThisDiapo(index, Value);
        }
    }
}
Diaporama.Fonctions.UpdateSelect = function(index){
    var Select = document.getElementById("DiaporamaSelect"+index);
    if(!Select) return;
    var Opts = Select.getElementsByTagName('option');
    for(var o=0,p=Opts.length;o<p;o++){
        if(o==Diaporama.Params.Visible[index]) {
            Opts[o].selected = "selected";
        }else{
          Opts[o].selected = false;
        }
    }
}
Diaporama.Fonctions.UpdateBar = function(index){
    var Percent = (100/(Diaporama.Params.Length[index]-1)) * Diaporama.Params.Visible[index];
    if(Percent>100) Percent = 100;
    var DiaporamaControl = document.getElementById("DiaporamaControl_"+index);
    var DiaporamaScrollBar = getElementsByClassName(DiaporamaControl, "div", "ScrollBar")[0];
    DiaporamaScrollBar.style.width = Percent + "%";
}
Diaporama.Fonctions.Onclick = function(Link){
    var Image = Link.getElementsByTagName('img')[0];
    Image.style.backgroundColor = "gray";
}
Diaporama.Fonctions.Offclick = function(Link, index){
    var Span = Link.parentNode;
    var SpanClass = Span.className;
    var Image = Link.getElementsByTagName('img')[0];
    var DiapoState = Diaporama.Params.Paused[index];
    if( (hasClass("Play", Span) && DiapoState == false) || ( (hasClass("Pause", Span)||hasClass("Stop", Span))&&DiapoState==true) ){
        Image.style.backgroundColor = "silver";
    }else{
        Image.style.backgroundColor = "white";
    }
}
Diaporama.Fonctions.getIndex = function(Element){
    return parseInt(Element.id.replace(/[^0-9]/g, ""));
}
$(document).ready(function ($) {
    Diaporama.Fonctions.Init();
});
/**
* Ajout d'un style particulier aux liens interlangues vers un bon article ou
* un article de qualité
*/
function lienAdQouBAouPdQ() {
    if ( document.getElementById( "p-lang" ) ) {
        var InterwikiLinks = document.getElementById( "p-lang" ).getElementsByTagName( "li" );
        for ( var i = 0; i < InterwikiLinks.length; i++ ) {
            if ( document.getElementById( InterwikiLinks[i].className + "-adq" ) ) {
                InterwikiLinks[i].className += " AdQ"
                InterwikiLinks[i].title = "Lien vers un article de qualité.";
            }
            else if ( document.getElementById( InterwikiLinks[i].className + "-ba" ) ) {
                InterwikiLinks[i].className += " BA"
                InterwikiLinks[i].title = "Lien vers un bon article.";
            }
            else if ( document.getElementById( InterwikiLinks[i].className + "-pdq" ) ) {
                InterwikiLinks[i].className += " PdQ"
                InterwikiLinks[i].title = "Lien vers un portail de qualité.";
            }
        }
    }
}
addOnloadHook(lienAdQouBAouPdQ);
/**
* Permet d'afficher les catégories cachées pour les contributeurs enregistrés, en ajoutant un (+) à la manière des boîtes déroulantes
*/
function hiddencat(){
if(typeof(DesactiveHiddenCat)!="undefined" && DesactiveHiddenCat) return;
if(document.URL.indexOf("printable=yes")!=-1) return;
var cl = document.getElementById('catlinks'); if(!cl) return;
if( !(hc = document.getElementById('mw-hidden-catlinks')) ) return;
if( hasClass(hc, 'mw-hidden-cats-user-shown') ) return;
if( hasClass(hc, 'mw-hidden-cats-ns-shown') )  addClass(hc, 'mw-hidden-cats-hidden');
var nc = document.getElementById('mw-normal-catlinks');
if( !nc ) {
  var catline = document.createElement('div');
  catline.id = 'mw-normal-catlinks';
  var a = document.createElement('a');
  a.href = '/wiki/Catégorie:Accueil';
  a.title = 'Catégorie:Accueil';
  a.appendChild(document.createTextNode('Catégories'));
  catline.appendChild(a);
  catline.appendChild(document.createTextNode(' : '));
  nc = cl.insertBefore(catline, cl.firstChild);
}
else nc.appendChild(document.createTextNode(' | '));
var lnk = document.createElement('a');
lnk.id = 'mw-hidden-cats-link';
lnk.title = 'Cet article contient des catégories cachées';
lnk.style.cursor = 'pointer';
lnk.style.color = 'black';
lnk.onclick = toggleHiddenCats;
lnk.appendChild(document.createTextNode('[+]'));
hclink = nc.appendChild(lnk);
}
function toggleHiddenCats(){
if( hasClass(hc, 'mw-hidden-cats-hidden') ) {
  removeClass(hc, 'mw-hidden-cats-hidden');
  addClass(hc, 'mw-hidden-cat-user-shown');
  changeText(hclink, '[–]');
} else {
  removeClass(hc, 'mw-hidden-cat-user-shown');
  addClass(hc, 'mw-hidden-cats-hidden');
  changeText(hclink, '[+]');
}
}
addOnloadHook(hiddencat);
/**
* Script pour alterner entre plusieurs cartes de géolocalisation
*/
if(( mw.config.get('wgAction')=="view" || mw.config.get('wgAction')=="purge" || mw.config.get('wgAction')=="submit")) addOnloadHook(GeoBox_Init);
function GeoBox_Init(Element){
    if(!Element) Element = document.body;
    var cont = getElementsByClass('img_toogle', Element, 'div');
    if(cont.length==0) return;
    for (var i = 0,m=cont.length; i < m ; i++) {
          cont[i].id = 'img_toogle_' + i;
          var Boxes = getElementsByClass('geobox',cont[i]);
          var ToggleLinksDiv = document.createElement('ul');
          ToggleLinksDiv.id = 'geoboxToggleLinks_' + i;
          for(var a=0,l=Boxes.length;a<l;a++){
              var ThisBox = Boxes[a];
              ThisBox.id = 'geobox_' + i + "_" + a;
              ThisBox.style.borderTop='0';
              var ThisAlt = ThisBox.getElementsByTagName('img')[0].alt
              var toggle = document.createElement('a');
              toggle.id = 'geoboxToggle_' + i + "_" + a;
              toggle.appendChild(document.createTextNode(ThisAlt));
              toggle.href='javascript:;';
              toggle.onclick = function(){
                    GeoBox_Toggle(this);
                    return false;
              }
              var Li = document.createElement('li');
              Li.appendChild(toggle);
              ToggleLinksDiv.appendChild(Li);
              if(a==(l-1)){
                    Li.style.display = "none";
              }else{
                    ThisBox.style.display = "none";
              }
          }
          cont[i].appendChild(ToggleLinksDiv);
    }
}
function GeoBox_Toggle(link){
    var ImgToggleIndex = link.id.split('geoboxToggle_').join('').replace(/_.*/g, "");
    var GeoBoxIndex = link.id.replace(/.*_/g, "");
    var ImageToggle = document.getElementById('img_toogle_' + ImgToggleIndex);
    var Links = document.getElementById('geoboxToggleLinks_' + ImgToggleIndex);
    var Geobox = document.getElementById('geobox_' + ImgToggleIndex + "_" + GeoBoxIndex);
    var Link = document.getElementById('geoboxToggle_' + ImgToggleIndex + "_" + GeoBoxIndex);
    if( (!ImageToggle) || (!Links) || (!Geobox) || (!Link) ) return;
    var AllGeoboxes = getElementsByClass('geobox',ImageToggle);
    for(var a=0,l=AllGeoboxes.length;a<l;a++){
          if(AllGeoboxes[a] == Geobox){
              AllGeoboxes[a].style.display = "";
          }else{
              AllGeoboxes[a].style.display = "none";
          }
    }
    var AllToggleLinks = Links.getElementsByTagName('a');
    for(var a=0,l=AllToggleLinks.length;a<l;a++){
          if(AllToggleLinks[a] == Link){
              AllToggleLinks[a].parentNode.style.display = "none";
          }else{
              AllToggleLinks[a].parentNode.style.display = "";
          }
    }
}
/**
* permet d'ajouter un petit lien (par exemple d'aide) à la fin du titre d'une page.
* known bug : conflit avec le changement de titre classique.
* Pour les commentaires, merci de contacter [[user:Plyd|Plyd]].
*/
function rewritePageH1bis() {
  try {
    var helpPage = document.getElementById("helpPage");
    if (helpPage) {
      var helpPageURL = document.getElementById("helpPageURL");
      var h1 = document.getElementById('firstHeading');
      if (helpPageURL && h1) {
        h1.innerHTML = h1.innerHTML + '<span id="h1-helpPage">' + helpPageURL.innerHTML + '</span>';
        helpPage.style.display = "none";
      }
    }
  } catch (e) {
    /* Something went wrong. */
  }
}
addOnloadHook(rewritePageH1bis);
/**
* application de [[Wikipédia:Prise de décision/Système de cache]]
* un <span class="noarchive"> autour du lien l'empêche d'être pris en compte
* pour celui-ci uniquement
* un no_external_cache=true dans un monobook personnel désactive le script
*/
function addcache(element) {
    if (typeof no_external_cache !== "undefined" && no_external_cache) {
        return;
    }
    var liens = element ? $(element).find('ol.references').find('a.external') : $('ol.references').find('a.external');
    for (var i = 0, l = liens.length; i < l; i++) {
        var lien_en_cours = liens[i];
        var chemin = lien_en_cours.href;
        if (chemin.indexOf("http://archive.wikiwix.com/cache/") > -1 || chemin.indexOf("http://web.archive.org/web/") > -1 || chemin.indexOf("wikipedia.org") > -1 || chemin.indexOf("wikimedia.org") > -1 || chemin.indexOf("stable.toolserver.org") > -1) {
            continue;
        }
        var element_parent = lien_en_cours.parentNode;
        if (hasClass(element_parent, "noarchive")) {
            continue;
        }
        var titre = getTextContent(lien_en_cours);
        var last = document.createElement("small");
        last.className = "cachelinks";
        last.appendChild(document.createTextNode("\u00a0["));
        var link = document.createElement("a");
        link.setAttribute("href", "http://archive.wikiwix.com/cache/?url=" + chemin.replace(/%/g, "%25").replace(/&/g, "%26") + "&title=" + encodeURIComponent(titre));
        link.setAttribute("title", "archive de " + titre);
        link.appendChild(document.createTextNode("archive"));
        last.appendChild(link);
        last.appendChild(document.createTextNode("]"));
        element_parent.insertBefore(last, lien_en_cours.nextSibling);
    }
}
if ( mw.config.get('wgNamespaceNumber') === 0) {
    addOnloadHook(addcache);
}
$(document).ready(function ($) {
  /**
  * Rétablit l'accès clavier à la fonction de tri des tableaux
  */
  $('.sortable th').attr('tabindex',0).keypress(function(event){
    if ( event.which == 13 ) {
      $(this).click()
    }
  });
});
/**
* Direct imagelinks to Commons
*
* @source: http://www.mediawiki.org/wiki/Snippets/Direct_imagelinks_to_Commons
* @author: [[commons:User:Krinkle]]
* @rev: 5
*/
if ( mw.config.get( 'wgNamespaceNumber', 0 ) >= 0 ) {
        $(document).ready( function() {
                // Must be relative without "https://secure.wikimedia.org."
                // to avoid triggering 'div#content a[href ^="https://"]' lock-icons
                var    commonsBase = mw.config.get( 'wgServer' ) === "https://secure.wikimedia.org"
                                ? '/wikipedia/commons/wiki/File:'
                                : '//commons.wikimedia.org/wiki/File:',
                        localBase = mw.util.wikiGetlink( mw.config.get( 'wgFormattedNamespaces' )['6'] + ':' ),
                        uploadBaseRe = new RegExp( '^' + $.escapeRE( '//upload.wikimedia.org/wikipedia/commons/' ) );
                $( 'a.image' ).attr( 'href', function( i, currVal ) {
                        if ( uploadBaseRe.test( $(this).find( 'img' ).attr( 'src' ) ) ) {
                                return currVal.replace( localBase, commonsBase );
                        }
                });
   
   
        });
}
/************************************************************/
/* Function Strictement spécifiques à un espace de nom ou à une page */
/************************************************************/
// PAGE D'ACCUEIL
if( mw.config.get('wgFormattedNamespaces')[ mw.config.get('wgNamespaceNumber') ]+":"+mw.config.get('wgTitle') == mw.config.get('wgMainPageTitle') ) {
/**
* changement de l'onglet et lien vers la liste complète des Wikipédias depuis l'accueil
*/
function mainPageTransform(){
  $('#ca-nstab-project a').text('Accueil');
  addPortletLink('p-lang', '//www.wikipedia.org/', 'Liste complète', 'interwiki-listecomplete', 'Liste complète des Wikipédias');
}
addOnloadHook(mainPageTransform);
} // FIN DU IF page d'accueil
// ESPACE DE NOM 'SPECIAL'
if( mw.config.get('wgNamespaceNumber') == -1 ) {
/**
* Modifie Special:Search pour pouvoir utiliser différents moteurs de recherche,
* disponibles dans une boîte déroulante.
* Auteurs : Jakob Voss, Guillaume, importé depuis la Wiki allemande
* <pre><nowiki>
*/
function externalSearchEngines() {
  if (typeof SpecialSearchEnhanced2Disabled != 'undefined') return;
  if ( mw.config.get('wgCanonicalSpecialPageName') != "Search") return;
  var mainNode = document.getElementById("powersearch");
  if (!mainNode) mainNode = document.getElementById("search");
  if (!mainNode) return;
  var beforeNode = document.getElementById("mw-search-top-table");
  if (!beforeNode) return;
  beforeNode = beforeNode.nextSibling;
  if (!beforeNode) return;
  var firstEngine = "mediawiki";
  var choices = document.createElement("div");
  choices.setAttribute("id","searchengineChoices");
  choices.style.textAlign = "center";
  var lsearchbox = document.getElementById("searchText");
  if (!lsearchbox) return;
  var initValue = lsearchbox.value;
  var space = "";
  for (var id in searchEngines) {
    var engine = searchEngines[id];
if(engine.ShortName)
  {
    if (space) choices.appendChild(space);
    space = document.createTextNode(" ");
    var attr = {
      type: "radio",
      name: "searchengineselect",
      value: id,
      onFocus: "changeSearchEngine(this.value)",
      id: "searchengineRadio-"+id
    };
    var html = "<input";
    for (var a in attr) html += " " + a + "='" + attr[a] + "'";
    html += " />";
    var span = document.createElement("span");
    span.innerHTML = html;
    choices.appendChild( span );
    var label = document.createElement("label");
    label.htmlFor = "searchengineRadio-"+id;
    if (engine.Template.indexOf('http') == 0) {
      var lienMoteur = document.createElement("a");
      lienMoteur.href = engine.Template.replace("{searchTerms}", initValue).replace("{language}", "fr");
      lienMoteur.appendChild( document.createTextNode( engine.ShortName ) );
      label.appendChild(lienMoteur);
    } else {
      label.appendChild( document.createTextNode( engine.ShortName ) );
    }
    choices.appendChild( label );
  }
}
  mainNode.insertBefore(choices, beforeNode);
  var input = document.createElement("input");
  input.id = "searchengineextraparam";
  input.type = "hidden";
  mainNode.insertBefore(input, beforeNode);
  changeSearchEngine(firstEngine, initValue);
}
function changeSearchEngine(selectedId, searchTerms) {
  var currentId = document.getElementById("searchengineChoices").currentChoice;
  if (selectedId == currentId) return;
  document.getElementById("searchengineChoices").currentChoice = selectedId;
  var radio = document.getElementById('searchengineRadio-'  + selectedId);
  radio.checked = "checked";
  var engine = searchEngines[selectedId];
  var p = engine.Template.indexOf('?');
  var params = engine.Template.substr(p+1);
  var form;
  if (document.forms["search"]) {
    form = document.forms["search"];
  } else {
    form = document.getElementById("powersearch");
  }
  form.setAttribute("action", engine.Template.substr(0,p));
  var l = ("" + params).split("&");
  for (var idx = 0;idx < l.length;idx++) {
    var p = l[idx].split("=");
    var pValue = p[1];
    if (pValue == "{language}") {
    } else if (pValue == "{searchTerms}") {
      var input;
      input = document.getElementById("searchText");
      input.name = p[0];
    } else {
      var input = document.getElementById("searchengineextraparam");
      input.name = p[0];
      input.value = pValue;
    }
  }
}
if ( mw.config.get('wgCanonicalSpecialPageName') == "Search") {
var searchEngines = {
  mediawiki: {
    ShortName: "Recherche interne",
    Template: mw.config.get('wgScript') + "?search={searchTerms}"
  },
  exalead: {
    ShortName: "Exalead",
    Template: "http://www.exalead.com/search/wikipedia/results/?q={searchTerms}&language=fr"
  },
  google: {
    ShortName: "Google",
    Template: "http://www.google.fr/search?as_sitesearch=fr.wikipedia.org&hl={language}&q={searchTerms}"
  },
  wikiwix: {
    ShortName: "Wikiwix",
    Template: "http://fr.wikiwix.com/index.php?action={searchTerms}&lang={language}"
  },
  wlive: {
    ShortName: "Bing",
    Template: "http://www.bing.com/search?q={searchTerms}&q1=site:http://fr.wikipedia.org"
  },
  yahoo: {
    ShortName: "Yahoo!",
    Template: "http://fr.search.yahoo.com/search?p={searchTerms}&vs=fr.wikipedia.org"
  },
globalwpsearch: {
    ShortName: "Global WP",
    Template: "http://vs.aka-online.de/cgi-bin/globalwpsearch.pl?timeout=120&search={searchTerms}"
  }
};
addOnloadHook(externalSearchEngines);
}
/**
* Affiche un modèle Information sur la page de téléchargement de fichiers [[Spécial:Téléchargement]]
* Voir aussi [[MediaWiki:Onlyifuploading.js]]
*/
if( mw.config.get('wgCanonicalSpecialPageName') == "Upload" ) {
  importScript("MediaWiki:Onlyifuploading.js");
}
} // Fin du code concernant l'espace de nom 'Special'
// ESPACE DE NOM 'UTILISATEUR'
if( mw.config.get('wgNamespaceNumber') == 2 ) {
/* DÉBUT DU CODE JAVASCRIPT DE "CADRE À ONGLETS"
    Fonctionnement du [[Modèle:Cadre à onglets]]
    Modèle implanté par User:Peleguer de http://ca.wikipedia.org
    Actualisé par User:Joanjoc de http://ca.wikipedia.org
    Traduction et adaptation User:Antaya de http://fr.wikipedia.org
    Indépendance de classes CSS et nettoyage par User:Nemoi de http://fr.wikipedia.org
*/
function CadreOngletInitN(){
  var Classeurs = $('div.classeur')
  for ( var i = 0; i < Classeurs.length; i++ ) {
      var Classeur = Classeurs[i];
      Classeur.setAttribute( "id", "classeur" + i );
      var vOgIni = -1 // pour connaître l’onglet renseigné
      var Onglets = $(Classeur).children("div").eq(0).children("div");
      var Feuillets = $(Classeur).children("div").eq(1).children("div");
      for ( var j = 0; j < Onglets.length; j++) {
        var Onglet = Onglets[j];
        var Feuillet = Feuillets[j];
        Onglet.setAttribute( "id", "classeur" + i + "onglet" + j );
        Feuillet.setAttribute( "id", "classeur" + i + "feuillet" + j );
        Onglet.onclick = CadreOngletVoirOngletN;
        if ( hasClass( Onglet, "ongletBoutonSel") ) vOgIni=j;
      }
      // inutile sauf dans le cas où l’onglet de départ est *mal* renseigné
      if (vOgIni == -1) {
        var vOgIni = Math.floor((Onglets.length)*Math.random()) ;
        document.getElementById("classeur"+i+"feuillet"+vOgIni).style.display = "block";
        document.getElementById("classeur"+i+"feuillet"+vOgIni).style.visibility = "visible";
        var vBtElem = document.getElementById("classeur"+i+"onglet"+vOgIni);
        removeClass(Onglet, "ongletBoutonNonSel");
        addClass(Onglet, "ongletBoutonSel");
        vBtElem.style.cursor="default";
        vBtElem.style.backgroundColor="inherit";
        vBtElem.style.borderTopColor="inherit";      // propriété par propriété sinon Chrome/Chromium se loupe
        vBtElem.style.borderRightColor="inherit";
        vBtElem.style.borderBottomColor="inherit";
        vBtElem.style.borderLeftColor="inherit";
      }
  }
}
function CadreOngletVoirOngletN(){
  var vOngletNom = this.id.substr(0,this.id.indexOf("onglet",1));
  var vOngletIndex = this.id.substr(this.id.indexOf("onglet",0)+6,this.id.length);
  var rule1=$('#' + vOngletNom + ' .ongletBoutonNonSel')[0].style.backgroundColor.toString();
  var rule2=$('#' + vOngletNom + ' .ongletBoutonNonSel')[0].style.borderColor.toString();      //rule2=$('.ongletBoutonNonSel').css("border-color"); ne fonctionne pas sous Firefox
  var Onglets = $('#' + vOngletNom).children("div").eq(0).children("div")
  for ( var j = 0; j < Onglets.length; j++) {
    var Onglet = Onglets[j];
    var Feuillet = document.getElementById(vOngletNom + "feuillet" + j);
    if (vOngletIndex==j){
      Feuillet.style.display = "block";
      Feuillet.style.visibility = "visible";
      removeClass(Onglet, "ongletBoutonNonSel");
      addClass(Onglet, "ongletBoutonSel");
      Onglet.style.cursor="default";
      Onglet.style.backgroundColor="inherit";
      Onglet.style.borderTopColor="inherit";      // propriété par propriété sinon Chrome/Chromium se loupe
      Onglet.style.borderRightColor="inherit";
      Onglet.style.borderBottomColor="inherit";
      Onglet.style.borderLeftColor="inherit";
    } else {
      Feuillet.style.display = "none";
      Feuillet.style.visibility = "hidden";
      removeClass(Onglet, "ongletBoutonSel");
      addClass(Onglet, "ongletBoutonNonSel");
      Onglet.style.cursor="pointer";
      Onglet.style.backgroundColor=rule1;
      Onglet.style.borderColor=rule2;
    }
  }
  return false;
}
addOnloadHook(CadreOngletInitN);
/*FIN DU CODE JAVASCRIPT DE "CADRE À ONGLETS"*/
} // Fin du code concernant l'espace de nom 'Utilisateur'
// ESPACE DE NOM 'RÉFÉRENCE'
if( mw.config.get('wgNamespaceNumber') == 104 ) {
/*
* Choix du mode d'affichage des références
* Devraient en principe se trouver côté serveur
* @note L'ordre de cette liste doit correspondre a celui de Modèle:Édition !
*/
function addBibSubsetMenu() {
  var specialBib = document.getElementById('specialBib');
  if (!specialBib) return;
  specialBib.style.display = 'block';
  menu = '<select style="display:inline;" onChange="chooseBibSubset(selectedIndex)">'
  + '<option>Liste</option>'
  + '<option>WikiNorme</option>'
  + '<option>BibTeX</option>'
  + '<option>ISBD</option>'
  + '<option>ISO690</option>'
  + '</select>';
  specialBib.innerHTML = specialBib.innerHTML + menu;
  /* default subset - try to use a cookie some day */
  chooseBibSubset(0);
}
// select subsection of special characters
function chooseBibSubset(s) {
  var l = document.getElementsByTagName('div');
  for (var i = 0; i < l.length ; i++) {
    if(l[i].className == 'BibList')  l[i].style.display = s == 0 ? 'block' : 'none';
    else if(l[i].className == 'WikiNorme') l[i].style.display = s == 1 ? 'block' : 'none';
    else if(l[i].className == 'BibTeX')    l[i].style.display = s == 2 ? 'block' : 'none';
    else if(l[i].className == 'ISBD')      l[i].style.display = s == 3 ? 'block' : 'none';
    else if(l[i].className == 'ISO690')    l[i].style.display = s == 4 ? 'block' : 'none';
  }
}
addOnloadHook(addBibSubsetMenu);
} // Fin du code concernant l'espace de nom 'Référence'
/* Permet d'afficher un compte à rebours sur une page avec le modèle [[Modèle:Compte à rebours]] */
/* Plyd - 3 février 2009 */
function Rebours() {
  if( mw.config.get('wgNamespaceNumber') ==0) return;
  try {
  if (document.getElementById("rebours")) {
      destime = document.getElementById("rebours").title.HTMLize().split(";;");
      Maintenant = (new Date).getTime();
      Future = new Date(Date.UTC(destime[0], (destime[1]-1), destime[2], destime[3], destime[4], destime[5])).getTime();
      Diff = (Future-Maintenant);
      if (Diff < 0) {Diff = 0}
      TempsRestantJ = Math.floor(Diff/(24*3600*1000));
      TempsRestantH = Math.floor(Diff/(3600*1000)) % 24;
      TempsRestantM = Math.floor(Diff/(60*1000)) % 60;
      TempsRestantS = Math.floor(Diff/1000) % 60;
      TempsRestant = "" + destime[6] + " ";
      if (TempsRestantJ == 1) {
        TempsRestant = TempsRestant + TempsRestantJ + " jour ";
      } else if (TempsRestantJ > 1) {
        TempsRestant = TempsRestant + TempsRestantJ + " jours ";
      }
      TempsRestant = TempsRestant + TempsRestantH + " h " + TempsRestantM  + " min " + TempsRestantS + " s";
      document.getElementById("rebours").innerHTML = TempsRestant;
      setTimeout("Rebours()", 1000)
    }
  } catch (e) {}
}
addOnloadHook(Rebours);
/* Ajoute la date de dernière modification sur le bandeau événement récent */
/* Plyd - 12 juin 2009 */
function LastModCopy() {
  var LastModSpan = document.getElementById('lastmod');                          // Monobook et affiliés, Modern
  if(!LastModSpan) LastModSpan = document.getElementById('footer-info-lastmod'); // Vector
  var LastModBandeau = document.getElementById("lastmodcopy");
  if((!LastModSpan)||(!LastModBandeau)) return;
  LastModBandeau.innerHTML = LastModSpan.innerHTML;
}
addOnloadHook(LastModCopy);
/**
* Import des scripts liés à la liste de suivi
*/
if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Watchlist' ) {
    importScript( 'MediaWiki:Common.js/watchlist.js' );
}
/*********************************/
/* Autres fonctions non classées */
/*********************************/
/*
* Fonction
*
* Récupère la valeur d'une variable globale en gérant le cas lorsque cette variable n'existe pas
* @param nom_variable Nom de la variable dont on veut connaître la valeur
* @param val_defaut Valeur par défaut si la variable n'existe pas
* @return La valeur de la variable, ou val_defaut si la variable n'existe pas
*
* Auteur : Sanao
* Dernière révision : 22 novembre 2007
*/
function getVarValue(nom_variable, val_defaut)
{
var result = null;
try {
result = eval(nom_variable.toString());
} catch (e) {
result = val_defaut;
}
return(result);
}
/*
* Fonction
*
* Retourne une chaîne de caractères de la date courante selon dans un certain format
* @param format Format de la date "j" pour le jour, "m" pour le mois et "a" pour l'année. Ainsi si l'on est le 21 novembre 2007 et l'on passe en paramètre cette chaîne "a_m_d", la chaîne retournée sera "2007_novembre_21"
* Auteur : Sanao
* Dernière révision : 21 novembre 2007
*/
function getStrDateToday(format)
{
  var str_mois = new Array();
  with (str_mois)
  {
    push("janvier");
    push("février");
    push("mars");
    push("avril");
    push("mai");
    push("juin");
    push("juillet");
    push("août");
    push("septembre");
    push("octobre");
    push("novembre");
    push("décembre");
  }
  var today = new Date();
  var day = today.getDate();
  var year = today.getYear();
  if (year < 2000)
  {
    year = year + 1900;
  }
  var str_date = format;
  //Création de la chaîne
  var regex = /j/gi;
  str_date = str_date.replace(regex, day.toString());
  regex = /a/gi;
  str_date = str_date.replace(regex, year.toString());
  regex = /m/gi;
  str_date = str_date.replace(regex, str_mois[today.getMonth()]);
  return (str_date);
}
/* petites fonctions pratiques  - Darkoneko, 09/01/2008 */
//créé un lien et le retourne.
//le parametre onclick est facultatif.
function createAdressNode(href, texte, onclick) {
  var a = document.createElement('a')
  a.href = href
  a.appendChild(document.createTextNode( texte ) )
  if(arguments.length == 3) {  a.setAttribute("onclick", onclick )  }
  return a
}
//Créé un cookie. il n'existais qu'une version dédiée à l'accueil. Celle ci est plus générique
//le parametre duree est en jours
function setCookie(nom, valeur, duree ) {
  var expDate = new Date()
  expDate.setTime(expDate.getTime() + ( duree * 24 * 60 * 60 * 1000))
  document.cookie = nom + "=" + escape(valeur) + ";expires=" + expDate.toGMTString() + ";path=/"
}
/**
* A recent update for AFTv5 is not behaving properly when
* cache page output is served & a non-cached JS is loaded.
* The default value of 'permissionLevel' will now be false,
* instead of an actual value. Cached pages will still have
* the default value set though (instead of false), so the
* new JavaScript will interpret that as that the permission
* level has been set specifically, instead of falling back
* to the real (disabled) default value.
* This code will basically detect if the page output is old,
* and if so, re-calculate and correct what the values for
* permissionLevel & defaultPermissionLevel.
*/
var article = mw.config.get( 'aftv5Article' );
if (
      article &&
      // when this key was introduced, so was the good data we're using now
      !( 'aft-noone' in mw.config.get( 'wgArticleFeedbackv5Permissions' ) ) &&
      // make sure no specific protection was set (aft-reader was default)
      article['permissionLevel'] === 'aft-reader'
) {
      // pretend no permission level is set
      article['permissionLevel'] = false;
      // now that data is corrected, check if AFT should be enabled;
      // if not, we should make sure that any form being added is
      // removed again
      // if verify function does not exist, we need not worry,
      // AFT data is corrected now already so nothing wrong
      // will be added
      if ( typeof $.aftUtils.verify === 'function' && !$.aftUtils.verify( 'article' ) ) {
      var remove, interval;
      remove = function() {
      var $aft = $( '#mw-articlefeedbackv5' );
      if ( $aft.length > 0 ) {
      $aft.remove();
      clearInterval( interval );
      }
      };
      interval = setInterval( remove, 100 );
      }
}
}
addOnloadHook(BoiteDeroulante);