From 527d7d0f68a2150b58819e8ca38dc541cdbf1a2e Mon Sep 17 00:00:00 2001 From: simfrisk Date: Mon, 24 Mar 2025 14:48:30 +0100 Subject: [PATCH 01/40] changed placed on the js file --- index.html | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/index.html b/index.html index a9a33db..bc4c243 100644 --- a/index.html +++ b/index.html @@ -1,13 +1,17 @@ - - - - Title - - - -

This is the starting point.

- - - + + + + + Title + + + + + +

This is the starting point.

+ + + + \ No newline at end of file From 01f0be03d53b467dc0644d6aee57a4169884658e Mon Sep 17 00:00:00 2001 From: Sofie Date: Tue, 25 Mar 2025 12:07:29 +0100 Subject: [PATCH 02/40] test sofie --- index.html | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/index.html b/index.html index bc4c243..764cf65 100644 --- a/index.html +++ b/index.html @@ -1,15 +1,25 @@ - + - - Title - - + + Web Accessibility Quiz + + +

Web Accessibility Quiz

This is the starting point.

From 7e4746b50c944d0dd308ac54ef5950b845e04db8 Mon Sep 17 00:00:00 2001 From: Sofie Date: Tue, 25 Mar 2025 12:09:38 +0100 Subject: [PATCH 03/40] test --- index.html | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/index.html b/index.html index 764cf65..5c47ccf 100644 --- a/index.html +++ b/index.html @@ -12,16 +12,15 @@ rel="stylesheet" href="css/styles.css" /> - +

Web Accessibility Quiz

This is the starting point.

