Integration with Rocket almost done, TODO: Fix font file serving; Add conditional to spin up Dioxus dev server.

This commit is contained in:
Ada Werefox 2023-03-29 12:43:39 +00:00
parent ff68778e94
commit b85a03c6fd
8 changed files with 63 additions and 22 deletions

View File

@ -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"

View File

@ -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

View File

@ -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
View 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

View File

@ -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!(

View File

@ -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(())
}

View File

@ -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: {