MediaWiki:Common.js : Différence entre versions

De La Grande Bibliotheque de Tamriel
Aller à : navigation, rechercher
 
(27 révisions intermédiaires par 3 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
/**
+
/*
  * Source : https://fr.wikipedia.org/w/index.php?title=MediaWiki:Common.js
+
* Use Gadgets whenever possible to minimize loading for all users for every page.
 +
  * Wait for mediawiki.util to be ready because some things assume its availability.
 
  */
 
  */
  
Ligne 9 : Ligne 10 :
 
  */
 
  */
  
 +
var Palette_Derouler = '[afficher]';
 
var Palette_Enrouler = '[masquer]';
 
var Palette_Enrouler = '[masquer]';
var Palette_Derouler  = '[afficher]';
 
  
 
var Palette_max = 1;
 
var Palette_max = 1;
var Palette_index = -1;
 
  
function Palette_toggle(indexPalette){
+
function Palette_toggle( $table ) {
  var Button = document.getElementById( "collapseButton" + indexPalette);
+
$table.find( 'tr:not(:first)' ).toggleClass( 'navboxHidden' );
  var Table = document.getElementById( "collapsibleTable" + indexPalette);
+
}
  if (!Table || !Button) return false;
+
 
 +
function Palette( $content ) {
 +
 
 +
var $tables = $content.find( 'table.collapsible' );
 +
var groups = {};
 +
 
 +
$tables.each( function( _, table ) {
 +
var group = table.dataset.autocollapseGroup || '__default__';
 +
groups[group] = ( groups[group] || 0 ) + 1;
 +
} );
 +
 
 +
$tables.each( function( _, table ) {
 +
var $table = $( table );
  
  var Rows = Table.rows;
+
var group = table.dataset.autocollapseGroup || '__default__';
  var RowDisplay = "none";
+
var autoCollapse = groups[group] > Palette_max;
  if (Button.firstChild.data == Palette_Derouler) {
+
var collapsed = $table.hasClass( 'collapsed' ) || ( autoCollapse && $table.hasClass( 'autocollapse' ) );
    Button.firstChild.data = Palette_Enrouler;
+
 
    RowDisplay = Rows[0].style.display;
+
// le modèle dispose d'une classe "navbox-title",
  } else {
+
// sauf que les palettes "inlinées" (e.g. « {| class="navbox collapsible collapsed" ») n'ont pas cette classe
    Button.firstChild.data = Palette_Derouler;
+
$table.find( 'tr:first th:first' ).prepend(
  }
+
$( '<span class="navboxToggle">\u00a0</span>' ).append(
  for (var i = 1; i < Rows.length; i++) {
+
$( '<a href="javascript:">' + (collapsed ? Palette_Derouler : Palette_Enrouler) + '</a>' ).click( function ( e ) {
    Rows[i].style.display = RowDisplay
+
e.preventDefault();
  }
+
if ( this.textContent === Palette_Enrouler ) {
}
+
this.textContent = Palette_Derouler;
 +
} else {
 +
this.textContent = Palette_Enrouler;
 +
}
 +
Palette_toggle( $table );
 +
} )
 +
)
 +
);
 +
if ( collapsed ) {
 +
Palette_toggle( $table );
 +
}
 +
} );
  
function Palette(Element){
+
// permet de dérouler/enrouler les palettes en cliquant n'importe où sur l'entête
  if(!Element) Element = document;
+
// (utilisation de la classe "navbox-title", comme ça seules les vraies palettes utilisant le modèle sont ciblées)
  var TableIndex = 0;
+
$content.find( '.navbox-title' )
  var TableIndexes = new Array();
+
.click( function ( e ) {
  var Tables = Element.getElementsByTagName( "table" );
+
if ( $( e.target ).closest( 'a' ).length ) {
  for ( var i = 0; i < Tables.length; i++ ) {
+
return;
    if ( hasClass( Tables[i], "collapsible" ) ) {
+
}
      var Table = Tables[i];
+
$( this ).find( '.navboxToggle a' ).click();
      var Header = Table.getElementsByTagName( "tr" )[0].getElementsByTagName( "th" )[0];
+
} )
      /* only add button and increment count if there is a header row to work with */
+
.css( 'cursor', 'pointer' );
      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);
+
mw.hook( 'wikipage.content' ).add( Palette );
 
 
  
 
/**
 
/**
* Pour [[Modèle:Boîte déroulante]]
+
* Boîtes déroulantes
*/
+
* Source : https://en.wikipedia.org/wiki/MediaWiki:Common.js
 +
*/
  
 +
var BoiteDeroulante_Derouler = '[afficher]';
 
var BoiteDeroulante_Enrouler = '[masquer]';
 
var BoiteDeroulante_Enrouler = '[masquer]';
var BoiteDeroulante_Derouler  = '[afficher]';
 
var BoiteDeroulante_max = 0;
 
var BoiteDeroulante_index = -1;
 
  
function BoiteDeroulante_toggle(indexBoiteDeroulante){
+
function BoiteDeroulante_toggle(NavToggle){
      var NavFrame = document.getElementById("NavFrame" + indexBoiteDeroulante);
+
    var NavFrame = NavToggle.parentNode;
      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');
+
var caption = [];
      if (NavToggle.innerHTML == caption[1]) {
+
caption[0] = NavFrame.dataset.boiteDeroulanteDerouler;
            NavToggle.innerHTML = caption[0];
+
caption[1] = NavFrame.dataset.boiteDeroulanteEnrouler;
            for(var a=0,m=Contents.length;a<m;a++){
+
 
                  if(hasClass(Contents[a], "NavContent")){
+
var $NavContent = $(NavFrame).find('.NavContent').first();
                        Contents[a].style.display = 'none';
+
 
                        return;
+
if ( NavToggle.textContent === caption[1] ) {
                  }
+
        NavToggle.textContent = caption[0];
            }
+
$NavContent.hide();
      }else{
+
} else {
            NavToggle.innerHTML = caption[1];
+
NavToggle.textContent = caption[1];
            for(var a=0,m=Contents.length;a<m;a++){
+
$NavContent.show();
                  if(hasClass(Contents[a], "NavContent")){
+
}
                        Contents[a].style.display = 'block';
 
                        return;
 
                  }
 
            }
 
      }
 
 
}
 
}
  
function BoiteDeroulante(Element){
+
function BoiteDeroulante( $content ) {
      if(!Element) Element = document;
+
 
      var NavFrameCount = -1;
+
$content.find( '.NavFrame' ).each( function ( _, NavFrame ) {
      var NavFrames = Element.getElementsByTagName("div");
+
var CustomTexts, Derouler, Enrouler, NavToggle;
      for(var i=0,l=NavFrames.length;i<l;i++){
+
 
            if(hasClass(NavFrames[i], "NavFrame")){
+
if (NavFrame.title && NavFrame.title.indexOf("/") !== -1) {
                  var NavFrame = NavFrames[i];
+
CustomTexts = NavFrame.title.split("/");
                  NavFrameCount++;
+
Derouler = CustomTexts[0];
                  BoiteDeroulante_index++;
+
Enrouler = CustomTexts[1];
 +
} else {
 +
Derouler = BoiteDeroulante_Derouler;
 +
Enrouler = BoiteDeroulante_Enrouler;
 +
}
 +
NavFrame.title = '';
 +
NavFrame.dataset.boiteDeroulanteDerouler = Derouler;
 +
NavFrame.dataset.boiteDeroulanteEnrouler = Enrouler;
  
                  if (NavFrame.title && NavFrame.title.indexOf("/")!=-1) {
+
NavToggle = document.createElement("a");
                        var Enrouler = NavFrame.title.HTMLize().split("/")[1];
+
NavToggle.className = 'NavToggle';
                        var Derouler = NavFrame.title.HTMLize().split("/")[0];
+
NavToggle.href = 'javascript:';
                  }else{
+
NavToggle.onclick = function (e) {
                        var Enrouler = BoiteDeroulante_Enrouler;
+
e.preventDefault();
                        var Derouler = BoiteDeroulante_Derouler;
+
BoiteDeroulante_toggle(e.target);
                  }
+
};
                  NavFrame.title='';
+
NavToggle.textContent = Enrouler;
                  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");
+
NavFrame.insertBefore(NavToggle, NavFrame.firstChild);
                  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 );
+
BoiteDeroulante_toggle(NavToggle);
                  NavFrame.id = 'NavFrame' + BoiteDeroulante_index;
+
} );
                  if (BoiteDeroulante_max <= NavFrameCount) {
 
                        BoiteDeroulante_toggle(BoiteDeroulante_index);
 
                  }
 
            }
 
      }
 
  
 +
// permet de dérouler/enrouler les boîtes en cliquant n'importe où sur l'entête
 +
$content.find( '.NavHead' )
 +
.click( function ( e ) {
 +
if ( $( e.target ).closest( 'a' ).length ) {
 +
return;
 +
}
 +
var toggle = $( this ).siblings( 'a.NavToggle' )[0];
 +
if ( toggle ) {
 +
toggle.click(); // pas du jquery, mais du vanilla js
 +
}
 +
} )
 +
    .css( 'cursor', 'pointer' );
 
}
 
}
addOnloadHook(BoiteDeroulante);
 
  
 +
mw.hook( 'wikipage.content' ).add( BoiteDeroulante );
  
/*********************************/
+
/**
/* Autres fonctions non classées */
+
* FIN : Boîtes déroulantes
/*********************************/
 
 
/*
 
* 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;
+
* Ajouter un bouton à la fin de la barre d'outils
   
+
  */
try {
+
if ( typeof addCustomButton === 'undefined' ) {
result = eval(nom_variable.toString());
+
mw.log.deprecate( window, 'addCustomButton', function ( imageFile, speedTip, tagOpen, tagClose, sampleText, imageId ) {
} catch (e) {
+
if ( mw.toolbar ) {
result = val_defaut;
+
mw.toolbar.addButton( {
}
+
imageFile: imageFile.replace( /^http:(\/\/upload\.wikimedia\.org\/)/, '$1' ),
+
speedTip: speedTip,
return(result);
+
tagOpen: tagOpen,
 +
tagClose: tagClose,
 +
sampleText: sampleText,
 +
imageId: imageId
 +
} );
 +
}
 +
}, 'Use mw.toolbar.addButton instead.' );
 
}
 
}
+
 
 
/*
 
/*
* Fonction
+
Bilingual links
*
+
Functions through the DoubleWiki extension.
* Retourne une chaîne de caractères de la date courante selon dans un certain format
+
Author: wikisource:fr:ThomasV, jQuery version by wikipedia:en:GreenReaper
* @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)
+
$(function(){
{
+
     var doc_url = document.URL;
  var str_mois = new Array();
+
     // iterate over all interlanguage links
  with (str_mois)
+
    $('.interlanguage-link>a[hreflang]').each(function() {
  {
+
      var lang = this.getAttribute("hreflang");
     push("janvier");
+
      var qm = doc_url.indexOf( doc_url.indexOf('?title=') != -1 ? '&match=' : '?' );
    push("février");
+
      var url = doc_url+"?match="+lang;
    push("mars");
+
      if( qm != -1 ) url = doc_url.substring(0,qm)+"?match="+lang;
    push("avril");
+
      this.outerHTML += "<a href='"+url+"'> ⇔</a>";
    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 actuelle datée du 28 septembre 2020 à 20:23

/*
 * Use Gadgets whenever possible to minimize loading for all users for every page.
 * Wait for mediawiki.util to be ready because some things assume its availability.
 */

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

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

var Palette_max = 1;

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

function Palette( $content ) {

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

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

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

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

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

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

/**
* Boîtes déroulantes
* Source : https://en.wikipedia.org/wiki/MediaWiki:Common.js
*/

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

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

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

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

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

function BoiteDeroulante( $content ) {

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

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

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

		NavFrame.insertBefore(NavToggle, NavFrame.firstChild);

		BoiteDeroulante_toggle(NavToggle);
	} );

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

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

/**
* FIN : Boîtes déroulantes
*/

/**
 * Ajouter un bouton à la fin de la barre d'outils
 */
if ( typeof addCustomButton === 'undefined' ) {
	mw.log.deprecate( window, 'addCustomButton', function ( imageFile, speedTip, tagOpen, tagClose, sampleText, imageId ) {
		if ( mw.toolbar ) {
			mw.toolbar.addButton( {
				imageFile: imageFile.replace( /^http:(\/\/upload\.wikimedia\.org\/)/, '$1' ),
				speedTip: speedTip,
				tagOpen: tagOpen,
				tagClose: tagClose,
				sampleText: sampleText,
				imageId: imageId
			} );
		}
	}, 'Use mw.toolbar.addButton instead.' );
}

/*
Bilingual links
Functions through the DoubleWiki extension. 
Author: wikisource:fr:ThomasV, jQuery version by wikipedia:en:GreenReaper
*/
$(function(){
    var doc_url = document.URL;
    // iterate over all interlanguage links
    $('.interlanguage-link>a[hreflang]').each(function() {
      var lang = this.getAttribute("hreflang");
      var qm = doc_url.indexOf( doc_url.indexOf('?title=') != -1 ? '&match=' : '?' );
      var url = doc_url+"?match="+lang;
      if( qm != -1 ) url = doc_url.substring(0,qm)+"?match="+lang;
      this.outerHTML += "<a href='"+url+"'> ⇔</a>";
    })
})