MediaWiki:Common.js : Différence entre versions

De TP INTD
imported>Jacques Ducloy
m (1 version)
 
imported>Jacques Ducloy
 
(2 révisions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
//<source lang="javascript">
 
  
/* Import more specific scripts if necessary */
 
  
if (wgAction == "edit" || wgAction == "submit" || wgPageName == "Special:Upload") //scripts specific to editing pages
+
/* jshint scripturl:true, laxbreak:true, loopfunc:true */
{
+
/* global mw, $, importScript */
    importScript("MediaWiki:Common.js/edit.js")
+
/**
}
+
* N'importe quel JavaScript ici sera chargé pour n'importe quel utilisateur et pour chaque page accédée.
else if (wgPageName == "Special:Watchlist") //watchlist scripts
+
*
{
+
* ATTENTION : Avant de modifier cette page, veuillez tester vos changements avec votre propre
    importScript("MediaWiki:Common.js/watchlist.js")
+
* 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' );
 +
}
 +
} );
 
}
 
}
  
  
/** Sysop Javascript *******************************************************
+
/****************************************/
  *
+
/* Applications pour l'ensemble du site */
  Description: Allows for sysop-specific Javascript at [[MediaWiki:Sysop.js]].
+
/****************************************/
  */
+
 
function sysopFunctions() {
+
/**
    if ( wgUserGroups && !window.disableSysopJS ) {
+
* Tout ce qui concerne la page d'édition
        for ( var g = 0; g < wgUserGroups.length; ++g ) {
+
  */
            if ( wgUserGroups[g] == "sysop" ) {
+
if ( [ 'edit', 'submit' ].indexOf( mw.config.get( 'wgAction' ) ) !== -1 ) {
                importScript( "MediaWiki:Sysop.js" );
+
 
                break;
+
// 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;
  
addOnloadHook( sysopFunctions );
+
return function () {
 +
var buttonArguments = [].slice.call( arguments );
  
 +
if ( !promise ) {
 +
promise = mw.loader.using( 'ext.gadget.MonobookToolbar' );
 +
}
  
/** WikiMiniAtlas *******************************************************
+
promise.done( function () {
  *
+
MonobookToolbar.addButton.apply( MonobookToolbar, buttonArguments );
  *  Description: WikiMiniAtlas is a popup click and drag world map.
+
} );
  *              This script causes all of our coordinate links to display the WikiMiniAtlas popup button.
+
};
  *              The script itself is located on meta because it is used by many projects.
+
} )();
  *              See [[Meta:WikiMiniAtlas]] for more information.
 
  *  Maintainers: [[User:Dschwen]]
 
  */
 
  
if (wgServer == "https://secure.wikimedia.org") {
 
    var metaBase = "https://secure.wikimedia.org/wikipedia/meta";
 
 
} else {
 
} else {
    var metaBase = "http://meta.wikimedia.org";
+
// 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 () {};
 
}
 
}
importScriptURI(metaBase+"/w/index.php?title=MediaWiki:Wikiminiatlas.js&action=raw&ctype=text/javascript&smaxage=21600&maxage=86400")
 
  
 
+
/**
/** Mobile Redirect Helper ************************************************
+
* Réécriture des titres
 
  *
 
  *
  * Redirects to the mobile-optimized gateway at en.m.wikimedia.org
+
  * Fonction utilisée par [[Modèle:Titre incorrect]]
*  for viewers on iPhone, iPod Touch, Palm Pre, and Android devices.
 
 
  *
 
  *
  *  You can turn off the redirect by setting the cookie "stopMobileRedirect=true"
+
  * La fonction cherche un bandeau de la forme
 +
  * <div id="RealTitleBanner">
 +
*  <span id="RealTitle">titre</span>
 +
* </div>
 
  *
 
  *
  *  This code cannot be imported, because the JS only loads after all other files
+
  * Un élément comportant id="DisableRealTitle" désactive la fonction
*  and this was causing major issues for users with mobile devices. Must be loaded
+
  */
*  *before* the images and etc of the page on all mobile devices.
+
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
 
  *
 
  *
  * Maintainer: [[User:Brion VIBBER]], [[User:hcatlin]]
+
  * 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>
 
  */
 
  */
if (/(Android|iPhone|iPod|webOS)/.test(navigator.userAgent)) {
 
  
  var wgMainPageName = 'Main_Page';
+
function sousTitreH1( $content ) {
+
$( '#firstHeading > #sous_titre_h1' ).remove();
  var stopMobileRedirectCookieExists = function() {
+
var $span = $content.find( '#sous_titre_h1' );
    return (document.cookie.indexOf("stopMobileRedirect=true") >= 0);
+
if ( $span.length ) {
  }
+
$span.prepend( ' ' );
+
$( '#firstHeading' ).append( $span );
  var mobileSiteLink = function() {
+
}
    if (wgCanonicalNamespace == 'Special' && wgCanonicalSpecialPageName == 'Search') {
 
        var pageLink = '?search=' + encodeURIComponent(document.getElementById('searchText').value);
 
    } else if (wgPageName == wgMainPageName) {
 
        var pageLink = '::Home'; // Special case
 
    } else {
 
        var pageLink = encodeURIComponent(wgPageName).replace('%2F','/').replace('%3A',':');
 
    }
 
    return 'http://' + wgContentLanguage + '.m.wikipedia.org/wiki/' + pageLink + "?wasRedirected=true"
 
  }
 
 
  if (!stopMobileRedirectCookieExists()) {
 
    document.location = mobileSiteLink();
 
  }
 
 
}
 
}
 +
mw.hook( 'wikipage.content' ).add( sousTitreH1 );
  
  
/* Scripts specific to Internet Explorer */
+
/**
 +
* Boîtes déroulantes
 +
*
 +
* Pour [[Modèle:Méta palette de navigation]]
 +
*/
  
if (navigator.appName == "Microsoft Internet Explorer")
+
var Palette_Derouler = '[afficher]';
{
+
var Palette_Enrouler = '[masquer]';
    /** Internet Explorer bug fix **************************************************
 
    *
 
    *  Description: Fixes IE horizontal scrollbar bug
 
    *  Maintainers: [[User:Tom-]]?
 
    */
 
   
 
    var oldWidth;
 
    var docEl = document.documentElement;
 
   
 
    function fixIEScroll()
 
    {
 
        if (!oldWidth || docEl.clientWidth > oldWidth)
 
            doFixIEScroll();
 
        else
 
            setTimeout(doFixIEScroll, 1);
 
       
 
        oldWidth = docEl.clientWidth;
 
    }
 
   
 
    function doFixIEScroll() {
 
        docEl.style.overflowX = (docEl.scrollWidth - docEl.clientWidth < 4) ? "hidden" : "";
 
    }
 
   
 
    document.attachEvent("onreadystatechange", fixIEScroll);
 
    document.attachEvent("onresize", fixIEScroll);
 
   
 
   
 
    /**
 
    * Remove need for CSS hacks regarding MSIE and IPA.
 
    */
 
    if (document.createStyleSheet) {
 
        document.createStyleSheet().addRule('.IPA', 'font-family: "Doulos SIL", "Charis SIL", Gentium, "DejaVu Sans", Code2000, "TITUS Cyberbit Basic", "Arial Unicode MS", "Lucida Sans Unicode", "Chrysanthi Unicode";');
 
    }
 
  
    // In print IE (7?) does not like line-height
+
var Palette_max = 1;
    appendCSS( '@media print { sup, sub, p, .documentDescription { line-height: normal; }}');
 
  
    // IE overflow bug
+
function Palette_toggle( $table ) {
    appendCSS('div.overflowbugx { overflow-x: scroll !important; overflow-y: hidden !important; } div.overflowbugy { overflow-y: scroll !important; overflow-x: hidden !important; }');
+
$table.find( 'tr:not(:first)' ).toggleClass( 'navboxHidden' );
   
 
    //Import scripts specific to Internet Explorer 6
 
    if (navigator.appVersion.substr(22, 1) == "6") {
 
        importScript("MediaWiki:Common.js/IE60Fixes.js")
 
    }
 
 
}
 
}
  
 +
function Palette( $content ) {
  
/* Test if an element has a certain class **************************************
+
var $tables = $content.find( 'table.collapsible' );
*
+
var groups = {};
* Description: Uses regular expressions and caching for better performance.
 
* Maintainers: [[User:Mike Dillon]], [[User:R. Koot]], [[User:SG]]
 
*/
 
  
var hasClass = (function () {
+
$tables.each( function( _, table ) {
    var reCache = {};
+
var group = table.dataset.autocollapseGroup || '__default__';
    return function (element, className) {
+
groups[group] = ( groups[group] || 0 ) + 1;
        return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className);
+
} );
    };
 
})();
 
  
 +
$tables.each( function( _, table ) {
 +
var $table = $( table );
  
/** Interwiki links to featured articles ***************************************
+
var group = table.dataset.autocollapseGroup || '__default__';
*
+
var autoCollapse = groups[group] > Palette_max;
*  Description: Highlights interwiki links to featured articles (or
+
var collapsed = $table.hasClass( 'collapsed' ) || ( autoCollapse && $table.hasClass( 'autocollapse' ) );
*              equivalents) by changing the bullet before the interwiki link
 
*              into a star.
 
*  Maintainers: [[User:R. Koot]]
 
*/
 
  
function LinkFA()  
+
// 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
    if ( document.getElementById( "p-lang" ) ) {
+
$table.find( 'tr:first th:first' ).prepend(
        var InterwikiLinks = document.getElementById( "p-lang" ).getElementsByTagName( "li" );
+
$( '<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 );
 +
}
 +
} );
  
        for ( var i = 0; i < InterwikiLinks.length; i++ ) {
+
// permet de dérouler/enrouler les palettes en cliquant n'importe où sur l'entête
            if ( document.getElementById( InterwikiLinks[i].className + "-fa" ) ) {
+
// (utilisation de la classe "navbox-title", comme ça seules les vraies palettes utilisant le modèle sont ciblées)
                InterwikiLinks[i].className += " FA"
+
$content.find( '.navbox-title' )
                InterwikiLinks[i].title = "This is a featured article in another language.";
+
.click( function ( e ) {
            }
+
if ( $( e.target ).closest( 'a' ).length ) {
        }
+
return;
    }
+
}
 +
$( this ).find( '.navboxToggle a' ).click();
 +
} )
 +
.css( 'cursor', 'pointer' );
 
}
 
}
 +
mw.hook( 'wikipage.content' ).add( Palette );
  
addOnloadHook( LinkFA );
 
  
 
+
/**
/** Collapsible tables *********************************************************
+
  * Pour [[Modèle:Boîte déroulante]]
*
 
*  Description: Allows tables to be collapsed, showing only the header. See
 
  *               [[Wikipedia:NavFrame]].
 
*  Maintainers: [[User:R. Koot]]
 
 
  */
 
  */
  
var autoCollapse = 2;
+
var BoiteDeroulante_Derouler = '[afficher]';
var collapseCaption = "hide";
+
var BoiteDeroulante_Enrouler = '[masquer]';
var expandCaption = "show";
 
  
function collapseTable( tableIndex )
+
function BoiteDeroulante_toggle(NavToggle){
{
+
var NavFrame = NavToggle.parentNode;
    var Button = document.getElementById( "collapseButton" + tableIndex );
 
    var Table = document.getElementById( "collapsibleTable" + tableIndex );
 
  
    if ( !Table || !Button ) {
+
var caption = [];
        return false;
+
caption[0] = NavFrame.dataset.boiteDeroulanteDerouler;
    }
+
caption[1] = NavFrame.dataset.boiteDeroulanteEnrouler;
  
    var Rows = Table.rows;
+
var $NavContent = $(NavFrame).find('.NavContent').first();
  
    if ( Button.firstChild.data == collapseCaption ) {
+
if ( NavToggle.textContent === caption[1] ) {
        for ( var i = 1; i < Rows.length; i++ ) {
+
NavToggle.textContent = caption[0];
            Rows[i].style.display = "none";
+
$NavContent.hide();
        }
+
} else {
        Button.firstChild.data = expandCaption;
+
NavToggle.textContent = caption[1];
    } else {
+
$NavContent.show();
        for ( var i = 1; i < Rows.length; i++ ) {
+
}
            Rows[i].style.display = Rows[0].style.display;
 
        }
 
        Button.firstChild.data = collapseCaption;
 
    }
 
 
}
 
}
  
function createCollapseButtons()
+
function BoiteDeroulante( $content ) {
{
 
    var tableIndex = 0;
 
    var NavigationBoxes = new Object();
 
    var Tables = document.getElementsByTagName( "table" );
 
  
    for ( var i = 0; i < Tables.length; i++ ) {
+
$content.find( '.NavFrame' ).each( function ( _, NavFrame ) {
        if ( hasClass( Tables[i], "collapsible" ) ) {
+
var CustomTexts, Derouler, Enrouler, NavToggle;
  
            /* only add button and increment count if there is a header row to work with */
+
if (NavFrame.title && NavFrame.title.indexOf("/") !== -1) {
            var HeaderRow = Tables[i].getElementsByTagName( "tr" )[0];
+
CustomTexts = NavFrame.title.split("/");
            if (!HeaderRow) continue;
+
Derouler = CustomTexts[0];
            var Header = HeaderRow.getElementsByTagName( "th" )[0];
+
Enrouler = CustomTexts[1];
            if (!Header) continue;
+
} else {
 +
Derouler = BoiteDeroulante_Derouler;
 +
Enrouler = BoiteDeroulante_Enrouler;
 +
}
 +
NavFrame.title = '';
 +
NavFrame.dataset.boiteDeroulanteDerouler = Derouler;
 +
NavFrame.dataset.boiteDeroulanteEnrouler = Enrouler;
  
            NavigationBoxes[ tableIndex ] = Tables[i];
+
NavToggle = document.createElement("a");
            Tables[i].setAttribute( "id", "collapsibleTable" + tableIndex );
+
NavToggle.className = 'NavToggle';
 +
NavToggle.href = 'javascript:';
 +
NavToggle.onclick = function (e) {
 +
e.preventDefault();
 +
BoiteDeroulante_toggle(e.target);
 +
};
 +
NavToggle.textContent = Enrouler;
  
            var Button    = document.createElement( "span" );
+
NavFrame.insertBefore(NavToggle, NavFrame.firstChild);
            var ButtonLink = document.createElement( "a" );
 
            var ButtonText = document.createTextNode( collapseCaption );
 
  
            Button.className = "collapseButton"; //Styles are declared in Common.css
+
BoiteDeroulante_toggle(NavToggle);
 +
} );
  
            ButtonLink.style.color = Header.style.color;
+
// permet de dérouler/enrouler les boîtes en cliquant n'importe où sur l'entête
            ButtonLink.setAttribute( "id", "collapseButton" + tableIndex );
+
$content.find( '.NavHead' )
            ButtonLink.setAttribute( "href", "javascript:collapseTable(" + tableIndex + ");" );
+
.click( function ( e ) {
            ButtonLink.appendChild( ButtonText );
+
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' );
 +
}
  
            Button.appendChild( document.createTextNode( "[" ) );
+
mw.hook( 'wikipage.content' ).add( BoiteDeroulante );
            Button.appendChild( ButtonLink );
 
            Button.appendChild( document.createTextNode( "]" ) );
 
  
            Header.insertBefore( Button, Header.childNodes[0] );
 
            tableIndex++;
 
        }
 
    }
 
  
    for ( var i = 0; i < tableIndex; i++ ) {
+
/**
        if ( hasClass( NavigationBoxes[i], "collapsed" ) || ( tableIndex >= autoCollapse && hasClass( NavigationBoxes[i], "autocollapse" ) ) ) {
+
  * Fonctionnement du [[Modèle:Animation]]
            collapseTable( i );
+
* Le JavaScript principal se situe dans [[MediaWiki:Gadget-Diaporama.js]]
        }
+
*/
        else if ( hasClass( NavigationBoxes[i], "innercollapse" ) ) {
+
mw.hook( 'wikipage.content' ).add( function ( $content ) {
            var element = NavigationBoxes[i];
+
if ( $content.find( '.diaporama' ).length ) {
            while (element = element.parentNode) {
+
mw.loader.using( 'ext.gadget.Diaporama', function () {
                if ( hasClass( element, "outercollapse" ) ) {
+
Diaporama_Init( $content );
                    collapseTable ( i );
+
} );
                    break;
+
}
                }
+
} );
            }
 
        }
 
    }
 
}
 
  
addOnloadHook( createCollapseButtons );
 
  
 
+
/**
/** Dynamic Navigation Bars (experimental) *************************************
+
  * Permet d'afficher les catégories cachées pour les contributeurs enregistrés, en ajoutant un (+) à la manière des boîtes déroulantes
  *
 
*  Description: See [[Wikipedia:NavFrame]].
 
*  Maintainers: UNMAINTAINED
 
 
  */
 
  */
 +
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);
 +
}
  
// set up the words in your language
+
function toggleHiddenCats(e) {
var NavigationBarHide = '[' + collapseCaption + ']';
+
var $hc = $('#mw-hidden-catlinks');
var NavigationBarShow = '[' + expandCaption + ']';
+
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('[+]');
 +
}
 +
}
  
// shows and hides content and picture (if available) of navigation bars
+
mw.loader.using('mediawiki.util', function () {
// Parameters:
+
$( hiddencat );
//    indexNavigationBar: the index of navigation bar to be toggled
+
});
function toggleNavigationBar(indexNavigationBar)
 
{
 
    var NavToggle = document.getElementById("NavToggle" + indexNavigationBar);
 
    var NavFrame = document.getElementById("NavFrame" + indexNavigationBar);
 
  
    if (!NavFrame || !NavToggle) {
 
        return false;
 
    }
 
  
    // if shown now
+
/**
    if (NavToggle.firstChild.data == NavigationBarHide) {
+
* Script pour alterner entre plusieurs cartes de géolocalisation
        for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) {
+
*/
            if ( hasClass( NavChild, 'NavPic' ) ) {
 
                NavChild.style.display = 'none';
 
            }
 
            if ( hasClass( NavChild, 'NavContent') ) {
 
                NavChild.style.display = 'none';
 
            }
 
        }
 
    NavToggle.firstChild.data = NavigationBarShow;
 
  
    // if hidden now
+
function GeoBox_Init($content) {
    } else if (NavToggle.firstChild.data == NavigationBarShow) {
+
$content.find( 'div.img_toogle' ).each( function ( i, Container ) {
        for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) {
+
Container.id = 'img_toogle_' + i;
            if (hasClass(NavChild, 'NavPic')) {
+
var Boxes = $( Container ).find( '.geobox' );
                NavChild.style.display = 'block';
+
if (Boxes.length < 2) {
            }
+
return;
            if (hasClass(NavChild, 'NavContent')) {
+
}
                NavChild.style.display = 'block';
+
var ToggleLinksDiv = document.createElement('ul');
            }
+
ToggleLinksDiv.id = 'geoboxToggleLinks_' + i;
        }
+
Boxes.each( function ( a, ThisBox ) {
        NavToggle.firstChild.data = NavigationBarHide;
+
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);
 +
} );
 
}
 
}
  
// adds show/hide-button to navigation bars
+
function GeoBox_Toggle(link) {
function createNavigationBarToggleButton()
+
var ImgToggleIndex = link.id.replace('geoboxToggle_', '').replace(/_.*/g, '');
{
+
var GeoBoxIndex = link.id.replace(/.*_/g, '');
    var indexNavigationBar = 0;
+
var ImageToggle = document.getElementById('img_toogle_' + ImgToggleIndex);
    // iterate over all < div >-elements
+
var Links = document.getElementById('geoboxToggleLinks_' + ImgToggleIndex);
    var divs = document.getElementsByTagName("div");
+
var Geobox = document.getElementById('geobox_' + ImgToggleIndex + '_' + GeoBoxIndex);
    for (var i = 0; NavFrame = divs[i]; i++) {
+
var Link = document.getElementById('geoboxToggle_' + ImgToggleIndex + '_' + GeoBoxIndex);
        // if found a navigation bar
+
if ( !ImageToggle || !Links || !Geobox || !Link ) {
        if (hasClass(NavFrame, "NavFrame")) {
+
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 = '';
 +
}
 +
} );
 +
}
  
            indexNavigationBar++;
+
mw.hook( 'wikipage.content' ).add( GeoBox_Init );
            var NavToggle = document.createElement("a");
 
            NavToggle.className = 'NavToggle';
 
            NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar);
 
            NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');');
 
  
            var isCollapsed = hasClass( NavFrame, "collapsed" );
 
            /*
 
            * Check if any children are already hidden.  This loop is here for backwards compatibility:
 
            * the old way of making NavFrames start out collapsed was to manually add style="display:none"
 
            * to all the NavPic/NavContent elements.  Since this was bad for accessibility (no way to make
 
            * the content visible without JavaScript support), the new recommended way is to add the class
 
            * "collapsed" to the NavFrame itself, just like with collapsible tables.
 
            */
 
            for (var NavChild = NavFrame.firstChild; NavChild != null && !isCollapsed; NavChild = NavChild.nextSibling) {
 
                if ( hasClass( NavChild, 'NavPic' ) || hasClass( NavChild, 'NavContent' ) ) {
 
                    if ( NavChild.style.display == 'none' ) {
 
                        isCollapsed = true;
 
                    }
 
                }
 
            }
 
            if (isCollapsed) {
 
                for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) {
 
                    if ( hasClass( NavChild, 'NavPic' ) || hasClass( NavChild, 'NavContent' ) ) {
 
                        NavChild.style.display = 'none';
 
                    }
 
                }
 
            }
 
            var NavToggleText = document.createTextNode(isCollapsed ? NavigationBarShow : NavigationBarHide);
 
            NavToggle.appendChild(NavToggleText);
 
  
            // Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked)
