resize: function () {
this.ww = $(window).width();
this.hh = $(window).height();
+ let intro_text_mobile = this.quiz.data.intro_text_mobile
+ let intro_text = this.quiz.data.intro_text
+ const iconReset = getSpriteIcon("quiz-reset")
+ const textReset = "Reset"
// Exécuter ici toutes opérations qui doivent intervenir lorsque la fenêtre est redimensionnée par le système ou l'utilisateur
+ //
+ if(this.ww <= 390) {
+ $("#welcome p").html(this.nl2br(intro_text_mobile))
+ }else {
+ $("#welcome p").html(this.nl2br(intro_text))
+ }
+
+ //
+ if(this.ww <= 992) {
+ $(".btn.reset .text").html(iconReset)
+ } else {
+ $(".btn.reset .text").html(textReset)
+ }
},
+
+ nl2br: function(str) {
+ if (!str) return str;
+ return str.replace(/(?:\r\n|\r|\n)/g, '<br>');
+ }
}
export default QuizResize;
+$screenSizeMobile: 391px
max-width: 1200px
min-height: 680px
margin: 0 auto
- padding: 24px 24px
+ +padding-container()
position: relative
.btn
+flex-config(center,false,false,center)
@extend .radius
+font-size(20)
+ +below(992px)
+ height: 56px
&.primary
background: radial-gradient(at 16% 6px, rgb(255, 102, 186) -7%, #D0167C 74%)
box-shadow: 0 4px 6px rgba(0,0,0,.2)
+ +below(993px)
+ flex: 1
+ margin-left: 16px
&.secondary
+opacity(.16)
padding-left: 22px
&.reset
max-width: 144px
+ +below(992px)
+ width: 56px
+ flex-shrink: 0
+ padding: 0
+ .text
+ +below(992px)
+ +flex-config(center,false,false,center)
+ svg
+ width: 50%
&.info
max-width: 177px
margin-left: 16px
+flex-config(center,false,false,center)
border: 0
+ +below(993px)
+ &:not(.missed):not(.ok):not(.nok)
+ display: none
&.space
width: 70px
&.infos
height: 100%
width: 100%
z-index: 0
+ img.mobile
+ display: inline
+ height: 100%
+ width: 100%
+ object-fit: cover
+ &.question-multiple
+ object-position: top
+
+ +above($screenSizeMobile)
+ display: none
+ img:not(.mobile)
+ display: none
+ +above($screenSizeMobile)
+ display: inline
.header-question
text-align: center
.abovetitle
- +font-size(16)
+ +font-size(14)
+ +above($screenSizeMobile)
+ +font-size(16)
.progress-container
- margin: 6px 0 16px
+ margin: 4px 0 16px
+flex-config(center,false,false,center)
+ +above($screenSizeMobile)
+ margin: 6px 0 16px
.progress-item
width: 16px
height: 4px
&.nok
background-color: $nok-color
h1
- +font-size(24)
+ +font-size(20)
+ height: 84px
+ +above(991px)
+ height: auto
+ +font-size(24)
.footer
position: absolute
left: 0
width: 100%
z-index: 2
- +flex-config(space-between,false,row,center)
+ +flex-config(center,false,row,center)
+padding-container()
+ +breakpoint(md)
+ +flex-config(space-between,false,row,center)
+
.btn.primary
width: 100%
- max-width: 400px
- position: absolute
- left: 50%
- bottom: 24px
- transform: translateX(-50%)
+ +above(992px)
+ max-width: 400px
+ position: absolute
+ left: 50%
+ bottom: 24px
+ transform: translateX(-50%)
+[data-screen="welcome"]
+ .screen-image
+ +flex-config(center)
+
#welcome
max-width: 590px
margin: 0 auto
.screen.question-multiple
- top: 93px
-
- form
- &.disabled
- label
- pointer-events: none
-
+ top: 45px
+ +above(992px)
+ top: 93px
.list
display: grid
- grid-template-columns: repeat(2, 1fr)
grid-gap: 16px
-
+ +below($screenSizeMobile)
+ grid-gap: 8px
+ +breakpoint(md)
+ grid-template-columns: repeat(2, 1fr)
&-item
label
width: 100%
height: 58px
@extend .radius
- +opacity(.80, background-color, $neutral-color)
- +flex-config(space-between, false, false, center)
+ +opacity(.80,background-color,$neutral-color)
+ +flex-config(space-between,false,false,center)
padding: 0 16px
cursor: pointer
border: 2px solid rgba($texts-color, .24)
position: relative
overflow: hidden
-
+ +below($screenSizeMobile)
+ height: 56px
+ +font-size(14)
&:after
content: ""
width: 100%
top: 0
left: 0
transition: background-color .1s ease-out
-
&.ok:after,
&.missed:after
//
- +opacity(.24, background-color, $ok-color)
-
+ +opacity(.24,background-color,$ok-color)
*
z-index: 1
- input:checked + label
+ input:checked+label
border-color: $texts-color
transition: border-color .1s ease-out
-
&:after
+opacity(.16)
-
&.nok:after
background: transparent
.score
- height: 576px //680(hauteur de base) - 80(hauteur du header) - 24(padding inférieure)
- +opacity(.48,background-color,$neutral-color)
+ height: 600px //680(hauteur de base) - 80(hauteur du header)
border-radius: 40px
overflow: hidden
+flex-config(false,false,row,stretch)
+ +below(993px)
+ position: static
+ border-radius: 0
+ +above(992px)
+ +opacity(.48,background-color,$neutral-color)
+ height: 576px //680(hauteur de base) - 80(hauteur du header) - 24(padding inférieure)
+
+ &:after
+ +below(993px)
+ content: ""
+ width: 100%
+ position: absolute
+ height: 100%
+ +opacity(.48,background-color,$neutral-color)
+ top: 0
+ left: 0
.subtitle
+opacity(.8,color,$texts-color)
+ +below(993px)
+ margin-bottom: 20px
&-content
flex: 1
padding: 24px
position: relative
+ z-index: 1
+ +below(993px)
+ padding: 0
h1
+font-size(40)
margin-bottom: 9px
+ +below(993px)
+ +font-size(24)
.subtitle
+font-size(16)
+ +below(993px)
+ +font-size(14)
&-content-wrapper
+flex-config(false,false,false,center)
position: relative
top: var(--space-21-66)
left: var(--space-21-66)
+ +below(993px)
+ +flex-config(center,false,column,center)
+ top: 74px
+ left: 0
+ text-align: center
&-counter
height: 0
position: relative
+font-size(80)
margin-right: 60px
-
+ +below(993px)
+ margin: 0 0 24px
+ font-size: 56px
#progress-counter
width: 100%
height: 100%
overflow: visible
width: calc(100% - 12px)
height: calc(100% - 12px)
- transform: rotate(-90deg)
position: absolute
circle
- stroke-width: 12px
+ stroke-width: 6px
circle:not(#progress-circle)
+opacity(.16,color,$texts-color)
- circle#progress-circle
- transition: stroke-dashoffset 0.5s ease-in-out
- &-answers-review
+ &-answers-review_container
width: 36.11111%
+ +below(993px)
+ width: 100%
+ height: 100%
+ position: absolute
+ top: 0
+ left: 0
+ z-index: 99
+ display: flex
+ padding: 16px 16px 0
+ align-items: flex-end
+ visibility: hidden
+ //+opacity(0,background-color,$ok-color)
+ backdrop-filter: blur(4px)
+ &.active
+ //+opacity(1,background-color,$ok-color)
+ visibility: visible
+
+ &-answers-review
+ height: 100%
background-color: $neutral-color
padding: 24px 24px 0
position: relative
+ +below(993px)
+ width: 100%
+ height: calc(100% - 78px)
+ padding: 8px 16px 0
+ border-top-left-radius: 20px
+ border-top-right-radius: 20px
h2
+font-size(24)
margin-bottom: 5px
+ +below(993px)
+ margin-bottom: 12px
+ text-align: center
+ position: relative
+ #close-answers
+ position: absolute
+ right: 0
+ top: 50%
+ transform: translateY(-50%)
+
.subtitle
+font-size(16)
margin-bottom: 22px
+ +below(993px)
+ display: none
&:after
content: ""
#answers-list
height: 85%
padding-right: 24px
+ +below(993px)
+ height: 90%
+ padding-right: 5px
.item
padding-left: 20px
margin-bottom: 22px
.answer
+opacity(.8,color,$texts-color)
+ .toggle-answers-review
+ +above(992px)
+ display: none
+
footer
position: absolute
width: calc(100% - 48px)
bottom: 24px
+ z-index: 1
+ +below(993px)
+ width: 100%
+ bottom: 0
.restart-sentence
margin-bottom: 14px
.controls
+flex-config(space-between)
+ .restart-sentence,
+ .btn.restart
+ +below(993px)
+ display: none
+ &-mobile
+ +flex-config(center)
+ +above(992px)
+ display: none
+
+ .restart-sentence-mobile
+ margin-bottom: 14px
+ font-size: 14px
+
+ .btn.restart-mobile
+ width: max-content
+ height: 35px
+ padding: 12px
+ margin: 0 auto
+ font-size: 16px
+ svg
+ height: 13px
+ margin-right: 6px
+
// SimpleBar personalisation
.simplebar-wrapper
<footer class="footer-question footer">
@isset($reset)
<a class="btn secondary reset" aria-keyshortcuts="R">
- Reset
+ <span class="text">Reset</span>
<span class="access">R</span>
</a>
@endisset
</div>
</div>
<script src="js/quiz.js"></script>
+<script>
+ function changeViewportSize () {
+ const mvp = document.getElementById('myViewport');
+ if (screen.width > 390) {
+ mvp.setAttribute('content','width=device-width, user-scalable=no, initial-scale=1.0, shrink-to-fit=no');
+ }else {
+ mvp.setAttribute('content','width=390, user-scalable=no, initial-scale=1.0, shrink-to-fit=no');
+ }
+ }
+ window.addEventListener("onload", changeViewportSize)
+ window.addEventListener("resize", changeViewportSize)
+</script>
</body>
</html>
</div>
<div class="screen-image">
<img src="{{$data->theme->introImage}}" />
+ <img class="mobile" src="{{$data->theme->introImageMobile}}" />
</div>
<footer class="footer">
- <a id="start" aria-keyshortcuts="Space" class="btn primary">{{$data->intro_button}}</a>
+ <a id="start" aria-keyshortcuts="Space" class="btn primary">{{$data->intro_button}}<span class="access space">space</span></a>
</footer>
</div>
<div class="score-counter">
<div id="progress-counter">
<span id="score-counter">0</span><span>/</span><span id="maxScore-counter">0</span>
- <svg width="100%" height="100%" id="svg">
- <circle cx="50%" cy="50%" r="50%" fill="transparent" stroke="currentColor"/>
- <circle id="progress-circle" cx="50%" cy="50%" r="50%" fill="none" stroke="currentColor"/>
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 100 100" xml:space="preserve">
+ <circle cx="50" cy="50" r="48" fill="transparent" stroke="currentColor" />
+ <circle id="progress-circle" fill="none" stroke="currentColor" stroke-width="1.2" stroke-mitterlimit="0" cx="50" cy="50" r="48" stroke-dasharray="360" stroke-linecap="round" transform="rotate(-90 ) translate(-100 0)" >
+ <!--<animate attributeName="stroke-dashoffset" values="360;0" dur="2s" repeatCount="indefinite"></animate>-->
+ </circle>
</svg>
</div>
</div>
<div class="score-text">
<h1>Congratulation!</h1>
<p class="subtitle">You have completed the quiz<br/> with <span id="score-text"></span>
- correct answers out of <span id="maxScore-text"></span></p>
+ correct answers out of <span id="maxScore-text"></span>
+ </p>
+ @if($data->restart_button)
+ <div class="restart-sentence-mobile">Want to improve your score?</div>
+ <a class="btn secondary restart restart-mobile">
+ <span data-icon="reset"></span>
+ Restart
+ </a>
+ @endif
</div>
</div>
<footer>
@endif
<div class="controls">
@if($data->restart_button)
- <a class="btn secondary reset" aria-keyshortcuts="r">
+ <a class="btn secondary restart" aria-keyshortcuts="r">
Restart
<span class="access">R</span>
</a>
@endif
- <a class="btn primary action" aria-keyshortcuts="Space">
+ <a class="btn secondary toggle-answers-review">
+ <span data-icon=""></span>
+ Review answers
+ </a>
+ <a class="btn primary action">
Leave
<span class="access space">space</span>
</a>
</div>
</footer>
</div>
- <div class="score-answers-review">
- <h2>Answers review</h2>
- <p class="subtitle">Review your answers before you go</p>
- <ul id="answers-list">
- @verbatim
- <script id="template-answers-review" type="text/x-handlebars-template">
- {{#each reviewList}}
- <li class="item {{this.status}}">
- <p class="position">Question {{inc @index}}</p>
- <p class="question">{{this.question}}</p>
- {{#each this.answers}}
- <p class="answer">{{this.answer}}</p>
+ <div class="score-answers-review_container">
+ <div class="score-answers-review">
+ <h2>Answers review<span class="toggle-answers-review" id="close-answers" data-icon="wrong"></span></h2>
+ <p class="subtitle">Review your answers before you go</p>
+ <ul id="answers-list">
+ @verbatim
+ <script id="template-answers-review" type="text/x-handlebars-template">
+ {{#each reviewList}}
+ <li class="item {{this.status}}">
+ <p class="position">Question {{inc @index}}</p>
+ <p class="question">{{this.question}}</p>
+ {{#each this.answers}}
+ <p class="answer">{{this.answer}}</p>
+ {{/each}}
+ </li>
{{/each}}
- </li>
- {{/each}}
- </script>
- @endverbatim
- </ul>
+ </script>
+ @endverbatim
+ </ul>
+ </div>
</div>
</div>
</div>
@foreach($question['answers'] as $key => $answer)
<li class="list-item">
<input type="{{ $data['multiple'] ? 'checkbox' : 'radio' }}"
- name="{{ 'answer' }}"
+ name="answer"
id="question-{{$position.$key}}" class="none" value="{{$key}}">
<label for="question-{{$position.$key}}" aria-keyshortcuts="{{$alphabet[$key]}}">
<span class="relative">{{$answer['answer']}}</span>
</form>
</div>
<div class="screen-image">
- <img src="{{$theme->standardImage}}">
+ <img src="{{$theme->standardImage}}"/>
+ <img class="mobile question-multiple" src="{{$theme->standardImageMobile}}"/>
</div>
@include('footer', ['question' =>$question, 'data' => $data, 'reset' => true, 'info' => true])
</div>