MediaWiki:Common.js

De Wikipasdecalais
Révision de 7 septembre 2011 à 14:30 par Colinherve (discussion | contributions) (Page créée avec « == Page d’accueil == Transforme la page d'accueil en page "normale" (fond blanc) et enlève son titre. : function PageAccueil() { if(wgPageName == "Accueil" && wgAc... »)

(diff) ← Version précédente | Voir la version courante (diff) | Version suivante → (diff)
Aller à : navigation, rechercher

Note : après avoir enregistré vos modifications, il se peut que vous deviez forcer le rechargement complet du cache de votre navigateur pour voir les changements.

  • Firefox / Safari : Maintenez la touche Maj (Shift) en cliquant sur le bouton Actualiser ou pressez Ctrl-F5 ou Ctrl-R (⌘-R sur un Mac) ;
  • Google Chrome : Appuyez sur Ctrl-Maj-R (⌘-Shift-R sur un Mac) ;
  • Internet Explorer : Maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5 ;
  • Opera : Videz le cache dans Outils → Préférences.
/*
== Page d’accueil ==
Transforme la page d'accueil en page "normale" (fond blanc) et enlève son titre.
*/
 
function PageAccueil()
{
  if(wgPageName == "Accueil" && wgAction == "view") {
    document.body.className = document.body.className.replace("ns-4", "ns-0") ;
    document.write('<style type="text/css">/*<![CDATA[*/ #lastmod, #siteSub, #contentSub, h1.firstHeading { display: none !important; } /*]]>*/</style>') ;
  }
}
 
addOnloadHook(PageAccueil) ;

/*************************************************************/
/* Fonctions javascript : pallient les limites de javascript */
/* Surveiller : http://www.ecmascript.org/                   */
/*************************************************************/

/**
 * insertAfter : insérer un élément dans une page
 */
function insertAfter(parent, node, referenceNode) {
  parent.insertBefore(node, referenceNode.nextSibling); 
}

/**
 * getElementsByClass : rechercher les éléments de la page dont le paramètre "class" est celui recherché
 */
function getElementsByClass(searchClass, node, tag) {
  if (node == null) node = document;
  if (tag == null) tag = '*';
  return getElementsByClassName(node, tag, searchClass);
}

/**
 * Diverses fonctions manipulant les classes
 * Utilise des expressions régulières et un cache pour de meilleures perfs
 * 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 isClass(element, classe) {
    return hasClass(element, classe);
}

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;
}
 
function hasClass(node, className) {
  if (node.className == className) {
    return true;
  }
  var reg = new RegExp('(^| )'+ className +'($| )')
  if (reg.test(node.className)) {
    return true;
  }
  return false;
}
 
function addClass(node, className) {
    if (hasClass(node, className)) {
        return false;
    }
    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);
}


/**
 * Récupère la valeur du cookie
 */
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;
}

/************************************************************************/
/* Fonctions générales mediawiki (pallient les limitations du logiciel) */
/* Surveiller : http://fr.wikipedia.org/skins-1.5/common/wikibits.js    */
/************************************************************************/

/*
 * 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
 */
function loadJs(page) {
  document.write('<script type="text/javascript" src="' +
                 'http://fr.wikipedia.org/w/index.php?title=' + page +
                 '&action=raw&ctype=text/javascript&dontcountme=s"></script>');
}

/**
 * Projet JavaScript
 */
function obtenir(name) {
  if(name.indexOf('caractères/') != -1) loadJs('MediaWiki:JSScripts/' + name);
  else loadJs('MediaWiki:Gadget-' + name + '.js');
}


/**************************************/
/* Applications pour les lecteurs     */
/**************************************/

/* Devraient en principe se trouver côté serveur */

/*
 * Choix du mode d'affichage des références
 * @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);

/**
 * Modifie Special:Search pour pouvoir utiliser différents moteurs de recherche,
 * disponibles dans une boîte déroulante.
 * Auteurs : [[:en:User:Gracenotes]], importé de Wikipédia en anglais.
 * [[User:Zelda]] pour le stockage du moteur par cookie.
 */
 
if (wgPageName == "Special:Recherche") {
  var searchEngines = [];
  addOnloadHook(SpecialSearchEnhanced);
}
 
function SpecialSearchEnhanced() {
  var createOption = function(site, action, mainQ, addQ, addV) {
    var opt = document.createElement('option');
    opt.appendChild(document.createTextNode(site));
    searchEngines[searchEngines.length] = [action, mainQ, addQ, addV];
    return opt;
  }

  if (document.forms['powersearch'])  
    var searchForm = document.forms['powersearch'];
  if (document.forms['search'])
    var searchForm = document.forms['search'];
  if (searchForm.lsearchbox) {
    var searchBox = searchForm.lsearchbox;
  } else {
    var searchBox = searchForm.search;
  }
  var selectBox = document.createElement('select');
  selectBox.id = 'searchEngine';
  searchForm.onsubmit = function() {
    var optId = document.getElementById('searchEngine').selectedIndex;
    var optSelected = searchEngines[optId];
    searchForm.action = optSelected[0];
    searchBox.name = optSelected[1];
    searchForm.title.value = optSelected[3];
    searchForm.title.name = optSelected[2];
    // stockage du moteur dans un cookie
    document.cookie = "searchEngineId=" + optId;
  }
  selectBox.appendChild(createOption('Recherche interne', wgScriptPath + '/index.php', 'search', 'title', 'Special:Recherche'));
  selectBox.appendChild(createOption('Exalead', 'http://www.exalead.com/wikipedia/results', 'q', 'language', 'fr'));
  selectBox.appendChild(createOption('Google', 'http://www.google.fr/search', 'q', 'sitesearch', 'fr.wikipedia.org'));
  selectBox.appendChild(createOption('Wikiwix', 'http://fr.wikiwix.com/', 'action', 'lang', 'fr'));
  selectBox.appendChild(createOption('Windows Live', 'http://search.live.com/results.aspx', 'q', 'q1', 'site:http://fr.wikipedia.org'));
  selectBox.appendChild(createOption('Yahoo', 'http://fr.search.yahoo.com/search', 'p', 'vs', 'fr.wikipedia.org'));
  selectBox.appendChild(createOption('Global WP Search', 'http://vs.aka-online.de/cgi-bin/globalwpsearch.pl', 'search', 'timeout', '15'));
  // récupération du dernier moteur utilisé stocké dans un cookie
  var defaultId = getCookieVal("searchEngineId");
  if (defaultId) {
    selectBox.selectedIndex = defaultId;
  }
  searchBox.style.marginLeft = '0px';
  if (document.getElementById('loadStatus')) {
    var lStat = document.getElementById('loadStatus');
  } else {
    var lStat = searchForm.fulltext;
  }
  lStat.parentNode.insertBefore(selectBox, lStat);
}

