add list support
This commit is contained in:
parent
8281fdc4e2
commit
ac37b5dd76
4 changed files with 86 additions and 1 deletions
22
src/lib/markdown/renderers/List.svelte
Normal file
22
src/lib/markdown/renderers/List.svelte
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
<script lang="ts">
|
||||
import type { Snippet } from 'svelte';
|
||||
|
||||
interface Props {
|
||||
children?: Snippet;
|
||||
ordered?: boolean;
|
||||
loose?: boolean;
|
||||
start?: number;
|
||||
}
|
||||
|
||||
const { children, ordered }: Props = $props();
|
||||
</script>
|
||||
|
||||
{#if ordered}
|
||||
<ol class="my-2">
|
||||
{@render children?.()}
|
||||
</ol>
|
||||
{:else}
|
||||
<ul class="my-2">
|
||||
{@render children?.()}
|
||||
</ul>
|
||||
{/if}
|
||||
27
src/lib/markdown/renderers/OrderedListItem.svelte
Normal file
27
src/lib/markdown/renderers/OrderedListItem.svelte
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
<script lang="ts">
|
||||
import type { Snippet } from 'svelte';
|
||||
|
||||
interface Props {
|
||||
children?: Snippet;
|
||||
task?: boolean;
|
||||
checked?: boolean;
|
||||
listItemIndex: number;
|
||||
}
|
||||
|
||||
const { children, task, checked: initial = false, listItemIndex, ...rest }: Props = $props();
|
||||
|
||||
let checked = $derived(initial);
|
||||
</script>
|
||||
|
||||
<li class="ml-2">
|
||||
{listItemIndex + 1}. {#if task}
|
||||
<input
|
||||
type="checkbox"
|
||||
class="mr-2"
|
||||
class:hidden={!task}
|
||||
{checked}
|
||||
onclick={() => {
|
||||
checked = !checked;
|
||||
}}
|
||||
/>{/if}{@render children?.()}
|
||||
</li>
|
||||
30
src/lib/markdown/renderers/UnorderedListItem.svelte
Normal file
30
src/lib/markdown/renderers/UnorderedListItem.svelte
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
<script lang="ts">
|
||||
import type { Snippet } from 'svelte';
|
||||
|
||||
interface Props {
|
||||
children?: Snippet;
|
||||
task?: boolean;
|
||||
checked?: boolean;
|
||||
listItemIndex?: number;
|
||||
}
|
||||
|
||||
const { children, task, checked: initial = false }: Props = $props();
|
||||
|
||||
let checked = $derived(initial);
|
||||
</script>
|
||||
|
||||
<li class="ml-2">
|
||||
{#if task}
|
||||
<input
|
||||
type="checkbox"
|
||||
class="mr-2"
|
||||
class:hidden={!task}
|
||||
{checked}
|
||||
onclick={() => {
|
||||
checked = !checked;
|
||||
}}
|
||||
/>
|
||||
{:else}
|
||||
🞄
|
||||
{/if}{@render children?.()}
|
||||
</li>
|
||||
|
|
@ -3,10 +3,13 @@
|
|||
import Code from '$lib/markdown/renderers/Code.svelte';
|
||||
import Heading from '$lib/markdown/renderers/Heading.svelte';
|
||||
import Link from '$lib/markdown/renderers/Link.svelte';
|
||||
import List from '$lib/markdown/renderers/List.svelte';
|
||||
import OrderedListItem from '$lib/markdown/renderers/OrderedListItem.svelte';
|
||||
import Paragraph from '$lib/markdown/renderers/Paragraph.svelte';
|
||||
import UnorderedListItem from '$lib/markdown/renderers/UnorderedListItem.svelte';
|
||||
import SvelteMarkdown from '@humanspeak/svelte-markdown';
|
||||
import dayjs from 'dayjs';
|
||||
import type { PageProps } from './$types';
|
||||
import Paragraph from '$lib/markdown/renderers/Paragraph.svelte';
|
||||
|
||||
let { data }: PageProps = $props();
|
||||
|
||||
|
|
@ -24,6 +27,9 @@
|
|||
source={data.post.body}
|
||||
renderers={{
|
||||
link: Link,
|
||||
list: List,
|
||||
orderedlistitem: OrderedListItem,
|
||||
unorderedlistitem: UnorderedListItem,
|
||||
code: Code,
|
||||
blockquote: BlockQuote,
|
||||
heading: Heading,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue