Projet:Scripts et gadgets/Refonte Common.js avec jQuery

Une page de Wikipédia, l'encyclopédie libre.
/**
 * 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 : http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/skins/common/wikibits.js?view=log  */
/**********************************************************************************************************/

/**
 * Projet JavaScript
 * 
 * Historique :
 * - introduit par Seb35 le ?? après discussion sur le Projet:JavaScript
 * - jquerifié par Seb35 le 02/03/2011
 */
function obtenir( name ) {
	mw.loader.load( mw.config.get( 'wgScript' ) + '?title=' + mw.util.wikiUrlencode( 'MediaWiki:Gadget-' + name + '.js' ) + '&action=raw&ctype=text/javascript', 'text/javascript' );
}





/**
 * Transformer les pages du Bistro, du BA et les pages spécifiées en page de discussion
 * 
 * Historique :
 * - introduit par ?? le ??
 * -jquerifié par Seb35 le 02/03/2011
 */
function TransformeEnDiscussion() {
	if( mw.config.get('wgPageName').search( 'Wikipédia:Le_Bistro' ) != -1
		|| mw.config.get('wgPageName').search( 'Wikipédia:Bulletin_des_administrateurs' ) != -1
		|| $( '#transformeEnPageDeDiscussion' ).length > 0 ) {
		$( 'body' ).addClass( 'ns-subject' ).removeClass( 'ns-talk' );
	}
}
$(TransformeEnDiscussion);


/**
 * Insert Vector Buttons
 * Created on April 6th, 2010
 *
 * version: 0.4.0-beta
 * url: http://meta.wikimedia.org/wiki/User:Krinkle/Scripts/insertVectorButtons
 *
 * Insert Vector Buttons by Krinkle [1] is released in the public domain
 *
 * [1] <http://meta.wikimedia.org/wiki/User:Krinkle>
 */
$(function($){
if ( typeof $.fn.wikiEditor != 'undefined' && typeof kCustomMainInsertButton == 'undefined' && mw.config.get('wgAction') == 'edit') {
	window.kCustomMainInsertButton = function(imageId,imageFile,speedTip,tagOpen,tagClose,sampleText,callbackFunc){
		// Reason for the a[b]-method instead of the much shorter a.b-method
		// is to dynamicly set the object name imageId
		var wikiOptions = {'section': 'main', 'group': 'insert', 'tools': {}};
		wikiOptions.tools[imageId] = {
			label: speedTip,
			type: 'button',
			icon: imageFile,
			action: {
				type: 'callback',
				execute: function() {
					$( '#wpTextbox1' ).textSelection('encapsulateSelection',{
						pre: tagOpen,
						peri: sampleText,
						post: tagClose
					});
					if(typeof callbackFunc == 'function'){ callbackFunc(); }
				}
			}
		};
		$('#wpTextbox1').wikiEditor('addToToolbar', wikiOptions);
	};
	if ( $.isFunction(kCustomMainInsertButton_config) ) {
		kCustomMainInsertButton_config();
	}
} else {
	window.kCustomMainInsertButton = function(){
	};
}

});
/**
 * Ajouter un bouton à la fin de la barre d'outils
 */
function addCustomButton( imageFile, speedTip, tagOpen, tagClose, sampleText, imageId ) {
	kCustomMainInsertButton( imageId, imageFile, speedTip, tagOpen, tagClose, sampleText );
}



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

/**
 * Tout ce qui concerne la page d'édition
 * Voir MediaWiki:Common.js/edit.js pour ces fonctions
 */
if( mw.config.get( 'wgAction' ) == 'edit' || mw.config.get( 'wgAction' ) == 'submit' ) {
	mw.loader.load( mw.config.get( 'wgScript' ) + '?title=MediaWiki:Common.js/edit.js&action=raw&ctype=text/javascript', 'text/javascript' );
}

/**
 * Liens d'accès directs pour la navigation au clavier
 */
function showSkipLinks() {
    
    if( $('#jump-to-nav').length == 0 ) return;
    $( '#jump-to-nav a:first' ).addClass( 'hidden' ).focus( function() {
        
        $(this).removeClass( 'hidden' );
    });
}
$(showSkipLinks);

/**
 * Modifications autour du titre
 * 
 * - Réécriture des titres
 * - Icônes de titres
 * - Déplacement des coordonnées
 * - Ajout d'un sous-titre
 * - Lien d'aide
 */