/**
 * Transformer les pages du Bistro en page de discussion
 */
function DiscussionBistro() {
  if(  (wgPageName.search('Wikipédia:Le_Bistro') != -1)
    || (wgPageName.search('Wikipédia:Bulletin_des_administrateurs') != -1))
    document.body.className = 'ns-1';
}

addOnloadHook(DiscussionBistro);

/**
 * Transformer certaines pages en page de discussion avec le modèle {{page de discussion}}
 */
function TransformeEnDiscussion() {
   var transformeEnPDD = document.getElementById("transformeEnPageDeDiscussion");
   if(transformeEnPDD) document.body.className = "ns-1";
}

addOnloadHook(TransformeEnDiscussion);

/**
 * Transformer certaines pages en pseudo-article
 * c'est raisonnable ? --Tavernier
 */
function TransformeEnArticle() {
   var transformeEnA = document.getElementById("transformeEnArticle");
   if(transformeEnA) document.body.className = "ns-0";
}

addOnloadHook(TransformeEnArticle);

/**
 * Afficher une explication au nombre de caractères dans la liste de suivi
 */
function toolTipPlusMinus() {
  var tt = "Nombre de caractères d'écart entre les deux dernières versions de la page";
  var elmts = document.getElementsByTagName("span");
  for(var cpt = 0; cpt < elmts.length; cpt++) {
    if (/mw-plusminus-(pos|neg|null)/.test(elmts[cpt].className) || /mw-plusminus-(pos|neg|null)/.test(elmts[cpt].getAttribute("class")))
      elmts[cpt].title = tt;
  }
}

addOnloadHook(toolTipPlusMinus);

/**
 * 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="inline";
}

function imageGroup(){
  if (document.URL.match(/printable/g)) return;
  var bc=document.getElementById("bodyContent");
  if( !bc ) bc = document.getElementById("mw_contentholder");
  if( !bc ) return;
  var divs=bc.getElementsByTagName("div");
  var i = 0, j = 0;
  var units, search;
  var currentimage;
  var UnitNode;
  for (i = 0; i < divs.length ; i++) {
    if (divs[i].className != "ImageGroup") continue;
    UnitNode=undefined;
    search=divs[i].getElementsByTagName("div");
    for (j = 0; j < search.length ; j++) {
      if (search[j].className != "ImageGroupUnits") continue;
      UnitNode=search[j];
      break;
    }
    if (UnitNode==undefined) continue;
    units=Array();
    for (j = 0 ; j < UnitNode.childNodes.length ; j++ ) {
      var temp = UnitNode.childNodes[j];
      if (temp.className=="center") units.push(temp);
    }
    for (j = 0 ; j < units.length ; j++) {
      currentimage=units[j];
      currentimage.id="ImageGroupsGr"+i+"Im"+j;
      var imghead = document.createElement("div");
      var leftlink;
      var rightlink;
      if (j != 0) {
        leftlink = document.createElement("a");
        leftlink.href = "javascript:toggleImage("+i+","+j+","+(j-1)+");";
        leftlink.innerHTML="◀";
      } else {
        leftlink = document.createElement("span");
        leftlink.innerHTML="&nbsp;";
      }
      if (j != units.length - 1) {
        rightlink = document.createElement("a");
        rightlink.href = "javascript:toggleImage("+i+","+j+","+(j+1)+");";
        rightlink.innerHTML="▶";
      } else {
        rightlink = document.createElement("span");
        rightlink.innerHTML="&nbsp;";
      }
      var comment = document.createElement("tt");
      comment.innerHTML = "("+ (j+1) + "/" + units.length + ")";
      with(imghead) {
        style.fontSize="110%";
        style.fontweight="bold";
        appendChild(leftlink);
        appendChild(comment);
        appendChild(rightlink);
      }
      currentimage.insertBefore(imghead,currentimage.childNodes[0]);
      if (j != 0) currentimage.style.display="none";
    }
  }
}

addOnloadHook(imageGroup);

/**
 * Ajout d'un style particulier aux liens interlangues vers un bon article ou
 * un article de qualité
 */
function lienAdQouBAouPdQ() {
  // links are only replaced in p-lang
  var pLang = document.getElementById("p-lang");
  if (!pLang) return;
  var lis = pLang.getElementsByTagName("li");
  for (var i=0; i<lis.length; i++) {
    var li = lis[i];
    // ADQ- est intentionnel pour correspondre au modèle Lien AdQ, on
    // ne doit pas le corriger.
    if (document.getElementById("ADQ-" + li.className)) {
      li.className += " AdQ";
      li.title = "Lien vers un article de qualité";
    } else if (document.getElementById("BA-" + li.className)) {
      li.className += " BA";
      li.title = "Lien vers un bon article";
    } else if (document.getElementById("PdQ-" + li.className)) {
      li.className += " AdQ";
      li.title = "Lien vers un portail de qualité";
    }
  }
}
addOnloadHook(lienAdQouBAouPdQ);

/**
 * Suppression du titre sur la page d'accueil, 
 * changement de l'onglet et lien vers la liste complète des Wikipédias depuis l'accueil
 */
function mainPageTransform(){
  if(wgPageName != 'Accueil' && wgPageName != 'Discuter:Accueil') return;
  try {
    document.getElementById('ca-nstab-main').firstChild.innerHTML = 'Accueil';
  } catch (e) { /* Erreur : l'apparence ne gère la pas les onglets */ }
  if(wgPageName == 'Accueil' && wgIsArticle) addPortletLink('p-lang', 'http://meta.wikimedia.org/wiki/Liste_des_Wikipédias', 'Liste complète', 'interwiki-listecomplete', 'Liste complète des Wikipédias');
}

addOnloadHook(mainPageTransform);

/**
 * Liens d'aide des pages spéciales
 *
 * 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.getElementsByTagName("h1")[0];
      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);

/**
 * Redirect vers wikibooks etc.
 *
 */
var redirectedFromArticleDatas = new Array(
   new Array('Wikipédia:Redirect_vers_Wikibooks', 'wikibooks'),
   new Array('Wikipédia:Redirect_vers_Wikisource', 'wikisource'),
   new Array('Wikipédia:Redirect_vers_Wikiversité', 'wikiversity'),
   new Array('Wikipédia:Redirect_vers_Wikiquote', 'wikiquote'),
   new Array('Wikipédia:Redirect_vers_Wikinews', 'wikinews'),
   new Array('Wikipédia:Redirect_vers_Wiktionnaire', 'wiktionary')
);

function redirectedFromArticle() {
   if (wgIsArticle == false)
       return;
   for (var i = 0; i < redirectedFromArticleDatas.length; ++i) {
     var page_match = redirectedFromArticleDatas[i];
     var index = wgPageName.indexOf(page_match[0]);
     if (index == 0) {
        var div = document.getElementById('contentSub');
        var span = document.getElementById('redirected_from');
        // real target is always encoded in the anchor.
        target = window.location.hash;
        if (!div || !span || target == '')
            break;

        target = target.slice(1);
        // Konqueror 3.5 work around
        if (target.indexOf('#') == 0)
            target = target.slice(1);
        target = target.split('.23');
        target[0] = target[0].replace(/\.([0-9A-Z][0-9A-Z])/g, '%$1');
        var quoted = target[0]
        if (target[1].length)
            quoted += '#' + target[1]
        quoted = quoted.replace(/%2F/g, '/');
        var display = target[2]
        display = display.replace(/\.([0-9A-Z][0-9A-Z])/g, '%$1');
        display = decodeURI(display);
        display = display.replace(/_/g, ' ');

        var e = document.createElement('A');
        e.href = 'http://fr.' + page_match[1] + '.org/wiki/' + quoted;
        e.innerHTML = display;
        span.replaceChild(e, span.firstChild);
        break;
     }
   }
}

addOnloadHook(redirectedFromArticle);

/* En phase de test */
/* 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
*/
function CadreOngletInit(){
 // retour si ailleurs que sur l'espace utilisateur, 
 // sachant que c'est une horreur au niveau de l'accessibilité
 // et qu'il est impossible de "récupérer" ou de recycler ce script
 // (celui-ci fonctionnant par inclusion de sous pages)
 if (wgCanonicalNamespace != 'User') return;  
  var i=0       
  for (i=0;i<=9;i++){
     var vMb = document.getElementById("mb"+i);
     if (!vMb) break;
 
     var j=1    
     var vOgIni = 0  
     for (j=1;j<=9;j++){
        var vBt = document.getElementById("mb"+i+"bt"+j);
        if (!vBt) break;
        vBt.onclick = CadreOngletVoirOnglet;          
        if (vBt.className=="mbBoutonSel") vOgIni=j;  
     }

     if (vOgIni == 0) { 
         vOgIni = 1+Math.floor((j-1)*Math.random()) ;
         document.getElementById("mb"+i+"og"+vOgIni).style.display = "block";
         document.getElementById("mb"+i+"og"+vOgIni).style.visibility = "visible";
         document.getElementById("mb"+i+"bt"+vOgIni).className="mbBoutonSel";
     } 
  }
 }
 
 function CadreOngletVoirOnglet(){
  var vMbNom = this.id.substr(0,3); 
  var vIndex = this.id.substr(5,1); 
 
  var i=1
  for (i=1;i<=9;i++){        
        var vOgElem = document.getElementById(vMbNom+"og"+i);
        if (!vOgElem) break;
        if (vIndex==i){ 
                vOgElem.style.display = "block";
                vOgElem.style.visibility = "visible";
                document.getElementById(vMbNom+"bt"+i).className="mbBoutonSel";
        } else {             
                vOgElem.style.display = "none";
                vOgElem.style.visibility = "hidden";
                document.getElementById(vMbNom+"bt"+i).className="mbBouton";
        }
  }
  return false; 
 }
 
 addOnloadHook(CadreOngletInit);
 
/*FIN DU CODE JAVASCRIPT DE "CADRE À ONGLETS"*/

/** 
 * Boîtes déroulantes
 *
 * Pour [[Modèle:Méta palette de navigation]]
 */

var autoCollapse = 2;
var collapseCaption = '[ Enrouler ]';
var expandCaption = '[ Dérouler ]';

function collapseTable( tableIndex ) {
  var Button = document.getElementById( "collapseButton" + tableIndex );
  var Table = document.getElementById( "collapsibleTable" + tableIndex );
  if ( !Table || !Button ) return false;

  var Rows = Table.getElementsByTagName( "tr" ); 

  if ( Button.firstChild.data == collapseCaption ) {
    for ( var i = 1; i < Rows.length; i++ ) {
      Rows[i].style.display = "none";
    }
    Button.firstChild.data = expandCaption;
  } else {
    for ( var i = 1; i < Rows.length; i++ ) {
      Rows[i].style.display = Rows[0].style.display;
    }
    Button.firstChild.data = collapseCaption;
  }
}

function createCollapseButtons() {
  var tableIndex = 0;
  var NavigationBoxes = new Object();
  var Tables = document.getElementsByTagName( "table" );

  for ( var i = 0; i < Tables.length; i++ ) {
    if ( hasClass( Tables[i], "collapsible" ) ) {
      NavigationBoxes[ tableIndex ] = Tables[i];
      Tables[i].setAttribute( "id", "collapsibleTable" + tableIndex );

      var Button     = document.createElement( "span" );
      var ButtonLink = document.createElement( "a" );
      var ButtonText = document.createTextNode( collapseCaption );

      Button.style.styleFloat = "right";
      Button.style.cssFloat = "right";
      Button.style.fontWeight = "normal";
      Button.style.textAlign = "right";
      Button.style.width = "6em";

      ButtonLink.setAttribute( "id", "collapseButton" + tableIndex );
      ButtonLink.setAttribute( "href", "javascript:collapseTable(" + tableIndex + ");" );
      ButtonLink.appendChild( ButtonText );

      Button.appendChild( ButtonLink );

      var Header = Tables[i].getElementsByTagName( "tr" )[0].getElementsByTagName( "th" )[0];
      /* only add button and increment count if there is a header row to work with */
      if (Header) {
        Header.insertBefore( Button, Header.childNodes[0] );
        tableIndex++;
      }
    }
  }

  for (var i = 0; i < tableIndex; i++) {
    if ( hasClass( NavigationBoxes[i], "collapsed" ) || ( tableIndex >= autoCollapse && hasClass( NavigationBoxes[i], "autocollapse" ) ) ) collapseTable( i );
  }
}

