diff --git a/classquiz/db/models.py b/classquiz/db/models.py index dffe88f..d064d2e 100644 --- a/classquiz/db/models.py +++ b/classquiz/db/models.py @@ -120,6 +120,7 @@ class QuizQuestionType(str, Enum): SLIDE = "SLIDE" TEXT = "TEXT" ORDER = "ORDER" + CHECK = "CHECK" class TextQuizAnswer(BaseModel): @@ -136,6 +137,7 @@ class QuizQuestion(BaseModel): @validator("answers") def answers_not_none_if_abcd_type(cls, v, values): + print(values) # print(values) if values["type"] == QuizQuestionType.ABCD and type(v[0]) != ABCDQuizAnswer: raise ValueError("Answers can't be none if type is ABCD") @@ -149,6 +151,8 @@ class QuizQuestion(BaseModel): raise ValueError("Answer must be from type VotingQuizAnswer if type is ORDER") if values["type"] == QuizQuestionType.SLIDE and type(v[0]) != str: raise ValueError("Answer must be from type SlideElement if type is SLIDE") + if values["type"] == QuizQuestionType.CHECK and type(v[0]) != ABCDQuizAnswer: + raise ValueError("Answers can't be none if type is CHECK") return v diff --git a/classquiz/socket_server/__init__.py b/classquiz/socket_server/__init__.py index 5fd331f..b2ec89f 100644 --- a/classquiz/socket_server/__init__.py +++ b/classquiz/socket_server/__init__.py @@ -359,6 +359,15 @@ async def submit_answer(sid: str, data: dict): if data.answer.lower() == q.answer.lower(): answer_right = True break + elif game_data.questions[int(data.question_index)].type == QuizQuestionType.CHECK: + correct_string = "" + for i, a in enumerate(game_data.questions[int(float(data.question_index))].answers): + if a.right: + correct_string += str(i) + if correct_string == data.answer: + answer_right = True + else: + answer_right = False else: raise NotImplementedError latency = int(float((await sio.get_session(sid))["ping"])) diff --git a/frontend/src/lib/admin.svelte b/frontend/src/lib/admin.svelte index cd1f78c..b856d4f 100644 --- a/frontend/src/lib/admin.svelte +++ b/frontend/src/lib/admin.svelte @@ -231,7 +231,7 @@ /> {/if} - {#if quiz_data.questions[selected_question].type === QuizQuestionType.ABCD || quiz_data.questions[selected_question].type === QuizQuestionType.VOTING} + {#if quiz_data.questions[selected_question].type === QuizQuestionType.ABCD || quiz_data.questions[selected_question].type === QuizQuestionType.VOTING || quiz_data.questions[selected_question].type === QuizQuestionType.CHECK}
{#each quiz_data.questions[selected_question].answers as answer, i}
[]); - const close_start_game_if_esc_is_pressed = (key: KeyboardEvent) => { - if (key.code === 'Escape') { - start_game = null; - } - }; - const copy_id = (quiz_id: string) => { navigator.clipboard.writeText(quiz_id); copy_toast_open = true; @@ -58,9 +52,9 @@ game_in_lobby = await res.json(); } }; - onMount(() => { - document.body.addEventListener('keydown', close_start_game_if_esc_is_pressed); - }); + // onMount(() => { + // document.body.addEventListener('keydown', close_start_game_if_esc_is_pressed); + // }); get_game_in_lobby_fn(); diff --git a/frontend/src/lib/editor/ABCDEditorPart.svelte b/frontend/src/lib/editor/ABCDEditorPart.svelte index 16a80e2..89c2eaf 100644 --- a/frontend/src/lib/editor/ABCDEditorPart.svelte +++ b/frontend/src/lib/editor/ABCDEditorPart.svelte @@ -4,7 +4,8 @@ - file, You can obtain one at https://mozilla.org/MPL/2.0/. -->
diff --git a/frontend/src/lib/editor/card.svelte b/frontend/src/lib/editor/card.svelte index 6e6ad78..5540a81 100644 --- a/frontend/src/lib/editor/card.svelte +++ b/frontend/src/lib/editor/card.svelte @@ -52,11 +52,11 @@ set_unique(); } /* - if (typeof data.questions[selected_question].type !== QuizQuestionType) { - console.log(data.questions[selected_question].type !== QuizQuestionType.ABCD || data.questions[selected_question].type !== QuizQuestionType.RANGE) - data.questions[selected_question].type = QuizQuestionType.ABCD; - } - */ + if (typeof data.questions[selected_question].type !== QuizQuestionType) { + console.log(data.questions[selected_question].type !== QuizQuestionType.ABCD || data.questions[selected_question].type !== QuizQuestionType.RANGE) + data.questions[selected_question].type = QuizQuestionType.ABCD; + } + */
@@ -81,6 +81,7 @@ {/await} {:else} + {@const type = data.questions[selected_question].type}
{#key unique} @@ -194,30 +195,36 @@ +
- {#if data.questions[selected_question].type === QuizQuestionType.ABCD} + {#if type === QuizQuestionType.ABCD || QuizQuestionType.CHECK} {#await import('$lib/editor/ABCDEditorPart.svelte')} {:then c} - + {/await} - {:else if data.questions[selected_question].type === QuizQuestionType.RANGE} + {:else if type === QuizQuestionType.RANGE} - {:else if data.questions[selected_question].type === QuizQuestionType.VOTING} + {:else if type === QuizQuestionType.VOTING} {#await import('$lib/editor/VotingEditorPart.svelte')} {:then c} {/await} - {:else if data.questions[selected_question].type === QuizQuestionType.TEXT} + {:else if type === QuizQuestionType.TEXT} {#await import('$lib/editor/TextEditorPart.svelte')} {:then c} {/await} - {:else if data.questions[selected_question].type === QuizQuestionType.ORDER} + {:else if type === QuizQuestionType.ORDER} {#await import('$lib/editor/OrderEditorPart.svelte')} {:then c} diff --git a/frontend/src/lib/editor/sidebar.svelte b/frontend/src/lib/editor/sidebar.svelte index 7d6ae96..725297e 100644 --- a/frontend/src/lib/editor/sidebar.svelte +++ b/frontend/src/lib/editor/sidebar.svelte @@ -211,7 +211,7 @@ />
{/if} - {#if question.type === QuizQuestionType.ABCD} + {#if question.type === QuizQuestionType.ABCD || question.type === QuizQuestionType.CHECK}
{#if Array.isArray(question.answers)} {#each question.answers as answer} diff --git a/frontend/src/lib/i18n/locales/en.json b/frontend/src/lib/i18n/locales/en.json index 414e577..e36eabf 100644 --- a/frontend/src/lib/i18n/locales/en.json +++ b/frontend/src/lib/i18n/locales/en.json @@ -174,7 +174,8 @@ "select": "Select", "quiz": "Quiz", "quiztivity": "Quiztivity", - "next": "Next" + "next": "Next", + "check_choice": "Check Choice" }, "editor": { "time_in_seconds": "Time in seconds", diff --git a/frontend/src/lib/play/question.svelte b/frontend/src/lib/play/question.svelte index 3b6572c..7f504cd 100644 --- a/frontend/src/lib/play/question.svelte +++ b/frontend/src/lib/play/question.svelte @@ -32,10 +32,10 @@ } /* if (typeof question_index === 'string') { - question_index = parseInt(question_index); - } else { - throw new Error('question_index must be a string or number'); - }*/ + question_index = parseInt(question_index); + } else { + throw new Error('question_index must be a string or number'); + }*/ let timer_res = question.time; let selected_answer: string; @@ -251,30 +251,6 @@
- {:else if question.type === QuizQuestionType.ABCD} - {#if solution === undefined} - - {:else} -
- {#each solution.answers as answer} - {#if answer.right} - - {:else} - - {/if} - {/each} -
- {/if} {:else if question.type === QuizQuestionType.RANGE} {#if solution === undefined} @@ -291,8 +267,8 @@ {/if} {:else if question.type === QuizQuestionType.ORDER} + + {:else}-->
{#each question.answers as answer, i (answer.id)}
+ {:else if question.type === QuizQuestionType.CHECK} + {#await import('./questions/check.svelte')} + + {:then c} + +
+
+ selectAnswer(selected_answer)} + >{$t('words.submit')} + +
+
+ {/await} {/if} + {#await import('$lib/play/admin/voting_results.svelte')} + + {:then c} + + {/await}--> {/if}
diff --git a/frontend/src/lib/play/questions/check.svelte b/frontend/src/lib/play/questions/check.svelte new file mode 100644 index 0000000..febd59d --- /dev/null +++ b/frontend/src/lib/play/questions/check.svelte @@ -0,0 +1,63 @@ + + + + +
+ + +
+ {#each question.answers as answer, i} + + {/each} +
+
diff --git a/frontend/src/lib/quiz_types.ts b/frontend/src/lib/quiz_types.ts index 026f350..03bb640 100644 --- a/frontend/src/lib/quiz_types.ts +++ b/frontend/src/lib/quiz_types.ts @@ -31,7 +31,8 @@ export enum QuizQuestionType { VOTING = 'VOTING', // eslint-disable-line no-unused-vars SLIDE = 'SLIDE', // eslint-disable-line no-unused-vars TEXT = 'TEXT', // eslint-disable-line no-unused-vars - ORDER = 'ORDER' // eslint-disable-line no-unused-vars + ORDER = 'ORDER', // eslint-disable-line no-unused-vars + CHECK = 'CHECK' // eslint-disable-line no-unused-vars } export interface RangeQuizAnswer { diff --git a/frontend/src/routes/results/[result_id]/question_tab_thing.svelte b/frontend/src/routes/results/[result_id]/question_tab_thing.svelte index 50d9406..532947a 100644 --- a/frontend/src/routes/results/[result_id]/question_tab_thing.svelte +++ b/frontend/src/routes/results/[result_id]/question_tab_thing.svelte @@ -6,10 +6,11 @@