+ + \ No newline at end of file From 28127f18c477081641a1a98c6cc4eff06514660a Mon Sep 17 00:00:00 2001 From: simfrisk Date: Tue, 25 Mar 2025 15:43:20 +0100 Subject: [PATCH 04/40] basic html --- css/styles.css | 28 ++++++++++++++++ index.html | 90 +++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 117 insertions(+), 1 deletion(-) diff --git a/css/styles.css b/css/styles.css index e69de29..08f5903 100644 --- a/css/styles.css +++ b/css/styles.css @@ -0,0 +1,28 @@ +* { + box-sizing: border-box; +} + +body { + background-color: #fdeb3f; + font-family: 'Futura', sans-serif; +} + +#start-page { + border: black solid 2px; + margin-bottom: 10px; +} + +#quiz-container { + border: black solid 2px; + margin-bottom: 10px; +} + +#result-container { + border: black solid 2px; + margin-bottom: 10px; +} + +#quiz-result { + border: black solid 2px; + margin-bottom: 10px; +} \ No newline at end of file diff --git a/index.html b/index.html index bc4c243..2152d00 100644 --- a/index.html +++ b/index.html @@ -10,7 +10,95 @@ -

This is the starting point.

+ +
+ +
+ + + +
+ +
+

Web Accessibility Quiz

+ +

Description about the quiz

+ + +
+ + + +
+
+ Logo +

Question 1

+
+
+
+ + + + +
+ + +
+ +
+ + + +
+
+ +
+

You got it right!

+

The correct answer is..

+

Not quite there

+

The correct answer should be..

+ +
+ + + +
+
+ + +
+
+ + + +
+ + From dc1b662c40cd7d016da17c01fae417a8e53bd088 Mon Sep 17 00:00:00 2001 From: simfrisk Date: Tue, 25 Mar 2025 15:46:29 +0100 Subject: [PATCH 05/40] test --- css/styles.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/css/styles.css b/css/styles.css index 08f5903..17a5904 100644 --- a/css/styles.css +++ b/css/styles.css @@ -8,7 +8,7 @@ body { } #start-page { - border: black solid 2px; + border: black solid 3px; margin-bottom: 10px; } From ff99bbbbaae62ad3d4c98a476bdc2e493910b9c0 Mon Sep 17 00:00:00 2001 From: simfrisk Date: Tue, 25 Mar 2025 15:49:48 +0100 Subject: [PATCH 06/40] test --- css/styles.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/css/styles.css b/css/styles.css index 17a5904..08f5903 100644 --- a/css/styles.css +++ b/css/styles.css @@ -8,7 +8,7 @@ body { } #start-page { - border: black solid 3px; + border: black solid 2px; margin-bottom: 10px; } From c1eacdff3660792360be7ac710efd17648ca1b8a Mon Sep 17 00:00:00 2001 From: simfrisk Date: Tue, 25 Mar 2025 15:55:52 +0100 Subject: [PATCH 07/40] new test --- css/styles.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/css/styles.css b/css/styles.css index 17a5904..8ad48b0 100644 --- a/css/styles.css +++ b/css/styles.css @@ -8,7 +8,7 @@ body { } #start-page { - border: black solid 3px; + border: rgb(255, 0, 0) solid 3px; margin-bottom: 10px; } From 1270725cc55417d1df28a0c75c4f0b84075c40ee Mon Sep 17 00:00:00 2001 From: simfrisk Date: Tue, 25 Mar 2025 16:16:22 +0100 Subject: [PATCH 08/40] new css colorpalette --- css/color-palette.css | 52 +++++++++++++++++++++++++++++++++++++++++++ css/styles.css | 2 +- index.html | 1 + 3 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 css/color-palette.css diff --git a/css/color-palette.css b/css/color-palette.css new file mode 100644 index 0000000..995f2a6 --- /dev/null +++ b/css/color-palette.css @@ -0,0 +1,52 @@ +:root { + --primary: #fdeb3f; + --primary-hover: ; + --primary-fixed: ; + + --secondary: ; + --secondary-hover: ; + --secondary-fixed: ; + + --complementary: ; + --complementary-hover: ; + --complementary-fixed: ; + + --aditional: ; + --aditional-hover: ; + --aditional-fixed: ; + + --font-primary: ; + --font-primary-hover: ; + --font-primary-fixed: ; + + --font-secondary: ; + --font-secondary-hover: ; + --font-secondary-fixed: ; +} + +.dark-mode { + --primary: #6c2727; + --primary-hover: ; + --primary-fixed: ; + + --secondary: ; + --secondary-hover: ; + --secondary-fixed: ; + + --complementary: ; + --complementary-hover: ; + --complementary-fixed: ; + + --aditional: ; + --aditional-hover: ; + --aditional-fixed: ; + + --font-primary: ; + --font-primary-hover: ; + --font-primary-fixed: ; + + --font-secondary: ; + --font-secondary-hover: ; + --font-secondary-fixed: ; + +} \ No newline at end of file diff --git a/css/styles.css b/css/styles.css index 08f5903..2edc04d 100644 --- a/css/styles.css +++ b/css/styles.css @@ -3,7 +3,7 @@ } body { - background-color: #fdeb3f; + background-color: var(--primary); font-family: 'Futura', sans-serif; } diff --git a/index.html b/index.html index 2152d00..1015962 100644 --- a/index.html +++ b/index.html @@ -5,6 +5,7 @@ Title + From 736cebc3a6edfc8d2ada76c2db44869eab4b9155 Mon Sep 17 00:00:00 2001 From: Sofie Date: Tue, 25 Mar 2025 19:01:41 +0100 Subject: [PATCH 09/40] css styling --- .DS_Store | Bin 0 -> 6148 bytes css/styles.css | 130 ++++++++++++++++++++++++++++++++++++++++- img/speech-bubble.png | Bin 0 -> 58639 bytes img/speech-bubble2.png | Bin 0 -> 65986 bytes index.html | 123 ++++++++++++++++++++++++++++---------- 5 files changed, 219 insertions(+), 34 deletions(-) create mode 100644 .DS_Store create mode 100644 img/speech-bubble.png create mode 100644 img/speech-bubble2.png diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..beca21563b6b454568e104f3d688b31c81ff6016 GIT binary patch literal 6148 zcmeHK%}T>S5T3CW0$zIbxDVi^Z?Km51n~i+7Gfdk7D3N@^~IDvNZ-S6c19#L_83%V zVE3DyzfC^KZia|>^|DzKEr_VX5M)tCM9ibE3k$vkveZ~MkE!2}l=!_SdG;A?si(GU zPoCdAeX8qqm)3}_Za(ghZ-@8W@4P;3&Up7vKUIBgo_Af^wWtL4T$}-Cz!`7`oPmiL zuv@3PnrJ`Y#u;!1{tg3jJ_HQGXqXkt(SfP70KhrSMW9PBAvwV?8fHa!AgrlCO=W8_ zSkqw-78eb(qNWpD^TD?BSM$PUchnChoH#1_>m$JL{F9 LAwD?+6EN@zO?xYN literal 0 HcmV?d00001 diff --git a/css/styles.css b/css/styles.css index 27c672b..0f02e6c 100644 --- a/css/styles.css +++ b/css/styles.css @@ -3,11 +3,135 @@ } body { + font-family: 'Futura', Helvetica, sans-serif; + margin: 0; background-color: #fdeb3f; - font-family: 'Futura', sans-serif; } -#start-page { +/* Styling for nav in header and footer */ + +nav { + display: flex; + flex-direction: row; + justify-content: center; + justify-items: center; + padding: 8px; +} + +ul { + display: flex; + flex-direction: row; + gap: 8px; + padding: 0; +} + +li { + list-style: none; +} + +a { + text-decoration: none; + color: black; +} + +main { + padding: 8px; + margin: 0 auto; + max-width: 400px; +} + +/* styling for each section */ +section { + border: 1px dashed black; + margin: 8px; + flex-direction: column; + align-items: center; + justify-content: center; + text-align: center; + padding: 24px; +} + +.speech-bubble { + background-image: url("../img/speech-bubble2.png"); + background-size: contain; + background-repeat: no-repeat; + background-position: center; + width: 100%; + height: auto; + min-height: 220px; + padding-top: 50px; +} + +.title-text { + max-width: 180px; + margin: 0 auto; + font-size: 18px; + padding: 4px; +} + +h1 {} + +button { + font-family: 'Futura', Helvetica, sans-serif; + border: 2px solid black; + border-radius: 8px; + background-color: #FFFFFF; + box-shadow: 2px 3px 0px black; + padding: 8px 12px; + text-transform: uppercase; + font-weight: 600; + letter-spacing: 0.5px; + margin: 8px; +} + +button:hover { + border: 2px dashed black; +} + +button::after {} + +/* Quiz questions form layout */ + +form { + padding: 8px 16px; + +} + +fieldset { + border: none; + display: flex; + flex-direction: column; + padding: 8px 16px; +} + +label { + margin: 8px 0px; + padding: 8px; + background-color: #FFFFFF; + box-shadow: 2px 3px 0px black; + border: 2px solid black; + border-radius: 4px; +} + +label:hover { + border: 2px dashed black; +} + +label:has(:checked) { + border: 2px dashed black; +} + +label input { + display: none; +} + +/* styling of icons */ +i { + font-size: 24px; + color: #000000; +} + +/* #start-page { border: rgb(255, 0, 0) solid 2px; margin-bottom: 10px; } @@ -25,4 +149,4 @@ body { #quiz-result { border: black solid 2px; margin-bottom: 10px; -} \ No newline at end of file +} */ \ No newline at end of file diff --git a/img/speech-bubble.png b/img/speech-bubble.png new file mode 100644 index 0000000000000000000000000000000000000000..b6269aac028e092db5fd38ee4867add608a0e803 GIT binary patch literal 58639 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ξDHusL?(=%SjIP&N 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 gckKV23zbB@EfPhSifN&`l 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 QE$~N5Ojfj5Sm(q412S*31^@s6 literal 0 HcmV?d00001 diff --git a/index.html b/index.html index 2152d00..7c367da 100644 --- a/index.html +++ b/index.html @@ -1,12 +1,26 @@ - + - + Title - - + + + + @@ -14,8 +28,8 @@ @@ -24,38 +38,75 @@
-
-

Web Accessibility Quiz

+
+ +
+

Welcome to our

+

Web Accessibility Quiz

+
+ +

Kort beskrivning. Lorem ipsum dolor sit, amet consectetur adipisicing elit. Culpa adipisci laborum + unde + illum ea, dolores facere + soluta excepturi mollitia hic nisi, doloremque.

-

Description about the quiz

+ -
-
- Logo -

Question 1

+ +

Question 1

+ +
+ + +

Lorem ipsum dolor sit amet consectetur adipisicing elit?

@@ -67,23 +118,30 @@

Question 1

-
- +
+

You got it right!

+ +
-

You got it right!

The correct answer is..

-

Not quite there

-

The correct answer should be..

-
- +
+ +

You got 10/10!

+

Well done! Lorem ipsum dolor, sit amet consectetur adipisicing elit. Voluptatum modi similique quis.

@@ -93,9 +151,12 @@

Not quite there

From e2c630d9c727a200af61841e584b2eadd0d59d36 Mon Sep 17 00:00:00 2001 From: Sofie Date: Tue, 25 Mar 2025 19:18:40 +0100 Subject: [PATCH 10/40] hamburger menu first draft --- css/styles.css | 43 +++++++++++++++++++++++++++++++++++++++++-- index.html | 6 +++++- js/main.js | 9 +++++++++ 3 files changed, 55 insertions(+), 3 deletions(-) diff --git a/css/styles.css b/css/styles.css index 0f02e6c..43ccd96 100644 --- a/css/styles.css +++ b/css/styles.css @@ -10,12 +10,35 @@ body { /* Styling for nav in header and footer */ +#menu-icon { + font-size: 30px; + cursor: pointer; + display: block; + padding: 12px; +} + +#nav-links { + display: none; + flex-direction: column; + position: absolute; + top: 50px; + left: 0; + width: 100%; + background: transparent; + padding: 10px 0; +} + +#nav-links.active { + display: flex; + flex-direction: column; + padding: 8px; +} + nav { display: flex; flex-direction: row; justify-content: center; justify-items: center; - padding: 8px; } ul { @@ -149,4 +172,20 @@ i { #quiz-result { border: black solid 2px; margin-bottom: 10px; -} */ \ No newline at end of file +} */ + +/* Desktop */ +@media screen and (min-width: 768px) { + #menu-icon { + display: none; + } + + #nav-links { + display: flex; + flex-direction: row; + position: static; + box-shadow: none; + gap: 15px; + background-color: #fdeb3f; + } +} \ No newline at end of file diff --git a/index.html b/index.html index 7c367da..14f78b1 100644 --- a/index.html +++ b/index.html @@ -26,7 +26,11 @@
-
-
diff --git a/js/main.ts b/js/main.ts index 0e04344..162fff7 100644 --- a/js/main.ts +++ b/js/main.ts @@ -23,16 +23,16 @@ const questions: Question[] = [ id: "question1", currentStep: 1, questionTitle: "Question 1", - questionText: "What is ...", - options: ["option A", "option B", "option C", "option D"], - correctAnswer: "option 1", + questionText: "What is a screen reader?", + options: ["A car", "A digital text reader", "A cat", "A fruite"], + correctAnswer: "A digital text reader", resultTitle: "answerTitle", resultExplanation: "answerExplanation" }, { id: "question2", questionTitle: "Question 2", - questionText: "What is ...", + questionText: "What is ...2", currentStep: 2, options: ["option A", "option B", "option C", "option D"], correctAnswer: "option 1", @@ -43,7 +43,7 @@ const questions: Question[] = [ id: "question3", currentStep: 3, questionTitle: "Question 3", - questionText: "What is ...", + questionText: "What is ...3", options: ["option A", "option B", "option C", "option D"], correctAnswer: "option 1", resultTitle: "answerTitle", diff --git a/js/temp-script.js b/js/temp-script.js index 79c06cf..c23ca4a 100644 --- a/js/temp-script.js +++ b/js/temp-script.js @@ -1,3 +1,4 @@ +const startQuizBtn = document.querySelector("#start-quiz-btn") const questionTitle = document.querySelector("#question-title") const questionText = document.querySelector("#question-text") const optionA = document.querySelector("#option-a") @@ -9,30 +10,32 @@ const resultExplanation = document.querySelector("#result-explanation") const submitAnswerBtn = document.querySelector("#answer-btn") const nextQuestionBtn = document.querySelector("#next-question-btn") -let currentStep = 1 +let currentStep = 0 const loadNextQuestion = () => { + console.log("testing") // if current step = lenght of array - nextStep() - questionTitle.innerHTML = questions.questionsTitle - questionText.innerHTML = questions.questionsText - optionA.innerHTML = `A: ${questions.options[0]}` - optionB.innerHTML = `B: ${questions.options[0]}` - optionC.innerHTML = `C: ${questions.options[0]}` - optionD.innerHTML = `D: ${questions.options[0]}` + // nextStep() + + const currentQuestion = questions[currentStep] + questionTitle.innerHTML = (currentQuestion.questionTitle) + questionText.innerHTML = (currentQuestion.questionText) + optionA.innerHTML = (`A: ${currentQuestion.options[0]}`) + optionB.innerHTML = (`B: ${currentQuestion.options[1]}`) + optionC.innerHTML = (`C: ${currentQuestion.options[2]}`) + optionD.innerHTML = (`D: ${currentQuestion.options[3]}`) // else // Show result slide } - -const loadNextAnswer = () => { - // Next Slide - // If correct ++ score - // If incorrect dont add score - resultTitle.innerHTML = (questions.resultTitle) - resultExplanation.innerHTML = (questions.resaultExplanation) - -} +//LoadNextAnser +// const loadNextAnswer = () => { +// // Next Slide +// // If correct ++ score +// // If incorrect dont add score +// resultTitle.innerHTML = (questions.resultTitle) +// resultExplanation.innerHTML = (questions.resultExplanation) +// } // const loadPrevoius = () => { // //Startover @@ -66,10 +69,10 @@ const loadNextAnswer = () => { //eventlisteners -// startQuizBtn.addEventListener("click", loadNextQuestion()) -nextQuestionBtn.addEventListener("click", loadNextQuestion()) -// showAnswerBtn.addEventListener("click", loadNextAnswer()) -// goBackBtn.addEventListener("click", loadPrevoius()) -// restartQuizBtn.addEventListener("click", startOver()) +startQuizBtn.addEventListener("click", loadNextQuestion) +// nextQuestionBtn.addEventListener("click", loadNextQuestion) +// showAnswerBtn.addEventListener("click", loadNextAnswer) +// goBackBtn.addEventListener("click", loadPrevoius) +// restartQuizBtn.addEventListener("click", startOver) From a8d47388dd7b55516e46f9d2f95a91cd9657f1a9 Mon Sep 17 00:00:00 2001 From: simfrisk Date: Wed, 26 Mar 2025 13:51:41 +0100 Subject: [PATCH 20/40] faild to fix --- dist/main.js | 27 +++++++++++++++++++++++++++ index.html | 22 +++++++++++----------- js/main.ts | 29 +++++++++++++++++++++++++++++ js/temp-script.js | 33 --------------------------------- 4 files changed, 67 insertions(+), 44 deletions(-) diff --git a/dist/main.js b/dist/main.js index d0c5898..d31f43a 100644 --- a/dist/main.js +++ b/dist/main.js @@ -3,6 +3,18 @@ //#region --- DOM Elements ----- const navLinks = document.querySelector("#nav-links"); const menuIcon = document.querySelector("#menu-icon"); +const startQuizBtn = document.querySelector("#start-quiz-btn"); +const questionTitle = document.querySelector("#question-title"); +const questionText = document.querySelector("#question-text"); +const optionA = document.querySelector("#option-a"); +const optionB = document.querySelector("#option-b"); +const optionC = document.querySelector("#option-c"); +const optionD = document.querySelector("#option-d"); +const resultTitle = document.querySelector("#result-title"); +const resultExplanation = document.querySelector("#result-explanation"); +const submitAnswerBtn = document.querySelector("#answer-btn"); +const nextQuestionBtn = document.querySelector("#next-question-btn"); +let currentStep = 0; //#endregion //#region --- Object ----- const questions = [ @@ -46,7 +58,22 @@ const burgerMenu = () => { menuIcon.classList.toggle("fa-times"); }; //#endregion +//#region --- Load Next Question ----- +const loadNextQuestion = () => { + console.log("testing"); + // nextStep() + const currentQuestion = questions[currentStep]; + questionTitle.innerHTML = (currentQuestion.questionTitle); + questionText.innerHTML = (currentQuestion.questionText); + optionA.innerHTML = (`A: ${currentQuestion.options[0]}`); + optionB.innerHTML = (`B: ${currentQuestion.options[1]}`); + optionC.innerHTML = (`C: ${currentQuestion.options[2]}`); + optionD.innerHTML = (`D: ${currentQuestion.options[3]}`); + // else + // Show result slide +}; //#endregion //#region --- Event listeners ----- menuIcon.addEventListener("click", burgerMenu); +startQuizBtn.addEventListener("click", loadNextQuestion); //#endregion diff --git a/index.html b/index.html index 08e7ee2..6faa4a8 100644 --- a/index.html +++ b/index.html @@ -9,8 +9,8 @@ + - @@ -42,7 +42,7 @@

Web Accessibility Quiz

illum ea, dolores facere soluta excepturi mollitia hic nisi, doloremque.

- +
@@ -63,22 +63,22 @@

Lorem ipsum dolor sit amet consectetur
-
@@ -92,7 +92,7 @@

Lorem ipsum dolor sit amet consectetur
-

Congratulations

+

Congratulations

You got it right!

diff --git a/js/main.ts b/js/main.ts index 162fff7..5f59626 100644 --- a/js/main.ts +++ b/js/main.ts @@ -14,6 +14,19 @@ interface Question { //#region --- DOM Elements ----- const navLinks = document.querySelector("#nav-links") as HTMLElement const menuIcon = document.querySelector("#menu-icon") as HTMLElement +const startQuizBtn = document.querySelector("#start-quiz-btn") as HTMLButtonElement +const questionTitle = document.querySelector("#question-title") as HTMLElement +const questionText = document.querySelector("#question-text") as HTMLParagraphElement +const optionA = document.querySelector("#option-a") as HTMLLabelElement +const optionB = document.querySelector("#option-b") as HTMLLabelElement +const optionC = document.querySelector("#option-c") as HTMLLabelElement +const optionD = document.querySelector("#option-d") as HTMLLabelElement +const resultTitle = document.querySelector("#result-title") as HTMLElement +const resultExplanation = document.querySelector("#result-explanation") as HTMLParagraphElement +const submitAnswerBtn = document.querySelector("#answer-btn") as HTMLButtonElement +const nextQuestionBtn = document.querySelector("#next-question-btn") as HTMLButtonElement + +let currentStep: number = 0 //#endregion @@ -63,9 +76,25 @@ const burgerMenu = (): void => { } //#endregion +//#region --- Load Next Question ----- +const loadNextQuestion = () => { + console.log("testing") + // nextStep() + const currentQuestion = questions[currentStep] + questionTitle.innerHTML = (currentQuestion.questionTitle) + questionText.innerHTML = (currentQuestion.questionText) + optionA.innerHTML = (`A: ${currentQuestion.options[0]}`) + optionB.innerHTML = (`B: ${currentQuestion.options[1]}`) + optionC.innerHTML = (`C: ${currentQuestion.options[2]}`) + optionD.innerHTML = (`D: ${currentQuestion.options[3]}`) + // else + // Show result slide +} + //#endregion //#region --- Event listeners ----- menuIcon.addEventListener("click", burgerMenu) +startQuizBtn.addEventListener("click", loadNextQuestion) //#endregion diff --git a/js/temp-script.js b/js/temp-script.js index c23ca4a..b63d570 100644 --- a/js/temp-script.js +++ b/js/temp-script.js @@ -1,32 +1,4 @@ -const startQuizBtn = document.querySelector("#start-quiz-btn") -const questionTitle = document.querySelector("#question-title") -const questionText = document.querySelector("#question-text") -const optionA = document.querySelector("#option-a") -const optionB = document.querySelector("#option-b") -const optionC = document.querySelector("#option-c") -const optionD = document.querySelector("#option-d") -const resultTitle = document.querySelector("#result-title") -const resultExplanation = document.querySelector("#result-explanation") -const submitAnswerBtn = document.querySelector("#answer-btn") -const nextQuestionBtn = document.querySelector("#next-question-btn") -let currentStep = 0 - -const loadNextQuestion = () => { - console.log("testing") - // if current step = lenght of array - // nextStep() - - const currentQuestion = questions[currentStep] - questionTitle.innerHTML = (currentQuestion.questionTitle) - questionText.innerHTML = (currentQuestion.questionText) - optionA.innerHTML = (`A: ${currentQuestion.options[0]}`) - optionB.innerHTML = (`B: ${currentQuestion.options[1]}`) - optionC.innerHTML = (`C: ${currentQuestion.options[2]}`) - optionD.innerHTML = (`D: ${currentQuestion.options[3]}`) - // else - // Show result slide -} //LoadNextAnser // const loadNextAnswer = () => { @@ -51,10 +23,6 @@ const loadNextQuestion = () => { // const nextStep = () => { // // Add the next object in the array -// // Clear Option A -// // Clear Option B -// // Clear Option C -// // Clear Option D // // Next Slide // } @@ -69,7 +37,6 @@ const loadNextQuestion = () => { //eventlisteners -startQuizBtn.addEventListener("click", loadNextQuestion) // nextQuestionBtn.addEventListener("click", loadNextQuestion) // showAnswerBtn.addEventListener("click", loadNextAnswer) // goBackBtn.addEventListener("click", loadPrevoius) From 48efb983b88ad44e2b47b9f205abbde1791e6091 Mon Sep 17 00:00:00 2001 From: simfrisk Date: Wed, 26 Mar 2025 14:38:39 +0100 Subject: [PATCH 21/40] got typscript to work and small bug --- index.html | 20 ++++++++++---------- js/main.ts | 6 +++--- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/index.html b/index.html index 6faa4a8..b398b31 100644 --- a/index.html +++ b/index.html @@ -9,8 +9,8 @@ - + @@ -42,7 +42,7 @@

Web Accessibility Quiz

illum ea, dolores facere soluta excepturi mollitia hic nisi, doloremque.

- +
@@ -63,22 +63,22 @@

Lorem ipsum dolor sit amet consectetur
-
diff --git a/js/main.ts b/js/main.ts index 5f59626..e96844a 100644 --- a/js/main.ts +++ b/js/main.ts @@ -14,7 +14,7 @@ interface Question { //#region --- DOM Elements ----- const navLinks = document.querySelector("#nav-links") as HTMLElement const menuIcon = document.querySelector("#menu-icon") as HTMLElement -const startQuizBtn = document.querySelector("#start-quiz-btn") as HTMLButtonElement +const startQuizBtn = document.querySelector("#start-quiz-btn") as HTMLElement const questionTitle = document.querySelector("#question-title") as HTMLElement const questionText = document.querySelector("#question-text") as HTMLParagraphElement const optionA = document.querySelector("#option-a") as HTMLLabelElement @@ -23,8 +23,8 @@ const optionC = document.querySelector("#option-c") as HTMLLabelElement const optionD = document.querySelector("#option-d") as HTMLLabelElement const resultTitle = document.querySelector("#result-title") as HTMLElement const resultExplanation = document.querySelector("#result-explanation") as HTMLParagraphElement -const submitAnswerBtn = document.querySelector("#answer-btn") as HTMLButtonElement -const nextQuestionBtn = document.querySelector("#next-question-btn") as HTMLButtonElement +const submitAnswerBtn = document.querySelector("#answer-btn") as HTMLElement +const nextQuestionBtn = document.querySelector("#next-question-btn") as HTMLElement let currentStep: number = 0 From 9a54aaadf73fdd60f5c0c047459b27d1b3f1b1e3 Mon Sep 17 00:00:00 2001 From: simfrisk Date: Wed, 26 Mar 2025 16:23:50 +0100 Subject: [PATCH 22/40] still some bugs in row 96-row 99 --- dist/main.js | 25 +++++++++++++++++-------- index.html | 16 ++++++++-------- js/main.ts | 31 +++++++++++++++++++++---------- js/temp-script.js | 46 +++++++++++++++++++++++++++++++++++++--------- 4 files changed, 83 insertions(+), 35 deletions(-) diff --git a/dist/main.js b/dist/main.js index d31f43a..6a08c10 100644 --- a/dist/main.js +++ b/dist/main.js @@ -14,7 +14,8 @@ const resultTitle = document.querySelector("#result-title"); const resultExplanation = document.querySelector("#result-explanation"); const submitAnswerBtn = document.querySelector("#answer-btn"); const nextQuestionBtn = document.querySelector("#next-question-btn"); -let currentStep = 0; +let currentStep = -1; +let currentQuestion = null; //#endregion //#region --- Object ----- const questions = [ @@ -25,8 +26,10 @@ const questions = [ questionText: "What is a screen reader?", options: ["A car", "A digital text reader", "A cat", "A fruite"], correctAnswer: "A digital text reader", - resultTitle: "answerTitle", - resultExplanation: "answerExplanation" + resultTitleWin: "Congratulations", + resultExplanationWin: "You got it right!", + resultTitleLose: "Oh no!", + resultExplanationLose: "You got it wrong" }, { id: "question2", @@ -35,8 +38,10 @@ const questions = [ currentStep: 2, options: ["option A", "option B", "option C", "option D"], correctAnswer: "option 1", - resultTitle: "answerTitle", - resultExplanation: "answerExplanation" + resultTitleWin: "answerTitle", + resultExplanationWin: "answerExplanation", + resultTitleLose: "Oh no!", + resultExplanationLose: "You got it wrong" }, { id: "question3", @@ -45,8 +50,10 @@ const questions = [ questionText: "What is ...3", options: ["option A", "option B", "option C", "option D"], correctAnswer: "option 1", - resultTitle: "answerTitle", - resultExplanation: "answerExplanation" + resultTitleWin: "answerTitle", + resultExplanationWin: "answerExplanation", + resultTitleLose: "Oh no!", + resultExplanationLose: "You got it wrong" } ]; //#endregion @@ -62,7 +69,8 @@ const burgerMenu = () => { const loadNextQuestion = () => { console.log("testing"); // nextStep() - const currentQuestion = questions[currentStep]; + currentStep++; + currentQuestion = questions[currentStep]; questionTitle.innerHTML = (currentQuestion.questionTitle); questionText.innerHTML = (currentQuestion.questionText); optionA.innerHTML = (`A: ${currentQuestion.options[0]}`); @@ -76,4 +84,5 @@ const loadNextQuestion = () => { //#region --- Event listeners ----- menuIcon.addEventListener("click", burgerMenu); startQuizBtn.addEventListener("click", loadNextQuestion); +nextQuestionBtn.addEventListener("click", loadNextQuestion); //#endregion diff --git a/index.html b/index.html index b398b31..1995206 100644 --- a/index.html +++ b/index.html @@ -10,7 +10,7 @@ - + @@ -63,21 +63,21 @@

Lorem ipsum dolor sit amet consectetur
-
diff --git a/js/main.ts b/js/main.ts index adba694..1e52a75 100644 --- a/js/main.ts +++ b/js/main.ts @@ -30,7 +30,8 @@ const submitAnswerBtn = document.querySelector("#answer-btn") as HTMLElement const nextQuestionBtn = document.querySelector("#next-question-btn") as HTMLElement let currentStep: number = -1 -let currentQuestion = null +let userChoice: string = "" +let currentQuestion: any = null //#endregion @@ -42,7 +43,7 @@ const questions: Question[] = [ questionTitle: "Question 1", questionText: "What is a screen reader?", options: ["A car", "A digital text reader", "A cat", "A fruite"], - correctAnswer: "A digital text reader", + correctAnswer: "B", resultTitleWin: "Congratulations", resultExplanationWin: "You got it right!", resultTitleLose: "Oh no!", @@ -78,6 +79,19 @@ const questions: Question[] = [ //#region --- Functions ----- +//User Choise +const userChoiseIdentifier = (): void => { + const options = document.querySelectorAll('input[name="question1"]') as NodeListOf + options.forEach(button => { + button.addEventListener("change", (event) => { + userChoice = (event.target as HTMLInputElement).value; + console.log(`User selected: ${userChoice} and correct is ${currentQuestion.correctAnswer}`) + }) + }) +} + +userChoiseIdentifier() + //#region --- Burger Menu ----- const burgerMenu = (): void => { navLinks.classList.toggle("active") @@ -104,9 +118,28 @@ const loadNextQuestion = () => { //#endregion +//Load Answer +const loadNextAnswer = (event: Event): void => { + if (event) event.preventDefault() + + if (userChoice === currentQuestion.correctAnswer) { + console.log("You are correct!"); + resultTitle.innerText = currentQuestion.resultTitleWin; + resultExplanation.innerText = currentQuestion.resultExplanationWin + + } else if (userChoice === "") { + alert("Please select an answer.") + + } else { + console.log("Sorry, wrong answer.") + resultTitle.innerText = currentQuestion.resultTitleLose; + resultExplanation.innerText = currentQuestion.resultExplanationLose + } +} + //#region --- Event listeners ----- menuIcon.addEventListener("click", burgerMenu) startQuizBtn.addEventListener("click", loadNextQuestion) nextQuestionBtn.addEventListener("click", loadNextQuestion) - +submitAnswerBtn.addEventListener("click", loadNextAnswer) //#endregion diff --git a/js/temp-script.js b/js/temp-script.js index 0395429..eb0638a 100644 --- a/js/temp-script.js +++ b/js/temp-script.js @@ -1,39 +1,38 @@ -// const loadNextAnswer = () => { - - - -//! Next Slide -//! If correct ++ score -//! If incorrect dont add score -//! Save answer picked -// event.preventDefault() -// if (optionB === selected) { -// console.log("Answer") -// resultTitleWin.innerHTML = (currentQuestion.resultTitleWin) -// resultExplanationWin.innerHTML = (currentQuestion.resultExplanationWin) -// } else if (optionA || optionC || optionD === selected) { -// resultTitleLose.innerHTML = a(currentQuestion.resultTitle) -// resultExplanationLose.innerHTML = (currentQuestion.resultExplanation) -// } else { -// prompt("no choide was clicked") -// } -// } -// Select all elements with the class "options" -const options = document.querySelectorAll('input[name="question1"]') +const userChoiseIdentifier = () => { + const options = document.querySelectorAll('input[name="question1"]') + options.forEach(button => { + button.addEventListener("change", (event) => { + userChoice = event.target.value + console.log(`User selected: ${userChoice} and correct is ${currentQuestion.correctAnswer}`) + }) + }) +} + +userChoiseIdentifier() -// Loop through each element and add a change event listener -options.forEach(button => { - button.addEventListener("change", (event) => { - // Get the value of the changed element - let userChoice = event.target.value; +// const loadNextAnswer = (event) => { +// if (event) event.preventDefault() + +// if (userChoice === currentQuestion.correctAnswer) { +// console.log("You are correct!"); +// resultTitle.innerText = currentQuestion.resultTitleWin; +// resultExplanation.innerText = currentQuestion.resultExplanationWin + +// } else if (userChoice === "") { +// alert("Please select an answer.") + +// } else { +// console.log("Sorry, wrong answer.") +// resultTitle.innerText = currentQuestion.resultTitleLose; +// resultExplanation.innerText = currentQuestion.resultExplanationLose +// } +// } + +// submitAnswerBtn.addEventListener("click", loadNextAnswer) - // Log the user choice to the console - console.log(userChoice); - }); -}); // const loadPrevoius = () => { // //Startover @@ -63,11 +62,10 @@ options.forEach(button => { //eventlisteners -// submitAnswerBtn.addEventListener("click", loadNextAnswer) + // goBackBtn.addEventListener("click", loadPrevoius) // restartQuizBtn.addEventListener("click", startOver) -// const selectedOption = document.querySelector(`input[name="question1"]:checked`) // console.log(selectedOption) From ef1e29b96a4d99ddc64db7ac82a139afcc013079 Mon Sep 17 00:00:00 2001 From: simfrisk Date: Thu, 27 Mar 2025 10:58:26 +0100 Subject: [PATCH 26/40] bugs --- css/styles.css | 4 +--- index.html | 5 +---- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/css/styles.css b/css/styles.css index c73d883..8f2b2ae 100644 --- a/css/styles.css +++ b/css/styles.css @@ -169,7 +169,6 @@ section { display: flex; flex-direction: column; justify-content: center; - margin: 0 auto; outline: 1px dashed red; max-width: 180px; @@ -228,13 +227,12 @@ fieldset { padding: 0; margin: 0; min-width: 0; - display: flex; - flex-direction: column; padding: 8px 16px; } .radio-button-group { display: flex; + flex-direction: column; gap: 10px; } diff --git a/index.html b/index.html index 39f3e8e..5dc3dda 100644 --- a/index.html +++ b/index.html @@ -100,11 +100,8 @@

The correct answer is..

- + - - -

From 5cfe72228ecb223fa97cb9cebef17759a93135fe Mon Sep 17 00:00:00 2001 From: simfrisk Date: Thu, 27 Mar 2025 12:14:31 +0100 Subject: [PATCH 27/40] fixt load nex questionts --- dist/main.js | 39 ++++++++++++++++++++++----------------- index.html | 17 ++++++++--------- js/main.ts | 46 +++++++++++++++++++++++++++------------------- js/temp-script.js | 40 ++++++---------------------------------- 4 files changed, 63 insertions(+), 79 deletions(-) diff --git a/dist/main.js b/dist/main.js index 0dae9b6..74e477d 100644 --- a/dist/main.js +++ b/dist/main.js @@ -36,12 +36,12 @@ const questions = [ { id: "question2", questionTitle: "Question 2", - questionText: "What is ...2", + questionText: "What is an alt text? A description of..", currentStep: 2, - options: ["option A", "option B", "option C", "option D"], - correctAnswer: "option 1", - resultTitleWin: "answerTitle", - resultExplanationWin: "answerExplanation", + options: ["an image", "a div element", "a header", "a link"], + correctAnswer: "A", + resultTitleWin: "Congratulations", + resultExplanationWin: "You got it right!", resultTitleLose: "Oh no!", resultExplanationLose: "You got it wrong" }, @@ -49,18 +49,18 @@ const questions = [ id: "question3", currentStep: 3, questionTitle: "Question 3", - questionText: "What is ...3", - options: ["option A", "option B", "option C", "option D"], - correctAnswer: "option 1", - resultTitleWin: "answerTitle", - resultExplanationWin: "answerExplanation", + questionText: "What is the purpose of a 'skip to content' link?", + options: ["to skip advertisements", "to skip the navigation", "to skip to all images", "to skip the footer"], + correctAnswer: "B", + resultTitleWin: "Congratulations", + resultExplanationWin: "You got it right!", resultTitleLose: "Oh no!", resultExplanationLose: "You got it wrong" } ]; //#endregion //#region --- Functions ----- -//User Choise +//#region --- User Idetifier ----- const userChoiseIdentifier = () => { const options = document.querySelectorAll('input[name="question1"]'); options.forEach(button => { @@ -71,6 +71,7 @@ const userChoiseIdentifier = () => { }); }; userChoiseIdentifier(); +//#endregion //#region --- Burger Menu ----- const burgerMenu = () => { navLinks.classList.toggle("active"); @@ -83,18 +84,19 @@ const loadNextQuestion = () => { console.log("testing"); // nextStep() currentStep++; + //! If last question go to resaults currentQuestion = questions[currentStep]; questionTitle.innerHTML = (currentQuestion.questionTitle); questionText.innerHTML = (currentQuestion.questionText); - optionA.innerHTML = (`A: ${currentQuestion.options[0]}`); - optionB.innerHTML = (`B: ${currentQuestion.options[1]}`); - optionC.innerHTML = (`C: ${currentQuestion.options[2]}`); - optionD.innerHTML = (`D: ${currentQuestion.options[3]}`); + optionA.innerHTML = (currentQuestion.options[0]); + optionB.innerHTML = (currentQuestion.options[1]); + optionC.innerHTML = (currentQuestion.options[2]); + optionD.innerHTML = (currentQuestion.options[3]); // else // Show result slide }; //#endregion -//Load Answer +//#region --- Load answer ----- const loadNextAnswer = (event) => { if (event) event.preventDefault(); @@ -102,6 +104,7 @@ const loadNextAnswer = (event) => { console.log("You are correct!"); resultTitle.innerText = currentQuestion.resultTitleWin; resultExplanation.innerText = currentQuestion.resultExplanationWin; + //! Add + 1 to score } else if (userChoice === "") { alert("Please select an answer."); @@ -112,9 +115,11 @@ const loadNextAnswer = (event) => { resultExplanation.innerText = currentQuestion.resultExplanationLose; } }; +//#endregion //#region --- Event listeners ----- menuIcon.addEventListener("click", burgerMenu); startQuizBtn.addEventListener("click", loadNextQuestion); -nextQuestionBtn.addEventListener("click", loadNextQuestion); submitAnswerBtn.addEventListener("click", loadNextAnswer); +nextQuestionBtn.addEventListener("click", loadNextQuestion); +//#endregion //#endregion diff --git a/index.html b/index.html index 5dc3dda..27ab0cd 100644 --- a/index.html +++ b/index.html @@ -53,11 +53,11 @@

Web Accessibility Quiz

-

Question 1

+

-

Lorem ipsum dolor sit amet consectetur adipisicing elit?

+

@@ -68,16 +68,16 @@

Lorem ipsum dolor sit amet consectetur
Ledgend text - + - + - + - +
@@ -92,14 +92,13 @@

Lorem ipsum dolor sit amet consectetur
-

Congratulations

-

You got it right!

+

+

-

The correct answer is..

diff --git a/js/main.ts b/js/main.ts index 1e52a75..0a0ec62 100644 --- a/js/main.ts +++ b/js/main.ts @@ -52,12 +52,12 @@ const questions: Question[] = [ { id: "question2", questionTitle: "Question 2", - questionText: "What is ...2", + questionText: "What is an alt text? A description of..", currentStep: 2, - options: ["option A", "option B", "option C", "option D"], - correctAnswer: "option 1", - resultTitleWin: "answerTitle", - resultExplanationWin: "answerExplanation", + options: ["an image", "a div element", "a header", "a link"], + correctAnswer: "A", + resultTitleWin: "Congratulations", + resultExplanationWin: "You got it right!", resultTitleLose: "Oh no!", resultExplanationLose: "You got it wrong" }, @@ -65,11 +65,11 @@ const questions: Question[] = [ id: "question3", currentStep: 3, questionTitle: "Question 3", - questionText: "What is ...3", - options: ["option A", "option B", "option C", "option D"], - correctAnswer: "option 1", - resultTitleWin: "answerTitle", - resultExplanationWin: "answerExplanation", + questionText: "What is the purpose of a 'skip to content' link?", + options: ["to skip advertisements", "to skip the navigation", "to skip to all images", "to skip the footer"], + correctAnswer: "B", + resultTitleWin: "Congratulations", + resultExplanationWin: "You got it right!", resultTitleLose: "Oh no!", resultExplanationLose: "You got it wrong" } @@ -79,7 +79,7 @@ const questions: Question[] = [ //#region --- Functions ----- -//User Choise +//#region --- User Idetifier ----- const userChoiseIdentifier = (): void => { const options = document.querySelectorAll('input[name="question1"]') as NodeListOf options.forEach(button => { @@ -92,6 +92,8 @@ const userChoiseIdentifier = (): void => { userChoiseIdentifier() +//#endregion + //#region --- Burger Menu ----- const burgerMenu = (): void => { navLinks.classList.toggle("active") @@ -105,27 +107,29 @@ const loadNextQuestion = () => { console.log("testing") // nextStep() currentStep++ + //! If last question go to resaults currentQuestion = questions[currentStep] questionTitle.innerHTML = (currentQuestion.questionTitle) questionText.innerHTML = (currentQuestion.questionText) - optionA.innerHTML = (`A: ${currentQuestion.options[0]}`) - optionB.innerHTML = (`B: ${currentQuestion.options[1]}`) - optionC.innerHTML = (`C: ${currentQuestion.options[2]}`) - optionD.innerHTML = (`D: ${currentQuestion.options[3]}`) + optionA.innerHTML = (currentQuestion.options[0]) + optionB.innerHTML = (currentQuestion.options[1]) + optionC.innerHTML = (currentQuestion.options[2]) + optionD.innerHTML = (currentQuestion.options[3]) // else // Show result slide } //#endregion -//Load Answer +//#region --- Load answer ----- const loadNextAnswer = (event: Event): void => { if (event) event.preventDefault() if (userChoice === currentQuestion.correctAnswer) { - console.log("You are correct!"); - resultTitle.innerText = currentQuestion.resultTitleWin; + console.log("You are correct!") + resultTitle.innerText = currentQuestion.resultTitleWin resultExplanation.innerText = currentQuestion.resultExplanationWin + //! Add + 1 to score } else if (userChoice === "") { alert("Please select an answer.") @@ -136,10 +140,14 @@ const loadNextAnswer = (event: Event): void => { resultExplanation.innerText = currentQuestion.resultExplanationLose } } +//#endregion //#region --- Event listeners ----- menuIcon.addEventListener("click", burgerMenu) startQuizBtn.addEventListener("click", loadNextQuestion) -nextQuestionBtn.addEventListener("click", loadNextQuestion) submitAnswerBtn.addEventListener("click", loadNextAnswer) +nextQuestionBtn.addEventListener("click", loadNextQuestion) //#endregion + + +//#endregion \ No newline at end of file diff --git a/js/temp-script.js b/js/temp-script.js index 6a18379..703a96a 100644 --- a/js/temp-script.js +++ b/js/temp-script.js @@ -1,43 +1,15 @@ +// Reaults varible -// const userChoiseIdentifier = () => { -// const options = document.querySelectorAll('input[name="question1"]') -// options.forEach(button => { -// button.addEventListener("change", (event) => { -// userChoice = event.target.value -// console.log(`User selected: ${userChoice} and correct is ${currentQuestion.correctAnswer}`) -// }) -// }) -// } - -// userChoiseIdentifier() - -// const loadNextAnswer = (event) => { -// if (event) event.preventDefault() - -// if (userChoice === currentQuestion.correctAnswer) { -// console.log("You are correct!"); -// resultTitle.innerText = currentQuestion.resultTitleWin; -// resultExplanation.innerText = currentQuestion.resultExplanationWin - -// } else if (userChoice === "") { -// alert("Please select an answer.") -// } else { -// console.log("Sorry, wrong answer.") -// resultTitle.innerText = currentQuestion.resultTitleLose; -// resultExplanation.innerText = currentQuestion.resultExplanationLose -// } -// } -// submitAnswerBtn.addEventListener("click", loadNextAnswer) // const loadPrevoius = () => { // //Startover -// //Set user score === 0 -// //Set current step === 0 +// //Set user score -1 +// //Set current step -- // } // const startOver = () => { @@ -47,8 +19,9 @@ // } // const nextStep = () => { -// // Add the next object in the array -// // Next Slide +//Tömma allt +// Next Slide +// How do We do this // } // const score = () => { @@ -67,5 +40,4 @@ // goBackBtn.addEventListener("click", loadPrevoius) // restartQuizBtn.addEventListener("click", startOver) -// console.log(selectedOption) From f1f6ba4c5d9421d57d712337edf3051fff8bb126 Mon Sep 17 00:00:00 2001 From: simfrisk Date: Thu, 27 Mar 2025 13:46:51 +0100 Subject: [PATCH 28/40] added nex slide funtion --- css/styles.css | 32 +++++++++++++++++++++++++++++--- dist/main.js | 10 ++++++++++ index.html | 10 +++++----- js/main.ts | 15 +++++++++++++++ js/temp-script.js | 10 ++++++++++ 5 files changed, 69 insertions(+), 8 deletions(-) diff --git a/css/styles.css b/css/styles.css index 8f2b2ae..447f9bd 100644 --- a/css/styles.css +++ b/css/styles.css @@ -53,6 +53,7 @@ * { box-sizing: border-box; + margin: none; } body { @@ -87,6 +88,11 @@ body { /* Styling for nav in header and footer */ +header { + position: fixed; + z-index: 10; +} + nav { padding: 12px; } @@ -133,15 +139,34 @@ a { } main { - padding: 8px; + margin: 0 auto; - max-width: 400px; + +} + +.hide { + display: none; + transform: translateY(100dvh); + /* transition: transform 1s ease; */ + +} + +.card { + background-color: var(--primary); + position: absolute; + width: 80dvw; + height: 100dvh; + transition: transform 1s ease; +} + +.front { + z-index: 0; } /* styling for each section */ section { border: 1px dashed var(--secondary); - margin: 8px; + display: flex; flex-direction: column; align-items: center; @@ -273,6 +298,7 @@ i { footer { + display: none; flex-direction: row; justify-items: center; } diff --git a/dist/main.js b/dist/main.js index 74e477d..16e2975 100644 --- a/dist/main.js +++ b/dist/main.js @@ -15,6 +15,9 @@ const resultTitle = document.querySelector("#result-title"); const resultExplanation = document.querySelector("#result-explanation"); const submitAnswerBtn = document.querySelector("#answer-btn"); const nextQuestionBtn = document.querySelector("#next-question-btn"); +const startPage = document.querySelector("#start-page"); +const quizContainer = document.querySelector("#quiz-container"); +const resultContainer = document.querySelector("#result-container"); let currentStep = -1; let userChoice = ""; let currentQuestion = null; @@ -92,6 +95,10 @@ const loadNextQuestion = () => { optionB.innerHTML = (currentQuestion.options[1]); optionC.innerHTML = (currentQuestion.options[2]); optionD.innerHTML = (currentQuestion.options[3]); + quizContainer.style.display = ("block"); + quizContainer.style.transform = ("translateY(0dvh)"); + startPage.style.display = ("none"); + resultContainer.style.display = ("none"); // else // Show result slide }; @@ -114,6 +121,9 @@ const loadNextAnswer = (event) => { resultTitle.innerText = currentQuestion.resultTitleLose; resultExplanation.innerText = currentQuestion.resultExplanationLose; } + resultContainer.style.display = ("block"); + resultContainer.style.transform = ("translateY(0dvh)"); + quizContainer.style.display = ("none"); }; //#endregion //#region --- Event listeners ----- diff --git a/index.html b/index.html index 27ab0cd..dd2ea04 100644 --- a/index.html +++ b/index.html @@ -32,7 +32,7 @@
-
+

Welcome to our

@@ -52,7 +52,7 @@

Web Accessibility Quiz

-
+

@@ -67,7 +67,7 @@

Ledgend text - + @@ -89,7 +89,7 @@

-
+

@@ -105,7 +105,7 @@

-
+

Well done!

diff --git a/js/main.ts b/js/main.ts index 0a0ec62..f2a8815 100644 --- a/js/main.ts +++ b/js/main.ts @@ -28,6 +28,9 @@ const resultTitle = document.querySelector("#result-title") as HTMLElement const resultExplanation = document.querySelector("#result-explanation") as HTMLParagraphElement const submitAnswerBtn = document.querySelector("#answer-btn") as HTMLElement const nextQuestionBtn = document.querySelector("#next-question-btn") as HTMLElement +const startPage = document.querySelector("#start-page") as HTMLElement +const quizContainer = document.querySelector("#quiz-container") as HTMLElement +const resultContainer = document.querySelector("#result-container") as HTMLElement let currentStep: number = -1 let userChoice: string = "" @@ -115,6 +118,14 @@ const loadNextQuestion = () => { optionB.innerHTML = (currentQuestion.options[1]) optionC.innerHTML = (currentQuestion.options[2]) optionD.innerHTML = (currentQuestion.options[3]) + + quizContainer.style.display = ("block") + quizContainer.style.transform = ("translateY(0dvh)") + startPage.style.display = ("none") + resultContainer.style.display = ("none") + + + // else // Show result slide } @@ -139,6 +150,10 @@ const loadNextAnswer = (event: Event): void => { resultTitle.innerText = currentQuestion.resultTitleLose; resultExplanation.innerText = currentQuestion.resultExplanationLose } + + resultContainer.style.display = ("block") + resultContainer.style.transform = ("translateY(0dvh)") + quizContainer.style.display = ("none") } //#endregion diff --git a/js/temp-script.js b/js/temp-script.js index 703a96a..1f60790 100644 --- a/js/temp-script.js +++ b/js/temp-script.js @@ -1,7 +1,17 @@ // Reaults varible +// const nextCard = () => { +// // Start page +// // Question 1 quiz-container +// // Answer 1 result-container +// // Question 2 +// // Answer 2 +// // Question 3 +// // Answer 3 +// // Resaults quiz-result +// } From 26e30847735e339d52ed613d0970ce3fd22af539 Mon Sep 17 00:00:00 2001 From: simfrisk Date: Thu, 27 Mar 2025 13:58:06 +0100 Subject: [PATCH 29/40] small fix --- css/styles.css | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/css/styles.css b/css/styles.css index 447f9bd..ebd867b 100644 --- a/css/styles.css +++ b/css/styles.css @@ -154,7 +154,8 @@ main { .card { background-color: var(--primary); position: absolute; - width: 80dvw; + padding: 0 5%; + width: 100dvw; height: 100dvh; transition: transform 1s ease; } From f92c1217e4378beed1337ac7ba743b5f76ac1b3f Mon Sep 17 00:00:00 2001 From: simfrisk Date: Thu, 27 Mar 2025 15:09:51 +0100 Subject: [PATCH 30/40] fixed some stuff --- dist/main.js | 82 ++++++++++++++++++++++++++++++++------------------ index.html | 9 ++---- js/main.ts | 85 +++++++++++++++++++++++++++++++++------------------- 3 files changed, 110 insertions(+), 66 deletions(-) diff --git a/dist/main.js b/dist/main.js index 16e2975..2fe8570 100644 --- a/dist/main.js +++ b/dist/main.js @@ -18,6 +18,10 @@ const nextQuestionBtn = document.querySelector("#next-question-btn"); const startPage = document.querySelector("#start-page"); const quizContainer = document.querySelector("#quiz-container"); const resultContainer = document.querySelector("#result-container"); +const quizResult = document.querySelector("#quiz-result"); +const quizResultTitle = document.querySelector("#quiz-result-title"); +const quizResultText = document.querySelector("#quiz-result-text"); +const startAgainBtn = document.querySelector("#start-again-btn"); let currentStep = -1; let userChoice = ""; let currentQuestion = null; @@ -84,46 +88,65 @@ const burgerMenu = () => { //#endregion //#region --- Load Next Question ----- const loadNextQuestion = () => { - console.log("testing"); + userChoice = ""; // nextStep() currentStep++; - //! If last question go to resaults - currentQuestion = questions[currentStep]; - questionTitle.innerHTML = (currentQuestion.questionTitle); - questionText.innerHTML = (currentQuestion.questionText); - optionA.innerHTML = (currentQuestion.options[0]); - optionB.innerHTML = (currentQuestion.options[1]); - optionC.innerHTML = (currentQuestion.options[2]); - optionD.innerHTML = (currentQuestion.options[3]); - quizContainer.style.display = ("block"); - quizContainer.style.transform = ("translateY(0dvh)"); - startPage.style.display = ("none"); - resultContainer.style.display = ("none"); - // else - // Show result slide + if (currentStep >= questions.length) { + quizResultTitle.innerHTML = "Quiz is over"; + quizResultText.innerHTML = "You'r score is..."; + quizResult.style.display = ("block"); + quizResult.style.transform = ("translateY(0dvh)"); + resultContainer.style.display = ("none"); + } + else { + currentQuestion = questions[currentStep]; + questionTitle.innerHTML = (currentQuestion.questionTitle); + questionText.innerHTML = (currentQuestion.questionText); + optionA.innerHTML = (currentQuestion.options[0]); + optionB.innerHTML = (currentQuestion.options[1]); + optionC.innerHTML = (currentQuestion.options[2]); + optionD.innerHTML = (currentQuestion.options[3]); + quizContainer.style.display = ("block"); + quizContainer.style.transform = ("translateY(0dvh)"); + startPage.style.display = ("none"); + resultContainer.style.display = ("none"); + } }; //#endregion //#region --- Load answer ----- const loadNextAnswer = (event) => { if (event) event.preventDefault(); - if (userChoice === currentQuestion.correctAnswer) { - console.log("You are correct!"); - resultTitle.innerText = currentQuestion.resultTitleWin; - resultExplanation.innerText = currentQuestion.resultExplanationWin; - //! Add + 1 to score - } - else if (userChoice === "") { - alert("Please select an answer."); + if (currentStep < questions.length) { + if (userChoice === currentQuestion.correctAnswer) { + console.log("You are correct!"); + resultTitle.innerHTML = currentQuestion.resultTitleWin; + resultExplanation.innerHTML = currentQuestion.resultExplanationWin; + } + else if (userChoice === "") { + alert("Please select an answer."); + } + else { + console.log("Sorry, wrong answer."); + resultTitle.innerHTML = currentQuestion.resultTitleLose; + resultExplanation.innerHTML = currentQuestion.resultExplanationLose; + } } else { - console.log("Sorry, wrong answer."); - resultTitle.innerText = currentQuestion.resultTitleLose; - resultExplanation.innerText = currentQuestion.resultExplanationLose; + nextQuestionBtn.innerHTML = "test"; + console.log("Button text changed to 'test'"); } - resultContainer.style.display = ("block"); - resultContainer.style.transform = ("translateY(0dvh)"); - quizContainer.style.display = ("none"); + resultContainer.style.display = "block"; + resultContainer.style.transform = "translateY(0dvh)"; + quizContainer.style.display = "none"; +}; +//#endregion +//#region --- Start over ---- +const startAgain = () => { + startPage.style.display = ("block"); + startPage.style.transform = ("translateY(0dvh)"); + quizResult.style.display = ("none"); + currentStep = -1; }; //#endregion //#region --- Event listeners ----- @@ -131,5 +154,6 @@ menuIcon.addEventListener("click", burgerMenu); startQuizBtn.addEventListener("click", loadNextQuestion); submitAnswerBtn.addEventListener("click", loadNextAnswer); nextQuestionBtn.addEventListener("click", loadNextQuestion); +startAgainBtn.addEventListener("click", startAgain); //#endregion //#endregion diff --git a/index.html b/index.html index dd2ea04..c9e5d05 100644 --- a/index.html +++ b/index.html @@ -95,9 +95,6 @@

-

-

-
@@ -108,12 +105,12 @@

-

Well done!

-

You got 10/10!

+

+

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Voluptatum modi similique quis.

- +
diff --git a/js/main.ts b/js/main.ts index f2a8815..199d079 100644 --- a/js/main.ts +++ b/js/main.ts @@ -31,6 +31,11 @@ const nextQuestionBtn = document.querySelector("#next-question-btn") as HTMLElem const startPage = document.querySelector("#start-page") as HTMLElement const quizContainer = document.querySelector("#quiz-container") as HTMLElement const resultContainer = document.querySelector("#result-container") as HTMLElement +const quizResult = document.querySelector("#quiz-result") as HTMLElement +const quizResultTitle = document.querySelector("#quiz-result-title") as HTMLElement +const quizResultText = document.querySelector("#quiz-result-text") as HTMLParagraphElement +const startAgainBtn = document.querySelector("#start-again-btn") as HTMLButtonElement + let currentStep: number = -1 let userChoice: string = "" @@ -107,27 +112,31 @@ const burgerMenu = (): void => { //#region --- Load Next Question ----- const loadNextQuestion = () => { - console.log("testing") + userChoice = "" // nextStep() currentStep++ - //! If last question go to resaults - currentQuestion = questions[currentStep] - questionTitle.innerHTML = (currentQuestion.questionTitle) - questionText.innerHTML = (currentQuestion.questionText) - optionA.innerHTML = (currentQuestion.options[0]) - optionB.innerHTML = (currentQuestion.options[1]) - optionC.innerHTML = (currentQuestion.options[2]) - optionD.innerHTML = (currentQuestion.options[3]) - - quizContainer.style.display = ("block") - quizContainer.style.transform = ("translateY(0dvh)") - startPage.style.display = ("none") - resultContainer.style.display = ("none") - + if (currentStep >= questions.length) { + quizResultTitle.innerHTML = "Quiz is over" + quizResultText.innerHTML = "You'r score is..." + quizResult.style.display = ("block") + quizResult.style.transform = ("translateY(0dvh)") + resultContainer.style.display = ("none") - // else - // Show result slide + } else { + currentQuestion = questions[currentStep] + questionTitle.innerHTML = (currentQuestion.questionTitle) + questionText.innerHTML = (currentQuestion.questionText) + optionA.innerHTML = (currentQuestion.options[0]) + optionB.innerHTML = (currentQuestion.options[1]) + optionC.innerHTML = (currentQuestion.options[2]) + optionD.innerHTML = (currentQuestion.options[3]) + + quizContainer.style.display = ("block") + quizContainer.style.transform = ("translateY(0dvh)") + startPage.style.display = ("none") + resultContainer.style.display = ("none") + } } //#endregion @@ -136,25 +145,38 @@ const loadNextQuestion = () => { const loadNextAnswer = (event: Event): void => { if (event) event.preventDefault() - if (userChoice === currentQuestion.correctAnswer) { - console.log("You are correct!") - resultTitle.innerText = currentQuestion.resultTitleWin - resultExplanation.innerText = currentQuestion.resultExplanationWin - //! Add + 1 to score - - } else if (userChoice === "") { - alert("Please select an answer.") + if (currentStep < questions.length) { + if (userChoice === currentQuestion.correctAnswer) { + console.log("You are correct!"); + resultTitle.innerHTML = currentQuestion.resultTitleWin; + resultExplanation.innerHTML = currentQuestion.resultExplanationWin; + } else if (userChoice === "") { + alert("Please select an answer."); + } else { + console.log("Sorry, wrong answer."); + resultTitle.innerHTML = currentQuestion.resultTitleLose; + resultExplanation.innerHTML = currentQuestion.resultExplanationLose; + } } else { - console.log("Sorry, wrong answer.") - resultTitle.innerText = currentQuestion.resultTitleLose; - resultExplanation.innerText = currentQuestion.resultExplanationLose + nextQuestionBtn.innerHTML = "test" + console.log("Button text changed to 'test'"); } + resultContainer.style.display = "block"; + resultContainer.style.transform = "translateY(0dvh)"; + quizContainer.style.display = "none"; +} +//#endregion + +//#region --- Start over ---- +const startAgain = (): void => { + startPage.style.display = ("block") + startPage.style.transform = ("translateY(0dvh)") + quizResult.style.display = ("none") + currentStep = -1 - resultContainer.style.display = ("block") - resultContainer.style.transform = ("translateY(0dvh)") - quizContainer.style.display = ("none") } + //#endregion //#region --- Event listeners ----- @@ -162,6 +184,7 @@ menuIcon.addEventListener("click", burgerMenu) startQuizBtn.addEventListener("click", loadNextQuestion) submitAnswerBtn.addEventListener("click", loadNextAnswer) nextQuestionBtn.addEventListener("click", loadNextQuestion) +startAgainBtn.addEventListener("click", startAgain) //#endregion From f71ad68a2e340828d8adef649758a1390d7fa2b8 Mon Sep 17 00:00:00 2001 From: simfrisk Date: Thu, 27 Mar 2025 18:24:56 +0100 Subject: [PATCH 31/40] added slide function --- css/styles.css | 2 +- dist/main.js | 52 ++++++++++++++++++++++++++++++++++++++++---------- index.html | 2 +- js/main.ts | 42 ++++++++++++++++++++++++++++++++-------- 4 files changed, 78 insertions(+), 20 deletions(-) diff --git a/css/styles.css b/css/styles.css index ebd867b..ef3c4f6 100644 --- a/css/styles.css +++ b/css/styles.css @@ -157,7 +157,7 @@ main { padding: 0 5%; width: 100dvw; height: 100dvh; - transition: transform 1s ease; + transition: transform .6s ease; } .front { diff --git a/dist/main.js b/dist/main.js index 2fe8570..6b0d58e 100644 --- a/dist/main.js +++ b/dist/main.js @@ -94,9 +94,17 @@ const loadNextQuestion = () => { if (currentStep >= questions.length) { quizResultTitle.innerHTML = "Quiz is over"; quizResultText.innerHTML = "You'r score is..."; + resultContainer.style.zIndex = ("1"); + quizResult.style.zIndex = ("0"); quizResult.style.display = ("block"); - quizResult.style.transform = ("translateY(0dvh)"); - resultContainer.style.display = ("none"); + // quizContainer.style.display = ("block") + requestAnimationFrame(() => { + quizResult.style.transform = ("translateY(0dvh)"); + }); + setTimeout(() => { + resultContainer.style.display = ("none"); + resultContainer.style.transform = ("translateY(100dvh)"); + }, 500); } else { currentQuestion = questions[currentStep]; @@ -106,10 +114,19 @@ const loadNextQuestion = () => { optionB.innerHTML = (currentQuestion.options[1]); optionC.innerHTML = (currentQuestion.options[2]); optionD.innerHTML = (currentQuestion.options[3]); + resultContainer.style.zIndex = ("0"); + startPage.style.zIndex = ("0"); + quizContainer.style.zIndex = ("1"); quizContainer.style.display = ("block"); - quizContainer.style.transform = ("translateY(0dvh)"); - startPage.style.display = ("none"); - resultContainer.style.display = ("none"); + requestAnimationFrame(() => { + quizContainer.style.transform = ("translateY(0dvh)"); + }); + setTimeout(() => { + startPage.style.display = ("none"); + resultContainer.style.display = ("none"); + resultContainer.style.transform = ("translateY(100dvh)"); + startPage.style.transform = ("translateY(100dvh)"); + }, 500); } }; //#endregion @@ -136,17 +153,32 @@ const loadNextAnswer = (event) => { nextQuestionBtn.innerHTML = "test"; console.log("Button text changed to 'test'"); } + quizContainer.style.zIndex = ("0"); + resultContainer.style.zIndex = ("1"); resultContainer.style.display = "block"; - resultContainer.style.transform = "translateY(0dvh)"; - quizContainer.style.display = "none"; + // quizContainer.style.display = ("block") + requestAnimationFrame(() => { + resultContainer.style.transform = "translateY(0dvh)"; + }); + setTimeout(() => { + quizContainer.style.display = "none"; + quizContainer.style.transform = ("translateY(100dvh"); + }, 500); }; //#endregion //#region --- Start over ---- const startAgain = () => { - startPage.style.display = ("block"); - startPage.style.transform = ("translateY(0dvh)"); - quizResult.style.display = ("none"); currentStep = -1; + startPage.style.zIndex = ("1"); + startPage.style.display = ("block"); + requestAnimationFrame(() => { + startPage.style.transform = ("translateY(0dvh)"); + }); + setTimeout(() => { + quizResult.style.display = ("none"); + quizResult.style.transform = ("translateY(100dvh"); + }, 500); + }; //#endregion //#region --- Event listeners ----- diff --git a/index.html b/index.html index c9e5d05..6fa9f8f 100644 --- a/index.html +++ b/index.html @@ -32,7 +32,7 @@
-
+

Welcome to our

diff --git a/js/main.ts b/js/main.ts index 199d079..026d78b 100644 --- a/js/main.ts +++ b/js/main.ts @@ -116,12 +116,20 @@ const loadNextQuestion = () => { // nextStep() currentStep++ if (currentStep >= questions.length) { - quizResultTitle.innerHTML = "Quiz is over" quizResultText.innerHTML = "You'r score is..." + resultContainer.style.zIndex = ("0") + quizResult.style.zIndex = ("1") quizResult.style.display = ("block") - quizResult.style.transform = ("translateY(0dvh)") - resultContainer.style.display = ("none") + // quizContainer.style.display = ("block") + requestAnimationFrame(() => { + quizResult.style.transform = ("translateY(0dvh)") + }); + setTimeout(() => { + resultContainer.style.display = ("none") + resultContainer.style.transform = ("translateY(100dvh)") + }, 50 + ) } else { currentQuestion = questions[currentStep] @@ -132,10 +140,17 @@ const loadNextQuestion = () => { optionC.innerHTML = (currentQuestion.options[2]) optionD.innerHTML = (currentQuestion.options[3]) + resultContainer.style.zIndex = ("0") + quizContainer.style.zIndex = ("1") quizContainer.style.display = ("block") - quizContainer.style.transform = ("translateY(0dvh)") - startPage.style.display = ("none") - resultContainer.style.display = ("none") + requestAnimationFrame(() => { + quizContainer.style.transform = ("translateY(0dvh)") + }); + setTimeout(() => { + startPage.style.display = ("none") + resultContainer.style.display = ("none") + resultContainer.style.transform = ("translateY(100dvh)") + }, 500) } } @@ -162,14 +177,25 @@ const loadNextAnswer = (event: Event): void => { nextQuestionBtn.innerHTML = "test" console.log("Button text changed to 'test'"); } + + quizContainer.style.zIndex = ("0") + resultContainer.style.zIndex = ("1") resultContainer.style.display = "block"; - resultContainer.style.transform = "translateY(0dvh)"; - quizContainer.style.display = "none"; + // quizContainer.style.display = ("block") + requestAnimationFrame(() => { + resultContainer.style.transform = "translateY(0dvh)"; + }); + setTimeout(() => { + quizContainer.style.display = "none"; + quizContainer.style.transform = ("translateY(100dvh") + }, 500 + ) } //#endregion //#region --- Start over ---- const startAgain = (): void => { + startPage.style.zIndex = ("0") startPage.style.display = ("block") startPage.style.transform = ("translateY(0dvh)") quizResult.style.display = ("none") From 0419bdda5346ba3a2233bdf2bfd167d904e5fcc3 Mon Sep 17 00:00:00 2001 From: simfrisk Date: Thu, 27 Mar 2025 19:05:46 +0100 Subject: [PATCH 32/40] got the score workning --- dist/main.js | 28 ++++++++++++---------------- js/main.ts | 6 +++++- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/dist/main.js b/dist/main.js index 6b0d58e..1ef4ffe 100644 --- a/dist/main.js +++ b/dist/main.js @@ -25,6 +25,7 @@ const startAgainBtn = document.querySelector("#start-again-btn"); let currentStep = -1; let userChoice = ""; let currentQuestion = null; +let score = 0; //#endregion //#region --- Object ----- const questions = [ @@ -93,9 +94,9 @@ const loadNextQuestion = () => { currentStep++; if (currentStep >= questions.length) { quizResultTitle.innerHTML = "Quiz is over"; - quizResultText.innerHTML = "You'r score is..."; - resultContainer.style.zIndex = ("1"); - quizResult.style.zIndex = ("0"); + quizResultText.innerHTML = `Your score is: ${score} / ${questions.length}`; + resultContainer.style.zIndex = ("0"); + quizResult.style.zIndex = ("1"); quizResult.style.display = ("block"); // quizContainer.style.display = ("block") requestAnimationFrame(() => { @@ -104,7 +105,7 @@ const loadNextQuestion = () => { setTimeout(() => { resultContainer.style.display = ("none"); resultContainer.style.transform = ("translateY(100dvh)"); - }, 500); + }, 50); } else { currentQuestion = questions[currentStep]; @@ -115,7 +116,6 @@ const loadNextQuestion = () => { optionC.innerHTML = (currentQuestion.options[2]); optionD.innerHTML = (currentQuestion.options[3]); resultContainer.style.zIndex = ("0"); - startPage.style.zIndex = ("0"); quizContainer.style.zIndex = ("1"); quizContainer.style.display = ("block"); requestAnimationFrame(() => { @@ -125,7 +125,6 @@ const loadNextQuestion = () => { startPage.style.display = ("none"); resultContainer.style.display = ("none"); resultContainer.style.transform = ("translateY(100dvh)"); - startPage.style.transform = ("translateY(100dvh)"); }, 500); } }; @@ -139,6 +138,8 @@ const loadNextAnswer = (event) => { console.log("You are correct!"); resultTitle.innerHTML = currentQuestion.resultTitleWin; resultExplanation.innerHTML = currentQuestion.resultExplanationWin; + score++; + console.log(score); } else if (userChoice === "") { alert("Please select an answer."); @@ -168,17 +169,12 @@ const loadNextAnswer = (event) => { //#endregion //#region --- Start over ---- const startAgain = () => { - currentStep = -1; - startPage.style.zIndex = ("1"); + startPage.style.zIndex = ("0"); startPage.style.display = ("block"); - requestAnimationFrame(() => { - startPage.style.transform = ("translateY(0dvh)"); - }); - setTimeout(() => { - quizResult.style.display = ("none"); - quizResult.style.transform = ("translateY(100dvh"); - }, 500); - + startPage.style.transform = ("translateY(0dvh)"); + quizResult.style.display = ("none"); + currentStep = -1; + score = 0; }; //#endregion //#region --- Event listeners ----- diff --git a/js/main.ts b/js/main.ts index 026d78b..0033b33 100644 --- a/js/main.ts +++ b/js/main.ts @@ -40,6 +40,7 @@ const startAgainBtn = document.querySelector("#start-again-btn") as HTMLButtonEl let currentStep: number = -1 let userChoice: string = "" let currentQuestion: any = null +let score: number = 0 //#endregion @@ -117,7 +118,7 @@ const loadNextQuestion = () => { currentStep++ if (currentStep >= questions.length) { quizResultTitle.innerHTML = "Quiz is over" - quizResultText.innerHTML = "You'r score is..." + quizResultText.innerHTML = `Your score is: ${score} / ${questions.length}` resultContainer.style.zIndex = ("0") quizResult.style.zIndex = ("1") quizResult.style.display = ("block") @@ -165,6 +166,8 @@ const loadNextAnswer = (event: Event): void => { console.log("You are correct!"); resultTitle.innerHTML = currentQuestion.resultTitleWin; resultExplanation.innerHTML = currentQuestion.resultExplanationWin; + score++ + console.log(score) } else if (userChoice === "") { alert("Please select an answer."); } else { @@ -200,6 +203,7 @@ const startAgain = (): void => { startPage.style.transform = ("translateY(0dvh)") quizResult.style.display = ("none") currentStep = -1 + score = 0 } From 56ade5d9949aab4f1ffd73123cb682922e3cc4ba Mon Sep 17 00:00:00 2001 From: Sofie Date: Fri, 28 Mar 2025 08:56:38 +0100 Subject: [PATCH 33/40] styling fixes --- css/styles.css | 23 +++--- index.html | 203 +++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 171 insertions(+), 55 deletions(-) diff --git a/css/styles.css b/css/styles.css index ef3c4f6..c1a6570 100644 --- a/css/styles.css +++ b/css/styles.css @@ -154,7 +154,7 @@ main { .card { background-color: var(--primary); position: absolute; - padding: 0 5%; + padding: 16px; width: 100dvw; height: 100dvh; transition: transform .6s ease; @@ -166,28 +166,25 @@ main { /* styling for each section */ section { - border: 1px dashed var(--secondary); - + border: 4px solid var(--secondary); display: flex; flex-direction: column; - align-items: center; - justify-content: center; + justify-content: space-between; text-align: center; - gap: 16px; - padding: 24px; + gap: 12px; + } .speech-bubble { display: flex; justify-content: center; - align-items: center; background-image: url("../img/speech-bubble2.png"); background-size: contain; background-repeat: no-repeat; background-position: center; width: 100%; height: auto; - min-height: 220px; + min-height: 250px; } @@ -214,11 +211,12 @@ h1 { h2, h3 { - font-size: 16px; + font-size: 18px; } button { font-family: 'Futura', Helvetica, sans-serif; + font-size: 16px; border: 2px solid var(--secondary); border-radius: 8px; background-color: var(--complementary); @@ -244,7 +242,7 @@ button:active { /* Quiz questions form layout */ form { - padding: 8px 16px; + padding: 8px 24px; } fieldset { @@ -253,13 +251,12 @@ fieldset { padding: 0; margin: 0; min-width: 0; - padding: 8px 16px; } .radio-button-group { display: flex; flex-direction: column; - gap: 10px; + gap: 2px; } input[type="radio"] { diff --git a/index.html b/index.html index 6fa9f8f..20aec49 100644 --- a/index.html +++ b/index.html @@ -3,24 +3,52 @@ - + Web Accessibility Quiz - - + + - - - + + + - +
- -

>

-

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Voluptatum modi similique quis.

+ +
-
-

- -
+
+

+ +
-

+

@@ -116,117 +67,51 @@

Web Accessibility Quiz

Ledgend text - - - - - - - - - - - + + + + + + + + + + +
- +
-
-
+
+
-

-

+

+

- +
-
-
+
+
-

-

+

+

- +
@@ -234,13 +119,9 @@

Web Accessibility Quiz

-
diff --git a/js/main.ts b/js/main.ts index f8deda2..4e78f40 100644 --- a/js/main.ts +++ b/js/main.ts @@ -94,7 +94,7 @@ const userChoiseIdentifier = (): void => { const options = document.querySelectorAll('input[name="question1"]') as NodeListOf options.forEach(button => { button.addEventListener("change", (event) => { - userChoice = (event.target as HTMLInputElement).value; + userChoice = (event.target as HTMLInputElement).value console.log(`User selected: ${userChoice} and correct is ${currentQuestion.correctAnswer}`) }) }) @@ -126,14 +126,14 @@ const loadNextQuestion = () => { quizResultText.innerHTML = `Your score is: ${score} / ${questions.length}` resultContainer.style.zIndex = ("0") quizResult.style.zIndex = ("1") - quizResult.style.display = ("block") - // quizContainer.style.display = ("block") + quizResult.classList.remove("hide") + // quizContainer.classList.remove("hide") requestAnimationFrame(() => { - quizResult.style.transform = ("translateY(0dvh)") - }); + quizResult.classList.remove("offset") + }) setTimeout(() => { - resultContainer.style.display = ("none") - resultContainer.style.transform = ("translateY(100dvh)") + resultContainer.classList.add("hide") + resultContainer.classList.add("offset") }, 50 ) @@ -148,14 +148,14 @@ const loadNextQuestion = () => { resultContainer.style.zIndex = ("0") quizContainer.style.zIndex = ("1") - quizContainer.style.display = ("block") + quizContainer.classList.remove("hide") requestAnimationFrame(() => { - quizContainer.style.transform = ("translateY(0dvh)") - }); + quizContainer.classList.remove("offset") + }) setTimeout(() => { - startPage.style.display = ("none") - resultContainer.style.display = ("none") - resultContainer.style.transform = ("translateY(100dvh)") + startPage.classList.add("hide") + resultContainer.classList.add("hide") + resultContainer.classList.add("offset") }, 500) } } @@ -168,34 +168,34 @@ const loadNextAnswer = (event: Event): void => { if (currentStep < questions.length) { if (userChoice === currentQuestion.correctAnswer) { - console.log("You are correct!"); - resultTitle.innerHTML = currentQuestion.resultTitleWin; - resultExplanation.innerHTML = currentQuestion.resultExplanationWin; + console.log("You are correct!") + resultTitle.innerHTML = currentQuestion.resultTitleWin + resultExplanation.innerHTML = currentQuestion.resultExplanationWin score++ console.log(score) } else if (userChoice === "") { - alert("Please select an answer."); + alert("Please select an answer.") } else { - console.log("Sorry, wrong answer."); - resultTitle.innerHTML = currentQuestion.resultTitleLose; - resultExplanation.innerHTML = currentQuestion.resultExplanationLose; + console.log("Sorry, wrong answer.") + resultTitle.innerHTML = currentQuestion.resultTitleLose + resultExplanation.innerHTML = currentQuestion.resultExplanationLose } } else { nextQuestionBtn.innerHTML = "test" - console.log("Button text changed to 'test'"); + console.log("Button text changed to 'test'") } quizContainer.style.zIndex = ("0") resultContainer.style.zIndex = ("1") - resultContainer.style.display = "block"; - // quizContainer.style.display = ("block") + resultContainer.classList.remove("hide") + // quizContainer.classList.remove("hide") requestAnimationFrame(() => { - resultContainer.style.transform = "translateY(0dvh)"; - }); + resultContainer.classList.remove("offset") + }) setTimeout(() => { - quizContainer.style.display = "none"; - quizContainer.style.transform = ("translateY(100dvh") + quizContainer.classList.add("hide") + quizContainer.classList.add("offset") }, 500 ) } @@ -204,9 +204,9 @@ const loadNextAnswer = (event: Event): void => { //#region --- Start over ---- const startAgain = (): void => { startPage.style.zIndex = ("0") - startPage.style.display = ("block") - startPage.style.transform = ("translateY(0dvh)") - quizResult.style.display = ("none") + startPage.classList.remove("hide") + startPage.classList.remove("offset") + quizResult.classList.add("hide") currentStep = -1 score = 0 From ff215558cdaf98745a977fac4b2ef13004a68cf4 Mon Sep 17 00:00:00 2001 From: simfrisk Date: Sat, 29 Mar 2025 10:39:23 +0100 Subject: [PATCH 37/40] fixed it back --- css/styles.css | 5 +-- dist/main.js | 80 +++++++++++++---------------------------------- dist/questions.js | 41 ++++++++++++++++++++++++ index.html | 13 ++++---- js/main.ts | 50 ++++------------------------- js/questions.ts | 41 ++++++++++++++++++++++++ 6 files changed, 119 insertions(+), 111 deletions(-) create mode 100644 dist/questions.js create mode 100644 js/questions.ts diff --git a/css/styles.css b/css/styles.css index 3d142fe..2548b9e 100644 --- a/css/styles.css +++ b/css/styles.css @@ -176,7 +176,7 @@ section { border: 4px solid var(--secondary); display: flex; flex-direction: column; - justify-content: space-evenly; + /* justify-content: space-evenly; */ text-align: center; gap: 12px; } @@ -265,7 +265,8 @@ fieldset { } input[type="radio"] { - display: none; + /* visibility: hidden; */ + height: 0; } .options { diff --git a/dist/main.js b/dist/main.js index 495a368..ddfc5f8 100644 --- a/dist/main.js +++ b/dist/main.js @@ -22,52 +22,14 @@ const quizResult = document.querySelector("#quiz-result"); const quizResultTitle = document.querySelector("#quiz-result-title"); const quizResultText = document.querySelector("#quiz-result-text"); const startAgainBtn = document.querySelector("#start-again-btn"); +const selectionForm = document.querySelector("#selection-from"); +const radioButtonGroup = document.querySelector(".radio-button-group"); const radioButtonCheck = document.querySelectorAll('input[name="question1"]'); let currentStep = -1; let userChoice = ""; let currentQuestion = null; let score = 0; //#endregion -//#region --- Object ----- -const questions = [ - { - id: "question1", - currentStep: 1, - questionTitle: "Question 1", - questionText: "What is a screen reader?", - options: ["A car", "A digital text reader", "A cat", "A fruite"], - correctAnswer: "B", - resultTitleWin: "Congratulations", - resultExplanationWin: "You got it right!", - resultTitleLose: "Oh no!", - resultExplanationLose: "You got it wrong" - }, - { - id: "question2", - questionTitle: "Question 2", - questionText: "What is an alt text? A description of..", - currentStep: 2, - options: ["an image", "a div element", "a header", "a link"], - correctAnswer: "A", - resultTitleWin: "Congratulations", - resultExplanationWin: "You got it right!", - resultTitleLose: "Oh no!", - resultExplanationLose: "You got it wrong" - }, - { - id: "question3", - currentStep: 3, - questionTitle: "Question 3", - questionText: "What is the purpose of a 'skip to content' link?", - options: ["to skip advertisements", "to skip the navigation", "to skip to all images", "to skip the footer"], - correctAnswer: "B", - resultTitleWin: "Congratulations", - resultExplanationWin: "You got it right!", - resultTitleLose: "Oh no!", - resultExplanationLose: "You got it wrong" - } -]; -//#endregion //#region --- Functions ----- //#region --- User Idetifier ----- const userChoiseIdentifier = () => { @@ -100,14 +62,14 @@ const loadNextQuestion = () => { quizResultText.innerHTML = `Your score is: ${score} / ${questions.length}`; resultContainer.style.zIndex = ("0"); quizResult.style.zIndex = ("1"); - quizResult.style.display = ("block"); - // quizContainer.style.display = ("block") + quizResult.classList.remove("hide"); + // quizContainer.classList.remove("hide") requestAnimationFrame(() => { - quizResult.style.transform = ("translateY(0dvh)"); + quizResult.classList.remove("offset"); }); setTimeout(() => { - resultContainer.style.display = ("none"); - resultContainer.style.transform = ("translateY(100dvh)"); + resultContainer.classList.add("hide"); + resultContainer.classList.add("offset"); }, 50); } else { @@ -120,14 +82,14 @@ const loadNextQuestion = () => { optionD.innerHTML = (currentQuestion.options[3]); resultContainer.style.zIndex = ("0"); quizContainer.style.zIndex = ("1"); - quizContainer.style.display = ("block"); + quizContainer.classList.remove("hide"); requestAnimationFrame(() => { - quizContainer.style.transform = ("translateY(0dvh)"); + quizContainer.classList.remove("offset"); }); setTimeout(() => { - startPage.style.display = ("none"); - resultContainer.style.display = ("none"); - resultContainer.style.transform = ("translateY(100dvh)"); + startPage.classList.add("hide"); + resultContainer.classList.add("hide"); + resultContainer.classList.add("offset"); }, 500); } }; @@ -159,27 +121,28 @@ const loadNextAnswer = (event) => { } quizContainer.style.zIndex = ("0"); resultContainer.style.zIndex = ("1"); - resultContainer.style.display = "block"; - // quizContainer.style.display = ("block") + resultContainer.classList.remove("hide"); + // quizContainer.classList.remove("hide") requestAnimationFrame(() => { - resultContainer.style.transform = "translateY(0dvh)"; + resultContainer.classList.remove("offset"); }); setTimeout(() => { - quizContainer.style.display = "none"; - quizContainer.style.transform = ("translateY(100dvh"); + quizContainer.classList.add("hide"); + quizContainer.classList.add("offset"); }, 500); }; //#endregion //#region --- Start over ---- const startAgain = () => { startPage.style.zIndex = ("0"); - startPage.style.display = ("block"); - startPage.style.transform = ("translateY(0dvh)"); - quizResult.style.display = ("none"); + startPage.classList.remove("hide"); + startPage.classList.remove("offset"); + quizResult.classList.add("hide"); currentStep = -1; score = 0; }; //#endregion +//#endregion //#region --- Event listeners ----- menuIcon.addEventListener("click", burgerMenu); startQuizBtn.addEventListener("click", loadNextQuestion); @@ -187,4 +150,3 @@ submitAnswerBtn.addEventListener("click", loadNextAnswer); nextQuestionBtn.addEventListener("click", loadNextQuestion); startAgainBtn.addEventListener("click", startAgain); //#endregion -//#endregion diff --git a/dist/questions.js b/dist/questions.js new file mode 100644 index 0000000..4a047b8 --- /dev/null +++ b/dist/questions.js @@ -0,0 +1,41 @@ +"use strict"; +//#region --- Object ----- +const questions = [ + { + id: "question1", + currentStep: 1, + questionTitle: "Question 1", + questionText: "What is a screen reader?", + options: ["A car", "A digital text reader", "A cat", "A fruite"], + correctAnswer: "B", + resultTitleWin: "Congratulations", + resultExplanationWin: "You got it right!", + resultTitleLose: "Oh no!", + resultExplanationLose: "You got it wrong" + }, + { + id: "question2", + questionTitle: "Question 2", + questionText: "What is an alt text? A description of..", + currentStep: 2, + options: ["an image", "a div element", "a header", "a link"], + correctAnswer: "A", + resultTitleWin: "Congratulations", + resultExplanationWin: "You got it right!", + resultTitleLose: "Oh no!", + resultExplanationLose: "You got it wrong" + }, + { + id: "question3", + currentStep: 3, + questionTitle: "Question 3", + questionText: "What is the purpose of a 'skip to content' link?", + options: ["to skip advertisements", "to skip the navigation", "to skip to all images", "to skip the footer"], + correctAnswer: "B", + resultTitleWin: "Congratulations", + resultExplanationWin: "You got it right!", + resultTitleLose: "Oh no!", + resultExplanationLose: "You got it wrong" + } +]; +//#endregion diff --git a/index.html b/index.html index fc11028..f481f19 100644 --- a/index.html +++ b/index.html @@ -9,8 +9,9 @@ + - + @@ -52,7 +53,7 @@

Web Accessibility Quiz

-
+

@@ -61,7 +62,7 @@

-
+
@@ -82,14 +83,14 @@

- +
-
+

@@ -103,7 +104,7 @@

-
+

diff --git a/js/main.ts b/js/main.ts index 4e78f40..9430136 100644 --- a/js/main.ts +++ b/js/main.ts @@ -35,6 +35,8 @@ const quizResult = document.querySelector("#quiz-result") as HTMLElement const quizResultTitle = document.querySelector("#quiz-result-title") as HTMLElement const quizResultText = document.querySelector("#quiz-result-text") as HTMLParagraphElement const startAgainBtn = document.querySelector("#start-again-btn") as HTMLButtonElement +const selectionForm = document.querySelector("#selection-from") as HTMLFormElement +const radioButtonGroup = document.querySelector(".radio-button-group") as HTMLDivElement const radioButtonCheck = document.querySelectorAll('input[name="question1"]') as NodeListOf @@ -45,48 +47,6 @@ let score: number = 0 //#endregion -//#region --- Object ----- -const questions: Question[] = [ - { - id: "question1", - currentStep: 1, - questionTitle: "Question 1", - questionText: "What is a screen reader?", - options: ["A car", "A digital text reader", "A cat", "A fruite"], - correctAnswer: "B", - resultTitleWin: "Congratulations", - resultExplanationWin: "You got it right!", - resultTitleLose: "Oh no!", - resultExplanationLose: "You got it wrong" - }, - { - id: "question2", - questionTitle: "Question 2", - questionText: "What is an alt text? A description of..", - currentStep: 2, - options: ["an image", "a div element", "a header", "a link"], - correctAnswer: "A", - resultTitleWin: "Congratulations", - resultExplanationWin: "You got it right!", - resultTitleLose: "Oh no!", - resultExplanationLose: "You got it wrong" - }, - { - id: "question3", - currentStep: 3, - questionTitle: "Question 3", - questionText: "What is the purpose of a 'skip to content' link?", - options: ["to skip advertisements", "to skip the navigation", "to skip to all images", "to skip the footer"], - correctAnswer: "B", - resultTitleWin: "Congratulations", - resultExplanationWin: "You got it right!", - resultTitleLose: "Oh no!", - resultExplanationLose: "You got it wrong" - } -] - -//#endregion - //#region --- Functions ----- //#region --- User Idetifier ----- @@ -212,6 +172,10 @@ const startAgain = (): void => { } +//#endregion + + + //#endregion //#region --- Event listeners ----- @@ -222,5 +186,3 @@ nextQuestionBtn.addEventListener("click", loadNextQuestion) startAgainBtn.addEventListener("click", startAgain) //#endregion - -//#endregion \ No newline at end of file diff --git a/js/questions.ts b/js/questions.ts new file mode 100644 index 0000000..bd1411d --- /dev/null +++ b/js/questions.ts @@ -0,0 +1,41 @@ +//#region --- Object ----- +const questions: Question[] = [ + { + id: "question1", + currentStep: 1, + questionTitle: "Question 1", + questionText: "What is a screen reader?", + options: ["A car", "A digital text reader", "A cat", "A fruite"], + correctAnswer: "B", + resultTitleWin: "Congratulations", + resultExplanationWin: "You got it right!", + resultTitleLose: "Oh no!", + resultExplanationLose: "You got it wrong" + }, + { + id: "question2", + questionTitle: "Question 2", + questionText: "What is an alt text? A description of..", + currentStep: 2, + options: ["an image", "a div element", "a header", "a link"], + correctAnswer: "A", + resultTitleWin: "Congratulations", + resultExplanationWin: "You got it right!", + resultTitleLose: "Oh no!", + resultExplanationLose: "You got it wrong" + }, + { + id: "question3", + currentStep: 3, + questionTitle: "Question 3", + questionText: "What is the purpose of a 'skip to content' link?", + options: ["to skip advertisements", "to skip the navigation", "to skip to all images", "to skip the footer"], + correctAnswer: "B", + resultTitleWin: "Congratulations", + resultExplanationWin: "You got it right!", + resultTitleLose: "Oh no!", + resultExplanationLose: "You got it wrong" + } +] + +//#endregion From 01313f7d51caa1df8fd937d7ff402e620b6a4d31 Mon Sep 17 00:00:00 2001 From: simfrisk Date: Sat, 29 Mar 2025 11:11:27 +0100 Subject: [PATCH 38/40] fix styling on swipe --- css/styles.css | 5 +++-- dist/main.js | 6 +++--- index.html | 6 +++--- js/main.ts | 6 +++--- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/css/styles.css b/css/styles.css index 2548b9e..6a32f03 100644 --- a/css/styles.css +++ b/css/styles.css @@ -153,16 +153,17 @@ main { } .offset { - transform: translateY(100dvh); + transform: translateX(100dvh); } .card { + justify-content: center; background-color: var(--primary); position: absolute; padding: 16px; width: 100dvw; height: 100dvh; - transition: transform .6s ease; + transition: transform .7s ease-in-out; } diff --git a/dist/main.js b/dist/main.js index ddfc5f8..6003b00 100644 --- a/dist/main.js +++ b/dist/main.js @@ -63,7 +63,7 @@ const loadNextQuestion = () => { resultContainer.style.zIndex = ("0"); quizResult.style.zIndex = ("1"); quizResult.classList.remove("hide"); - // quizContainer.classList.remove("hide") + quizContainer.classList.remove("hide"); requestAnimationFrame(() => { quizResult.classList.remove("offset"); }); @@ -90,7 +90,7 @@ const loadNextQuestion = () => { startPage.classList.add("hide"); resultContainer.classList.add("hide"); resultContainer.classList.add("offset"); - }, 500); + }, 50); } }; //#endregion @@ -122,7 +122,7 @@ const loadNextAnswer = (event) => { quizContainer.style.zIndex = ("0"); resultContainer.style.zIndex = ("1"); resultContainer.classList.remove("hide"); - // quizContainer.classList.remove("hide") + quizContainer.classList.remove("hide"); requestAnimationFrame(() => { resultContainer.classList.remove("offset"); }); diff --git a/index.html b/index.html index f481f19..773ca28 100644 --- a/index.html +++ b/index.html @@ -53,7 +53,7 @@

Web Accessibility Quiz

-
+

@@ -90,7 +90,7 @@

-
+

@@ -104,7 +104,7 @@

-
+

diff --git a/js/main.ts b/js/main.ts index 9430136..42be0ab 100644 --- a/js/main.ts +++ b/js/main.ts @@ -87,7 +87,7 @@ const loadNextQuestion = () => { resultContainer.style.zIndex = ("0") quizResult.style.zIndex = ("1") quizResult.classList.remove("hide") - // quizContainer.classList.remove("hide") + quizContainer.classList.remove("hide") requestAnimationFrame(() => { quizResult.classList.remove("offset") }) @@ -116,7 +116,7 @@ const loadNextQuestion = () => { startPage.classList.add("hide") resultContainer.classList.add("hide") resultContainer.classList.add("offset") - }, 500) + }, 50) } } @@ -149,7 +149,7 @@ const loadNextAnswer = (event: Event): void => { quizContainer.style.zIndex = ("0") resultContainer.style.zIndex = ("1") resultContainer.classList.remove("hide") - // quizContainer.classList.remove("hide") + quizContainer.classList.remove("hide") requestAnimationFrame(() => { resultContainer.classList.remove("offset") }) From 501e06ec33d3825bf19a3270c94d220667b34a40 Mon Sep 17 00:00:00 2001 From: simfrisk Date: Sat, 29 Mar 2025 11:21:05 +0100 Subject: [PATCH 39/40] disign fixes --- css/styles.css | 8 +++++++- dist/main.js | 2 +- js/main.ts | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/css/styles.css b/css/styles.css index 6a32f03..f08cf70 100644 --- a/css/styles.css +++ b/css/styles.css @@ -321,9 +321,15 @@ footer { } .card { + width: 100dvw; + justify-content: center; + align-items: center; + flex-direction: column; + } - width: 50dvw; + .offset { + transform: translateX(0dvh); } } \ No newline at end of file diff --git a/dist/main.js b/dist/main.js index 6003b00..e920cd5 100644 --- a/dist/main.js +++ b/dist/main.js @@ -90,7 +90,7 @@ const loadNextQuestion = () => { startPage.classList.add("hide"); resultContainer.classList.add("hide"); resultContainer.classList.add("offset"); - }, 50); + }, 500); } }; //#endregion diff --git a/js/main.ts b/js/main.ts index 42be0ab..ba83242 100644 --- a/js/main.ts +++ b/js/main.ts @@ -116,7 +116,7 @@ const loadNextQuestion = () => { startPage.classList.add("hide") resultContainer.classList.add("hide") resultContainer.classList.add("offset") - }, 50) + }, 500) } } From c02da9dbf11c3f8a354773242e542ea9fae983eb Mon Sep 17 00:00:00 2001 From: simfrisk Date: Sat, 29 Mar 2025 12:33:12 +0100 Subject: [PATCH 40/40] added the final btn and deleted the backbutton --- dist/main.js | 40 ++++++++++++++++----------------- dist/questions.js | 7 +++--- index.html | 4 ++-- js/main.ts | 57 ++++++++++++++++++----------------------------- js/questions.ts | 21 ++++++++++++++--- 5 files changed, 66 insertions(+), 63 deletions(-) diff --git a/dist/main.js b/dist/main.js index e920cd5..4d03151 100644 --- a/dist/main.js +++ b/dist/main.js @@ -1,5 +1,4 @@ "use strict"; -//#endregion //#region --- DOM Elements ----- const navLinks = document.querySelector("#nav-links"); const menuIcon = document.querySelector("#menu-icon"); @@ -25,6 +24,7 @@ const startAgainBtn = document.querySelector("#start-again-btn"); const selectionForm = document.querySelector("#selection-from"); const radioButtonGroup = document.querySelector(".radio-button-group"); const radioButtonCheck = document.querySelectorAll('input[name="question1"]'); +const backBtn = document.querySelector("#back-btn"); let currentStep = -1; let userChoice = ""; let currentQuestion = null; @@ -57,6 +57,7 @@ const loadNextQuestion = () => { radioButtonCheck.forEach((radio) => { radio.checked = false; }); + console.log(currentStep); if (currentStep >= questions.length) { quizResultTitle.innerHTML = "Quiz is over"; quizResultText.innerHTML = `Your score is: ${score} / ${questions.length}`; @@ -74,7 +75,7 @@ const loadNextQuestion = () => { } else { currentQuestion = questions[currentStep]; - questionTitle.innerHTML = (currentQuestion.questionTitle); + questionTitle.innerHTML = (`Question ${currentStep + 1}/${questions.length}`); questionText.innerHTML = (currentQuestion.questionText); optionA.innerHTML = (currentQuestion.options[0]); optionB.innerHTML = (currentQuestion.options[1]); @@ -91,6 +92,9 @@ const loadNextQuestion = () => { resultContainer.classList.add("hide"); resultContainer.classList.add("offset"); }, 500); + if (currentStep % questions.length === questions.length - 1) { + submitAnswerBtn.innerHTML = "SEE RESULTS"; + } } }; //#endregion @@ -98,26 +102,20 @@ const loadNextQuestion = () => { const loadNextAnswer = (event) => { if (event) event.preventDefault(); - if (currentStep < questions.length) { - if (userChoice === currentQuestion.correctAnswer) { - console.log("You are correct!"); - resultTitle.innerHTML = currentQuestion.resultTitleWin; - resultExplanation.innerHTML = currentQuestion.resultExplanationWin; - score++; - console.log(score); - } - else if (userChoice === "") { - alert("Please select an answer."); - } - else { - console.log("Sorry, wrong answer."); - resultTitle.innerHTML = currentQuestion.resultTitleLose; - resultExplanation.innerHTML = currentQuestion.resultExplanationLose; - } + if (userChoice === currentQuestion.correctAnswer) { + console.log("You are correct!"); + resultTitle.innerHTML = currentQuestion.resultTitleWin; + resultExplanation.innerHTML = currentQuestion.resultExplanationWin; + score++; + console.log(score); + } + else if (userChoice === "") { + alert("Please select an answer."); } else { - nextQuestionBtn.innerHTML = "test"; - console.log("Button text changed to 'test'"); + console.log("Sorry, wrong answer."); + resultTitle.innerHTML = currentQuestion.resultTitleLose; + resultExplanation.innerHTML = currentQuestion.resultExplanationLose; } quizContainer.style.zIndex = ("0"); resultContainer.style.zIndex = ("1"); @@ -134,6 +132,7 @@ const loadNextAnswer = (event) => { //#endregion //#region --- Start over ---- const startAgain = () => { + submitAnswerBtn.innerHTML = "SUBMIT"; startPage.style.zIndex = ("0"); startPage.classList.remove("hide"); startPage.classList.remove("offset"); @@ -150,3 +149,4 @@ submitAnswerBtn.addEventListener("click", loadNextAnswer); nextQuestionBtn.addEventListener("click", loadNextQuestion); startAgainBtn.addEventListener("click", startAgain); //#endregion +console.log(questions.length); diff --git a/dist/questions.js b/dist/questions.js index 4a047b8..a854cb6 100644 --- a/dist/questions.js +++ b/dist/questions.js @@ -1,10 +1,11 @@ "use strict"; +//#endregion //#region --- Object ----- const questions = [ { id: "question1", currentStep: 1, - questionTitle: "Question 1", + questionTitle: "Question ", questionText: "What is a screen reader?", options: ["A car", "A digital text reader", "A cat", "A fruite"], correctAnswer: "B", @@ -15,7 +16,7 @@ const questions = [ }, { id: "question2", - questionTitle: "Question 2", + questionTitle: "Question ", questionText: "What is an alt text? A description of..", currentStep: 2, options: ["an image", "a div element", "a header", "a link"], @@ -28,7 +29,7 @@ const questions = [ { id: "question3", currentStep: 3, - questionTitle: "Question 3", + questionTitle: "Question ", questionText: "What is the purpose of a 'skip to content' link?", options: ["to skip advertisements", "to skip the navigation", "to skip to all images", "to skip the footer"], correctAnswer: "B", diff --git a/index.html b/index.html index 773ca28..f2957a7 100644 --- a/index.html +++ b/index.html @@ -82,7 +82,7 @@

- + @@ -97,7 +97,7 @@

- +
diff --git a/js/main.ts b/js/main.ts index ba83242..a6d2cf2 100644 --- a/js/main.ts +++ b/js/main.ts @@ -1,18 +1,3 @@ -//#region --- Interface ----- -interface Question { - id: string, - currentStep: number, - questionTitle: string, - questionText: string, - options: string[], - correctAnswer: string, - resultTitleWin: string, - resultExplanationWin: string - resultTitleLose: string, - resultExplanationLose: string -} -//#endregion - //#region --- DOM Elements ----- const navLinks = document.querySelector("#nav-links") as HTMLElement const menuIcon = document.querySelector("#menu-icon") as HTMLElement @@ -38,6 +23,7 @@ const startAgainBtn = document.querySelector("#start-again-btn") as HTMLButtonEl const selectionForm = document.querySelector("#selection-from") as HTMLFormElement const radioButtonGroup = document.querySelector(".radio-button-group") as HTMLDivElement const radioButtonCheck = document.querySelectorAll('input[name="question1"]') as NodeListOf +const backBtn = document.querySelector("#back-btn") as HTMLButtonElement let currentStep: number = -1 @@ -81,6 +67,8 @@ const loadNextQuestion = () => { } ) + console.log(currentStep) + if (currentStep >= questions.length) { quizResultTitle.innerHTML = "Quiz is over" quizResultText.innerHTML = `Your score is: ${score} / ${questions.length}` @@ -99,7 +87,7 @@ const loadNextQuestion = () => { } else { currentQuestion = questions[currentStep] - questionTitle.innerHTML = (currentQuestion.questionTitle) + questionTitle.innerHTML = (`Question ${currentStep + 1}/${questions.length}`) questionText.innerHTML = (currentQuestion.questionText) optionA.innerHTML = (currentQuestion.options[0]) optionB.innerHTML = (currentQuestion.options[1]) @@ -117,6 +105,10 @@ const loadNextQuestion = () => { resultContainer.classList.add("hide") resultContainer.classList.add("offset") }, 500) + + if (currentStep % questions.length === questions.length - 1) { + submitAnswerBtn.innerHTML = "SEE RESULTS" + } } } @@ -126,24 +118,18 @@ const loadNextQuestion = () => { const loadNextAnswer = (event: Event): void => { if (event) event.preventDefault() - if (currentStep < questions.length) { - if (userChoice === currentQuestion.correctAnswer) { - console.log("You are correct!") - resultTitle.innerHTML = currentQuestion.resultTitleWin - resultExplanation.innerHTML = currentQuestion.resultExplanationWin - score++ - console.log(score) - } else if (userChoice === "") { - alert("Please select an answer.") - } else { - console.log("Sorry, wrong answer.") - resultTitle.innerHTML = currentQuestion.resultTitleLose - resultExplanation.innerHTML = currentQuestion.resultExplanationLose - } - + if (userChoice === currentQuestion.correctAnswer) { + console.log("You are correct!") + resultTitle.innerHTML = currentQuestion.resultTitleWin + resultExplanation.innerHTML = currentQuestion.resultExplanationWin + score++ + console.log(score) + } else if (userChoice === "") { + alert("Please select an answer.") } else { - nextQuestionBtn.innerHTML = "test" - console.log("Button text changed to 'test'") + console.log("Sorry, wrong answer.") + resultTitle.innerHTML = currentQuestion.resultTitleLose + resultExplanation.innerHTML = currentQuestion.resultExplanationLose } quizContainer.style.zIndex = ("0") @@ -163,19 +149,18 @@ const loadNextAnswer = (event: Event): void => { //#region --- Start over ---- const startAgain = (): void => { + submitAnswerBtn.innerHTML = "SUBMIT" startPage.style.zIndex = ("0") startPage.classList.remove("hide") startPage.classList.remove("offset") quizResult.classList.add("hide") currentStep = -1 score = 0 - } //#endregion - //#endregion //#region --- Event listeners ----- @@ -184,5 +169,7 @@ startQuizBtn.addEventListener("click", loadNextQuestion) submitAnswerBtn.addEventListener("click", loadNextAnswer) nextQuestionBtn.addEventListener("click", loadNextQuestion) startAgainBtn.addEventListener("click", startAgain) + //#endregion +console.log(questions.length) \ No newline at end of file diff --git a/js/questions.ts b/js/questions.ts index bd1411d..9015d86 100644 --- a/js/questions.ts +++ b/js/questions.ts @@ -1,9 +1,24 @@ +//#region --- Interface ----- +interface Question { + id: string, + currentStep: number, + questionTitle: string, + questionText: string, + options: string[], + correctAnswer: string, + resultTitleWin: string, + resultExplanationWin: string + resultTitleLose: string, + resultExplanationLose: string +} +//#endregion + //#region --- Object ----- const questions: Question[] = [ { id: "question1", currentStep: 1, - questionTitle: "Question 1", + questionTitle: "Question ", questionText: "What is a screen reader?", options: ["A car", "A digital text reader", "A cat", "A fruite"], correctAnswer: "B", @@ -14,7 +29,7 @@ const questions: Question[] = [ }, { id: "question2", - questionTitle: "Question 2", + questionTitle: "Question ", questionText: "What is an alt text? A description of..", currentStep: 2, options: ["an image", "a div element", "a header", "a link"], @@ -27,7 +42,7 @@ const questions: Question[] = [ { id: "question3", currentStep: 3, - questionTitle: "Question 3", + questionTitle: "Question ", questionText: "What is the purpose of a 'skip to content' link?", options: ["to skip advertisements", "to skip the navigation", "to skip to all images", "to skip the footer"], correctAnswer: "B",