// ==UserScript== // @name GAIA - Swissknife // @namespace https://gitlab.luigidacunto.com/consultant/gaia-swissknife // @updateURL https://luigidacunto.com/scripts/gaia-swissknife/tampermonkey-script/GAIA-Swissknife.user.js // @downloadURL https://luigidacunto.com/scripts/gaia-swissknife/tampermonkey-script/GAIA-Swissknife.user.js // @author Luigi D'Acunto // @version 0.4.4-beta // @description Aggiunge funzionalità alle pagine di GAIA // @match https://gaia.cri.it/* // @grant none // @run-at document-idle // ==/UserScript== (function() { 'use strict'; // Recupera la versione dallo script se disponibile, altrimenti usa un valore di fallback const currentVersion = (typeof GM_info !== 'undefined' && GM_info.script && GM_info.script.version) ? GM_info.script.version : 'x.x'; // Controlla se jQuery è caricato, altrimenti lo carica function ensureJQuery(callback) { if (window.jQuery) { callback(window.jQuery); } else { let script = document.createElement('script'); script.src = 'https://code.jquery.com/jquery-3.6.0.min.js'; script.onload = () => callback(window.jQuery); document.head.appendChild(script); } } ensureJQuery(($) => { console.log("GAIA Swissknife: jQuery caricato con successo!"); function initScript() { // Funzione per aggiungere il blocco di intestazione function ensureSwissknifeHeader() { if ($('#sezione').length > 0 && $('#gaia-swissknife-header').length === 0) { const headerHTML = `
`; $('#sezione').append(headerHTML); } } // Funzione per aggiungere i pulsanti per settare gli esiti degli esami function addExamOutcomeButtons() { console.log("GAIA Swissknife: esecuzione di addExamOutcomeButtons() ..."); // Verifica che ci siano i select che gestiscono gli esiti if ($("select[id^='id_part_'][id$='-ammissione']").length > 0) { // Cerca il menu laterale (ul#sezione) dove inserire il blocco if ($('#sezione').length > 0) { console.log("GAIA Swissknife: Elementi trovati, aggiungo i pulsanti nel menu laterale..."); ensureSwissknifeHeader(); // Aggiungi i pulsanti per settare gli esiti const buttonsHTML = `
  • `; $('#sezione').append(buttonsHTML); // Evento per il pulsante "Tutti Ammessi/Esito Positivo x2" $('#button_set_ampp').click(() => { $("select[id^='id_part_'][id$='-ammissione']").val("AM").trigger('change'); $("select[id^='id_part_'][id$='-esito_parte_1']").val("P").trigger('change'); $("select[id^='id_part_'][id$='-esito_parte_2']").val("P").trigger('change'); console.log("GAIA Swissknife: Valori impostati - Ammessi, Positivo, Positivo"); }); // Evento per il pulsante "Ammessi, Positivo, Non previsto" $('#button_set_ampo').click(() => { $("select[id^='id_part_'][id$='-ammissione']").val("AM").trigger('change'); $("select[id^='id_part_'][id$='-esito_parte_1']").val("P").trigger('change'); $("select[id^='id_part_'][id$='-esito_parte_2']").val("O").trigger('change'); console.log("GAIA Swissknife: Valori impostati - Ammessi, Positivo, Non previsto"); }); // Evento per il pulsante "Ammessi, Non previsto, Positivo" $('#button_set_amop').click(() => { $("select[id^='id_part_'][id$='-ammissione']").val("AM").trigger('change'); $("select[id^='id_part_'][id$='-esito_parte_1']").val("O").trigger('change'); $("select[id^='id_part_'][id$='-esito_parte_2']").val("P").trigger('change'); console.log("GAIA Swissknife: Valori impostati - Ammessi, Non previsto, Positivo"); }); } else { console.log("GAIA Swissknife: Elemento ul#sezione non trovato."); } } else { console.log("GAIA Swissknife: Nessun elemento trovato, i pulsanti non verranno mostrati."); } } // Funzione per aggiungere il pulsante "Apri tutti i Curriculum" function addOpenAllProfilesButton() { if (!window.location.href.includes('/iscritti/')) return; const openButton = $(` `); openButton.on('click', () => { const iframe = document.querySelector('iframe.embed-responsive-item'); if (!iframe) { alert("Impossibile trovare l'iframe con la lista."); console.log("GAIA Swissknife: iframe non trovato."); return; } // Verifica che il contenuto sia accessibile (same-origin) let iframeDoc; try { iframeDoc = iframe.contentDocument || iframe.contentWindow.document; } catch (err) { alert("Accesso all'iframe bloccato per motivi di sicurezza (cross-origin)."); console.error("GAIA Swissknife: accesso iframe negato.", err); return; } const $iframeLinks = $(iframeDoc).find("a[href^='/profilo/'][href*='?fpc']"); if ($iframeLinks.length === 0) { alert("Nessun profilo trovato all'interno dell'iframe."); console.log("GAIA Swissknife: Nessun link profilo nell'iframe."); return; } const profileLinks = $iframeLinks.map(function() { const href = $(this).attr('href'); const match = href.match(/\/profilo\/(\d+)\//); if (match && match[1]) { const id = match[1]; return `https://gaia.cri.it/profilo/${id}/curriculum/?us`; } return null; }).get().filter(Boolean); // Mostra le URL in console sempre console.log("GAIA Swissknife: Profili trovati:"); profileLinks.forEach(link => console.log(link)); if (!confirm(`Vuoi aprire ${profileLinks.length} profili in nuove schede?`)) return; profileLinks.forEach(link => { window.open(link, '_blank'); }); console.log(`GAIA Swissknife: Aperte ${profileLinks.length} schede da iframe.`); }); // Inserimento del pulsante nel menu laterale o in floating if ($('#sezione').length > 0) { ensureSwissknifeHeader(); $('#sezione').append( $('
  • ').append(openButton) ); } else { openButton.css({ position: 'fixed', top: '10px', right: '10px', zIndex: 9999 }).appendTo('body'); } } function highlightRejectedCourses() { if (!window.location.href.match(/\/profilo\/\d+\/curriculum\//)) return; console.log("GAIA Swissknife: Cerco righe con 'Respinto'..."); $("tr").each(function() { const row = $(this); if (row.text().trim().includes("Respinto")) { row.css("background-color", "#f8d7da"); row.css("border-left", "4px solid #dc3545"); // opzionale: bordo rosso console.log("GAIA Swissknife: Riga evidenziata ->", row.text().trim().substring(0, 100)); } }); } function addAuthorizationProfileTool() { if (!window.location.href.includes("/autorizzazioni/")) return; // Crea la finestra modale const $modal = $(`
    🛠 GAIA Swissknife – Curriculum
    `); $('body').append($modal); let isCollapsed = false; $('#gaia-auth-toggle').on('click', function (e) { isCollapsed = !isCollapsed; $('#gaia-auth-body').slideToggle(200); $(this).text(isCollapsed ? '+' : '−'); // Cambia icona da - a + e.stopPropagation(); // Previene conflitti con il drag }); // Trascinabilità let isDragging = false; let dragOffsetX = 0, dragOffsetY = 0; $('#gaia-auth-header') .on('mousedown', function (e) { const modal = document.getElementById('gaia-auth-tool'); const rect = modal.getBoundingClientRect(); isDragging = true; dragOffsetX = e.clientX - rect.left; dragOffsetY = e.clientY - rect.top; e.preventDefault(); // previene selezione testo }); $(document) .on('mousemove', function (e) { if (!isDragging) return; const winW = window.innerWidth; const winH = window.innerHeight; const $modal = $('#gaia-auth-tool'); let newLeft = e.clientX - dragOffsetX; let newTop = e.clientY - dragOffsetY; // Limiti per evitare di trascinare fuori newLeft = Math.max(0, Math.min(newLeft, winW - $modal.outerWidth())); newTop = Math.max(0, Math.min(newTop, winH - $modal.outerHeight())); $modal.css({ left: newLeft + 'px', top: newTop + 'px', right: 'auto' }); }) .on('mouseup', function () { isDragging = false; }); $('#gaia-auth-btn').on('click', function () { const query = $('#gaia-auth-query').val().trim().toLowerCase(); const $results = $('#gaia-auth-results'); $results.empty(); // Pulisce la lista ogni volta $('#gaia-auth-openall-container').hide(); // Nasconde il pulsante "Apri tutti i Curriculum" let collectedLinks = []; // memorizza i link trovati if (!query) { alert("Inserisci un codice corso per cercare."); return; } // Ripulisce eventuali evidenziazioni precedenti $(".panel.panel-default").css("background-color", ""); let found = 0; $(".panel.panel-default").each(function () { const $panel = $(this); const text = $panel.text().toLowerCase(); if (text.includes(query)) { found++; // Evidenzia $panel.css("background-color", "#d4edda"); // Cerca il link al profilo const $profileLink = $panel.find("a[href^='/profilo/']").first(); if ($profileLink.length > 0) { const href = $profileLink.attr('href'); // es. /profilo/220378/ const match = href.match(/\/profilo\/(\d+)\//); const nome = $profileLink.text().trim(); if (match && match[1]) { const id = match[1]; const fullLink = `https://gaia.cri.it/profilo/${id}/curriculum/?us`; collectedLinks.push(fullLink); const $entry = $(`
    ${nome}
    `); $results.append($entry); } } } }); if (collectedLinks.length > 0) { $('#gaia-auth-openall-container').show(); $('#gaia-auth-openall').off('click').on('click', () => { collectedLinks.forEach(link => window.open(link, '_blank')); }); } if (found === 0) { $results.append(`
    Nessun risultato trovato.
    `); } }); } $(document).ready(() => { addExamOutcomeButtons(); addOpenAllProfilesButton(); highlightRejectedCourses(); addAuthorizationProfileTool(); }); } initScript(); }); })();