Ajout page permettant de lister et sauvegarder ses résultats aux quizs.
This commit is contained in:
parent
7e609c9cdb
commit
b4c6a9d440
@ -9,7 +9,7 @@ import { availableLangs } from "../../../config/instance.js";
|
|||||||
const lang=availableLangs[0];
|
const lang=availableLangs[0];
|
||||||
|
|
||||||
// Textes :
|
// Textes :
|
||||||
const { localDBNotReady }=require("../../../lang/"+lang+"/answer");
|
const { localDBNotReady, localFileFail, localFileImportOK, wantToSaveResultsDatas }=require("../../../lang/"+lang+"/answer");
|
||||||
const { serverError }=require("../../../lang/"+lang+"/general");
|
const { serverError }=require("../../../lang/"+lang+"/general");
|
||||||
|
|
||||||
// Fonctions :
|
// Fonctions :
|
||||||
@ -22,11 +22,9 @@ import { loadMatomo } from "./tools/matomo.js";
|
|||||||
import { userQuizsResults} from "./tools/userQuizsResults";
|
import { userQuizsResults} from "./tools/userQuizsResults";
|
||||||
|
|
||||||
// Éléments du DOM manipulés :
|
// Éléments du DOM manipulés :
|
||||||
//const btnSave=document.getElementById("want2Save");
|
const datas2Restore=document.getElementById("datas2Restore");
|
||||||
//const btnSubmit=document.getElementById("checkResponses");
|
|
||||||
//const propose2Save=document.getElementById("propose2Save");
|
|
||||||
//const responseTxt=document.getElementById("response");
|
|
||||||
const quizsList=document.getElementById("quizsList");
|
const quizsList=document.getElementById("quizsList");
|
||||||
|
const responseTxt=document.getElementById("response");
|
||||||
|
|
||||||
let userDB, allPreviousAnswers=[], myResults;
|
let userDB, allPreviousAnswers=[], myResults;
|
||||||
const initialise = async () =>
|
const initialise = async () =>
|
||||||
@ -34,10 +32,14 @@ const initialise = async () =>
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Instanciation de la classe s'occupant du stockage des résultats aux quizs :
|
// Instanciation de la classe s'occupant du stockage des résultats aux quizs :
|
||||||
myResults=await userQuizsResults.initialise("myResults", 1);
|
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 :
|
// 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)
|
if(myResults.dbIsReady !== false)
|
||||||
await myResults.showMyQuizs();
|
{
|
||||||
|
myResults.showMyQuizs();
|
||||||
|
if(myResults.allResults.length !== 0)
|
||||||
|
myResults.saveMyQuizs("quizsSave", wantToSaveResultsDatas, ["button"]);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
addElement(quizsList, "p", localDBNotReady);
|
addElement(quizsList, "p", localDBNotReady);
|
||||||
// Statistiques :
|
// Statistiques :
|
||||||
@ -50,143 +52,44 @@ const initialise = async () =>
|
|||||||
}
|
}
|
||||||
initialise();
|
initialise();
|
||||||
helloDev();
|
helloDev();
|
||||||
/*
|
|
||||||
// Fonction affichant le quiz, quand il est caché par défaut+ déclenchant le chronomètre mesurant la durée de réponse aux questions.
|
|
||||||
const showQuestionnaire = () =>
|
|
||||||
{
|
|
||||||
chronoBegin=Date.now();
|
|
||||||
myForm.style.display="block";
|
|
||||||
btnShow.style.display="none";
|
|
||||||
const here=window.location; // window.location à ajouter pour ne pas quitter la page en mode "preview".
|
|
||||||
if(window.location.hash !== "")
|
|
||||||
{
|
|
||||||
window.location.hash="";// ! le "#" reste
|
|
||||||
window.location.assign(here+"questionnaire");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
window.location.assign(here+"#questionnaire");
|
|
||||||
}
|
|
||||||
|
|
||||||
let chronoBegin;
|
datas2Restore.addEventListener("change", function(e)
|
||||||
if(btnShow)
|
|
||||||
{
|
|
||||||
btnShow.addEventListener("click", function(e)
|
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
e.preventDefault();
|
responseTxt.innerHTML="";
|
||||||
showQuestionnaire();
|
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)
|
catch(e)
|
||||||
{
|
{
|
||||||
addElement(responseTxt, "p", serverError, "", ["error"]);
|
|
||||||
console.error(e);
|
console.error(e);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
// Un lien peut être passé pour voir directement le quiz :
|
|
||||||
if(location.hash !== "" && location.hash === "#questionnaire")
|
|
||||||
showQuestionnaire();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Dans le cas d'un quiz groupé, le chrono est lancé dès l'affichage :
|
|
||||||
if(quizInfos.GroupId != "0")
|
|
||||||
{
|
|
||||||
chronoBegin=Date.now();
|
|
||||||
btnSubmit.style.display="block";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Traitement de l'envoi de la réponse de l'utilisateur :
|
|
||||||
let answer;
|
|
||||||
myForm.addEventListener("submit", async function(e)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
e.preventDefault();
|
|
||||||
btnSubmit.style.display="none"; // seulement une réponse à la fois, SVP :)
|
|
||||||
responseTxt.innerHTML=""; // supprime les éventuels messages déjà affichés
|
|
||||||
answer=userQuizsResults.checkUserAnswers(myForm);
|
|
||||||
answer.duration=Math.round((Date.now()-chronoBegin)/1000);
|
|
||||||
answer.QuestionnaireId=quizInfos.QuestionnaireId;
|
|
||||||
answer.GroupId=quizInfos.GroupId;
|
|
||||||
|
|
||||||
// Enregistrement et affichage du résultat, suivant les cas :
|
|
||||||
let getOuput=userQuizsResults.getResultOutput(answer);
|
|
||||||
// S'il y a déjà une réponse dans la bd, c'est que l'utilisateur est ok pour les enregister.
|
|
||||||
if(myResults.allResults.length !== 0)
|
|
||||||
{
|
|
||||||
const saveResponses=await myResults.addResult(answer);
|
|
||||||
if(saveResponses)
|
|
||||||
await myResults.showPreviousResultsForId(quizInfos.QuestionnaireId, quizInfos.GroupId);
|
|
||||||
getOuput+="<br><br>"+wantToSeaPreviousResults.replace("URL","#explanations");
|
|
||||||
// Nouveau quiz pour cette personne ?
|
|
||||||
await myResults.saveNewQuiz(quizInfos);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// S'il n'a pas encore de données, on stocke temporairement le résultat et propose de l'enregistrer :
|
|
||||||
if(myResults.saveResultTemp(answer) && myResults.dbIsReady)
|
|
||||||
{
|
|
||||||
getOuput+="<br><br>"+wantToSaveResponses;
|
|
||||||
propose2Save.style.display="block";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
addElement(responseTxt, "p", getOuput, "", ["info"]);
|
|
||||||
// On redirige vers le résultat :
|
|
||||||
const here=window.location;
|
|
||||||
if(window.location.hash !== "")
|
|
||||||
{
|
|
||||||
window.location.hash=""; // ! le "#" reste
|
|
||||||
window.location.assign(here+"response");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
window.location.assign(here+"#response");
|
|
||||||
|
|
||||||
// + Affichage des textes d'explication pour chaque question
|
|
||||||
const explanations=document.querySelectorAll(".help");
|
|
||||||
for(let i in explanations)
|
|
||||||
{
|
|
||||||
if(explanations[i].style != undefined) // sinon, la console affiche une erreur "TypeError: explanations[i].style is undefined", bien que tout fonctionne (?)
|
|
||||||
explanations[i].style.display="block";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch(e)
|
|
||||||
{
|
|
||||||
addElement(responseTxt, "p", serverError, "", ["error"]);
|
|
||||||
console.error(e);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// L'utilisateur demande à sauvegarder son résultat :
|
|
||||||
btnSave.addEventListener("click", async function(e)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
e.preventDefault();
|
|
||||||
if(!isEmpty(myResults.dbIsReady) && !isEmpty(answer)) // On ne devrait pas m'avoir proposé d'enregistrer dans ce cas, mais...
|
|
||||||
{
|
|
||||||
const saveResponses=await myResults.addResult(answer);
|
|
||||||
if(saveResponses)
|
|
||||||
{
|
|
||||||
// Nouvel enregistrement = actualisation nécessaire de la liste des résultats pour ce quiz :
|
|
||||||
await myResults.showPreviousResultsForId(quizInfos.QuestionnaireId, quizInfos.GroupId);
|
|
||||||
// Nouveau quiz (ce qui doit être le cas, mais...) :
|
|
||||||
await myResults.saveNewQuiz(quizInfos);
|
|
||||||
// Redirection vers la liste des résultats :
|
|
||||||
const here=window.location; // window.location à ajouter pour ne pas quitter la page en mode "preview".
|
|
||||||
if(window.location.hash !== "")
|
|
||||||
{
|
|
||||||
window.location.hash="";// ! le "#" reste
|
|
||||||
window.location.assign(here+"explanations");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
window.location.assign(here+"#explanations");
|
|
||||||
}
|
|
||||||
propose2Save.style.display="none";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch(e)
|
|
||||||
{
|
|
||||||
addElement(responseTxt, "p", serverError, "", ["error"]);
|
|
||||||
console.error(e);
|
|
||||||
}
|
|
||||||
});*/
|
|
@ -29,7 +29,8 @@ const quizInfos=
|
|||||||
url: window.location.pathname,
|
url: window.location.pathname,
|
||||||
GroupId: document.getElementById("groupId").value,
|
GroupId: document.getElementById("groupId").value,
|
||||||
QuestionnaireId: document.getElementById("questionnaireId").value,
|
QuestionnaireId: document.getElementById("questionnaireId").value,
|
||||||
title: myForm.dataset.title
|
title: myForm.dataset.title,
|
||||||
|
keywords: myForm.dataset.keywords
|
||||||
};
|
};
|
||||||
|
|
||||||
// Éléments du DOM manipulés :
|
// Éléments du DOM manipulés :
|
||||||
@ -50,7 +51,7 @@ const initialise = async () =>
|
|||||||
btnShow.style.display="inline"; // Le bouton est caché si le JS est inactif, car le JS est nécessaire pour la suite...
|
btnShow.style.display="inline"; // Le bouton est caché si le JS est inactif, car le JS est nécessaire pour la suite...
|
||||||
}
|
}
|
||||||
// Instanciation de la classe s'occupant du stockage des résultats aux quizs :
|
// Instanciation de la classe s'occupant du stockage des résultats aux quizs :
|
||||||
myResults=await userQuizsResults.initialise("myResults", 1);
|
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 ceux pour le quiz en cours :
|
// Si la base de données est fonctionnel et que des résultats sont déjà enregistrés, on affiche ceux pour le quiz en cours :
|
||||||
if(myResults.allResults.length !== 0)
|
if(myResults.allResults.length !== 0)
|
||||||
await myResults.showPreviousResultsForId(quizInfos.QuestionnaireId, quizInfos.GroupId);
|
await myResults.showPreviousResultsForId(quizInfos.QuestionnaireId, quizInfos.GroupId);
|
||||||
|
@ -183,6 +183,11 @@ export class userQuizsResults
|
|||||||
store.createIndex("nbQuestions", "nbQuestions", { unique: false });
|
store.createIndex("nbQuestions", "nbQuestions", { unique: false });
|
||||||
store.createIndex("date", "date", { unique: false }); // bien que doublons peu probables...
|
store.createIndex("date", "date", { unique: false }); // bien que doublons peu probables...
|
||||||
}
|
}
|
||||||
|
if (e.oldVersion < 2)
|
||||||
|
{
|
||||||
|
const quizsStore=req.transaction.objectStore("userQuizs");
|
||||||
|
quizsStore.createIndex("keywords", "keywords", { unique: false });
|
||||||
|
}
|
||||||
};
|
};
|
||||||
req.onsuccess= (e) =>
|
req.onsuccess= (e) =>
|
||||||
{
|
{
|
||||||
@ -350,6 +355,38 @@ export class userQuizsResults
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Importation en masse des résultats :
|
||||||
|
async saveAllResults(results)
|
||||||
|
{
|
||||||
|
await this.getOpenDb();
|
||||||
|
return new Promise( (resolve, reject) =>
|
||||||
|
{
|
||||||
|
const resultsStore=getStore(this.db, "userResults", "readwrite");
|
||||||
|
// Au commence par vider l'existant :
|
||||||
|
resultsStore.clear();
|
||||||
|
// Puis on enregistre les données fournies :
|
||||||
|
for(const result of results)
|
||||||
|
{
|
||||||
|
if(this.checkIfResultIsComplete(result))
|
||||||
|
{
|
||||||
|
let req;
|
||||||
|
req=resultsStore.add(result);
|
||||||
|
req.onerror= (e) =>
|
||||||
|
{
|
||||||
|
this.db.close();
|
||||||
|
reject(e);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.db.close();
|
||||||
|
// On injecte les donnés qui ont été acceptées dans l'instance :
|
||||||
|
this.getAllResults().then( () =>
|
||||||
|
{
|
||||||
|
resolve(true);
|
||||||
|
});
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// Enregistre le quiz, s'il n'existe pas déjà :
|
// Enregistre le quiz, s'il n'existe pas déjà :
|
||||||
async saveNewQuiz(quizInfos)
|
async saveNewQuiz(quizInfos)
|
||||||
{
|
{
|
||||||
@ -398,6 +435,38 @@ export class userQuizsResults
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Importation en masse des quizs :
|
||||||
|
async saveAllQuizs(quizs)
|
||||||
|
{
|
||||||
|
await this.getOpenDb();
|
||||||
|
return new Promise( (resolve, reject) =>
|
||||||
|
{
|
||||||
|
const quizsStore=getStore(this.db, "userQuizs", "readwrite");
|
||||||
|
// Au commence par vider l'existant :
|
||||||
|
quizsStore.clear();
|
||||||
|
// Puis on enregistre les données fournies :
|
||||||
|
for(const quiz of quizs)
|
||||||
|
{
|
||||||
|
if(!isEmpty(quiz.url) && !isEmpty(quiz.title) && (!isEmpty(quiz.QuestionnaireId) || !isEmpty(quiz.GroupId)))
|
||||||
|
{
|
||||||
|
let req;
|
||||||
|
req=quizsStore.add(quiz);
|
||||||
|
req.onerror= (e) =>
|
||||||
|
{
|
||||||
|
this.db.close();
|
||||||
|
reject(e);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.db.close();
|
||||||
|
// On injecte les donnés qui ont été acceptées dans l'instance :
|
||||||
|
this.getAllQuizs().then( () =>
|
||||||
|
{
|
||||||
|
resolve(true);
|
||||||
|
});
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// Fonction affichant les précédents résultats connus pour le quiz encours :
|
// Fonction affichant les précédents résultats connus pour le quiz encours :
|
||||||
async showPreviousResultsForId(QuestionnaireId, GroupId, txtContentId="explanationsContent", txtTitleId="explanationsTitle")
|
async showPreviousResultsForId(QuestionnaireId, GroupId, txtContentId="explanationsContent", txtTitleId="explanationsTitle")
|
||||||
{
|
{
|
||||||
@ -444,8 +513,6 @@ export class userQuizsResults
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
addElement(explanationsContent, "ul", noPreviousResults);
|
addElement(explanationsContent, "ul", noPreviousResults);
|
||||||
/// Revoir : ajouter un lien vers la page listant les quizs auxquels l'utilisateur a répondu
|
|
||||||
/// addElement(explanationsContent, "p", "<a href=\"/"+configTemplate.userHomePage+"\" class=\"button cardboard\">"+configTemplate.userHomePageTxt+"</a>", "", ["btn"], "", false);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -454,13 +521,24 @@ export class userQuizsResults
|
|||||||
{
|
{
|
||||||
const listElt=document.getElementById(listId);
|
const listElt=document.getElementById(listId);
|
||||||
// On affiche d'abord les quizs les plus récents :
|
// On affiche d'abord les quizs les plus récents :
|
||||||
const myQuizs=this.allQuizs.reverse();
|
const myQuizs=Object.values(this.allQuizs);
|
||||||
|
myQuizs.reverse();
|
||||||
let html="";
|
let html="";
|
||||||
for(const quiz of myQuizs)
|
for(const quiz of myQuizs)
|
||||||
html+=`<li><a href="${quiz.url}#explanations">${quiz.title}</a></li>`;
|
html+=`<li><a href="${quiz.url}#explanations">${quiz.title}</a></li>`;
|
||||||
if(html !== "")
|
if(html !== "")
|
||||||
addElement(listElt, "ul", html+"ici");
|
addElement(listElt, "ul", html);
|
||||||
else
|
else
|
||||||
addElement(listElt, "p", noPreviousResultsAtAll);
|
addElement(listElt, "p", noPreviousResultsAtAll);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Propose à l'utilisateur de télécharger ses données dans un fichier JSON
|
||||||
|
saveMyQuizs(eltId="quizsSave", saveLinkTxt="Save your datas.", cssClass=[], linkId="")
|
||||||
|
{
|
||||||
|
const datas2Save=[JSON.stringify({ quizs: this.allQuizs, results: this.allResults })];
|
||||||
|
const datasFile=new File(datas2Save, "myDatas.json", { type: "application/json", });
|
||||||
|
const datasFileUrl=URL.createObjectURL(datasFile);
|
||||||
|
const domElt=document.getElementById(eltId);
|
||||||
|
addElement(domElt, "a", saveLinkTxt, linkId, cssClass, { href:datasFileUrl, download:"myDatas.json"});
|
||||||
|
}
|
||||||
}
|
}
|
@ -20,6 +20,7 @@
|
|||||||
<a href="/" title="Page d'accueil WikLerni"><img src="/themes/wikilerni/img/wikilerni-purple-2-128.png" alt="WikiLerni (logo)" title="Accéder à la page d'accueil de WikiLerni" /></a>
|
<a href="/" title="Page d'accueil WikLerni"><img src="/themes/wikilerni/img/wikilerni-purple-2-128.png" alt="WikiLerni (logo)" title="Accéder à la page d'accueil de WikiLerni" /></a>
|
||||||
<ul id="headLinks">
|
<ul id="headLinks">
|
||||||
<li><a href="/contact.html" rel="nofollow">Contact</a></li>
|
<li><a href="/contact.html" rel="nofollow">Contact</a></li>
|
||||||
|
<li><a href="/quizs/" title="Retrouvez les quizs auxquels vous avez déjà répondu.">Mes quizs</a></li>
|
||||||
<li><a href="/quizs/" id="indexHeadLink" title="Les dernières publications">Parcourir</a></li>
|
<li><a href="/quizs/" id="indexHeadLink" title="Les dernières publications">Parcourir</a></li>
|
||||||
<li><a href="/a-propos.html">À propos</a></li>
|
<li><a href="/a-propos.html">À propos</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
<a href="/" title="Page d'accueil WikLerni"><img src="/themes/wikilerni/img/wikilerni-purple-2-128.png" alt="WikiLerni (logo)" title="Accéder à la page d'accueil de WikiLerni" /></a>
|
<a href="/" title="Page d'accueil WikLerni"><img src="/themes/wikilerni/img/wikilerni-purple-2-128.png" alt="WikiLerni (logo)" title="Accéder à la page d'accueil de WikiLerni" /></a>
|
||||||
<ul id="headLinks">
|
<ul id="headLinks">
|
||||||
<li><a href="/contact.html" rel="nofollow">Contact</a></li>
|
<li><a href="/contact.html" rel="nofollow">Contact</a></li>
|
||||||
|
<li><a href="/quizs/" title="Retrouvez les quizs auxquels vous avez déjà répondu.">Mes quizs</a></li>
|
||||||
<li><a href="/quizs/" id="indexHeadLink" title="Les dernières publications">Parcourir</a></li>
|
<li><a href="/quizs/" id="indexHeadLink" title="Les dernières publications">Parcourir</a></li>
|
||||||
<!--<li><a href="/connexion.html" id="accountHeadLink">Mon compte</a></li>-->
|
<!--<li><a href="/connexion.html" id="accountHeadLink">Mon compte</a></li>-->
|
||||||
<li><a href="/a-propos.html">À propos</a></li>
|
<li><a href="/a-propos.html">À propos</a></li>
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
<a href="/" title="Page d'accueil WikLerni"><img src="/themes/wikilerni/img/wikilerni-purple-2-128.png" alt="WikiLerni (logo)" title="Accéder à la page d'accueil de WikiLerni" /></a>
|
<a href="/" title="Page d'accueil WikLerni"><img src="/themes/wikilerni/img/wikilerni-purple-2-128.png" alt="WikiLerni (logo)" title="Accéder à la page d'accueil de WikiLerni" /></a>
|
||||||
<ul id="headLinks">
|
<ul id="headLinks">
|
||||||
<li><a href="/contact.html" rel="nofollow">Contact</a></li>
|
<li><a href="/contact.html" rel="nofollow">Contact</a></li>
|
||||||
|
<li><a href="/quizs/" title="Retrouvez les quizs auxquels vous avez déjà répondu.">Mes quizs</a></li>
|
||||||
<li><a href="/quizs/" id="indexHeadLink" title="Les dernières publications">Parcourir</a></li>
|
<li><a href="/quizs/" id="indexHeadLink" title="Les dernières publications">Parcourir</a></li>
|
||||||
<li><a href="/a-propos.html">À propos</a></li>
|
<li><a href="/a-propos.html">À propos</a></li>
|
||||||
<li><a href="/" title="Page d'accueil de WikiLerni">Accueil</a></li>
|
<li><a href="/" title="Page d'accueil de WikiLerni">Accueil</a></li>
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
<a href="/" title="Page d'accueil WikLerni"><img src="/themes/wikilerni/img/wikilerni-purple-2-128.png" alt="WikiLerni (logo)" title="Accéder à la page d'accueil de WikiLerni" /></a>
|
<a href="/" title="Page d'accueil WikLerni"><img src="/themes/wikilerni/img/wikilerni-purple-2-128.png" alt="WikiLerni (logo)" title="Accéder à la page d'accueil de WikiLerni" /></a>
|
||||||
<ul id="headLinks">
|
<ul id="headLinks">
|
||||||
<li><a href="/contact.html" rel="nofollow">Contact</a></li>
|
<li><a href="/contact.html" rel="nofollow">Contact</a></li>
|
||||||
|
<li><a href="/quizs/" title="Retrouvez les quizs auxquels vous avez déjà répondu.">Mes quizs</a></li>
|
||||||
<li><a href="/quizs/" id="indexHeadLink" title="Les dernières publications">Parcourir</a></li>
|
<li><a href="/quizs/" id="indexHeadLink" title="Les dernières publications">Parcourir</a></li>
|
||||||
<li><a href="/a-propos.html">À propos</a></li>
|
<li><a href="/a-propos.html">À propos</a></li>
|
||||||
<li><a href="/" title="Page d'accueil de WikiLerni">Accueil</a></li>
|
<li><a href="/" title="Page d'accueil de WikiLerni">Accueil</a></li>
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
<a href="/" title="Page d'accueil WikLerni"><img src="/themes/wikilerni/img/wikilerni-purple-2-128.png" alt="WikiLerni (logo)" title="Accéder à la page d'accueil de WikiLerni" /></a>
|
<a href="/" title="Page d'accueil WikLerni"><img src="/themes/wikilerni/img/wikilerni-purple-2-128.png" alt="WikiLerni (logo)" title="Accéder à la page d'accueil de WikiLerni" /></a>
|
||||||
<ul id="headLinks">
|
<ul id="headLinks">
|
||||||
<li><a href="/contact.html" rel="nofollow">Contact</a></li>
|
<li><a href="/contact.html" rel="nofollow">Contact</a></li>
|
||||||
|
<li><a href="/quizs/" title="Retrouvez les quizs auxquels vous avez déjà répondu.">Mes quizs</a></li>
|
||||||
<li><a href="/quizs/" id="indexHeadLink" title="Les dernières publications">Parcourir</a></li>
|
<li><a href="/quizs/" id="indexHeadLink" title="Les dernières publications">Parcourir</a></li>
|
||||||
<li><a href="/a-propos.html">À propos</a></li>
|
<li><a href="/a-propos.html">À propos</a></li>
|
||||||
<li><a href="/" title="Page d'accueil de WikiLerni">Accueil</a></li>
|
<li><a href="/" title="Page d'accueil de WikiLerni">Accueil</a></li>
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
<a href="/" title="Page d'accueil WikLerni"><img src="/themes/wikilerni/img/wikilerni-purple-2-128.png" alt="WikiLerni (logo)" title="Accéder à la page d'accueil de WikiLerni" /></a>
|
<a href="/" title="Page d'accueil WikLerni"><img src="/themes/wikilerni/img/wikilerni-purple-2-128.png" alt="WikiLerni (logo)" title="Accéder à la page d'accueil de WikiLerni" /></a>
|
||||||
<ul id="headLinks">
|
<ul id="headLinks">
|
||||||
<li><a href="/contact.html" rel="nofollow">Contact</a></li>
|
<li><a href="/contact.html" rel="nofollow">Contact</a></li>
|
||||||
|
<li><a href="/quizs/" title="Retrouvez les quizs auxquels vous avez déjà répondu.">Mes quizs</a></li>
|
||||||
<li><a href="/quizs/" id="indexHeadLink" title="Les dernières publications">Parcourir</a></li>
|
<li><a href="/quizs/" id="indexHeadLink" title="Les dernières publications">Parcourir</a></li>
|
||||||
<li><a href="/a-propos.html">À propos</a></li>
|
<li><a href="/a-propos.html">À propos</a></li>
|
||||||
<li><a href="/" title="Page d'accueil de WikiLerni">Accueil</a></li>
|
<li><a href="/" title="Page d'accueil de WikiLerni">Accueil</a></li>
|
||||||
|
@ -3,8 +3,8 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<meta name="description" content="Retrouvez vos résultats aux quizs auxquels vous avez déjà répondu sur WikiLerni.">
|
<meta name="description" content="Retrouvez les quizs auxquels vous avez déjà répondu. aux quizs auxquels vous avez déjà répondu sur WikiLerni.">
|
||||||
<title>Retrouvez vos résultats aux quizs WikiLerni</title>
|
<title>Retrouvez les quizs auxquels vous avez déjà répondu. aux quizs WikiLerni</title>
|
||||||
<!-- Version lisible des scripts : https://forge.chapril.org/Fab_Blab/WikiLerni/src/branch/master/front/src -->
|
<!-- Version lisible des scripts : https://forge.chapril.org/Fab_Blab/WikiLerni/src/branch/master/front/src -->
|
||||||
<script src="/JS/polyfill.app.js" defer></script>
|
<script src="/JS/polyfill.app.js" defer></script>
|
||||||
<script src="/JS/myQuizs.app.js" defer></script>
|
<script src="/JS/myQuizs.app.js" defer></script>
|
||||||
@ -20,7 +20,7 @@
|
|||||||
<a href="/" title="Page d'accueil WikLerni"><img src="/themes/wikilerni/img/wikilerni-purple-2-128.png" alt="WikiLerni (logo)" title="Accéder à la page d'accueil de WikiLerni" /></a>
|
<a href="/" title="Page d'accueil WikLerni"><img src="/themes/wikilerni/img/wikilerni-purple-2-128.png" alt="WikiLerni (logo)" title="Accéder à la page d'accueil de WikiLerni" /></a>
|
||||||
<ul id="headLinks">
|
<ul id="headLinks">
|
||||||
<li><a href="/contact.html" rel="nofollow">Contact</a></li>
|
<li><a href="/contact.html" rel="nofollow">Contact</a></li>
|
||||||
<li><a href="/quizs/" title="Retrouvez vos résultats">Mes quizs</a></li>
|
<li><a href="/quizs/" title="Retrouvez les quizs auxquels vous avez déjà répondu.">Mes quizs</a></li>
|
||||||
<li><a href="/quizs/" title="Les dernières publications">Parcourir</a></li>
|
<li><a href="/quizs/" title="Les dernières publications">Parcourir</a></li>
|
||||||
<li><a href="/a-propos.html">À propos</a></li>
|
<li><a href="/a-propos.html">À propos</a></li>
|
||||||
<li><a href="/" title="Page d'accueil de WikiLerni">Accueil</a></li>
|
<li><a href="/" title="Page d'accueil de WikiLerni">Accueil</a></li>
|
||||||
@ -39,12 +39,19 @@
|
|||||||
<noscript>Désolé, mais pour l’instant, l’utilisation de WikiLerni nécessite l’activation du JavaScript.</noscript>
|
<noscript>Désolé, mais pour l’instant, l’utilisation de WikiLerni nécessite l’activation du JavaScript.</noscript>
|
||||||
|
|
||||||
<div id="quizsList"></div>
|
<div id="quizsList"></div>
|
||||||
|
<div id="quizsSave" class="ctaButton"></div>
|
||||||
|
<div class="ctaButton"><a href="#quizsRestore" class="button">Importer mes données.</a>
|
||||||
|
<form id="quizsRestore"><fieldset><p class="info">Sélectinnez ci-dessous, votre fichier de sauvegarde.</p><input type="file" id="datas2Restore" class="cardboard" \></fieldset></form></div>
|
||||||
|
<div id="response"></div>
|
||||||
|
|
||||||
<div id="explanations" class="framed engraved">
|
<div id="explanations" class="framed engraved">
|
||||||
<h2>Comment ça marche ?</h2>
|
<h2>Comment ça marche ?</h2>
|
||||||
<p>À chaque fois que vous répondez à un quiz sur WikiLerni, votre résultat peut être enregistré, si vous l'acceptez.</p>
|
<p>Tout d’abord, <b>cette fonctionnalité est encore expérimentale</b>. Donc si vous rencontrez une erreur, n’hésitez pas à m’en informer.</p>
|
||||||
<p>Vous n'avez pas besoin de créer un compte, car ces données sont enregistrées dans votre navigateur internet, c'est-à-dire sur votre ordinateur. Ceci peut ne pas fonctionner, si vous utilisez une navigation privée ou d'autres configurations interdisant ce type d'enregistrement.</p>
|
<p>À chaque fois que vous répondez à un quiz sur WikiLerni, votre résultat peut être enregistré. Ceci vous est proposé lors du premier enregistrement et est ensuite automatique.</p>
|
||||||
<p>Par ailleurs, ces données ne sont accessibles qu'à partir du navigateur vous ayant permi des les enregistrer.<br>Aussi, pour éviter de les perdre, ou encore vous permettre de les récupérer sur un autre navigateur, un outil de sauvegarde vous est proposé.</p>
|
<p>Vous pouvez ainsi retrouver facilement les quizs auxquels vous avez déjà répondu, ainsi que vos précédents résultats.</p>
|
||||||
|
<p><b>Vous n’avez pas besoin de créer un compte</b>, car ces données sont enregistrées dans votre navigateur internet, c’est-à-dire sur votre ordinateur. </p>
|
||||||
|
<p><b>Ceci peut ne pas fonctionner</b>, si vous utilisez une navigation privée ou d’autres configurations interdisant ce type d’enregistrement.</p>
|
||||||
|
<p>Par ailleurs, ces données ne sont accessibles qu’à partir du navigateur vous ayant permis de les enregistrer.<br>Aussi, <b>pour éviter de perdre vos données</b>, ou encore, vous permettre de les récupérer sur un autre navigateur, une solution de sauvegarde vous est proposée. N’hésitez pas à la tester.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
<a href="/" title="Page d'accueil WikLerni"><img src="/themes/wikilerni/img/wikilerni-purple-2-128.png" alt="WikiLerni (logo)" title="Accéder à la page d'accueil de WikiLerni" /></a>
|
<a href="/" title="Page d'accueil WikLerni"><img src="/themes/wikilerni/img/wikilerni-purple-2-128.png" alt="WikiLerni (logo)" title="Accéder à la page d'accueil de WikiLerni" /></a>
|
||||||
<ul id="headLinks">
|
<ul id="headLinks">
|
||||||
<li><a href="/contact.html" rel="nofollow">Contact</a></li>
|
<li><a href="/contact.html" rel="nofollow">Contact</a></li>
|
||||||
|
<li><a href="/quizs/" title="Retrouvez les quizs auxquels vous avez déjà répondu.">Mes quizs</a></li>
|
||||||
<li><a href="/quizs/" id="indexHeadLink" title="Les dernières publications">Parcourir</a></li>
|
<li><a href="/quizs/" id="indexHeadLink" title="Les dernières publications">Parcourir</a></li>
|
||||||
<li><a href="/a-propos.html">À propos</a></li>
|
<li><a href="/a-propos.html">À propos</a></li>
|
||||||
<li><a href="/" title="Page d'accueil de WikiLerni">Accueil</a></li>
|
<li><a href="/" title="Page d'accueil de WikiLerni">Accueil</a></li>
|
||||||
|
@ -4,6 +4,8 @@ module.exports =
|
|||||||
localDBNeedDatas: "Il manque des données nécessaires à l'enregistrement.",
|
localDBNeedDatas: "Il manque des données nécessaires à l'enregistrement.",
|
||||||
localDBNeedQuizId: "Aucun identifiant n'a été fourni pour le quiz.",
|
localDBNeedQuizId: "Aucun identifiant n'a été fourni pour le quiz.",
|
||||||
localDBNotReady: "Désolé, mais il semble que votre navigateur ne permette pas l'utilisation de cette page. Pour plus d'informations, lisez les explications ci-dessous.",
|
localDBNotReady: "Désolé, mais il semble que votre navigateur ne permette pas l'utilisation de cette page. Pour plus d'informations, lisez les explications ci-dessous.",
|
||||||
|
localFileFail: "Le fichier que vous avez sélectionné n'a pas le format attendu (JSON).",
|
||||||
|
localFileImportOK: "Vos données ont bien été importées. Vos quizs devraient apparaître ci-dessus.",
|
||||||
needIntegerNumberCorrectResponses : "Le nombre de réponses correctes doit être un nombre entier.",
|
needIntegerNumberCorrectResponses : "Le nombre de réponses correctes doit être un nombre entier.",
|
||||||
needIntegerNumberSecondesResponse : "La durée de la réponse doit être un nombre entier de secondes.",
|
needIntegerNumberSecondesResponse : "La durée de la réponse doit être un nombre entier de secondes.",
|
||||||
needIntegerNumberUserResponses : "Le nombre de questions auxquelles l'utilisateur a répondu doit être un nombre entier.",
|
needIntegerNumberUserResponses : "Le nombre de questions auxquelles l'utilisateur a répondu doit être un nombre entier.",
|
||||||
@ -25,6 +27,7 @@ module.exports =
|
|||||||
userAnswersFail : "Vous avez répondu en DURATION secondes et avez <u><b>NBCORRECTANSWERS bonne(s) réponse(s) sur NBQUESTIONS questions</b></u>. C'est certain, vous ferez mieux la prochaine fois !",
|
userAnswersFail : "Vous avez répondu en DURATION secondes et avez <u><b>NBCORRECTANSWERS bonne(s) réponse(s) sur NBQUESTIONS questions</b></u>. C'est certain, vous ferez mieux la prochaine fois !",
|
||||||
userAnswersMedium : "Vous avez répondu en DURATION secondes et avez <u><b>NBCORRECTANSWERS bonne(s) réponse(s) sur NBQUESTIONS questions</b></u>. C'est pas mal du tout !",
|
userAnswersMedium : "Vous avez répondu en DURATION secondes et avez <u><b>NBCORRECTANSWERS bonne(s) réponse(s) sur NBQUESTIONS questions</b></u>. C'est pas mal du tout !",
|
||||||
userAnswersSuccess : "Vous avez répondu en DURATION secondes et avez <u><b>NBCORRECTANSWERS bonne(s) réponse(s) sur NBQUESTIONS questions</b></u>. Bravo ! Rien ne vous échappe !",
|
userAnswersSuccess : "Vous avez répondu en DURATION secondes et avez <u><b>NBCORRECTANSWERS bonne(s) réponse(s) sur NBQUESTIONS questions</b></u>. Bravo ! Rien ne vous échappe !",
|
||||||
|
wantToSaveResultsDatas: "Sauvegarder les données.",
|
||||||
wantToSaveResponses: "Si vous le souhaitez, vous pouvez <b>sauvegarder vos résultats</b> (il n'est pas nécessaire de créer un compte) :",
|
wantToSaveResponses: "Si vous le souhaitez, vous pouvez <b>sauvegarder vos résultats</b> (il n'est pas nécessaire de créer un compte) :",
|
||||||
wantToSeaPreviousResults: "<a href='URL'>Cliquez ici</a> pour tous vos résultats et vos statistiques de réussite à ce quiz."
|
wantToSeaPreviousResults: "<a href='URL'>Cliquez ici</a> pour tous vos résultats et vos statistiques de réussite à ce quiz."
|
||||||
};
|
};
|
@ -4,6 +4,7 @@ module.exports =
|
|||||||
headLinks:
|
headLinks:
|
||||||
[
|
[
|
||||||
{ anchor: "Contact", attributes: { href:"/contact.html", rel: "nofollow" } },
|
{ anchor: "Contact", attributes: { href:"/contact.html", rel: "nofollow" } },
|
||||||
|
{ anchor: "Mes quizs", attributes: { href:"/mes-quizs.html", rel: "nofollow", title:"Liste des quizs auxquels vous avez déjà répondu." } },
|
||||||
{ anchor: "Parcourir", attributes: { href:"/quizs/", id:"indexHeadLink", title:"Les dernières publications" } },
|
{ anchor: "Parcourir", attributes: { href:"/quizs/", id:"indexHeadLink", title:"Les dernières publications" } },
|
||||||
{ anchor: "À propos", attributes: { href:"/a-propos.html", title:"En savoir + sur WikiLerni" } },
|
{ anchor: "À propos", attributes: { href:"/a-propos.html", title:"En savoir + sur WikiLerni" } },
|
||||||
{ anchor: "Accueil", attributes: { href:"/", title:"Page d'accueil" } }
|
{ anchor: "Accueil", attributes: { href:"/", title:"Page d'accueil" } }
|
||||||
@ -29,8 +30,8 @@ module.exports =
|
|||||||
stopMailPage : "stop-mail.html?t=",
|
stopMailPage : "stop-mail.html?t=",
|
||||||
subscribePage : "inscription.html",
|
subscribePage : "inscription.html",
|
||||||
updateAccountPage: "compte.html",
|
updateAccountPage: "compte.html",
|
||||||
userHomePage : "accueil.html",
|
userHomePage : "mes-quizs.html",
|
||||||
userHomePageTxt : "Ma page d'accueil.",
|
userHomePageTxt : "Tous mes quizs.",
|
||||||
usersManagementPage: "gestion-utilisateurs.html",
|
usersManagementPage: "gestion-utilisateurs.html",
|
||||||
validationLinkPage : "validation.html?t=",
|
validationLinkPage : "validation.html?t=",
|
||||||
/* Textes (général) */
|
/* Textes (général) */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user