PageSourceSearch

https://www.lalanguefrancaise.com/assets/controllers/quizConjugais…750c2b45f7fcf807d2d659d669dad88fc0150090.js

js lalanguefrancaise.com collected 2026-09-24 09:33:46 UTC 5,200 bytes, 150 lines download raw bytes

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(/&lt;/g , "<");	 
92	htmlStr = htmlStr.replace(/&gt;/g , ">");     
93	htmlStr = htmlStr.replace(/&quot;/g , "\"");  
94	htmlStr = htmlStr.replace(/&#39;/g , "\'");   
95	htmlStr = htmlStr.replace(/&amp;/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.