<script type="ts"> import { grabAssignment, grabSolution, isLoggedIn } from "./ksp-task-grabber"; import type { TaskStatus } from "./ksp-task-grabber"; import { nonNull } from './helpers' import App from "./App.svelte"; import { taskStatuses } from "./task-status-cache"; import type { TaskDescriptor } from "./tasks"; import Odevzdavatko from "./Odevzdavatko.svelte"; export let task: TaskDescriptor | null | undefined export let showSolution: boolean = false $: { task showSolution = false } let referenceId: string | null $: { if (task != null) { const r = task.taskReference if (referenceId != r) referenceId = r } } let status: TaskStatus | undefined $: if (task) status = $taskStatuses.get(referenceId!) let loginUrl: string = null! function updateLoginUrl() { loginUrl = `/z/auth/login.cgi?redirect=${encodeURIComponent(location.href)}` } updateLoginUrl() window.addEventListener("onhashchange", updateLoginUrl) </script> <style> div { text-align: justify; } .header { display: flex; width: 100%; flex-direction: row; } .header div { flex-grow: 1; } .header .status { text-align: right; font-style: italic; } </style> <div> {#if task != null} {#if nonNull(task).type == "text"} <div class="header"> <div class="title"><h3>{nonNull(task).title}</h3></div> </div> {@html nonNull(task).htmlContent || "Toto je prázdný textový node 😢"} {:else if nonNull(task).type == "open-data"} {#await grabAssignment(nonNull(referenceId))} Načítám úlohu {:then task} <div class="header"> <div class="title"><h3>{task.name}</h3></div> <div class="status"> <p> {referenceId} | {task.points} bodů {#if status && status.submitted} {#if nonNull(status).solved} | Vyřešeno 🥳 {:else} | odevzdáno za {nonNull(status).points} bod{ "ů yyy"[nonNull(status).points] ?? "ů" } {/if} {/if} </p> </div> </div> {@html task.description} <hr class="clearfloat" /> {#if isLoggedIn()} <Odevzdavatko id={nonNull(referenceId)} /> {:else} <p class="zs-warning">Pro odevzdávání je potřeba se <a href={loginUrl}>přihlásit</a>.</p> {/if} <hr class="clearfloat" /> <div class="solution"> {#if !showSolution} <a href="javasctipt:;" on:click|preventDefault|stopPropagation={() => showSolution = true}> Zobrazit řešení úlohy </a> {:else} <h4>Řešení</h4> {#await grabSolution(nonNull(referenceId))} Načítám... {:then solution} {@html solution.description} {/await} {/if} </div> {/await} {/if} {/if} </div>