50 lines
1.8 KiB
Svelte
50 lines
1.8 KiB
Svelte
<script lang="ts">
|
|
import type { FullWikipediaDetails } from "../../Logic/Web/Wikipedia"
|
|
import { Store } from "../../Logic/UIEventSource"
|
|
import FromHtml from "../Base/FromHtml.svelte"
|
|
import Loading from "../Base/Loading.svelte"
|
|
import { Disclosure, DisclosureButton, DisclosurePanel } from "@rgossiaux/svelte-headlessui"
|
|
import { ChevronRightIcon } from "@rgossiaux/svelte-heroicons/solid"
|
|
import ToSvelte from "../Base/ToSvelte.svelte"
|
|
import WikidataPreviewBox from "./WikidataPreviewBox"
|
|
import Tr from "../Base/Tr.svelte"
|
|
import Translations from "../i18n/Translations"
|
|
|
|
/**
|
|
* Small helper
|
|
*/
|
|
export let wikipediaDetails: Store<FullWikipediaDetails>
|
|
</script>
|
|
|
|
<a class="flex" href={$wikipediaDetails.articleUrl} rel="noreferrer" target="_blank">
|
|
<img class="h-6 w-6" src="./assets/svg/wikipedia.svg" />
|
|
<Tr t={Translations.t.general.wikipedia.fromWikipedia} />
|
|
</a>
|
|
|
|
{#if $wikipediaDetails.wikidata}
|
|
<ToSvelte construct={WikidataPreviewBox.WikidataResponsePreview($wikipediaDetails.wikidata)} />
|
|
{/if}
|
|
|
|
{#if $wikipediaDetails.firstParagraph === "" || $wikipediaDetails.firstParagraph === undefined}
|
|
<Loading>
|
|
<Tr t={Translations.t.general.wikipedia.loading} />
|
|
</Loading>
|
|
{:else}
|
|
<span class="wikipedia-article">
|
|
<FromHtml src={$wikipediaDetails.firstParagraph} />
|
|
<Disclosure let:open>
|
|
<DisclosureButton>
|
|
<span class="flex">
|
|
<ChevronRightIcon
|
|
style={(open ? "transform: rotate(90deg); " : "") +
|
|
" transition: all .25s linear; width: 1.5rem; height: 1.5rem"}
|
|
/>
|
|
Read the rest of the article
|
|
</span>
|
|
</DisclosureButton>
|
|
<DisclosurePanel>
|
|
<FromHtml src={$wikipediaDetails.restOfArticle} />
|
|
</DisclosurePanel>
|
|
</Disclosure>
|
|
</span>
|
|
{/if}
|