MediaWiki:Common.js : Différence entre versions

De La Grande Bibliotheque de Tamriel
Aller à : navigation, rechercher
 
(26 révisions intermédiaires par 3 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
 +
/*
 +
* 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.
 +
*/
 +
 
/**
 
/**
  * Collapsible tables *********************************************************
+
  * Boîtes déroulantes
 
  *
 
  *
  * Description: Allows tables to be collapsed, showing only the header. See
+
  * Pour [[Modèle:Méta palette de navigation]]
*              [[Wikipedia:NavFrame]].
 
* Maintainers: [[User:R. Koot]]
 
 
  */
 
  */
  
var autoCollapse = 2;
+
var Palette_Derouler = '[afficher]';
var collapseCaption = 'hide';
+
var Palette_Enrouler = '[masquer]';
var expandCaption = 'show';
+
 
 +
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
 +
*/
  
window.collapseTable = function ( tableIndex ) {
+
var BoiteDeroulante_Derouler = '[afficher]';
    var Button = document.getElementById( 'collapseButton' + tableIndex );
+
var BoiteDeroulante_Enrouler = '[masquer]';
    var Table = document.getElementById( 'collapsibleTable' + tableIndex );
 
  
    if ( !Table || !Button ) {
+
function BoiteDeroulante_toggle(NavToggle){
        return false;
+
    var NavFrame = NavToggle.parentNode;
    }
 
  
    var Rows = Table.rows;
+
var caption = [];
    var i;
+
caption[0] = NavFrame.dataset.boiteDeroulanteDerouler;
 +
caption[1] = NavFrame.dataset.boiteDeroulanteEnrouler;
  
    if ( Button.firstChild.data === collapseCaption ) {
+
var $NavContent = $(NavFrame).find('.NavContent').first();
        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() {
+
if ( NavToggle.textContent === caption[1] ) {
    var tableIndex = 0;
+
        NavToggle.textContent = caption[0];
    var NavigationBoxes = {};
+
$NavContent.hide();
    var Tables = document.getElementsByTagName( 'table' );
+
} else {
    var i;
+
NavToggle.textContent = caption[1];
 +
$NavContent.show();
 +
}
 +
}
  
    function handleButtonLink( index, e ) {
+
function BoiteDeroulante( $content ) {
        window.collapseTable( index );
 
        e.preventDefault();
 
    }
 
  
    for ( i = 0; i < Tables.length; i++ ) {
+
$content.find( '.NavFrame' ).each( function ( _, NavFrame ) {
        if ( $( Tables[i] ).hasClass( 'collapsible' ) ) {
+
var CustomTexts, Derouler, Enrouler, NavToggle;
  
            /* only add button and increment count if there is a header row to work with */
+
if (NavFrame.title && NavFrame.title.indexOf("/") !== -1) {
            var HeaderRow = Tables[i].getElementsByTagName( 'tr' )[0];
+
CustomTexts = NavFrame.title.split("/");
            if ( !HeaderRow ) continue;
+
Derouler = CustomTexts[0];
            var Header = HeaderRow.getElementsByTagName( 'th' )[0];
+
Enrouler = CustomTexts[1];
            if ( !Header ) continue;
+
} else {
 +
Derouler = BoiteDeroulante_Derouler;
 +
Enrouler = BoiteDeroulante_Enrouler;
 +
}
 +
NavFrame.title = '';
 +
NavFrame.dataset.boiteDeroulanteDerouler = Derouler;
 +
NavFrame.dataset.boiteDeroulanteEnrouler = Enrouler;
  
            NavigationBoxes[ tableIndex ] = Tables[i];
+
NavToggle = document.createElement("a");
            Tables[i].setAttribute( 'id', 'collapsibleTable' + tableIndex );
+
NavToggle.className = 'NavToggle';
 +
NavToggle.href = 'javascript:';
 +
NavToggle.onclick = function (e) {
 +
e.preventDefault();
 +
BoiteDeroulante_toggle(e.target);
 +
};
 +
NavToggle.textContent = Enrouler;
  
            var Button    = document.createElement( 'span' );
+
NavFrame.insertBefore(NavToggle, NavFrame.firstChild);
            var ButtonLink = document.createElement( 'a' );
 
            var ButtonText = document.createTextNode( collapseCaption );
 
  
            Button.className = 'collapseButton'; /* Styles are declared in Common.css */
+
BoiteDeroulante_toggle(NavToggle);
 +
} );
  
            ButtonLink.style.color = Header.style.color;
+
// permet de dérouler/enrouler les boîtes en cliquant n'importe où sur l'entête
            ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex );
+
$content.find( '.NavHead' )
            ButtonLink.setAttribute( 'href', '#' );
+
.click( function ( e ) {
            $( ButtonLink ).on( 'click', $.proxy( handleButtonLink, ButtonLink, tableIndex ) );
+
if ( $( e.target ).closest( 'a' ).length ) {
            ButtonLink.appendChild( ButtonText );
+
return;
 +
}
 +
var toggle = $( this ).siblings( 'a.NavToggle' )[0];
 +
if ( toggle ) {
 +
toggle.click(); // pas du jquery, mais du vanilla js
 +
}
 +
} )
 +
    .css( 'cursor', 'pointer' );
 +
}
  
            Button.appendChild( document.createTextNode( '[' ) );
+
mw.hook( 'wikipage.content' ).add( BoiteDeroulante );
            Button.appendChild( ButtonLink );
 
            Button.appendChild( document.createTextNode( ']' ) );
 
  
            Header.insertBefore( Button, Header.firstChild );
+
/**
            tableIndex++;
+
* FIN : Boîtes déroulantes
        }
+
*/
    }
 
  
    for ( i = 0; i < tableIndex; i++ ) {
+
/**
        if ( $( NavigationBoxes[i] ).hasClass( 'collapsed' ) || ( tableIndex >= autoCollapse && $( NavigationBoxes[i] ).hasClass( 'autocollapse' ) ) ) {
+
* Ajouter un bouton à la fin de la barre d'outils
            window.collapseTable( i );
+
  */
        }
+
if ( typeof addCustomButton === 'undefined' ) {
        else if ( $( NavigationBoxes[i] ).hasClass ( 'innercollapse' ) ) {
+
mw.log.deprecate( window, 'addCustomButton', function ( imageFile, speedTip, tagOpen, tagClose, sampleText, imageId ) {
            var element = NavigationBoxes[i];
+
if ( mw.toolbar ) {
            while ((element = element.parentNode)) {
+
mw.toolbar.addButton( {
                if ( $( element ).hasClass( 'outercollapse' ) ) {
+
imageFile: imageFile.replace( /^http:(\/\/upload\.wikimedia\.org\/)/, '$1' ),
                    window.collapseTable ( i );
+
speedTip: speedTip,
                    break;
+
tagOpen: tagOpen,
                }
+
tagClose: tagClose,
            }
+
sampleText: sampleText,
        }
+
imageId: imageId
    }
+
} );
 +
}
 +
}, 'Use mw.toolbar.addButton instead.' );
 
}
 
}
  
mw.hook( 'wikipage.content' ).add( createCollapseButtons );
+
/*
 +
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>";
    })
})