MediaWiki:Common.js : Différence entre versions

De Les Mots de l'agronomie
imported>Jacques Ducloy
m (1 version)
imported>Jacques Ducloy
 
Ligne 1 : Ligne 1 :
 +
 +
 +
/* jshint scripturl:true, laxbreak:true, loopfunc:true */
 +
/* global mw, $, importScript */
 
/**
 
/**
 
  * N'importe quel JavaScript ici sera chargé pour n'importe quel utilisateur et pour chaque page accédée.
 
  * N'importe quel JavaScript ici sera chargé pour n'importe quel utilisateur et pour chaque page accédée.
  *  
+
  *
 
  * ATTENTION : Avant de modifier cette page, veuillez tester vos changements avec votre propre
 
  * ATTENTION : Avant de modifier cette page, veuillez tester vos changements avec votre propre
  * monobook.js. Une erreur sur cette page peut faire bugger le site entier (et gêner l'ensemble des
+
  * 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 !
 
  * visiteurs), même plusieurs heures après la modification !
  *  
+
  *
 
  * Prière de ranger les nouvelles fonctions dans les sections adaptées :
 
  * Prière de ranger les nouvelles fonctions dans les sections adaptées :
 
  * - Fonctions JavaScript
 
  * - Fonctions JavaScript
Ligne 12 : Ligne 16 :
 
  * - Applications qui peuvent être utilisées sur toute page
 
  * - Applications qui peuvent être utilisées sur toute page
 
  * - Applications spécifiques à un espace de nom ou une page
 
  * - Applications spécifiques à un espace de nom ou une page
  *  
+
  *
 
  * <nowiki> /!\ Ne pas retirer cette balise
 
  * <nowiki> /!\ Ne pas retirer cette balise
 
  */
 
  */
  
 
 
/*************************************************************/
 
/* 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;
 
}
 
 
// 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 (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;
 
}
 
  
 
/**********************************************************************************************************/
 
/**********************************************************************************************************/
 
/* Fonctions générales MediaWiki (pallient les limitations du logiciel)                                  */
 
/* 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 */
+
/* Surveiller : https://git.wikimedia.org/history/mediawiki%2Fcore.git/HEAD/skins%2Fcommon%2Fwikibits.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
 
* DÉPRÉCIÉ : utiliser importScript qui fait partie du logiciel
 
*/
 
function loadJs(page) {
 
  importScript(page);
 
}
 
  
 
/**
 
/**
 
  * Projet JavaScript
 
  * Projet JavaScript
 
  */
 
  */
function obtenir(name) {
+
window.obtenir = function ( name ) {
  importScript('MediaWiki:Gadget-' + name + '.js');
+
if ( mw.loader.getState( 'ext.gadget.' + name ) !== null ) {
}
+
mw.loader.load( 'ext.gadget.' + name );
 +
} else {
 +
importScript( 'MediaWiki:Gadget-' + name + '.js' );
 +
}
 +
};
  
 
/**
 
/**
 
  * Transformer les pages du Bistro, du BA et les pages spécifiées en page de discussion
 
  * Transformer les pages du Bistro, du BA et les pages spécifiées en page de discussion
 
  */
 
  */
function TransformeEnDiscussion() {
+
if ( mw.config.get( 'wgNamespaceNumber' ) >= 2 ) {
  if( (wgPageName.search('Wikipédia:Le_Bistro') != -1)
+
$( function ( $ ) {
    || (wgPageName.search('Wikipédia:Bulletin_des_administrateurs') != -1)
+
if (
    || document.getElementById('transformeEnPageDeDiscussion'))
+
/^Wikipédia:(Le_Bistro|Bulletin_des_administrateurs|Questions_techniques)/.test( mw.config.get( 'wgPageName' ) ) ||
    document.body.className = 'ns-talk';
+
$( '#transformeEnPageDeDiscussion' ).length
}
+
) {
addOnloadHook(TransformeEnDiscussion);
+
$( 'body' ).removeClass( 'ns-subject' ).addClass( 'ns-talk' );
 
+
}
/**
+
} );
* 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);
 
 
 
/**
 
* Ajouter un bouton à la fin de la barre d'outils
 
*/
 
function addCustomButton(imageFile, speedTip, tagOpen, tagClose, sampleText, imageId) {
 
  mwCustomEditButtons[mwCustomEditButtons.length] =
 
    {"imageId": imageId,
 
    "imageFile": imageFile,
 
    "speedTip": speedTip,
 
    "tagOpen": tagOpen,
 
    "tagClose": tagClose,
 
    "sampleText": sampleText};
 
 
}
 
}
 
  
  
Ligne 206 : Ligne 58 :
 
/**
 
/**
 
  * Tout ce qui concerne la page d'édition
 
  * Tout ce qui concerne la page d'édition
* Voir MediaWiki:Common.js/edit.js pour ces fonctions
 
 
  */
 
  */
if( wgAction == 'edit' || wgAction == 'submit' ) {
+
if ( [ 'edit', 'submit' ].indexOf( mw.config.get( 'wgAction' ) ) !== -1 ) {
  importScript( 'MediaWiki:Common.js/edit.js' );
+
 
}
+
// chargement de [[MediaWiki:Gadget-CommonEdit.js]]
 +
mw.loader.load( 'ext.gadget.CommonEdit' );
 +
 
 +
// pour que les fonctions soient définies dès maintenant,
 +
// mais l'exécution réelle ne se fait qu'une fois le module chargé
 +
window.addSpecialCharset = function ( title, chars ) {
 +
mw.loader.using( 'ext.gadget.CommonEdit', function () {
 +
window.realAddSpecialCharset( title, chars );
 +
} );
 +
};
 +
window.addSpecialCharsetHTML = function ( title, charsHTML ) {
 +
mw.loader.using( 'ext.gadget.CommonEdit', function () {
 +
window.realAddSpecialCharsetHTML( title, charsHTML );
 +
} );
 +
};
 +
 
 +
// fonction pour ajouter un bouton à la fin de la barre d'outils
 +
// permet d'utiliser [[MediaWiki:Gadget-MonobookToolbar.js]] sans se préoccuper de son chargement
 +
window.addCustomButton = ( function () {
 +
var promise;
 +
 
 +
return function () {
 +
var buttonArguments = [].slice.call( arguments );
 +
 
 +
if ( !promise ) {
 +
promise = mw.loader.using( 'ext.gadget.MonobookToolbar' );
 +
}
 +
 
 +
promise.done( function () {
 +
MonobookToolbar.addButton.apply( MonobookToolbar, buttonArguments );
 +
} );
 +
};
 +
} )();
  
/**
+
} else {
* Liens d'accès directs pour la navigation au clavier
+
// pour que les fonctions soient toujours définies,
*/
+
// afin d'éviter aux scripts utilisateur de planter
function showSkipLinks() {
+
window.addSpecialCharset = function () {};
  var jump_to_nav = document.getElementById('jump-to-nav');
+
window.addSpecialCharsetHTML = function () {};
  if( !jump_to_nav ) return;
+
window.addCustomButton = function () {};
  var skip_links = jump_to_nav.getElementsByTagName('A')[0];
 
  jump_to_nav.className='hidden';
 
  skip_links.onfocus=function() {
 
    jump_to_nav.className='';
 
  }
 
 
}
 
}
addOnloadHook(showSkipLinks);
 
  
 
/**
 
/**
Ligne 230 : Ligne 107 :
 
  *
 
  *
 
  * Fonction utilisée par [[Modèle:Titre incorrect]]
 
  * Fonction utilisée par [[Modèle:Titre incorrect]]
  *  
+
  *
 
  * La fonction cherche un bandeau de la forme
 
  * La fonction cherche un bandeau de la forme
 
  * <div id="RealTitleBanner">
 
  * <div id="RealTitleBanner">
Ligne 238 : Ligne 115 :
 
  * Un élément comportant id="DisableRealTitle" désactive la fonction
 
  * Un élément comportant id="DisableRealTitle" désactive la fonction
 
  */
 
  */
function rewritePageH1() {
+
function rewritePageTitle( $ ) {
  var realTitleBanner = document.getElementById('RealTitleBanner');
+
var $realTitle, titleHtml, $h1,
  if (realTitleBanner) {
+
$realTitleBanner = $( '#RealTitleBanner' );
    if (!document.getElementById('DisableRealTitle')) {
+
if ( $realTitleBanner.length && !$( '#DisableRealTitle' ).length ) {
      var realTitle = document.getElementById('RealTitle');
+
$realTitle = $( '#RealTitle' );
      var h1 = document.getElementsByTagName('h1')[0];
+
$h1 = $( 'h1:first' );
      var realH1 = getTextContent(h1);   
+
if ( $realTitle.length && $h1.length ) {
      if (realTitle && h1) {
+
titleHtml = $realTitle.html();
        var titleText = realTitle.innerHTML;
+
if ( titleHtml === '' ) {
        if (titleText == '') h1.style.display = 'none';
+
$h1.hide();
        else h1.innerHTML = titleText;
+
} else {
        realTitleBanner.style.display = 'none';
+
$h1.html( titleHtml );
        if(wgNamespaceNumber==0) {
+
if ( mw.config.get( 'wgAction' ) === 'view' ) {
          var avert = document.createElement('p')
+
// using a callback for replacement, to prevent interpreting "$" characters that realTitle might contain
          avert.style.fontSize = '90%';
+
document.title = document.title.replace( /^.+( [—–-] Wikipédia)$/, function ( match, p1 ) {
          avert.innerHTML = 'Titre à utiliser pour créer un lien interne: <b>'+realH1+'</b>';
+
return $realTitle.text() + p1;
          insertAfter(document.getElementById('content'),avert,h1);
+
} );
        }
+
}
 
+
}
      }
+
$realTitleBanner.hide();
    }
+
$( '<p>' ).css( 'font-size', '80%' )
  }
+
.append( 'Titre à utiliser pour créer un lien interne : ', $( '<b>' ).text( mw.config.get( 'wgPageName' ).replace( /_/g, ' ' ) ) )
}
+
.insertAfter( $h1 );
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 = 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 */
 
    icones[j-1].style.borderWidth = "1px";
 
    icones[j-1].style.borderStyle = "solid";
 
    icones[j-1].style.borderColor = "white";
 
    if( skin == "modern" ){
 
      icones[j-1].style.marginTop = "0em";
 
    }
 
    h1.parentNode.insertBefore(icones[j-1], h1); /* déplacement de l'élément */
 
  }
 
 
}
 
}
addOnloadHook(IconesDeTitre);
+
$( rewritePageTitle );
  
/**
 
* 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.parentNode.insertBefore(coord, h1); /* déplacement de l'élément */
 
}
 
addOnloadHook(moveCoord);
 
  
 
/**
 
/**
  * Déplacement des [modifier]
+
  * Ajout d'un sous-titre
*
 
* Correction des titres qui s'affichent mal en raison de limitations dues à MediaWiki.
 
* Ce script devrait pouvoir être supprimé lorsque le [[bugzilla:11555]] sera résolu (comportement équivalent)
 
 
  *
 
  *
  * Copyright 2006, Marc Mongenet. Licence GPL et GFDL.
+
  * Fonction utilisée par [[Modèle:Sous-titre]]
 
  *
 
  *
  * The function looks for <span class="editsection">, and move them
+
  * La fonction cherche un élément de la forme
* at the end of their parent and display them inline in small font.
+
* <span id="sous_titre_h1">Sous-titre</span>
* var oldEditsectionLinks=true disables the function.
 
 
  */
 
  */
function setModifySectionStyle()
+
 
{
+
function sousTitreH1( $content ) {
+
$( '#firstHeading > #sous_titre_h1' ).remove();
        var process = function(list)
+
var $span = $content.find( '#sous_titre_h1' );
        {
+
if ( $span.length ) {
                for(var i=0;i!=list.length;i++)
+
$span.prepend( ' ' );
                {
+
$( '#firstHeading' ).append( $span );
                        var span=list[i].firstChild
+
}
 
                        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);
 
                        }
 
                }
 
        }
 
 
        try
 
        {
 
                if (!(typeof oldEditsectionLinks == 'undefined' || oldEditsectionLinks == false)) return;
 
                process(document.getElementsByTagName("h2"));
 
                process(document.getElementsByTagName("h3"));
 
                process(document.getElementsByTagName("h4"));
 
                process(document.getElementsByTagName("h5"));
 
                process(document.getElementsByTagName("h6"));
 
 
        }
 
        catch (e) { }
 
 
}
 
}
addOnloadHook(setModifySectionStyle);
+
mw.hook( 'wikipage.content' ).add( sousTitreH1 );
 +
 
  
