MediaWiki:Common.js : Différence entre versions

De La Grande Bibliotheque de Tamriel
Aller à : navigation, rechercher
Ligne 1 : Ligne 1 :
 
/**
 
/**
  * Source : https://fr.wikipedia.org/w/index.php?title=MediaWiki:Common.js
+
  * Collapsible tables *********************************************************
 +
*
 +
* Description: Allows tables to be collapsed, showing only the header. See
 +
*              [[Wikipedia:NavFrame]].
 +
* Maintainers: [[User:R. Koot]]
 
  */
 
  */
  
/**
+
var autoCollapse = 2;
* Boîtes déroulantes
+
var collapseCaption = 'hide';
*
+
var expandCaption = 'show';
* Pour [[Modèle:Méta palette de navigation]]
+
 
*/
+
window.collapseTable = function ( tableIndex ) {
 +
    var Button = document.getElementById( 'collapseButton' + tableIndex );
 +
    var Table = document.getElementById( 'collapsibleTable' + tableIndex );
  
var Palette_Enrouler = '[masquer]';
+
    if ( !Table || !Button ) {
var Palette_Derouler  = '[afficher]';
+
        return false;
 +
    }
  
var Palette_max = 1;
+
    var Rows = Table.rows;
var Palette_index = -1;
+
    var i;
  
function Palette_toggle(indexPalette){
+
    if ( Button.firstChild.data === collapseCaption ) {
  var Button = document.getElementById( "collapseButton" + indexPalette);
+
        for ( i = 1; i < Rows.length; i++ ) {
  var Table = document.getElementById( "collapsibleTable" + indexPalette);
+
            Rows[i].style.display = 'none';
  if (!Table || !Button) return false;
+
        }
 +
        Button.firstChild.data = expandCaption;
 +
    } else {
 +
        for ( i = 1; i < Rows.length; i++ ) {
 +
            Rows[i].style.display = Rows[0].style.display;
 +
        }
 +
        Button.firstChild.data = collapseCaption;
 +
    }
 +
};
  
  var Rows = Table.rows;
+
function createCollapseButtons() {
  var RowDisplay = "none";
+
     var tableIndex = 0;
  if (Button.firstChild.data == Palette_Derouler) {
+
     var NavigationBoxes = {};
     Button.firstChild.data = Palette_Enrouler;
+
     var Tables = document.getElementsByTagName( 'table' );
     RowDisplay = Rows[0].style.display;
+
     var i;
  } else {
 
     Button.firstChild.data = Palette_Derouler;
 
  }
 
  for (var i = 1; i < Rows.length; i++) {
 
     Rows[i].style.display = RowDisplay
 
  }
 
}
 
  
function Palette(Element){
+
    function handleButtonLink( index, e ) {
  if(!Element) Element = document;
+
         window.collapseTable( index );
  var TableIndex = 0;
+
         e.preventDefault();
  var TableIndexes = new Array();
 
  var Tables = Element.getElementsByTagName( "table" );
 
  for ( var i = 0; i < Tables.length; i++ ) {
 
    if ( hasClass( Tables[i], "collapsible" ) ) {
 
      var Table = Tables[i];
 
      var Header = Table.getElementsByTagName( "tr" )[0].getElementsByTagName( "th" )[0];
 
      /* only add button and increment count if there is a header row to work with */
 
      if (Header) {
 
        TableIndex++
 
        Palette_index++;
 
        TableIndexes[Palette_index] = Table;
 
        Table.setAttribute( "id", "collapsibleTable" + Palette_index );
 
        var Button    = document.createElement( "span" );
 
        var ButtonLink = document.createElement( "a" );
 
        var ButtonText = document.createTextNode( Palette_Enrouler );
 
        Button.className = "navboxToggle";
 
        ButtonLink.setAttribute( "id", "collapseButton" + Palette_index );
 
         ButtonLink.setAttribute( "href", "javascript:;" );
 
         $(ButtonLink).click(new Function( "evt", "Palette_toggle(" + Palette_index + " ); evt.preventDefault();") );
 
        ButtonLink.appendChild( ButtonText );
 
        Button.appendChild( document.createTextNode("\u00a0"));  //ajout d'un espace insécable pour décoller ce bouton du texte de la celulle
 
        Button.appendChild( ButtonLink );
 
        Header.insertBefore( Button, Header.childNodes[0] );
 
      }
 
 
     }
 
     }
  }
 
  for(var index in TableIndexes){
 
    var Table = TableIndexes[index];
 
    if(hasClass(Table,"collapsed")||(TableIndex>Palette_max && hasClass(Table,"autocollapse")))
 
    Palette_toggle(index);
 
  }
 
}
 
addOnloadHook(Palette);
 
  
 +
    for ( i = 0; i < Tables.length; i++ ) {
 +
        if ( $( Tables[i] ).hasClass( 'collapsible' ) ) {
  
/**
+
            /* only add button and increment count if there is a header row to work with */
* Pour [[Modèle:Boîte déroulante]]
+
            var HeaderRow = Tables[i].getElementsByTagName( 'tr' )[0];
*/
+
            if ( !HeaderRow ) continue;
 +
            var Header = HeaderRow.getElementsByTagName( 'th' )[0];
 +
            if ( !Header ) continue;
  
var BoiteDeroulante_Enrouler = '[masquer]';
+
            NavigationBoxes[ tableIndex ] = Tables[i];
var BoiteDeroulante_Derouler  = '[afficher]';
+
            Tables[i].setAttribute( 'id', 'collapsibleTable' + tableIndex );
var BoiteDeroulante_max = 0;
 
var BoiteDeroulante_index = -1;
 
  
function BoiteDeroulante_toggle(indexBoiteDeroulante){
+
            var Button    = document.createElement( 'span' );
      var NavFrame = document.getElementById("NavFrame" + indexBoiteDeroulante);
+
            var ButtonLink = document.createElement( 'a' );
      var NavToggle = document.getElementById("NavToggle" + indexBoiteDeroulante);
+
            var ButtonText = document.createTextNode( collapseCaption );
      var CaptionContainer = document.getElementById("NavCaption" + indexBoiteDeroulante);
 
      if (!NavFrame || !NavToggle || !CaptionContainer) return;
 
      var caption = new Array();
 
      var CaptionSpans = CaptionContainer.getElementsByTagName('span');
 
      caption[0] = CaptionSpans[0].innerHTML;
 
      caption[1] = CaptionSpans[1].innerHTML;
 
  
      var Contents = NavFrame.getElementsByTagName('div');
+
             Button.className = 'collapseButton'; /* Styles are declared in Common.css */
      if (NavToggle.innerHTML == caption[1]) {
 
             NavToggle.innerHTML = caption[0];
 
            for(var a=0,m=Contents.length;a<m;a++){
 
                  if(hasClass(Contents[a], "NavContent")){
 
                        Contents[a].style.display = 'none';
 
                        return;
 
                  }
 
            }
 
      }else{
 
            NavToggle.innerHTML = caption[1];
 
            for(var a=0,m=Contents.length;a<m;a++){
 
                  if(hasClass(Contents[a], "NavContent")){
 
                        Contents[a].style.display = 'block';
 
                        return;
 
                  }
 
            }
 
      }
 
}
 
  
function BoiteDeroulante(Element){
+
            ButtonLink.style.color = Header.style.color;
      if(!Element) Element = document;
+
            ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex );
      var NavFrameCount = -1;
+
            ButtonLink.setAttribute( 'href', '#' );
      var NavFrames = Element.getElementsByTagName("div");
+
             $( ButtonLink ).on( 'click', $.proxy( handleButtonLink, ButtonLink, tableIndex ) );
      for(var i=0,l=NavFrames.length;i<l;i++){
+
            ButtonLink.appendChild( ButtonText );
             if(hasClass(NavFrames[i], "NavFrame")){
 
                  var NavFrame = NavFrames[i];
 
                  NavFrameCount++;
 
                  BoiteDeroulante_index++;
 
  
                  if (NavFrame.title && NavFrame.title.indexOf("/")!=-1) {
+
            Button.appendChild( document.createTextNode( '[' ) );
                        var Enrouler = NavFrame.title.HTMLize().split("/")[1];
+
            Button.appendChild( ButtonLink );
                        var Derouler = NavFrame.title.HTMLize().split("/")[0];
+
            Button.appendChild( document.createTextNode( ']' ) );
                  }else{
 
                        var Enrouler = BoiteDeroulante_Enrouler;
 
                        var Derouler = BoiteDeroulante_Derouler;
 
                  }
 
                  NavFrame.title='';
 
                  var CaptionContainer = document.createElement('span');
 
                  CaptionContainer.id = 'NavCaption' + BoiteDeroulante_index;
 
                  CaptionContainer.style.display = "none";
 
                  CaptionContainer.innerHTML = '<span>' + Derouler + '</span><span>' + Enrouler + '</span>';
 
                  NavFrame.appendChild(CaptionContainer);
 
  
                  var NavToggle = document.createElement("a");
+
            Header.insertBefore( Button, Header.firstChild );
                  NavToggle.className = 'NavToggle';
+
            tableIndex++;
                  NavToggle.id = 'NavToggle' + BoiteDeroulante_index;
+
        }
                  NavToggle.href = 'javascript:BoiteDeroulante_toggle(' + BoiteDeroulante_index + ');';
+
    }
                  var NavToggleText = document.createTextNode(Enrouler);
 
                  NavToggle.appendChild(NavToggleText);
 
  
                  NavFrame.insertBefore( NavToggle, NavFrame.firstChild );
+
    for ( i = 0;  i < tableIndex; i++ ) {
                  NavFrame.id = 'NavFrame' + BoiteDeroulante_index;
+
        if ( $( NavigationBoxes[i] ).hasClass( 'collapsed' ) || ( tableIndex >= autoCollapse && $( NavigationBoxes[i] ).hasClass( 'autocollapse' ) ) ) {
                  if (BoiteDeroulante_max <= NavFrameCount) {
+
            window.collapseTable( i );
                        BoiteDeroulante_toggle(BoiteDeroulante_index);
+
        }
                  }
+
        else if ( $( NavigationBoxes[i] ).hasClass ( 'innercollapse' ) ) {
 +
            var element = NavigationBoxes[i];
 +
            while ((element = element.parentNode)) {
 +
                if ( $( element ).hasClass( 'outercollapse' ) ) {
 +
                    window.collapseTable ( i );
 +
                    break;
 +
                }
 
             }
 
             }
      }
+
        }
 
+
    }
 
}
 
}
addOnloadHook(BoiteDeroulante);
 
  
 
