diff --git a/Cargo.lock b/Cargo.lock index 73f0de7..bdabc10 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -340,9 +340,9 @@ checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" [[package]] name = "handlebars" -version = "1.1.0" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d82e5750d8027a97b9640e3fefa66bbaf852a35228e1c90790efd13c4b09c166" +checksum = "3623110a77811256820e92df1b3b286f6f44f99d1f77a94b75e262c28d5034f4" dependencies = [ "lazy_static", "log 0.4.11", @@ -551,12 +551,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "maplit" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" - [[package]] name = "matches" version = "0.1.8" @@ -728,45 +722,19 @@ checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" [[package]] name = "pest" -version = "2.1.3" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53" -dependencies = [ - "ucd-trie", -] +checksum = "0fce5d8b5cc33983fc74f78ad552b5522ab41442c4ca91606e4236eb4b5ceefc" [[package]] name = "pest_derive" -version = "2.1.0" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0" +checksum = "ca3294f437119209b084c797604295f40227cffa35c57220b1e99a6ff3bf8ee4" dependencies = [ "pest", - "pest_generator", -] - -[[package]] -name = "pest_generator" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99b8db626e31e5b81787b9783425769681b347011cc59471e33ea46d2ea0cf55" -dependencies = [ - "pest", - "pest_meta", - "proc-macro2 1.0.18", - "quote 1.0.7", - "syn 1.0.34", -] - -[[package]] -name = "pest_meta" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54be6e404f5317079812fc8f9f5279de376d8856929e21c184ecf6bbd692a11d" -dependencies = [ - "maplit", - "pest", - "sha-1", + "quote 0.3.15", + "syn 0.11.11", ] [[package]] @@ -815,6 +783,12 @@ version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" +[[package]] +name = "quote" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a" + [[package]] name = "quote" version = "0.6.13" @@ -997,6 +971,7 @@ name = "rocket_page" version = "0.1.0" dependencies = [ "diesel", + "handlebars", "rocket", "rocket_contrib", "serde", @@ -1068,18 +1043,6 @@ dependencies = [ "serde", ] -[[package]] -name = "sha-1" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df" -dependencies = [ - "block-buffer", - "digest", - "fake-simd", - "opaque-debug", -] - [[package]] name = "sha2" version = "0.8.2" @@ -1122,6 +1085,17 @@ version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "502d53007c02d7605a05df1c1a73ee436952781653da5d0bf57ad608f66932c1" +[[package]] +name = "syn" +version = "0.11.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad" +dependencies = [ + "quote 0.3.15", + "synom", + "unicode-xid 0.0.4", +] + [[package]] name = "syn" version = "0.15.44" @@ -1144,6 +1118,15 @@ dependencies = [ "unicode-xid 0.2.1", ] +[[package]] +name = "synom" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6" +dependencies = [ + "unicode-xid 0.0.4", +] + [[package]] name = "thread_local" version = "1.0.1" @@ -1196,12 +1179,6 @@ version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "373c8a200f9e67a0c95e62a4f52fbf80c23b4381c05a17845531982fa99e6b33" -[[package]] -name = "ucd-trie" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" - [[package]] name = "unicase" version = "1.4.2" @@ -1229,6 +1206,12 @@ dependencies = [ "tinyvec", ] +[[package]] +name = "unicode-xid" +version = "0.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc" + [[package]] name = "unicode-xid" version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index c5e5384..10325d7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,8 +12,9 @@ diesel = { version = "1.4", features = ["sqlite"] } serde_derive = "1.0" serde_json = "1.0" serde = "1.0" +handlebars = "1.0" [dependencies.rocket_contrib] -version = "0.4" +version = "0.4.5" default-features = false features = ["diesel_sqlite_pool", "handlebars_templates", "serve"] diff --git a/src/main.rs b/src/main.rs index 08a41da..dbc29af 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,6 +9,8 @@ extern crate diesel; #[macro_use] extern crate serde_derive; extern crate serde_json; +#[macro_use] +extern crate handlebars; use std::collections::HashMap; @@ -27,6 +29,7 @@ use rocket::request::{Form, FromParam}; use rocket::response::Redirect; use rocket_contrib::databases; use rocket_contrib::serve::StaticFiles; +use rocket_contrib::templates::handlebars::HelperDef; use rocket_contrib::templates::Template; struct StundenByID(i32); @@ -124,9 +127,14 @@ fn klasse_view(conn: DbConn, class_id: i32) -> Template { Template::render("klasse", cont) } +#[derive(Serialize)] +struct AddKlasseContext<'a> { + parent: &'a str, +} + #[get("/add/klasse")] fn get_klasse_form() -> Template { - Template::render("add_klasse_form", "") + Template::render("add_klasse_form", AddKlasseContext { parent: "base" }) } #[derive(FromForm, Insertable)] @@ -149,10 +157,37 @@ fn post_klasse_form(klasse: Form, conn: DbConn) -> Result, + _: &handlebars::Handlebars, + _: &handlebars::Context, + _: &mut handlebars::RenderContext<'_>, + out: &mut dyn handlebars::Output, +) -> handlebars::HelperResult { + if let Some(param) = h.param(0) { + if let serde_json::value::Value::Array(arr) = param.value() { + let l = arr.len(); + let stunden = if l > 1 { "Stunden" } else { "Stunde" }; + out.write(&format!("{} {}", l, stunden))?; + Ok(()) + } else { + Err(handlebars::RenderError::new("Not a array")) + } + } else { + Err(handlebars::RenderError::new( + "No parameter given at least one required", + )) + } +} + fn main() { rocket::ignite() .attach(DbConn::fairing()) - .attach(Template::fairing()) + .attach(Template::custom(|engines| { + engines + .handlebars + .register_helper("length", Box::new(mlen_helper_fun)); + })) .mount( "/static", StaticFiles::from(concat!(env!("CARGO_MANIFEST_DIR"), "/static")), diff --git a/templates/base.hbs b/templates/base.hbs index 70d5e79..bc5d7dc 100644 --- a/templates/base.hbs +++ b/templates/base.hbs @@ -1,17 +1,16 @@ - - - - - Vertretungsplan Uhlandshöhe - + + + + + Vertretungsplan Uhlandshöhe + - - {{~> page}} -

End

- + + {{~> page}} + - + \ No newline at end of file diff --git a/templates/uebersicht.hbs b/templates/uebersicht.hbs index 5a48bba..a319374 100644 --- a/templates/uebersicht.hbs +++ b/templates/uebersicht.hbs @@ -2,9 +2,12 @@

Vertretungen

{{#each klassen}} -
-

{{this.0.klassen_id}}. {{this.0.stufe}}{{this.0.gruppe}}
{{this.1}}

-
+ +
+

{{this.0.stufe}}{{this.0.gruppe}}

+

{{length this.1}} vertreten
+
+
{{/each}}
{{/inline}}