$(function() {
    
    var h1 = $('#firstHeading');
    if( h1.length == 0 ) h1 = $('h1:first');
    if( h1.length == 0 ) return;
    
    /**
     * Réécriture des titres
     * 
     * 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
     */
    var realTitle = $('#RealTitle');
    if( $('#RealTitleBanner').length > 0 && $('#DisableRealTitle').length == 0 && realTitle.length > 0 && realTitle.text() != '' ) {
        
        h1.html( realTitle.html() );
        $('#RealTitleBanner').remove();
        
        if ( mw.config.get('wgNamespaceNumber') == 0 || mw.config.get('wgNamespaceNumber') == 10 ) {
            
            h1.after( '<p style="font-size:90%">Titre à utiliser pour créer un lien interne : <b>'+mw.config.get('wgPageName').replace('_',' ')+'</b></p>' );
        }
    }
    
    
    /**
     * Icônes de titre
     * 
     * Cherche les icônes de titre (class="icone_de_titre") et les
     * déplace à droite du titre de la page.
     * Doit être exécuté après une éventuelle correction de titre.
     */
    var icones = $( 'div.icone_de_titre' );
    if( mw.config.get('skin') == 'modern' || mw.config.get('skin') == 'vector' ) icones.css( 'marginTop', '0em' );
    for( var j = icones.length; j > 0; --j ) {
        
        h1.before( icones.eq(j-1) );
    }
    // (ou)
    $('div.icone_de_titre').each( function(i,elem) { // pas sûr qu'on puisse inverser l'ordre de parcours, auquel cas cette version serait fausse
        
        if( mw.config.get('skin') == 'modern' || mw.config.get('skin') == 'vector' ) elem.css( 'marginTop', '0em' );
        h1.before( elem );
    });
    
    
    /**
     * Déplacement de coordonnées qui apparaissent en haut de la page 
     */
    h1.before( $('#coordinates').attr('id','coordinates-title') );
    
    
    /**
     * 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>
     *
     * Doit être exécutée après les fonctions d'icônes de titre
     */
    var span = $('#sous_titre_h1');
    if( span.length > 0 ) {
        
        h1.append(' ').append( span );
    }
    
    
    /**
     * permet d'ajouter un petit lien (par exemple d'aide) à la fin du titre d'une page.
     * known bug : conflit avec le changement de titre classique.
     * Pour les commentaires, merci de contacter [[user:Plyd|Plyd]].
     */
    if( $('#helpPage').length > 0 ) {
        
        h1.append( '<span id="h1-helpPage">' + $('#helpPage').html() + '</span>' );
        $('#helpPage').remove();
    }
});

// Verwendung von OpenStreetMap in Wikipedia.
// (c) 2008 by Magnus Manske
// Released under GPL
// Modifié pour marcher après moveCoord() ci-dessus

if(typeof(MoveResizeAbsolute_AddMoveArea)!="function") obtenir('MoveResizeAbsolute');

function openStreetMap_Init () {
	var coordinatestitle = $( '#coordinates-title' );
	if( coordinatestitle.length == 0 ) return;
	
	var geohack = false;
	coordinatestitle.find( 'a' ).each( function(i,elem) {
		var h = $(this).attr( 'href' );
		if ( h.indexOf('geohack') != -1 ) {
			geohack = true;
			return false;
		}
	});
	if ( !geohack ) return ;
	
	var na = $( '<a>carte</a>', { title:'Afficher/Masquer la carte', click:openStreetMap_Toggle, style:'cursor:hand' } );
	c.append( ' (', na, ')   ' );
}

function openStreetMap_Toggle () {
  var coordinatestitle = $( '#coordinates-title' );
  if( coordinatestitle.length == 0 ) return;
  var osm = $( '#OpenStreetMap' );

  if (osm.length > 0) {
    if ( osm.css( 'display' ) == 'none' ) {
      osm.css( 'display', 'block' );
    } else {
      osm.css( 'display', 'none' );
    }
    return;
  }

  var found_link = false, h;
  coordinatestitle.find( 'a' ).each( function(i,elem) {
		h = $(this).attr( 'href' );
		if ( h.indexOf('geohack') != -1 ) {
			found_link = true;
			return false;
		}
	});
	if ( !found_link ) return ; // No geohack link found

  h = h.split('params=')[1] ;

  var LargeurEcran = MoveResizeAbsolute_GetScreenWidth();
  var HauteurEcran = MoveResizeAbsolute_GetScreenHeight();

  var OSMDiv = $( '<div/>', { id:'OpenStreetMap', style: { position:'absolute', 'z-index':5000, top:HauteurEcran*10/100, left:LargeurEcran*15/100, width:'70%', heigth:HauteurEcran*80/100, border:'2px solid black', 'background-color':'white', overflow:'hidden' } } );
  
  var MoveArea = $( '<div/>', { title:'Cliquer et glisser pour déplacer la carte' , style: { position:'relative', top:0, width:'100%', height:50 } } );
  
  var CloseLink = $( '<a>Masquer</a>', { title:'Cliquer pour masquer la carte', style: { cursor:'hand', 'float':'right', margin:10 }, click:openStreetMap_Toggle } );
  MoveArea.append( CloseLink );

  var url = 'http://toolserver.org/~kolossos/openlayers/kml-on-ol.php?lang=' + mw.config.get( 'wgUserLanguage' ) + '&params=' + h ;
  var iFrame = $( '<iframe/>', { src:url, style: { width:'100%', height:HauteurEcran*80/100)-100, clear:'both' } } ) ;
  
  var ResizeArea = $( '<div/>', { title:'Cliquer et glisser pour redimensionner la carte', style: { position:'relative', top:0, width:'100%', height:50 } } );
  
  OSMDiv.append(MoveArea);
  OSMDiv.append(iFrame);
  OSMDiv.append(ResizeArea);

  $( 'body' ).append( OSMDiv );
  
  var ElementsToMove = new Array(OSMDiv[0]);
  var ElementsToResize = new Array(OSMDiv[0], iFrame[0]);
  var ElementsMinWidth = new Array(150, 150);
  var ElementsMinHeights = new Array(200, 100);

  MoveResizeAbsolute_AddMoveArea(MoveArea[0], ElementsToMove);
  MoveResizeAbsolute_AddResizeArea(ResizeArea[0], ElementsToResize, ElementsMinWidth, ElementsMinHeights);
}

