MediaWiki:Common.js : Différence entre versions

De La Grande Bibliotheque de Tamriel
Aller à : navigation, rechercher
 
(7 révisions intermédiaires par 3 utilisateurs non affichées)
Ligne 3 : Ligne 3 :
 
  * Wait for mediawiki.util to be ready because some things assume its availability.
 
  * Wait for mediawiki.util to be ready because some things assume its availability.
 
  */
 
  */
mw.loader.using( 'mediawiki.util', function() {
 
    /**
 
    * Boîtes déroulantes
 
    * Source : https://en.wikipedia.org/wiki/MediaWiki:Common.js
 
    */
 
  
    var autoCollapse = 2;
+
/**
    var collapseCaption = 'masquer';
+
* Boîtes déroulantes
    var expandCaption = 'afficher';
+
*
 +
* Pour [[Modèle:Méta palette de navigation]]
 +
*/
  
    window.collapseTable = function ( tableIndex ) {
+
var Palette_Derouler = '[afficher]';
        var Button = document.getElementById( 'collapseButton' + tableIndex );
+
var Palette_Enrouler = '[masquer]';
        var Table = document.getElementById( 'collapsibleTable' + tableIndex );
 
  
        if ( !Table || !Button ) {
+
var Palette_max = 1;
            return false;
 
        }
 
  
        var Rows = Table.rows;
+
function Palette_toggle( $table ) {
        var i;
+
$table.find( 'tr:not(:first)' ).toggleClass( 'navboxHidden' );
 +
}
  
        if ( Button.firstChild.data === collapseCaption ) {
+
function Palette( $content ) {
            for ( i = 1; i < Rows.length; i++ ) {
 
                Rows[i].style.display = 'none';
 
            }
 
            Button.firstChild.data = expandCaption;
 
        } else {
 
            for ( i = 1; i < Rows.length; i++ ) {
 
                Rows[i].style.display = Rows[0].style.display;
 
            }
 
            Button.firstChild.data = collapseCaption;
 
        }
 
    };
 
  
    function createCollapseButtons() {
+
var $tables = $content.find( 'table.collapsible' );
        var tableIndex = 0;
+
var groups = {};
        var NavigationBoxes = {};
 
        var Tables = document.getElementsByTagName( 'table' );
 
        var i;
 
  
        function handleButtonLink( index, e ) {
+
$tables.each( function( _, table ) {
            window.collapseTable( index );
+
var group = table.dataset.autocollapseGroup || '__default__';
            e.preventDefault();
+
groups[group] = ( groups[group] || 0 ) + 1;
        }
+
} );
  
        for ( i = 0; i < Tables.length; i++ ) {
+
$tables.each( function( _, table ) {
            if ( $( Tables[i] ).hasClass( 'collapsible' ) ) {
+
var $table = $( table );
   
 
                /* only add button and increment count if there is a header row to work with */
 
                var HeaderRow = Tables[i].getElementsByTagName( 'tr' )[0];
 
                if ( !HeaderRow ) continue;
 
                var Header = HeaderRow.getElementsByTagName( 'th' )[0];
 
                if ( !Header ) continue;
 
  
                NavigationBoxes[ tableIndex ] = Tables[i];
+
var group = table.dataset.autocollapseGroup || '__default__';
                Tables[i].setAttribute( 'id', 'collapsibleTable' + tableIndex );
+
var autoCollapse = groups[group] > Palette_max;
 +
var collapsed = $table.hasClass( 'collapsed' ) || ( autoCollapse && $table.hasClass( 'autocollapse' ) );
  
                var Button    = document.createElement( 'span' );
+
// le modèle dispose d'une classe "navbox-title",
                var ButtonLink = document.createElement( 'a' );
+
// sauf que les palettes "inlinées" (e.g. « {| class="navbox collapsible collapsed" ») n'ont pas cette classe
                var ButtonText = document.createTextNode( collapseCaption );
+
$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 );
 +
}
 +
} );
  
                Button.className = 'collapseButton'; /* Styles are declared in Common.css */
+
// 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 );
  
                ButtonLink.style.color = Header.style.color;
+
/**
                ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex );
+
* Boîtes déroulantes
                ButtonLink.setAttribute( 'href', '#' );
+
* Source : https://en.wikipedia.org/wiki/MediaWiki:Common.js
                $( ButtonLink ).on( 'click', $.proxy( handleButtonLink, ButtonLink, tableIndex ) );
+
*/
                ButtonLink.appendChild( ButtonText );
 
  
                Button.appendChild( document.createTextNode( '[' ) );
+
var BoiteDeroulante_Derouler = '[afficher]';
                Button.appendChild( ButtonLink );
+
var BoiteDeroulante_Enrouler = '[masquer]';
                Button.appendChild( document.createTextNode( ']' ) );
 
  
                Header.insertBefore( Button, Header.firstChild );
+
function BoiteDeroulante_toggle(NavToggle){
                tableIndex++;
+
    var NavFrame = NavToggle.parentNode;
            }
 
        }
 
  
        for ( i = 0;  i < tableIndex; i++ ) {
+
var caption = [];
            if ( $( NavigationBoxes[i] ).hasClass( 'collapsed' ) || ( tableIndex >= autoCollapse && $( NavigationBoxes[i] ).hasClass( 'autocollapse' ) ) ) {
+
caption[0] = NavFrame.dataset.boiteDeroulanteDerouler;
                window.collapseTable( i );
+
caption[1] = NavFrame.dataset.boiteDeroulanteEnrouler;
            }
 
            else if ( $( NavigationBoxes[i] ).hasClass ( 'innercollapse' ) ) {
 
                var element = NavigationBoxes[i];
 
                while ((element = element.parentNode)) {
 
                    if ( $( element ).hasClass( 'outercollapse' ) ) {
 
                        window.collapseTable ( i );
 
                        break;
 
                    }
 
                }
 
            }
 
        }
 
    }
 
  
    mw.hook( 'wikipage.content' ).add( createCollapseButtons );
+
var $NavContent = $(NavFrame).find('.NavContent').first();
  
    /**
+
if ( NavToggle.textContent === caption[1] ) {
    * FIN : Boîtes déroulantes
+
        NavToggle.textContent = caption[0];
    */
+
$NavContent.hide();
 +
} else {
 +
NavToggle.textContent = caption[1];
 +
$NavContent.show();
 +
}
 +
}
  
    // Imported scripts
+
function BoiteDeroulante( $content ) {
    importScript('MediaWiki:Common.js/Slideshows.js');
 
  
   
+
$content.find( '.NavFrame' ).each( function ( _, NavFrame ) {
// DO NOT ADD CODE BELOW THIS LINE
+
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>";
 +
    })
 +
})

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