diff --git a/CHANGELOG.md b/CHANGELOG.md index b694d0c..9e5137a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,16 @@ # 🧰 GAIA Swissknife – Changelog +## v1.2.000 – 2026-10-11 +- Pagina `/termina/`: nuovo mini-form di **compilazione massiva** sotto i pulsanti "Ammessi.." (Argomento parte 1, Argomento parte 2, Sede di destinazione) con pulsante "Applica a tutti i candidati" + - Ogni campo compare solo se presente nella pagina; senza campi il form non compare + - I campi lasciati vuoti non sovrascrivono i valori già presenti +- **"Copia per LURCH (JSON)"** compare solo con il sotto-tab "Informazioni" attivo (non più su `/termina/` e sulle altre pagine del corso) +- **"Apri tutti i Curriculum"** richiede il sotto-tab "Iscrizioni" attivo e la sidebar presente; rimosso il pulsante fisso in alto a destra che compariva negli iframe della lista iscritti +- Aggiunta la guida utente in `docs/guida-utente/` con screenshot (dati personali oscurati) + +## v1.1.011 – 2026-05-13 +- Aggiunti al JSON "Copia per LURCH" i campi `dataInizio`, `dataEsame` e `scadenzaDomande` (formato ISO 8601) + ## v1.1.010 – 2026-05-12 - Aggiunto pulsante **"Copia per LURCH (JSON)"** nella sidebar delle pagine corso (`/aspirante/corso-base/`) - Estrae e copia in clipboard: Direttore, Quota (bool), QuotaValore (numerico), Corso (nome), Protocollo, Link GAIA diff --git a/README.md b/README.md index 1747ec0..076d74a 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,8 @@ Oppure: ### ✅ Su `/termina/` - Pulsante **"Tutti Ammessi / Esito Positivo"** - Compila automaticamente tutti i campi con "AM" e "P" +- Form di **compilazione massiva** (Argomento parte 1/2, Sede di destinazione) + - Compila in un colpo solo i campi per tutti i candidati; compare solo per i campi presenti nel corso --- @@ -120,7 +122,11 @@ Le date sono in formato **ISO 8601 senza timezone** (`YYYY-MM-DDTHH:MM:SS`), dir 📖 [Visualizza changelog completo](https://gitlab.luigidacunto.com/consultant/gaia-swissknife/-/blob/main/CHANGELOG.md) -Ultima versione: **v1.1.011** +Ultima versione: **v1.2.000** +- Nuovo form di compilazione massiva nella pagina "Termina corso"; "Copia per LURCH" solo nel tab "Informazioni"; "Apri tutti i Curriculum" solo nel tab "Iscrizioni" +- Guida utente completa in `docs/guida-utente/` + +v1.1.011: - Aggiunti al JSON "Copia per LURCH" i campi `dataInizio`, `dataEsame` e `scadenzaDomande` (formato ISO 8601) v1.1.010: diff --git a/docs/guida-utente/00-indice.md b/docs/guida-utente/00-indice.md new file mode 100644 index 0000000..e3a61b0 --- /dev/null +++ b/docs/guida-utente/00-indice.md @@ -0,0 +1,65 @@ +# Guida all'uso di GAIA Swissknife + +GAIA Swissknife è uno script (Tampermonkey) che aggiunge pulsanti e strumenti alle pagine di GAIA. Gli strumenti compaiono nella colonna di sinistra, sotto il titolo **GAIA Swissknife**, solo nelle pagine in cui sono utili. + +## Come leggere questa guida + +Ogni funzione ha una scheda separata, con un'etichetta che dice dove è disponibile: + +- **Funzione specifica**: compare solo in una pagina (o in una sezione) precisa di GAIA. +- **Funzione generica**: compare in più pagine, o in tutte quelle di un certo tipo. + +Quando una procedura ha più passaggi sulla stessa schermata, nelle immagini i passaggi sono indicati da **bolle colorate con il numero** e da riquadri dello stesso colore. + +> Nelle immagini i dati personali (nomi e codici fiscali, codici dei corsi, nomi dei comitati) sono oscurati di proposito. + +## Indice + +Le cartelle e i file sono numerati (`NN-`) per mantenere un ordine di lettura stabile; ogni cartella raccoglie le funzioni di una pagina o di un'area di GAIA. + +### 01 - Pagina "Termina corso" + +Funzioni specifiche della pagina di chiusura del corso base (`/aspirante/corso-base//termina/`). + +| N. | Funzione | Tipo | +|---|---|---| +| 01 | [Pulsanti esiti "Ammessi.."](01-pagina-termina-corso/01-pulsanti-esiti-ammessi.md) | Specifica | +| 02 | [Compilazione massiva del verbale](01-pagina-termina-corso/02-compilazione-massiva-verbale.md) | Specifica | + +### 02 - Pagina "Iscrizioni" del corso + +| N. | Funzione | Tipo | +|---|---|---| +| 01 | [Apri tutti i Curriculum](02-pagina-iscrizioni-corso/01-apri-tutti-i-curriculum.md) | Specifica | + +### 03 - Pagina "Richieste" (autorizzazioni) + +| N. | Funzione | Tipo | +|---|---|---| +| 01 | [Filtri della colonna laterale accorpati](03-pagina-autorizzazioni/01-filtri-sidebar-accorpati.md) | Specifica | +| 02 | [Strumento richieste di iscrizione](03-pagina-autorizzazioni/02-strumento-richieste-iscrizione.md) | Specifica | + +### 04 - Pagina "Curriculum" di un profilo + +| N. | Funzione | Tipo | +|---|---|---| +| 01 | [Tabella ordinabile e filtrabile](04-pagina-curriculum/01-tabella-ordinabile-filtrabile.md) | Specifica | +| 02 | [Colori per tipologia](04-pagina-curriculum/02-colori-per-tipologia.md) | Specifica | +| 03 | [Evidenzia "Respinto"](04-pagina-curriculum/03-evidenzia-respinto.md) | Specifica | +| 04 | [Celle dei dettagli ordinate](04-pagina-curriculum/04-celle-dettaglio-ordinate.md) | Specifica | + +### 05 - Sedi, elenchi e catalogo + +| N. | Funzione | Tipo | +|---|---|---| +| 01 | [Sede preferita](05-sedi-elenchi-e-catalogo/01-sede-preferita.md) | **Generica** (tutte le pagine con tabella sedi) | +| 02 | [Copia struttura sedi (JSON)](05-sedi-elenchi-e-catalogo/02-copia-struttura-sedi.md) | Specifica | +| 03 | [Copia catalogo corsi (JSON)](05-sedi-elenchi-e-catalogo/03-copia-catalogo-corsi.md) | Specifica | + +### Non ancora documentato + +- **Copia per LURCH (JSON)**: documentazione rimandata. + +## Panoramica tecnica + +Per l'elenco sintetico di tutto ciò che lo script aggiunge a GAIA, con i punti della pagina in cui si aggancia, vedi la [mappa del progetto](../mappa-progetto.md). diff --git a/docs/guida-utente/01-pagina-termina-corso/01-pulsanti-esiti-ammessi.md b/docs/guida-utente/01-pagina-termina-corso/01-pulsanti-esiti-ammessi.md new file mode 100644 index 0000000..f1ea1ce --- /dev/null +++ b/docs/guida-utente/01-pagina-termina-corso/01-pulsanti-esiti-ammessi.md @@ -0,0 +1,49 @@ +# Pulsanti esiti "Ammessi.." + +**Tipo: funzione specifica** — compare solo nella pagina **Termina corso** (`/aspirante/corso-base//termina/`), e solo se la pagina contiene l'elenco dei candidati da compilare. + +## A cosa serve + +Nella compilazione del verbale, per ogni candidato bisogna scegliere l'**Ammissione** e l'**Esito** di ciascuna parte dell'esame. Con molti candidati ammessi e promossi sono decine di selezioni identiche. + +I tre pulsanti impostano questi tre valori **in un solo clic, per tutti i candidati**. + +## Dove si trovano + +Nella colonna di sinistra, sotto il titolo "GAIA Swissknife" (riquadri rossi, bolle **1**). Sono sopra il [form di compilazione massiva](02-compilazione-massiva-verbale.md) (bolla **2**). + +![Colonna di sinistra con i tre pulsanti esiti e il form di compilazione massiva](img/01-sidebar-esiti-e-form.png) + +## I tre pulsanti + +| Pulsante | Ammissione | Esito parte 1 | Esito parte 2 | +|---|---|---|---| +| **Ammessi, Positivo, Positivo** (blu) | Ammesso | Positivo | Positivo | +| **Ammessi, Positivo, Non previsto** (verde) | Ammesso | Positivo | Non previsto | +| **Ammessi, Non previsto, Positivo** (viola) | Ammesso | Non previsto | Positivo | + +Si usa il pulsante che corrisponde alla struttura dell'esame del corso: due parti entrambe previste, oppure una sola delle due. + +## Cosa cambia nella pagina + +Il pulsante compila i tre campi evidenziati dalla bolla **1** per **ogni** candidato dell'elenco. Prima del clic i campi sono vuoti (`---------`): + +![Campi del candidato prima del clic](img/02-campi-candidato.png) + +Dopo il clic (esempio con "Ammessi, Positivo, Positivo") Ammissione ed Esiti sono impostati; i campi con la bolla **2** sono compilati dal [form di compilazione massiva](02-compilazione-massiva-verbale.md): + +![Campi del candidato dopo il clic](img/03-campi-compilati.png) + +## Procedura + +1. Apri la pagina **Termina corso** del corso. +2. Nella colonna di sinistra clicca il pulsante che corrisponde all'esame svolto. +3. Scorri l'elenco e controlla i candidati: i valori sono ora impostati per tutti. +4. Correggi a mano i candidati che fanno eccezione (per esempio un non ammesso o un esito negativo). +5. In fondo alla pagina premi **Salva e continua**. + +## Attenzione + +- Il pulsante **sovrascrive** Ammissione ed Esiti di **tutti** i candidati, anche se li avevi già compilati diversamente: correggi le eccezioni **dopo** averlo premuto, non prima. +- Le modifiche **non sono salvate** finché non premi **Salva e continua** in fondo alla pagina. Se chiudi o ricarichi la pagina prima, vanno perse. +- I pulsanti non toccano gli altri campi del candidato (motivo di non ammissione, argomenti, sede, caselle di spunta). diff --git a/docs/guida-utente/01-pagina-termina-corso/02-compilazione-massiva-verbale.md b/docs/guida-utente/01-pagina-termina-corso/02-compilazione-massiva-verbale.md new file mode 100644 index 0000000..112e8bc --- /dev/null +++ b/docs/guida-utente/01-pagina-termina-corso/02-compilazione-massiva-verbale.md @@ -0,0 +1,46 @@ +# Compilazione massiva del verbale + +**Tipo: funzione specifica** — compare solo nella pagina **Termina corso** (`/aspirante/corso-base//termina/`), sotto i pulsanti [esiti "Ammessi.."](01-pulsanti-esiti-ammessi.md). + +## A cosa serve + +Nel verbale ogni candidato ha, a seconda del corso, questi campi liberi: + +- **Argomento parte 1** +- **Argomento parte 2** +- **Sede di destinazione** + +Spesso il valore è lo stesso per tutti. Questo piccolo form permette di scriverlo **una volta sola** e di applicarlo a **tutti i candidati** con un pulsante di conferma. + +## I campi compaiono solo se servono + +Il form si adatta al corso: + +- ogni casella compare **solo se il corso ha quel campo** nel verbale (per esempio, se il corso non prevede "Argomento parte 2", la casella non viene mostrata); +- se il corso non ha **nessuno** di questi campi, **il form non compare** e restano solo i tre pulsanti "Ammessi..". + +## Come si usa + +I passaggi sono numerati nell'immagine: + +![Form di compilazione massiva con i passaggi numerati](img/04-form-compilazione-massiva.png) + +1. **Scrivi gli argomenti** nelle caselle "Argomento parte 1" e "Argomento parte 2" (bolle **1**). +2. **Scegli la sede** dal menu "Sede di destinazione" (bolla **2**): le sedi elencate sono quelle disponibili nel menu dei candidati. +3. Premi **Applica a tutti i candidati** (bolla **3**). Per qualche secondo il pulsante mostra "✓ Applicato!". +4. Scorri l'elenco: i campi di **ogni candidato** contengono ora i valori inseriti. +5. In fondo alla pagina premi **Salva e continua**. + +Risultato sul singolo candidato (bolla **2** nell'immagine; la bolla **1** è l'effetto dei [pulsanti esiti](01-pulsanti-esiti-ammessi.md)): + +![Campi argomento e sede compilati sul candidato](img/03-campi-compilati.png) + +## Campi vuoti + +Un campo **lasciato vuoto** (casella senza testo, menu su "---------") **non viene applicato**: i valori già scritti nei candidati restano come sono. Così si può, per esempio, applicare solo la sede senza toccare gli argomenti. + +## Attenzione + +- Il pulsante **sovrascrive** il campo di **tutti** i candidati con il valore inserito, compresi quelli già compilati a mano: correggi le eccezioni dopo averlo premuto. +- Le modifiche **non sono salvate** finché non premi **Salva e continua** in fondo alla pagina. Se chiudi o ricarichi la pagina prima, vanno perse. +- Il form applica i valori anche ai candidati non ammessi: se per loro i campi vanno lasciati vuoti, svuotali a mano. diff --git a/docs/guida-utente/01-pagina-termina-corso/img/01-sidebar-esiti-e-form.png b/docs/guida-utente/01-pagina-termina-corso/img/01-sidebar-esiti-e-form.png new file mode 100644 index 0000000..24197ed Binary files /dev/null and b/docs/guida-utente/01-pagina-termina-corso/img/01-sidebar-esiti-e-form.png differ diff --git a/docs/guida-utente/01-pagina-termina-corso/img/02-campi-candidato.png b/docs/guida-utente/01-pagina-termina-corso/img/02-campi-candidato.png new file mode 100644 index 0000000..c82f4a6 Binary files /dev/null and b/docs/guida-utente/01-pagina-termina-corso/img/02-campi-candidato.png differ diff --git a/docs/guida-utente/01-pagina-termina-corso/img/03-campi-compilati.png b/docs/guida-utente/01-pagina-termina-corso/img/03-campi-compilati.png new file mode 100644 index 0000000..4dd3e60 Binary files /dev/null and b/docs/guida-utente/01-pagina-termina-corso/img/03-campi-compilati.png differ diff --git a/docs/guida-utente/01-pagina-termina-corso/img/04-form-compilazione-massiva.png b/docs/guida-utente/01-pagina-termina-corso/img/04-form-compilazione-massiva.png new file mode 100644 index 0000000..7b4f984 Binary files /dev/null and b/docs/guida-utente/01-pagina-termina-corso/img/04-form-compilazione-massiva.png differ diff --git a/docs/guida-utente/02-pagina-iscrizioni-corso/01-apri-tutti-i-curriculum.md b/docs/guida-utente/02-pagina-iscrizioni-corso/01-apri-tutti-i-curriculum.md new file mode 100644 index 0000000..6bbbbb1 --- /dev/null +++ b/docs/guida-utente/02-pagina-iscrizioni-corso/01-apri-tutti-i-curriculum.md @@ -0,0 +1,40 @@ +# Apri tutti i Curriculum + +**Tipo: funzione specifica** — compare solo nella pagina **Iscrizioni** di un corso (`/aspirante/corso-base//iscritti/`), con il sotto-tab "Iscrizioni" attivo. + +## A cosa serve + +Per valutare gli iscritti a un corso spesso serve consultare il curriculum di ciascuno. Aprirli uno alla volta dall'elenco richiede molti clic: questo pulsante apre **tutti i curriculum elencati in nuove schede del browser**, con un solo clic. + +## Dove si trova + +Nella colonna di sinistra, sotto il titolo "GAIA Swissknife" (bolla **1**), solo quando il sotto-tab **Iscrizioni** è quello attivo (bolla **2**). Il pulsante usa l'elenco degli iscritti mostrato nella pagina (riquadro **3**). + +![Pagina Iscrizioni con il pulsante Apri tutti i Curriculum](img/01-apri-tutti-i-curriculum.png) + +Il pulsante non compare nelle altre pagine del corso (Informazioni, Termina corso, ecc.). + +## Procedura + +1. Apri il corso e vai al sotto-tab **Iscrizioni**. +2. Se serve, usa il campo **Filtra elenco** per restringere la lista. +3. Nella colonna di sinistra clicca **Apri tutti i Curriculum**. +4. Il browser chiede conferma con il numero di profili da aprire ("Vuoi aprire N profili in nuove schede?"): controlla il numero e conferma. +5. I curriculum si aprono ciascuno in una nuova scheda. + +## Cosa apre esattamente + +- Apre i profili **presenti nell'elenco visibile**, cioè quelli della **pagina dell'elenco** in cui ti trovi (nell'immagine "Pag. 1 di 2"). Per aprire anche gli altri, passa alla pagina successiva dell'elenco e ripeti. +- Se hai filtrato l'elenco, apre solo i profili filtrati. +- Ogni scheda mostra il curriculum del profilo, nella pagina descritta in [Pagina curriculum](../04-pagina-curriculum/01-tabella-ordinabile-filtrabile.md). + +## Dove funziona + +- Funziona nei corsi i cui iscritti hanno un curriculum consultabile (per esempio i corsi per Coordinatore delle Attività di Emergenza o per Trainer). +- **Non è utile nei corsi base per aspiranti volontari**: gli iscritti non sono ancora volontari, quindi il loro curriculum non è disponibile e le schede si aprono con un errore di accesso. + +## Attenzione + +- Con molti iscritti si aprono **molte schede insieme**: controlla il numero nella finestra di conferma prima di accettare. +- Se il browser blocca i popup, abilita le finestre a comparsa per `gaia.cri.it`, altrimenti si aprirà solo una parte delle schede. +- Se l'elenco non è ancora stato caricato, compare un avviso ("Nessun profilo trovato"): attendi che la lista sia visibile e riprova. diff --git a/docs/guida-utente/02-pagina-iscrizioni-corso/img/01-apri-tutti-i-curriculum.png b/docs/guida-utente/02-pagina-iscrizioni-corso/img/01-apri-tutti-i-curriculum.png new file mode 100644 index 0000000..5264179 Binary files /dev/null and b/docs/guida-utente/02-pagina-iscrizioni-corso/img/01-apri-tutti-i-curriculum.png differ diff --git a/docs/guida-utente/03-pagina-autorizzazioni/01-filtri-sidebar-accorpati.md b/docs/guida-utente/03-pagina-autorizzazioni/01-filtri-sidebar-accorpati.md new file mode 100644 index 0000000..f97b394 --- /dev/null +++ b/docs/guida-utente/03-pagina-autorizzazioni/01-filtri-sidebar-accorpati.md @@ -0,0 +1,26 @@ +# Filtri della colonna laterale accorpati + +**Tipo: funzione specifica** — agisce solo nella pagina **Richieste** (`/autorizzazioni/`). + +## A cosa serve + +Nella colonna di sinistra della pagina Richieste, il riquadro **Filtra per...** elenca i tipi di richiesta in attesa (per esempio "Fototessera", "Estensione", "Iscrizione Corso") con un contatore. Quando lo stesso tipo compare **più volte**, lo script **unisce le voci duplicate in una sola**, sommando i contatori, così l'elenco resta corto e il totale di ogni tipo si legge a colpo d'occhio. + +## Dove si trova + +Nel riquadro **Filtra per...** della colonna di sinistra (riquadro rosso, bolla **1**). + +![Riquadro Filtra per... con le voci accorpate](img/01-filtri-sidebar.png) + +## Come si usa + +La funzione è automatica: non ci sono pulsanti da premere. + +1. Apri la pagina **Richieste**. +2. Nel riquadro **Filtra per...** trovi una sola voce per tipo di richiesta, con il numero totale accanto (nell'esempio: Fototessera 1, Estensione 8, Iscrizione Corso 13). +3. Clicca una voce per filtrare la lista delle richieste su quel tipo. + +## Attenzione + +- Il contatore mostra la **somma** di tutte le voci con lo stesso nome; il clic sulla voce apre il filtro della **prima** di quelle voci. Se il numero in elenco non coincide con il contatore, la differenza dipende dalle voci duplicate accorpate. +- Nel riquadro vengono riportate solo le voci **con un contatore numerico**: una voce senza numero accanto non compare più nell'elenco accorpato. diff --git a/docs/guida-utente/03-pagina-autorizzazioni/02-strumento-richieste-iscrizione.md b/docs/guida-utente/03-pagina-autorizzazioni/02-strumento-richieste-iscrizione.md new file mode 100644 index 0000000..35c72a1 --- /dev/null +++ b/docs/guida-utente/03-pagina-autorizzazioni/02-strumento-richieste-iscrizione.md @@ -0,0 +1,39 @@ +# Strumento richieste di iscrizione + +**Tipo: funzione specifica** — compare solo nella pagina **Richieste** (`/autorizzazioni/`), quando tra le richieste in attesa ce ne sono di **iscrizione a un corso**. + +## A cosa serve + +Quando arrivano molte richieste di iscrizione a corsi diversi, è scomodo capire quante ce ne sono per ciascun corso e controllare i curriculum dei richiedenti. Lo strumento: + +- **riassume** le richieste per corso, con il numero e il collegamento al corso; +- **evidenzia in verde** le richieste del corso scelto; +- **elenca i profili** dei richiedenti e apre **tutti i loro curriculum** con un clic. + +## Dove si trova + +Si apre da solo come **finestra mobile** nell'angolo in alto a destra della pagina, con il titolo "GAIA Swissknife – Richieste iscrizione". Nell'immagine è mostrato dopo aver scelto un corso: + +![Strumento richieste di iscrizione con i passaggi numerati](img/02-strumento-richieste-iscrizione.png) + +## Come si usa + +1. Leggi il **riepilogo** (bolla **1**): per ogni corso trovato è indicato il numero di richieste; il codice del corso è un collegamento alla pagina del corso. +2. Scegli un corso dal menu **Seleziona un corso** (bolla **2**). +3. Premi **Recupera Profili** (bolla **3**). +4. Le richieste di quel corso diventano **verdi** nella lista a sinistra, così si riconoscono subito tra le altre. +5. Nella finestra compare l'elenco dei richiedenti (bolla **5**), ciascuno con il collegamento al suo curriculum. +6. Per aprire tutti i curriculum premi **Apri tutti i Curriculum** (bolla **4**): ogni curriculum si apre in una nuova scheda. + +## Muovere e ridurre la finestra + +- **Spostare**: trascina la barra blu del titolo; la finestra resta sempre dentro lo schermo. +- **Ridurre/espandere**: il pulsante **−** (a destra del titolo) nasconde il contenuto e lascia solo la barra; con **+** si riapre. + +## Attenzione + +- Per scegliere un corso bisogna selezionarne uno: senza selezione compare l'avviso "Seleziona un codice corso". +- Scegliendo un altro corso, l'evidenziazione verde precedente viene azzerata. +- Come per [Apri tutti i Curriculum](../02-pagina-iscrizioni-corso/01-apri-tutti-i-curriculum.md), i curriculum si aprono in **molte schede insieme**; se il browser blocca i popup, abilita le finestre a comparsa per `gaia.cri.it`. +- Per i **corsi base destinati ad aspiranti volontari** il curriculum dei richiedenti non è consultabile: lo strumento serve soprattutto per gli altri corsi. +- La finestra non compare se nella pagina non ci sono richieste di iscrizione a un corso. diff --git a/docs/guida-utente/03-pagina-autorizzazioni/img/01-filtri-sidebar.png b/docs/guida-utente/03-pagina-autorizzazioni/img/01-filtri-sidebar.png new file mode 100644 index 0000000..29903d3 Binary files /dev/null and b/docs/guida-utente/03-pagina-autorizzazioni/img/01-filtri-sidebar.png differ diff --git a/docs/guida-utente/03-pagina-autorizzazioni/img/02-strumento-richieste-iscrizione.png b/docs/guida-utente/03-pagina-autorizzazioni/img/02-strumento-richieste-iscrizione.png new file mode 100644 index 0000000..f7dae6a Binary files /dev/null and b/docs/guida-utente/03-pagina-autorizzazioni/img/02-strumento-richieste-iscrizione.png differ diff --git a/docs/guida-utente/04-pagina-curriculum/01-tabella-ordinabile-filtrabile.md b/docs/guida-utente/04-pagina-curriculum/01-tabella-ordinabile-filtrabile.md new file mode 100644 index 0000000..3bb2d2b --- /dev/null +++ b/docs/guida-utente/04-pagina-curriculum/01-tabella-ordinabile-filtrabile.md @@ -0,0 +1,35 @@ +# Tabella del curriculum ordinabile e filtrabile + +**Tipo: funzione specifica** — agisce solo nella pagina **Curriculum** di un profilo (`/profilo//curriculum/`). + +## A cosa serve + +Il curriculum di un volontario può avere decine di righe (qualifiche, patenti, titoli, competenze). Lo script trasforma la tabella in una tabella **ordinabile e filtrabile**, senza pagine da sfogliare: tutte le voci restano su un'unica pagina. + +## Dove si trova + +Nel riquadro **Curriculum** della pagina: + +![Tabella del curriculum con il filtro e l'ordinamento](img/01-tabella-ordinabile-filtrabile.png) + +- **1** — il campo **Filtra qualifiche**. +- **2** — le intestazioni **Tipo** e **Nome e Stato**, con le frecce di ordinamento. + +## Come si usa + +**Filtrare** + +1. Scrivi nel campo **Filtra qualifiche** (bolla **1**) una parola, per esempio un tipo ("Patente") o parte del nome di una qualifica. +2. La tabella mostra solo le righe che contengono quel testo; sotto compare il conteggio ("Mostrate N qualifiche", con "filtrate da N totali"). +3. Cancella il testo per rivedere tutte le righe. Se nessuna riga corrisponde, compare "Nessuna qualifica trovata". + +**Ordinare** + +1. Clicca l'intestazione **Tipo** o **Nome e Stato** (bolla **2**): la tabella si ordina per quella colonna; un secondo clic inverte l'ordine. +2. All'apertura la tabella è già ordinata per **Tipo** e poi per **Nome e Stato**, in modo da raggruppare le voci dello stesso tipo. + +## Attenzione + +- La colonna **Dettagli** non è ordinabile. +- Il filtro cerca in tutta la riga, non solo nel nome della qualifica. +- Questa funzione lavora insieme a [Colori per tipologia](02-colori-per-tipologia.md), [Evidenzia "Respinto"](03-evidenzia-respinto.md) e [Celle dei dettagli ordinate](04-celle-dettaglio-ordinate.md), che agiscono sulla stessa tabella. diff --git a/docs/guida-utente/04-pagina-curriculum/02-colori-per-tipologia.md b/docs/guida-utente/04-pagina-curriculum/02-colori-per-tipologia.md new file mode 100644 index 0000000..d6ccaba --- /dev/null +++ b/docs/guida-utente/04-pagina-curriculum/02-colori-per-tipologia.md @@ -0,0 +1,30 @@ +# Colori per tipologia + +**Tipo: funzione specifica** — agisce solo nella pagina **Curriculum** di un profilo (`/profilo//curriculum/`). + +## A cosa serve + +Colora la cella della colonna **Tipo** in base al tipo di voce, così a colpo d'occhio si distinguono le qualifiche CRI dalle patenti o dalle esperienze professionali. + +## Dove si vede + +Nella prima colonna della tabella del curriculum (riquadro rosso, bolla **1**): + +![Prima colonna del curriculum colorata per tipologia](img/02-colori-per-tipologia.png) + +## Colori + +| Tipo | Colore | +|---|---| +| Qualifica CRI | Azzurro chiaro | +| Altra Qualifica | Verde chiaro | +| Esperienze Professionali | Arancione chiaro | +| Competenza Personale | Celeste chiaro | +| Patente Civile | Grigio chiaro | +| Patente CRI | Lilla chiaro | + +Le voci di altro tipo (per esempio "Conoscenze Linguistiche" o "Titolo di Studio") restano senza colore. + +## Come si usa + +La funzione è automatica: all'apertura della pagina le celle sono già colorate e il colore resta anche se si [ordina o si filtra](01-tabella-ordinabile-filtrabile.md) la tabella. diff --git a/docs/guida-utente/04-pagina-curriculum/03-evidenzia-respinto.md b/docs/guida-utente/04-pagina-curriculum/03-evidenzia-respinto.md new file mode 100644 index 0000000..a05c8bd --- /dev/null +++ b/docs/guida-utente/04-pagina-curriculum/03-evidenzia-respinto.md @@ -0,0 +1,24 @@ +# Evidenzia "Respinto" + +**Tipo: funzione specifica** — agisce solo nella pagina **Curriculum** di un profilo (`/profilo//curriculum/`). + +## A cosa serve + +Le qualifiche con stato **Respinto** possono passare inosservate in un curriculum lungo. Lo script le evidenzia con una **barra rossa sul lato sinistro** e uno **sfondo rosato** sull'intera riga. + +## Dove si vede + +Nella riga della tabella il cui stato è "Respinto" (riquadro rosso, bolla **1**): + +![Riga con stato Respinto evidenziata](img/03-evidenzia-respinto.png) + +> Esempio illustrativo: la riga è stata contrassegnata come "Respinto" solo per mostrare l'evidenziazione. + +## Come si usa + +La funzione è automatica. L'evidenziazione viene **riapplicata ogni volta** che la tabella cambia, quindi resta corretta dopo aver [ordinato o filtrato](01-tabella-ordinabile-filtrabile.md) le righe. + +## Attenzione + +- Si evidenziano solo le righe in cui lo stato è esattamente "Respinto"; gli altri stati (per esempio "Confermato") non vengono modificati. +- La funzione non cambia lo stato della qualifica: è solo un aiuto visivo. diff --git a/docs/guida-utente/04-pagina-curriculum/04-celle-dettaglio-ordinate.md b/docs/guida-utente/04-pagina-curriculum/04-celle-dettaglio-ordinate.md new file mode 100644 index 0000000..c33a3bc --- /dev/null +++ b/docs/guida-utente/04-pagina-curriculum/04-celle-dettaglio-ordinate.md @@ -0,0 +1,24 @@ +# Celle dei dettagli ordinate + +**Tipo: funzione specifica** — agisce solo nella pagina **Curriculum** di un profilo (`/profilo//curriculum/`). + +## A cosa serve + +Nella colonna **Dettagli** GAIA mostra data di conseguimento, luogo, scadenza, numero del documento e link ai documenti in modo disordinato. Lo script **riscrive la colonna** mettendo ogni informazione su una riga propria, con la sua icona, allineata e di altezza regolare. + +## Dove si vede + +Nella colonna **Dettagli** della tabella (riquadro verde, bolla **1**). Per ogni voce le righe seguono l'ordine in cui GAIA le fornisce, per esempio data (icona calendario), luogo (icona segnaposto), scadenza (icona clessidra) e numero (icona codice a barre): + +![Colonna Dettagli con una riga per ogni informazione](img/04-celle-dettaglio-ordinate.png) + +## Cosa cambia + +- Ogni dettaglio è su **una riga**, preceduta dalla sua icona. +- I testi **lunghi** vengono **troncati** con i puntini di sospensione, per non allargare la tabella; passando il mouse sopra si legge il testo completo. +- I **collegamenti ai documenti** sono in rosso e troncati allo stesso modo; se un collegamento non ha testo, viene mostrato il nome del file. +- Le icone senza un testo associato vengono ignorate. + +## Come si usa + +La funzione è automatica e agisce quando si apre la pagina. diff --git a/docs/guida-utente/04-pagina-curriculum/img/01-tabella-ordinabile-filtrabile.png b/docs/guida-utente/04-pagina-curriculum/img/01-tabella-ordinabile-filtrabile.png new file mode 100644 index 0000000..30acec8 Binary files /dev/null and b/docs/guida-utente/04-pagina-curriculum/img/01-tabella-ordinabile-filtrabile.png differ diff --git a/docs/guida-utente/04-pagina-curriculum/img/02-colori-per-tipologia.png b/docs/guida-utente/04-pagina-curriculum/img/02-colori-per-tipologia.png new file mode 100644 index 0000000..de102d3 Binary files /dev/null and b/docs/guida-utente/04-pagina-curriculum/img/02-colori-per-tipologia.png differ diff --git a/docs/guida-utente/04-pagina-curriculum/img/03-evidenzia-respinto.png b/docs/guida-utente/04-pagina-curriculum/img/03-evidenzia-respinto.png new file mode 100644 index 0000000..1a4a62c Binary files /dev/null and b/docs/guida-utente/04-pagina-curriculum/img/03-evidenzia-respinto.png differ diff --git a/docs/guida-utente/04-pagina-curriculum/img/04-celle-dettaglio-ordinate.png b/docs/guida-utente/04-pagina-curriculum/img/04-celle-dettaglio-ordinate.png new file mode 100644 index 0000000..d6b8a8d Binary files /dev/null and b/docs/guida-utente/04-pagina-curriculum/img/04-celle-dettaglio-ordinate.png differ diff --git a/docs/guida-utente/05-sedi-elenchi-e-catalogo/01-sede-preferita.md b/docs/guida-utente/05-sedi-elenchi-e-catalogo/01-sede-preferita.md new file mode 100644 index 0000000..74d5516 --- /dev/null +++ b/docs/guida-utente/05-sedi-elenchi-e-catalogo/01-sede-preferita.md @@ -0,0 +1,31 @@ +# Sede preferita + +**Tipo: funzione generica** — compare in **tutte le pagine** che mostrano una tabella di sedi con le caselle di selezione, per esempio la pagina di richiesta degli elenchi dei volontari (`/us/elenchi/volontari/`). + +## A cosa serve + +Nelle pagine in cui bisogna scegliere le sedi da includere (per esempio per generare un elenco) la selezione di default comprende **tutte** le sedi. Questa funzione permette di indicare il proprio **comitato preferito**, ricordato anche nelle visite successive, e di selezionare solo quello con un clic. + +## Dove si trova + +Nella colonna di sinistra, sotto il titolo "GAIA Swissknife": + +![Strumento sede preferita nella colonna di sinistra](img/01-sede-preferita.png) + +- **1** — menu **Comitato preferito**: l'elenco di tutte le sedi della pagina, con rientri che mostrano la gerarchia. +- **2** — pulsante **Solo preferito** (arancione). +- **3** — pulsante **Seleziona tutto** (grigio). + +## Come si usa + +1. Scegli il tuo comitato dal menu **Comitato preferito** (bolla **1**). La scelta viene **salvata automaticamente** e riproposta nelle visite successive e nelle altre pagine con la tabella sedi. +2. Premi **Solo preferito** (bolla **2**): tutte le caselle vengono deselezionate e resta selezionato il comitato scelto. +3. Se il comitato scelto è un **Comitato Regionale** o **Locale**, vengono selezionate anche **tutte le sedi sottostanti**. +4. Per tornare alla selezione completa premi **Seleziona tutto** (bolla **3**). +5. Poi prosegui come di consueto (per esempio con **Genera elenco**). + +## Attenzione + +- Se premi **Solo preferito** senza aver scelto un comitato compare l'avviso "Seleziona prima un comitato preferito". +- I pulsanti modificano solo le **caselle di selezione**: nulla viene generato o salvato finché non usi il pulsante della pagina (per esempio **Genera elenco**). +- La sede preferita è memorizzata nel browser in cui è installato lo script: su un altro computer o browser va scelta di nuovo. diff --git a/docs/guida-utente/05-sedi-elenchi-e-catalogo/02-copia-struttura-sedi.md b/docs/guida-utente/05-sedi-elenchi-e-catalogo/02-copia-struttura-sedi.md new file mode 100644 index 0000000..011ce1d --- /dev/null +++ b/docs/guida-utente/05-sedi-elenchi-e-catalogo/02-copia-struttura-sedi.md @@ -0,0 +1,46 @@ +# Copia struttura sedi (JSON) + +**Tipo: funzione specifica** — compare solo nella pagina di richiesta degli elenchi dei volontari (`/us/elenchi/volontari/`), quando la tabella delle sedi è visibile. + +## A cosa serve + +Copia negli **appunti** la gerarchia delle sedi mostrata nella tabella (Comitato Regionale, Comitati Locali, sottosedi) in formato **JSON**, pronta da incollare in un altro programma o documento. + +## Dove si trova + +Nella colonna di sinistra, sotto il titolo "GAIA Swissknife" (bolla **1**). Il pulsante legge la tabella delle sedi (riquadro **2**). + +![Pulsante Copia struttura sedi e tabella delle sedi](img/02-copia-struttura-sedi.png) + +Il pulsante **non compare** nella vista dei risultati dell'elenco, dove la tabella delle sedi non è presente. + +## Come si usa + +1. Apri la pagina di richiesta dell'elenco dei volontari, con la tabella delle sedi visibile. +2. Clicca **Copia struttura sedi (JSON)**. +3. Il pulsante diventa verde per tre secondi e mostra "✓ Copiato!" con il numero di Comitati Locali e di sottosedi copiati. +4. Incolla (`Ctrl+V`) dove serve. + +## Formato copiato + +La struttura è annidata: Comitato Regionale → Comitati Locali → sottosedi. + +```json +{ + "nome": "Comitato Regionale ...", + "comitati_locali": [ + { + "nome": "Comitato di ...", + "sottosedi": ["Unità ...", "Unità ..."] + } + ] +} +``` + +- Se nella tabella c'è **un solo** Comitato Regionale, viene copiato direttamente come oggetto (come sopra). +- Se ce ne sono **più di uno**, viene copiato un **elenco** di oggetti dello stesso tipo. + +## Attenzione + +- Vengono copiati i nomi come appaiono nella tabella: la copia non dipende da quali caselle sono selezionate. +- Se la copia negli appunti non riesce compare l'avviso "Errore durante la copia in clipboard": controlla che il browser consenta l'accesso agli appunti per `gaia.cri.it`. diff --git a/docs/guida-utente/05-sedi-elenchi-e-catalogo/03-copia-catalogo-corsi.md b/docs/guida-utente/05-sedi-elenchi-e-catalogo/03-copia-catalogo-corsi.md new file mode 100644 index 0000000..42ddb85 --- /dev/null +++ b/docs/guida-utente/05-sedi-elenchi-e-catalogo/03-copia-catalogo-corsi.md @@ -0,0 +1,38 @@ +# Copia catalogo corsi (JSON) + +**Tipo: funzione specifica** — compare solo nella pagina **Catalogo Corsi** (`/courses/catalog/`). + +## A cosa serve + +Copia negli **appunti** l'intero catalogo dei corsi in formato **JSON**, pronto da incollare in un altro programma o documento, senza ricopiare i corsi a mano uno per uno. + +## Dove si trova + +Nella colonna di sinistra, sotto il titolo "GAIA Swissknife" (bolla **1**). Il pulsante legge i corsi del catalogo mostrato nella pagina (riquadro **2**). + +![Pulsante Copia catalogo corsi nella pagina Catalogo Corsi](img/03-copia-catalogo-corsi.png) + +## Come si usa + +1. Apri **Catalogo Corsi** dal menu "Corsi" della colonna di sinistra. +2. Clicca **Copia catalogo corsi (JSON)**. +3. Il pulsante diventa verde per tre secondi e mostra "✓ Copiato!" con il numero di corsi copiati. +4. Incolla (`Ctrl+V`) dove serve. + +## Cosa viene copiato + +Un elenco con una voce per ogni corso, con questi campi: + +| Campo | Contenuto | +|---|---| +| `nome` | Nome del corso | +| `codice` | Codice del corso | +| `livello` | Livello | +| `tipo` | Tipo (la sezione del catalogo) | +| `obiettivo` | Obiettivo formativo | +| `scheda_pdf` | Indirizzo della scheda completa in PDF, oppure vuoto se non presente | + +## Attenzione + +- Se non viene trovato nessun corso compare l'avviso "Nessun corso trovato". +- Se la copia negli appunti non riesce compare l'avviso "Errore durante la copia in clipboard": controlla che il browser consenta l'accesso agli appunti per `gaia.cri.it`. diff --git a/docs/guida-utente/05-sedi-elenchi-e-catalogo/img/01-sede-preferita.png b/docs/guida-utente/05-sedi-elenchi-e-catalogo/img/01-sede-preferita.png new file mode 100644 index 0000000..08e5fc6 Binary files /dev/null and b/docs/guida-utente/05-sedi-elenchi-e-catalogo/img/01-sede-preferita.png differ diff --git a/docs/guida-utente/05-sedi-elenchi-e-catalogo/img/02-copia-struttura-sedi.png b/docs/guida-utente/05-sedi-elenchi-e-catalogo/img/02-copia-struttura-sedi.png new file mode 100644 index 0000000..7358c8b Binary files /dev/null and b/docs/guida-utente/05-sedi-elenchi-e-catalogo/img/02-copia-struttura-sedi.png differ diff --git a/docs/guida-utente/05-sedi-elenchi-e-catalogo/img/03-copia-catalogo-corsi.png b/docs/guida-utente/05-sedi-elenchi-e-catalogo/img/03-copia-catalogo-corsi.png new file mode 100644 index 0000000..397be10 Binary files /dev/null and b/docs/guida-utente/05-sedi-elenchi-e-catalogo/img/03-copia-catalogo-corsi.png differ diff --git a/docs/mappa-progetto.md b/docs/mappa-progetto.md new file mode 100644 index 0000000..9f01e49 --- /dev/null +++ b/docs/mappa-progetto.md @@ -0,0 +1,45 @@ +# Mappa del progetto + +Mappa sempre aggiornata di cosa aggiunge lo userscript alle pagine di GAIA (`https://gaia.cri.it/*`) e dove si aggancia. Una riga per funzione. Il dettaglio tecnico sta in `../.tech.docs/`. + +Script: `../tampermonkey-script/GAIA-Swissknife.user.js` (versione 1.2.000). Tutte le funzioni partono al `document.ready`; ognuna controlla da sé l'URL o la presenza degli elementi e, se non servono, non fa nulla. + +## Struttura comune + +| Elemento | Cosa fa | Dove | +|---|---|---| +| Intestazione Swissknife | Aggiunge in cima alla sidebar il titolo "GAIA Swissknife vX" e un separatore; i pulsanti dello script vengono inseriti tra i due | `ul#sezione` (sidebar), create alla prima funzione che inserisce un pulsante | +| Stile DataTables | Carica il CSS di DataTables per le tabelle migliorate | Tutte le pagine | + +## Pagine curriculum (`/profilo//curriculum/`) + +| Funzione | Cosa fa | Dove si aggancia | +|---|---|---| +| Ricostruzione celle dettaglio | Riscrive le celle con i dettagli delle qualifiche in righe ordinate icona + testo; testi lunghi troncati con tooltip | `td.piu-piccolo` della tabella curriculum | +| Tabella ordinabile e filtrabile | Trasforma la tabella in DataTable: senza paginazione, ordine per tipo e poi seconda colonna, campo "Filtra qualifiche" | `.table.table-striped` | +| Colori per tipologia | Colora la cella del tipo di qualifica (Qualifica CRI, Altra Qualifica, Esperienze, Competenza, Patenti) | Prima cella di ogni riga della tabella | +| Evidenzia "Respinto" | Evidenzia in rosso le righe con esito "Respinto", riapplicato a ogni ridisegno della tabella | Righe con `span.text-danger` nella tabella | + +## Autorizzazioni (`/autorizzazioni`) + +| Funzione | Cosa fa | Dove si aggancia | +|---|---|---| +| Filtri sidebar accorpati | Unisce le voci duplicate del menu laterale sommando i contatori | `ul#sezione-2`, voci `li[role=presentation]` | +| Strumento richieste iscrizione | Finestra mobile e comprimibile che raggruppa le richieste per codice corso, mostra il conteggio con link al corso, evidenzia in verde le richieste del corso scelto e apre tutti i curriculum | URL con `/autorizzazioni/`, riquadri `.panel.panel-default` con link `/aspirante/corso-base/` | + +## Corso: iscritti, esami e scheda + +| Funzione | Cosa fa | Dove si aggancia | +|---|---|---| +| Apri tutti i Curriculum | Apre in nuove schede i curriculum di tutti gli iscritti elencati, dopo conferma | Pulsante in sidebar, solo con il sotto-tab "Iscrizioni" attivo (`#tabDettagliCorso li.active_link`) e la sidebar presente; legge l'iframe `iframe.embed-responsive-item` | +| Pulsanti esiti esame | Tre pulsanti che impostano in blocco ammissione ed esiti delle due parti: Ammessi/Positivo/Positivo, Ammessi/Positivo/Non previsto, Ammessi/Non previsto/Positivo | Sidebar, solo se esistono i select `id_part_*-ammissione` | +| Compilazione massiva verbale | Mini-form sotto i pulsanti esiti: "Argomento parte 1", "Argomento parte 2" e "Sede di destinazione", con "Applica a tutti i candidati" (i campi vuoti non sovrascrivono); ogni casella compare solo se il campo esiste nella pagina, senza campi il form non compare. Guida: [guida-utente](guida-utente/00-indice.md) | Sidebar, stessa pagina e condizione dei pulsanti esiti; scrive nei campi `id_part_*-argomento_parte_1/2` e `-destinazione` | +| Copia per LURCH (JSON) | Copia negli appunti direttore, quota, corso, protocollo, link GAIA, `dataInizio`, `dataEsame`, `scadenzaDomande` (ISO 8601) | Sidebar, solo con il sotto-tab "Informazioni" attivo (`#tabDettagliCorso li.active_link`, non su `/termina/`); legge i pannelli `.panel.panel-info` | + +## Sedi, elenchi e catalogo + +| Funzione | Cosa fa | Dove si aggancia | +|---|---|---| +| Sede preferita | Select del comitato preferito salvato tra le sessioni (`GM_setValue`), pulsante "Solo preferito" (seleziona il comitato e i figli) e "Seleziona tutto" | Sidebar, nelle pagine con tabella sedi (`input[name=sedi]`) | +| Copia struttura sedi (JSON) | Copia negli appunti la gerarchia Regionale, Locali, Sottosedi con feedback del conteggio | Sidebar di `/us/elenchi/volontari/`, solo con la tabella sedi visibile | +| Copia catalogo corsi (JSON) | Copia negli appunti nome, codice, livello, tipo, obiettivo e scheda PDF di ogni corso | Sidebar di `/courses/catalog`, elementi `.corso-nome` | diff --git a/tampermonkey-script/GAIA-Swissknife.user.js b/tampermonkey-script/GAIA-Swissknife.user.js index 8d4f1d9..1feb827 100644 --- a/tampermonkey-script/GAIA-Swissknife.user.js +++ b/tampermonkey-script/GAIA-Swissknife.user.js @@ -5,7 +5,7 @@ // @downloadURL https://luigidacunto.com/scripts/gaia-swissknife/tampermonkey-script/GAIA-Swissknife.user.js // @changelogURL https://luigidacunto.com/scripts/gaia-swissknife/tampermonkey-script/CHANGELOG.md // @author Luigi D'Acunto -// @version 1.1.011 +// @version 1.2.000 // @description Aggiunge funzionalità alle pagine di GAIA // @match https://gaia.cri.it/* // @require https://code.jquery.com/jquery-3.6.0.min.js @@ -273,6 +273,8 @@ GM_addStyle(GM_getResourceText("DataTablesCSS")); console.log("GAIA Swissknife: Valori impostati - Ammessi, Non previsto, Positivo"); }); + addBulkVerbaleForm(); + } else { console.log("GAIA Swissknife: Elemento ul#sezione non trovato."); } @@ -281,9 +283,45 @@ GM_addStyle(GM_getResourceText("DataTablesCSS")); } } + // Mini-form di compilazione massiva (argomenti parte 1/2 e sede di destinazione) per tutti i candidati del verbale + function addBulkVerbaleForm() { + const campi = (suffix) => $(`[id^='id_part_'][id$='-${suffix}']`); + const inputStyle = 'width:100%;box-sizing:border-box;margin-bottom:5px;padding:4px;'; + + // Ogni campo compare solo se il corso lo prevede nella pagina; senza nessun campo il form non viene creato + const $campiForm = []; + [['argomento_parte_1', 'Argomento parte 1'], ['argomento_parte_2', 'Argomento parte 2']].forEach(([suffix, label]) => { + if (campi(suffix).length) $campiForm.push([$(``), suffix]); + }); + const $primaDest = campi('destinazione').first(); + if ($primaDest.length) { + // Le opzioni della sede sono identiche per tutti i candidati: si clonano dal primo select + $campiForm.push([$(``).append($primaDest.children().clone()), 'destinazione']); + } + if (!$campiForm.length) return; + + const $apply = $(''); + + $apply.on('click', () => { + // Un campo lasciato vuoto non sovrascrive i valori già presenti nei candidati + $campiForm.forEach(([$src, suffix]) => { + if ($src.val()) campi(suffix).val($src.val()).trigger('change'); + }); + const orig = $apply.text(); + $apply.text('✓ Applicato!'); + setTimeout(() => $apply.text(orig), 3000); + }); + + appendToSwissknifeSection( + $('
  • ').append($campiForm.map(([$el]) => $el), $apply) + ); + } + // Funzione per aggiungere il pulsante "Apri tutti i Curriculum" sezione iscritti di un corso function addOpenAllProfilesButton() { - if (!window.location.href.includes('/iscritti/')) return; + // Serve il sotto-tab "Iscrizioni" attivo e la sidebar: lo script gira anche negli iframe della lista (stesso URL /iscritti/, ma senza sidebar) + if (!/^\/aspirante\/corso-base\/\d+\/iscritti\/$/.test($('#tabDettagliCorso li.active_link a').attr('href') || '')) return; + if ($('#sezione').length === 0) return; const openButton = $(`