您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 

284 行
8.2 KiB

  1. /*******************************************************************************
  2. Toutes les fonctions liées à la frappe, erreurs, curseurs…
  3. *******************************************************************************/
  4. la_couleur_du_curseur = "#7cfc00";
  5. //cette fonction compare le texte tapé à « le_texte »
  6. var val=""; //c'est le contenu du champ texte
  7. var val_temp=""; //le texte juste avant pour l'anti-correction
  8. var txt_frap = new Array; // on stock dans ce tableau les différentes lignes de texte que l'on vient de taper
  9. var recommencer = false;
  10. var nb_err = 0;
  11. var nb_recom = 0; // nombre de fois qu'on a recommencé la ligne
  12. var nb_tentatives_recom = 3 // nombre de tentatives par ligne avant de passer à la suivante et de repasser la ligne manquée à la fin de l'exercice
  13. function test(e)
  14. {
  15. // entrer retourne le code 13
  16. var touche = window.event ? e.keyCode : e.which;
  17. //if (touche == 32)
  18. //nb_sp++;
  19. //alert(touche)
  20. if (touche == 16 || touche == 225 || touche == 17 || touche == 18 || touche == 27 || touche == 9 || touche == 20 || touche == 91 || touche == 93 || (touche >=112 && touche <=123) ) // shift || ctrl || alt || échap || tab || caps-lock || super || menu || F1 à F12
  21. return;
  22. if (touche == 13 && recommencer == false && val.length <le_texte[l-1].length)
  23. return;
  24. if (touche == 8 && anti_correct) // anti correction
  25. {
  26. document.getElementById("txt").value = val_temp;
  27. return;
  28. }
  29. val = document.getElementById("txt").value; //le texte qu'on tape
  30. if (val.substr(val.length-1,1) != le_texte[l-1].substr(val.length-1,1) && val.length-1 != le_texte[l-1].length && val.length != 0)
  31. {
  32. document.getElementById("txt").style.backgroundColor = "#ffbbbb";
  33. col_cur = "red";
  34. if (recommencer == false)
  35. nb_err++;
  36. recommencer = true;
  37. document.getElementById("resultats").innerHTML = '<strong style="color:red">Faites Entrée ou terminez la ligne pour la recommencer sans faute ('+(nb_recom+1)+'/'+nb_tentatives_recom+').</strong>';
  38. }
  39. if (touche == 13 || val.length >= le_texte[l-1].length+1)
  40. {
  41. if (val.substr(val.length-1,1) == " ")
  42. val = val.substr(0,val.length-1);
  43. txt_frap[l-1] = val;
  44. document.getElementById("txt").value = "";
  45. ligne_suivante();
  46. val_temp="";
  47. return;
  48. }
  49. color_car();
  50. val_temp=val;
  51. }
  52. function next(e)
  53. {
  54. var touche = window.event ? e.keyCode : e.which;
  55. val = document.getElementById("txt").value; //le texte qu'on tape
  56. if (le_texte[l-1].substr(val.length,1) == " " && touche != 8 && touche != 13) // si c'est une espace qui est prévue et si c'est pas un retour un arrière car un cas de retour vu qu'on remet le car si c'est une esapace, ça fait qu'on passe au mot suivant
  57. color_mot("next");
  58. if (le_texte[l-1].substr(val.length-1,1) == " " && touche == 8)
  59. color_mot("prev");
  60. }
  61. function live_var()
  62. {
  63. var content = "";
  64. content = "l="+l+" ; recommencer="+recommencer+" ; nb_recom="+nb_recom+"<br/>";
  65. content += "le_texte.length="+le_texte.length+"<br/>";
  66. for (var i=0 ; i < le_texte.length ; i++)
  67. content += le_texte[i]+"<br/>";
  68. document.getElementById("resultats").innerHTML = content;
  69. }
  70. nbspace = true;
  71. function nbsp_mode()
  72. {
  73. if (nbspace == false)
  74. {
  75. return le_texte.replace("/ /"," ");
  76. }
  77. }
  78. // pour passer à la ligne suivante de la leçon
  79. var l = 0;
  80. function ligne_suivante(reload)
  81. {
  82. if(reload)
  83. l--;
  84. col_cur = la_couleur_du_curseur;
  85. document.getElementById("txt").style.backgroundColor = "inherit";
  86. if (recommencer == true && nb_recom < (nb_tentatives_recom-1))
  87. {
  88. l--;
  89. nb_recom++;
  90. }
  91. else if (recommencer == true && nb_recom >= (nb_tentatives_recom-1) )
  92. {
  93. if (le_texte[l-1])
  94. le_texte[le_texte.length] = le_texte[l-1];
  95. nb_recom = 0;
  96. }
  97. //else if (recommencer == false && nb_recom < (nb_tentatives_recom-1))
  98. else if (recommencer == false)
  99. {
  100. nb_recom = 0;
  101. }
  102. if (mode_jeu == true)
  103. {
  104. if (recommencer == true)
  105. vies--;
  106. else
  107. vies++;
  108. document.getElementById("nb_vies").innerHTML = make_heart();
  109. if (vies == 0)
  110. {
  111. document.getElementById("rd_txt").innerHTML = "";
  112. document.getElementById("resultats").innerHTML = "<strong>Game Over</strong>";
  113. return;
  114. }
  115. }
  116. document.getElementById("resultats").innerHTML = "";
  117. if (conseil[exo_en_cours] != 0)
  118. document.getElementById("resultats").innerHTML = "<strong>Conseil</strong> : "+conseils[conseil[exo_en_cours]];
  119. //alert(le_texte.length);
  120. if (l == le_texte.length)
  121. {
  122. l=0;
  123. aff_result();
  124. }
  125. else
  126. {
  127. var col_ligne = new Array("inherit","#bbbbbb","#d4d4d4","#eeeeee");
  128. var mark_ligne = new Array(">> ","   ","   ","   ");
  129. var txt="";
  130. document.getElementById("rd_txt").innerHTML = "";
  131. var ligne_tab = new Array();
  132. for (var i=0 ; i<4 ; i++)
  133. {
  134. if (l+i < le_texte.length)// il faut qu'il reste des lignes
  135. {
  136. if (i==0) // première ligne pour avoir le curseur
  137. {
  138. //on découpe le tout pour le reconstituer ensuite avec des span identifiant chaque mot (pour le curseur)
  139. var reg = new RegExp("","g");
  140. var ligne_tmp = le_texte[l+i].split(reg);
  141. for (var j=0 ; j<ligne_tmp.length ; j++)
  142. {
  143. if (ligne_tmp[j] == " ") // si c'est une espace insécable
  144. {
  145. if(nbspace == true)
  146. ligne_tmp[j] = '<span id="car_'+j+'">␣</span>';
  147. else
  148. ligne_tmp[j] = '<span id="car_'+j+'"> </span>';
  149. }
  150. else
  151. ligne_tmp[j] = '<span id="car_'+j+'">'+ligne_tmp[j]+'</span>';
  152. }
  153. txt=ligne_tmp.join("")+'<span id="car_'+j+'"> </span>';
  154. //alert(txt);
  155. }
  156. else
  157. {
  158. txt=le_texte[l+i];
  159. }
  160. //alert(txt);
  161. ligne_tab[i] = '<span style="color:'+col_ligne[i]+'">'+mark_ligne[i]+txt+'</span><br/>';
  162. }
  163. }
  164. l++;
  165. }
  166. document.getElementById("rd_txt").innerHTML = ligne_tab.join("");
  167. recommencer = false;
  168. color_car("init");
  169. //live_var();
  170. //document.getElementById("resultats").innerHTML = "l="+l+"<br/>"+le_texte[l-1];
  171. }
  172. function val_curseur(a)
  173. {
  174. if(a)
  175. {
  176. col_cur = la_couleur_du_curseur;
  177. cur_checked = "checked";
  178. }
  179. else
  180. {
  181. col_cur = "inherit";
  182. cur_checked = "";
  183. }
  184. //color_mot();
  185. color_car();
  186. }
  187. var anti_correct = false;
  188. function val_anti_correct(a)
  189. {
  190. anti_correct = false;
  191. if (a == true || a == "init")
  192. anti_correct = true;
  193. if (anti_correct)
  194. document.getElementById("anti_correct").checked = "checked";
  195. else
  196. document.getElementById("anti_correct").checked = "";
  197. }
  198. var colw = 0;
  199. var col_cur = la_couleur_du_curseur; // couleur du curseur
  200. function color_car(a)
  201. {
  202. if (a == "init")
  203. colw = 0;
  204. else
  205. colw = document.getElementById("txt").value.length;
  206. for (var i = 0 ; i < le_texte[l-1].length ; i++)
  207. {
  208. if (document.getElementById("car_"+i))
  209. document.getElementById("car_"+(i)).style.backgroundColor = "inherit";
  210. }
  211. if (document.getElementById("car_"+colw))
  212. document.getElementById("car_"+colw).style.backgroundColor = col_cur;
  213. }
  214. function aff_result() // replacer les undefined par des espaces insécables (pour l'affichage)
  215. {
  216. var txt="";
  217. if(nb_err > 5)
  218. txt = " Il semblerait que vous ne maîtrisez pas encore totalement cet exercice, vous pouvez le recommencer si vous le souhaitez.";
  219. if (nb_err == 0)
  220. document.getElementById("resultats").innerHTML = "Félicitations ! Vous n'avez fait aucune erreur !";
  221. else if (nb_err < 2)
  222. document.getElementById("resultats").innerHTML = "Vous avez fait "+nb_err+" erreur.";
  223. else
  224. document.getElementById("resultats").innerHTML = "Vous avez fait "+nb_err+" erreurs."+txt;
  225. document.getElementById("rd_txt").innerHTML = "";
  226. nb_err = 0;
  227. txt_frap = new Array(); // ré-init variable
  228. }