“ U+201C / ” U+201D)
invece delle normali virgolette ASCII ".<script> non viene eseguito β
zero event listener registrati.
node --check: "Invalid or unexpected token" a riga 2829 del JS estrattocat -A: ogni stringa mostrava sequenze M-bM-^@M-^\...M-bM-^@M-^] (UTF-8 di U+201C/U+201D)str.replace(/\u201c/g, '"').replace(/\u201d/g, '"')): 42 virgolette sostituite in tutto il file// β PRIMA (errore di sintassi β virgolette tipografiche) const link = document.getElementById("logoutLink"); β U+201C β U+201D // β DOPO (virgolette ASCII standard) const link = document.getElementById("logoutLink");
P1, P10, P11, P2, P20 venivano mostrati
fuori sequenza logica.
uksort() con strnatcasecmp
subito prima di costruire gli array di output PHP.P1 β P2 β P9 β P10 β P11 β P20
invece di ordine lessicografico.
// β AGGIUNTO prima di costruire $primiOut / $secondiOut uksort($summaryPrimi, 'strnatcasecmp'); uksort($summarySecondi, 'strnatcasecmp'); // Risultato ordinamento (esempio) // PRIMA: P1, P10, P11, P2, P20, Pasta al pesto, Risotto // DOPO: P1, P2, P10, P11, P20, Pasta al pesto, Risotto
strcmp o usort semplice,
strnatcasecmp Γ¨ case-insensitive e confronta le sequenze
numeriche come interi β perfetto per codici tipo P1β¦P99 misti a nomi
di piatto con lettere.
type="date" con
sezioni indipendenti (giorno / mese / anno). Digitando "1" nel campo
giorno, il browser puΓ² auto-completare a "01" e
scattare il change event con una data valida completa.
Il vecchio handler navigava istantaneamente
(window.location.replace) senza aspettare il secondo digit.
// β PRIMA β navigazione immediata al primo change dateFilterInput.addEventListener("change", () => { const v = dateFilterInput.value; if (!v) return; const url = new URL(window.location.href); url.searchParams.set("data", v); window.location.replace(url.toString()); // β troppo veloce! }); // β DOPO β debounce 700ms + Invio per conferma immediata let _dateTimer = null; function goToDate() { const v = dateFilterInput.value; if (!v) return; const url = new URL(window.location.href); url.searchParams.set("data", v); window.location.replace(url.toString()); } dateFilterInput.addEventListener("change", () => { if (_dateTimer) clearTimeout(_dateTimer); _dateTimer = setTimeout(goToDate, 700); // aspetta 700ms }); dateFilterInput.addEventListener("keydown", (e) => { if (e.key === "Enter") { clearTimeout(_dateTimer); goToDate(); } });
change, parte un conto
alla rovescia di 700ms. Se arriva un altro change prima
dello scadere (perchΓ© l'utente sta ancora digitando), il timer repart
da zero. La navigazione avviene solo quando l'utente smette di
modificare la data per almeno 700ms. Con Invio si
naviga subito senza aspettare.
| # | Tipo | File | Descrizione | Strumento/Tecnica |
|---|---|---|---|---|
| 1 | Bug | admin.php |
42 virgolette Unicode "β¦" β ASCII "β¦" nel JS logout modal |
node --check + regex Node.js |
| 2 | Feature | admin.php |
Ordinamento naturale piatti nel riepilogo (P1→P2→P10β¦) | uksort + strnatcasecmp (PHP) |
| 3 | Fix UX | admin.php |
Debounce 700ms su campo data β evita ricarica al primo digit | JS setTimeout / clearTimeout |