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

De DIOD Wiki
Aller à la navigation Aller à la recherche
Page créée avec « Tout JavaScript présent ici sera exécuté par tous les utilisateurs à chaque chargement de page. : $( function () { $( 'table.filtrable' ).each( function () { var $table = $( this ); var $th = $table.find( 'thead th' ); var selectCols = [ 3, 4 ]; // 3 = Attribution, 4 = Cible var $bar = $( '<div>' ).css( { margin: '0 0 .6em', display: 'flex', gap: '.5em', flexWrap: 'wrap' } ); var $search = $( '<input>' ).attr( { type: 'search', placeholder: '... »
 
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. */
$( function () {
$( function () {
$( 'table.filtrable' ).each( function () {
$( 'table.filtrable' ).each( function () {
var $table = $( this );
var $table = $( this );
var $th = $table.find( 'thead th' );
var $th = $table.find( 'tr' ).first().find( 'th' );
var $rows = $table.find( 'tr' ).filter( function () {
return $( this ).children( 'td' ).length > 0;
} );
var selectCols = [ 3, 4 ]; // 3 = Attribution, 4 = Cible
var selectCols = [ 3, 4 ]; // 3 = Attribution, 4 = Cible


Ligne 15 : Ligne 16 :
selectCols.forEach( function ( c ) {
selectCols.forEach( function ( c ) {
var label = $th.eq( c ).text().trim(), vals = {};
var label = $th.eq( c ).text().trim(), vals = {};
$table.find( 'tbody tr' ).each( function () {
$rows.each( function () {
var v = $( this ).find( 'td' ).eq( c ).text().trim();
var v = $( this ).children( 'td' ).eq( c ).text().trim();
if ( v ) { vals[ v ] = true; }
if ( v ) { vals[ v ] = true; }
} );
} );
Ligne 31 : Ligne 32 :
function apply() {
function apply() {
var q = $search.val().toLowerCase();
var q = $search.val().toLowerCase();
$table.find( 'tbody tr' ).each( function () {
$rows.each( function () {
var $row = $( this ), ok = $row.text().toLowerCase().indexOf( q ) !== -1;
var $row = $( this ), ok = $row.text().toLowerCase().indexOf( q ) !== -1;
selectCols.forEach( function ( c ) {
selectCols.forEach( function ( c ) {
var want = selects[ c ].val();
var want = selects[ c ].val();
if ( ok && want ) { ok = $row.find( 'td' ).eq( c ).text().trim() === want; }
if ( ok && want ) { ok = $row.children( 'td' ).eq( c ).text().trim() === want; }
} );
} );
$row.toggle( ok );
$row.toggle( ok );

Dernière version du 2 juillet 2026 à 18:45

$( function () {
	$( 'table.filtrable' ).each( function () {
		var $table = $( this );
		var $th = $table.find( 'tr' ).first().find( 'th' );
		var $rows = $table.find( 'tr' ).filter( function () {
			return $( this ).children( 'td' ).length > 0;
		} );
		var selectCols = [ 3, 4 ]; // 3 = Attribution, 4 = Cible

		var $bar = $( '<div>' ).css( { margin: '0 0 .6em', display: 'flex', gap: '.5em', flexWrap: 'wrap' } );
		var $search = $( '<input>' ).attr( { type: 'search', placeholder: 'Rechercher…' } )
			.css( { padding: '.3em .5em', minWidth: '16em' } );
		$bar.append( $search );

		var selects = {};
		selectCols.forEach( function ( c ) {
			var label = $th.eq( c ).text().trim(), vals = {};
			$rows.each( function () {
				var v = $( this ).children( 'td' ).eq( c ).text().trim();
				if ( v ) { vals[ v ] = true; }
			} );
			var $sel = $( '<select>' ).css( { padding: '.3em' } );
			$sel.append( $( '<option>' ).val( '' ).text( label + ' : tous' ) );
			Object.keys( vals ).sort().forEach( function ( v ) {
				$sel.append( $( '<option>' ).val( v ).text( v ) );
			} );
			selects[ c ] = $sel;
			$bar.append( $sel );
		} );
		$table.before( $bar );

		function apply() {
			var q = $search.val().toLowerCase();
			$rows.each( function () {
				var $row = $( this ), ok = $row.text().toLowerCase().indexOf( q ) !== -1;
				selectCols.forEach( function ( c ) {
					var want = selects[ c ].val();
					if ( ok && want ) { ok = $row.children( 'td' ).eq( c ).text().trim() === want; }
				} );
				$row.toggle( ok );
			} );
		}
		$search.on( 'input', apply );
		selectCols.forEach( function ( c ) { selects[ c ].on( 'change', apply ); } );
	} );
} );