MediaWiki:Common.js : Différence entre versions

De La Grande Bibliotheque de Tamriel
Aller à : navigation, rechercher
 
(31 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';
 
  
window.collapseTable = function ( tableIndex ) {
+
var Palette_max = 1;
    var Button = document.getElementById( 'collapseButton' + tableIndex );
 
    var Table = document.getElementById( 'collapsibleTable' + tableIndex );
 
  
    if ( !Table || !Button ) {
+
function Palette_toggle( $table ) {
        return false;
+
$table.find( 'tr:not(:first)' ).toggleClass( 'navboxHidden' );
    }
+
}
  
    var Rows = Table.rows;
+
function Palette( $content ) {
    var i;
 
  
    if ( Button.firstChild.data === collapseCaption ) {
+
var $tables = $content.find( 'table.collapsible' );
        for ( i = 1; i < Rows.length; i++ ) {
+
var groups = {};
            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() {
+
$tables.each( function( _, table ) {
    var tableIndex = 0;
+
var group = table.dataset.autocollapseGroup || '__default__';
    var NavigationBoxes = {};
+
groups[group] = ( groups[group] || 0 ) + 1;
    var Tables = document.getElementsByTagName( 'table' );
+
} );
    var i;
 
  
    function handleButtonLink( index, e ) {
+
$tables.each( function( _, table ) {
        window.collapseTable( index );
+
var $table = $( table );
        e.preventDefault();
 
    }
 
  
    for ( i = 0; i < Tables.length; i++ ) {
+
var group = table.dataset.autocollapseGroup || '__default__';
        if ( $( Tables[i] ).hasClass( 'collapsible' ) ) {
+
var autoCollapse = groups[group] > Palette_max;
 +
var collapsed = $table.hasClass( 'collapsed' ) || ( autoCollapse && $table.hasClass( 'autocollapse' ) );
  
            /* only add button and increment count if there is a header row to work with */
+
// le modèle dispose d'une classe "navbox-title",
            var HeaderRow = Tables[i].getElementsByTagName( 'tr' )[0];
+
// sauf que les palettes "inlinées" (e.g. « {| class="navbox collapsible collapsed" ») n'ont pas cette classe
            if ( !HeaderRow ) continue;
+
$table.find( 'tr:first th:first' ).prepend(
            var Header = HeaderRow.getElementsByTagName( 'th' )[0];
+
$( '<span class="navboxToggle">\u00a0</span>' ).append(
            if ( !Header ) continue;
+
$( '<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 );
 +
}
 +
} );
  
            NavigationBoxes[ tableIndex ] = Tables[i];
+
// permet de dérouler/enrouler les palettes en cliquant n'importe où sur l'entête
            Tables[i].setAttribute( 'id', 'collapsibleTable' + tableIndex );
+
// (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 );
  
            var Button    = document.createElement( 'span' );
+
/**
            var ButtonLink = document.createElement( 'a' );
+
* Boîtes déroulantes
            var ButtonText = document.createTextNode( collapseCaption );
+
* Source : https://en.wikipedia.org/wiki/MediaWiki:Common.js
 +
*/
  
            Button.className = 'collapseButton'; /* Styles are declared in Common.css */
+
var BoiteDeroulante_Derouler = '[afficher]';
 +
var BoiteDeroulante_Enrouler = '[masquer]';
  
            ButtonLink.style.color = Header.style.color;
+
function BoiteDeroulante_toggle(NavToggle){
            ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex );
+
    var NavFrame = NavToggle.parentNode;
            ButtonLink.setAttribute( 'href', '#' );
 
            $( ButtonLink ).on( 'click', $.proxy( handleButtonLink, ButtonLink, tableIndex ) );
 
            ButtonLink.appendChild( ButtonText );
 
  
            Button.appendChild( document.createTextNode( '[' ) );
+
var caption = [];
            Button.appendChild( ButtonLink );
+
caption[0] = NavFrame.dataset.boiteDeroulanteDerouler;
            Button.appendChild( document.createTextNode( ']' ) );
+
caption[1] = NavFrame.dataset.boiteDeroulanteEnrouler;
  
            Header.insertBefore( Button, Header.firstChild );
+
var $NavContent = $(NavFrame).find('.NavContent').first();
            tableIndex++;
 
        }
 
    }
 
  
    for ( i = 0;  i < tableIndex; i++ ) {
+
if ( NavToggle.textContent === caption[1] ) {
         if ( $( NavigationBoxes[i] ).hasClass( 'collapsed' ) || ( tableIndex >= autoCollapse && $( NavigationBoxes[i] ).hasClass( 'autocollapse' ) ) ) {
+
         NavToggle.textContent = caption[0];
            window.collapseTable( i );
+
$NavContent.hide();
        }  
+
} else {
        else if ( $( NavigationBoxes[i] ).hasClass ( 'innercollapse' ) ) {
+
NavToggle.textContent = caption[1];
            var element = NavigationBoxes[i];
+
$NavContent.show();
            while ((element = element.parentNode)) {
+
}
                if ( $( element ).hasClass( 'outercollapse' ) ) {
 
                    window.collapseTable ( i );
 
                    break;
 
                }
 
            }
 
        }
 
    }
 
 
}
 
}
  
mw.hook( 'wikipage.content' ).add( createCollapseButtons );
+
function BoiteDeroulante( $content ) {
  
/**
+
$content.find( '.NavFrame' ).each( function ( _, NavFrame ) {
* Dynamic Navigation Bars (experimental)
+
var CustomTexts, Derouler, Enrouler, NavToggle;
*
 
* Description: See [[Wikipedia:NavFrame]].
 
* Maintainers: UNMAINTAINED
 
*/
 
  
/* set up the words in your language */
+
if (NavFrame.title && NavFrame.title.indexOf("/") !== -1) {
var NavigationBarHide = '[' + collapseCaption + ']';
+
CustomTexts = NavFrame.title.split("/");
var NavigationBarShow = '[' + expandCaption + ']';
+
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");
* Shows and hides content and picture (if available) of navigation bars
+
NavToggle.className = 'NavToggle';
* Parameters:
+
NavToggle.href = 'javascript:';
*    indexNavigationBar: the index of navigation bar to be toggled
+
NavToggle.onclick = function (e) {
**/
+
e.preventDefault();
window.toggleNavigationBar = function ( indexNavigationBar, event ) {
+
BoiteDeroulante_toggle(e.target);
    var NavToggle = document.getElementById( 'NavToggle' + indexNavigationBar );
+
};
    var NavFrame = document.getElementById( 'NavFrame' + indexNavigationBar );
+
NavToggle.textContent = Enrouler;
    var NavChild;
 
  
    if ( !NavFrame || !NavToggle ) {
+
NavFrame.insertBefore(NavToggle, NavFrame.firstChild);
        return false;
 
    }
 
  
    /* if shown now */
+
BoiteDeroulante_toggle(NavToggle);
    if ( NavToggle.firstChild.data === NavigationBarHide ) {
+
} );
        for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {
 
            if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {
 
                NavChild.style.display = 'none';
 
            }
 
        }
 
    NavToggle.firstChild.data = NavigationBarShow;
 
  
    /* if hidden now */
+
// permet de dérouler/enrouler les boîtes en cliquant n'importe où sur l'entête
    } else if ( NavToggle.firstChild.data === NavigationBarShow ) {
+
$content.find( '.NavHead' )
        for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {
+
.click( function ( e ) {
            if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {
+
if ( $( e.target ).closest( 'a' ).length ) {
                NavChild.style.display = 'block';
+
return;
            }
+
}
        }
+
var toggle = $( this ).siblings( 'a.NavToggle' )[0];
        NavToggle.firstChild.data = NavigationBarHide;
+
if ( toggle ) {
    }
+
toggle.click(); // pas du jquery, mais du vanilla js
 +
}
 +
} )
 +
    .css( 'cursor', 'pointer' );
 +
}
  
    event.preventDefault();
+
mw.hook( 'wikipage.content' ).add( BoiteDeroulante );
};
 
  
/* adds show/hide-button to navigation bars */
+
/**
function createNavigationBarToggleButton() {
+
* FIN : Boîtes déroulantes
    var indexNavigationBar = 0;
+
*/
    var NavFrame;
 
    var NavChild;
 
    /* iterate over all < div >-elements */
 
    var divs = document.getElementsByTagName( 'div' );
 
    for ( var i = 0; (NavFrame = divs[i]); i++ ) {
 
        /* if found a navigation bar */
 
        if ( $( NavFrame ).hasClass( 'NavFrame' ) ) {
 
  
            indexNavigationBar++;
+
/**
            var NavToggle = document.createElement( 'a' );
+
  * Ajouter un bouton à la fin de la barre d'outils
            NavToggle.className = 'NavToggle';
+
  */
            NavToggle.setAttribute( 'id', 'NavToggle' + indexNavigationBar );
+
if ( typeof addCustomButton === 'undefined' ) {
            NavToggle.setAttribute( 'href', '#' );
+
mw.log.deprecate( window, 'addCustomButton', function ( imageFile, speedTip, tagOpen, tagClose, sampleText, imageId ) {
            $( NavToggle ).on( 'click', $.proxy( window.toggleNavigationBar, window, indexNavigationBar ) );
+
if ( mw.toolbar ) {
 
+
mw.toolbar.addButton( {
            var isCollapsed = $( NavFrame ).hasClass( 'collapsed' );
+
imageFile: imageFile.replace( /^http:(\/\/upload\.wikimedia\.org\/)/, '$1' ),
            /**
+
speedTip: speedTip,
            * Check if any children are already hidden. This loop is here for backwards compatibility:
+
tagOpen: tagOpen,
            * the old way of making NavFrames start out collapsed was to manually add style="display:none"
+
tagClose: tagClose,
            * to all the NavPic/NavContent elements. Since this was bad for accessibility (no way to make
+
sampleText: sampleText,
            * the content visible without JavaScript support), the new recommended way is to add the class
+
imageId: imageId
            * "collapsed" to the NavFrame itself, just like with collapsible tables.
+
} );
            */
+
}
            for ( NavChild = NavFrame.firstChild; NavChild != null && !isCollapsed; NavChild = NavChild.nextSibling ) {
+
}, 'Use mw.toolbar.addButton instead.' );
                if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {
 
                    if ( NavChild.style.display === 'none' ) {
 
                        isCollapsed = true;
 
                    }
 
                }
 
            }
 
            if ( isCollapsed ) {
 
                for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {
 
                    if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {
 
                        NavChild.style.display = 'none';
 
                    }
 
                }
 
            }
 
            var NavToggleText = document.createTextNode( isCollapsed ? NavigationBarShow : NavigationBarHide );
 
            NavToggle.appendChild( NavToggleText );
 
 
 
            /* Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked) */
 
            for( var j = 0; j < NavFrame.childNodes.length; j++ ) {
 
                if ( $( NavFrame.childNodes[j] ).hasClass( 'NavHead' ) ) {
 
                    NavToggle.style.color = NavFrame.childNodes[j].style.color;
 
                    NavFrame.childNodes[j].appendChild( NavToggle );
 
                }
 
            }
 
            NavFrame.setAttribute( 'id', 'NavFrame' + indexNavigationBar );
 
        }
 
    }
 
 
}
 
}
  
mw.hook( 'wikipage.content' ).add( createNavigationBarToggleButton );
+
/*
 +
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>";
    })
})