diff --git a/web/src/main.rs b/web/src/main.rs index 0f99e08..16f67bd 100644 --- a/web/src/main.rs +++ b/web/src/main.rs @@ -11,12 +11,14 @@ use pronouns_today::{InstanceSettings, Pronoun}; #[derive(Template)] #[template(path = "index.html")] struct IndexTemplate<'a> { + name: Option, short: String, pronouns: Vec<(usize, &'a Pronoun)>, } -fn render_page(pronoun: &Pronoun, settings: &InstanceSettings) -> String { +fn render_page(pronoun: &Pronoun, settings: &InstanceSettings, name: Option) -> String { IndexTemplate { + name, short: pronoun.render_threeform(), pronouns: settings.pronoun_list.iter().enumerate().collect(), } @@ -32,24 +34,34 @@ async fn default(settings: web::Data) -> Result, - form: web::Form>, + form: web::Form>, ) -> Result { eprintln!("create {:?}", form); - let weights: Vec<_> = (0..settings.pronoun_list.len()) - .map(|i| form.get(&i).map(|v| *v).unwrap_or(0)) - .collect(); + let mut weights = vec![0; settings.pronoun_list.len()]; + for (k, v) in form.iter() { + if let Ok(i) = k.parse::() { + let w = v.parse::().map_err(ErrorBadRequest)?; + if i < weights.len() - 1 { + weights[i] = w; + } + } + } let prefs = InstanceSettings::create_preferences(&weights); eprintln!("prefs: {:?}", prefs); let pref_string = prefs.as_prefstring(); eprintln!("prefstring: {}", pref_string); + let url = match form.get("name") { + Some(name) if !name.is_empty() => format!("/{}/{}", name, pref_string), + _ => format!("/{}", pref_string), + }; Ok(HttpResponse::SeeOther() - .header(LOCATION, format!("/{}", pref_string)) + .header(LOCATION, url) .finish()) } @@ -64,7 +76,7 @@ async fn only_prefs( .map_err(ErrorBadRequest)?; Ok(HttpResponse::Ok() .content_type("text/html") - .body(render_page(&pronoun, &settings))) + .body(render_page(&pronoun, &settings, None))) } #[get("/{name}/{prefs}")] @@ -78,7 +90,7 @@ async fn prefs_and_name( .map_err(ErrorBadRequest)?; Ok(HttpResponse::Ok() .content_type("text/html") - .body(render_page(&pronoun, &settings))) + .body(render_page(&pronoun, &settings, Some(name)))) } #[actix_web::main] diff --git a/web/templates/index.html b/web/templates/index.html index fd9bd30..10b1fb6 100644 --- a/web/templates/index.html +++ b/web/templates/index.html @@ -11,12 +11,20 @@ -

My pronouns today are: {{ short }}

+

+ {% if name.is_some() %} + {{ name.as_ref().unwrap() }} + {% else %} + My + {% endif %} + pronouns today are: {{ short }}

+ +
{% for item in pronouns %}