fix(dashboard): tri par date des tableaux, tri/regroupement sur les Épinglés
- tablesort.js : parseFloat lisait l'année des dates ISO (2026) et mettait toutes les lignes à égalité — comparaison numérique seulement pour les valeurs entièrement numériques. - dashboard.js : pinned-grid rejoint les grilles triées et regroupées (son exclusion rendait les deux outils invisibles là où l'œil se pose) ; dates comparées via Date.parse. - data-first-dir=desc sur Dernière activité / Écart / Zombies.
This commit is contained in:
@@ -197,7 +197,7 @@
|
||||
<th data-sort="inflight">En vol</th>
|
||||
<th>Prochain jalon</th>
|
||||
<th>Santé</th>
|
||||
<th data-sort="updated">Dernière activité</th>
|
||||
<th data-sort="updated" data-first-dir="desc">Dernière activité</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
<th data-sort="due">Échéance</th>
|
||||
<th>Progression</th>
|
||||
<th>ETA</th>
|
||||
<th data-sort="gap">Écart</th>
|
||||
<th data-sort="gap" data-first-dir="desc">Écart</th>
|
||||
<th data-sort="throughput">Débit / sem.</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
<th data-sort="severity">Santé</th>
|
||||
<th data-sort="project">Projet</th>
|
||||
<th data-sort="open">Ouvertes</th>
|
||||
<th data-sort="zombies">🧟 Zombies</th>
|
||||
<th data-sort="zombies" data-first-dir="desc">🧟 Zombies</th>
|
||||
<th data-sort="slowest">🐌 Goulot</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
|
||||
+15
-1
@@ -21,7 +21,11 @@
|
||||
|
||||
/* ── Tri des grilles de cartes ─────────────────────────── */
|
||||
var sortSelect = document.getElementById('dash-sort');
|
||||
var grids = ['grid-active', 'grid-inactive', 'grid-archived']
|
||||
// 0.20.1 : la grille des Épinglés est incluse — l'exclure
|
||||
// (choix de la 0.18.0) donnait l'impression que le tri et le
|
||||
// regroupement « ne faisaient rien », la section épinglée
|
||||
// étant celle qu'on regarde en premier.
|
||||
var grids = ['pinned-grid', 'grid-active', 'grid-inactive', 'grid-archived']
|
||||
.map(function (id) { return document.getElementById(id); })
|
||||
.filter(Boolean);
|
||||
|
||||
@@ -38,6 +42,16 @@
|
||||
if (mode === 'default' || !cards.length) return;
|
||||
cards.sort(function (a, b) {
|
||||
var ka = cardKey(a, mode), kb = cardKey(b, mode);
|
||||
if (mode === 'updated' || mode === 'activity') {
|
||||
// Comparaison en instants réels (les fuseaux des
|
||||
// dates Gitea varient, -04:00/-05:00) ; une carte
|
||||
// sans date coule en bas du tri décroissant.
|
||||
var ta = Date.parse(ka), tb = Date.parse(kb);
|
||||
if (isNaN(ta) && isNaN(tb)) return 0;
|
||||
if (isNaN(ta)) return 1;
|
||||
if (isNaN(tb)) return -1;
|
||||
return tb - ta;
|
||||
}
|
||||
if (ka < kb) return mode === 'name' ? -1 : 1;
|
||||
if (ka > kb) return mode === 'name' ? 1 : -1;
|
||||
return 0;
|
||||
|
||||
+14
-4
@@ -13,7 +13,12 @@
|
||||
th.classList.add('sortable');
|
||||
th.addEventListener('click', function () {
|
||||
var key = th.getAttribute('data-sort');
|
||||
var dir = th.getAttribute('data-dir') === 'asc' ? 'desc' : 'asc';
|
||||
// Premier clic : sens par défaut de la colonne
|
||||
// (data-first-dir="desc" pour les dates d'activité —
|
||||
// on veut le plus récent d'abord) ; ensuite on alterne.
|
||||
var dir = th.getAttribute('data-dir')
|
||||
? (th.getAttribute('data-dir') === 'asc' ? 'desc' : 'asc')
|
||||
: (th.getAttribute('data-first-dir') || 'asc');
|
||||
table.querySelectorAll('th').forEach(function (h) {
|
||||
h.removeAttribute('data-dir');
|
||||
});
|
||||
@@ -22,10 +27,15 @@
|
||||
rows.sort(function (a, b) {
|
||||
var va = a.getAttribute('data-' + key) || '';
|
||||
var vb = b.getAttribute('data-' + key) || '';
|
||||
var na = parseFloat(va), nb = parseFloat(vb);
|
||||
var cmp;
|
||||
if (!isNaN(na) && !isNaN(nb) && va !== '' && vb !== '') {
|
||||
cmp = na - nb;
|
||||
// Numérique SEULEMENT si la valeur entière est
|
||||
// un nombre. L'ancien parseFloat lisait « 2026 »
|
||||
// dans les dates ISO : toutes les lignes d'une
|
||||
// même année se retrouvaient à égalité et le tri
|
||||
// par date partait dans un ordre arbitraire
|
||||
// (bug rapporté par Bruno, corrigé en 0.20.1).
|
||||
if (/^-?\d+(\.\d+)?$/.test(va) && /^-?\d+(\.\d+)?$/.test(vb)) {
|
||||
cmp = parseFloat(va) - parseFloat(vb);
|
||||
} else {
|
||||
cmp = va < vb ? -1 : (va > vb ? 1 : 0);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user