1import { Controller } from "@hotwired/stimulus" 2 3export default class extends Controller { 4 static targets = [ "answer", "userInput", "corrigerBtn" ] 5 6 validateTriviaAnswer() { 7 var answer = this.answerTarget; 8 var answerContainer = answer.parentNode; 9 var questionContainer = answerContainer.parentNode; 10 questionContainer.classList.add("answered"); 11 var blitzStreak = questionContainer.getElementsByClassName("blitz-score-value")[0].innerText; 12 answer.classList.add("selected"); 13 14 if(questionContainer.getElementsByClassName("quiz-continue-btn").length > 0) { 15 var continueBtn = questionContainer.getElementsByClassName("quiz-continue-btn")[0]; 16 continueBtn.classList.add("quiz-continue-btn-active"); 17 continueBtn.classList.remove("quiz-continue-btn"); 18 19 var resultContainer = questionContainer.getElementsByClassName("qa-result")[0]; 20 resultContainer.style.display = "block"; 21 22 if (answer.getAttribute("data-right") == "true") { 23 answer.classList.add("true"); 24 resultContainer.classList.remove("false"); 25 resultContainer.classList.add("true"); 26 27 let p = document.createElement('p'); 28 p.innerHTML = "Vrai ! " + unEscape(answer.getAttribute("data-explanation")); 29 30 resultContainer.prepend(p); 31 } else { 32 falseAnswer(resultContainer, answer, blitzStreak); 33 } 34 } 35 } 36 37 validateFillAnswer() { 38 var answer = this.answerTarget; 39 var questionContainer = answer.parentNode.parentNode.parentNode; 40 questionContainer.classList.add("answered"); 41 var blitzStreak = questionContainer.getElementsByClassName("blitz-score-value")[0].innerText; 42 var resultContainer = questionContainer.getElementsByClassName("qa-result")[0]; 43 resultContainer.style.display = "block"; 44 if(questionContainer.getElementsByClassName("quiz-continue-btn").length > 0) { 45 var continueBtn = questionContainer.getElementsByClassName("quiz-continue-btn")[0]; 46 continueBtn.classList.add("quiz-continue-btn-active"); 47 continueBtn.classList.remove("quiz-continue-btn"); 48 this.corrigerBtnTarget.style.display = "none"; 49 50 var check = false; 51 JSON.parse(answer.getAttribute("data-right-answer")).forEach(function(item) { 52 if (item.toLowerCase().replace("â", "'") == answer.value.toLowerCase().replace("â", "'").trim()) { 53 check = true; 54 } 55 }); 56 57 if (check == true) { 58 resultContainer.classList.add("true"); 59 let p = document.createElement('p'); 60 p.innerHTML = "Vrai ! " + unEscape(answer.getAttribute("data-explanation")); 61 62 resultContainer.prepend(p); 63 } else { 64 falseAnswer(resultContainer, answer, blitzStreak); 65 } 66 } 67 } 68} 69 70function falseAnswer(resultContainer, answer, blitzStreak) { 71 answer.classList.add("false"); 72 var answerContainer = answer.parentNode; 73 answerContainer.querySelectorAll("[data-right='true']").forEach(rightAnswers); 74 resultContainer.classList.remove("true"); 75 resultContainer.classList.add("false"); 76 let p = document.createElement('p'); 77 p.innerHTML = "Faux ! " + unEscape(answer.getAttribute("data-explanation")); 78 resultContainer.prepend(p); 79 80 saveScore(blitzStreak); 81 82 // we display the results and stop the quiz streak 83 displayBlitzResult(blitzStreak); 84} 85 86function rightAnswers(item) { 87 item.classList.add("true"); 88} 89 90function unEscape(htmlStr) { 91 htmlStr = htmlStr.replace(/</g , "<"); 92 htmlStr = htmlStr.replace(/>/g , ">"); 93 htmlStr = htmlStr.replace(/"/g , "\""); 94 htmlStr = htmlStr.replace(/'/g , "\'"); 95 htmlStr = htmlStr.replace(/&/g , "&"); 96 return htmlStr; 97} 98 99function displayBlitzResult(blitzStreak) { 100 var continueBtns = document.getElementsByClassName("cta-quiz"); 101 Array.from(continueBtns).forEach(function(item) { 102 item.style.display = "none"; 103 }); 104 var quizResultContainer = document.getElementById("quiz-result-container"); 105 quizResultContainer.classList.add("result-active"); 106 var current_url = quizResultContainer.getAttribute("data-url"); 107 var twitter_text = "https://x.com/intent/tweet?url=" + current_url + "&via=LLfrancaise&text=J'ai réalisé une série de " + blitzStreak + " bonnes réponses au jeu du blitz orthographe, et vous ?"; 108 if (blitzStreak == "0") { 109 var resultText = "0 bonne réponse"; 110 } else if (blitzStreak == "1") { 111 var resultText = "1 bonne réponse"; 112 } else { 113 var resultText = blitzStreak + " bonnes réponses"; 114 } 115 116 document.getElementById("blitz_streak_result").innerText = resultText; 117 document.getElementById("twitter_sharing_quiz").setAttribute("href", twitter_text); 118} 119 120function saveScore(blitzStreak) { 121 const csrfToken = document.querySelector('meta[name="csrf-token"]').getAttribute('content'); 122 123 fetch('/save_conjugaison_blitz_score', { 124 method: 'POST', 125 headers: { 126 'Content-Type': 'application/json', 127 'X-CSRF-Token': csrfToken 128 }, 129 body: JSON.stringify({ 130 streak: blitzStreak 131 }) 132 }) 133 .then(response => { 134 if (!response.ok) { 135 throw new Error('Network response was not ok'); 136 } 137 return response.json(); 138 }) 139 .then(data => { 140 if (data) { 141 console.log("Streak sauvegardé"); 142 document.getElementById("quiz_score_individual").innerHTML = data.value; 143 } else { 144 console.log("Streak non sauvegardé"); 145 } 146 }) 147 .catch(error => { 148 console.log("Ajax error!", error); 149 }); 150};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.