sQuiz/script/resulttest.js
2019-08-08 16:43:21 +03:00

280 lines
8.0 KiB
JavaScript

/**
* /script/resulttest.js
* @version 1.3
* @desc Script file for the result viewer page
* @author Fándly Gergő Zoltán (gergo@systemtest.tk, systemtest.tk)
* @copy 2017 Fándly Gergő Zoltán
* License:
sQuiz for creating small jQuery based quizs in an implementable way
Copyright (C) 2017 Fándly Gergő Zoltán
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
**/
function showResSelector(){
$("#menuwrapper").slideDown();
$("#back").attr("onclick", "window.history.back()");
}
function resultFromFile(){
$("#back").attr("onclick", "$(\"#resFromFile\").slideUp(); showResSelector()");
$("#menuwrapper").slideUp();
$("#resFromFile").slideDown();
}
function resultFromId(){
$("#back").attr("onclick", "$(\"#resFromId\").slideUp(); showResSelector()");
$("#menuwrapper").slideUp();
$("#resFromId").slideDown();
}
function openResultFromFile(){
var file=$("input[name=resfile]")[0].files[0];
var fr=new FileReader();
fr.onload=function(){
openResultFromFileCallback(fr.result);
};
fr.readAsText(file, "utf-8");
//hide solvedBy
$("#quizDoneByHolder").css("display", "none");
}
function openResultFromFileCallback(file){
showResults(file);
$("#resFromFile").slideUp();
}
function openResultFromId(){
$.ajax({
url: "./engine/engine.php",
type: "GET",
data: {"getResult": $("input[name=testid]").val()},
success: function(response){
if(response!="not found"){
response=(response instanceof Object)?response:JSON.parse(response);
showResults(response.answered);
//show solvedBy
$("#quizDoneByHolder").css("display", "block");
$("#quizDoneBy").html(response.submitter);
//hide self
$("#resFromId").slideUp();
}
}
});
}
var chartCorrect=null;
var chartAnswers=null;
var chartTimeSpent=null;
var chartTimeSpentPie=null;
function showResults(results){
//show back button
$("#back").attr("onclick", "$(\"#analitycs\").slideUp(); showResSelector()");
var res=(results instanceof Object)?results:JSON.parse(results);
//process data
var correct=0;
var incorrect=0;
var totalTime=0;
var labels=[];
var correctArr=[];
var timeSpentArr=[];
var colorArr=[];
$.each(res.answers, function(key, val){
if(val.correct){
correct++;
}
else{
incorrect++;
}
totalTime+=val.timeElapsed;
labels.push((key+1).toString()+". "+lang.exercise);
correctArr.push(val.correct);
timeSpentArr.push(val.timeElapsed);
colorArr.push("rgb("+(Math.floor(Math.random()*255)).toString()+", "+(Math.floor(Math.random()*255)).toString()+", "+(Math.floor(Math.random()*255)).toString()+")");
});
//set quiz datas
$("#quizName").html(res.quizName);
$("#quizDesc").html(res.quizDesc);
var done=new Date(res.doneDate);
$("#quizDone").html(done.getFullYear().toString()+"-"+(done.getMonth()+1).toString()+"-"+done.getDate().toString()+" "+done.getHours().toString()+":"+done.getMinutes().toString()+":"+done.getSeconds().toString());
$("#quizTimeSpent").html(totalTime);
//
//show charts
//
//clear canvases
if(chartCorrect!=null){
chartCorrect.destroy();
chartAnswers.destroy();
chartTimeSpent.destroy();
chartTimeSpentPie.destroy();
}
//chartCorrect
chartCorrect=new Chart($("#chartCorrect"), {
type: "pie",
data: {
labels: [lang.correct, lang.incorrect],
datasets: [{
label: lang.answers,
backgroundColor: ["rgb(0, 255, 0)", "rgb(255, 0, 0)"],
data: [correct, incorrect]
}]
},
options: {
responsive: false,
title: {
display: true,
fontColor: "rgb(0, 0, 0)",
text: lang.answers
},
legend: {
labels: {
fontColor: "rgb(0, 0, 0)"
},
onClick: null
}
}
});
//chartAnswers
chartAnswers=new Chart($("#chartAnswers"), {
type: "bar",
data: {
labels: labels,
datasets: [{
label: lang.correct,
backgroundColor: "rgba(34,168,186,0.9)",
data: correctArr
}]
},
options: {
responsive: false,
title: {
display: true,
fontColor: "rgb(0, 0, 0)",
text: lang.correctAnswers
},
legend: {
labels: {
fontColor: "rgb(0, 0, 0)"
},
onClick: null
},
scales: {
xAxes: [{
gridLines: {
color: "rgb(0, 0, 0)"
},
ticks: {
fontColor: "rgb(0, 0, 0)"
}
}],
yAxes: [{
gridLines: {
color: "rgb(0, 0, 0)"
},
ticks: {
fontColor: "rgb(0, 0, 0)",
beginAtZero: true
}
}]
}
}
});
//chartTimeSpent
chartTimeSpent=new Chart($("#chartTimeSpent"), {
type: "line",
data: {
labels: labels,
datasets: [{
label: lang.timeSpent,
backgroundColor: "rgba(34,168,186,0.9)",
data: timeSpentArr,
lineTension: 0
}]
},
options: {
responsive: false,
title: {
display: true,
fontColor: "rgb(0, 0, 0)",
text: lang.timeSpent
},
legend: {
labels: {
fontColor: "rgb(0, 0, 0)"
},
onClick: null
},
scales: {
xAxes: [{
gridLines: {
color: "rgb(0, 0, 0)"
},
ticks: {
fontColor: "rgb(0, 0, 0)"
}
}],
yAxes: [{
gridLines: {
color: "rgb(0, 0, 0)"
},
ticks: {
fontColor: "rgb(0, 0, 0)",
beginAtZero: true
}
}]
}
}
});
//chartTimeSpentPie
chartTimeSpentPie=new Chart($("#chartTimeSpentPie"), {
type: "pie",
data: {
labels: labels,
datasets: [{
label: lang.timeSpend,
backgroundColor: colorArr,
data: timeSpentArr
}]
},
options: {
responsive: false,
title: {
display: true,
fontColor: "rgb(0, 0, 0)",
text: lang.timeSpent
},
legend: {
labels: {
fontColor: "rgb(0, 0, 0)"
},
onClick: null
}
}
});
//show container
$("#analitycs").slideDown();
}