addOnloadHook(createCollapseButtons);

/**
 * Pour [[Modèle:Boîte déroulante]] 
 */
var NavigationBarShowDefault = 0;
 
function toggleNavigationBar(indexNavigationBar) {
  var NavToggle = document.getElementById("NavToggle" + indexNavigationBar);
  var NavFrame = document.getElementById("NavFrame" + indexNavigationBar);
 
  if (!NavFrame || !NavToggle) return;
 
  // surcharge des libellés dérouler/enrouler grâce a l'attribut title
  // exemple : title="[déroulade]/[enroulade]"
  var caption = [expandCaption, collapseCaption];
  if (NavFrame.title && NavFrame.title.length > 0) {
    caption = NavFrame.title.split("/");
    if (caption.length < 2) caption.push(collapseCaption);
  }
 
  // if shown now
  if (NavToggle.firstChild.data == caption[1]) {
    for ( var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {
      if (hasClass(NavChild, 'NavPic')) NavChild.style.display = 'none';
      if (hasClass(NavChild, 'NavContent')) NavChild.style.display = 'none';
      if (hasClass(NavChild, 'NavToggle')) NavChild.firstChild.data = caption[0];
    }
 
  // if hidden now
  } else if (NavToggle.firstChild.data == caption[0]) {
    for ( var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {
      if (hasClass(NavChild, 'NavPic')) NavChild.style.display = 'block';
      if (hasClass(NavChild, 'NavContent')) NavChild.style.display = 'block';
      if (hasClass(NavChild, 'NavToggle')) NavChild.firstChild.data = caption[1];
    }
  }
}
 
// adds show/hide-button to navigation bars
function createNavigationBarToggleButton() {
  var indexNavigationBar = 0;
  var NavFrame;
  // iterate over all < div >-elements
  for( var i=0; NavFrame = document.getElementsByTagName("div")[i]; i++ ) {
    // if found a navigation bar
    if (hasClass(NavFrame, "NavFrame")) {
      indexNavigationBar++;
      var NavToggle = document.createElement("a");
      NavToggle.className = 'NavToggle';
      NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar);
      NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');');
 
      // surcharge des libellés dérouler/enrouler grâce a l'attribut title
      var caption = collapseCaption;
      if (NavFrame.title && NavFrame.title.indexOf("/") > 0) {
         caption = NavFrame.title.split("/")[1];
      }

      var NavToggleText = document.createTextNode(caption);
      NavToggle.appendChild(NavToggleText);
 
      // add NavToggle-Button as first div-element 
      // in <div class="NavFrame">
      NavFrame.insertBefore( NavToggle, NavFrame.firstChild );
      NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
    }
  }
  // if more Navigation Bars found than Default: hide all
  if (NavigationBarShowDefault < indexNavigationBar) {
    for( var i=1; i<=indexNavigationBar; i++ ) {
      toggleNavigationBar(i);
    }
  }
}
 
addOnloadHook(createNavigationBarToggleButton);

/**
 * Compteur de consultation d'articles
 *
 * Please talk to User:LeonWeber before changing anything or 
 * if there are any issues with that.
 * this should be adjusted to a good value.
 * BE CAREFULL, you will break zedler if it's too low!
 * And then DaB. will kill Leon :-( 
 */

var disable_counter = 0;
var counter_factor = 900; 

function pgcounterSetup() {
  if(disable_counter == 0) {
    var url = window.location.href;
    if(Math.floor(Math.random()*counter_factor)==42) { // the probability thing
      if(wgIsArticle==true) { // do not count history pages etc.
        var pgcountNs = wgCanonicalNamespace;
        if(wgCanonicalNamespace=="") pgcountNs = "0";
        var cnt_url = "http://pgcount.wikimedia.de/index.png?ns=" + pgcountNs + "&title=" + encodeURI(wgTitle) + "&factor=" + counter_factor + "&wiki=frwiki";
        var img = new Image(); 
        img.src = cnt_url;
      }
    }
  }
}

addOnloadHook(pgcounterSetup);

/**
 * Réécriture des titres
 *
 * Fonction utilisée par [[Modèle:Titre incorrect]]
 * 
 * La fonction cherche un bandeau de la forme
 * <div id="RealTitleBanner">
 *   <span id="RealTitle">titre</span>
 * </div>
 *
 * Un élément comportant id="DisableRealTitle" désactive la fonction
 */
function rewritePageH1() {
  var realTitleBanner = document.getElementById('RealTitleBanner');
  if (realTitleBanner) {
    if (!document.getElementById('DisableRealTitle')) {
      var realTitle = document.getElementById('RealTitle');
      var h1 = document.getElementsByTagName('h1')[0];
      if (realTitle && h1) {
        var titleText = realTitle.innerHTML;
        if (titleText == '') h1.style.display = 'none';
        else h1.innerHTML = titleText;
        realTitleBanner.style.display = 'none';
      }
    }
  }
}

addOnloadHook(rewritePageH1);


/**
 * 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.getElementsByTagName("h1")[0];
  var icones = document.getElementsByTagName("div");
  var icones2 = new Array();
  var j = 0;
  for (var i = 0; i < icones.length; ++i) {
    if (icones[i].className == "icone de titre") {
      icones2[j++] = icones[i];
    }
  }
  for (; j > 0; --j) {
    icones2[j-1].style.display = "block"; /* annule display:none par défaut */
    icones2[j-1].style.borderWidth = "1px";
    icones2[j-1].style.borderStyle = "solid";
    icones2[j-1].style.borderColor = "white";
    h1.insertBefore(icones2[j-1], h1.firstChild); /* déplacement de l'élément */
  }
}

