rust powered markdown parsing working

This commit is contained in:
Iaphetes 2024-11-13 08:06:51 +01:00
parent 49deafd8a2
commit 05519bad5b
10 changed files with 3099 additions and 4 deletions

View file

@ -1,3 +1,44 @@
<script lang="ts">
import { exists, BaseDirectory } from '@tauri-apps/plugin-fs';
import { marked } from 'marked';
import asyncDerivedStream from '../stream.js'
import { writable } from 'svelte/store'
import { invoke } from "@tauri-apps/api/core";
let text = writable(`Some words are *italic*, some are **bold**
![test](/home/toxotes/Pictures/wallpaper.png)
`);
function randomSleep () {
const timeout = Math.floor(Math.random() * 2000)
return new Promise(resolve => setTimeout(resolve, timeout))
}
async function parse_markdown(document){
return await invoke("parse_markdown", { document });
}
let parsed_text = asyncDerivedStream(text, parse_markdown)
</script>
<textarea bind:value={$text}></textarea>
{@html $parsed_text}
<style>
textarea {
width: 100%;
height: 200px;
}
</style>
<!--
<script lang="ts">
import { invoke } from "@tauri-apps/api/core";
@ -154,3 +195,4 @@ button {
}
</style>
-->

16
src/stream.js Normal file
View file

@ -0,0 +1,16 @@
import { derived } from 'svelte/store'
export default function (stores, callback, initial_value) {
let previous = 0
return derived(stores, ($stores, set) => {
const start = Date.now()
Promise.resolve(callback($stores)).then(value => {
if (start > previous) {
previous = start
set(value)
}
})
}, initial_value)
}