/**  
+
/**
 
  * Boîtes déroulantes
 
  * Boîtes déroulantes
 
  *
 
  *
 
  * Pour [[Modèle:Méta palette de navigation]]
 
  * Pour [[Modèle:Méta palette de navigation]]
 
  */
 
  */
var autoCollapse = 2;
 
var collapseCaption = '[Enrouler]';
 
var expandCaption = '[Dérouler]';
 
  
function collapseTable( tableIndex ) {
+
var Palette_Derouler = '[afficher]';
  var Button = document.getElementById( "collapseButton" + tableIndex );
+
var Palette_Enrouler = '[masquer]';
  var Table = document.getElementById( "collapsibleTable" + tableIndex );
 
  if ( !Table || !Button ) return false;
 
  
  var Rows = Table.getElementsByTagName( "tr" );  
+
var Palette_max = 1;
  
  if ( Button.firstChild.data == collapseCaption ) {
+
function Palette_toggle( $table ) {
    for ( var i = 1; i < Rows.length; i++ ) {
+
$table.find( 'tr:not(:first)' ).toggleClass( 'navboxHidden' );
      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() {
+
function Palette( $content ) {
  var tableIndex = 0;
 
  var NavigationBoxes = new Object();
 
  var Tables = document.getElementsByTagName( "table" );
 
  
  for ( var i = 0; i < Tables.length; i++ ) {
+
var $tables = $content.find( 'table.collapsible' );
    if ( hasClass( Tables[i], "collapsible" ) ) {
+
var groups = {};
      NavigationBoxes[ tableIndex ] = Tables[i];
 
      Tables[i].setAttribute( "id", "collapsibleTable" + tableIndex );
 
  
      var Button    = document.createElement( "span" );
+
$tables.each( function( _, table ) {
      var ButtonLink = document.createElement( "a" );
+
var group = table.dataset.autocollapseGroup || '__default__';
      var ButtonText = document.createTextNode( collapseCaption );
+
groups[group] = ( groups[group] || 0 ) + 1;
 +
} );
  
      Button.style.styleFloat = "right";
+
$tables.each( function( _, table ) {
      Button.style.cssFloat = "right";
+
var $table = $( table );
      Button.style.fontWeight = "normal";
 
      Button.style.textAlign = "right";
 
      Button.style.width = "6em";
 
  
      ButtonLink.setAttribute( "id", "collapseButton" + tableIndex );
+
var group = table.dataset.autocollapseGroup || '__default__';
      ButtonLink.setAttribute( "href", "javascript:collapseTable(" + tableIndex + ");" );
+
var autoCollapse = groups[group] > Palette_max;
      ButtonLink.appendChild( ButtonText );
+
var collapsed = $table.hasClass( 'collapsed' ) || ( autoCollapse && $table.hasClass( 'autocollapse' ) );
  
      Button.appendChild( ButtonLink );
+
// le modèle dispose d'une classe "navbox-title",
 +
// sauf que les palettes "inlinées" (e.g. « {| class="navbox collapsible collapsed" ») n'ont pas cette classe
 +
$table.find( 'tr:first th:first' ).prepend(
 +
$( '<span class="navboxToggle">\u00a0</span>' ).append(
 +
$( '<a href="javascript:">' + (collapsed ? Palette_Derouler : Palette_Enrouler) + '</a>' ).click( function ( e ) {
 +
e.preventDefault();
 +
if ( this.textContent === Palette_Enrouler ) {
 +
this.textContent = Palette_Derouler;
 +
} else {
 +
this.textContent = Palette_Enrouler;
 +
}
 +
Palette_toggle( $table );
 +
} )
 +
)
 +
);
 +
if ( collapsed ) {
 +
Palette_toggle( $table );
 +
}
 +
} );
  
      var Header = Tables[i].getElementsByTagName( "tr" )[0].getElementsByTagName( "th" )[0];
+
// permet de dérouler/enrouler les palettes en cliquant n'importe où sur l'entête
      /* only add button and increment count if there is a header row to work with */
+
// (utilisation de la classe "navbox-title", comme ça seules les vraies palettes utilisant le modèle sont ciblées)
      if (Header) {
+
$content.find( '.navbox-title' )
        Header.insertBefore( Button, Header.childNodes[0] );
+
.click( function ( e ) {
        tableIndex++;
+
if ( $( e.target ).closest( 'a' ).length ) {
      }
+
return;
    }
+
}
  }
+
$( this ).find( '.navboxToggle a' ).click();
 +
} )
 +
.css( 'cursor', 'pointer' );
 +
}
 +
mw.hook( 'wikipage.content' ).add( Palette );
  
  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]]  
+
  * Pour [[Modèle:Boîte déroulante]]
 
  */
 
  */
var NavigationBarShowDefault = 0;
+
 
+
var BoiteDeroulante_Derouler = '[afficher]';
function toggleNavigationBar(indexNavigationBar) {
+
var BoiteDeroulante_Enrouler = '[masquer]';
  var NavToggle = document.getElementById("NavToggle" + indexNavigationBar);
+
 
  var NavFrame = document.getElementById("NavFrame" + indexNavigationBar);
+
function BoiteDeroulante_toggle(NavToggle){
+
var NavFrame = NavToggle.parentNode;
  if (!NavFrame || !NavToggle) return;
+
 
+
var caption = [];
  // surcharge des libellés dérouler/enrouler grâce a l'attribut title
+
caption[0] = NavFrame.dataset.boiteDeroulanteDerouler;
  // exemple : title="[déroulade]/[enroulade]"
+
caption[1] = NavFrame.dataset.boiteDeroulanteEnrouler;
  var caption = [expandCaption, collapseCaption];
+
 
  if (NavFrame.title && NavFrame.title.length > 0) {
+
var $NavContent = $(NavFrame).find('.NavContent').first();
    caption = NavFrame.title.split("/");
+
 
    if (caption.length < 2) caption.push(collapseCaption);
+
if ( NavToggle.textContent === caption[1] ) {
  }
+
NavToggle.textContent = caption[0];
+
$NavContent.hide();
  // if shown now
+
} else {
  if (NavToggle.firstChild.data == caption[1]) {
+
NavToggle.textContent = caption[1];
    for ( var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {
+
$NavContent.show();
      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);
+
function BoiteDeroulante( $content ) {
      NavToggle.appendChild(NavToggleText);
+
 
+
$content.find( '.NavFrame' ).each( function ( _, NavFrame ) {
      // add NavToggle-Button as first div-element
+
var CustomTexts, Derouler, Enrouler, NavToggle;
      // in <div class="NavFrame">
+
 
      NavFrame.insertBefore( NavToggle, NavFrame.firstChild );
+
if (NavFrame.title && NavFrame.title.indexOf("/") !== -1) {
      NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
+
CustomTexts = NavFrame.title.split("/");
    }
+
Derouler = CustomTexts[0];
  }
+
Enrouler = CustomTexts[1];
  // if more Navigation Bars found than Default: hide all
+
} else {
  if (NavigationBarShowDefault < indexNavigationBar) {
+
Derouler = BoiteDeroulante_Derouler;
    for( var i=1; i<=indexNavigationBar; i++ ) {
+
Enrouler = BoiteDeroulante_Enrouler;
      toggleNavigationBar(i);
+
}
    }
+
NavFrame.title = '';
  }
+
NavFrame.dataset.boiteDeroulanteDerouler = Derouler;
}
+
NavFrame.dataset.boiteDeroulanteEnrouler = Enrouler;
addOnloadHook(createNavigationBarToggleButton);
 
  
/**
+
NavToggle = document.createElement("a");
* WikiMiniAtlas
+
NavToggle.className = 'NavToggle';
*
+
NavToggle.href = 'javascript:';
* voir WP:WMA
+
NavToggle.onclick = function (e) {
*/
+
e.preventDefault();
if (wgServer == "https://secure.wikimedia.org") {
+
BoiteDeroulante_toggle(e.target);
  var metaBase = "https://secure.wikimedia.org/wikipedia/meta";
+
};
} else {
+
NavToggle.textContent = Enrouler;
  var metaBase = "http://meta.wikimedia.org";
 
}
 
importScriptURI(metaBase+"/w/index.php?title=MediaWiki:Wikiminiatlas.js&action=raw&ctype=text/javascript&smaxage=21600&maxage=86400")
 
  
var wma_settings = {
+
NavFrame.insertBefore(NavToggle, NavFrame.firstChild);
  buttonImage: 'http://upload.wikimedia.org/wikipedia/commons/thumb/e/e9/Geographylogo.svg/18px-Geographylogo.svg.png'
 
}
 
  
/**
+
BoiteDeroulante_toggle(NavToggle);
* Affiche un modèle Information sur la page de téléchargement de fichiers [[Spécial:Téléchargement]]
+
} );
* Voir aussi [[MediaWiki:Onlyifuploading.js]]
 
*/
 
  
function includePage(name) {
+
// permet de dérouler/enrouler les boîtes en cliquant n'importe où sur l'entête
    document.write('<script type="text/javascript" src="' + wgScript + '?title='
+
$content.find( '.NavHead' )
        + name + '&action=raw&ctype=text/javascript&dontcountme=s"><\/script>');   // smaxage=3600
+
.click( function ( e ) {
 +
if ( $( e.target ).closest( 'a' ).length ) {
 +
return;
 +
}
 +
var toggle = $( this ).siblings( 'a.NavToggle' )[0];
 +
if ( toggle ) {
 +
toggle.click(); // pas du jquery, mais du vanilla js
 +
}
 +
} )
 +
.css( 'cursor', 'pointer' );
 
}
 
}
  
if (wgCanonicalSpecialPageName == "Upload") {
+
mw.hook( 'wikipage.content' ).add( BoiteDeroulante );
    includePage("MediaWiki:Onlyifuploading.js");
+
 
}
 
 
  
 
/**
 
/**
  * Utilisation du modèle Modèle:Images
+
  * Fonctionnement du [[Modèle:Animation]]
 +
* Le JavaScript principal se situe dans [[MediaWiki:Gadget-Diaporama.js]]
 
  */
 
  */
function toggleImage(group, remindex, shwindex) {
+
mw.hook( 'wikipage.content' ).add( function ( $content ) {
  document.getElementById("ImageGroupsGr"+group+"Im"+remindex).style.display="none";
+
if ( $content.find( '.diaporama' ).length ) {
  document.getElementById("ImageGroupsGr"+group+"Im"+shwindex).style.display="inline";
+
mw.loader.using( 'ext.gadget.Diaporama', function () {
}
+
Diaporama_Init( $content );
 +
} );
 +
}
 +
} );
  
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
+
  * Permet d'afficher les catégories cachées pour les contributeurs enregistrés, en ajoutant un (+) à la manière des boîtes déroulantes
* un article de qualité
 
 
  */
 
  */
function lienAdQouBAouPdQ() {
+
function hiddencat( $ ) {
  // links are only replaced in p-lang
+
if (mw.util.getParamValue('printable') === 'yes') {
  if(window.disableFeaturedInterwikiLinks!=undefined) return
+
return;
  var pLang = document.getElementById("p-lang");
+
}
  if (!pLang) return;
+
var cl = document.getElementById('catlinks');
  var lis = pLang.getElementsByTagName("li");
+
if (!cl) {
  var l = lis.length
+
return;
 
+
}
  if(wgNamespaceNumber==0)
+
var $hc = $('#mw-hidden-catlinks');
for (var i=0; i<l; i++)
+
if ( !$hc.length ) {
{
+
return;
// ADQ- est intentionnel pour correspondre au modèle Lien AdQ, on
 
// ne doit pas le corriger.
 
if (document.getElementById("BA-" + lis[i].className)) {
 
lis[i].className += " BA";
 
lis[i].title = "Lien vers un bon article";
 
} else if (document.getElementById("ADQ-" + lis[i].className)) {
 
lis[i].className += " AdQ";
 
lis[i].title = "Lien vers un article de qualité";
 
}
 
 
}
 
}
  else if(wgNamespaceNumber==100)
+
if ( $hc.hasClass('mw-hidden-cats-user-shown') ) {
for (var i=0; i<l; i++)
+
return;
{
+
}
if (document.getElementById("PdQ-" + lis[i].className)) {
+
if ( $hc.hasClass('mw-hidden-cats-ns-shown') ) {
lis[i].className += " AdQ";
+
$hc.addClass('mw-hidden-cats-hidden');
lis[i].title = "Lien vers un portail de qualité";
+
}
}
+
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);
 
}
 
}
 +
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.style.marginLeft = '0.3em';
 +
$(lnk).click(toggleHiddenCats);
 +
lnk.appendChild(document.createTextNode('[+]'));
 +
nc.appendChild(lnk);
 
}
 
}
addOnloadHook(lienAdQouBAouPdQ);
 
  
/**
+
function toggleHiddenCats(e) {
* Redirect vers wikibooks etc.
+
var $hc = $('#mw-hidden-catlinks');
*
+
if ( $hc.hasClass('mw-hidden-cats-hidden') ) {
*/
+
$hc.removeClass('mw-hidden-cats-hidden');
var redirectedFromArticleDatas = new Array(
+
$hc.addClass('mw-hidden-cat-user-shown');
  new Array('Wikipédia:Redirect_vers_Wikibooks', 'wikibooks'),
+
$(e.target).text('[–]');
  new Array('Wikipédia:Redirect_vers_Wikisource', 'wikisource'),
+
} else {
  new Array('Wikipédia:Redirect_vers_Wikiversité', 'wikiversity'),
+
$hc.removeClass('mw-hidden-cat-user-shown');
  new Array('Wikipédia:Redirect_vers_Wikiquote', 'wikiquote'),
+
$hc.addClass('mw-hidden-cats-hidden');
  new Array('Wikipédia:Redirect_vers_Wikinews', 'wikinews'),
+
$(e.target).text('[+]');
  new Array('Wikipédia:Redirect_vers_Wiktionnaire', 'wiktionary')
+
}
);
+
}
  
function redirectedFromArticle() {
+
mw.loader.using('mediawiki.util', function () {
  if (wgIsArticle == false)
+
$( hiddencat );
      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);
 
  
 
/**
 
/**
  * Déplace les liens portails vers la boite de catégorie
+
  * Script pour alterner entre plusieurs cartes de géolocalisation
*
 
* Copyright 2007, fr:user:Aoineko. Licence GFDL et GPL.
 
 
  */
 
  */
var gUseMovePortalToCategoryBox = 1;
 
  
function movePortalToCategoryBox() {
+
function GeoBox_Init($content) {
  if(!gUseMovePortalToCategoryBox)
+
$content.find( 'div.img_toogle' ).each( function ( i, Container ) {
      return;
+
Container.id = 'img_toogle_' + i;
 
+
var Boxes = $( Container ).find( '.geobox' );
  // search for portails
+
if (Boxes.length < 2) {
  var div_portal = document.getElementById('portallinks');
+
return;
  if(div_portal && (div_portal.className == 'movable')) {
+
}
      div_portal.style.display = 'none'; // hide the portail div
+
var ToggleLinksDiv = document.createElement('ul');
      var div_cat = document.getElementById('catlinks'); // get cat div
+
ToggleLinksDiv.id = 'geoboxToggleLinks_' + i;
      if(!div_cat) { // no category box ? then create it
+
Boxes.each( function ( a, ThisBox ) {
        var div_foot;
+
ThisBox.id = 'geobox_' + i + '_' + a;
        var divs = document.getElementsByTagName('div');
+
var ThisAlt;
        for(var i = 0; i < divs.length ; i++)
+
var ThisImg = ThisBox.getElementsByTagName('img')[0];
            if(divs[i].className == 'printfooter')
+
if (ThisImg) {
              div_foot = divs[i];
+
ThisAlt = ThisImg.alt;
        div_cat = document.createElement("div");
+
}
        div_cat.setAttribute('id', 'catlinks');
+
if (!ThisAlt) {
        div_foot.parentNode.insertBefore(div_cat, div_foot);  
+
ThisAlt = 'erreur : description non trouvée';
      }
+
}
      div_cat.innerHTML = div_portal.innerHTML + '<hr/>' + div_cat.innerHTML;
+
var toggle = document.createElement('a');
  }
+
toggle.id = 'geoboxToggle_' + i + '_' + a;
 +
toggle.textContent = ThisAlt;
 +
toggle.href = 'javascript:';
 +
toggle.onclick = function (e) {
 +
e.preventDefault();
 +
GeoBox_Toggle(this);
 +
};
 +
var Li = document.createElement('li');
 +
Li.appendChild(toggle);
 +
ToggleLinksDiv.appendChild(Li);
 +
if (a === (Boxes.length - 1)) {
 +
toggle.style.color = '#888';
 +
toggle.style.pointerEvents = 'none';
 +
} else {
 +
ThisBox.style.display = 'none';
 +
}
 +
} );
 +
Container.appendChild(ToggleLinksDiv);
 +
} );
 
}
 
}
addOnloadHook(movePortalToCategoryBox);
 
  
/**
+
function GeoBox_Toggle(link) {
* Permet d'afficher les catégories cachées pour les contributeurs enregistrés, en ajoutant un (+) à la manière des boîtes déroulantes
+
var ImgToggleIndex = link.id.replace('geoboxToggle_', '').replace(/_.*/g, '');
*/
+
var GeoBoxIndex = link.id.replace(/.*_/g, '');
function hiddencat()
+
var ImageToggle = document.getElementById('img_toogle_' + ImgToggleIndex);
{
+
var Links = document.getElementById('geoboxToggleLinks_' + ImgToggleIndex);
if(document.URL.indexOf("printable=yes")!=-1) return;
+
var Geobox = document.getElementById('geobox_' + ImgToggleIndex + '_' + GeoBoxIndex);
var cl = document.getElementById('catlinks'); if(!cl) return;
+
var Link = document.getElementById('geoboxToggle_' + ImgToggleIndex + '_' + GeoBoxIndex);
if( !(hc = document.getElementById('mw-hidden-catlinks')) ) return;
+
if ( !ImageToggle || !Links || !Geobox || !Link ) {
if( hasClass(hc, 'mw-hidden-cats-user-shown') ) return;
+
return;
var nc = document.getElementById('mw-normal-catlinks');
+
}
if( !nc )
+
$( ImageToggle ).find( '.geobox' ).each( function ( _, ThisgeoBox ) {
{
+
if (ThisgeoBox.id === Geobox.id) {
  var catline = document.createElement('div');
+
ThisgeoBox.style.display = '';
  catline.id = 'mw-normal-catlinks';
+
} else {
  var a = document.createElement('a');
+
ThisgeoBox.style.display = 'none';
  a.href = '/wiki/Catégorie:Accueil';
+
}
  a.title = 'Catégorie:Accueil';
+
} );
  a.appendChild(document.createTextNode('Catégories'));
+
$( Links ).find( 'a' ).each( function ( _, thisToggleLink ) {
  catline.appendChild(a);
+
if (thisToggleLink.id === Link.id) {
  catline.appendChild(document.createTextNode(' : '));
+
thisToggleLink.style.color = '#888';
  nc = cl.insertBefore(catline, cl.firstChild);
+
thisToggleLink.style.pointerEvents = 'none';
}
+
} else {
else nc.appendChild(document.createTextNode(' | '));
+
thisToggleLink.style.color = '';
var lnk = document.createElement('a');
+
thisToggleLink.style.pointerEvents = '';
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 deux cartes de géolocalisation
 
*/
 
addOnloadHook(function(){
 
  var cont;
 
  if(!(wgAction=="view")) return
 
  
  cont=getElementsByClass('img_toogle', document.getElementById('bodyContent'), 'div');
+
mw.hook( 'wikipage.content' ).add( GeoBox_Init );
  if(cont.length==0) return
 
  
  for (var i = 0; i < cont.length ; i++) {
 
    cont.box = getElementsByClass('geobox',cont[i]);
 
    cont.box[0].style.display='none';
 
    cont.box[1].style.borderTop='0';
 
    var toogle = document.createElement('a');
 
    toogle.appendChild(document.createTextNode(cont.box[0].getElementsByTagName('img')[0].alt));
 
    toogle.href='#';
 
    toogle.className='a_toogle';
 
    toogle.status = 1;
 
    toogle.onclick = function() {
 
      this.removeChild(this.firstChild);
 
      div0 = getElementsByClass('geobox',this.parentNode)[0];
 
      div1 = getElementsByClass('geobox',this.parentNode)[1];
 
      alt0 = div0.getElementsByTagName('img')[0].alt;
 
      alt1 = div1.getElementsByTagName('img')[0].alt;
 
      if(this.status==0) {
 
        div0.style.display='none';
 
        div1.style.display='';
 
        this.status=1;
 
        this.appendChild(document.createTextNode(alt0));
 
      } else {
 
        div0.style.display='';
 
        div1.style.display='none';
 
        this.status=0;
 
        this.appendChild(document.createTextNode(alt1));
 
      }
 
      return false;
 
    }
 
  cont[i].insertBefore(toogle, cont.box[1].nextSibling);
 
  }
 
});
 
  
 
/**
 
/**
 
  * permet d'ajouter un petit lien (par exemple d'aide) à la fin du titre d'une page.
 
  * permet d'ajouter un petit lien (par exemple d'aide) à la fin du titre d'une page.
 +
* utilisé par [[Modèle:Aide contextuelle]]
 
  * known bug : conflit avec le changement de titre classique.
 
  * known bug : conflit avec le changement de titre classique.
 
  * Pour les commentaires, merci de contacter [[user:Plyd|Plyd]].
 
  * Pour les commentaires, merci de contacter [[user:Plyd|Plyd]].
 
  */
 
  */
 
function rewritePageH1bis() {
 
function rewritePageH1bis() {
  try {
+
var helpPage = document.getElementById('helpPage');
    var helpPage = document.getElementById("helpPage");
+
if (helpPage) {
    if (helpPage) {
+
var h1 = document.getElementById('firstHeading');
      var helpPageURL = document.getElementById("helpPageURL");
+
if (h1) {
      var h1 = document.getElementsByTagName("h1")[0];
+
h1.innerHTML += '<span id="h1-helpPage">' + helpPage.innerHTML + '</span>';
      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);
+
$( rewritePageH1bis );
  
 
/**
 
/**
  * application de [[Wikipédia:Prise de décision/Système de cache]]
+
  * Configuration du tri des diacritique dans les tables de class "sortable"
* 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 monobouc personnel désactive le script
 
 
  */
 
  */
 
+
mw.config.set( 'tableSorterCollation', {'à':'a', 'â':'a', 'æ':'ae', 'é':'e', 'è':'e', 'ê':'e', 'î':'i', 'ï':'i', 'ô':'o', 'œ':'oe', 'û':'u', 'ç':'c', } );
addOnloadHook(function () {
 
 
 
  if (wgNamespaceNumber == 0) {
 
    if ((typeof no_external_cache != "undefined") && (no_external_cache)) return;
 
    addcache();
 
  }
 
 
  function addcache() {
 
    var external_links;
 
    if (document.getElementsByClassName) {
 
      external_links = document.getElementsByClassName('external');
 
    } else {
 
      external_links = getElementsByClass('external',document.getElementById("bodyContent"),'a');
 
    }
 
 
 
    for( i = 0;i < external_links.length;i++)
 
    {
 
      var chemin = external_links[i].href;
 
 
 
      if(chemin.indexOf("http://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)
 
      {
 
      var li = external_links[i].parentNode;
 
      if (li.className == "noarchive") continue;
 
      var depth = 0;
 
      while ((depth < 3) && (li.tagName != "OL") && (li.parentNode != null)) {
 
        li = li.parentNode;
 
        depth++;
 
      }
 
 
      if (li.tagName != "OL" || !(hasClass(li, 'references')) ) continue;
 
      var titre = getTextContent(external_links[i]);
 
      var last = document.createElement("small");
 
      last.setAttribute("class", "cachelinks");
 
      last.style.color = "#3366BB";
 
      last.appendChild(document.createTextNode("\u00a0["));
 
      insertAfter(external_links[i].parentNode, last, external_links[i]);
 
 
      var link = document.createElement("a");
 
      link.setAttribute("href", "http://wikiwix.com/cache/?url=" + chemin.replace(/&/g, "%26"));
 
      link.setAttribute("title", "archive de "+ titre);
 
      link.appendChild(document.createTextNode("archive"));
 
      link.style.color = "#3366BB";
 
      last.appendChild(link);
 
      last.appendChild(document.createTextNode("]"));
 
      }
 
    }
 
  }
 
}
 
);
 
  
 
/**
 
/**
  * Application de [[Wikipédia:Prise de décision/Lien interprojet]]
+
  * Direct imagelinks to Commons
  * Copie les liens interprojets du modèle {{Autres projets}}
+
  *
  * dans le menu en colonne de gauche.
+
  * Required modules: mediawiki.util, user.options
  * remove_other_projects = true; dans le monobook personnel pour activer
+
  *
  * en plus la suppression du modèle {{Autres projets}} en bas des articles.
+
  * @source www.mediawiki.org/wiki/Snippets/Direct_imagelinks_to_Commons
  * no_other_projects = true; dans le monobook personnel pour désactiver
+
* @author Krinkle
  * entièrement le script et l'ajout dans la colonne de gauche.
+
  * @version 2015-06-23
 +
  * Ajouté le 'uselang' ce 18 janvier 2016 — Ltrlg
 
  */
 
  */
 +
if ( mw.config.get( 'wgNamespaceNumber' ) >= 0 ) {
 +
mw.loader.using( [ 'mediawiki.util', 'user.options' ] ).done(function(){
 +
mw.hook( 'wikipage.content' ).add( function ( $content ) {
 +
var
 +
uploadBase = '//upload.wikimedia.org/wikipedia/commons/',
  
function autresProjets() {
+
fileNamespace = mw.config.get( 'wgFormattedNamespaces' )['6'],
  if ((typeof no_other_projects != "undefined") && (no_other_projects)) return;
+
localBasePath = new RegExp( '^' + mw.util.escapeRegExp( mw.util.getUrl( fileNamespace + ':' ) ) ),
  if(!(wgNamespaceNumber==0)) return;
+
localBaseScript = new RegExp( '^' + mw.util.escapeRegExp( mw.util.wikiScript() + '?title=' + mw.util.wikiUrlencode( fileNamespace + ':' ) ) ),
  if(!(wgAction=="view")) return;
 
  var div = document.getElementById('autres_projets');
 
  if(!div) return;
 
  var list = div.getElementsByTagName('LI');
 
  var newlist = document.createElement("UL");
 
  for (var i = 0; i < list.length ; i++) {
 
    list.link = list[i].getElementsByTagName('A')[0];
 
    list.text = list.link.getElementsByTagName('SPAN')[0];
 
    var newlistitem = document.createElement("LI");
 
    var newlink = document.createElement("A");
 
    var newlinktext = document.createTextNode(getTextContent(list.text));
 
    newlink.appendChild(newlinktext);
 
    newlink.title=getTextContent(list.link);
 
    newlink.href=list.link.href;
 
    newlistitem.appendChild(newlink);
 
    newlist.appendChild(newlistitem);
 
  }
 
  var interProject = document.createElement("DIV");
 
  interProject.className = 'portlet';
 
  interProject.innerHTML = '<h5>Autres projets<\/h5><div class="pBody"><ul>'+newlist.innerHTML+'</ul></div>';
 
  insertAfter(document.getElementById('column-one'),interProject,document.getElementById('p-tb'));
 
  if ((typeof remove_other_projects != "undefined") && (remove_other_projects)) {
 
    document=document.getElementById('bodyContent').removeChild(div);
 
  }
 
}
 
 
addOnloadHook(autresProjets);
 
 
 
 
 
/************************************************************/
 
/* Strictement spécifiques à un espace de nom ou à une page */
 
/************************************************************/
 
 
 
// ESPACE DE NOM 'ARTICLE'
 
if( wgNamespaceNumber == 0 ) {
 
  
 +
commonsBasePath = '//commons.wikimedia.org/wiki/File:',
 +
commonsBaseScript = '//commons.wikimedia.org/w/index.php?title=File:',
  
} // Fin du code concernant l'espace de nom 'Article'
+
lang = mw.user.options.get( 'language' );
  
 
+
$content.find( 'a.image' ).attr( 'href', function ( i, currVal ) {
// PAGE D'ACCUEIL
+
if ( $( this ).find( 'img' ).attr( 'src' ).indexOf( uploadBase ) === 0 ) {
if( wgTitle == 'Accueil' ) {
+
if ( localBasePath.test( currVal ) ) {
 +
return currVal.replace( localBasePath, commonsBasePath ) + '?uselang=' + lang;
 +
} else if ( localBaseScript.test( currVal ) ) {
 +
return currVal.replace( localBaseScript, commonsBaseScript ) + '&uselang=' + lang;
 +
} else {
 +
return currVal;
 +
}
 +
}
 +
} );
 +
} );
 +
} );
 +
}
  
 
/**
 
/**
  * Suppression du titre sur la page d'accueil,
+
  * Ajout d'un lien « ajouter une section » en bas de page
* changement de l'onglet et lien vers la liste complète des Wikipédias depuis l'accueil
 
 
  */
 
  */
function mainPageTransform(){
+
if ( mw.config.get( 'wgAction' ) === 'view' ) {
  if(wgPageName != 'Accueil' && wgPageName != 'Discuter:Accueil') return;
+
$( function( $ ) {
  try {
+
var $newSectionLink = $( '#ca-addsection' ).find( 'a' );
    document.getElementById('ca-nstab-main').firstChild.innerHTML = 'Accueil';
+
if ( $newSectionLink.length ) {
  } catch (e) { /* Erreur : l'apparence ne gère la pas les onglets */ }
+
$( '#mw-content-text' ).append(
  if(wgPageName == 'Accueil' && wgIsArticle) addPortletLink('p-lang', 'http://www.wikipedia.org/', 'Liste complète', 'interwiki-listecomplete', 'Liste complète des Wikipédias');
+
'<div style="text-align:right; font-size:0.9em; margin:1em 0 -0.5em">'
 +
+ '<a href="' + $newSectionLink.attr( 'href' ) + '" title="Commencer une nouvelle section">Ajouter un sujet</a>'
 +
+ '</div>'
 +
);
 +
}
 +
} );
 
}
 
}
addOnloadHook(mainPageTransform);
 
  
 
/**
 
/**
  * Cache cadres de l'accueil
+
  * Repositionnement de la page sur l'ancre avec laquelle elle a été appelée
*
+
  * après le repli des boîtes déroulantes, entre autres.
* 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";
+
if ( window.location.hash ) {
var CacheCadresVal = {};
+
$( function ( $ ) {
var totalCadresAccueil = 0;
+
setTimeout( function () {
 
+
var currentTarget = document.getElementById( decodeURIComponent( window.location.hash.substring( 1 ) ) );
function affCadreAccueil(id) {
+
if ( currentTarget ) {
  visible = CacheCadresVal[id] = (!CacheCadresVal[id]);
+
currentTarget.scrollIntoView();
  getElementsByClass('accueil_contenu',null,'div')[id].style.display = visible ? 'block' : 'none';
+
}
  document.getElementById('CacheCadreAccueil' + id).innerHTML = visible ? 'masquer' : 'afficher';
+
}, 1 );
  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); **/
 
} // Fin du code concernant la page d'accueil
 
  
 +
/************************************************************/
 +
/* Function Strictement spécifiques à un espace de nom ou à une page */
 +
/************************************************************/
  
 
// ESPACE DE NOM 'SPECIAL'
 
// ESPACE DE NOM 'SPECIAL'
if( wgNamespaceNumber == -1 ) {
+
if ( mw.config.get( 'wgNamespaceNumber' ) === -1 ) {
  
 
/**
 
/**
  * Afficher une explication au nombre d'octets dans la liste de suivi
+
  * Ajoute le namespace aux filtres personnalisés sur [[Spécial:Pages liées]]
 +
* Voir aussi [[MediaWiki:Linkshere]]
 
  */
 
  */
function toolTipPlusMinus() {
+
if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Whatlinkshere' ) {
  if(wgCanonicalSpecialPageName != "Watchlist") return
 
  var tt = "Nombre d'octets 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);
 
  
/**
+
mw.loader.using( 'mediawiki.Uri', function () {
* Modifie Special:Search pour pouvoir utiliser différents moteurs de recherche,
+
$( function ( $ ) {
* disponibles dans une boîte déroulante.
 
* Auteurs : Jakob Voss, Guillaume, importé depuis la Wiki allemande
 
* <pre><nowiki>
 
*/
 
  
function externalSearchEngines() {
+
var query = ( new mw.Uri( null, { overrideKeys: true } ) ).query;
  if (typeof SpecialSearchEnhanced2Disabled != 'undefined') return;
 
  if (wgPageName != "Spécial:Recherche") return;
 
  
  var mainNode = document.getElementById("powersearch");
+
var append = ( query.namespace ? '&namespace=' + encodeURIComponent( query.namespace ) : '' )
  if (!mainNode) mainNode = document.getElementById("search");
+
+ ( query.invert ? '&invert=' + encodeURIComponent( query.invert ) : '' );
  if (!mainNode) return;
 
  
  var beforeNode = document.getElementById("mw-search-top-table");
+
if ( append !== '' ) {
  if (!beforeNode) return;
+
$( '#whatlinkshere-customfilters' ).find( 'a' ).each( function () {
  beforeNode = beforeNode.nextSibling;
+
this.href += append;
  if (!beforeNode) return;
+
} );
+
}
  var firstEngine = "mediawiki";
+
} );
+
} );
  var choices = document.createElement("div");
 
  choices.setAttribute("id","searchengineChoices");
 
  choices.style.textAlign = "center";
 
 
  var lsearchbox = document.getElementById("searchText");
 
  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
 
    if (engine.Template.indexOf('http') == 0) {
 
      label = document.createElement("a");
 
      label.href = engine.Template.replace("{searchTerms}", initValue).replace("{language}", "fr");
 
    } else {
 
      label = document.createElement("label");
 
    }
 
 
 
    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) {
+
/**
 
+
  * Affiche un modèle Information sur la page de téléchargement de fichiers [[Spécial:Téléchargement]]
  var currentId = document.getElementById("searchengineChoices").currentChoice;
+
  * Voir aussi [[MediaWiki:Onlyifuploading.js]]
  if (selectedId == currentId) return;
+
  */
   
+
if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Upload' ) {
  document.getElementById("searchengineChoices").currentChoice = selectedId;
+
importScript( 'MediaWiki:Onlyifuploading.js' );
  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 (wgPageName == "Spécial:Recherche") {
 
var searchEngines = {
 
  mediawiki: {
 
    ShortName: "Recherche interne",
 
    Template: "/wicri-base.fr/index.php?search={searchTerms}"
 
  },
 
  wicriInpl: {
 
    ShortName: "Wicri (Inpl) via Google",
 
    Template: "http://www.google.fr/search?as_sitesearch=ticri.inpl-nancy.fr&hl={language}&q={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: "Windows Live",
 
    Template: "http://search.live.com/results.aspx?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);
 
 
}
 
}
  
Ligne 1 175 : Ligne 590 :
  
 
// ESPACE DE NOM 'UTILISATEUR'
 
// ESPACE DE NOM 'UTILISATEUR'
if( wgNamespaceNumber == 2 ) {
+
if ( mw.config.get( 'wgNamespaceNumber' ) === 2 ) {
  
/* En phase de test */
+
/*
/* DÉBUT DU CODE JAVASCRIPT DE "CADRE À ONGLETS"
+
* Fonctionnement du [[Modèle:Cadre à onglets]]
    Fonctionnement du [[Modèle:Cadre à onglets]]
+
* Le JavaScript principal se situe dans [[MediaWiki:Gadget-CadreOnglets.js]]
    Modèle implanté par User:Peleguer de http://ca.wikipedia.org
+
*/
    Actualisé par User:Joanjoc de http://ca.wikipedia.org
+
mw.hook( 'wikipage.content' ).add( function ( $content ) {
    Traduction et adaptation User:Antaya de http://fr.wikipedia.org
+
if ( $content.find( '.cadre_a_onglets' ).length ) {
*/
+
mw.loader.using( 'ext.gadget.CadreOnglets', function () {
function CadreOngletInit(){
+
CadreOnglets_Init( $content );
// 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"*/
 
 
} // Fin du code concernant l'espace de nom 'Utilisateur'
 
} // Fin du code concernant l'espace de nom 'Utilisateur'
  
  
 
// ESPACE DE NOM 'RÉFÉRENCE'
 
// ESPACE DE NOM 'RÉFÉRENCE'
if( wgNamespaceNumber == 104 ) {
+
if ( mw.config.get( 'wgNamespaceNumber' ) === 104 ) {
  
 
/*
 
/*
 
  * Choix du mode d'affichage des références
 
  * 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 !
 
  * @note L'ordre de cette liste doit correspondre a celui de Modèle:Édition !
 
  */
 
  */
  
function addBibSubsetMenu() {
+
var addBibSubsetMenu = function ( $content ) {
  var specialBib = document.getElementById('specialBib');
+
var $specialBib = $content.find( '#specialBib' );
  if (!specialBib) return;
+
if ( !$specialBib.length ) {
 
+
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'
 
 
 
if(!Array.indexOf){
 
Array.prototype.indexOf = function(obj){
 
for(var i=0; i<this.length; i++){
 
if(this[i]==obj){
 
return i;
 
}
 
}
 
return -1;
 
}
 
}
 
 
 
/*
 
* 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);
 
}
 
  
/*
+
// select subsection of special characters
  Outil pour permettre l'affichage immédiat d'un javascript pour tous les utilisateurs en même temps.
+
var chooseBibSubset = function ( s ) {
  Même s'ils ne rechargent pas Wikipédia avec CTRL+R.
+
$content.find( '.edition-Liste' ).css( 'display', s === 0 ? 'block' : 'none' );
  Utile initialement pour prévoir une bonne réactivité et un lancement général du [[Projet:Impression]].
+
$content.find( '.edition-WikiNorme' ).css( 'display', s === 1 ? 'block' : 'none' );
  Plyd - 12 octobre 2008
+
$content.find( '.edition-BibTeX' ).css( 'display', s === 2 ? 'block' : 'none' );
  tag urgentsynchronejs inclus (pas encore) dans [[MediaWiki:Copyright]]
+
$content.find( '.edition-ISBD' ).css( 'display', s === 3 ? 'block' : 'none' );
*/
+
$content.find( '.edition-ISO690' ).css( 'display', s === 4 ? 'block' : 'none' );
function urgentSynchroneJsLoad() {
+
};
  if (document.getElementById('urgentsynchronejs')) {
 
    jsname = "MediaWiki:Common.js/"+document.getElementById('urgentsynchronejs').title;
 
    loadJs(jsname);
 
  }
 
}
 
addLoadEvent(urgentSynchroneJsLoad);
 
  
/* Permet d'afficher un compte à rebours sur une page avec le modèle [[Modèle:Compte à rebours]] */
+
var $menu = $( '<select>' )
/* Plyd - 3 février 2009 */
+
.css( 'display', 'inline' )
function Rebours() {
+
.change( function () {
  if(wgNamespaceNumber==0) return;
+
chooseBibSubset( this.selectedIndex );
  try {
+
} )
  if (document.getElementById("rebours")) {
+
.append(
      destime = document.getElementById("rebours").title.split(";;");
+
$( '<option>' ).text( 'Liste' ),
      Maintenant = (new Date).getTime();
+
$( '<option>' ).text( 'WikiNorme' ),
      Future = new Date(Date.UTC(destime[0], (destime[1]-1), destime[2], destime[3], destime[4], destime[5])).getTime();
+
$( '<option>' ).text( 'BibTeX' ),
      Diff = (Future-Maintenant);
+
$( '<option>' ).text( 'ISBD' ),
      if (Diff < 0) {Diff = 0}
+
$( '<option>' ).text( 'ISO690' )
      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) {}
 
}
 
addLoadEvent(Rebours);
 
  
/* Ajoute la date de dernière modification sur le bandeau événement récent */
+
$specialBib.append( $menu );
/* Plyd - 12 juin 2009 */
 
function LastModCopy() {
 
  /* classical monobook */
 
  if (document.getElementById("lastmodcopy") != null) {
 
    document.getElementById("lastmodcopy").innerHTML = document.getElementById("lastmod").innerHTML;
 
  }
 
  /* new theme */
 
  if (document.getElementById("foot-info-lastmod") != null) {
 
    document.getElementById("foot-info-lastmod").innerHTML = document.getElementById("foot-info-lastmod").innerHTML;
 
  }
 
  
}
+
/* default subset - try to use a cookie some day */
addLoadEvent(LastModCopy);
+
chooseBibSubset( 0 );
 +
};
  
/* Désactivation de la MISE EN GRAS DE L'ONGLET MODIFIER (copié de en:)
+
mw.hook( 'wikipage.content' ).add( addBibSubsetMenu );
ET de la MISE EN BLANC SUR FOND BLEU DE L'ONGLET MODIFIER (copié de pl:) */
 
if (window.BoutonModifier==true)
 
{
 
  importStylesheet('MediaWiki:AncienBoutonModifier.css');
 
}
 
  
/* WikiForm pour la génération facilité de modèles */
+
} // Fin du code concernant l'espace de nom 'Référence'
/* Plyd - 10/02/2008 */
 
if (document.getElementById("WikiForm")) {
 
  importScript("MediaWiki:Gadget-WikiForm.js");
 
}
 
  
  
/* petites fonctions pratiques  - Darkoneko, 09/01/2008 */
+
// PAGES SPÉCIFIQUES
  
//créé un lien et le retourne.
+
// Personnalisation des liens dans les pages d'aide selon un paramètre de l'URL.
//le parametre onclick est facultatif.
+
// Utilisé par [[Aide:Comment créer un article/publier]].
function createAdressNode(href, texte, onclick) {
+
function ReplaceSourcePageInLinks() {
  var a = document.createElement('a')
+
var match = window.location.search.match( /[?&]sourcepage=([^&]*)/ );
  a.href = href
+
if ( !match ) {
  a.appendChild(document.createTextNode( texte ) )
+
return;
  if(arguments.length == 3) {   a.setAttribute("onclick", onclick ) }
+
}
 
+
var page = decodeURIComponent( match[1] );
  return a
+
$( '.sourcepage-subst a' ).each( function() {
 +
if ( /^(https?:)?\/\/[^/]+\.wikipedia\.org\//.test( this.href ) ) {
 +
this.href = this.href.replace( 'TITRE-A-REMPLACER', encodeURIComponent( page ) );
 +
}
 +
} );
 
}
 
}
  
//Créé un cookie. il n'existais qu'une version dédiée à l'accueil. Celle ci est plus générique
+
if ( mw.config.get( 'wgPageName' ) === 'Aide:Comment_créer_un_article/publier' ) {
//le parametre duree est en jours
+
$( ReplaceSourcePageInLinks );
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=/"
 
}
 
 
 
/*
 
/!\ incompatible avec IE dans sa forme actuelle /!\
 
 
 
get_editcounts() TODO :
 
* rendre le morceau d'ajax compatible avec IE (users[a].attributes['editcount'].value est bon sous FF mais renvoie null sous IE)
 
    voir l'évolution du truc avec alert(http_request); alert(http_request.responseXML); ....
 
* splitter la requete API en plusieurs morceaux s'il y a trop de noms (probablement lié à la taille de l'url).
 
      pour l'instant, la requete échouera si l'on demande plus de ~350 users à la fois. => couper le tableau avec .slice()
 
 
 
*/
 
function get_editcounts(noms) {
 
  var http_request;
 
  if (window.XMLHttpRequest) { // Mozilla, Safari, ...
 
      http_request = new XMLHttpRequest()
 
      if (http_request.overrideMimeType)
 
        http_request.overrideMimeType('text/xml')
 
  } else {
 
      alert("la partie editcount de addContribLinkNearTalkPageInContributions n'est pas compatible internet explorer")
 
      return;
 
      /*
 
        if (window.ActiveXObject) { // IE
 
                try {
 
                        http_request = new ActiveXObject("Msxml2.XMLHTTP");
 
                } catch (e) {
 
                        try {
 
                                http_request = new ActiveXObject("Microsoft.XMLHTTP");
 
                        } catch (e) {}
 
                }
 
 
 
 
 
      */
 
  }
 
  var address = "/w/api.php?format=xml&action=query&list=users&usprop=editcount&ususers=" + noms.join('|')
 
  http_request.open('GET', address , false)
 
  http_request.send(null)
 
 
 
  var users = http_request.responseXML.documentElement.getElementsByTagName("user")
 
  var usersEditCount =new Array() //tableau des valeurs (nom user => editcount)
 
  for (var a=0 ; a < users.length ; a++) {
 
      //apparemment impossible de faire des clefs nommées, donc tant pis.
 
     
 
      if( typeof( users[ a ].attributes['editcount'] ) != 'undefined' ) {
 
          usersEditCount[ users[ a ].attributes['name'].value  ] = users[a].attributes['editcount'].value
 
      } else {  //cas d'une page de discussion utilisateur qui ne correspond pas à un compte (sinon ça plante)
 
          usersEditCount[ users[ a ].attributes['name'].value  ] = 'N/A'
 
      }
 
  }
 
   
 
  return usersEditCount
 
 
}
 
}
 
 
/* /petites fonctions pratiques */
 

Version actuelle datée du 27 décembre 2020 à 18:52

/* jshint scripturl:true, laxbreak:true, loopfunc:true */
/* global mw, $, importScript */
/**
 * N'importe quel JavaScript ici sera chargé pour n'importe quel utilisateur et pour chaque page accédée.
 *
 * 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
 */


/**********************************************************************************************************/
/* Fonctions générales MediaWiki (pallient les limitations du logiciel)                                   */
/* Surveiller : https://git.wikimedia.org/history/mediawiki%2Fcore.git/HEAD/skins%2Fcommon%2Fwikibits.js  */
/**********************************************************************************************************/

/**
 * Projet JavaScript
 */
window.obtenir = function ( name ) {
	if ( mw.loader.getState( 'ext.gadget.' + name ) !== null ) {
		mw.loader.load( 'ext.gadget.' + name );
	} else {
		importScript( 'MediaWiki:Gadget-' + name + '.js' );
	}
};

/**
 * Transformer les pages du Bistro, du BA et les pages spécifiées en page de discussion
 */
if ( mw.config.get( 'wgNamespaceNumber' ) >= 2 ) {
	$( function ( $ ) {
		if (
			/^Wikipédia:(Le_Bistro|Bulletin_des_administrateurs|Questions_techniques)/.test( mw.config.get( 'wgPageName' ) ) ||
			$( '#transformeEnPageDeDiscussion' ).length
		) {
			$( 'body' ).removeClass( 'ns-subject' ).addClass( 'ns-talk' );
		}
	} );
}


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

/**
 * Tout ce qui concerne la page d'édition
 */
if ( [ 'edit', 'submit' ].indexOf( mw.config.get( 'wgAction' ) ) !== -1 ) {

	// chargement de [[MediaWiki:Gadget-CommonEdit.js]]
	mw.loader.load( 'ext.gadget.CommonEdit' );

	// pour que les fonctions soient définies dès maintenant,
	// mais l'exécution réelle ne se fait qu'une fois le module chargé
	window.addSpecialCharset = function ( title, chars ) {
		mw.loader.using( 'ext.gadget.CommonEdit', function () {
			window.realAddSpecialCharset( title, chars );
		} );
	};
	window.addSpecialCharsetHTML = function ( title, charsHTML ) {
		mw.loader.using( 'ext.gadget.CommonEdit', function () {
			window.realAddSpecialCharsetHTML( title, charsHTML );
		} );
	};

	// fonction pour ajouter un bouton à la fin de la barre d'outils
	// permet d'utiliser [[MediaWiki:Gadget-MonobookToolbar.js]] sans se préoccuper de son chargement
	window.addCustomButton = ( function () {
		var promise;

		return function () {
			var buttonArguments = [].slice.call( arguments );

			if ( !promise ) {
				promise = mw.loader.using( 'ext.gadget.MonobookToolbar' );
			}

			promise.done( function () {
				MonobookToolbar.addButton.apply( MonobookToolbar, buttonArguments );
			} );
		};
	} )();

} else {
	// pour que les fonctions soient toujours définies,
	// afin d'éviter aux scripts utilisateur de planter
	window.addSpecialCharset = function () {};
	window.addSpecialCharsetHTML = function () {};
	window.addCustomButton = function () {};
}

/**
 * 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 rewritePageTitle( $ ) {
	var $realTitle, titleHtml, $h1,
		$realTitleBanner = $( '#RealTitleBanner' );
	if ( $realTitleBanner.length && !$( '#DisableRealTitle' ).length ) {
		$realTitle = $( '#RealTitle' );
		$h1 = $( 'h1:first' );
		if ( $realTitle.length && $h1.length ) {
			titleHtml = $realTitle.html();
			if ( titleHtml === '' ) {
				$h1.hide();
			} else {
				$h1.html( titleHtml );
				if ( mw.config.get( 'wgAction' ) === 'view' ) {
					// using a callback for replacement, to prevent interpreting "$" characters that realTitle might contain
					document.title = document.title.replace( /^.+( [—–-] Wikipédia)$/, function ( match, p1 ) {
						return $realTitle.text() + p1;
					} );
				}
			}
			$realTitleBanner.hide();
			$( '<p>' ).css( 'font-size', '80%' )
				.append( 'Titre à utiliser pour créer un lien interne : ', $( '<b>' ).text( mw.config.get( 'wgPageName' ).replace( /_/g, ' ' ) ) )
				.insertAfter( $h1 );
		}
	}
}
$( rewritePageTitle );


/**
 * 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>
 */

function sousTitreH1( $content ) {
	$( '#firstHeading > #sous_titre_h1' ).remove();
	var $span = $content.find( '#sous_titre_h1' );
	if ( $span.length ) {
		$span.prepend( ' ' );
		$( '#firstHeading' ).append( $span );
	}
}
mw.hook( 'wikipage.content' ).add( sousTitreH1 );


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

var Palette_Derouler = '[afficher]';
var Palette_Enrouler = '[masquer]';

var Palette_max = 1;

function Palette_toggle( $table ) {
	$table.find( 'tr:not(:first)' ).toggleClass( 'navboxHidden' );
}

function Palette( $content ) {

	var $tables = $content.find( 'table.collapsible' );
	var groups = {};

	$tables.each( function( _, table ) {
		var group = table.dataset.autocollapseGroup || '__default__';
		groups[group] = ( groups[group] || 0 ) + 1;
	} );

	$tables.each( function( _, table ) {
		var $table = $( table );

		var group = table.dataset.autocollapseGroup || '__default__';
		var autoCollapse = groups[group] > Palette_max;
		var collapsed = $table.hasClass( 'collapsed' ) || ( autoCollapse && $table.hasClass( 'autocollapse' ) );

		// le modèle dispose d'une classe "navbox-title",
		// sauf que les palettes "inlinées" (e.g. « {| class="navbox collapsible collapsed" ») n'ont pas cette classe
		$table.find( 'tr:first th:first' ).prepend(
			$( '<span class="navboxToggle">\u00a0</span>' ).append(
				$( '<a href="javascript:">' + (collapsed ? Palette_Derouler : Palette_Enrouler) + '</a>' ).click( function ( e ) {
					e.preventDefault();
					if ( this.textContent === Palette_Enrouler ) {
						this.textContent = Palette_Derouler;
					} else {
						this.textContent = Palette_Enrouler;
					}
					Palette_toggle( $table );
				} )
			)
		);
		if ( collapsed ) {
			Palette_toggle( $table );
		}
	} );

	// permet de dérouler/enrouler les palettes en cliquant n'importe où sur l'entête
	// (utilisation de la classe "navbox-title", comme ça seules les vraies palettes utilisant le modèle sont ciblées)
	$content.find( '.navbox-title' )
		.click( function ( e ) {
			if ( $( e.target ).closest( 'a' ).length ) {
				return;
			}
			$( this ).find( '.navboxToggle a' ).click();
		} )
		.css( 'cursor', 'pointer' );
}
mw.hook( 'wikipage.content' ).add( Palette );


/**
 * Pour [[Modèle:Boîte déroulante]]
 */

var BoiteDeroulante_Derouler = '[afficher]';
var BoiteDeroulante_Enrouler = '[masquer]';

function BoiteDeroulante_toggle(NavToggle){
	var NavFrame = NavToggle.parentNode;

	var caption = [];
	caption[0] = NavFrame.dataset.boiteDeroulanteDerouler;
	caption[1] = NavFrame.dataset.boiteDeroulanteEnrouler;

	var $NavContent = $(NavFrame).find('.NavContent').first();

	if ( NavToggle.textContent === caption[1] ) {
		NavToggle.textContent = caption[0];
		$NavContent.hide();
	} else {
		NavToggle.textContent = caption[1];
		$NavContent.show();
	}
}

function BoiteDeroulante( $content ) {

	$content.find( '.NavFrame' ).each( function ( _, NavFrame ) {
		var CustomTexts, Derouler, Enrouler, NavToggle;

		if (NavFrame.title && NavFrame.title.indexOf("/") !== -1) {
			CustomTexts = NavFrame.title.split("/");
			Derouler = CustomTexts[0];
			Enrouler = CustomTexts[1];
		} else {
			Derouler = BoiteDeroulante_Derouler;
			Enrouler = BoiteDeroulante_Enrouler;
		}
		NavFrame.title = '';
		NavFrame.dataset.boiteDeroulanteDerouler = Derouler;
		NavFrame.dataset.boiteDeroulanteEnrouler = Enrouler;

		NavToggle = document.createElement("a");
		NavToggle.className = 'NavToggle';
		NavToggle.href = 'javascript:';
		NavToggle.onclick = function (e) {
			e.preventDefault();
			BoiteDeroulante_toggle(e.target);
		};
		NavToggle.textContent = Enrouler;

		NavFrame.insertBefore(NavToggle, NavFrame.firstChild);

		BoiteDeroulante_toggle(NavToggle);
	} );

	// permet de dérouler/enrouler les boîtes en cliquant n'importe où sur l'entête
	$content.find( '.NavHead' )
		.click( function ( e ) {
			if ( $( e.target ).closest( 'a' ).length ) {
				return;
			}
			var toggle = $( this ).siblings( 'a.NavToggle' )[0];
			if ( toggle ) {
				toggle.click(); // pas du jquery, mais du vanilla js
			}
		} )
		.css( 'cursor', 'pointer' );
}

mw.hook( 'wikipage.content' ).add( BoiteDeroulante );


/**
 * Fonctionnement du [[Modèle:Animation]]
 * Le JavaScript principal se situe dans [[MediaWiki:Gadget-Diaporama.js]]
 */
mw.hook( 'wikipage.content' ).add( function ( $content ) {
	if ( $content.find( '.diaporama' ).length ) {
		mw.loader.using( 'ext.gadget.Diaporama', function () {
			Diaporama_Init( $content );
		} );
	}
} );


/**
 * 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 (mw.util.getParamValue('printable') === 'yes') {
		return;
	}
	var cl = document.getElementById('catlinks');
	if (!cl) {
		return;
	}
	var $hc = $('#mw-hidden-catlinks');
	if ( !$hc.length ) {
		return;
	}
	if ( $hc.hasClass('mw-hidden-cats-user-shown') ) {
		return;
	}
	if ( $hc.hasClass('mw-hidden-cats-ns-shown') ) {
		$hc.addClass('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);
	}
	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.style.marginLeft = '0.3em';
	$(lnk).click(toggleHiddenCats);
	lnk.appendChild(document.createTextNode('[+]'));
	nc.appendChild(lnk);
}

function toggleHiddenCats(e) {
	var $hc = $('#mw-hidden-catlinks');
	if ( $hc.hasClass('mw-hidden-cats-hidden') ) {
		$hc.removeClass('mw-hidden-cats-hidden');
		$hc.addClass('mw-hidden-cat-user-shown');
		$(e.target).text('[–]');
	} else {
		$hc.removeClass('mw-hidden-cat-user-shown');
		$hc.addClass('mw-hidden-cats-hidden');
		$(e.target).text('[+]');
	}
}

mw.loader.using('mediawiki.util', function () {
	$( hiddencat );
});


/**
 * Script pour alterner entre plusieurs cartes de géolocalisation
 */

function GeoBox_Init($content) {
	$content.find( 'div.img_toogle' ).each( function ( i, Container ) {
		Container.id = 'img_toogle_' + i;
		var Boxes = $( Container ).find( '.geobox' );
		if (Boxes.length < 2) {
			return;
		}
		var ToggleLinksDiv = document.createElement('ul');
		ToggleLinksDiv.id = 'geoboxToggleLinks_' + i;
		Boxes.each( function ( a, ThisBox ) {
			ThisBox.id = 'geobox_' + i + '_' + a;
			var ThisAlt;
			var ThisImg = ThisBox.getElementsByTagName('img')[0];
			if (ThisImg) {
				ThisAlt = ThisImg.alt;
			}
			if (!ThisAlt) {
				ThisAlt = 'erreur : description non trouvée';
			}
			var toggle = document.createElement('a');
			toggle.id = 'geoboxToggle_' + i + '_' + a;
			toggle.textContent = ThisAlt;
			toggle.href = 'javascript:';
			toggle.onclick = function (e) {
				e.preventDefault();
				GeoBox_Toggle(this);
			};
			var Li = document.createElement('li');
			Li.appendChild(toggle);
			ToggleLinksDiv.appendChild(Li);
			if (a === (Boxes.length - 1)) {
				toggle.style.color = '#888';
				toggle.style.pointerEvents = 'none';
			} else {
				ThisBox.style.display = 'none';
			}
		} );
		Container.appendChild(ToggleLinksDiv);
	} );
}

function GeoBox_Toggle(link) {
	var ImgToggleIndex = link.id.replace('geoboxToggle_', '').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;
	}
	$( ImageToggle ).find( '.geobox' ).each( function ( _, ThisgeoBox ) {
		if (ThisgeoBox.id === Geobox.id) {
			ThisgeoBox.style.display = '';
		} else {
			ThisgeoBox.style.display = 'none';
		}
	} );
	$( Links ).find( 'a' ).each( function ( _, thisToggleLink ) {
		if (thisToggleLink.id === Link.id) {
			thisToggleLink.style.color = '#888';
			thisToggleLink.style.pointerEvents = 'none';
		} else {
			thisToggleLink.style.color = '';
			thisToggleLink.style.pointerEvents = '';
		}
	} );
}

mw.hook( 'wikipage.content' ).add( GeoBox_Init );


/**
 * permet d'ajouter un petit lien (par exemple d'aide) à la fin du titre d'une page.
 * utilisé par [[Modèle:Aide contextuelle]]
 * known bug : conflit avec le changement de titre classique.
 * Pour les commentaires, merci de contacter [[user:Plyd|Plyd]].
 */
function rewritePageH1bis() {
	var helpPage = document.getElementById('helpPage');
	if (helpPage) {
		var h1 = document.getElementById('firstHeading');
		if (h1) {
			h1.innerHTML += '<span id="h1-helpPage">' + helpPage.innerHTML + '</span>';
		}
	}
}
$( rewritePageH1bis );

/**
 * Configuration du tri des diacritique dans les tables de class "sortable"
 */
mw.config.set( 'tableSorterCollation', {'à':'a', 'â':'a', 'æ':'ae', 'é':'e', 'è':'e', 'ê':'e', 'î':'i', 'ï':'i', 'ô':'o', 'œ':'oe', 'û':'u', 'ç':'c',  } );

/**
 * Direct imagelinks to Commons
 *
 * Required modules: mediawiki.util, user.options
 *
 * @source www.mediawiki.org/wiki/Snippets/Direct_imagelinks_to_Commons
 * @author Krinkle
 * @version 2015-06-23
 * Ajouté le 'uselang' ce 18 janvier 2016 — Ltrlg
 */
if ( mw.config.get( 'wgNamespaceNumber' ) >= 0 ) {
	mw.loader.using( [ 'mediawiki.util', 'user.options' ] ).done(function(){
		mw.hook( 'wikipage.content' ).add( function ( $content ) {
			var
				uploadBase = '//upload.wikimedia.org/wikipedia/commons/',

				fileNamespace = mw.config.get( 'wgFormattedNamespaces' )['6'],
				localBasePath = new RegExp( '^' + mw.util.escapeRegExp( mw.util.getUrl( fileNamespace + ':' ) ) ),
				localBaseScript = new RegExp( '^' + mw.util.escapeRegExp( mw.util.wikiScript() + '?title=' + mw.util.wikiUrlencode( fileNamespace + ':' ) ) ),

				commonsBasePath = '//commons.wikimedia.org/wiki/File:',
				commonsBaseScript = '//commons.wikimedia.org/w/index.php?title=File:',

				lang = mw.user.options.get( 'language' );

			$content.find( 'a.image' ).attr( 'href', function ( i, currVal ) {
				if ( $( this ).find( 'img' ).attr( 'src' ).indexOf( uploadBase ) === 0 ) {
					if ( localBasePath.test( currVal ) ) {
						return currVal.replace( localBasePath, commonsBasePath ) + '?uselang=' + lang;
					} else if ( localBaseScript.test( currVal ) ) {
						return currVal.replace( localBaseScript, commonsBaseScript ) + '&uselang=' + lang;
					} else {
						return currVal;
					}
				}
			} );
		} );
	} );
}

/**
 * Ajout d'un lien « ajouter une section » en bas de page
 */
if ( mw.config.get( 'wgAction' ) === 'view' ) {
	$( function( $ ) {
		var $newSectionLink = $( '#ca-addsection' ).find( 'a' );
		if ( $newSectionLink.length ) {
			$( '#mw-content-text' ).append(
				'<div style="text-align:right; font-size:0.9em; margin:1em 0 -0.5em">'
				+ '<a href="' + $newSectionLink.attr( 'href' ) + '" title="Commencer une nouvelle section">Ajouter un sujet</a>'
				+ '</div>'
			);
		}
	} );
}

/**
 * Repositionnement de la page sur l'ancre avec laquelle elle a été appelée
 * après le repli des boîtes déroulantes, entre autres.
 */
if ( window.location.hash ) {
	$( function ( $ ) {
		setTimeout( function () {
			var currentTarget = document.getElementById( decodeURIComponent( window.location.hash.substring( 1 ) ) );
			if ( currentTarget ) {
				currentTarget.scrollIntoView();
			}
		}, 1 );
	} );
}


/************************************************************/
/* Function Strictement spécifiques à un espace de nom ou à une page */
/************************************************************/

// ESPACE DE NOM 'SPECIAL'
if ( mw.config.get( 'wgNamespaceNumber' ) === -1 ) {

/**
 * Ajoute le namespace aux filtres personnalisés sur [[Spécial:Pages liées]]
 * Voir aussi [[MediaWiki:Linkshere]]
 */
if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Whatlinkshere' ) {

	mw.loader.using( 'mediawiki.Uri', function () {
		$( function ( $ ) {

			var query = ( new mw.Uri( null, { overrideKeys: true } ) ).query;

			var append = ( query.namespace ? '&namespace=' + encodeURIComponent( query.namespace ) : '' )
				+ ( query.invert ? '&invert=' + encodeURIComponent( query.invert ) : '' );

			if ( append !== '' ) {
				$( '#whatlinkshere-customfilters' ).find( 'a' ).each( function () {
					this.href += append;
				} );
			}
		} );
	} );
}

/**
 * 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 ) {

/*
 * Fonctionnement du [[Modèle:Cadre à onglets]]
 * Le JavaScript principal se situe dans [[MediaWiki:Gadget-CadreOnglets.js]]
 */
mw.hook( 'wikipage.content' ).add( function ( $content ) {
	if ( $content.find( '.cadre_a_onglets' ).length ) {
		mw.loader.using( 'ext.gadget.CadreOnglets', function () {
			CadreOnglets_Init( $content );
		} );
	}
} );

} // 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
 * @note L'ordre de cette liste doit correspondre a celui de Modèle:Édition !
 */

var addBibSubsetMenu = function ( $content ) {
	var $specialBib = $content.find( '#specialBib' );
	if ( !$specialBib.length ) {
		return;
	}

	// select subsection of special characters
	var chooseBibSubset = function ( s ) {
		$content.find( '.edition-Liste' ).css( 'display', s === 0 ? 'block' : 'none' );
		$content.find( '.edition-WikiNorme' ).css( 'display', s === 1 ? 'block' : 'none' );
		$content.find( '.edition-BibTeX' ).css( 'display', s === 2 ? 'block' : 'none' );
		$content.find( '.edition-ISBD' ).css( 'display', s === 3 ? 'block' : 'none' );
		$content.find( '.edition-ISO690' ).css( 'display', s === 4 ? 'block' : 'none' );
	};

	var $menu = $( '<select>' )
		.css( 'display', 'inline' )
		.change( function () {
			chooseBibSubset( this.selectedIndex );
		} )
		.append(
			$( '<option>' ).text( 'Liste' ),
			$( '<option>' ).text( 'WikiNorme' ),
			$( '<option>' ).text( 'BibTeX' ),
			$( '<option>' ).text( 'ISBD' ),
			$( '<option>' ).text( 'ISO690' )
		);

	$specialBib.append( $menu );

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

mw.hook( 'wikipage.content' ).add( addBibSubsetMenu );

} // Fin du code concernant l'espace de nom 'Référence'


// PAGES SPÉCIFIQUES

// Personnalisation des liens dans les pages d'aide selon un paramètre de l'URL.
// Utilisé par [[Aide:Comment créer un article/publier]].
function ReplaceSourcePageInLinks() {
	var match = window.location.search.match( /[?&]sourcepage=([^&]*)/ );
	if ( !match ) {
		return;
	}
	var page = decodeURIComponent( match[1] );
	$( '.sourcepage-subst a' ).each( function() {
		if ( /^(https?:)?\/\/[^/]+\.wikipedia\.org\//.test( this.href ) ) {
			this.href = this.href.replace( 'TITRE-A-REMPLACER', encodeURIComponent( page ) );
		}
	} );
}

if ( mw.config.get( 'wgPageName' ) === 'Aide:Comment_créer_un_article/publier' ) {
	$( ReplaceSourcePageInLinks );
}