MediaWiki:Common.js : Différence entre versions

De Métaux stratégiques R21
imported>Jacques Ducloy
imported>Jacques Ducloy
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
+
/**
{
+
  * Boîtes déroulantes
    importScript("MediaWiki:Common.js/edit.js")
 
}
 
else if (wgPageName == "Special:Watchlist") //watchlist scripts
 
{
 
    importScript("MediaWiki:Common.js/watchlist.js")
 
}
 
 
 
 
 
/** Sysop Javascript *******************************************************
 
  *
 
  * Description: Allows for sysop-specific Javascript at [[MediaWiki:Sysop.js]].
 
  */
 
function sysopFunctions() {
 
    if ( wgUserGroups && !window.disableSysopJS ) {
 
        for ( var g = 0; g < wgUserGroups.length; ++g ) {
 
            if ( wgUserGroups[g] == "sysop" ) {
 
                importScript( "MediaWiki:Sysop.js" );
 
                break;
 
            }
 
        }
 
    }
 
}
 
 
 
addOnloadHook( sysopFunctions );
 
 
 
 
 
/** WikiMiniAtlas *******************************************************
 
  *
 
  *  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 {
 
    var metaBase = "http://meta.wikimedia.org";
 
}
 
importScriptURI(metaBase+"/w/index.php?title=MediaWiki:Wikiminiatlas.js&action=raw&ctype=text/javascript&smaxage=21600&maxage=86400")
 
 
 
 
 
/** Mobile Redirect Helper ************************************************
 
*
 
*  Redirects to the mobile-optimized gateway at en.m.wikimedia.org
 
*  for viewers on iPhone, iPod Touch, Palm Pre, and Android devices.
 
*
 
*  You can turn off the redirect by setting the cookie "stopMobileRedirect=true"
 
*
 
*  This code cannot be imported, because the JS only loads after all other files
 
*  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.
 
 
  *
 
  *
  * Maintainer: [[User:Brion VIBBER]], [[User:hcatlin]]
+
  * Pour [[Modèle:Méta palette de navigation]]
 
  */
 
  */
if (/(Android|iPhone|iPod|webOS)/.test(navigator.userAgent)) {
 
 
  var wgMainPageName = 'Main_Page';
 
 
  var stopMobileRedirectCookieExists = function() {
 
    return (document.cookie.indexOf("stopMobileRedirect=true") >= 0);
 
  }
 
 
  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();
 
  }
 
}
 
 
  
/* Scripts specific to Internet Explorer */
+
var Palette_Enrouler = '[masquer]';
 +
var Palette_Derouler = '[afficher]';
  
