From 298049c2b7c30de21c75a7218b3032bba2fb21c7 Mon Sep 17 00:00:00 2001 From: Matthew Fortunka <1851394+fortunkam@users.noreply.github.com> Date: Fri, 13 Jun 2025 12:49:33 +0100 Subject: [PATCH 1/3] Enhance quiz app UI with new components and layouts Added new Razor components and updated existing ones to improve the user interface and functionality of the quiz application. Introduced layout specifications for consistency, added `@page` directives for new routes, and enhanced UI elements with better padding and centering. Implemented query string parameters for dynamic data handling and updated CSS for improved button styling and responsiveness. Overall, these changes aim to create a more interactive and visually appealing user experience. --- .../Pages/Tests/Client/AnswerSummary.razor | 37 +++++++++ .../Client/Pages/Tests/Client/JoinQuiz.razor | 13 +++ .../Tests/Client/MultipleChoiceQuestion.razor | 26 ++++++ .../PlayerPosition.razor} | 5 +- .../Tests/Client/TrueFalseQuestion.razor | 19 +++++ .../Client/Pages/Tests/Client/UserName.razor | 13 +++ .../Tests/Client/WaitingForAnswerCheck.razor | 7 ++ .../Tests/Client/WaitingForQuestion.razor | 7 ++ .../Tests/SingleAnswerQuestionTest.razor | 26 ------ .../Client/Shared/Client/AnswerSummary.razor | 14 ++-- .../Client/Shared/Client/JoinQuiz.razor | 4 +- .../Client/Shared/Client/PlayerPosition.razor | 6 +- .../SingleAnswerMultiSelectQuestion.razor | 4 +- .../Shared/Client/TrueFalseQuestion.razor | 2 +- .../Client/Shared/Client/UserName.razor | 4 +- .../Shared/Client/WaitingForAnswerCheck.razor | 2 +- .../Shared/Client/WaitingForQuestions.razor | 6 +- .../Client/Shared/Components/NavBar.razor | 4 +- .../Client/wwwroot/css/app.css | 83 ++++++++++++++++++- 19 files changed, 228 insertions(+), 54 deletions(-) create mode 100644 QuizExperiment.Admin/Client/Pages/Tests/Client/AnswerSummary.razor create mode 100644 QuizExperiment.Admin/Client/Pages/Tests/Client/JoinQuiz.razor create mode 100644 QuizExperiment.Admin/Client/Pages/Tests/Client/MultipleChoiceQuestion.razor rename QuizExperiment.Admin/Client/Pages/Tests/{PlayerPositionTest.razor => Client/PlayerPosition.razor} (70%) create mode 100644 QuizExperiment.Admin/Client/Pages/Tests/Client/TrueFalseQuestion.razor create mode 100644 QuizExperiment.Admin/Client/Pages/Tests/Client/UserName.razor create mode 100644 QuizExperiment.Admin/Client/Pages/Tests/Client/WaitingForAnswerCheck.razor create mode 100644 QuizExperiment.Admin/Client/Pages/Tests/Client/WaitingForQuestion.razor delete mode 100644 QuizExperiment.Admin/Client/Pages/Tests/SingleAnswerQuestionTest.razor diff --git a/QuizExperiment.Admin/Client/Pages/Tests/Client/AnswerSummary.razor b/QuizExperiment.Admin/Client/Pages/Tests/Client/AnswerSummary.razor new file mode 100644 index 0000000..9e60b56 --- /dev/null +++ b/QuizExperiment.Admin/Client/Pages/Tests/Client/AnswerSummary.razor @@ -0,0 +1,37 @@ +@page "/test/client/answersummary" +@using QuizModels = QuizExperiment.Models.Client +@layout QuizExperiment.Admin.Client.Shared.Client.Layout + + + +@code { + QuizModels.ClientMultipleChoiceAnswer myAnswer = new QuizModels.ClientMultipleChoiceAnswer + { + AnswerIndex = 1 + }; + + QuizModels.ClientMultipleChoiceQuestion question = new QuizModels.ClientMultipleChoiceQuestion + { + Title = "This is a test Question, it goes on a bit, in fact it goes on for ages and ages and ages", + ImageUrl = "https://imgur.com/NkMONh3", + Options = new List + { + "Option 1", + "Option 2 - This option is really long and will wrap to the next line", + "Option 3", + "Option 4" + }, + }; + + QuizModels.ClientMultipleChoiceAnswer correctAnswer = new QuizModels.ClientMultipleChoiceAnswer + { + AnswerIndex = 0 + }; + +} \ No newline at end of file diff --git a/QuizExperiment.Admin/Client/Pages/Tests/Client/JoinQuiz.razor b/QuizExperiment.Admin/Client/Pages/Tests/Client/JoinQuiz.razor new file mode 100644 index 0000000..b33b8b7 --- /dev/null +++ b/QuizExperiment.Admin/Client/Pages/Tests/Client/JoinQuiz.razor @@ -0,0 +1,13 @@ +@page "/test/client/joinquiz" +@layout QuizExperiment.Admin.Client.Shared.Client.Layout + + + +@code { + private void HandleQuizIdSubmit(string quizId) + { + // Handle the submitted quiz ID + Console.WriteLine($"Quiz ID submitted: {quizId}"); + // Potentially invoke a method to initiate the quiz based on the quiz ID + } +} \ No newline at end of file diff --git a/QuizExperiment.Admin/Client/Pages/Tests/Client/MultipleChoiceQuestion.razor b/QuizExperiment.Admin/Client/Pages/Tests/Client/MultipleChoiceQuestion.razor new file mode 100644 index 0000000..f90d494 --- /dev/null +++ b/QuizExperiment.Admin/Client/Pages/Tests/Client/MultipleChoiceQuestion.razor @@ -0,0 +1,26 @@ +@page "/test/client/mulitplechoice" +@using QuizModels = QuizExperiment.Models.Client +@layout QuizExperiment.Admin.Client.Shared.Client.Layout + + + +@code { + private QuizModels.ClientMultipleChoiceQuestion _currentQuestion = new QuizModels.ClientMultipleChoiceQuestion + { + Title = "This is a test Question, it goes on a bit, in fact it goes on for ages and ages and ages", + Options = new List + { + "Option 1", + "Option 2 - This option is really long and will wrap to the next line", + "Option 3", + "Option 4" + }, + ImageUrl = "https://imgur.com/NkMONh3" + }; + + private void AnswerQuestion(QuizModels.ClientAnswer answerIndex) + { + Console.WriteLine($"User answered: {answerIndex}"); + } +} \ No newline at end of file diff --git a/QuizExperiment.Admin/Client/Pages/Tests/PlayerPositionTest.razor b/QuizExperiment.Admin/Client/Pages/Tests/Client/PlayerPosition.razor similarity index 70% rename from QuizExperiment.Admin/Client/Pages/Tests/PlayerPositionTest.razor rename to QuizExperiment.Admin/Client/Pages/Tests/Client/PlayerPosition.razor index 10a3a8f..5f872ca 100644 --- a/QuizExperiment.Admin/Client/Pages/Tests/PlayerPositionTest.razor +++ b/QuizExperiment.Admin/Client/Pages/Tests/Client/PlayerPosition.razor @@ -1,5 +1,6 @@ -@page "/test/playerposition" - +@page "/test/client/playerposition" +@layout QuizExperiment.Admin.Client.Shared.Client.Layout + @code { diff --git a/QuizExperiment.Admin/Client/Pages/Tests/Client/TrueFalseQuestion.razor b/QuizExperiment.Admin/Client/Pages/Tests/Client/TrueFalseQuestion.razor new file mode 100644 index 0000000..79e3513 --- /dev/null +++ b/QuizExperiment.Admin/Client/Pages/Tests/Client/TrueFalseQuestion.razor @@ -0,0 +1,19 @@ +@page "/test/client/truefalse" +@using QuizModels = QuizExperiment.Models.Client +@layout QuizExperiment.Admin.Client.Shared.Client.Layout + + + +@code { + private QuizModels.ClientTrueFalseQuestion _currentQuestion = new QuizModels.ClientTrueFalseQuestion + { + Title = "This is a test Question, it goes on a bit, in fact it goes on for ages and ages and ages", + ImageUrl = "https://imgur.com/NkMONh3" + }; + + private void AnswerQuestion(QuizModels.ClientAnswer answerIndex) + { + Console.WriteLine($"User answered: {answerIndex}"); + } +} \ No newline at end of file diff --git a/QuizExperiment.Admin/Client/Pages/Tests/Client/UserName.razor b/QuizExperiment.Admin/Client/Pages/Tests/Client/UserName.razor new file mode 100644 index 0000000..4276edd --- /dev/null +++ b/QuizExperiment.Admin/Client/Pages/Tests/Client/UserName.razor @@ -0,0 +1,13 @@ +@page "/test/client/username" +@layout QuizExperiment.Admin.Client.Shared.Client.Layout + + + +@code { + private void HandleUserNameSubmit(string userName) + { + // Handle the submitted username + // Potentially invoke a method to set the username in a service or state + Console.WriteLine($"Username submitted: {userName}"); + } +} \ No newline at end of file diff --git a/QuizExperiment.Admin/Client/Pages/Tests/Client/WaitingForAnswerCheck.razor b/QuizExperiment.Admin/Client/Pages/Tests/Client/WaitingForAnswerCheck.razor new file mode 100644 index 0000000..b5085e7 --- /dev/null +++ b/QuizExperiment.Admin/Client/Pages/Tests/Client/WaitingForAnswerCheck.razor @@ -0,0 +1,7 @@ +@page "/test/client/waitingforanswer" +@layout QuizExperiment.Admin.Client.Shared.Client.Layout + + + +@code { +} \ No newline at end of file diff --git a/QuizExperiment.Admin/Client/Pages/Tests/Client/WaitingForQuestion.razor b/QuizExperiment.Admin/Client/Pages/Tests/Client/WaitingForQuestion.razor new file mode 100644 index 0000000..b693b31 --- /dev/null +++ b/QuizExperiment.Admin/Client/Pages/Tests/Client/WaitingForQuestion.razor @@ -0,0 +1,7 @@ +@page "/test/client/waitingforquestion" +@layout QuizExperiment.Admin.Client.Shared.Client.Layout + + + +@code { +} \ No newline at end of file diff --git a/QuizExperiment.Admin/Client/Pages/Tests/SingleAnswerQuestionTest.razor b/QuizExperiment.Admin/Client/Pages/Tests/SingleAnswerQuestionTest.razor deleted file mode 100644 index b13f46b..0000000 --- a/QuizExperiment.Admin/Client/Pages/Tests/SingleAnswerQuestionTest.razor +++ /dev/null @@ -1,26 +0,0 @@ -@* @page "/test/singleanswerquestion" -@using QuizExperiment.Models -@layout AdminLayout - - - -@code { - private Question _currentQuestion = new MultipleChoiceQuestion - { - Title = "This is a test Question", - Options = new[] - { - "Option 1", - "Option 2 - This option is really long and will wrap to the next line", - "Option 3", - "Option 4" - }, - ImageUrl = "https://imgur.com/NkMONh3" - }; - - private void AnswerQuestion(int answerIndex){ - Console.WriteLine($"User answered: {answerIndex}"); - } -} *@ \ No newline at end of file diff --git a/QuizExperiment.Admin/Client/Shared/Client/AnswerSummary.razor b/QuizExperiment.Admin/Client/Shared/Client/AnswerSummary.razor index 631f954..eeaf2aa 100644 --- a/QuizExperiment.Admin/Client/Shared/Client/AnswerSummary.razor +++ b/QuizExperiment.Admin/Client/Shared/Client/AnswerSummary.razor @@ -9,28 +9,28 @@ @if (MyAnswer == CorrectAnswer) { -
Correct!
+
Correct!
} else { - -
Better luck next time!
-
The correct answer was @correctAnswerText.
+ +
Better luck next time!
+
The correct answer was @correctAnswerText.
} @if (!IsLastQuestion) { -
You are in @Position@(Position.GetSuffix()) place with @CurrentScore points
-
Another question is on its way!
+
You are in @Position@(Position.GetSuffix()) place with @CurrentScore points
+
Another question is on its way!
} else { -
That was the last question, check the presenters screen to see how you did!
+
That was the last question, check the presenters screen to see how you did!
} diff --git a/QuizExperiment.Admin/Client/Shared/Client/JoinQuiz.razor b/QuizExperiment.Admin/Client/Shared/Client/JoinQuiz.razor index bcb82fa..64f6e59 100644 --- a/QuizExperiment.Admin/Client/Shared/Client/JoinQuiz.razor +++ b/QuizExperiment.Admin/Client/Shared/Client/JoinQuiz.razor @@ -1,6 +1,6 @@ 
-
Join our quiz!
-
Enter the quiz code below
+
Join our quiz!
+
Enter the quiz code below
diff --git a/QuizExperiment.Admin/Client/Shared/Client/PlayerPosition.razor b/QuizExperiment.Admin/Client/Shared/Client/PlayerPosition.razor index 090343c..951a404 100644 --- a/QuizExperiment.Admin/Client/Shared/Client/PlayerPosition.razor +++ b/QuizExperiment.Admin/Client/Shared/Client/PlayerPosition.razor @@ -1,11 +1,11 @@ @using QuizExperiment.Models
-
Well done!
-
You came @Position@(Position.GetSuffix()) with a score of @Score
+
Well done!
+
You came @Position@(Position.GetSuffix()) with a score of @Score

@Icon

-
Thanks for playing
+
Thanks for playing
@code { diff --git a/QuizExperiment.Admin/Client/Shared/Client/SingleAnswerMultiSelectQuestion.razor b/QuizExperiment.Admin/Client/Shared/Client/SingleAnswerMultiSelectQuestion.razor index 9137684..466c61b 100644 --- a/QuizExperiment.Admin/Client/Shared/Client/SingleAnswerMultiSelectQuestion.razor +++ b/QuizExperiment.Admin/Client/Shared/Client/SingleAnswerMultiSelectQuestion.razor @@ -5,13 +5,13 @@ {
-

@Question.Title

+

@Question.Title

@for (var i = 0; i < Question.Options?.Count; i++) { var answer = Question.Options[i]; var index = i; - + }
diff --git a/QuizExperiment.Admin/Client/Shared/Client/TrueFalseQuestion.razor b/QuizExperiment.Admin/Client/Shared/Client/TrueFalseQuestion.razor index a173ba5..6e747d4 100644 --- a/QuizExperiment.Admin/Client/Shared/Client/TrueFalseQuestion.razor +++ b/QuizExperiment.Admin/Client/Shared/Client/TrueFalseQuestion.razor @@ -4,7 +4,7 @@ if(Question != null) {
-

@Question.Title

+

@Question.Title

diff --git a/QuizExperiment.Admin/Client/Shared/Client/UserName.razor b/QuizExperiment.Admin/Client/Shared/Client/UserName.razor index 55800fd..b55743e 100644 --- a/QuizExperiment.Admin/Client/Shared/Client/UserName.razor +++ b/QuizExperiment.Admin/Client/Shared/Client/UserName.razor @@ -1,6 +1,6 @@ 
-
How would you like to be known?
-
Enter your username below
+
How would you like to be known?
+
Enter your username below
diff --git a/QuizExperiment.Admin/Client/Shared/Client/WaitingForAnswerCheck.razor b/QuizExperiment.Admin/Client/Shared/Client/WaitingForAnswerCheck.razor index 15794b0..822a85c 100644 --- a/QuizExperiment.Admin/Client/Shared/Client/WaitingForAnswerCheck.razor +++ b/QuizExperiment.Admin/Client/Shared/Client/WaitingForAnswerCheck.razor @@ -1,5 +1,5 @@ 
-
Just waiting for everyone to answer.
+
Just waiting for everyone to answer.
diff --git a/QuizExperiment.Admin/Client/Shared/Client/WaitingForQuestions.razor b/QuizExperiment.Admin/Client/Shared/Client/WaitingForQuestions.razor index 22823a9..b875957 100644 --- a/QuizExperiment.Admin/Client/Shared/Client/WaitingForQuestions.razor +++ b/QuizExperiment.Admin/Client/Shared/Client/WaitingForQuestions.razor @@ -1,7 +1,7 @@ 
-
Hello @UserName
-
Just waiting for players to join
-
Your host will start the quiz shortly.
+
Hello @UserName
+
Just waiting for players to join
+
Your host will start the quiz shortly.
diff --git a/QuizExperiment.Admin/Client/Shared/Components/NavBar.razor b/QuizExperiment.Admin/Client/Shared/Components/NavBar.razor index 61aab25..c58e3ac 100644 --- a/QuizExperiment.Admin/Client/Shared/Components/NavBar.razor +++ b/QuizExperiment.Admin/Client/Shared/Components/NavBar.razor @@ -2,14 +2,14 @@