+
/**
            for(var j=0; j < NavFrame.childNodes.length; j++) {
+
* permet d'ajouter un petit lien (par exemple d'aide) à la fin du titre d'une page.
                if (hasClass(NavFrame.childNodes[j], "NavHead")) {
+
* utilisé par [[Modèle:Aide contextuelle]]
                    NavFrame.childNodes[j].appendChild(NavToggle);
+
* known bug : conflit avec le changement de titre classique.
                }
+
* Pour les commentaires, merci de contacter [[user:Plyd|Plyd]].
            }
+
*/
            NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
+
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 );
  
addOnloadHook( createNavigationBarToggleButton );
+
/**
 +
* 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',  } );
  
 
+
/**
/** Main Page layout fixes *********************************************************
+
* Direct imagelinks to Commons
 +
*
 +
* Required modules: mediawiki.util, user.options
 
  *
 
  *
  *  Description: Adds an additional link to the complete list of languages available.
+
  * @source www.mediawiki.org/wiki/Snippets/Direct_imagelinks_to_Commons
  *  Maintainers: [[User:AzaToth]], [[User:R. Koot]], [[User:Alex Smotrov]]
+
  * @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/',
  
if (wgPageName == 'Main_Page' || wgPageName == 'Talk:Main_Page')
+
fileNamespace = mw.config.get( 'wgFormattedNamespaces' )['6'],
    addOnloadHook(function () {
+
localBasePath = new RegExp( '^' + mw.util.escapeRegExp( mw.util.getUrl( fileNamespace + ':' ) ) ),
        addPortletLink('p-lang', 'http://meta.wikimedia.org/wiki/List_of_Wikipedias',
+
localBaseScript = new RegExp( '^' + mw.util.escapeRegExp( mw.util.wikiScript() + '?title=' + mw.util.wikiUrlencode( fileNamespace + ':' ) ) ),
                'Complete list', 'interwiki-completelist', 'Complete list of Wikipedias')
 
        var nstab = document.getElementById('ca-nstab-main')
 
        if (nstab && wgUserLanguage=='en')
 
            nstab.firstChild.firstChild.nodeValue = 'Main Page'
 
    }
 
)
 
  
 +
commonsBasePath = '//commons.wikimedia.org/wiki/File:',
 +
commonsBaseScript = '//commons.wikimedia.org/w/index.php?title=File:',
  
/** Table sorting fixes ************************************************
+
lang = mw.user.options.get( 'language' );
  *
 
  *  Description: Disables code in table sorting routine to set classes on even/odd rows
 
  *  Maintainers: [[User:Random832]]
 
  */
 
  
