From 2dacece4eedc8af2ccde3be6918371293350cc4e Mon Sep 17 00:00:00 2001
From: Ashelyn Rose
Date: Sat, 26 Apr 2025 21:06:00 -0600
Subject: Convert to rocket and morgana
---
src/components/app.rs | 133 -----------------------------------------
src/components/editor/mod.rs | 25 ++++----
src/components/layout/mod.rs | 56 ++++++++++-------
src/components/mod.rs | 12 ++--
src/components/renderer/mod.rs | 23 ++++---
5 files changed, 71 insertions(+), 178 deletions(-)
delete mode 100644 src/components/app.rs
(limited to 'src/components')
diff --git a/src/components/app.rs b/src/components/app.rs
deleted file mode 100644
index 2814562..0000000
--- a/src/components/app.rs
+++ /dev/null
@@ -1,133 +0,0 @@
-use std::collections::HashMap;
-
-use leptos::prelude::*;
-use leptos::Params;
-use leptos_meta::{provide_meta_context, MetaTags, Stylesheet, Title};
-use leptos_router::hooks::use_params;
-use leptos_router::params::Params;
-use leptos_router::{
- components::{ParentRoute, Route, Router, Routes},
- path,
-};
-
-use super::editor::WikiEditor;
-use super::renderer::WikiPage;
-use crate::components::layout::Layout;
-use crate::data::{Namespace, Page, PageData, PageUuid};
-
-pub fn shell(options: LeptosOptions) -> impl IntoView {
- view! {
-
-
-
-
-
-
-
-
-
-
-
-
-
- }
-}
-
-#[component]
-pub fn App() -> impl IntoView {
- // Provides context that manages stylesheets, titles, meta tags, etc.
- provide_meta_context();
-
- view! {
- // injects a stylesheet into the document
- // id=leptos means cargo-leptos will hot-reload this stylesheet
-
-
- // sets the document title
-
-
- // content for this welcome page
-
-
-
-
-
-
-
-
- }
-}
-
-#[derive(Params, PartialEq)]
-struct PageParams {
- path: Option,
-}
-
-#[server]
-async fn get_namespace() -> Result {
- use crate::data::StormscribeData;
-
- Ok(StormscribeData::get_namespace().await)
-}
-
-#[server]
-async fn get_pages() -> Result, ServerFnError> {
- use crate::data::StormscribeData;
-
- Ok(StormscribeData::get_all_pages().await)
-}
-
-#[server]
-async fn lookup_page(path: String) -> Result {
- use crate::data::StormscribeData;
-
- Ok(StormscribeData::get_page_data(path).await)
-}
-
-// Renders a page
-#[component]
-fn PageRender() -> impl IntoView {
- let params = use_params::();
-
- let page_path = params
- .read()
- .as_ref()
- .ok()
- .map(|params| params.path.clone().unwrap_or("Unknown path".to_string()))
- .unwrap_or("Could not read params".to_string());
-
- let page_resource = Resource::new(
- move || page_path.clone(),
- |page_path| async move { lookup_page(page_path).await },
- );
-
- view! {
- "Loading..."
}
- >
- {move || page_resource.get()
- .map(|page| view! {
- {format!("{page:#?}")}
- })
- }
-
- }
- .into_any()
-}
-
-// Renders a page
-#[component]
-fn PageEdit() -> impl IntoView {
- let params = use_params::();
-
- let page_path = params
- .read()
- .as_ref()
- .ok()
- .map(|params| params.path.clone().unwrap_or("Unknown path".to_string()))
- .unwrap_or("Could not read params".to_string());
-
- view! {
-
- }
-}
diff --git a/src/components/editor/mod.rs b/src/components/editor/mod.rs
index 05e45d3..4d38c69 100644
--- a/src/components/editor/mod.rs
+++ b/src/components/editor/mod.rs
@@ -1,13 +1,18 @@
-use leptos::prelude::*;
-use leptos::{island, view, IntoView};
+use std::path::PathBuf;
+use morgana::{morx, Component, RenderNode};
-#[island]
-pub fn WikiEditor(
- url_path: String,
-) -> impl IntoView {
- view! {
- Article (Editing)
- Page render
- {url_path}
+stylance::import_crate_style!(styles, "src/components/layout/layout.module.css");
+
+pub struct Editor {
+ page_path: PathBuf,
+}
+
+impl Component for Editor {
+ fn render(self: Box) -> RenderNode {
+ morx! {
+ h1= "Article (Editing)"
+ p= "Page render"
+ pre= {self.page_path.to_string_lossy()}
+ }
}
}
diff --git a/src/components/layout/mod.rs b/src/components/layout/mod.rs
index e688f5f..cc524e9 100644
--- a/src/components/layout/mod.rs
+++ b/src/components/layout/mod.rs
@@ -1,25 +1,41 @@
-use leptos::prelude::*;
-use leptos::component;
-use leptos_router::components::Outlet;
+use morgana::{morx, Component, RenderNode};
stylance::import_crate_style!(styles, "src/components/layout/layout.module.css");
-#[component]
-pub fn Layout() -> impl IntoView {
- view! {
-
+pub struct Layout {
+ pub children: Vec,
+ pub page_title: String,
+ pub site_title: String,
+}
+
+impl Component for Layout {
+ fn render(self: Box) -> RenderNode {
+ morx! {
+ html lang="html" {
+ head {
+ title ={self.page_title}
+ }
+ body {
+ div class={styles::layout} {
+ header {
+ a href="/" id="siteTitle" {
+ ={self.site_title}
+ }
+ }
+
+ nav {
+ p= "Nav"
+ }
+
+ main ={self.children}
+
+ footer {
+ p= "Footer"
+ }
+ }
+ }
+ }
+ }
}
}
+
diff --git a/src/components/mod.rs b/src/components/mod.rs
index 2015a2e..1058018 100644
--- a/src/components/mod.rs
+++ b/src/components/mod.rs
@@ -1,7 +1,7 @@
-pub mod editor;
-pub mod layout;
-pub mod renderer;
+mod editor;
+mod layout;
+mod renderer;
-pub mod app;
-
-pub use app::App;
+pub use editor::Editor;
+pub use renderer::PageRenderer;
+pub use layout::Layout;
diff --git a/src/components/renderer/mod.rs b/src/components/renderer/mod.rs
index 5a30c2e..e790924 100644
--- a/src/components/renderer/mod.rs
+++ b/src/components/renderer/mod.rs
@@ -1,12 +1,17 @@
-use leptos::prelude::*;
-use leptos::{component, view, IntoView};
+use std::path::PathBuf;
+use morgana::{morx, Component, RenderNode};
-#[component]
-pub fn WikiPage(// page_data: Page,
- // parent_namespaces: Vec
-) -> impl IntoView {
- view! {
- Article (Viewing)
- Page render
+stylance::import_crate_style!(styles, "src/components/layout/layout.module.css");
+
+pub struct PageRenderer {
+ page_path: PathBuf,
+}
+
+impl Component for PageRenderer {
+ fn render(self: Box) -> RenderNode {
+ morx! {
+ h1= "Article (Viewing)"
+ p= "Page render"
+ }
}
}
--
cgit 1.4.1