quiz_imapsync.js 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. // Taken from https://code-boxx.com/simple-javascript-quiz
  2. var quiz = {
  3. // (A) PROPERTIES
  4. // (A1) QUESTIONS & ANSWERS
  5. // Q = QUESTION, O = OPTIONS, A = CORRECT ANSWER
  6. data: [
  7. {
  8. a : 1,
  9. o : [
  10. "Facebook",
  11. "POP, IMAP, HTTP",
  12. "SMTP, ICQ",
  13. "Twitter",
  14. "FTP, GOPHER",
  15. "Instagram"
  16. ],
  17. q : "What are the main protocols usually used to access a mailbox?"
  18. },
  19. {
  20. a : 2,
  21. o : [
  22. "I'M A Passager",
  23. "Instant Mailbox Access Possibility",
  24. "Internet Message Access Protocol",
  25. "In My Ambiguous Posture",
  26. "In My Ambience Place",
  27. "Izorc Muggle Ark Prout"
  28. ],
  29. q : "What means the acronym IMAP?"
  30. },
  31. {
  32. a : 2,
  33. o : [
  34. "No parameter is needed",
  35. "Harry Potter's magic wang",
  36. "1) The IMAP server name + 2) the user login + 3) the password",
  37. "1) the user login + 2) the password"
  38. ],
  39. q : "What are the parameters needed to access an IMAP mailbox?"
  40. },
  41. {
  42. a : 4,
  43. o : [
  44. "0",
  45. "2",
  46. "3",
  47. "4",
  48. "6",
  49. "8"
  50. ],
  51. q : "How many parameters are mandatory to synchronize two IMAP mailboxes with imapsync?"
  52. },
  53. {
  54. a : 0,
  55. o : [
  56. "No",
  57. "Yes"
  58. ],
  59. q : "Can Imapsync synchronize POP accounts?"
  60. },
  61. {
  62. a : 1,
  63. o : [
  64. "No",
  65. "Yes"
  66. ],
  67. q : "Can Imapsync synchronize Gmail accounts?"
  68. },
  69. {
  70. a : 1,
  71. o : [
  72. "No",
  73. "Yes"
  74. ],
  75. q : "Can Imapsync synchronize Office365 accounts?"
  76. },
  77. {
  78. a : 0,
  79. o : [
  80. "No",
  81. "Yes"
  82. ],
  83. q : "Can Imapsync synchronize Contacts, Calendars, Chats, or Notes?"
  84. },
  85. {
  86. a : 0,
  87. o : [
  88. "NO LIMIT",
  89. "GPL",
  90. "WTFPL",
  91. "MIT",
  92. "CC0",
  93. "Proprietary"
  94. ],
  95. q : "What is the Imapsync License name?"
  96. },
  97. {
  98. a : 0,
  99. o : [
  100. "No limits to do anything with this work and this license.",
  101. "All permissions restricted.",
  102. "Use it for good or evil.",
  103. "Too long to fit here."
  104. ],
  105. q : "What is the Imapsync License main text?"
  106. },
  107. {
  108. a : 0,
  109. o : [
  110. "Yes, sometimes with delay, he's a human",
  111. "No, never, email is dead",
  112. "Yes, immediately and 24h/24, he's a robot",
  113. "What is email?"
  114. ],
  115. q : "Does the imapsync author Gilles LAMIRAL reply to every email?"
  116. }
  117. ],
  118. dataDev: [
  119. {
  120. a : 1,
  121. o : [
  122. "Facebook",
  123. "POP, IMAP, HTTP",
  124. "SMTP, ICQ",
  125. "Twitter",
  126. "FTP, GOPHER",
  127. "Instagram"
  128. ],
  129. q : "What are the main protocols usually used to access a mailbox?"
  130. }
  131. ],
  132. // (B) INIT QUIZ HTML
  133. init: function(){
  134. // (B1) WRAPPER
  135. quiz.hWrap = null;
  136. quiz.hScore = null;
  137. quiz.hRestart = null;
  138. quiz.hQn = null;
  139. quiz.hAns = null;
  140. quiz.now = 0;
  141. quiz.score = 0;
  142. quiz.hWrap = document.getElementById("quizWrap");
  143. quiz.hWrap.innerHTML = "";
  144. // NUMBER SECTION
  145. quiz.hNumber = document.createElement("div");
  146. quiz.hNumber.id = "quizNumber";
  147. quiz.hWrap.appendChild(quiz.hNumber);
  148. // (B2) QUESTIONS SECTION
  149. quiz.hQn = document.createElement("div");
  150. quiz.hQn.id = "quizQn";
  151. quiz.hWrap.appendChild(quiz.hQn);
  152. // (B3) ANSWERS SECTION
  153. quiz.hAns = document.createElement("div");
  154. quiz.hAns.id = "quizAns";
  155. quiz.hWrap.appendChild(quiz.hAns);
  156. // SCORE SECTION
  157. quiz.hScore = document.createElement("div");
  158. quiz.hScore.id = "quizScore";
  159. quiz.hWrap.appendChild(quiz.hScore);
  160. // RESTART SECTION
  161. quiz.hRestart = document.createElement("div");
  162. quiz.hRestart.id = "quizRestart";
  163. quiz.hWrap.appendChild(quiz.hRestart);
  164. quiz.hRestart.innerHTML = "Restart Quiz";
  165. document.getElementById("quizRestart").addEventListener("click", quiz.restart);
  166. // (B4) GO!
  167. quiz.draw();
  168. },
  169. // (C) DRAW QUESTION
  170. draw: function(){
  171. // SCORE
  172. var QnNumber = `${quiz.now + 1}/${quiz.data.length}`;
  173. var ScoreNb = `${quiz.score}/${quiz.now}`;
  174. quiz.hNumber.innerHTML = `Question ${QnNumber}`;
  175. quiz.hScore.innerHTML = `Score ${ScoreNb}`;
  176. // (C1) QUESTION
  177. quiz.hQn.innerHTML = quiz.data[quiz.now].q;
  178. // (C2) OPTIONS
  179. quiz.hAns.innerHTML = "";
  180. for (let i in quiz.data[quiz.now].o) {
  181. let radio = document.createElement("input");
  182. radio.type = "radio";
  183. radio.name = "quiz";
  184. radio.id = "quizo" + i;
  185. quiz.hAns.appendChild(radio);
  186. let label = document.createElement("label");
  187. label.innerHTML = quiz.data[quiz.now].o[i];
  188. label.setAttribute("for", "quizo" + i);
  189. label.dataset.idx = i;
  190. label.addEventListener("click", quiz.select);
  191. quiz.hAns.appendChild(label);
  192. }
  193. },
  194. // (D) OPTION SELECTED
  195. select: function(){
  196. // (D1) DETACH ALL ONCLICK
  197. let all = quiz.hAns.getElementsByTagName("label");
  198. for (let label of all) {
  199. label.removeEventListener("click", quiz.select);
  200. }
  201. // (D2) CHECK IF CORRECT
  202. let correct = this.dataset.idx == quiz.data[quiz.now].a;
  203. if (correct) {
  204. quiz.score++;
  205. this.classList.add("correct");
  206. } else {
  207. this.classList.add("wrong");
  208. }
  209. // (D3) NEXT QUESTION OR END GAME
  210. quiz.now++;
  211. setTimeout(function(){
  212. if (quiz.now < quiz.data.length) { quiz.draw(); }
  213. else {
  214. // quiz.hNumber.innerHTML = "";
  215. ScoreNb = `${quiz.score}/${quiz.now}`;
  216. quiz.hScore.innerHTML = `Score ${ScoreNb}`;
  217. quiz.hQn.innerHTML = "Finished!";
  218. quiz.hAns.innerHTML = "";
  219. }
  220. }, 800);
  221. },
  222. restart:function(){
  223. quiz.init() ;
  224. }
  225. };
  226. window.addEventListener("load", quiz.init);