+
mw.hook( 'wikipage.content' ).add( createCollapseButtons );
/*********************************/
 
/* Autres fonctions non classées */
 
/*********************************/
 
 
/*
 
* Fonction
 
*
 
* Récupère la valeur d'une variable globale en gérant le cas lorsque cette variable n'existe pas
 
* @param nom_variable Nom de la variable dont on veut connaître la valeur
 
* @param val_defaut Valeur par défaut si la variable n'existe pas
 
* @return La valeur de la variable, ou val_defaut si la variable n'existe pas
 
*
 
* Auteur : Sanao
 
* Dernière révision : 22 novembre 2007
 
*/
 
function getVarValue(nom_variable, val_defaut)
 
{
 
var result = null;
 
 
try {
 
result = eval(nom_variable.toString());
 
} catch (e) {
 
result = val_defaut;
 
}
 
 
return(result);
 
}
 
 
/*
 
* Fonction
 
*
 
* Retourne une chaîne de caractères de la date courante selon dans un certain format
 
* @param format Format de la date "j" pour le jour, "m" pour le mois et "a" pour l'année. Ainsi si l'on est le 21 novembre 2007 et l'on passe en paramètre cette chaîne "a_m_d", la chaîne retournée sera "2007_novembre_21"
 
* Auteur : Sanao
 
* Dernière révision : 21 novembre 2007
 
*/
 