ts_alternate_row_colors = false;
+
$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>'
 +
);
 +
}
 +
} );
 +
}
  
/***** uploadwizard_newusers ********
+
/**
  * Switches in a message for non-autoconfirmed users at [[Wikipedia:Upload]]
+
  * 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.
  * Maintainers: [[User:Krimpet]]
+
  */
****/
+
if ( window.location.hash ) {
function uploadwizard_newusers() {
+
$( function ( $ ) {
  if (wgNamespaceNumber == 4 && wgTitle == "Upload" && wgAction == "view") {
+
setTimeout( function () {
    var oldDiv = document.getElementById("autoconfirmedusers"),
+
var currentTarget = document.getElementById( decodeURIComponent( window.location.hash.substring( 1 ) ) );
        newDiv = document.getElementById("newusers");
+
if ( currentTarget ) {
    if (oldDiv && newDiv) {
+
currentTarget.scrollIntoView();
      if (typeof wgUserGroups == "object" && wgUserGroups) {
+
}
        for (i = 0; i < wgUserGroups.length; i++) {
+
}, 1 );
          if (wgUserGroups[i] == "autoconfirmed") {
+
} );
            oldDiv.style.display = "block";
 
            newDiv.style.display = "none";
 
            return;
 
          }
 
        }
 
      }
 
      oldDiv.style.display = "none";
 
      newDiv.style.display = "block";
 
      return;
 
    }
 
  }
 
 
}
 
}
addOnloadHook(uploadwizard_newusers);
 
  
  
