95 lines
3.6 KiB
JavaScript
95 lines
3.6 KiB
JavaScript
// -- GESTION DE LA PAGE PERMETTANT DE LISTER LES QUIZS AUXQUELS L'UTILISATEUR A DÉJÀ RÉPONDU
|
|
|
|
/// Il est d'abord testé que le navigateur accepte l'utilisation d'IndexDB
|
|
/// Si oui la liste de quizs ayant déjà reçu au moins une réponse est affichée.
|
|
/// Un bouton permettra aussi de les sauvegarder dans un fichier ou d'importer une sauvegarde.
|
|
|
|
// Configurations générales provenant du backend :
|
|
import { availableLangs } from "../../../config/instance.js";
|
|
const lang=availableLangs[0];
|
|
|
|
// Textes :
|
|
const { localDBNotReady, localFileFail, localFileImportOK, wantToSaveResultsDatas }=require("../../../lang/"+lang+"/answer");
|
|
const { serverError }=require("../../../lang/"+lang+"/general");
|
|
|
|
// Fonctions :
|
|
import { addElement } from "./tools/dom.js";
|
|
import { helloDev } from "./tools/everywhere.js";
|
|
import { isEmpty } from "../../../tools/main";
|
|
import { loadMatomo } from "./tools/matomo.js";
|
|
|
|
// Classe s'occupant du stockage des résultats aux quizs :
|
|
import { userQuizsResults} from "./tools/userQuizsResults";
|
|
|
|
// Éléments du DOM manipulés :
|
|
const datas2Restore=document.getElementById("datas2Restore");
|
|
const quizsList=document.getElementById("quizsList");
|
|
const responseTxt=document.getElementById("response");
|
|
|
|
let userDB, allPreviousAnswers=[], myResults;
|
|
const initialise = async () =>
|
|
{
|
|
try
|
|
{
|
|
// Instanciation de la classe s'occupant du stockage des résultats aux quizs :
|
|
myResults=await userQuizsResults.initialise("myResults", 2);
|
|
// Si la base de données est fonctionnel et que des résultats sont déjà enregistrés, on affiche la liste des quizs ayant une réponse connue :
|
|
if(myResults.dbIsReady !== false)
|
|
{
|
|
myResults.showMyQuizs();
|
|
if(myResults.allResults.length !== 0)
|
|
myResults.saveMyQuizs("quizsSave", wantToSaveResultsDatas, ["button"]);
|
|
}
|
|
else
|
|
addElement(quizsList, "p", localDBNotReady);
|
|
// Statistiques :
|
|
loadMatomo();
|
|
}
|
|
catch(e)
|
|
{
|
|
console.error(e);
|
|
}
|
|
}
|
|
initialise();
|
|
helloDev();
|
|
|
|
datas2Restore.addEventListener("change", function(e)
|
|
{
|
|
try
|
|
{
|
|
responseTxt.innerHTML="";
|
|
const selectedFiles=datas2Restore.files;
|
|
if(selectedFiles !== null && selectedFiles.length === 1)
|
|
{
|
|
// selectedFiles[0].type ne fonctionne pas avec certains navigateurs (Fennec), donc... :
|
|
const extension=selectedFiles[0].name.substring(selectedFiles[0].name.lastIndexOf(".")+1);
|
|
if(extension !== "json")
|
|
addElement(responseTxt, "p", localFileFail, "", ["error"]);
|
|
else
|
|
{
|
|
// Lecture du contenu du fichier qui est passé au parseur :
|
|
const reader=new FileReader();
|
|
reader.onload=async function(e)
|
|
{
|
|
const datas=JSON.parse(reader.result);
|
|
if(myResults.dbIsReady !== false)
|
|
{
|
|
if((datas.quizs.length !==0) &&(datas.results.length !==0))
|
|
{
|
|
await myResults.saveAllResults(datas.results);
|
|
await myResults.saveAllQuizs(datas.quizs);
|
|
// Puis actualise l'affichage :
|
|
myResults.showMyQuizs();
|
|
addElement(responseTxt, "p", localFileImportOK, "", ["success"]);
|
|
}
|
|
}
|
|
};
|
|
reader.readAsText(selectedFiles[0]);
|
|
}
|
|
}
|
|
}
|
|
catch(e)
|
|
{
|
|
console.error(e);
|
|
}
|
|
}); |