Closing #172

This commit is contained in:
Mawoka
2022-11-21 17:09:43 +01:00
parent 4286ef487b
commit cd09073cd1
12 changed files with 38 additions and 32 deletions
+11 -2
View File
@@ -121,8 +121,8 @@ async def finish_edit(edit_id: str, quiz_input: QuizInput):
if session_data is None:
raise HTTPException(status_code=401, detail="Edit ID not found!")
session_data = EditSessionData.parse_raw(session_data)
quiz_input.title = html.unescape(bleach.clean(quiz_input.title, tags=[], strip=True))
quiz_input.description = html.unescape(bleach.clean(quiz_input.description, tags=[], strip=True))
quiz_input.title = html.unescape(bleach.clean(quiz_input.title, tags=bleach.ALLOWED_TAGS, strip=True))
quiz_input.description = html.unescape(bleach.clean(quiz_input.description, tags=bleach.ALLOWED_TAGS, strip=True))
if quiz_input.background_color is not None:
quiz_input.background_color = html.unescape(bleach.clean(quiz_input.background_color, tags=[], strip=True))
@@ -133,6 +133,12 @@ async def finish_edit(edit_id: str, quiz_input: QuizInput):
quiz_input.questions[i].answers[i2].color = html.unescape(
bleach.clean(answer.color, tags=[], strip=True)
)
if answer.answer == "":
quiz_input.questions[i].answers[i2].answer = None
if answer.answer is not None:
quiz_input.questions[i].answers[i2].answer = html.unescape(
bleach.clean(answer.answer, tags=bleach.ALLOWED_TAGS, strip=True)
)
image_id_regex = r"^.{36}--.{36}$"
imgur_regex = r"^https://i\.imgur\.com\/.{7}.(jpg|png|gif)$"
server_regex = rf"^{re.escape(settings.root_address)}/api/v1/storage/download/.{{36}}--.{{36}}$"
@@ -154,6 +160,9 @@ async def finish_edit(edit_id: str, quiz_input: QuizInput):
for i, question in enumerate(quiz_input.questions):
image = question.image
quiz_input.questions[i].question = html.unescape(
bleach.clean(quiz_input.questions[i].question, tags=bleach.ALLOWED_TAGS, strip=True)
)
if image == "":
question.image = None
mark_image_for_deletion(question.image, i, old_quiz_data)
+5 -5
View File
@@ -111,7 +111,7 @@
</p>
{#if selected_question >= 0 && JSON.stringify(final_results) === JSON.stringify([null])}
<div class="flex justify-center flex-col my-auto col-start-2 col-end-2">
<h2 class="text-center">{quiz_data.questions[selected_question].question}</h2>
<h2 class="text-center">{@html quiz_data.questions[selected_question].question}</h2>
</div>
{/if}
<div class="justify-self-end ml-auto mr-0 col-start-3 col-end-3">
@@ -164,7 +164,7 @@
{#if timer_res !== undefined && !final_results_clicked && !question_results}
<div class="flex flex-col justify-center w-screen h-1/6">
<h1 class="text-6xl text-center">
{quiz_data.questions[selected_question].question}
{@html quiz_data.questions[selected_question].question}
</h1>
<!-- <span class='text-center py-2 text-lg'>{$t('admin_page.time_left')}: {timer_res}</span>-->
<div class="mx-auto my-2">
@@ -278,7 +278,7 @@
on:click={() => {
set_question_number(selected_question + 1);
}}
>{$t('admin_page.show_next_question')}: {get_question_title(
>{$t('admin_page.show_next_question')}: {@html get_question_title(
selected_question + 1,
quiz_data
)}</button
@@ -299,8 +299,8 @@
</div>
{:else}
<div class="flex flex-col justify-center w-screen h-full">
<h1 class="text-7xl text-center">{quiz_data.title}</h1>
<p class="text-3xl pt-8 text-center">{quiz_data.description}</p>
<h1 class="text-7xl text-center">{@html quiz_data.title}</h1>
<p class="text-3xl pt-8 text-center">{@html quiz_data.description}</p>
{#if quiz_data.cover_image}
<div class="flex justify-center align-middle items-center">
<div class="h-[30vh] m-auto w-auto mt-12">
+1 -1
View File
@@ -16,7 +16,7 @@
on:click={() => (expanded = !expanded)}
class="bg-white dark:bg-gray-700 flex justify-between w-full border-none m-0 p-2 rounded-t-lg hover:bg-gray-200 dark:hover:bg-gray-500 transition"
class:rounded-b-lg={!expanded}
>{headerText}
><span>{@html headerText}</span>
<svg
viewBox="0 0 20 20"
fill="none"
@@ -105,7 +105,7 @@
{#each quizzes as quiz, i}
<SwiperSlide>
<div class="flex justify-center pt-4 px-4">
<a href="/edit?quiz_id={quiz.id}" class="text-3xl">{quiz.title}</a>
<a href="/edit?quiz_id={quiz.id}" class="text-3xl">{@html quiz.title}</a>
</div>
<div class="flex justify-center p-10 h-full">
<div class="border-2 border-black rounded-lg w-5/6">
@@ -124,11 +124,11 @@
style="writing-mode: vertical-lr"
class="text-center h-full text-xl p-2"
>
{quiz.title}
{@html quiz.title}
</p>
<div class="col-start-2 col-end-6">
<p class="text-center">
{quiz.description}
{@html quiz.description}
</p>
{#if quiz.cover_image}
<div
@@ -150,7 +150,7 @@
style="writing-mode: sideways-lr"
class="text-center text-xl p-2"
>
{quiz.title}
{@html quiz.title}
</p>
</div>
</div>
@@ -246,7 +246,9 @@
{#each quiz.questions as question}
<SwiperSlide>
<div class="h-full">
<h5 class="text-center text-2xl">{question.question}</h5>
<h5 class="text-center text-2xl">
{@html question.question}
</h5>
{#if question.image}
<div
class="flex justify-center align-middle items-center"
@@ -43,7 +43,7 @@
{/each}
{#each quiz_answers as answer}
<div class="w-20">
<p class="-rotate-45">{answer}</p>
<p class="-rotate-45">{@html answer}</p>
</div>
{/each}
</div>
+1 -1
View File
@@ -100,7 +100,7 @@
<div class="flex flex-col justify-center w-screen h-1/6">
<h1 class="text-6xl text-center text-black dark:text-white">
{question.question}
{@html question.question}
</h1>
<div class="mx-auto my-2">
<CircularTimer bind:text={timer_res} bind:progress={circular_prgoress} color="#ef4444" />
+2 -2
View File
@@ -10,8 +10,8 @@
</script>
<div class="flex flex-col justify-center w-screen h-screen">
<h1 class="text-7xl text-center">{title}</h1>
<p class="text-3xl pt-8 text-center">{description}</p>
<h1 class="text-7xl text-center">{@html title}</h1>
<p class="text-3xl pt-8 text-center">{@html description}</p>
{#if cover_image}
<div class="flex justify-center align-middle items-center">
<div class="h-[30vh] m-auto w-auto mt-12">
+1 -1
View File
@@ -43,7 +43,7 @@
</script>
<div class="w-full px-6 lg:px-20 h-[80vh] absolute" in:fly={{ x: 100 }} out:fly={{ x: -100 }}>
<h1 class="text-3xl text-center">{question.question}</h1>
<h1 class="text-3xl text-center">{@html question.question}</h1>
{#if question.image !== null}
<div>
<img
@@ -32,14 +32,14 @@
<p
class="p-3 rounded-lg border-gray-500 border text-center w-11/12 lg:w-1/3 text-lg font-semibold dark:bg-gray-500"
>
{data.title}
{@html data.title}
</p>
</div>
<div class="flex justify-center pt-10 w-full max-h-32">
<p
class="p-3 rounded-lg border-gray-500 border text-center w-11/12 lg:w-1/3 h-20 resize-none dark:bg-gray-500"
>
{data.description}
{@html data.description}
</p>
</div>
+3 -8
View File
@@ -8,7 +8,6 @@
const { t } = getLocalization();
export let quiz;
export let enable_html = false;
import ImportedOrNot from '$lib/view_quiz/imported_or_not.svelte';
</script>
@@ -24,11 +23,7 @@
<h2
class="text-gray-800 dark:text-gray-200 text-3xl font-semibold truncate pr-2"
>
{#if enable_html}
{@html quiz.title}
{:else}
{quiz.title}
{/if}
{@html quiz.title}
</h2>
<span class="inline-block ml-auto">
<ImportedOrNot imported={quiz.imported_from_kahoot} />
@@ -37,7 +32,7 @@
<p
class="mt-2 text-gray-600 dark:text-gray-300 break-all overflow-hidden text-ellipsis max-h-[4.5rem] block"
>
{#if enable_html} {@html quiz.description}{:else}{quiz.description} {/if}
{@html quiz.description}
</p>
</div>
<div class="flex mt-4">
@@ -47,7 +42,7 @@
{:else}
{$t('explore_page.made_by')}
{/if}
{#if enable_html}{@html quiz.user}{:else}{quiz.user}{/if}</span
{@html quiz.user}</span
>
</div>
</div>
+1 -1
View File
@@ -82,7 +82,7 @@
{#if resp_data.hits.length !== 0}
<div class="grid lg:grid-cols-3 grid-cols-1">
{#each resp_data.hits as quiz}
<SearchCard quiz={quiz._formatted} enable_html={true} />
<SearchCard quiz={quiz._formatted} />
{/each}
</div>
{:else}
@@ -63,9 +63,9 @@
</svelte:head>
<div>
<h1 class="text-4xl text-center">{quiz.title}</h1>
<h1 class="text-4xl text-center">{@html quiz.title}</h1>
<div class="text-center">
<p>{quiz.description}</p>
<p>{@html quiz.description}</p>
</div>
{#if quiz.cover_image}
<div class="flex justify-center align-middle items-center">
@@ -118,7 +118,7 @@
<CollapsSection headerText={question.question}>
<div class="grid grid-cols-1 gap-2 rounded-b-lg bg-white dark:bg-gray-700 -mt-1">
<h3 class="text-3xl m-1 text-center">
{index_question + 1}: {question.question}
{index_question + 1}: {@html question.question}
</h3>
<!-- <label class='m-1 flex flex-row gap-2 w-3/5'>-->