/** IPv6 AAAA connectivity testing **/
+
/************************************************************/
 +
/* Function Strictement spécifiques à un espace de nom ou à une page */
 +
/************************************************************/
  
var __ipv6wwwtest_factor = 100;
+
// ESPACE DE NOM 'SPECIAL'
var __ipv6wwwtest_done = 0;
+
if ( mw.config.get( 'wgNamespaceNumber' ) === -1 ) {
if ((wgServer != "https://secure.wikimedia.org") && (Math.floor(Math.random()*__ipv6wwwtest_factor)==42)) {
 
    importScript("MediaWiki:Common.js/IPv6.js");
 
}
 
  
/** Magic editintros ****************************************************
+
/**
  *
+
  * Ajoute le namespace aux filtres personnalisés sur [[Spécial:Pages liées]]
*  Description: Adds editintros on disambiguation pages and BLP pages.
+
  * Voir aussi [[MediaWiki:Linkshere]]
  * Maintainers: [[User:RockMFR]]
 
 
  */
 
  */
 +
if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Whatlinkshere' ) {
  
function addEditIntro(name)
+
mw.loader.using( 'mediawiki.Uri', function () {
{
+
$( function ( $ ) {
  var el = document.getElementById('ca-edit');
 
  if (!el)
 
    return;
 
  el = el.getElementsByTagName('a')[0];
 
  if (el)
 
    el.href += '&editintro=' + name;
 
}
 
  
 +
var query = ( new mw.Uri( null, { overrideKeys: true } ) ).query;
  
if (wgNamespaceNumber == 0) {
+
var append = ( query.namespace ? '&namespace=' + encodeURIComponent( query.namespace ) : '' )
  addOnloadHook(function(){
+
+ ( query.invert ? '&invert=' + encodeURIComponent( query.invert ) : '' );
    if (document.getElementById('disambigbox'))
 
      addEditIntro('Template:Disambig_editintro');
 
  });
 
  
  addOnloadHook(function(){
+
if ( append !== '' ) {
    var cats = document.getElementById('mw-normal-catlinks');
+
$( '#whatlinkshere-customfilters' ).find( 'a' ).each( function () {
    if (!cats)
+
this.href += append;
      return;
+
} );
    cats = cats.getElementsByTagName('a');
+
}
    for (var i = 0; i < cats.length; i++) {
+
} );
      if (cats[i].title == 'Category:Living people' || cats[i].title == 'Category:Possibly living people') {
+
} );
        addEditIntro('Template:BLP_editintro');
 
        break;
 
      }
 
    }
 
  });
 
 
}
 
}
  
 
/**
 
/**
  * Modifie Special:Search pour pouvoir utiliser différents moteurs de recherche,
+
  * Affiche un modèle Information sur la page de téléchargement de fichiers [[Spécial:Téléchargement]]
  * disponibles dans une boîte déroulante.
+
  * Voir aussi [[MediaWiki:Onlyifuploading.js]]
* Auteurs : Jakob Voss, Guillaume, importé depuis la Wiki allemande
 
* <pre><nowiki>
 
 
  */
 
  */
 +