addOnloadHook(IconesDeTitre);

/**
 * Déplacement de coordonnées qui apparaissent en haut de la page 
 */
function moveCoord() {
  var h1 = document.getElementsByTagName("h1")[0];
  var coord = document.getElementById('coordinates');
  if ( !coord || !h1 ) return;
  coord.id = "coordinates-title";
  h1.insertBefore(coord, h1.firstChild);
}

addOnloadHook(moveCoord);

/**
 * Déplacement des [modifier]
 *
 * Correction des titres qui s'affichent mal en raison de limitations dues à MediaWiki.
 *
 * Copyright 2006, Marc Mongenet. Licence GPL et GFDL.
 *
 * The function looks for <span class="editsection">, and move them
 * at the end of their parent and display them inline in small font.
 * var oldEditsectionLinks=true disables the function.
 */
function setModifySectionStyle() {
  try {
    if (!(typeof oldEditsectionLinks == 'undefined' || oldEditsectionLinks == false)) return;
    var spans = document.getElementsByTagName("span");
    for (var s = 0; s < spans.length; ++s) {
      var span = spans[s];
      if (span.className == "editsection") {
        span.style.fontSize = "xx-small";
        span.style.fontWeight = "normal";
        span.style.cssFloat = span.style.styleFloat = "none";
        span.parentNode.appendChild(document.createTextNode(" "));
        span.parentNode.appendChild(span);
      }
    }
  } catch (e) { /* something went wrong */ }
}

addOnloadHook(setModifySectionStyle);

/**
 * Cache cadres de l'accueil
 *
 * Ajoute un lien sur la page d'accueil pour cacher facilement les cadres
 * Mémorisé par cookie.
 * Copyright 2007, fr:user:Plyd et fr:User:IAlex. Licence GFDL et GPL.
 */
var cookieCacheCadresName = "cacheCadresAccueil";
var CacheCadresVal = {};
var totalCadresAccueil = 0;

function affCadreAccueil(id) {
  visible = CacheCadresVal[id] = (!CacheCadresVal[id]);
  getElementsByClass('accueil_contenu',null,'div')[id].style.display = visible ? 'block' : 'none';
  document.getElementById('CacheCadreAccueil' + id).innerHTML = visible ? 'masquer' : 'afficher';
  sauverCookieAccueil();
}

function sauverCookieAccueil() {
  var date = new Date();
  date.setTime(date.getTime() + 30*86400*1000);
  var val = 0;
  for ( var i=0; i< totalCadresAccueil ; i++ ) {
    if (!CacheCadresVal[i]) val = val | Math.pow(2,i);
  }
  document.cookie = cookieCacheCadresName + "=" + val + "; expires="+date.toGMTString() + "; path=/";
}

function LiensCadresAccueil() {
  if (wgPageName != "Accueil") return;
  cookieCadresAccueil = getCookieVal(cookieCacheCadresName);
  for ( var i=0; i<5; i++) { 
    var titre = getElementsByClass('headergris',document,'h2')[i];
    if (!titre) break;
    titre.innerHTML += " <span style='font-size: xx-small; font-weight: normal; float: none; margin-right:100px' class='editsection'>[<a id='CacheCadreAccueil" + i + "' href='javascript:affCadreAccueil(" + i + ");'>masquer</a>]</span>";
    CacheCadresVal[i] = true;
    totalCadresAccueil++;
  }
  cookieCadresAccueil = getCookieVal(cookieCacheCadresName);
  for ( var i=0; i< totalCadresAccueil ; i++ ) {
    n =Math.pow(2,i);
    aff = !(cookieCadresAccueil & n);
    if (!aff) affCadreAccueil(i);
  }
}
addOnloadHook(LiensCadresAccueil);

/**
 * Déplace les liens portails vers la boite de catégorie
 * 
 * Copyright 2007, fr:user:Aoineko. Licence GFDL et GPL.
 */
var gUseMovePortalToCategoryBox = 1;

function movePortalToCategoryBox() {
   if(!gUseMovePortalToCategoryBox)
      return;

   // search for portails
   var div_portal = document.getElementById('portallinks');
   if(div_portal && (div_portal.className == 'movable')) {
      div_portal.style.display = 'none'; // hide the portail div
      var div_cat = document.getElementById('catlinks'); // get cat div
      if(!div_cat) { // no category box ? then create it
         var div_foot;
         var divs = document.getElementsByTagName('div');
         for(var i = 0; i < divs.length ; i++)
            if(divs[i].className == 'printfooter')
               div_foot = divs[i];
         div_cat = document.createElement("div");
         div_cat.setAttribute('id', 'catlinks');
         div_foot.parentNode.insertBefore(div_cat, div_foot); 
      }
      div_cat.innerHTML = div_portal.innerHTML + '<hr/>' + div_cat.innerHTML;
   }
}

addOnloadHook(movePortalToCategoryBox);


/*************************************/
/* Applications pour les rédacteurs  */
/*************************************/

/* todo : migrer celles qui ne sont pas vitales dans les gadgets */

/**
 * Fonctions de remplissage automatique
 */
function InitPaS(page_name) {
  return "<!-- Sauvegarder la page pour l'initialiser puis suivre les instructions -->\n" +
         "{{subst:Initialiser PàS|" + page_name + "|[[Utilisateur:Colinherve|Colinherve]] 19 mars 2011 à 18:26 (CET)|jour=19|mois=03}}\n" +
         "<!-- N'oubliez pas d'ajouter le lien vers cette page dans la page principale des Pages à supprimer -->";
}

function InitLANN(page_name) {
  return "<!-- Sauvegarder la page pour l'initialiser puis suivre les instructions -->\n" +
         "{{subst:Initialiser LANN|" + page_name + "|[[Utilisateur:Colinherve|Colinherve]] 19 mars 2011 à 18:26 (CET)}}\n" +
         "<!-- N'oubliez pas d'ajouter le lien vers cette page dans la page principale des articles non neutres -->";
}

