From c6eb493f25150bf1b02e8cadd9d096228cd0b3d5 Mon Sep 17 00:00:00 2001 From: Davide Grilli Date: Wed, 15 Jul 2026 10:05:44 +0200 Subject: [PATCH] feat(referto): mostra l'icona del servizio a inizio set MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Aggiunge un'icona nera (nuovo asset serv-nero.png, più visibile del serv.png bianco su sfondo chiaro) accanto al nome della squadra che serviva all'inizio di ogni set nel referto stampabile. Corregge inoltre generaReferto: la stampa partiva subito dopo document.close(), prima che l'icona (risorsa esterna asincrona) finisse di caricare, risultando in un riquadro vuoto. Ora attende l'evento 'load' della finestra popup prima di chiamare print(). --- public/serv-nero.png | Bin 0 -> 4211 bytes src/referto.js | 11 +++++++++-- tests/component/referto-generaReferto.test.js | 7 ++++++- 3 files changed, 15 insertions(+), 3 deletions(-) create mode 100644 public/serv-nero.png diff --git a/public/serv-nero.png b/public/serv-nero.png new file mode 100644 index 0000000000000000000000000000000000000000..041c65bf078c05963ab2aa604e08284ed1f50f52 GIT binary patch literal 4211 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 : '' + const servIcon = 'Servizio' + const servHomeIcon = s.serv === 'h' ? servIcon : '' + const servGuestIcon = s.serv === 'g' ? servIcon : '' + const puntiHtml = punti.map(p => `${p.h}-${p.g}` ).join('') @@ -90,7 +94,7 @@ export function buildRefertoHtml(state, now = new Date()) {
SET${i + 1}
- ${nomi.home} ${h} · ${g} ${nomi.guest}${etichettaVinc} + ${servHomeIcon}${nomi.home} ${h} · ${g} ${nomi.guest}${servGuestIcon}${etichettaVinc}
Formazione di partenza
@@ -144,6 +148,7 @@ export function buildRefertoHtml(state, now = new Date()) { .set-numero { font-weight: bold; font-size: 15px; } .set-corpo { flex: 1; min-width: 0; } .set-header { background: #eaf7fb; padding: 6px 12px; font-size: 13px; border-bottom: 1px solid #111; } + .serv-icon { width: 12px; height: 12px; vertical-align: middle; margin: 0 3px; } .punti-grid { display: flex; flex-wrap: wrap; gap: 0; padding: 0; border-top: 1px solid #111; } .punto { display: inline-flex; align-items: center; justify-content: center; min-width: 34px; padding: 3px 4px; font-size: 11px; font-family: 'Courier New', monospace; white-space: nowrap; border-right: 1px solid #ccc; border-bottom: 1px solid #ccc; } @@ -219,5 +224,7 @@ export function generaReferto(state) { const w = window.open('', '_blank') w.document.write(html) w.document.close() - w.print() + // Aspetta il caricamento delle immagini (icona servizio) prima di stampare, + // altrimenti la stampa parte con risorse ancora in caricamento e appaiono vuote. + w.addEventListener('load', () => w.print()) } diff --git a/tests/component/referto-generaReferto.test.js b/tests/component/referto-generaReferto.test.js index 189cd11..be9a6a9 100644 --- a/tests/component/referto-generaReferto.test.js +++ b/tests/component/referto-generaReferto.test.js @@ -11,10 +11,12 @@ describe('generaReferto (referto.js)', () => { vi.restoreAllMocks() }) - it('apre una nuova scheda, scrive il referto e avvia la stampa', () => { + it('apre una nuova scheda, scrive il referto e avvia la stampa dopo il caricamento', () => { + const listeners = {} const popup = { document: { write: vi.fn(), close: vi.fn() }, print: vi.fn(), + addEventListener: vi.fn((evt, cb) => { listeners[evt] = cb }), } const openSpy = vi.spyOn(window, 'open').mockReturnValue(popup) @@ -26,6 +28,9 @@ describe('generaReferto (referto.js)', () => { expect(popup.document.write).toHaveBeenCalledTimes(1) expect(popup.document.write.mock.calls[0][0]).toContain('Antoniana') expect(popup.document.close).toHaveBeenCalledTimes(1) + expect(popup.print).not.toHaveBeenCalled() + + listeners.load() expect(popup.print).toHaveBeenCalledTimes(1) }) })