if (navigator.appName == "Microsoft Internet Explorer")
+
var Palette_max = 1;
{
 
    /** 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
+
function Palette_toggle( $table ) {
    appendCSS( '@media print { sup, sub, p, .documentDescription { line-height: normal; }}');
+
$table.find( 'tr:not(:first)' ).toggleClass( 'navboxHidden' );
 
 
    // IE overflow bug
 
    appendCSS('div.overflowbugx { overflow-x: scroll !important; overflow-y: hidden !important; } div.overflowbugy { overflow-y: scroll !important; overflow-x: hidden !important; }');
 
   
 
    //Import scripts specific to Internet Explorer 6
 
    if (navigator.appVersion.substr(22, 1) == "6") {
 
        importScript("MediaWiki:Common.js/IE60Fixes.js")
 
    }
 
 
}
 
}
  
 +
function Palette( element ) {
 +
if ( !element ) {
 +
element = document;
 +
}
 +
var $tables = $( element ).find( 'table.collapsible' );
 +
var groups = {};
  
/* Test if an element has a certain class **************************************
+
$tables.each( function( _, table ) {
*
+
var group = table.getAttribute('data-autocollapse-group') || '__default__';
* Description: Uses regular expressions and caching for better performance.
+
groups[group] = ( groups[group] || 0 ) + 1;
* Maintainers: [[User:Mike Dillon]], [[User:R. Koot]], [[User:SG]]
+
} );
*/
 
  
var hasClass = (function () {
+
$tables.each( function( _, table ) {
    var reCache = {};
+
var $table = $( table );
    return function (element, className) {
 
        return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className);
 
    };
 
})();
 
  
 +
var group = table.getAttribute('data-autocollapse-group') || '__default__';
 +
var autoCollapse = groups[group] > Palette_max;
 +
var collapsed = $table.hasClass( 'collapsed' ) || ( autoCollapse && $table.hasClass( 'autocollapse' ) );
  
/** Interwiki links to featured articles ***************************************
+
$table.find( 'tr:first th:first' ).prepend(
*
+
$( '<span class="navboxToggle">\u00a0</span>' ).append(
*  Description: Highlights interwiki links to featured articles (or
+
$( '<a href="#">' + (collapsed ? Palette_Derouler : Palette_Enrouler) + '</a>' ).click( function() {
*              equivalents) by changing the bullet before the interwiki link
+
var $this = $( this );
*              into a star.
+
if ( $this.text() === Palette_Enrouler ) {
*  Maintainers: [[User:R. Koot]]
+
$this.text( Palette_Derouler );
*/
+
} else {
 
+
$this.text( Palette_Enrouler );
function LinkFA()  
+
}
{
+
Palette_toggle( $table );
    if ( document.getElementById( "p-lang" ) ) {
+
return false;
        var InterwikiLinks = document.getElementById( "p-lang" ).getElementsByTagName( "li" );
+
} )
 
+
)
        for ( var i = 0; i < InterwikiLinks.length; i++ ) {
+
);
            if ( document.getElementById( InterwikiLinks[i].className + "-fa" ) ) {
+
if ( collapsed ) {
                InterwikiLinks[i].className += " FA"
+
Palette_toggle( $table );
                InterwikiLinks[i].title = "This is a featured article in another language.";
+
}
            }
+
} );
        }
 
    }
 
 
}
 
}
 +