$(openStreetMap_Init);


/** 
 * Boîtes déroulantes
 *
 * Pour [[Modèle:Méta palette de navigation]]
 * 
 * jQuery: il doit être possible d'utiliser le paquet mw-collapsable (pas encore disponible sur les sites wikimedia)
 * attendre un peu, il y a des problèmes avec IE8
 */

var Palette_Enrouler = '[enrouler]';
var Palette_Derouler  = '[dérouler]';

var Palette_max = 1; 
var Palette_index = -1;

function Palette_toggle(indexPalette){
  var Button = document.getElementById( "collapseButton" + indexPalette );
  var Table = document.getElementById( "collapsibleTable" + indexPalette );
  if ( !Table || !Button ) return false; 
  var FirstRow = Table.getElementsByTagName("tr")[0];
  var RowDisplay; 
  if ( Button.firstChild.data == Palette_Enrouler ) {
    RowDisplay = "none"
    Button.firstChild.data = Palette_Derouler;
  }else{
    RowDisplay = FirstRow.style.display;
    Button.firstChild.data = Palette_Enrouler;
  } 
  var Row = FirstRow.nextSibling;
  while(Row){
    if(Row.tagName && Row.tagName.toLowerCase() === "tr"){
      Row.style.display = RowDisplay;
    }
    Row = Row.nextSibling;
  }
} 

function Palette(Element){
  if(!Element) Element = document;
  var TableIndex = 0;
  var TableIndexes = new Array();
  var Tables = Element.getElementsByTagName( "table" ); 
  for ( var i = 0; i < Tables.length; i++ ) {
    if ( $( Tables[i] ).hasClass( "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:Palette_toggle(" + Palette_index + ");" );
        ButtonLink.appendChild( ButtonText ); 
        Button.appendChild( ButtonLink ); 
        Header.insertBefore( Button, Header.childNodes[0] ); 
      }
    }
  } 
  for(var index in TableIndexes){
    var Table = TableIndexes[index];
    if($(Table).hasClass("collapsed")||(TableIndex>Palette_max && $(Table).hasClass("autocollapse")))
    Palette_toggle(index); 
  }
}
addOnloadHook(Palette);


/**
 * Pour [[Modèle:Boîte déroulante]] 
 * 
 * jQuery: il doit être possible d'utiliser le paquet mw-collapsable (pas encore disponible sur les sites wikimedia)
 */

var BoiteDeroulante_Enrouler = '[enrouler]';
var BoiteDeroulante_Derouler  = '[dérouler]'; 
var BoiteDeroulante_max = 0; 
var BoiteDeroulante_index = -1;

function BoiteDeroulante_toggle(indexBoiteDeroulante){
      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 = new Array();
      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(var 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(var 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 NavFrameCount = -1;
      var NavFrames = Element.getElementsByTagName("div");
      for(var i=0,l=NavFrames.length;i<l;i++){
            if($(NavFrames[i]).hasClass("NavFrame")){
                  var NavFrame = NavFrames[i];
                  NavFrameCount++;
                  BoiteDeroulante_index++;

                  if (NavFrame.title && NavFrame.title.indexOf("/")!=-1) {
                        var Enrouler = mw.html.escape(NavFrame.title).split("/")[1];
                        var Derouler = mw.html.escape(NavFrame.title).split("/")[0];
                  }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");
                  NavToggle.className = 'NavToggle';
                  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 );
                  NavFrame.id = 'NavFrame' + BoiteDeroulante_index;
                  if (BoiteDeroulante_max <= NavFrameCount) {
                        BoiteDeroulante_toggle(BoiteDeroulante_index);
                  }
            }
      }

}
addOnloadHook(BoiteDeroulante);

/**
 * WikiMiniAtlas
 *
 * voir WP:WMA 
 */
var metaBase = "//meta.wikimedia.org";
mw.loader.load( metaBase + '/w/index.php?title=MediaWiki:Wikiminiatlas.js&action=raw&ctype=text/javascript&smaxage=21600&maxage=86400', 'text/javascript' );

var wma_settings = { 
  buttonImage: 'https://upload.wikimedia.org/wikipedia/commons/thumb/e/e9/Geographylogo.svg/18px-Geographylogo.svg.png'
}

/**
 * Utilisation du modèle Modèle:Images
 */
function toggleImage( event ) {
    $( '#ImageGroupsGr' + event.data.group + 'Im' + event.data.remindex ).css( 'display', 'none' );
    $( '#ImageGroupsGr' + event.data.group + 'Im' + event.data.shwindex ).css( 'display', 'inline' );
}

function imageGroup(bc){
    
    if ( mw.util.getParamValue('printable') == 'yes' ) return;
    
    // Pour chaque modèle
    mw.util.$content.find( 'div.ImageGroup div.ImageGroupUnits:first' ).each( function( i, modele ) {
        
        // Pour chaque image de chaque modèle
        var units = modele.children('.center');
        units.each( function( j, currentimage ) {
            
            if ( j != 0 ) currentimage.css( 'display', 'none' );
            
            var div = $( '<div/>', { style: { 'font-size':'110%', 'font-weight':'bold' } );
            
            var leftlink = ( j != 0 ) ? $( '<a>◀</a>', { 'class':'image_prev' title:'Image précédente', click( toggleImage, {group:group,remindex:remindex,shwindex:shwindex-1} } ) : $( '<span>&nbsp</span>' );
            div.append( leftlink );
            
            var comment = $( '<tt>(' + (j+1) + '/' + units.length + ')</tt>' );
            div.append( comment );
            
            var rightlink = ( j != units.length - 1 ) ? $( '<a>▶</a>', { 'class':'image_next', title:'Image suivante', click( toggleImage, {group:group,remindex:remindex,shwindex:shwindex+1} } ) : $( '<span>&nbsp</span>' );
            div.append( rightlink );
            
            currentimage.attr( 'id', 'ImageGroupsGr'+i+'Im'+j );
            currentimage.prepend( div );
        });
    });
}
$(imageGroup);

/**
 * Ajout d'un style particulier aux liens interlangues vers un bon article ou
 * un article de qualité
 */
function lienAdQouBAouPdQ() {
    
    if( $('#p-lang').length == 0 ) return;
    
    $('.AdQ').each( function(i,elem) { $( '#p-lang li.' + elem.attr('id').substr(4) ).addClass('AdQ').attr('title','Lien vers un article de qualité.'); });
    
    $('.BA').each( function(i,elem) { $( '#p-lang li.' + elem.attr('id').substr(3) ).addClass('BA').attr('title','Lien vers un bon article.'); });
    
    $('.PdQ').each( function(i,elem) { $( '#p-lang li.' + elem.attr('id').substr(4) ).addClass('PdQ').attr('title','Lien vers un portail de qualité.'); });
}
$(lienAdQouBAouPdQ);


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

function movePortalToCategoryBox() {
    if( !gUseMovePortalToCategoryBox ) return;
    
    var div_portal = $('#portallinks');
    if( div_portal.length == 0 || !div_portal.hasClass( 'movable' ) ) return;
    
    if( $( '#catlinks' ).length == 0 ) $( 'div.printfooter:last' ).before( $( '<div/>', { id:'catlinks' } ) );
    
    $( '#catlinks' ).prepend( div_portal, $( '<hr/>' ) );
}
$(movePortalToCategoryBox);

/**
 * 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;
    
    if( $('#catlinks').length == 0 || $('#mw-hidden-catlinks').length == 0 ) return;
    if( $('#mw-hidden-catlinks').hasClass('mw-hidden-cats-user-shown') ) return;
    
    if( $('#mw-hidden-catlinks').hasClass('mw-hidden-cats-ns-shown') ) $('#mw-hidden-catlinks').addClass('mw-hidden-cats-hidden');
    
    if( $('#mw-normal-catlinks').length == 0 )
        
        $('#catlinks').prepend( '<div id="mw-normal-catlinks"><a href="/wiki/Catégorie:Accueil" title="Catégorie:Accueil">Catégories</a> : </div>' );
    
    else $('#mw-normal-catlinks').append(' | ');
    
    $('#mw-normal-catlinks').append('<a id="mw-hidden-cats-link" title="Cet article contient des catégories cachées" style="cursor:pointer;color:black;">[+]</a>');
    $('#mw-hidden-cats-link').click(toggleHiddenCats);
}

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

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

if( mw.config.get( 'wgAction' ) == 'view' || mw.config.get( 'wgAction' ) == 'purge' || mw.config.get( 'wgAction' ) == 'submit' ) $(GeoBox_Init);

function GeoBox_Init( Element ) { 
	var cont = $( '.img_toggle', Element );
	if( cont.length == 0 ) return;
	cont.each( function(i,elem) {
		elem.attr( 'id', 'img_toggle_' + i );
		var Boxes = elem.find( '.geobox' );
		var ToggleLinksDiv = $( '<ul/>', { id:'geoboxToggleLinks_' + i } );
		Boxes.each( function(j,ThisBox) {
			ThisBox.attr( { id:'geobox_' + i + '_' + j, style: { 'border-top':0 } } );
			var ThisAlt = ThisBox.find('img:first').attr( 'alt' );
			var toggle = $( '<a>' + ThisAlt + '</a>', { id:'geoboxToggle_' + i + '_' + j, style: { cursor:'hand' }, click:function() { GeoBox_Toggle(this); return false; } } );
			var Li = $( '<li/>' ).append( toggle );
			ToggleLinksDiv.append( Li );
			if( j == Boxes.length-1 ) Li.css( 'display', 'none' );
			else ThisBox.css( 'display', 'none' );
		});
		elem.append( ToggleLinksDiv );
	});
}

function GeoBox_Toggle( link ){
	var ImgToggleIndex = $(link).attr('id').split( 'geoboxToggle_' ).join( '' ).replace( /_.*/g, '' );
	var GeoBoxIndex = $(link).attr('id').replace( /.*_/g, '' );
	var ImageToggle = $( '#img_toggle_' + ImgToggleIndex );
	var Links = $( '#geoboxToggleLinks_' + ImgToggleIndex );
	var Geobox = $( '#geobox_' + ImgToggleIndex + '_' + GeoBoxIndex );
	var Link = $( '#geoboxToggle_' + ImgToggleIndex + '_' + GeoBoxIndex );
	if( ImageToggle.length == 0 || Links.length == 0 || Geobox.length == 0 || Link.length == 0 ) return;
	var AllGeoboxes = ImageToggle.find( '.geobox' );
	AllGeobox.each( function(i,elem) {
		if( elem == Geobox ) elem.css( 'display', '' );
		else elem.css( 'display', 'none' );
	});
	var AllToggleLinks = Links.find( 'a' );
	AllToggleLinks.each( function(i,elem) {
		if( elem == Link ) elem.css( 'display', 'none' );
		else elem.css( 'display', '' );
	});
}

/**
 * application de [[Wikipédia:Prise de décision/Système de cache]]
 * un <span class="noarchive"> autour du lien l'empêche d'être pris en compte
 * pour celui-ci uniquement
 * un no_external_cache=true dans un monobook personnel désactive le script
 */

function addcache( element ) {
	
	if( no_external_cache ) return;
	
	$( 'ol.references a.external', element ).each( function(i,lien_en_cours) {
		var chemin = lien_en_cours.attr( 'href' );
		if( chemin.indexOf( 'http://wikiwix.com/cache/' ) != -1 || chemin.indexOf( 'http://web.archive.org/web/' ) != -1 || chemin.indexOf( 'wikipedia.org' ) != -1 || chemin.indexOf( 'wikimedia.org' ) != -1 || chemin.indexOf( 'stable.toolserver.org' ) != -1 ) return;
		if( lien_en_cours.parent().hasClass( 'noarchive' ) ) return;
		var titre = lien_en_cours.text();
		var last = $( '<small>\u00a0[</small>', { 'class':'cachelinks' } );
        last.append( $( '<a>archive</a>', { title:'archive de ' + titre, href:'http://wikiwix.com/cache/?url=' + chemin.replace(/%/g, '%25').replace(/&/g, '%26') + '&title=' + encodeURIComponent(titre) } ) );
        last.append( ']' );
        lien_en_cours.before( last );
	});
}

if( mw.config.get( 'wgNamespaceNumber' ) == 0 ) {
	$( addcache );
}


/**
 * Application de [[Wikipédia:Prise de décision/Lien interprojet]]
 * Copie les liens interprojets du modèle {{Autres projets}}
 * dans le menu en colonne de gauche.
 * remove_other_projects = true; dans le monobook personnel pour activer
 * en plus la suppression du modèle {{Autres projets}} en bas des articles.
 * no_other_projects = true; dans le monobook personnel pour désactiver
 * entièrement le script et l'ajout dans la colonne de gauche.
 */

function autresProjets() {
	if( no_other_projects ) return;
	if( mw.config.get( 'wgNamespaceNumber' ) != 0 ) return;
	if( mw.config.get( 'wgAction' != 'view' ) return;
	var div = $( '#autres_projets' );
	if( div.length == 0 ) return;
	
	if( mw.config.get( 'skin' ) == 'monobook' || mw.config.get( 'skin' ) == 'myskin' || mw.config.get( 'skin' ) == 'simple' ) {
		var Portlet_ClassName = 'portlet';
		var PBody_ClassName = 'pBody';
	} else if( mw.config.get( 'skin' ) == 'modern' ) {
		var Portlet_ClassName = 'portlet';
		var PBody_ClassName = 'pBody';
	} else if( mw.config.get( 'skin' ) == 'vector' ) {
		var Portlet_ClassName = 'portal';
		var PBody_ClassName = 'body';
	} else {
		var Portlet_ClassName = false;
	}
	if( !Portlet_ClassName ) return;
	
	var list = div.find( 'li' );
	var newlist = $( '<ul/>' );
	list.each( function(i,elem) {
		var a = elem.find( 'a:first' );
		var newlistitem = $( '<li/>' );
		var newlink = $( '<a>' + a.find( 'span:first' ).text() + '</a>', { title:a.text(), href:a.attr( 'href' ) } );
		newlistitem.append( newlink );
		newlist.append( newlistitem );
	});
	
	var interProject = $( '<div/>', { 'class':Portlet_ClassName, id:'p-project' } ).append( $( '<h5>Autres projets</h5>' ), $( '<div/>', { 'class':PBody_ClassName } ).append( '<ul>' + newlist.html() + '</ul>' ) );
	$( '#p-tb' ).after( interProject );
	if( remove_other_projects ) div.remove();
}
$( autresProjets );

/**
 * Classe sur les lignes de tableaux 
 * pour permettre l'alternance des couleurs de ligne
 * (compatible avec les tableaux triables)
 */

$(function(){
	$('#content table.alternance tr:nth-child(odd)').addClass('odd');
	$('#content table.sortable.alternance th a.sortheader').click(function(){
		$('#content table.sortable.alternance tr').removeClass('odd');
		$('#content table.sortable.alternance tr:nth-child(odd)').addClass('odd');
	});
});



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

// PAGE D'ACCUEIL
if( mw.util.isMainPage() ) {

/**
 * Suppression du titre sur la page d'accueil, 
 * changement de l'onglet et lien vers la liste complète des Wikipédias depuis l'accueil
 */
function mainPageTransform(){
  //retiré le test, car le if encadrant la fonction est déjà plus restrictif - darkoneko 05/12/09
  $('#ca-nstab-project a').text('Accueil');
  mw.util.addPortletLink( 'p-lang', 'http://www.wikipedia.org/', 'Liste complète', 'interwiki-listecomplete', 'Liste complète des Wikipédias' );
}
$(mainPageTransform);

} // FIN DU IF page d'accueil






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

/**
 * Afficher une explication au nombre d'octets dans la liste de suivi
 */
function toolTipPlusMinus() {
  if( mw.config.get('wgCanonicalSpecialPageName') != "Watchlist" ) return;
  var tt = "Nombre d'octets d'écart entre les deux dernières versions de la page";
  $( 'span.mw-plusminus-pos, span.mw-plusminus-neg, span.mw-plusminus-null' ).attr( 'title', tt );
}
$(toolTipPlusMinus);

/**
 * 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" ) {
	mw.loader.load( mw.config.get( 'wgScript' ) + '?title=MediaWiki:Onlyifuploading.js&action=raw&ctype=text/javascript', 'text/javascript' );
}

} // Fin du code concernant l'espace de nom 'Special'


// ESPACE DE NOM 'UTILISATEUR'
if( mw.config.get('wgNamespaceNumber') == 2 ) {

/* En phase de test */
/* DÉBUT DU CODE JAVASCRIPT DE "CADRE À ONGLETS"
    Fonctionnement du [[Modèle:Cadre à onglets]]
    Modèle implanté par User:Peleguer de http://ca.wikipedia.org
    Actualisé par User:Joanjoc de http://ca.wikipedia.org
    Traduction et adaptation User:Antaya de http://fr.wikipedia.org
*/
function CadreOngletInit(){
 // retour si ailleurs que sur l'espace utilisateur, 
 // sachant que c'est une horreur au niveau de l'accessibilité
 // et qu'il est impossible de "récupérer" ou de recycler ce script
 // (celui-ci fonctionnant par inclusion de sous pages)
 if (mw.config.get('wgCanonicalNamespace') != 'User') return;  
  var i=0       
  for (i=0;i<=9;i++){
     var vMb = $( '#mb'+i );
     if( vMb.length == 0 ) break;

     var j=1    
     var vOgIni = 0  
     for (j=1;j<=9;j++){
        var vBt = $( '#mb'+i+'bt'+j );
        if( vBt.length == 0 ) break;
        vBt.click( CadreOngletVoirOnglet );
        if( vBt.hasClass( 'mbBoutonSel' ) ) vOgIni=j;
     }

     if (vOgIni == 0) { 
         vOgIni = 1+Math.floor((j-1)*Math.random()) ;
         $( '#mb'+i+'og'+vOgIni ).css( 'display', 'block' );
         $( 'mb'+i+'og'+vOgIni ).css( 'visibility', 'visible' );
         $( 'mb'+i+'bt'+vOgIni ).addClass( 'mbBoutonSel' );
     } 
  }
 }

 function CadreOngletVoirOnglet(){
  var vMbNom = this.id.substr(0,3); 
  var vIndex = this.id.substr(5,1); 

  var i=1
  for (i=1;i<=9;i++){        
        var vOgElem = $( '#'+vMbNom+'og'+i );
        if( vOgElem == 0 ) break;
        if (vIndex==i){ 
                vOgElem.css( 'display', 'block' );
                vOgElem.css( 'visibility', 'visible' );
                $( '#'+vMbNom+'bt'+i ).addClass( 'mbBoutonSel' );
        } else {             
                vOgElem.css( 'display', 'none' );
                vOgElem.css( 'visibility', 'hidden' );
                $( '#'+vMbNom+'bt'+i ).addClass( 'mbBouton' );
        }
  }
  return false; 
}
$(CadreOngletInit);
/*FIN DU CODE JAVASCRIPT DE "CADRE À ONGLETS"*/
} // 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
 * Devraient en principe se trouver côté serveur
 * @note L'ordre de cette liste doit correspondre a celui de Modèle:Édition !
 */

function addBibSubsetMenu() {
	$('#specialBib').append('<select style="display:inline;" onChange="chooseBibSubset(selectedIndex)">'
		+ '<option>Liste</option>'
		+ '<option>WikiNorme</option>'
		+ '<option>BibTeX</option>'
		+ '<option>ISBD</option>'
		+ '<option>ISO690</option>'
		+ '</select>');
	
	/* default subset - try to use a cookie some day */
	chooseBibSubset(0);
}

// select subsection of special characters
function chooseBibSubset(s) {
	var listeNormes = [ '.edition-Liste', '.edition-WikiNorme', '.edition-BibTeX', '.edition-ISBD', '.edition-ISO690' ];
	$( listeNormes.join( ',') ).css( 'display', 'none');
	$( listeNormes[s] ).css( 'display', 'block' );
}
$(addBibSubsetMenu);
} // Fin du code concernant l'espace de nom 'Référence'


/*********************************/
/* Autres fonctions non classées */
/*********************************/

/*
   Outil pour permettre l'affichage immédiat d'un javascript pour tous les utilisateurs en même temps.
   Même s'ils ne rechargent pas Wikipédia avec CTRL+R.
   Utile initialement pour prévoir une bonne réactivité et un lancement général du [[Projet:Impression]].
   Plyd - 12 octobre 2008
   tag urgentsynchronejs inclus (pas encore) dans [[MediaWiki:Copyright]]
*/
function urgentSynchroneJsLoad() {
	var urgentsynchronejs = $( '#urgentsynchronejs' );
	if( urgentsynchronejs.length == 0 ) return;
	importScript( 'MediaWiki:Common.js/' + urgentsynchronejs.attr( 'title' );
}
$(urgentSynchroneJsLoad);


/* WikiForm pour la génération facilité de modèles */
/* Plyd - 10/02/2008 */
if (document.getElementById("WikiForm")) {
   importScript("MediaWiki:Gadget-WikiForm.js");
}


////////////////////////////////////////////////////////////////////////////////
// MediaWiki:Common.js/edit.js /////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////

/**
 * Applications spécifiques à la page d'édition
 * <nowiki>
 */
/* todo : migrer celles qui ne sont pas vitales dans les gadgets */

var IsEdit = ( mw.config.get( 'wgAction' ) == 'edit' || mw.config.get( 'wgAction' ) == 'submit' );


/**
 * Désactiver le bouton Sauvegarder à la première édition
 * English : Force IP to preview before saving changes.
 * Copyright Marc Mongenet, 2006
 * Plyd 05/2007: add "after preview" in the button to prevent misunderstanding from beginners
 */
function forcePreview() {
	if( mw.config.get( 'wgUserName' ) != null && mw.config.get( 'wgAction' ) != 'edit' ) return;
	var saveButton = $( '#wpSave' );
	if( saveButton.length == 0 ) return;
	saveButton.attr( 'disabled', 'disabled' ).val( 'Publier (après prévisualisation)' ).css( 'font-weight', 'normal' );
	$( '#wpPreview' ).css( 'font-weight', 'bold' );
}
$( forcePreview );

/**
 * Fonctions de remplissage automatique
 */

function InitPDDvide(page_name) {
  return "";
}

function InitIaS( page_name ) {
  return "<!-- Publier la page pour l'initialiser puis suivre les instructions -->\n" +
         "{{subst:Préchargement Image à Supprimer|" + page_name + "|~~~~|jour={{subst:CURRENTDAY}}|mois={{subst:CURRENTMONTH}}}}\n" +
         "<!-- N'oubliez pas d'ajouter le lien vers cette page dans la page principale des Images à supprimer -->";
}

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

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

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

function InitCdl( page_name ) {
  return "<!-- Publier la page pour l'initialiser puis suivre les instructions -->\n" +
         "<!-- N'oubliez pas d'ajouter le lien vers cette page dans la page principale du comité de lecture -->\n\n" +
         "<noinclude>{{subst:Initialiser Comité de lecture2}}</noinclude>\n" +
         "{{subst:Initialiser Comité de lecture|" + page_name + "|~~~~}}";
}

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

var init_if_empty = {
'Discussion_Wikipédia:Images_à_supprimer/': InitPDDvide,
'Wikipédia:Images_à_supprimer/': InitIaS,
'Discussion_Wikipédia:Comité_d\'arbitrage/Arbitrage/': InitDiscArbReq,
'Wikipédia:Comité_d\'arbitrage/Arbitrage/': InitArbReq,
'Discussion_Wikipédia:Comité_de_lecture/': InitPDDvide,
'Wikipédia:Comité_de_lecture/': InitCdl,
'Discussion_Portail:Littérature/Invitation_à_la_lecture/Sélection/': InitPDDvide,
'Portail:Littérature/Invitation_à_la_lecture/Sélection/': InitPL
};

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

/**
 * Caractères spéciaux
 *
 * Ajouter un menu pour choisir des sous-ensembles de caractères spéciaux.
 * Ecrit par Zelda, voir sur [[Utilisateur:Zelda/Edittools.js]].
 * Remplace l'ancienne fonction par une variante plus rapide.
 */

/**
 * Ajoute un menu déroulant permettant de choisir un jeu de caractères spéciaux
 * Les caractères spéciaux sont définis dans Mediawiki:Edittools
 */
/* UPDATE 1.17 : plus utile, à moins que monobook l'utilise encore (?) */
/* UPDATE 1.17 : plus utile, à moins que monobook l'utilise encore (?)
   Encore utilisé dans quelques scripts utilisateur. − Marin */
function addCharSubsetMenu() {
  var specialchars = $('#specialcharsets');
  if (!specialchars.length) return;
 
  // Construction du menu de selection
  var charSubsetSelect = $('<select />');
  charSubsetSelect.css('display', 'inline');
  charSubsetSelect.change(function () { chooseCharSubset(this.selectedIndex) });
 
  // Ajout des options au menu
  var p = $('#specialcharsets p');
  
  for (var i = 0; i < p.length ; i++) {
    var opt = $("<option></option>");
    opt.text($(p[i]).attr('title'));
    charSubsetSelect.append(opt);
  }
 
  $(specialchars.children()[0]).before(charSubsetSelect);
 
  /* default subset - try to use a cookie some day */
  chooseCharSubset(0);
}
 
/**
 * Affichage du jeu de caractères sélectionné
 */
function chooseCharSubset(index) {
  var p = $('#specialcharsets p');
  for (var i = 0; i < p.length ; i++) {
    // Initialisation du jeu de caractères sélectionné
    if (i == index) {
        initializeCharSubset(p[i]);
    }
    // Affichage du jeu sélectionné, masquage des autres
    $(p[i]).css('display', i == index ? 'inline' : 'none');
    $(p[i]).css('visibility', i == index ? 'visible' : 'hidden');
  }
}

/**
 * Initialisation du jeu de caractères sélectionné
 * Paramètre : paragraphe contenant le jeu à initialiser. Initialise tous les
 * caractères contenus dans les sous-spans du paragraphe
 */
function initializeCharSubset(p) {
  // recherche des sous-elements de type span à traiter
  var spans = p.getElementsByTagName("span");
  if (!spans) return;

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

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

    // On parse le contenu du span
    var chars = spans[j].childNodes[0].nodeValue.split(" ");
    for (var k = 0; k < chars.length; k++) {
      var a = document.createElement("a");
      var tags = chars[k];
      tags = tags.replace(/%27/g, "'").replace(/%5C/g, "\\");

      // regroupement des mots se terminant par un espace protégé par un \
      while (k < chars.length && chars[k].match(escapeRe)) {
      	k++;
	tags = tags.substr(0, tags.length - 1) + " " + chars[k];
      }

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

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

/**
 * Permet d'ajouter d'un jeu de caractères spéciaux dans le menu déroulant
 * paramètres :
 * - nom du jeu de caractères
 * - contenu HTML. Les caractères spéciaux doivent être dans des spans
 *   exemple : "caractères : <span>â ê î ô û</span>"
 */
function addSpecialCharsetHTML(title, charsHTML) {
  var specialchars = document.getElementById('specialcharsets');
  if (!specialchars) return;

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

/**
 * Permet d'ajouter d'un jeu de caractères spéciaux dans le menu déroulant
 * paramètres :
 * - nom du jeu de caractères
 * - caractères spéciaux
 * exemple d'utilisation : addSpecialCharset("Français", "â ê î ô û");
 */
function addSpecialCharset(title, chars) {
  addSpecialCharsetHTML(title, "<span>" + chars + "</span>");
}

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

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

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

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

/**
 * Insertion de nouveaux boutons dans la barre d'outil
 */

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

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

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

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

addCustomButton('https://upload.wikimedia.org/wikipedia/commons/9/9e/Btn_toolbar_gallery.png',
                'Galerie d\'images',
                '\n<gallery>\nFichier:Exemple.jpg|[[Tournesol]]\nFichier:Exemple1.jpg|[[La Joconde]]\nFichier:Exemple2.jpg|Un [[hamster]]\n</gallery>\n{{message galerie}}',
                '',
                '',
                'mw-editbutton-gallery');

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

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

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

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

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

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

var voirAussi = '== Notes et références ==\n'
 + '{{Références}}\n\n'
 + '== Annexes ==\n'
 + '=== Articles connexes ===\n'
 + '* [[À remplacer]]\n\n'
 + '=== Liens externes ===\n'
 + '*\n\n'
 + '=== Bibliographie ===\n'
 + '* [[À remplacer]]\n\n'
 
addCustomButton('https://upload.wikimedia.org/wikipedia/commons/b/bb/Seealso.png',
                'Section Annexes',
                voirAussi,
                '',
                '',
                'mw-editbutton-voiraussi');

/**
 * Changer le lien du bouton de création de tableau et supprime le bouton signature sur les articles
 */
function changButtons() {
  $('#mw-editbutton-array').click(popupTableau);
  $('#mw-editbutton-signature').hide();
}

if(IsEdit) $(changButtons);

//</nowiki>