diff options
-rw-r--r-- | src/bin/mt-webface.rs | 40 | ||||
-rw-r--r-- | webface/templates/model_list.html | 11 | ||||
-rw-r--r-- | webface/templates/model_view.html | 18 |
3 files changed, 51 insertions, 18 deletions
diff --git a/src/bin/mt-webface.rs b/src/bin/mt-webface.rs index 6809f57..a11a038 100644 --- a/src/bin/mt-webface.rs +++ b/src/bin/mt-webface.rs @@ -1,15 +1,19 @@ extern crate getopts; extern crate pencil; -#[macro_use] extern crate log; +extern crate modelthing; extern crate env_logger; +#[macro_use] +extern crate log; + use std::env; use std::collections::BTreeMap; use std::process::exit; +use std::path::Path; use getopts::Options; use pencil::Pencil; -use pencil::{Request, PencilResult, Response, HTTPError}; +use pencil::{Request, PencilResult, Response, HTTPError, PencilError}; fn home(r: &mut Request) -> PencilResult { @@ -24,20 +28,35 @@ fn readme(r: &mut Request) -> PencilResult { return r.app.render_template("raw.html", &context); } -fn model_list(_: &mut Request) -> PencilResult { - Ok(Response::from("List of Models")) +fn model_list(r: &mut Request) -> PencilResult { + let paths = modelthing::search_models(Path::new("examples")); + let l: Vec<String> = paths.iter().map(|x| Path::new(x).strip_prefix("examples").unwrap().to_string_lossy().to_string()).collect(); + let mut context = BTreeMap::new(); + context.insert("model_slug_list".to_string(), l); + return r.app.render_template("model_list.html", &context); } fn model_view(r: &mut Request) -> PencilResult { - let model_id = r.view_args.get("model_id").unwrap(); - let mut context = BTreeMap::new(); - context.insert("model_id".to_string(), model_id.to_string()); - return r.app.render_template("model_view.html", &context); + let model_slug = r.view_args.get("model_slug").unwrap(); + let model_path = Path::new("examples").join(model_slug); + match modelthing::load_model_entry(model_path.as_path()) { + Ok(me) => { + let mut context = BTreeMap::new(); + context.insert("model_slug".to_string(), model_slug.to_string()); + context.insert("model_name".to_string(), me.metadata.name_en); + context.insert("model_description".to_string(), me.metadata.description_en.unwrap_or("".to_string())); + //context.insert("metadata".to_string(), me.metadata); + context.insert("markdown".to_string(), me.markdown); + context.insert("modelica".to_string(), format!("{:?}", me.ast)); + r.app.render_template("model_view.html", &context) + }, + Err(_) => Err(PencilError::PenHTTPError(pencil::HTTPError::NotFound)), + } } fn page_not_found(_: HTTPError) -> PencilResult { let mut response = Response::from("404: Not Found"); - response.status_code = 500; + response.status_code = 404; Ok(response) } @@ -97,9 +116,10 @@ fn main() { app.register_template("raw.html"); app.get("/", "home", home); app.get("/readme/", "readme", readme); + app.register_template("model_list.html"); app.get("/model_list/", "model_list", model_list); app.register_template("model_view.html"); - app.get("/model/<model_id:string>", "model", model_view); + app.get("/model/<model_slug:string>/", "model", model_view); let bind = matches.opt_str("bind").unwrap_or("127.0.0.1:5000".to_string()); let bind_str: &str = &bind; diff --git a/webface/templates/model_list.html b/webface/templates/model_list.html new file mode 100644 index 0000000..db11bdc --- /dev/null +++ b/webface/templates/model_list.html @@ -0,0 +1,11 @@ +{{# partial content}} +<h1>Example Models</h1> + +<ul> +{{#each model_slug_list slug}} +<li><a href="/model/{{this}}/">{{ this }}</a> +{{/each}} +</ul> + +{{/partial}} +{{~> base.html~}} diff --git a/webface/templates/model_view.html b/webface/templates/model_view.html index 4dba406..4add92b 100644 --- a/webface/templates/model_view.html +++ b/webface/templates/model_view.html @@ -1,17 +1,19 @@ {{# partial content}} -<h1>{{ model_id }}</h1> +<h1>{{ model_slug }}</h1> -<b>Full Name</b>: {{ model.name }} +<h2>Metadata</h2> +<dl> + <li><b>Full Name</b>: {{ model_name }} + <li><b>Description</b>: {{ model_description }} +</dl> -<b>Raw Model:</b> +<h2>Modelica</h2> <pre> -{{ raw_model }} +{{ modelica }} </pre> - -<h2>Other Info</h2> -{{ page_text }} - +<h2>Wiki Page</h2> +{{ markdown }} {{/partial}} {{~> base.html~}} |