$( function() {
 +
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_Enrouler = '[masquer]';
var collapseCaption = "hide";
+
var BoiteDeroulante_Derouler = '[afficher]';
var expandCaption = "show";
+
var BoiteDeroulante_max = 0;
 
+
var BoiteDeroulante_index = -1;
function collapseTable( tableIndex )
 
{
 
    var Button = document.getElementById( "collapseButton" + tableIndex );
 
    var Table = document.getElementById( "collapsibleTable" + tableIndex );
 
 
 
    if ( !Table || !Button ) {
 
        return false;
 
    }
 
  
    var Rows = Table.rows;
+
function BoiteDeroulante_toggle(indexBoiteDeroulante){
 +
var a, m;
 +
var NavFrame = document.getElementById("NavFrame" + indexBoiteDeroulante);
 +
var NavToggle = document.getElementById("NavToggle" + indexBoiteDeroulante);
 +
var CaptionContainer = document.getElementById("NavCaption" + indexBoiteDeroulante);
 +
if (!NavFrame || !NavToggle || !CaptionContainer) {
 +
return;
 +
}
 +
var caption = [];
 +
var CaptionSpans = CaptionContainer.getElementsByTagName('span');
 +
caption[0] = CaptionSpans[0].innerHTML;
 +
caption[1] = CaptionSpans[1].innerHTML;
  
    if ( Button.firstChild.data == collapseCaption ) {
+
var Contents = NavFrame.getElementsByTagName('div');
        for ( var i = 1; i < Rows.length; i++ ) {
+
if ( NavToggle.innerHTML === caption[1] ) {
            Rows[i].style.display = "none";
+
NavToggle.innerHTML = caption[0];
        }
+
for ( a=0, m=Contents.length; a<m; a++ ) {
        Button.firstChild.data = expandCaption;
+
if ( $( Contents[a] ).hasClass( 'NavContent' ) ) {
    } else {
+
Contents[a].style.display = 'none';
        for ( var i = 1; i < Rows.length; i++ ) {
+
return;
            Rows[i].style.display = Rows[0].style.display;
+
}
        }
+
}
        Button.firstChild.data = collapseCaption;
+
} else {
    }
+
NavToggle.innerHTML = caption[1];
 +
for ( a=0, m=Contents.length; a<m; a++ ) {
 +
if ( $(Contents[a]).hasClass("NavContent") ) {
 +
Contents[a].style.display = 'block';
 +
return;
 +
}
 +
}
 +
}
 
}
 
}
  
function createCollapseButtons()
+
function BoiteDeroulante(Element){
{
+
if (!Element) {
    var tableIndex = 0;
+
Element = document;
    var NavigationBoxes = new Object();
+
}
    var Tables = document.getElementsByTagName( "table" );
+
var i, l, Enrouler, Derouler, CaptionContainer, NavToggle, NavToggleText, NavFrame;
 
+
var NavFrameCount = -1;
    for ( var i = 0; i < Tables.length; i++ ) {
+
var NavFrames = Element.getElementsByTagName("div");
        if ( hasClass( Tables[i], "collapsible" ) ) {
+
for ( i=0, l=NavFrames.length; i<l; i++ ){
 
+
if ( $( NavFrames[i] ).hasClass( 'NavFrame' ) ){
            /* only add button and increment count if there is a header row to work with */
+
NavFrame = NavFrames[i];
            var HeaderRow = Tables[i].getElementsByTagName( "tr" )[0];
+
NavFrameCount++;
            if (!HeaderRow) continue;
+
BoiteDeroulante_index++;
            var Header = HeaderRow.getElementsByTagName( "th" )[0];
 
            if (!Header) continue;
 
 
 
            NavigationBoxes[ tableIndex ] = Tables[i];
 
            Tables[i].setAttribute( "id", "collapsibleTable" + tableIndex );
 
  
            var Button    = document.createElement( "span" );
+
if (NavFrame.title && NavFrame.title.indexOf("/") !== -1) {
            var ButtonLink = document.createElement( "a" );
+
Enrouler = NavFrame.title.HTMLize().split("/")[1];
            var ButtonText = document.createTextNode( collapseCaption );
+
Derouler = NavFrame.title.HTMLize().split("/")[0];
 +
} else {
 +
Enrouler = BoiteDeroulante_Enrouler;
 +
Derouler = BoiteDeroulante_Derouler;
 +
}
 +
NavFrame.title='';
 +
CaptionContainer = document.createElement('span');
 +
CaptionContainer.id = 'NavCaption' + BoiteDeroulante_index;
 +
CaptionContainer.style.display = "none";
 +
CaptionContainer.innerHTML = '<span>' + Derouler + '</span><span>' + Enrouler + '</span>';
 +
NavFrame.appendChild(CaptionContainer);
  
            Button.className = "collapseButton"; //Styles are declared in Common.css
+
NavToggle = document.createElement("a");
 +
NavToggle.className = 'NavToggle';
 +
NavToggle.id = 'NavToggle' + BoiteDeroulante_index;
 +
NavToggle.href = 'javascript:BoiteDeroulante_toggle(' + BoiteDeroulante_index + ');';
 +
NavToggleText = document.createTextNode(Enrouler);
 +
NavToggle.appendChild(NavToggleText);
  
            ButtonLink.style.color = Header.style.color;
+
NavFrame.insertBefore( NavToggle, NavFrame.firstChild );
            ButtonLink.setAttribute( "id", "collapseButton" + tableIndex );
+
NavFrame.id = 'NavFrame' + BoiteDeroulante_index;
            ButtonLink.setAttribute( "href", "javascript:collapseTable(" + tableIndex + ");" );
+
if (BoiteDeroulante_max <= NavFrameCount) {
            ButtonLink.appendChild( ButtonText );
+
BoiteDeroulante_toggle(BoiteDeroulante_index);
 +
}
 +
}
 +
}
  
            Button.appendChild( document.createTextNode( "[" ) );
 
            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" ) ) ) {
 
            collapseTable( i );
 
        }
 
        else if ( hasClass( NavigationBoxes[i], "innercollapse" ) ) {
 
            var element = NavigationBoxes[i];
 
            while (element = element.parentNode) {
 
                if ( hasClass( element, "outercollapse" ) ) {
 
                    collapseTable ( i );
 
                    break;
 
                }
 
            }
 
        }
 
    }
 
 
}
 
}
  
addOnloadHook( createCollapseButtons );
+
mw.hook( 'wikipage.content' ).add( function() {
 
+
BoiteDeroulante();
 
+
} );
/** Dynamic Navigation Bars (experimental) *************************************
 
*
 
*  Description: See [[Wikipedia:NavFrame]].
 
*  Maintainers: UNMAINTAINED
 
*/
 
 
 
// set up the words in your language
 
var NavigationBarHide = '[' + collapseCaption + ']';
 
var NavigationBarShow = '[' + expandCaption + ']';
 
 
 
// shows and hides content and picture (if available) of navigation bars
 
// Parameters:
 
//    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) {
 
        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
 
    } else if (NavToggle.firstChild.data == NavigationBarShow) {
 
        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';
 
            }
 
        }
 
        NavToggle.firstChild.data = NavigationBarHide;
 
    }
 
}
 
 
 
