From ae7e0014d59b86b538005a5dff059fb8b2904715 Mon Sep 17 00:00:00 2001 From: rambip Date: Wed, 2 Aug 2023 18:49:27 +0200 Subject: [PATCH] added todo lists support and add it in showcase --- Cargo.lock | 13 +++++++++++++ examples/showcase/src/main.rs | 4 ++++ src/render.rs | 28 +++++++++++++++++++++++----- 3 files changed, 40 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8f8c134..c7af14e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1075,6 +1075,19 @@ dependencies = [ "web-sys", ] +[[package]] +name = "markdown-onclick" +version = "0.1.0" +dependencies = [ + "console_error_panic_hook", + "leptos", + "leptos-markdown", + "log", + "wasm-bindgen", + "wasm-logger", + "web-sys", +] + [[package]] name = "markdown-showcase" version = "0.1.0" diff --git a/examples/showcase/src/main.rs b/examples/showcase/src/main.rs index 57b50d9..2536164 100644 --- a/examples/showcase/src/main.rs +++ b/examples/showcase/src/main.rs @@ -42,6 +42,10 @@ Wikilinks are supported to: [[https://en.wikipedia.org/wiki/Markdown|markdown]] - and - unorderded - too + +Even todo lists: +- [ ] todo +- [x] done "#; #[component] diff --git a/src/render.rs b/src/render.rs index 80e69a1..8b8e280 100644 --- a/src/render.rs +++ b/src/render.rs @@ -127,16 +127,16 @@ impl<'a> Iterator for Renderer<'a> SoftBreak => Ok(self.next()?), HardBreak => Ok(view!{cx,
}.into_any()), Rule => Ok(render_rule(self.context, range)), - TaskListMarker(_) => HtmlError::err("do not support todo lists yet"), + TaskListMarker(m) => Ok(render_tasklist_marker(self.context, *m, range)), Math(disp, content) => render_maths(self.context, &content, &disp, range), }; Some( rendered.unwrap_or_else(|e| view!{cx, -
-

"got this error while rendering markdown"

- {e.to_string()} -
+ + {e.to_string()} +
+
}.into_any() ) ) @@ -272,6 +272,24 @@ impl<'a> Renderer<'a> } +fn render_tasklist_marker(context: &RenderContext, m: bool, position: Range) + -> Html { + let cx = context.cx; + let onclick = context.onclick.clone(); + let callback = move |e: MouseEvent| { + e.prevent_default(); + e.stop_propagation(); + let click_event = MarkdownMouseEvent { + mouse_event: e, + position: position.clone() + }; + onclick(click_event) + }; + view!{ + cx, + + }.into_any() +} fn render_rule(context: &RenderContext, range: Range) -> Html{ let cx = context.cx;