« MediaWiki:Common.js » : différence entre les versions
Page de l’interface de MediaWiki
Autres actions
m citizen style |
Aucun résumé des modifications |
||
| Ligne 254 : | Ligne 254 : | ||
/* === fin Modèle:Règle === */ | /* === fin Modèle:Règle === */ | ||
/* MiniCard Grid - Ajustement dynamique des colonnes */ | |||
( function () { | |||
'use strict'; | |||
function adjustMiniCardGrids() { | |||
document.querySelectorAll( '.minicard-grid' ).forEach( function ( grid ) { | |||
var cards = grid.querySelectorAll( '.minicard' ); | |||
var total = cards.length; | |||
if ( total === 0 ) return; | |||
var containerWidth = grid.offsetWidth; | |||
var minCardWidth = 130; /* largeur minimale souhaitée par carte */ | |||
var gap = 12; | |||
/* Nombre max de colonnes qui tiennent dans le conteneur */ | |||
var maxCols = Math.floor( | |||
( containerWidth + gap ) / ( minCardWidth + gap ) | |||
); | |||
maxCols = Math.max( 1, Math.min( maxCols, total ) ); | |||
/* On cherche le diviseur de total le plus proche de maxCols */ | |||
var bestCols = 1; | |||
for ( var n = 1; n <= maxCols; n++ ) { | |||
if ( total % n === 0 ) { | |||
bestCols = n; | |||
} | |||
} | |||
/* Si aucun diviseur exact, on prend maxCols directement */ | |||
/* (dernière ligne incomplète inévitable, mais on maximise l'usage) */ | |||
if ( bestCols === 1 && maxCols > 1 ) { | |||
bestCols = maxCols; | |||
} | |||
grid.style.gridTemplateColumns = 'repeat(' + bestCols + ', 1fr)'; | |||
} ); | |||
} | |||
/* Debounce pour éviter trop d'appels au resize */ | |||
var resizeTimer; | |||
function onResize() { | |||
clearTimeout( resizeTimer ); | |||
resizeTimer = setTimeout( adjustMiniCardGrids, 100 ); | |||
} | |||
/* Init au chargement */ | |||
if ( document.readyState === 'loading' ) { | |||
document.addEventListener( 'DOMContentLoaded', adjustMiniCardGrids ); | |||
} else { | |||
adjustMiniCardGrids(); | |||
} | |||
window.addEventListener( 'resize', onResize ); | |||
}() ); | |||