// Ici seront injectées dans this.data toutes les données du quiz et du thème pour qu'elles soient disponibles
// dans l'object à tout moment
this.data = data;
+ this.responses = []
+
console.log(this.data);
// ICI tout commence vraiment
console.log(this.data.theme)
$("#quiz").css("background-image","url("+this.data.theme.backgroundImage+")")
- this.animations.load('OK', $("#anim"), {'\\$text': 'Salut :)'});
-
- // La fonction resize est appellée à chaque fois qu'un resize de la fenêtre survient (et à l'init de l'app)
+ // La fonction resize est appelée à chaque fois qu'un resize de la fenêtre survient (et à l'init de l'app)
$(window).on('resize', function () {
$this.quizResize();
});
this.quizResize();
- $(document).on("click", ".next .action", function (){
- $this.next();
- })
-
- key('space', function (e){
- e.preventDefault()
- $this.next();
- })
-
+ //animer le texte d'intro
let title = new SplitType("#welcome h2", { types: 'words, chars' })
let text = new SplitType("#welcome p", { types: 'words, chars' })
-
gsap.from(title.words, {
opacity: 0,
y: 20,
$(title.elements).removeClass("none")
}
})
-
gsap.to(text.words, {
opacity: 1,
y: 0,
$(text.elements).removeClass("none")
}
})
+
+ // Préparer les réponses du joueur dans l'objet this.responses
+ $(document).on("change", ".active-screen form", function(e) {
+ $this.responses = []
+ $(this).find("input:checked").each(function() {
+ $this.responses.push(parseInt($(this).val()))
+ });
+ })
+
+ // Passer à la page suivante
+ // Valider les réponses
+ $(document).on("click", ".next .action", function () {
+ let responses = $this.responses
+ $this.validateResponse(responses);
+ $this.next();
+ })
+ key('space', function (e){
+ e.preventDefault()
+ $this.next();
+ })
+
+ // Réinitialiser les réponses
+ $(document).on("click", ".btn.reset", function() {
+ $this.resetForm()
+ })
+ key('r', function (e){
+ e.preventDefault()
+ $this.resetForm()
+ })
},
updateIcons: function () {
$(this).append(icon);
}
});
-
},
quizResize: function () {
},
next: function () {
- const $el = $(".next .action")
- $el.parents(".container-screen").addClass("none").removeClass("next").next(".container-screen").removeClass("none").addClass("next")
+ const $el = $(".active-screen .btn.action")
+ const form = $(".active-screen form")
+ // if form exist and responses are validated
+ // dont miss to add this second condition
+ if(form.length > 0) {
+ return false
+ }
+ $el.parents(".container-screen").addClass("none").removeClass("next active-screen").next(".container-screen").removeClass("none").addClass("next active-screen")
+ this.resetForm()
},
setDisplay: function() {
}
}
+ },
+
+ resetForm: () => {
+ $("form").find("input").prop("checked", false)
+ },
+
+ validateResponse: function(responses) {
+ const form = $(".active-screen form")
+ const activeScreen = $(".active-screen")
+ const position = activeScreen.data("position")
+
+ if(form) {
+ if(form.length > 0) {
+ let validated = quiz.score.setAnswer(position,responses);
+ if(validated.ok === "ok") {
+ this.animationValidation("OK")
+ }else {
+ this.animationValidation("NOK")
+ }
+ return false
+ }
+ return false
+ }
+ },
+
+ animationValidation: function(status) {
+ let selector = $("#anim")
+ this.animations.load(status, selector, {'\\$text': 'Salut :)'});
+ selector.addClass("active")
+ setTimeout(function(){
+ selector.removeClass("active")
+ selector.empty()
+ }, 10000)
}
}
for (let answerIndex in question.answers) {
answerIndex = parseInt(answerIndex);
const answer = question.answers[answerIndex];
+
let checkedByUser = userAnswers.indexOf(answerIndex) >= 0;
- if (answer.correct === 1) {
+ if (parseInt(answer.correct) === 1) {
if (checkedByUser) {
// C'est une bonne réponse et elle a été cochée par l'utilisateur
this_score += answer.score;
// C'est une mauvaise réponse et elle a été cochée par l'utilisateur
this_score -= answer.score;
answersStatus[answerIndex] = 'nok';
-
} else {
// C'est une bonne réponse et elle n'a pas été cochée par l'utilisateur
answersStatus[answerIndex] = 'neutral';
<div class="container-screen none" data-position="{{$position}}">
@include('quizv2.header_question', ['data' => $data, 'max' => $max, 'position' => $position])
- <form class="screen question-multiple">
- <ul class="list">
- @foreach($data['answers'] as $key => $answer)
- @dump($answer)
- <li class="list-item">
- <input type="checkbox" id="question-{{$key}}" class="none" value="">
- <label for="question-{{$key}}">
- <span class="relative">{{$answer['answer']}}</span>
- <span class="access">{{$alphabet[$key]}}</span>
- </label>
- </li>
- @endforeach
- </ul>
- </form>
+ <div class="screen question-multiple">
+ <form id="form-{{$position}}">
+ <ul class="list">
+ @foreach($data['answers'] as $key => $answer)
+ <li class="list-item">
+ <input type="{{ $data['type'] === "multiple" ? 'checkbox' : 'radio' }}" name="{{ $data['type'] === "multiple" ? 'answer-'.$position.$key : 'answer' }}" id="question-{{$position.$key}}" class="none" value="{{$key}}">
+ <label for="question-{{$position.$key}}">
+ <span class="relative">{{$answer['answer']}}</span>
+ <span class="access">{{$alphabet[$key]}}</span>
+ </label>
+ </li>
+ @endforeach
+ </ul>
+ </form>
+ </div>
<div class="screen-image">
</div>
@include('quizv2.footer', ['data' => $data, 'reset' => true, 'text' => 'Validate answer', 'info' => true])