function getStrDateToday(format)
 
{
 
  var str_mois = new Array();
 
  with (str_mois)
 
  {
 
    push("janvier");
 
    push("février");
 
    push("mars");
 
    push("avril");
 
    push("mai");
 
    push("juin");
 
    push("juillet");
 
    push("août");
 
    push("septembre");
 
    push("octobre");
 
    push("novembre");
 
    push("décembre");
 
  }
 
  var today = new Date();
 
  var day = today.getDate();
 
  var year = today.getYear();
 
  if (year < 2000)
 
  {
 
    year = year + 1900;
 
  }
 
  var str_date = format;
 
 
  //Création de la chaîne
 
  var regex = /j/gi;
 
  str_date = str_date.replace(regex, day.toString());
 
  regex = /a/gi;
 
  str_date = str_date.replace(regex, year.toString());
 
  regex = /m/gi;
 
  str_date = str_date.replace(regex, str_mois[today.getMonth()]);
 
 
  return (str_date);
 
}
 
 
/* petites fonctions pratiques  - Darkoneko, 09/01/2008 */
 
 
//créé un lien et le retourne.
 
//le parametre onclick est facultatif.
 
function createAdressNode(href, texte, onclick) {
 
  var a = document.createElement('a')
 
  a.href = href
 
  a.appendChild(document.createTextNode( texte ) )
 
  if(arguments.length == 3) {  a.setAttribute("onclick", onclick )  }
 
 
  return a
 
}
 
 
//Créé un cookie. il n'existais qu'une version dédiée à l'accueil. Celle ci est plus générique
 
