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 Code from '$lib/markdown/renderers/Code.svelte';
|
||||||
import Heading from '$lib/markdown/renderers/Heading.svelte';
|
import Heading from '$lib/markdown/renderers/Heading.svelte';
|
||||||
import Link from '$lib/markdown/renderers/Link.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 SvelteMarkdown from '@humanspeak/svelte-markdown';
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
import type { PageProps } from './$types';
|
import type { PageProps } from './$types';
|
||||||
import Paragraph from '$lib/markdown/renderers/Paragraph.svelte';
|
|
||||||
|
|
||||||
let { data }: PageProps = $props();
|
let { data }: PageProps = $props();
|
||||||
|
|
||||||
|
|
@ -24,6 +27,9 @@
|
||||||
source={data.post.body}
|
source={data.post.body}
|
||||||
renderers={{
|
renderers={{
|
||||||
link: Link,
|
link: Link,
|
||||||
|
list: List,
|
||||||
|
orderedlistitem: OrderedListItem,
|
||||||
|
unorderedlistitem: UnorderedListItem,
|
||||||
code: Code,
|
code: Code,
|
||||||
blockquote: BlockQuote,
|
blockquote: BlockQuote,
|
||||||
heading: Heading,
|
heading: Heading,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue