MediaWiki:Common.js : Différence entre versions

De La Grande Bibliotheque de Tamriel
Aller à : navigation, rechercher
 
(28 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 = {};
  
  var Rows = Table.rows;
+
$tables.each( function( _, table ) {
  var RowDisplay = "none";
+
var group = table.dataset.autocollapseGroup || '__default__';
  if (Button.firstChild.data == Palette_Derouler) {
+
groups[group] = ( groups[group] || 0 ) + 1;
    Button.firstChild.data = Palette_Enrouler;
+
} );
    RowDisplay = Rows[0].style.display;
+
 
  } else {
+
$tables.each( function( _, table ) {
    Button.firstChild.data = Palette_Derouler;
+
var $table = $( table );
  }
+
 
  for (var i = 1; i < Rows.length; i++) {
+
var group = table.dataset.autocollapseGroup || '__default__';
    Rows[i].style.display = RowDisplay
+
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 );
 +
}
 +
} );
  
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);
+
var caption = [];
      if (!NavFrame || !NavToggle || !CaptionContainer) return;
+
caption[0] = NavFrame.dataset.boiteDeroulanteDerouler;
      var caption = new Array();
+
caption[1] = NavFrame.dataset.boiteDeroulanteEnrouler;
      var CaptionSpans = CaptionContainer.getElementsByTagName('span');
+
 
      caption[0] = CaptionSpans[0].innerHTML;
+
var $NavContent = $(NavFrame).find('.NavContent').first();
      caption[1] = CaptionSpans[1].innerHTML;
 
  
      var Contents = NavFrame.getElementsByTagName('div');
+
if ( NavToggle.textContent === caption[1] ) {
      if (NavToggle.innerHTML == caption[1]) {
+
        NavToggle.textContent = caption[0];
            NavToggle.innerHTML = caption[0];
+
$NavContent.hide();
            for(var a=0,m=Contents.length;a<m;a++){
+
} else {
                  if(hasClass(Contents[a], "NavContent")){
+
NavToggle.textContent = caption[1];
                        Contents[a].style.display = 'none';
+
$NavContent.show();
                        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){
+
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 );
 +
 
 +
/**
 +
* 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>";
 +
    })
 +
})

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>";
    })
})