// ==UserScript==
// @name UniPegaso - Tools Quiz & anti EiPass popup
// @include /.*pegaso\.multiversity\.click.*/
// @grant none
// @author MarcoInc
// @description Rimuove popup EiPass, espande gli accordion dei moduli, aiuta nei test di autovalutazione
// @version 1.6.1
// @run-at document-end
// @license MIT
// @namespace https://greasyfork.org/users/564300
// ==/UserScript==
//URL della pagina corrente
var urlPagina=window.location.href;
// URL specificati
var urlLezioni = "lms-courses.pegaso.multiversity.click/main/lp-video_student_view/lp-video_controller.php";
var urlQuiz = "lms-courses.pegaso.multiversity.click/main/lp-video_student_view";
//PAGINA TUTTE LE LEZIONI -> Estrai in HTLM - Espandi accordions
if (urlPagina.includes(urlLezioni)) {
console.log("PAGINA LEZIONI");
var header = document.querySelector(".panel-default");
//ESPANDI LEZIONI
//BOTTONE ESPANDI LEZIONI
var buttonEspandi = document.createElement("button");
buttonEspandi.id = 'espandi';
buttonEspandi.textContent = 'Espandi moduli lezioni';
var chapters;
if(document.querySelector("[class*='name-folder']")){
chapters = document.querySelectorAll("[class*='name-folder']");
}
// Creare un gestore di eventi "click"
buttonEspandi.addEventListener('click', function() {
// Cercare tutti gli elementi con la classe che inizia con "lesson-single"
var lessons = document.querySelectorAll("[class*='lesson-single']");
// Iterare su tutti gli elementi trovati
for (var lesson of lessons) {
console.log("Moduli rilevati");
// Modificare la loro visibilità
lesson.style.display = lesson.style.display === 'none' ? '' : 'none';
}
if(chapters){
console.log("Capitoli rilevati");
for (var chapter of chapters) {
// Modificare la loro visibilità
chapter.classList.add("active")
}
var moduli=document.querySelectorAll(".media .content-folder")
for (var modulo of moduli) {
modulo.style.display = modulo.style.display === 'none' ? '' : 'none';
var subLessons= modulo.querySelectorAll("[class*='media lesson-']");
for (var subLesson of subLessons) {
// Modificare la loro visibilità
subLesson.style.display = subLesson.style.display === 'none' ? '' : 'none';
}
}
}
});
header.parentNode.insertBefore(buttonEspandi, header);
//PAGINA SINGOLA LEZIONE -> Visualizzazione automatica
} else if (urlPagina.includes(urlQuiz)) {
console.log("PAGINA QUIZ");
// Recupera il contenuto del tuo script JavaScript
var scripts = document.getElementsByTagName("script");
var scriptContent = "";
for (let script of scripts) {
scriptContent += script.textContent; //salva solo le righe delle domande e risposte
}
// Usa un'espressione regolare per trovare le risposte corretta nella pagina
var regex = /this\.rightAns\[\d+\]="\d+"/g; //sta nel tag <script>
var matches = scriptContent.match(regex);
// Crea un oggetto per le risposte corrette
var correctAnswers = {};
for (let match of matches) {
var questionNumber = match.match(/\d+/g)[0]; //numero domanda
var correctAnswer = match.match(/\d+/g)[1]; //numero risposta
correctAnswers[questionNumber] = correctAnswer;
}
//SELEZIONA -> checked
// Creazione del pulsante di invio
var button1 = document.createElement("button");
button1.innerHTML = "Seleziona le ESATTE e completa";
button1.classList.add("scriptBtn");
var header2 = document.querySelector(".panel-default");
header2.parentNode.insertBefore(button1, header2);
// Aggiunta dell'evento click al pulsante di invio
button1.addEventListener("click", function () {
console.log("SELEZIONATE");
// Iterazione su tutte le domande
for (var question in correctAnswers) {
var correctAnswer = correctAnswers[question];
var selector =
'input[name="d' + question + '"][value="' + correctAnswer + '"]';
var correctOption = document.querySelector(selector);
if (correctOption) {
// Mette la spunta nella domanda corretta
correctOption.checked = true;
}
}
document.querySelectorAll("button.btn.btn-success.btn-block.btn-submit")[0].click();
});//FINE SELEZIONA
//EVIDENZIA
// Creazione del pulsante di invio
var button2 = document.createElement("button");
button2.innerHTML = "Evidenzia le ESATTE";
button2.classList.add("scriptBtn");
header2.parentNode.insertBefore(button2, header2);
// Aggiunta dell'evento click al pulsante di invio
button2.addEventListener("click", function () {
console.log("EVIDENZIATE");
// Iterazione su tutte le domande
for (let match of matches) {
var questionNumber = match.match(/\d+/g)[0];
var correctAnswer = match.match(/\d+/g)[1];
var selector = 'input[name="d' + questionNumber + '"][value="' + correctAnswer + '"]';
var correctOption = document.querySelector(selector);
if (correctOption) {
// Evidenzia la risposta corretta in verde
correctOption.parentNode.parentNode.style.backgroundColor = "rgba(82, 192, 114, .5)";
}
}
});//FINE EVIDENZIA
//BOTTONE PREPARA PANIERE -> Thanks to Bruno
var button3 = document.createElement("button");
button3.innerHTML = "Prepara paniere (senza Errate)";
button3.classList.add("scriptBtn");
header2.parentNode.insertBefore(button3, header2);
var click=false; //evita panieri doppioni
// Aggiunta dell'evento click al pulsante di invio
button3.addEventListener("click", function () {
if(!click || !click2){
console.log("Paniere generato");
click=true;
// Iterazione su tutte le domande
var paniere = '';
for (let match of matches) {
var questionNumber = match.match(/\d+/g)[0];
var correctAnswer = match.match(/\d+/g)[1];
var selector = 'input[name="d' + questionNumber + '"][value="' + correctAnswer + '"]';
var correctOption = document.querySelector(selector);
if (correctOption) {
paniere += correctOption.parentNode.parentNode.parentNode.offsetParent.tHead.innerText.replace(/\t/, ") ") + '<br>' + correctOption.parentNode.parentNode.outerText.replace(/\t/, ") ") + '<br>--------------------<br>'
}
}
//get numero della lezione
var numberLesson = /lp_id\=([0-9]+)/.exec(urlPagina)[1];
//Aggiunta paniere
var paniereVisible = document.createElement("p");
paniereVisible.id = 'Paniere'
paniereVisible.innerHTML = 'Lezione ' + numberLesson + ') <strong>' + document.querySelectorAll('.list-group-item.title-lesson')[0].outerText + '</strong>\n<br><br>\n' + paniere;
header2.parentNode.insertBefore(paniereVisible, header2);
//Aggiunta button per copiare il testo
var copia = document.createElement("button");
copia.innerHTML = "Copia paniere";
copia.classList.add("scriptBtn");
header2.parentNode.insertBefore(copia, header2);
copia.onclick = function() {
// selezione del contenuto
var copyText = document.querySelector("#Paniere");
// Copia il paniere
navigator.clipboard.writeText(copyText.innerText);
};
var stampa = document.createElement("button");
stampa.innerHTML = "Stampa paniere in pdf";
stampa.classList.add("scriptBtn");
header2.parentNode.insertBefore(stampa, header2);
stampa.onclick = function() {
var originalContents = document.body.innerHTML;
document.title = 'Lezione ' + numberLesson + ') ' + document.querySelectorAll('.list-group-item.title-lesson')[0].outerText;
document.body.innerHTML = '';
document.body.insertBefore(paniereVisible, null);
window.print();
document.body.innerHTML = originalContents;
};
}
else{
console.log("Paniere già generato");
}
}); //FINE PREPARA PANIERE
//BOTTONE PREPARA PANIERE -> Thanks to Bruno
var button4 = document.createElement("button");
button4.innerHTML = "Prepara paniere (con Errate)";
button4.classList.add("scriptBtn");
header2.parentNode.insertBefore(button4, header2);
var click2=false; //evita panieri doppioni
// Aggiunta dell'evento click al pulsante di invio
button4.addEventListener("click", function () {
if(!click2 || !click){
console.log("Paniere generato");
click=true;
// Iterazione su tutte le domande
var paniere = '';
for (let match of matches) {
var domande = '';
var option = '';
var questionNumber = match.match(/\d+/g)[0];
var correctAnswer = match.match(/\d+/g)[1];
var selector = 'input[name="d' + questionNumber + '"][value="' + correctAnswer + '"]';
var correctOption = document.querySelector(selector);
for(let i = 1; i <= 4; i++){
console.log('for' + correctAnswer)
if(i != correctAnswer){
selector = 'input[name="d' + questionNumber + '"][value="' + i + '"]';
option = document.querySelector(selector);
domande += option.parentNode.parentNode.outerText.replace(/\t/, ") ") + '<br>'
} else {
selector = 'input[name="d' + questionNumber + '"][value="' + correctAnswer + '"]';
option = document.querySelector(selector);
console.log(option.parentNode.parentNode)
domande += '<span class="correctOption">' + option.parentNode.parentNode.outerText.replace(/\t/, ") ") + '</span> <= Corretta<br>'
}
}
if (correctOption) {
paniere += correctOption.parentNode.parentNode.parentNode.offsetParent.tHead.innerText.replace(/\t/, ") ") + '<br>' + domande + '<br>--------------------<br>'
}
}
//get numero della lezione
var numberLesson = /lp_id\=([0-9]+)/.exec(urlPagina)[1];
//Aggiunta paniere
var paniereVisible = document.createElement("p");
paniereVisible.id = 'Paniere'
paniereVisible.innerHTML = 'Lezione ' + numberLesson + ') <strong>' + document.querySelectorAll('.list-group-item.title-lesson')[0].outerText + '</strong>\n<br><br>\n' + paniere;
header2.parentNode.insertBefore(paniereVisible, header2);
//Aggiunta button per copiare il testo
var copia = document.createElement("button");
copia.innerHTML = "Copia paniere";
copia.classList.add("scriptBtn");
header2.parentNode.insertBefore(copia, header2);
copia.onclick = function() {
// selezione del contenuto
var copyText = document.querySelector("#Paniere");
// Copia il paniere
navigator.clipboard.writeText(copyText.innerText);
};
var stampa = document.createElement("button");
stampa.innerHTML = "Stampa paniere in pdf";
stampa.classList.add("scriptBtn");
header2.parentNode.insertBefore(stampa, header2);
stampa.onclick = function() {
var originalContents = document.body.innerHTML;
document.title = 'Lezione ' + numberLesson + ') ' + document.querySelectorAll('.list-group-item.title-lesson')[0].outerText;
document.body.innerHTML = '';
document.body.insertBefore(paniereVisible, null);
window.print();
document.body.innerHTML = originalContents;
};
}
else{
console.log("Paniere già generato");
}
}); //FINE PREPARA PANIERE
}
//ANTI-POPUP EIPASS
(function() {
'use strict';
//per controllare se ho già chiuso una modale altrimenti lo controllerà in loop
let modaleChiusa = false;
setInterval(function() {
if (modaleChiusa) return;//se ne ha trovata una, esce dalla funzione
//il popup di eipass è l'ultima modale che compare
//cerco tra titti i #box_title quello che ha la dicitura di eipass
const titolo = Array.from(document.querySelectorAll('#box_title')).find(el => el.textContent === "Arricchisci il tuo Curriculum con le certificazioni EIPASS");
//risalgo a ritroso al suo contenitore di classe .model-dialog
const modale = titolo ? titolo.closest('.modal-dialog') : null;
if (modale) {
const pulsanteChiusura = modale.querySelector('.close');
if (pulsanteChiusura) {
pulsanteChiusura.click();
modaleChiusa = true;//appena chiusa la modale non controllerà più
console.log('Pulsante di chiusura cliccato.');
} else {
console.log('Pulsante di chiusura non trovato.');
}
}
}, 500);//controlla ogni tot millisecondi
})(); //FINE ANTI-POPUO EIPASS
const injectCSS = css => {
let el = document.createElement('style');
el.type = 'text/css';
el.innerText = css;
document.head.appendChild(el);
return el;
};
injectCSS(`
.scriptBtn {
margin: 10px 10px 20px 0;
background-color: #a42c52;
font-style: italic;
color: white;
border: none;
border-radius: 10px;
padding: 10px;
box-shadow: 5px 5px 8px -5px rgba(0,0,0,0.69);
}
#Paniere{
padding: 20px;
background-color: white;
border-radius: 10px;
box-shadow: 8px 9px 13px -1px rgba(0,0,0,0.4);
}
.correctOption{
color: green;
text-decoration: underline;
font-weight: bold;
print-color-adjust: exact;
}
`);