您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Affiche les couleurs lors de la relecture du CCTL et affiche la note prévisionnel.
// ==UserScript== // @name CCTL Relecture // @namespace Exia Tools // @version 2.0 // @description Affiche les couleurs lors de la relecture du CCTL et affiche la note prévisionnel. // @author LynEvans, repris et modifié par Aurélien KLEIN // @match https://moodle-examens.cesi.fr/mod/quiz/review.php?attempt=* // @grant none // ==/UserScript== window.CCTL = { questions : {}, score : 0, scoreMax : 0, loadQuestions : function(){ if(this.questions != {}){ this.questions = {}; } var questionBlocks = document.getElementsByClassName('que'); for(var id in questionBlocks){ if(!isNaN(id)){ var numero = parseInt(questionBlocks[id].querySelector('.qno').innerHTML); var qScore = parseFloat(questionBlocks[id].querySelector('.grade').innerHTML.substring(9)); this.questions[parseInt(id)+1] = this.createQuestion(numero, qScore, questionBlocks[id]); this.score += this.questions[parseInt(id)+1].score; } } }, createQuestion : function(nQuest, scoreQuest, blockQuest, typeQuest){ CCTL.scoreMax += scoreQuest; var feedback = blockQuest.querySelector('.feedback').textContent; var result = 0; var questionResult = "INCORRECT"; var typeQuestion = blockQuest.querySelector('.content'); if(typeQuestion.querySelectorAll("input[type='radio'][name*='answer']").length > 0){ typeQuestion = this.typeQuestions[2]; } else if(typeQuestion.querySelectorAll("input[type='checkbox'][name*='choice']").length > 0){ typeQuestion = this.typeQuestions[0]; } else if(typeQuestion.querySelectorAll("select").length > 0){ typeQuestion = this.typeQuestions[1]; } else if(typeQuestion.querySelectorAll("input[type='text'][name*='answer']").length > 0){ typeQuestion = this.typeQuestions[3]; } if(feedback.indexOf('Votre réponse est correcte.') > -1){ result = scoreQuest; questionResult = "CORRECT" }else if(feedback.indexOf('Votre réponse est partiellement correcte') > -1){ var nAnswers = 0; var nAnswersGood = 0; questionResult = "PARTIEL"; switch (typeQuestion) { case "CHOOSE ONE": // Impossible break; case "CHOOSE MANY": nAnswers = blockQuest.querySelector('.qtext').textContent; nAnswers = parseInt(nAnswers.substring(nAnswers.lastIndexOf('(')+1, nAnswers.lastIndexOf('réponse')-1)); nAnswersGood = blockQuest.querySelector('.numpartscorrect').textContent; nAnswersGood = parseInt(nAnswersGood.substring(nAnswersGood.lastIndexOf('Vous en avez sélectionné correctement')+38, nAnswersGood.lastIndexOf('.'))); result = Math.round(((nAnswersGood / nAnswers) * scoreQuest) * 10 ) / 10; break; case "FILL BLANK": nAnswers = blockQuest.querySelectorAll('select').length; nAnswersGood = blockQuest.querySelector('.numpartscorrect').textContent; nAnswersGood = parseInt(nAnswersGood.substring(nAnswersGood.lastIndexOf('Vous en avez sélectionné correctement')+38, nAnswersGood.lastIndexOf('.'))); result = Math.round(((nAnswersGood*scoreQuest) / nAnswers) * 10 ) / 10; break; case "FILL INPUT": //Impossible break; } } return {number : nQuest, grade : scoreQuest, score : result, type : typeQuestion, result : questionResult} }, typeQuestions : ["CHOOSE MANY", "FILL BLANK", "CHOOSE ONE", "FILL INPUT"] } document.body.onload = function(){ CCTL.loadQuestions(); for(var id in CCTL.questions){ document.getElementById("q" + id).querySelector('.outcome').style.color = 'black'; document.getElementById("q" + id).querySelector('.outcome').style.textShadow = '0 0 0 transparent'; document.getElementById("quiznavbutton" + id).querySelector('.thispageholder').style.backgroundColor = 'cover'; switch (CCTL.questions[id].result){ case "CORRECT": document.getElementById("q" + id).querySelector('.outcome').style.backgroundColor = '#29ad57'; document.getElementById("quiznavbutton" + id).querySelector('.trafficlight').style.backgroundColor = '#29ad57'; break; case "PARTIEL": document.getElementById("q" + id).querySelector('.outcome').style.backgroundColor = 'rgb(240, 176, 48)'; document.getElementById("quiznavbutton" + id).querySelector('.trafficlight').style.backgroundColor = 'rgb(240, 176, 48)'; break; case "INCORRECT": document.getElementById("q" + id).querySelector('.outcome').style.backgroundColor = 'rgb(192, 48, 48)'; document.getElementById("quiznavbutton" + id).querySelector('.trafficlight').style.backgroundColor = 'rgb(192, 48, 48)'; break; } } var ratio = parseFloat(CCTL.score) / parseFloat(CCTL.scoreMax); var note = ratio >= 0.75 ? "A" : ratio >= 0.5 ? "B" : ratio >= 0.25 ? "C" : "D"; document.getElementById("mod_quiz_navblock").innerHTML += "<h4 style='text-align:center;font-weight:bold;'>" + CCTL.score + "/" + CCTL.scoreMax + " => " + note + "</h4>"; }