Added time-input to new editor

This commit is contained in:
Mawoka
2022-06-17 18:24:14 +02:00
parent 88d8f4f5d7
commit 4b24c3b5be
2 changed files with 62 additions and 20 deletions
+3 -1
View File
@@ -96,11 +96,13 @@ async def finish_edit(edit_id: str, quiz_input: QuizInput):
def mark_image_for_deletion(new: str | None, index: int, old_quiz: Quiz | None): def mark_image_for_deletion(new: str | None, index: int, old_quiz: Quiz | None):
if old_quiz is None: if old_quiz is None:
return return
print(new, old_quiz.questions[index]["image"]) try:
if new == old_quiz.questions[index]["image"]: if new == old_quiz.questions[index]["image"]:
return return
else: else:
images_to_delete.append(old_quiz.questions[index]["image"]) images_to_delete.append(old_quiz.questions[index]["image"])
except IndexError:
pass
for i, question in enumerate(quiz_input.questions): for i, question in enumerate(quiz_input.questions):
image = question.image image = question.image
+55 -15
View File
@@ -9,16 +9,25 @@
export let data: EditorData; export let data: EditorData;
export let selected_question: number; export let selected_question: number;
export let edit_id: string; export let edit_id: string;
let question = data.questions[selected_question];
$: question = data.questions[selected_question];
const empty_answer: Answer = { const empty_answer: Answer = {
right: false, right: false,
answer: '' answer: ''
}; };
console.log(question.image);
let uppyOpen = false; let uppyOpen = false;
$: console.log(uppyOpen);
const correctTimeInput = (_) => {
let time = data.questions[selected_question].time;
if (time === null || time === undefined) {
data.questions[selected_question].time = '';
time = '';
}
if (data.questions[selected_question].time > 3) {
data.questions[selected_question].time = data.questions[selected_question].time
.toString()
.slice(0, 3);
}
};
$: correctTimeInput(data.questions[selected_question].time);
</script> </script>
<div class="w-full h-full pb-20 px-20"> <div class="w-full h-full pb-20 px-20">
@@ -40,22 +49,22 @@
<div class="flex justify-center pt-10 w-full"> <div class="flex justify-center pt-10 w-full">
<input <input
type="text" type="text"
bind:value={question.question} bind:value={data.questions[selected_question].question}
placeholder="No title..." placeholder="No title..."
class="p-3 rounded-lg border-gray-500 border text-center w-2/3 text-lg font-semibold placeholder:italic placeholder:font-normal dark:bg-gray-500" class="p-3 rounded-lg border-gray-500 border text-center w-2/3 text-lg font-semibold placeholder:italic placeholder:font-normal dark:bg-gray-500"
class:bg-yellow-500={!reach(dataSchema, 'questions[].question').isValidSync( class:bg-yellow-500={!reach(dataSchema, 'questions[].question').isValidSync(
question.question data.questions[selected_question].question
)} )}
/> />
</div> </div>
{#if question.image != undefined && question.image !== ''} {#if data.questions[selected_question].image != undefined && data.questions[selected_question].image !== ''}
<div class="flex justify-center pt-10 w-full max-h-72 w-full"> <div class="flex justify-center pt-10 w-full max-h-72 w-full">
<img <img
src={question.image} src={data.questions[selected_question].image}
alt="not available" alt="not available"
class="max-h-72 h-auto w-auto" class="max-h-72 h-auto w-auto"
on:contextmenu|preventDefault={() => { on:contextmenu|preventDefault={() => {
question.image = ''; data.questions[selected_question].image = '';
}} }}
/> />
</div> </div>
@@ -72,13 +81,40 @@
/> />
{/await} {/await}
{/if} {/if}
<div class="flex justify-center pt-10 w-full">
<div>
<svg
class="w-8 h-8 inline-block"
fill="none"
stroke="currentColor"
viewBox="0 0 24 24"
xmlns="http://www.w3.org/2000/svg"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"
/>
</svg>
<input
type="number"
max="999"
min="1"
class="w-20 bg-transparent rounded-lg text-lg border-2 border-gray-500 p-1"
bind:value={data.questions[selected_question].time}
/>
</div>
</div>
<div class="flex justify-center pt-10 w-full"> <div class="flex justify-center pt-10 w-full">
<div class="grid grid-cols-2 gap-4 w-full px-10"> <div class="grid grid-cols-2 gap-4 w-full px-10">
{#each question.answers as answer, index} {#each data.questions[selected_question].answers as answer, index}
<div <div
on:contextmenu|preventDefault={() => { on:contextmenu|preventDefault={() => {
question.answers.splice(index, 1); data.questions[selected_question].answers.splice(index, 1);
question.answers = question.answers; data.questions[selected_question].answers =
data.questions[selected_question].answers;
}} }}
out:fade={{ duration: 150 }} out:fade={{ duration: 150 }}
class="p-4 rounded-lg flex justify-center w-full transition" class="p-4 rounded-lg flex justify-center w-full transition"
@@ -99,6 +135,7 @@
type="button" type="button"
on:click={() => { on:click={() => {
answer.right = !answer.right; answer.right = !answer.right;
console.log(answer.right);
}} }}
> >
{#if answer.right} {#if answer.right}
@@ -135,13 +172,16 @@
</button> </button>
</div> </div>
{/each} {/each}
{#if question.answers.length < 4} {#if data.questions[selected_question].answers.length < 4}
<button <button
class="p-4 rounded-lg bg-transparent border-gray-500 border-2 hover:bg-gray-300 transition dark:hover:bg-gray-600" class="p-4 rounded-lg bg-transparent border-gray-500 border-2 hover:bg-gray-300 transition dark:hover:bg-gray-600"
type="button" type="button"
in:fade={{ duration: 150 }} in:fade={{ duration: 150 }}
on:click={() => { on:click={() => {
question.answers = [...question.answers, { empty_answer }]; data.questions[selected_question].answers = [
...data.questions[selected_question].answers,
{ ...empty_answer }
];
}} }}
> >
<span class="italic text-center">Add an answer</span> <span class="italic text-center">Add an answer</span>