MediaWiki:Common.js

De Poképédia
Aller à la navigation Aller à la recherche

Note : après avoir publié vos modifications, il se peut que vous deviez forcer le rechargement complet du cache de votre navigateur pour voir les changements.

  • Firefox / Safari : maintenez la touche Maj (Shift) en cliquant sur le bouton Actualiser ou appuyez sur Ctrl + F5 ou Ctrl + R (⌘ + R sur un Mac).
  • Google Chrome : appuyez sur Ctrl + Maj + R (⌘ + Shift + R sur un Mac).
  • Internet Explorer / Edge : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl + F5.
  • Opera : appuyez sur Ctrl + F5.
/* Tout JavaScript ici sera chargé avec chaque page accédée par n’importe quel utilisateur. */

/* Le tri des tableaux via la classe CSS sortable est naïf et les lettres accentuées sont triées après la lettre Z.
   Cette petite ligne corrige ça. */
mw.config.set('tableSorterCollation', {'à': 'a', 'â': 'a', 'ä': 'a', 'ç': 'c', 'é': 'e', 'è': 'e', 'ê': 'e', 'ë': 'e',
'ô': 'o', 'ö': 'o', 'î': 'i', 'ï': 'i', 'û': 'u', 'ü': 'u'});


/**
 * Vector HeadAnchors
 * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-vector-headanchor.js
 * @revision 2015-03-07
 *
 * @license http://krinkle.mit-license.org/
 * @author Timo Tijhof, 2013–2015
 */
( function ( $ ) {
	$( '.mw-headline' ).each( function ( i, el ) {
		var id = el.id,
			$headline = $( el ),
			$header = $headline.parent();
		if ( !id || $header.find( '.mw-headline-anchor,.mw-headline-headanchor').length ) {
			return;
		}
		$headline.removeAttr('id');
		$header.addClass( 'mw-header' ).prepend(
			$( '<a>' ).prop({
				id: id,
				href: '#' + id,
				title: 'Lien vers cette section',
				className: 'mw-headline-headanchor'
			})
		);
	} );
}( jQuery ) );


/* collapsible/collapsed avec MediaWiki */
$( '.collapsible, .enroulable' ).addClass( 'mw-collapsible' );
$( '.collapsed, .enroulé' ).addClass( 'mw-collapsed' );

/* alias français */
$( '.triable' ).addClass( 'sortable' );


/**
 * Bouton pour afficher/masquer un contenu.
 * Idée de départ : http://encyclopediadramatica.com/MediaWiki:Common.js par WhiteMystery (misterioblanco@gmail.com)
 * Créateur : [[Utilisateur:Misdre]]
 * Licence : WTFPL ou Creative Commons Paternité 2.5 ou suivantes
 * Plus d'informations ici : [[Aide:Afficher et masquer du contenu]]
 */

// todo :
// remettre le display initial
// -> il faudrait conserver toutes les valeures initiales de display (mais ça marche déjà très bien)

function boutonsAfficherMasquer() {
	var balisesBoutons = document.querySelectorAll('button:not(.masquage)');
	var cibles = [];
	var nbPartiesCachees = 0;

	for ( var i = 0; i < balisesBoutons.length; i++ ) {
		// on cherche les boutons afficher-masquer dans la page
		// on trouve un bouton qui servira à afficher une partie cachée
		if ( balisesBoutons[i].getAttribute("value") == "afficher" ) {
			if ( !balisesBoutons[i].hasAttribute("title") || balisesBoutons[i].getAttribute("title") === "" )
				balisesBoutons[i].setAttribute("title", "[Masquer]");
			if ( typeof(balisesBoutons[i].textContent) != "undefined") {
				if ( balisesBoutons[i].textContent === "" )
					balisesBoutons[i].textContent = "[Afficher]";
			}
			else {
				if ( balisesBoutons[i].innerText === "" )
					balisesBoutons[i].innerText = "[Afficher]";
			}
			balisesBoutons[i].setAttribute("onclick", "afficherMasquer(this)");
			balisesBoutons[i].style.display = 'inline-block';
			nbPartiesCachees++;
			cibles[nbPartiesCachees-1] = balisesBoutons[i].getAttribute("name");
		}
		else if ( balisesBoutons[i].getAttribute("value") == "masquer" ) {
			if ( !balisesBoutons[i].hasAttribute("title") || balisesBoutons[i].getAttribute("title") === "" )
				balisesBoutons[i].setAttribute("title", "[Afficher]");
			if ( typeof(balisesBoutons[i].textContent) != "undefined") {
				if ( balisesBoutons[i].textContent === "" )
					balisesBoutons[i].textContent = "[Masquer]";
				}
			else {
				if ( balisesBoutons[i].innerText === "" )
					balisesBoutons[i].innerText = "[Masquer]";
			}
			balisesBoutons[i].setAttribute("onclick", "afficherMasquer(this)");
			balisesBoutons[i].style.display = 'inline-block';
		}
	}	

	// on cache les parties censées être cachées (celles ciblées par un bouton afficher)
	var balises = document.getElementsByTagName('*');
	for ( var i = 0; i < balises.length; i++ ) {
		for( var j = 0; j < cibles.length; j++ ) {
			if ( $( balises[i] ).hasClass( cibles[j] ) ) {
				balises[i].style.display = "none";
				break;
			}
		}
	}
}