// adds show/hide-button to navigation bars
 
function createNavigationBarToggleButton()
 
{
 
    var indexNavigationBar = 0;
 
    // iterate over all < div >-elements
 
    var divs = document.getElementsByTagName("div");
 
    for (var i = 0; NavFrame = divs[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 + ');');
 
 
 
            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++) {
 
                if (hasClass(NavFrame.childNodes[j], "NavHead")) {
 
                    NavFrame.childNodes[j].appendChild(NavToggle);
 
                }
 
            }
 
            NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
 
        }
 
    }
 
}
 
 
 
addOnloadHook( createNavigationBarToggleButton );
 
 
 
 
 
/** Main Page layout fixes *********************************************************
 
*
 
*  Description: Adds an additional link to the complete list of languages available.
 
*  Maintainers: [[User:AzaToth]], [[User:R. Koot]], [[User:Alex Smotrov]]
 
*/
 
 
 
if (wgPageName == 'Main_Page' || wgPageName == 'Talk:Main_Page')
 
    addOnloadHook(function () {
 
        addPortletLink('p-lang', 'http://meta.wikimedia.org/wiki/List_of_Wikipedias',
 
                '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'
 
    }
 
)
 
 
 
 
 
/** Table sorting fixes ************************************************
 
  *
 
  *  Description: Disables code in table sorting routine to set classes on even/odd rows
 
  *  Maintainers: [[User:Random832]]
 
  */
 
 
 
ts_alternate_row_colors = false;
 
 
 
 
 
/***** uploadwizard_newusers ********
 
* Switches in a message for non-autoconfirmed users at [[Wikipedia:Upload]]
 
*
 
*  Maintainers: [[User:Krimpet]]
 
****/
 
function uploadwizard_newusers() {
 
  if (wgNamespaceNumber == 4 && wgTitle == "Upload" && wgAction == "view") {
 
    var oldDiv = document.getElementById("autoconfirmedusers"),
 
        newDiv = document.getElementById("newusers");
 
    if (oldDiv && newDiv) {
 
      if (typeof wgUserGroups == "object" && wgUserGroups) {
 
        for (i = 0; i < wgUserGroups.length; i++) {
 
          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 **/
 
 
 
var __ipv6wwwtest_factor = 100;
 
var __ipv6wwwtest_done = 0;
 
if ((wgServer != "https://secure.wikimedia.org") && (Math.floor(Math.random()*__ipv6wwwtest_factor)==42)) {
 
    importScript("MediaWiki:Common.js/IPv6.js");
 
}
 
 
 
/** Magic editintros ****************************************************
 
*
 
*  Description: Adds editintros on disambiguation pages and BLP pages.
 
*  Maintainers: [[User:RockMFR]]
 
*/
 
 
 
function addEditIntro(name)
 
{
 
  var el = document.getElementById('ca-edit');
 
  if (!el)
 
    return;
 
  el = el.getElementsByTagName('a')[0];
 
  if (el)
 
    el.href += '&editintro=' + name;
 
}
 
 
 
 
 
if (wgNamespaceNumber == 0) {
 
  addOnloadHook(function(){
 
    if (document.getElementById('disambigbox'))
 
      addEditIntro('Template:Disambig_editintro');
 
  });
 
 
 
  addOnloadHook(function(){
 
    var cats = document.getElementById('mw-normal-catlinks');
 
    if (!cats)
 
      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,
 
* disponibles dans une boîte déroulante.
 
* Auteurs : Jakob Voss, Guillaume, importé depuis la Wiki allemande
 
* <pre><nowiki>
 
*/
 
 
 
function externalSearchEngines() {
 
  if (typeof SpecialSearchEnhanced2Disabled != 'undefined') return;
 
  if (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");
 
  if (!beforeNode) return;
 
  beforeNode = beforeNode.nextSibling;
 
  if (!beforeNode) return;
 
 
  var firstEngine = "mediawiki";
 
 
  var choices = document.createElement("div");
 
  choices.setAttribute("id","searchengineChoices");
 
  choices.style.textAlign = "center";
 
 
  var lsearchbox = document.getElementById("searchText");
 
  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) {
 
 
 
  var currentId = document.getElementById("searchengineChoices").currentChoice;
 
  if (selectedId == currentId) return;
 
 
  document.getElementById("searchengineChoices").currentChoice = selectedId;
 
  var radio = document.getElementById('searchengineRadio-'  + selectedId);
 
  radio.checked = "checked";
 
 
  var engine = searchEngines[selectedId];
 
  var p = engine.Template.indexOf('?');
 
  var params = engine.Template.substr(p+1);
 
 
  var form;
 
  if (document.forms["search"]) {
 
    form = document.forms["search"];
 
  } else {
 
    form = document.getElementById("powersearch");
 
  }
 
  form.setAttribute("action", engine.Template.substr(0,p));
 
 
  var l = ("" + params).split("&");
 
  for (var idx = 0;idx < l.length;idx++) {
 
    var p = l[idx].split("=");
 
    var pValue = p[1];
 
 
    if (pValue == "{language}") {
 
    } else if (pValue == "{searchTerms}") {
 
      var input;
 
      input = document.getElementById("searchText");
 
 
      input.name = p[0];
 
    } else {
 
      var input = document.getElementById("searchengineextraparam");
 
 
      input.name = p[0];
 
      input.value = pValue;
 
    }
 
  }
 
}
 
 
 
if (wgPageName == "Spécial:Recherche") {
 
var searchEngines = {
 
  mediawiki: {
 
    ShortName: "Recherche interne",
 
    Template: "/udl-r21-mstr.fr/index.php?search={searchTerms}"
 
  },
 
  wicriInpl: {
 
    ShortName: "Wicri (Inpl) via Google",
 
    Template: "http://www.google.fr/search?as_sitesearch=ticri.univ-lorraine.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);
 
}
 
 
 
 
 
//</source>
 

Version du 18 avril 2017 à 16:19

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

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

var Palette_max = 1;

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

function Palette( element ) {
	if ( !element ) {
		element = document;
	}
	var $tables = $( element ).find( 'table.collapsible' );
	var groups = {};

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

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

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

		$table.find( 'tr:first th:first' ).prepend(
			$( '<span class="navboxToggle">\u00a0</span>' ).append(
				$( '<a href="#">' + (collapsed ? Palette_Derouler : Palette_Enrouler) + '</a>' ).click( function() {
					var $this = $( this );
					if ( $this.text() === Palette_Enrouler ) {
						$this.text( Palette_Derouler );
					} else {
						$this.text( Palette_Enrouler );
					}
					Palette_toggle( $table );
					return false;
				} )
			)
		);
		if ( collapsed ) {
			Palette_toggle( $table );
		}
	} );
}
$( function() {
	Palette();
} );


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

var BoiteDeroulante_Enrouler = '[masquer]';
var BoiteDeroulante_Derouler = '[afficher]';
var BoiteDeroulante_max = 0;
var BoiteDeroulante_index = -1;

function BoiteDeroulante_toggle(indexBoiteDeroulante){
	var a, m;
	var NavFrame = document.getElementById("NavFrame" + indexBoiteDeroulante);
	var NavToggle = document.getElementById("NavToggle" + indexBoiteDeroulante);
	var CaptionContainer = document.getElementById("NavCaption" + indexBoiteDeroulante);
	if (!NavFrame || !NavToggle || !CaptionContainer) {
		return;
	}
	var caption = [];
	var CaptionSpans = CaptionContainer.getElementsByTagName('span');
	caption[0] = CaptionSpans[0].innerHTML;
	caption[1] = CaptionSpans[1].innerHTML;

	var Contents = NavFrame.getElementsByTagName('div');
	if ( NavToggle.innerHTML === caption[1] ) {
		NavToggle.innerHTML = caption[0];
		for ( a=0, m=Contents.length; a<m; a++ ) {
			if ( $( Contents[a] ).hasClass( 'NavContent' ) ) {
				Contents[a].style.display = 'none';
				return;
			}
		}
	} else {
		NavToggle.innerHTML = caption[1];
		for ( a=0, m=Contents.length; a<m; a++ ) {
			if ( $(Contents[a]).hasClass("NavContent") ) {
				Contents[a].style.display = 'block';
				return;
			}
		}
	}
}

function BoiteDeroulante(Element){
	if (!Element) {
		Element = document;
	}
	var i, l, Enrouler, Derouler, CaptionContainer, NavToggle, NavToggleText, NavFrame;
	var NavFrameCount = -1;
	var NavFrames = Element.getElementsByTagName("div");
	for ( i=0, l=NavFrames.length; i<l; i++ ){
		if ( $( NavFrames[i] ).hasClass( 'NavFrame' ) ){
			NavFrame = NavFrames[i];
			NavFrameCount++;
			BoiteDeroulante_index++;

			if (NavFrame.title && NavFrame.title.indexOf("/") !== -1) {
				Enrouler = NavFrame.title.HTMLize().split("/")[1];
				Derouler = NavFrame.title.HTMLize().split("/")[0];
			} else {
				Enrouler = BoiteDeroulante_Enrouler;
				Derouler = BoiteDeroulante_Derouler;
			}
			NavFrame.title='';
			CaptionContainer = document.createElement('span');
			CaptionContainer.id = 'NavCaption' + BoiteDeroulante_index;
			CaptionContainer.style.display = "none";
			CaptionContainer.innerHTML = '<span>' + Derouler + '</span><span>' + Enrouler + '</span>';
			NavFrame.appendChild(CaptionContainer);

			NavToggle = document.createElement("a");
			NavToggle.className = 'NavToggle';
			NavToggle.id = 'NavToggle' + BoiteDeroulante_index;
			NavToggle.href = 'javascript:BoiteDeroulante_toggle(' + BoiteDeroulante_index + ');';
			NavToggleText = document.createTextNode(Enrouler);
			NavToggle.appendChild(NavToggleText);

			NavFrame.insertBefore( NavToggle, NavFrame.firstChild );
			NavFrame.id = 'NavFrame' + BoiteDeroulante_index;
			if (BoiteDeroulante_max <= NavFrameCount) {
				BoiteDeroulante_toggle(BoiteDeroulante_index);
			}
		}
	}

}

mw.hook( 'wikipage.content' ).add( function() {
	BoiteDeroulante();
} );