From 5f120bdc65490b10db874fb3ce1477aa818268e3 Mon Sep 17 00:00:00 2001 From: Andrea Zagli Date: Sat, 18 Feb 2023 09:00:38 +0100 Subject: [PATCH] Rendered html textarea. --- examples/form.rs | 2 ++ src/fields.rs | 57 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) diff --git a/examples/form.rs b/examples/form.rs index 1a80c47..c73002f 100644 --- a/examples/form.rs +++ b/examples/form.rs @@ -60,7 +60,9 @@ async fn index( let mut fi = zakform::fields::FieldRadio::new("radio"); fi.add_option(zakform::fields::FOption{ value: String::from("F"), label: String::from("Female") }); fi.add_option(zakform::fields::FOption{ value: String::from("M"), label: String::from("Male") }); + f.add_field(Box::new(fi)); + let mut fi = zakform::fields::FieldTextArea::new("textarea"); f.add_field(Box::new(fi)); let fs = f.fields(); diff --git a/src/fields.rs b/src/fields.rs index 4331c80..582de68 100644 --- a/src/fields.rs +++ b/src/fields.rs @@ -76,6 +76,63 @@ _ => {}, } } +#[derive(Default)] +pub struct FieldTextArea { + field: Field, + maxlen: i32, + rows: i32, +} + +impl TField for FieldTextArea { + fn get_name(&self) -> String { + String::from(&self.field.name) + } + + fn render(&self) -> String { + let mut s = String::new(); + + let mut context = tera::Context::new(); + context.insert("name", &self.field.name); + context.insert("label", &self.field.label); + context.insert("maxlen", &self.maxlen); + context.insert("rows", &self.rows); + context.insert("disabled", &self.field.disabled); + context.insert("invisible", &self.field.invisible); + context.insert("help", &self.field.help); + context.insert("value", &self.field.value); + s.push_str(self.field.tmpl.render("field", &context).unwrap().as_str()); + + s + } + + fn any(&mut self) -> &mut dyn Any { + self + } +} + +impl FieldTextArea { + pub fn new(name: &str) -> Self { + let mut f: FieldTextArea = Default::default(); + + f.field.name = String::from(name); + f.field.label = String::from(name); + + f.rows = 5; + + match f.field.tmpl.add_raw_template("field", r#"{% if label %}
+ {% endif %} + + {% if help %}
{{ help }}
{% endif %} + {% if label %}
{% endif %}"#) { +Err(e) => { println!("{:?}", e) }, +_ => {}, +}; + + f + } +} + #[derive(Serialize)] pub struct FOption { pub value: String, -- 2.49.0