mirror of
https://github.com/imapsync/imapsync.git
synced 2025-06-06 04:37:18 +02:00
245 lines
No EOL
5.7 KiB
JavaScript
Executable file
245 lines
No EOL
5.7 KiB
JavaScript
Executable file
|
|
// Taken from https://code-boxx.com/simple-javascript-quiz
|
|
|
|
var quiz = {
|
|
// (A) PROPERTIES
|
|
// (A1) QUESTIONS & ANSWERS
|
|
// Q = QUESTION, O = OPTIONS, A = CORRECT ANSWER
|
|
|
|
data: [
|
|
{
|
|
a : 1,
|
|
o : [
|
|
"Facebook",
|
|
"POP, IMAP, HTTP",
|
|
"SMTP, ICQ",
|
|
"Twitter",
|
|
"FTP, GOPHER",
|
|
"Instagram"
|
|
],
|
|
q : "What are the main protocols usually used to access a mailbox?"
|
|
},
|
|
{
|
|
a : 2,
|
|
o : [
|
|
"I'M A Passager",
|
|
"Instant Mailbox Access Possibility",
|
|
"Internet Message Access Protocol",
|
|
"In My Ambiguous Posture",
|
|
"In My Ambience Place",
|
|
"Izorc Muggle Ark Prout"
|
|
],
|
|
q : "What means the acronym IMAP?"
|
|
},
|
|
{
|
|
a : 2,
|
|
o : [
|
|
"No parameter is needed",
|
|
"Harry Potter's magic wang",
|
|
"1) The IMAP server name + 2) the user login + 3) the password",
|
|
"1) the user login + 2) the password"
|
|
],
|
|
q : "What are the parameters needed to access an IMAP mailbox?"
|
|
},
|
|
{
|
|
a : 4,
|
|
o : [
|
|
"0",
|
|
"2",
|
|
"3",
|
|
"4",
|
|
"6",
|
|
"8"
|
|
],
|
|
q : "How many parameters are mandatory to synchronize two IMAP mailboxes with imapsync?"
|
|
},
|
|
{
|
|
a : 0,
|
|
o : [
|
|
"No",
|
|
"Yes"
|
|
],
|
|
q : "Can Imapsync synchronize POP accounts?"
|
|
},
|
|
{
|
|
a : 1,
|
|
o : [
|
|
"No",
|
|
"Yes"
|
|
],
|
|
q : "Can Imapsync synchronize Gmail accounts?"
|
|
},
|
|
{
|
|
a : 1,
|
|
o : [
|
|
"No",
|
|
"Yes"
|
|
],
|
|
q : "Can Imapsync synchronize Office365 accounts?"
|
|
},
|
|
{
|
|
a : 0,
|
|
o : [
|
|
"No",
|
|
"Yes"
|
|
],
|
|
q : "Can Imapsync synchronize Contacts, Calendars, Chats, or Notes?"
|
|
},
|
|
{
|
|
a : 0,
|
|
o : [
|
|
"NO LIMIT",
|
|
"GPL",
|
|
"WTFPL",
|
|
"MIT",
|
|
"CC0",
|
|
"Proprietary"
|
|
],
|
|
q : "What is the Imapsync License name?"
|
|
},
|
|
{
|
|
a : 0,
|
|
o : [
|
|
"No limits to do anything with this work and this license.",
|
|
"All permissions restricted.",
|
|
"Use it for good or evil.",
|
|
"Too long to fit here."
|
|
],
|
|
q : "What is the Imapsync License main text?"
|
|
},
|
|
{
|
|
a : 0,
|
|
o : [
|
|
"Yes, sometimes with delay, he's a human",
|
|
"No, never, email is dead",
|
|
"Yes, immediately and 24h/24, he's a robot",
|
|
"What is email?"
|
|
],
|
|
q : "Does the imapsync author Gilles LAMIRAL reply to every email?"
|
|
}
|
|
],
|
|
dataDev: [
|
|
{
|
|
a : 1,
|
|
o : [
|
|
"Facebook",
|
|
"POP, IMAP, HTTP",
|
|
"SMTP, ICQ",
|
|
"Twitter",
|
|
"FTP, GOPHER",
|
|
"Instagram"
|
|
],
|
|
q : "What are the main protocols usually used to access a mailbox?"
|
|
}
|
|
],
|
|
|
|
// (B) INIT QUIZ HTML
|
|
init: function(){
|
|
// (B1) WRAPPER
|
|
quiz.hWrap = null;
|
|
quiz.hScore = null;
|
|
quiz.hRestart = null;
|
|
quiz.hQn = null;
|
|
quiz.hAns = null;
|
|
quiz.now = 0;
|
|
quiz.score = 0;
|
|
|
|
quiz.hWrap = document.getElementById("quizWrap");
|
|
quiz.hWrap.innerHTML = "";
|
|
|
|
// NUMBER SECTION
|
|
quiz.hNumber = document.createElement("div");
|
|
quiz.hNumber.id = "quizNumber";
|
|
quiz.hWrap.appendChild(quiz.hNumber);
|
|
|
|
// (B2) QUESTIONS SECTION
|
|
quiz.hQn = document.createElement("div");
|
|
quiz.hQn.id = "quizQn";
|
|
quiz.hWrap.appendChild(quiz.hQn);
|
|
|
|
// (B3) ANSWERS SECTION
|
|
quiz.hAns = document.createElement("div");
|
|
quiz.hAns.id = "quizAns";
|
|
quiz.hWrap.appendChild(quiz.hAns);
|
|
|
|
// SCORE SECTION
|
|
quiz.hScore = document.createElement("div");
|
|
quiz.hScore.id = "quizScore";
|
|
quiz.hWrap.appendChild(quiz.hScore);
|
|
|
|
// RESTART SECTION
|
|
quiz.hRestart = document.createElement("div");
|
|
quiz.hRestart.id = "quizRestart";
|
|
quiz.hWrap.appendChild(quiz.hRestart);
|
|
quiz.hRestart.innerHTML = "Restart Quiz";
|
|
document.getElementById("quizRestart").addEventListener("click", quiz.restart);
|
|
// (B4) GO!
|
|
quiz.draw();
|
|
},
|
|
|
|
// (C) DRAW QUESTION
|
|
draw: function(){
|
|
// SCORE
|
|
var QnNumber = `${quiz.now + 1}/${quiz.data.length}`;
|
|
var ScoreNb = `${quiz.score}/${quiz.now}`;
|
|
|
|
quiz.hNumber.innerHTML = `Question ${QnNumber}`;
|
|
quiz.hScore.innerHTML = `Score ${ScoreNb}`;
|
|
|
|
// (C1) QUESTION
|
|
quiz.hQn.innerHTML = quiz.data[quiz.now].q;
|
|
|
|
// (C2) OPTIONS
|
|
quiz.hAns.innerHTML = "";
|
|
for (let i in quiz.data[quiz.now].o) {
|
|
let radio = document.createElement("input");
|
|
radio.type = "radio";
|
|
radio.name = "quiz";
|
|
radio.id = "quizo" + i;
|
|
quiz.hAns.appendChild(radio);
|
|
let label = document.createElement("label");
|
|
label.innerHTML = quiz.data[quiz.now].o[i];
|
|
label.setAttribute("for", "quizo" + i);
|
|
label.dataset.idx = i;
|
|
label.addEventListener("click", quiz.select);
|
|
quiz.hAns.appendChild(label);
|
|
}
|
|
},
|
|
|
|
// (D) OPTION SELECTED
|
|
select: function(){
|
|
// (D1) DETACH ALL ONCLICK
|
|
let all = quiz.hAns.getElementsByTagName("label");
|
|
for (let label of all) {
|
|
label.removeEventListener("click", quiz.select);
|
|
}
|
|
|
|
// (D2) CHECK IF CORRECT
|
|
let correct = this.dataset.idx == quiz.data[quiz.now].a;
|
|
if (correct) {
|
|
quiz.score++;
|
|
this.classList.add("correct");
|
|
} else {
|
|
this.classList.add("wrong");
|
|
}
|
|
|
|
// (D3) NEXT QUESTION OR END GAME
|
|
quiz.now++;
|
|
setTimeout(function(){
|
|
if (quiz.now < quiz.data.length) { quiz.draw(); }
|
|
else {
|
|
// quiz.hNumber.innerHTML = "";
|
|
ScoreNb = `${quiz.score}/${quiz.now}`;
|
|
quiz.hScore.innerHTML = `Score ${ScoreNb}`;
|
|
quiz.hQn.innerHTML = "Finished!";
|
|
quiz.hAns.innerHTML = "";
|
|
}
|
|
}, 800);
|
|
},
|
|
|
|
restart:function(){
|
|
quiz.init() ;
|
|
}
|
|
};
|
|
|
|
window.addEventListener("load", quiz.init); |