function afficherMasquer(sourceAction) {
	var classeCible = sourceAction.getAttribute("name");
	var typeAction = sourceAction.getAttribute("value");
	var balises = document.getElementsByTagName('*');
	for ( var i = 0; i < balises.length; i++ ) {
		if ( $( balises[i] ).hasClass( classeCible ) ) {
			if ( typeAction == "afficher" ) {
				balises[i].style.display = '';
			}
			else {
				balises[i].style.display = "none";
			}
		}
	}

	var balisesBoutons = document.querySelectorAll('button:not(.masquage)');
	for ( var i = 0; i < balisesBoutons.length; i++ ) {
		var tmp;
		if ( balisesBoutons[i].getAttribute("value") == "afficher" && balisesBoutons[i].getAttribute("name") == classeCible) {
			if ( typeof(balisesBoutons[i].textContent) != "undefined") {
				tmp = balisesBoutons[i].textContent;
				balisesBoutons[i].textContent = balisesBoutons[i].getAttribute("title");
			}
			else {
				tmp = balisesBoutons[i].innerText;
				balisesBoutons[i].innerText = balisesBoutons[i].getAttribute("title");
			}
			balisesBoutons[i].setAttribute("title", tmp);
			balisesBoutons[i].setAttribute("value", "masquer");
		}
		else if ( balisesBoutons[i].getAttribute("value") == "masquer" && balisesBoutons[i].getAttribute("name") == classeCible) {
			if ( typeof(balisesBoutons[i].textContent) != "undefined") {
				tmp = balisesBoutons[i].textContent;
				balisesBoutons[i].textContent = balisesBoutons[i].getAttribute("title");
			}
			else {
				tmp = balisesBoutons[i].innerText;
				balisesBoutons[i].innerText = balisesBoutons[i].getAttribute("title");
			}
			balisesBoutons[i].setAttribute("title", tmp);
			balisesBoutons[i].setAttribute("value", "afficher");
		}
	}
}

jQuery( boutonsAfficherMasquer );


/* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach#Compatibility */
/* Pour IE8 */
if (!Array.prototype.forEach) {
	Array.prototype.forEach = function (fn, scope) {
		'use strict';
		var i, len;
		for (i = 0, len = this.length; i < len; ++i) {
			if (i in this) {
				fn.call(scope, this[i], i, this);
			}
		}
	};
}

/* Animation de capacité */
jQuery( function(){
	var runAnimationElems = document.querySelectorAll(".run-animation");
	for(var i=0; i<runAnimationElems.length; i++) {
		if(runAnimationElems[i].parentNode.querySelector(".url-animation a")) {
			runAnimationElems[i].addEventListener("click", function() {
				this.innerHTML = "<small>Chargement en cours...</small>";
				this.parentNode.querySelector("a.image img").addEventListener("load", function() {
					this.parentNode.parentNode.querySelector(".run-animation").style.visibility="hidden";
				}),
				this.parentNode.querySelector("a.image").setAttribute("href", "/Fichier:"+this.parentNode.querySelector(".url-animation a").getAttribute("title"));
				this.parentNode.querySelector("a.image img").setAttribute("src", this.parentNode.querySelector(".url-animation a").getAttribute("href"));
			});
		}
	}
});