if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Upload' ) {
 +
importScript( 'MediaWiki:Onlyifuploading.js' );
 +
}
  
function externalSearchEngines() {
+
} // Fin du code concernant l'espace de nom 'Special'
  if (typeof SpecialSearchEnhanced2Disabled != 'undefined') return;
 
  if (wgPageName != "Spécial:Recherche") return;
 
  
  var mainNode = document.getElementById("powersearch");
 
  if (!mainNode) mainNode = document.getElementById("search");
 
  if (!mainNode) return;
 
  
  var beforeNode = document.getElementById("mw-search-top-table");
+
// ESPACE DE NOM 'UTILISATEUR'
  if (!beforeNode) return;
+
if ( mw.config.get( 'wgNamespaceNumber' ) === 2 ) {
  beforeNode = beforeNode.nextSibling;
 
  if (!beforeNode) return;
 
 
  var firstEngine = "mediawiki";
 
 
  var choices = document.createElement("div");
 
  choices.setAttribute("id","searchengineChoices");
 
  choices.style.textAlign = "center";
 
 
  var lsearchbox = document.getElementById("searchText");
 
  var initValue = lsearchbox.value;
 
 
  var space = "";
 
  
  for (var id in searchEngines) {
+
/*
    var engine = searchEngines[id];
+
* Fonctionnement du [[Modèle:Cadre à onglets]]
if(engine.ShortName)
+
  * Le JavaScript principal se situe dans [[MediaWiki:Gadget-CadreOnglets.js]]
  {
+
  */
    if (space) choices.appendChild(space);
+
mw.hook( 'wikipage.content' ).add( function ( $content ) {
    space = document.createTextNode(" ");
+
if ( $content.find( '.cadre_a_onglets' ).length ) {
   
+
mw.loader.using( 'ext.gadget.CadreOnglets', function () {
    var attr = {
+
CadreOnglets_Init( $content );
      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);
+
} // 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' );
 +
};
  
function changeSearchEngine(selectedId, searchTerms) {
+
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' )
 +
);
  
  var currentId = document.getElementById("searchengineChoices").currentChoice;
+
$specialBib.append( $menu );
  if (selectedId == currentId) return;
 
 
  document.getElementById("searchengineChoices").currentChoice = selectedId;
 
  var radio = document.getElementById('searchengineRadio-'  + selectedId);
 
  radio.checked = "checked";
 
 
  var engine = searchEngines[selectedId];
 
  var p = engine.Template.indexOf('?');
 
  var params = engine.Template.substr(p+1);
 
 
  var form;
 
  if (document.forms["search"]) {
 
    form = document.forms["search"];
 
  } else {
 
    form = document.getElementById("powersearch");
 
  }
 
  form.setAttribute("action", engine.Template.substr(0,p));
 
 
  var l = ("" + params).split("&");
 
  for (var idx = 0;idx < l.length;idx++) {
 
    var p = l[idx].split("=");
 
    var pValue = p[1];
 
 
    if (pValue == "{language}") {
 
    } else if (pValue == "{searchTerms}") {
 
      var input;
 
      input = document.getElementById("searchText");
 
 
      input.name = p[0];
 
    } else {
 
      var input = document.getElementById("searchengineextraparam");
 
 
      input.name = p[0];
 
      input.value = pValue;
 
    }
 
  }
 
}
 
  
if (wgPageName == "Spécial:Recherche") {
+
/* default subset - try to use a cookie some day */
var searchEngines = {
+
chooseBibSubset( 0 );
  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);
+
 
 +
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' ) {
//</source>
+
$( ReplaceSourcePageInLinks );
 +
}

Version actuelle datée du 27 décembre 2020 à 17: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 );
}