Aller au contenu

MediaWiki:Common.js

De WikiColombes
Version datée du 9 septembre 2026 à 12:43 par Joebrable (discussion | contributions) (suppression catégorie)

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).
  •  Edge : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl + F5.
/* Le JS placé ici sera chargé pour tous les utilisateurs à chaque chargement de page. */

/* "Zoom sur une association" aléatoire sur la page d'accueil : pioche une association
 * différente dans [[Catégorie:Association de Colombes]] à chaque ouverture de la page,
 * en évitant si possible de répéter celle affichée lors de la visite précédente. */
$( function () {
	if ( mw.config.get( 'wgPageName' ) !== 'Accueil' ) {
		return;
	}
	var container = document.getElementById( 'wikicolombes-zoom-asso-content' );
	if ( !container ) {
		return;
	}

	var api = new mw.Api();

	api.get( {
		action: 'query',
		list: 'categorymembers',
		cmnamespace: 0,
		cmlimit: 500,
		format: 'json',
		formatversion: 2
	} ).done( function ( data ) {
		var members = ( data.query && data.query.categorymembers ) || [];
		if ( !members.length ) {
			return;
		}

		var lastTitle = null;
		try {
			lastTitle = sessionStorage.getItem( 'wikicolombes-zoom-asso-last' );
		} catch ( e ) {
			lastTitle = null;
		}

		var pool = members;
		if ( lastTitle && members.length > 1 ) {
			pool = members.filter( function ( m ) {
				return m.title !== lastTitle;
			} );
		}

		var pick = pool[ Math.floor( Math.random() * pool.length ) ];

		try {
			sessionStorage.setItem( 'wikicolombes-zoom-asso-last', pick.title );
		} catch ( e ) {}

		api.get( {
			action: 'parse',
			page: pick.title,
			prop: 'text',
			section: 0,
			format: 'json',
			formatversion: 2
		} ).done( function ( parseData ) {
			var html = ( parseData.parse && parseData.parse.text ) || '';
			var tmp = document.createElement( 'div' );
			tmp.innerHTML = html;
			var text = ( tmp.textContent || '' ).replace( /\s+/g, ' ' ).trim();
			if ( text.length > 160 ) {
				text = text.slice( 0, 160 ).replace( /\s+\S*$/, '' ) + '…';
			}

			while ( container.firstChild ) {
				container.removeChild( container.firstChild );
			}

			var strong = document.createElement( 'strong' );
			var link = document.createElement( 'a' );
			link.href = mw.util.getUrl( pick.title );
			link.textContent = 'L\'association ' + pick.title;
			strong.appendChild( link );
			container.appendChild( strong );

			if ( text ) {
				container.appendChild( document.createElement( 'br' ) );
				container.appendChild( document.createTextNode( text ) );
			}
		} );
	} );
} );