//le parametre duree est en jours
 
function setCookie(nom, valeur, duree ) {
 
  var expDate = new Date()
 
  expDate.setTime(expDate.getTime() + ( duree * 24 * 60 * 60 * 1000))
 
  document.cookie = nom + "=" + escape(valeur) + ";expires=" + expDate.toGMTString() + ";path=/"
 
}
 
 
/*
 
* Chargement des styles Agora.
 
*/
 
if( [
 
2, 3, // (Discussion) Utilisateur:
 
4, // Wikipédia:
 
10, // Modèle:
 
12, // Aide:
 
100, 101, // (Discussion) Portail:
 
102, 103 // (Discussion) Projet:
 
].indexOf(mw.config.get('wgNamespaceNumber')) >= 0 ) {
 
    mw.loader.load( 'mediawiki.ui' );
 
}
 

Version du 1 janvier 2014 à 17:03

/**
 * Collapsible tables *********************************************************
 *
 * Description: Allows tables to be collapsed, showing only the header. See
 *              [[Wikipedia:NavFrame]].
 * Maintainers: [[User:R. Koot]]
 */

var autoCollapse = 2;
var collapseCaption = 'hide';
var expandCaption = 'show';

window.collapseTable = function ( tableIndex ) {
    var Button = document.getElementById( 'collapseButton' + tableIndex );
    var Table = document.getElementById( 'collapsibleTable' + tableIndex );

    if ( !Table || !Button ) {
        return false;
    }

    var Rows = Table.rows;
    var i;

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

function createCollapseButtons() {
    var tableIndex = 0;
    var NavigationBoxes = {};
    var Tables = document.getElementsByTagName( 'table' );
    var i;

    function handleButtonLink( index, e ) {
        window.collapseTable( index );
        e.preventDefault();
    }

    for ( i = 0; i < Tables.length; i++ ) {
        if ( $( Tables[i] ).hasClass( 'collapsible' ) ) {

            /* only add button and increment count if there is a header row to work with */
            var HeaderRow = Tables[i].getElementsByTagName( 'tr' )[0];
            if ( !HeaderRow ) continue;
            var Header = HeaderRow.getElementsByTagName( 'th' )[0];
            if ( !Header ) continue;

            NavigationBoxes[ tableIndex ] = Tables[i];
            Tables[i].setAttribute( 'id', 'collapsibleTable' + tableIndex );

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

            Button.className = 'collapseButton';  /* Styles are declared in Common.css */

            ButtonLink.style.color = Header.style.color;
            ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex );
            ButtonLink.setAttribute( 'href', '#' );
            $( ButtonLink ).on( 'click', $.proxy( handleButtonLink, ButtonLink, tableIndex ) );
            ButtonLink.appendChild( ButtonText );

            Button.appendChild( document.createTextNode( '[' ) );
            Button.appendChild( ButtonLink );
            Button.appendChild( document.createTextNode( ']' ) );

            Header.insertBefore( Button, Header.firstChild );
            tableIndex++;
        }
    }

    for ( i = 0;  i < tableIndex; i++ ) {
        if ( $( NavigationBoxes[i] ).hasClass( 'collapsed' ) || ( tableIndex >= autoCollapse && $( NavigationBoxes[i] ).hasClass( 'autocollapse' ) ) ) {
            window.collapseTable( i );
        } 
        else if ( $( NavigationBoxes[i] ).hasClass ( 'innercollapse' ) ) {
            var element = NavigationBoxes[i];
            while ((element = element.parentNode)) {
                if ( $( element ).hasClass( 'outercollapse' ) ) {
                    window.collapseTable ( i );
                    break;
                }
            }
        }
    }
}

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