function InitIaS(page_name) {
  return "<!-- Sauvegarder la page pour l'initialiser puis suivre les instructions -->\n" +
         "{{subst:Préchargement Image à Supprimer|" + page_name + "|[[Utilisateur:Colinherve|Colinherve]] 19 mars 2011 à 18:26 (CET)|jour=19|mois=03}}\n" +
         "<!-- N'oubliez pas d'ajouter le lien vers cette page dans la page principale des Images à supprimer -->";
}

function InitPAdQ(page_name) {
  return "<!-- Sauvegarder la page pour l'initialiser puis suivre les instructions -->\n\n" +
         "{{subst:Initialiser PAdQ|" + page_name + "|[[Utilisateur:Colinherve|Colinherve]] 19 mars 2011 à 18:26 (CET)|jour=19|mois=03}}";
}

function InitIaA(page_name) {
  return "<!-- Sauvegarder la page pour l'initialiser puis suivre les instructions -->\n" +
         "{{subst:Amélioration image}}";
}

function InitPCP(page_name) {
  return "<!-- Sauvegarder la page pour l'initialiser puis suivre les instructions -->\n" +
         "{{subst:Initialiser PCP|" + page_name + "|[[Utilisateur:Colinherve|Colinherve]] 19 mars 2011 à 18:26 (CET)}}\n" +
         "<!-- N'oubliez pas d'ajouter le lien vers cette page dans la page principale des\n" +
         "     articles soupçonnées de violation de copyright -->";
}

function InitArbReq(page_name) {
  return "<!-- Sauvegarder la page pour l'initialiser puis suivre les instructions -->\n" +
         "{{subst:Wikipédia:Comité d'arbitrage/Arbitrage/Modèle}}\n" +
         "<!-- N'oubliez pas d'ajouter un lien vers cette page sur [[Wikipédia:Comité d'arbitrage/Arbitrage]] -->";
}

function InitDiscArbReq(page_name) {
  return "<!-- Sauvegarder la page pour l'initialiser -->\n" +
         "{{subst:Discussion Wikipédia:Comité d'arbitrage/Arbitrage/Modèle}}";
}

function InitCdl(page_name) {
  return "<!-- Sauvegarder la page pour l'initialiser puis suivre les instructions -->\n" +
         "<!-- N'oubliez pas d'ajouter le lien vers cette page dans la page principale du comité de lecture -->\n\n" +
         "<noinclude>{{subst:Initialiser Comité de lecture2}}</noinclude>\n" +
         "{{subst:Initialiser Comité de lecture|" + page_name + "|[[Utilisateur:Colinherve|Colinherve]] 19 mars 2011 à 18:26 (CET)}}";
}

function InitProjetTraduction(page_name) {
  var mustSkip=wgPageName.indexOf('Projet:Traduction/*/');
  if (mustSkip == -1) {
    return "{{subst:Initialiser la page de traduction|Common.js|[[Utilisateur:Colinherve|Colinherve]] 19 mars 2011 à 18:26 (CET)|\n" +
           "<!--  À la création de la page, suivez les consignes ci-dessous pour proposer l'article.    \n" +
           "      ATTENTION : Veuillez ne rien effacer !                                             -->\n" +
           "1. Indiquez ci-dessous la langue de l'article à traduire (ex: en de es it pt...)\n" +
           "|en|\n" +
           "2. Indiquez ci-dessous le nom de l'article original (ex: Frankreich)\n" +
           "|Nom original ici| \n" +
           "3. Indiquez ci-dessous en une phrase l'intérêt de la traduction\n" +
           "|article très bien|\n" +
           "4. Ajoutez éventuellement un court commentaire \n" +
           "|commentaire très intéressant ici|\n" +
           "| 5. C'est fini, vous pouvez désormais sauvegarder cette page.\n" +
           "}}"; 
  } else {
    return "";
  }
}

function InitPBA(page_name) {
  return "<!-- Sauvegarder la page pour l'initialiser puis suivre les instructions -->\n\n" +
         "{{subst:Initialiser PBA|" + page_name + "|[[Utilisateur:Colinherve|Colinherve]] 19 mars 2011 à 18:26 (CET)|jour=19|mois=03}}";
}

function InitPL(page_name) {
  return "<!-- Remplir les paramètres mois et année à la sous page correspondante, et créer les liens rouges -->\n" +
         "{{Portail:Littérature/Invitation à la lecture/Sélection/Modèle \n" +
         "| mois = \n" +
         "| année = \n" +
         "}} \n" +
         "<noinclude>{{Portail:Littérature/Invitation à la lecture/Sélection/Modèle inclusion \n" +
         "| mois = \n" +
         "| année = \n" +
         "}} \n" +
         "</noinclude>";
}


var init_if_empty = new Array(
  new Array('Wikipédia:Pages_à_supprimer/', InitPaS),
  new Array('Wikipédia:Liste_des_articles_non_neutres/', InitLANN),
  new Array('Wikipédia:Images_à_supprimer/', InitIaS),
  new Array('Wikipédia:Proposition_articles_de_qualité/', InitPAdQ),
  new Array('Wikipédia:Pages_soupçonnées_de_violation_de_copyright/', InitPCP),
  new Array('Discussion_Wikipédia:Comité_d\'arbitrage/Arbitrage/', InitDiscArbReq),
  new Array('Wikipédia:Comité_d\'arbitrage/Arbitrage/', InitArbReq),
  new Array('Wikipédia:Comité_de_lecture/', InitCdl),
  new Array('Projet:Traduction/', InitProjetTraduction),
  new Array('Wikipédia:Proposition_bons_articles/', InitPBA),
  new Array('Portail:Littérature/Invitation_à_la_lecture/Sélection/', InitPL)
);

/**
 * Remplit la zone d'édition si elle est vide avec le texte retourné par
 * un pointeur de fonction sélectionné par le nom de la page.
 */
function InitPage() {
  // Tester si editform et wpTextbox1 existe sinon il y a une erreur lorsqu'on
  // ouvre l'historique d'une page qui match un des noms de init_if_empty[],
  // tester seulement le nom de la page n'est pas suffisant.
  if (document.editform == undefined || document.editform.wpTextbox1 == undefined) return;
  var text_area = document.editform.wpTextbox1;
  if (text_area.value.length != 0) return;
  for (var i = 0; i < init_if_empty.length; ++i) {
    var page_match = init_if_empty[i][0];
    var index = wgPageName.indexOf(page_match);
    if (index != -1) {
      page_name = wgPageName.slice(page_match.length);
      page_name = page_name.replace(/_/g, ' ');
      text_area.value = init_if_empty[i][1](page_name);
      break;
    }
  }
}

