NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name Moodle grades graph
// @namespace http://tampermonkey.net/
// @version 0.1
// @description It generate a graphs with grades statistics.
// @author ebota@iam.cat
// @match https://*/moodle/mod/assign/view.php?id=*&action=grading
// @match https://*/moodle/mod/assign/view.php?action=grading&id=*
// @grant none
// @require http://code.jquery.com/jquery-latest.js
// @require https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.4.0/Chart.bundle.min.js
// ==/UserScript==
/*
* Graph library from: https://github.com/chartjs/Chart.js
Bar graph: http://www.chartjs.org/docs/#bar-chart-introduction
*/
var grades=[]; //each students grade
var stats=[0,0,0,0,0,0,0,0,0,0]; //How many students have won each grade?
function doWork() {
//we "webscrap" to get students grade
//Now it only works with grades 0-100 or %
$('.c5').each(function( index, value ) {
var tmpHTML=$(this).html();
var brPos=tmpHTML.lastIndexOf(">");
tmpHTML=tmpHTML.substr(brPos+1,tmpHTML.length);
tmpHTML=tmpHTML.replace(" "," ").replace(" "," ");
tmpHTML=tmpHTML.replace("%","/100"); //Only applies when using % grades (rubrics...)
//console.log("HTML: "+tmpHTML);
tmpText=tmpHTML;
//var tmpText=$(this).text().replace("%","/100");
tmpMark=tmpText.replace("Qualificació","").split("/")[0];
tmpMark=tmpMark.replace(",",".");
if ( $.isNumeric(tmpMark) ) {
grades.push(tmpMark);
}
});
//Iterate over grades to update stats
jQuery.each(grades, (index, value) => {
if (value == 100) value=99;
var pos=parseInt(value/10);
stats[pos]++;
});
console.log("Grades; "+grades);
console.log("Stats; "+stats);
//Inserting an html canvas just before the header. We'll use it to draw the graph
//The easy solutions of canvas float: right leave the page clear enough to use it without problems
$('h2').before('<canvas id="studentsStats" width="400" height="200" style="float:right"></canvas>');
var ctx = $("#studentsStats");
var myDataset = {
labels: ["<1", "<2", "<3", "<4", "<5", "<6", "<7","<8","<9","<=10"],
datasets: [
{
label: "Students",
backgroundColor: "rgba(75,192,192,0.4)",
//data: [stats[0],stats[1],stats[2] ,stats[3],stats[4],stats[5],stats[6],stats[7],stats[8],stats[9]],
data:stats,
}
]
};
var myBarChart = new Chart(ctx, {
type: 'bar',
data: myDataset,
options: {
title: {
display: true,
text: grades.length+" students"
},
legend: {
display:false
},
animation: {
duration:500
},
responsive: false //otherwise it expands horitzontal to full screen
}
});
}
$(document).ready(function() {
console.log("Ready!");
});
(function() {
'use strict';
doWork();
})();