Basculer le menu
Changer de menu des préférences
Basculer le menu personnel
Non connecté(e)
Votre adresse IP sera visible au public si vous faites des modifications.

« MediaWiki:Common.js » : différence entre les versions

Page de l’interface de MediaWiki
Aucun résumé des modifications
Aucun résumé des modifications
Ligne 1 : Ligne 1 :
/* Tout JavaScript présent ici sera exécuté par tous les utilisateurs à chaque chargement de page. */
/* Tout JavaScript present ici sera execute par tous les utilisateurs a chaque chargement de page. */


/* ===== Fil d'Ariane des tuiles dans l'en-tete (skin Citizen) =====
/* ===== Fil d'Ariane des tuiles dans l'en-tete (skin Citizen) =====
   Affiche entre Accueil et Recherche la/les tuile(s) qui contient(ent)
   Affiche entre Accueil et Recherche un rectangle noir avec le titre
  la page courante (tuile directe ou tuile parente d'un sous-article).
  de la/les tuile(s) qui contient(ent) la page courante
   Version sans jQuery, compatible MediaWiki 1.45. */
  (tuile directe ou tuile parente d'un sous-article).
   MediaWiki 1.45 : le module mediawiki.title n'existe plus,
  mw.Title est fourni par mediawiki.api. */
( function () {
( function () {
'use strict';
'use strict';
Ligne 10 : Ligne 12 :
var current = mw.config.get( 'wgPageName' );
var current = mw.config.get( 'wgPageName' );
if ( current === 'Accueil' ) return;
if ( current === 'Accueil' ) return;
function titreNormalise( nom ) {
try { return new mw.Title( nom ).toText(); }
catch ( e ) { return nom; }
}


function pastilles( tuiles ) {
function pastilles( tuiles ) {
Ligne 23 : Ligne 30 :
a.className = 'tuile-pastille';
a.className = 'tuile-pastille';
a.title = 'Retour a la tuile : ' + t.titre;
a.title = 'Retour a la tuile : ' + t.titre;
var img = document.createElement( 'img' );
img.src = mw.util.wikiScript() + '?title=Special:FilePath&file=' +
encodeURIComponent( 'Tuile ' + t.key + '.webp' ) + '&width=44';
img.alt = '';
var span = document.createElement( 'span' );
var span = document.createElement( 'span' );
span.textContent = t.titre;
span.textContent = t.titre;
a.appendChild( img );
a.appendChild( span );
a.appendChild( span );
zone.appendChild( a );
zone.appendChild( a );
Ligne 38 : Ligne 40 :
function lancer() {
function lancer() {
var api = new mw.Api();
var api = new mw.Api();
var norm = mw.title.new( current ).prefixedText;
var norm = titreNormalise( current );
api.get( { action: 'parse', page: 'Accueil', prop: 'text', formatversion: 2 } )
api.get( { action: 'parse', page: 'Accueil', prop: 'text', formatversion: 2 } )
.then( function ( data ) {
.then( function ( data ) {
Ligne 55 : Ligne 57 :
} );
} );
var trouvees = tuiles.filter( function ( t ) {
var trouvees = tuiles.filter( function ( t ) {
return mw.title.new( t.cible ).prefixedText === norm;
return titreNormalise( t.cible ) === norm;
} );
} );
return api.get( { action: 'query', list: 'backlinks', bltitle: norm,
return api.get( { action: 'query', list: 'backlinks', bltitle: norm,
Ligne 62 : Ligne 64 :
var liens = ( bd.query.backlinks || [] ).map( function ( p ) { return p.title; } );
var liens = ( bd.query.backlinks || [] ).map( function ( p ) { return p.title; } );
tuiles.forEach( function ( t ) {
tuiles.forEach( function ( t ) {
var cibleNorm = mw.title.new( t.cible ).prefixedText;
var cibleNorm = titreNormalise( t.cible );
if ( cibleNorm !== norm && liens.indexOf( cibleNorm ) !== -1 ) {
if ( cibleNorm !== norm && liens.indexOf( cibleNorm ) !== -1 ) {
trouvees.push( t );
trouvees.push( t );
Ligne 78 : Ligne 80 :


quandPret( function () {
quandPret( function () {
mw.loader.using( [ 'mediawiki.api', 'mediawiki.util', 'mediawiki.title' ], lancer );
mw.loader.using( [ 'mediawiki.api', 'mediawiki.util' ], lancer );
} );
} );
}() );
}() );

Version du 24 octobre 2026 à 12:38

/* Tout JavaScript present ici sera execute par tous les utilisateurs a chaque chargement de page. */

/* ===== Fil d'Ariane des tuiles dans l'en-tete (skin Citizen) =====
   Affiche entre Accueil et Recherche un rectangle noir avec le titre
   de la/les tuile(s) qui contient(ent) la page courante
   (tuile directe ou tuile parente d'un sous-article).
   MediaWiki 1.45 : le module mediawiki.title n'existe plus,
   mw.Title est fourni par mediawiki.api. */
( function () {
	'use strict';
	if ( mw.config.get( 'wgNamespaceNumber' ) !== 0 ) return;
	var current = mw.config.get( 'wgPageName' );
	if ( current === 'Accueil' ) return;

	function titreNormalise( nom ) {
		try { return new mw.Title( nom ).toText(); }
		catch ( e ) { return nom; }
	}

	function pastilles( tuiles ) {
		var header = document.querySelector( '.citizen-header' );
		if ( !header ) return;
		var logo = header.querySelector( '.citizen-header__logo' );
		if ( !logo ) return;
		var zone = document.createElement( 'div' );
		zone.className = 'tuile-fil-ariane citizen-header__item';
		tuiles.forEach( function ( t ) {
			var a = document.createElement( 'a' );
			a.href = mw.util.getUrl( t.cible );
			a.className = 'tuile-pastille';
			a.title = 'Retour a la tuile : ' + t.titre;
			var span = document.createElement( 'span' );
			span.textContent = t.titre;
			a.appendChild( span );
			zone.appendChild( a );
		} );
		logo.insertAdjacentElement( 'afterend', zone );
	}

	function lancer() {
		var api = new mw.Api();
		var norm = titreNormalise( current );
		api.get( { action: 'parse', page: 'Accueil', prop: 'text', formatversion: 2 } )
		.then( function ( data ) {
			var doc = new DOMParser().parseFromString( data.parse.text, 'text/html' );
			var tuiles = [];
			doc.querySelectorAll( '.accueil-tile' ).forEach( function ( el ) {
				var cible = el.getAttribute( 'data-cible' );
				var cle = el.getAttribute( 'data-tuile' );
				var titre = el.querySelector( '.accueil-tile-title' );
				if ( cible && cle ) {
					tuiles.push( {
						cible: cible, key: cle,
						titre: titre ? titre.textContent.trim() : cle
					} );
				}
			} );
			var trouvees = tuiles.filter( function ( t ) {
				return titreNormalise( t.cible ) === norm;
			} );
			return api.get( { action: 'query', list: 'backlinks', bltitle: norm,
				bllimit: 500, blnamespace: 0, formatversion: 2 } )
			.then( function ( bd ) {
				var liens = ( bd.query.backlinks || [] ).map( function ( p ) { return p.title; } );
				tuiles.forEach( function ( t ) {
					var cibleNorm = titreNormalise( t.cible );
					if ( cibleNorm !== norm && liens.indexOf( cibleNorm ) !== -1 ) {
						trouvees.push( t );
					}
				} );
				if ( trouvees.length ) pastilles( trouvees );
			} );
		} );
	}

	function quandPret( fn ) {
		if ( document.readyState !== 'loading' ) { fn(); }
		else { document.addEventListener( 'DOMContentLoaded', fn ); }
	}

	quandPret( function () {
		mw.loader.using( [ 'mediawiki.api', 'mediawiki.util' ], lancer );
	} );
}() );