addOnloadHook(InitPage);

/**
 * Caractères spéciaux
 *
 * 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
 * Les caractères spéciaux sont définis dans Mediawiki:Edittools
 */
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]);

  /* default subset - try to use a cookie some day */
  chooseCharSubset(0);
}

/**
 * Affichage du jeu de caractères sélectionné
 */
function chooseCharSubset(index) {
  var p = document.getElementById('specialcharsets').getElementsByTagName('p');
  for (var i = 0; i < p.length ; i++) {
    // Initialisation du jeu de caractères sélectionné
    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é
 * Paramètre : paragraphe contenant le jeu à initialiser. Initialise tous les
 * caractères contenus dans les sous-spans du paragraphe
 */
function initializeCharSubset(p) {
  // recherche des sous-elements de type span à traiter
  var spans = p.getElementsByTagName("span");
  if (!spans) return;

  // regexp pour echapper les caractères JS spéciaux : \ et '
  var re = new RegExp("(\\\\|')", "g");
  // gestion du caractère d'échappement '\'
  var escapeRe = new RegExp("[^\\\\](\\\\\\\\)*\\\\$", "g");
  var unescapeRe = new RegExp("\\\\\\\\", "g");

  // traitement des spans du paragraphe
  for (var j = 0; j < spans.length; j++) {
    // span deja traité
    if (spans[j].childNodes.length == 0 || spans[j].childNodes[0].nodeType != 3) continue;

    // 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)) {
      	k++;
	tags = tags.substr(0, tags.length - 1) + " " + chars[k];
      }

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

      a.appendChild(document.createTextNode((tagBegin + tagEnd).replace(unescapeRe, "\\")));
      spans[j].appendChild(a);
      spans[j].appendChild(document.createTextNode(" "));
    }
    // suppression de l'ancien contenu
    spans[j].removeChild(spans[j].firstChild);
  }
}

addOnloadHook(addCharSubsetMenu);

/**
 * Permet d'ajouter d'un jeu de caractères spéciaux dans le menu déroulant
 * 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) {
  var specialchars = document.getElementById('specialcharsets');
  if (!specialchars) return;

  // Ajout des caractères spéciaux. Les liens seront initialisé par initializeCharSubset()
  // lors de la sélection
  var specialcharsets = document.getElementById('specialcharsets');
  var p = document.createElement("p");
  p.style.display = "none";
  p.title = title;
  p.innerHTML = charsHTML;
  specialcharsets.appendChild(p);
}

/**
 * Permet d'ajouter d'un jeu de caractères spéciaux dans le menu déroulant
 * 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>");
}

/**
 * Générateur de tableaux
 * English: Generate an array using Mediawiki syntax
 *
 * @author: fr:user:dake
 * @version: 0.2
 */

function generateTableau(nbCol, nbRow, styleHeader, styleLine) {
  var code = "\n{| " +
    ((styleHeader==1) ? 'class="wikitable"' : '')+
    '\n|+ Titre du tableau\n';
     
  for (var i=0; i<nbCol; i++) code += '! en-tête ' + i + '\n';
     
  for (var j=0; j<nbRow; j++) {
    if ((j+1)%2==0 && styleLine==1) {
      code += '|-{'+'{ligne grise}'+'}\n';
    } else {             
      code += '|-----\n';
    }
           
    for (var i=0; i<nbCol; i++) code += '| élément\n';
  }
     
  code += '|}';
  insertTags('','', code);
}

/**
 * English: Open a popup with parameters to generate an array. 
 * The number of rows/columns can be modified. Some additional
 * parameters are related to templates available on :fr
 *
 * @author: fr:user:dake
 * @version: 0.1
 */

function popupTableau() {
  var popup = window.open('','name','height=400,width=500');
  
  javaCode =  '<script type="text\/javascript">function insertCode(){';
  javaCode += 'var row = parseInt(document.paramForm.inputRow.value); ';
  javaCode += 'var col = parseInt(document.paramForm.inputCol.value); ';
  javaCode += 'var styleHeader = document.paramForm.inputHeader.checked; ';
  javaCode += 'var styleLine = document.paramForm.inputLine.checked; ';
  javaCode += 'window.opener.generateTableau(col,row,styleHeader,styleLine); ';
  javaCode += '}<\/script>';
  
  popup.document.write('<html><head><title>Paramètres du tableau</title>');
  popup.document.write('<script type="text\/javascript" src="\/skins-1.5\/common\/wikibits.js"><!-- wikibits js --><\/script>');
  popup.document.write('<style type="text\/css" media="screen">/*<![CDATA[*/ @import "\/skins-1.5\/monobook\/main.css?5"; /*]]>*/<\/style>');
  popup.document.write(javaCode); 
  popup.document.write('</head><body>');
  popup.document.write('<p>Veuillez entrer les paramètres du tableau : </p>');
  popup.document.write('<form name="paramForm">');
  popup.document.write('Nombre de lignes : <input type="text" name="inputRow" value="3" ><p>');
  popup.document.write('Nombre de colonnes : <input type="text" name="inputCol" value="3" ><p>');
  popup.document.write('Mise en forme (wikitable) : <input type="checkbox" name="inputHeader" checked="1" ><p>');
  popup.document.write('Lignes grises alternées : <input type="checkbox" name="inputLine" checked="0" ><p>');
  popup.document.write('</form">');
  popup.document.write('<p><a href="javascript:insertCode()"> Insérer le code dans la fenêtre d\'édition</a></p>');
  popup.document.write('<p><a href="javascript:self.close()"> Fermer</a></p>');
  popup.document.write('</body></html>');
  popup.document.close();
}
/**
 * Insertion de nouveaux boutons dans la barre d'outil
 */

