show number of subs per class

This commit is contained in:
Dietrich 2020-08-06 08:54:19 +02:00
parent 3c31bdabb5
commit 9fcd34429c
5 changed files with 97 additions and 76 deletions

99
Cargo.lock generated
View File

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

View File

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

View File

@ -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<KlasseForm>, conn: DbConn) -> Result<Redirect,
}
}
fn mlen_helper_fun(
h: &handlebars::Helper<'_, '_>,
_: &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")),

View File

@ -1,17 +1,16 @@
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<link rel="stylesheet" type="text/css" href="/static/style.css" />
<style>
</style>
<meta charset="utf-8">
<title>Vertretungsplan Uhlandshöhe</title>
</head>
<head>
<link rel="stylesheet" type="text/css" href="/static/style.css" />
<style>
</style>
<meta charset="utf-8">
<title>Vertretungsplan Uhlandshöhe</title>
</head>
<body>
{{~> page}}
<h3> End</h3>
</body>
<body>
{{~> page}}
</body>
</html>

View File

@ -2,9 +2,12 @@
<h1>Vertretungen</h1>
<div class="grid-container">
{{#each klassen}}
<div class="grid-item">
<h2>{{this.0.klassen_id}}. {{this.0.stufe}}{{this.0.gruppe}} <br />{{this.1}}</h2>
</div>
<a href="/klasse/{{this.0.klassen_id}}">
<div class="grid-item">
<h2>{{this.0.stufe}}{{this.0.gruppe}}</h2>
<div class="summary"><br />{{length this.1}} vertreten</div>
</div>
</a>
{{/each}}
</div>
{{/inline}}