Integration with Rocket almost done, TODO: Fix font file serving; Add conditional to spin up Dioxus dev server.
This commit is contained in:
parent
ff68778e94
commit
b85a03c6fd
@ -9,11 +9,11 @@ edition = "2021"
|
||||
[dependencies]
|
||||
dioxus = "0.3.2"
|
||||
dioxus-web = "0.3.1"
|
||||
dioxus-ssr = "0.3.0"
|
||||
|
||||
log = "0.4.6"
|
||||
|
||||
# WebAssembly Debug
|
||||
wasm-logger = "0.2.0"
|
||||
console_error_panic_hook = "0.1.7"
|
||||
wasm-bindgen = "0.2.84"
|
||||
dioxus-autofmt = "0.3.0"
|
||||
rocket = "=0.5.0-rc.3"
|
||||
|
14
README.md
14
README.md
@ -1,21 +1,25 @@
|
||||
# Dioxus - [letter.werefox.cafe](https://letter.werefox.cafe)
|
||||
|
||||
> A re-implementation of the Valentine's Day site I made, but using Rust's [Dioxus](https://dioxuslabs.com/) crate.
|
||||
> A re-implementation of the Valentine's Day site I made, but using Rust's [Dioxus](https://dioxuslabs.com/) crate and [Rocket](https://rocket.rs/) crate.
|
||||
|
||||
## Usage
|
||||
|
||||
### Just build the assets
|
||||
### Just build
|
||||
|
||||
```
|
||||
dioxus build
|
||||
cargo build
|
||||
```
|
||||
|
||||
### Start a `dev-server` for the project:
|
||||
|
||||
```
|
||||
dioxus serve
|
||||
cargo run
|
||||
```
|
||||
|
||||
## Ignore This Section
|
||||
|
||||
> I need to set things up so you can run the Dioxus dev server wothout launching rocket. I'll figire that out later.
|
||||
|
||||
(or, I personally use the following since port `8080` is usually being used and I want hot reloading)
|
||||
|
||||
```
|
||||
@ -25,7 +29,7 @@ dioxus serve --hot-reload --port 8234
|
||||
### Package this project:
|
||||
|
||||
```
|
||||
dioxus build --release
|
||||
cargo build --release
|
||||
```
|
||||
|
||||
## Project Structure
|
||||
|
2
build.rs
2
build.rs
@ -8,7 +8,7 @@ fn main() {
|
||||
// "--minify",
|
||||
// ]);
|
||||
tailwind.args(
|
||||
"tailwindcss -i src/index.css -c tailwind.config.js -o public/tailwind.min.css --minify"
|
||||
"tailwindcss -i src/index.css -c tailwind.config.js -o public/styles/tailwind.min.css --minify"
|
||||
.split(" "),
|
||||
);
|
||||
tailwind.env("NODE_ENV", "production");
|
||||
|
8
public/styles/index.css
Normal file
8
public/styles/index.css
Normal file
@ -0,0 +1,8 @@
|
||||
|
||||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
@font-face {
|
||||
font-family: 'DejaVuSansMono';
|
||||
src: local('DejaVuSansMono'), url('/fonts/DejaVuSansMono.ttf'), format('ttf');
|
||||
}
|
File diff suppressed because one or more lines are too long
11
src/lib.rs
11
src/lib.rs
@ -1,21 +1,22 @@
|
||||
#![allow(non_snake_case)]
|
||||
pub mod web_app {
|
||||
// import the prelude to get access to the `rsx!` macro and the `Scope` and `Element` types
|
||||
use dioxus::prelude::*;
|
||||
|
||||
pub fn app(cx: Scope) -> Element {
|
||||
pub fn App(cx: Scope) -> Element {
|
||||
cx.render(rsx!(
|
||||
div {
|
||||
class: "min-h-screen font-nerd bg-alice-werefox-grey-light dark:bg-alice-werefox-grey",
|
||||
div {
|
||||
class: "container space-y-4 mx-auto p-4",
|
||||
add_heart {},
|
||||
make_poem {},
|
||||
AddHeart {},
|
||||
MakePoem {},
|
||||
}
|
||||
}
|
||||
))
|
||||
}
|
||||
|
||||
fn add_heart(cx: Scope) -> Element {
|
||||
fn AddHeart(cx: Scope) -> Element {
|
||||
cx.render(rsx!(
|
||||
div {
|
||||
class: "flex justify-center py-8",
|
||||
@ -34,7 +35,7 @@ pub mod web_app {
|
||||
))
|
||||
}
|
||||
|
||||
fn make_poem(cx: Scope) -> Element {
|
||||
fn MakePoem(cx: Scope) -> Element {
|
||||
let poem = include_str!("data/poem.txt").split("\n\n");
|
||||
|
||||
cx.render(rsx!(
|
||||
|
41
src/main.rs
41
src/main.rs
@ -1,11 +1,38 @@
|
||||
#![allow(non_snake_case)]
|
||||
#[macro_use]
|
||||
extern crate rocket;
|
||||
|
||||
use rust_letter::web_app;
|
||||
use rocket::fs::FileServer;
|
||||
use rocket::http::ContentType;
|
||||
use rocket::tokio::fs::File;
|
||||
use std::path::Path;
|
||||
|
||||
fn main() {
|
||||
// init debug tool for WebAssembly
|
||||
wasm_logger::init(wasm_logger::Config::default());
|
||||
console_error_panic_hook::set_once();
|
||||
// #[get("/<font>")]
|
||||
// async fn fonts(font: &str) -> (ContentType, Option<File>) {
|
||||
// let filename = Path::new("public/fonts/").join(font);
|
||||
// (ContentType::TTF, File::open(&filename).await.ok())
|
||||
// }
|
||||
|
||||
dioxus_web::launch(web_app::app);
|
||||
#[get("/")]
|
||||
async fn index() -> rocket::response::content::RawHtml<String> {
|
||||
let mut vdom = dioxus::core::VirtualDom::new(rust_letter::web_app::App);
|
||||
let _ = vdom.rebuild();
|
||||
let mut output = dioxus_ssr::render(&vdom);
|
||||
output = format!(
|
||||
"<head><link href=/styles/tailwind.min.css rel=stylesheet /></head>{}",
|
||||
output
|
||||
)
|
||||
.to_string();
|
||||
rocket::response::content::RawHtml(output)
|
||||
}
|
||||
|
||||
#[rocket::main]
|
||||
async fn main() -> Result<(), rocket::Error> {
|
||||
let _result = rocket::build()
|
||||
.mount("/images", FileServer::from("public/images"))
|
||||
.mount("/styles", FileServer::from("public/styles"))
|
||||
.mount("/fonts", FileServer::from("public/fonts"))
|
||||
.mount("/", routes![index])
|
||||
.launch()
|
||||
.await?;
|
||||
Ok(())
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ module.exports = {
|
||||
content: [
|
||||
// Or if using `src` directory:
|
||||
"./src/**/*.{rs,html,js,ts,jsx,tsx,ttf}",
|
||||
"./target/**/*.{rs,html,js,ts,jsx,tsx,ttf}",
|
||||
],
|
||||
theme: {
|
||||
extend: {
|
||||
|
Loading…
Reference in New Issue
Block a user