function addCustomButton(imageFile, speedTip, tagOpen, tagClose, sampleText, imageId) {
  mwCustomEditButtons[mwCustomEditButtons.length] =
    {"imageId": imageId,
     "imageFile": imageFile,
     "speedTip": speedTip,
     "tagOpen": tagOpen,
     "tagClose": tagClose,
     "sampleText": sampleText};
}

addCustomButton('http://upload.wikimedia.org/wikipedia/commons/0/04/Button_array.png',
                'Tableau',
                '{|\n|-\n|\n|\n|}',
                '',
                '',
                'mw-editbutton-array');

addCustomButton('http://upload.wikimedia.org/wikipedia/commons/c/c9/Button_strike.png',
                'Rayer',
                '<s>',
                '</s>',
                '',
                'mw-editbutton-strike');

addCustomButton('http://upload.wikimedia.org/wikipedia/commons/8/88/Btn_toolbar_enum.png',
                'Énumération',
                '\n# élément 1\n# élément 2\n# élément 3',
                '',
                '',
                'mw-editbutton-enum');

addCustomButton('http://upload.wikimedia.org/wikipedia/commons/1/11/Btn_toolbar_liste.png',
                'Liste',
                '\n* élément A\n* élément B\n* élément C',
                '',
                '',
                'mw-editbutton-liste');

addCustomButton('http://upload.wikimedia.org/wikipedia/commons/9/9e/Btn_toolbar_gallery.png',
                'Galerie d\'images',
                '\n<!--Consultez l Anti-sèche pour les options de la galerie-->\n<center>\n<gallery caption="Donner un titre à votre galerie">\nImage:Exemple.jpg|légende\nImage:Exemple1.jpg|légende\nImage:Exemple2.jpg|légende\n</gallery>\n</center>',
                '',
                '',
                'mw-editbutton-gallery');

addCustomButton('http://upload.wikimedia.org/wikipedia/commons/3/37/Btn_toolbar_commentaire.png',
                'Commentaire',
                '<!--',
                '-->',
                '',
                'mw-editbutton-comment');

addCustomButton('http://upload.wikimedia.org/wikipedia/commons/4/47/Button_redir.png',
                'Redirection',
                '#REDIRECT [[',
                ']]',
                'nom de la destination',
                'mw-editbutton-redir');

addCustomButton('http://upload.wikimedia.org/wikipedia/commons/b/b4/Button_category03.png',
                'Catégorie',
                '[[Catégorie:',
                ']]',
                'nom de la catégorie',
                'mw-editbutton-category');

addCustomButton('http://upload.wikimedia.org/wikipedia/commons/3/3b/Button_template_alt.png',
                'Modèle',
                '{{',
                '}}',
                'modèle ou page à inclure',
                'mw-editbutton-template');

addCustomButton('http://upload.wikimedia.org/wikipedia/commons/c/c4/Button_ref.png',
                'Référence',
                '<ref>',
                '</ref>',
                'référence, citation ou lien',
                'mw-editbutton-ref');

addCustomButton('http://upload.wikimedia.org/wikipedia/commons/6/64/Buttonrefvs8.png',
                'Index des références',
                '== Notes et références ==\n<references />',
                '',
                '',
                'mw-editbutton-references');

var voirAussi = '<!-- Suggestion de présentation des annexes. Aide : http://fr.wikipedia.org/wiki/Aide:Note -->\n'
 + '== Annexes ==\n'
 + '=== Notes et références ===\n'
 + '<references/>\n'
 + '=== Articles connexes ===\n'
 + '* [[À remplacer]]\n'
 + '*\n'
 + '=== Liens et documents externes ===\n'
 + '*\n';
addCustomButton('http://upload.wikimedia.org/wikipedia/commons/b/bb/Seealso.png',
                'Section Voir aussi',
                voirAussi,
                '',
                '',
                'mw-editbutton-voiraussi');


/**
 * Changer le lien du bouton de création de tableau et supprime le bouton signature sur les articles
 */
function changButtons() {
  toolbarArray = document.getElementById('mw-editbutton-array');
  if (toolbarArray) {
    toolbarArray.onclick = function() {
      popupTableau();
      return false;
    }
  }

  var btnSigImg = document.getElementById('mw-editbutton-signature');
  if (btnSigImg && wgNamespaceNumber == 0) btnSigImg.style.display = "none";
}
addOnloadHook(changButtons);


/**
 * Désactiver le bouton Sauvegarder à la première édition
 * English : Force IP to preview before saving changes.
 * Copyright Marc Mongenet, 2006
 * Plyd 05/2007: add "after preview" in the button to prevent misunderstanding from beginners
 */
function forcePreview() {
  if (wgUserName != null || wgAction != "edit") return;
  saveButton = document.getElementById("wpSave");
  if (!saveButton) return;
  saveButton.disabled = true;
  saveButton.value = "Sauvegarder (après prévisualisation)";
  saveButton.style.fontWeight = "normal";
  document.getElementById("wpPreview").style.fontWeight = "bold";
}

addOnloadHook(forcePreview);


// 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()
{
 var cl = document.getElementById('catlinks');           if(!cl) return;
 var hc = document.getElementById('mw-hidden-catlinks'); if(!hc) return;
 var nc = document.getElementById('mw-normal-catlinks'); if(!nc) return;
 if( isClass(hc, 'mw-hidden-cats-hidden') )
 {
  var ahc = ' | <a onclick="javascript:toggleHiddenCats();" id="mw-hidden-cats-link" style="cursor:pointer; color:black;" title="Cet article contient des catégories cachées">[+]</a>';
  document.getElementById('mw-normal-catlinks').innerHTML += ahc;
 }
}
function toggleHiddenCats()
{
 var hc = document.getElementById('mw-hidden-catlinks');
 if( isClass(hc, 'mw-hidden-cats-hidden') )
 {
  removeClass(hc, 'mw-hidden-cats-hidden');
  addClass(hc, 'mw-hidden-cat-user-shown');
  document.getElementById('mw-hidden-cats-link').innerHTML = '[–]';
 }
 else
 {
  removeClass(hc, 'mw-hidden-cat-user-shown');
  addClass(hc, 'mw-hidden-cats-hidden');
  document.getElementById('mw-hidden-cats-link').innerHTML = '[+]';
 }
}

addOnloadHook(hiddencat);

//</nowiki>