Aggiorna la versione a 1.2.000: form di compilazione massiva nella pagina "Termina corso", condizioni di visibilità per "Copia per LURCH" e "Apri tutti i Curriculum" legate al sotto-tab attivo, guida utente con screenshot

- Nuovo mini-form (Argomento parte 1/2, Sede di destinazione) con "Applica a tutti i candidati"; ogni campo compare solo se presente nella pagina
- "Copia per LURCH" visibile solo nel tab "Informazioni"
- "Apri tutti i Curriculum" richiede tab "Iscrizioni" e sidebar, rimosso il fallback fisso che compariva negli iframe
- Aggiunta docs/guida-utente con schede per funzione e screenshot oscurati
This commit is contained in:
Luigi D'Acunto 2026-10-11 11:13:04 +02:00
parent 3fa4ce28b9
commit e79b9301f2
31 changed files with 608 additions and 17 deletions

View file

@ -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([$(`<input type="text" placeholder="${label}" style="${inputStyle}">`), 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([$(`<select style="${inputStyle}"></select>`).append($primaDest.children().clone()), 'destinazione']);
}
if (!$campiForm.length) return;
const $apply = $('<button type="button" style="margin-top:3px;padding:8px;width:100%;background-color:#555;color:#FFF;border:none;border-radius:4px;cursor:pointer;">Applica a tutti i candidati</button>');
$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(
$('<li role="presentation" style="margin:5px;padding:0 5px;"></li>').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 = $(`
<button id="open_all_profiles" style="margin: 5px; padding: 8px; width: 97%; background-color:rgba(234, 0, 255, 0.65); color: #FFF; border: none; border-radius: 4px; cursor: pointer;">
@ -339,19 +377,9 @@ GM_addStyle(GM_getResourceText("DataTablesCSS"));
console.log(`GAIA Swissknife: Aperte ${profileLinks.length} schede da iframe.`);
});
// Inserimento del pulsante nel menu laterale o in floating
if ($('#sezione').length > 0) {
appendToSwissknifeSection(
$('<li role="presentation"></li>').append(openButton)
);
} else {
openButton.css({
position: 'fixed',
top: '10px',
right: '10px',
zIndex: 9999
}).appendTo('body');
}
appendToSwissknifeSection(
$('<li role="presentation"></li>').append(openButton)
);
}
// Funzione per evidenziare le righe con "Respinto"
@ -827,7 +855,9 @@ GM_addStyle(GM_getResourceText("DataTablesCSS"));
// Funzione per copiare i dati del corso per LURCH in clipboard come JSON
function addCopyForLurchButton() {
if (!window.location.href.match(/\/aspirante\/corso-base\/\d+\//)) return;
// Solo con il sotto-tab "Informazioni" attivo (pagina di presentazione): altre pagine del corso (es. /termina/) non hanno i pannelli letti da extractLurchData
const tabAttivo = $('#tabDettagliCorso li.active_link a').attr('href') || '';
if (!/^\/aspirante\/corso-base\/\d+\/$/.test(tabAttivo)) return;
if ($('#sezione').length === 0) return;
console.log("GAIA Swissknife: Aggiungo pulsante Copia per LURCH...");
@ -893,6 +923,12 @@ GM_addStyle(GM_getResourceText("DataTablesCSS"));
})(jQuery.noConflict(true));
// ==CHANGELOG==
// v1.2.000 - Nuova funzione e correzioni di visibilità:
// - Pagina "Termina corso": nuovo mini-form di compilazione massiva (Argomento parte 1/2, Sede di destinazione) con "Applica a tutti i candidati";
// ogni campo compare solo se esiste nella pagina, senza campi il form non viene creato
// - "Copia per LURCH" ora compare solo con il sotto-tab "Informazioni" attivo (non più su /termina/ e altre pagine del corso)
// - "Apri tutti i Curriculum" ora 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
// v1.1.011 - Nuovi campi nel JSON "Copia per LURCH":
// - Aggiunti dataInizio, dataEsame e scadenzaDomande (termine per le domande di ammissione), in formato ISO 8601
// v1.1.010 - Nuova funzione: