import $ from "cash-dom";
import gsap from "gsap";
+import { MotionPathPlugin } from "gsap/MotionPathPlugin.js";
import {CubeSCORM} from '/application/resources/scorm/scorm';
import lottie from "lottie-web";
import QuizAnimations from "./quiz.animations";
import QuizScore from './quiz.score';
import QuizScorm from './quiz.scorm';
+import QuizQuestion from './quiz.question';
window.cubeSCORM = new CubeSCORM();
window.$ = window.jQuery = $;
this.score=new QuizScore(this);
this.scorm=new QuizScorm(this);
this.resize = new QuizResize(this);
+ this.question = new QuizQuestion(this);
// 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
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 :)'});
$this.quizResize();
});
this.quizResize();
+
+ $(document).on("click", ".next .action", function (){
+ $this.next();
+ })
+
+ key('space', function (e){
+ e.preventDefault()
+ $this.next();
+ })
+
+ console.log(quiz.score)
},
updateIcons: function () {
this.updateIcons();
this.resize.resize();
},
+
+ next: function () {
+ const $el = $(".next .action")
+ $el.parents(".container-screen").addClass("none").removeClass("next").next(".container-screen").removeClass("none").addClass("next")
+ },
+
+ setDisplay: function() {
+ const currentQuestion = quiz.score.lastAnsweredQuestion + 1,
+ questions = this.quiz.questions
+
+ if(questions.length > 0) {
+ if (quiz.score.lastAnsweredQuestion > -1 && questions.length <= currentQuestion) {
+
+ }
+ }
+ }
}
$(function () {
--- /dev/null
+var QuizQuestion = function(quiz) {
+ this.quiz = quiz;
+ this.init();
+}
+
+QuizQuestion.prototype = {
+ init: function(){
+ }
+}
+
+module.exports = QuizQuestion;
@content
-@mixin opacity($opacity)
- opacity: $opacity
- filter: alpha(opacity=($opacity * 100))
+@mixin opacity($rule: background-color)
+ #{$rule}: #{$texts-color}2f
@mixin flex-config($justify-content: false, $flex: false, $flex-direction: false, $align-items: false)
--- /dev/null
+.radius
+ border-radius: 16px
+
+.relative
+ position: relative
+
+.none
+ display: none
+@import 005-utilities
+
body
background-color: $neutral-color
font-family: $font
max-width: 1200px
min-height: 680px
margin: 0 auto
- padding: 0 24px 24px
+ padding: 24px 24px
position: relative
-.radius
- border-radius: 16px
-
.btn
padding: 0 12px
text-align: center
background: radial-gradient(at 16% 6px, rgb(255, 102, 186) -7%, #D0167C 74%)
box-shadow: 0 4px 6px rgba(0,0,0,.2)
&.secondary
- background-color: #{$texts-color}2f
+ +opacity()
padding-left: 22px
&.reset
max-width: 144px
border-radius: 4px
padding: 6px 12px
+font-size(16)
- background-color: #{$texts-color}2f
+ +opacity()
text-transform: uppercase
margin-left: 16px
+
+.screen
+ position: relative
+ z-index: 1
+ &-image
+ position: absolute
+ top: 0
+ left: 0
+ height: 100%
+ width: 100%
+ z-index: 0
+header,
+#footer
+ position: relative
+ z-index: 1
+
#title
height: 80px
+flex-config(space-between,false,row,center)
height: 40px
filter: brightness(10)
+#question
+ text-align: center
+ .abovetitle
+ +font-size(16)
+ .progress-container
+ margin: 6px 0 16px
+ .progress-item
+ width: 16px
+ height: 4px
+ border-radius: 100px
+ +opacity()
+ display: inline-flex
+ &:not(:last-of-type)
+ margin-right: 7px
+ &.active
+ background-color: $texts-color
+ &.error
+ background-color: red
+ &.success
+ background-color: green
+ h1
+ +font-size(24)
+
#footer
position: absolute
bottom: 0
#welcome
max-width: 590px
margin: 0 auto
+ top: 160px
h2
margin: 0 0 12px
+font-size(20)
<span class="access">R</span>
</a>
@endisset
- <a class="btn primary">
- {{$data->intro_button}}
+ <a class="btn primary action">
+ {{$text}}
<span class="access">space</span>
@isset($time)
<span data-icon="running-man"></span>
--- /dev/null
+<header id="question">
+ <p class="abovetitle">{{ __('Question').' '.($position+1).'/'.$max }} </p>
+ <div class="progress-container">
+ @for($i = 0; $i < $max; $i++)
+ <span class="progress-item"></span>
+ @endfor
+ </div>
+ <h1 id="titleQuestion">{{$data['question']}}</h1>
+</header>
</head>
<body>
@include("quizv2.sprite")
+@php($totalQuestion = sizeof($data->questions))
<div class="container">
<div id="quiz">
@if($data->intro_enable)
@include('quizv2.screens.intro', ['data'=> $data])
@endif
+ @foreach($data->questions as $key => $question)
+ @include('quizv2.screens.question_'.$question['type'], ['data'=> $question, 'max' => $totalQuestion, 'position' => $key])
+ @endforeach
</div>
</div>
<div id="anim"></div>
-@include('quizv2.header_title', ['data', $data])
-<div class="screen" id="welcome">
- <h2>{{$data->intro_title}}</h2>
- <p>{{$data->intro_text}}</p>
+@php
+ $absPath = \App\Models\Quiz::find($data->id)->getPreviewURL();
+ $svg = file_get_contents($absPath."_1690797039/".$data->theme->introImage, true);
+@endphp
+<div class="container-screen active-screen next">
+ @include('quizv2.header_title', ['data', $data])
+ <div class="screen" id="welcome">
+ <h2>{{$data->intro_title}}</h2>
+ <p>{{$data->intro_text}}</p>
+ </div>
+ <div class="screen-image">
+ <img src="{{$data->theme->introImage}}">
+ </div>
+ @include('quizv2.footer', ['data' => $data, 'text' => $data->intro_button])
</div>
-@include('quizv2.footer', ['data' => $data])
--- /dev/null
+<div class="container-screen none" data-position="{{$position}}">
+ @include('quizv2.header_question', ['data' => $data, 'max' => $max, 'position' => $position])
+ <div class="screen" id="question_1">
+ <ul>
+ @foreach($data['answers'] as $answer)
+ <li>{{$answer['answer']}}</li>
+ @endforeach
+ </ul>
+ </div>
+ <div class="screen-image">
+ </div>
+ @include('quizv2.footer', ['data' => $data, 'reset' => true, 'text' => 'Validate answer', 'info' => true])
+</div>