Allow multi form elements
This commit is contained in:
parent
8a7453d12c
commit
47114718a1
@ -22,56 +22,92 @@ pub trait FormRender {
|
||||
fn render(&self) -> String;
|
||||
}
|
||||
pub trait InputRender {
|
||||
fn render(&self, name: &str) -> String;
|
||||
fn render(&self, name: &str, multi_index: Option<usize>) -> String;
|
||||
}
|
||||
|
||||
impl InputRender for bool {
|
||||
fn render(&self, name: &str) -> String {
|
||||
fn render(&self, name: &str, multi_index: Option<usize>) -> String {
|
||||
format!(
|
||||
r#"<label for="{name}">{name}</label><input type="checkbox" name="{name}" {}/>"#,
|
||||
r#"<label for="{name}">{name}</label><input type="checkbox" name="{name}" {}{}/>"#,
|
||||
if *self { " checked" } else { "" },
|
||||
if let Some(i) = multi_index {
|
||||
format!(
|
||||
r#" name="{name}-{i}" rust-form-multi="{name}""#,
|
||||
name = name,
|
||||
i = i
|
||||
)
|
||||
} else {
|
||||
format!(r#" name="{name}""#, name = name)
|
||||
},
|
||||
name = name
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
impl InputRender for Rgb {
|
||||
fn render(&self, name: &str) -> String {
|
||||
fn render(&self, name: &str, multi_index: Option<usize>) -> String {
|
||||
format!(
|
||||
r#"<label for="{name}">{name}</label><input type="color" value="{}" name="{name}" />"#,
|
||||
r#"<label for="{name}">{name}</label><input type="color" value="{}" name="{name}" {}/>"#,
|
||||
self.to_hex_str(),
|
||||
if let Some(i) = multi_index {
|
||||
format!(
|
||||
r#" name="{name}-{i}" rust-form-multi="{name}""#,
|
||||
name = name,
|
||||
i = i
|
||||
)
|
||||
} else {
|
||||
format!(r#" name="{name}""#, name = name)
|
||||
},
|
||||
name = name
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
impl InputRender for Vec<Rgb> {
|
||||
fn render(&self, name: &str) -> String {
|
||||
fn render(&self, name: &str, _multi_index: Option<usize>) -> String {
|
||||
self.iter()
|
||||
.chain(iter::once(&Rgb::default()))
|
||||
.enumerate()
|
||||
.fold(String::new(), |acc, (i, c)| {
|
||||
acc + &c.render(&format!("{}-{}", name, i)) + "\n"
|
||||
acc + &c.render(name, Some(i)) + "\n"
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
impl InputRender for u8 {
|
||||
fn render(&self, name: &str) -> String {
|
||||
fn render(&self, name: &str, multi_index: Option<usize>) -> String {
|
||||
format!(
|
||||
r#"<label for="{name}">{name}</label><input type="number" max="255" min="0" step="1" value="{}" name="{name}" />"#,
|
||||
r#"<label for="{name}">{name}</label><input type="number" max="255" min="0" step="1" value="{}" name="{name}" {}/>"#,
|
||||
self,
|
||||
if let Some(i) = multi_index {
|
||||
format!(
|
||||
r#" name="{name}-{i}" rust-form-multi="{name}""#,
|
||||
name = name,
|
||||
i = i
|
||||
)
|
||||
} else {
|
||||
format!(r#" name="{name}""#, name = name)
|
||||
},
|
||||
name = name
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
impl InputRender for u16 {
|
||||
fn render(&self, name: &str) -> String {
|
||||
fn render(&self, name: &str, multi_index: Option<usize>) -> String {
|
||||
format!(
|
||||
r#"<label for="{name}">{name}</label><input type="number" max="65535" min="0" step="1" value="{}" name="{name}" />"#,
|
||||
r#"<label for="{name}">{name}</label><input type="number" max="65535" min="0" step="1" value="{}" name="{name}" {}/>"#,
|
||||
self,
|
||||
if let Some(i) = multi_index {
|
||||
format!(
|
||||
r#" name="{name}-{i}" rust-form-multi="{name}""#,
|
||||
name = name,
|
||||
i = i
|
||||
)
|
||||
} else {
|
||||
format!(r#" name="{name}""#, name = name)
|
||||
},
|
||||
name = name
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -25,9 +25,9 @@ impl Default for CollideParams {
|
||||
impl FormRender for CollideParams {
|
||||
fn render(&self) -> String {
|
||||
[
|
||||
self.left_color.render("left_color"),
|
||||
self.right_color.render("right_color"),
|
||||
self.conjoined_color.render("conjoined_color"),
|
||||
self.left_color.render("left_color", None),
|
||||
self.right_color.render("right_color", None),
|
||||
self.conjoined_color.render("conjoined_color", None),
|
||||
]
|
||||
.concat()
|
||||
}
|
||||
|
@ -19,7 +19,7 @@ impl Default for FadeParams {
|
||||
|
||||
impl FormRender for FadeParams {
|
||||
fn render(&self) -> String {
|
||||
self.color.render("color")
|
||||
self.color.render("color", None)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -27,9 +27,9 @@ impl Default for FlashingParams {
|
||||
impl FormRender for FlashingParams {
|
||||
fn render(&self) -> String {
|
||||
[
|
||||
self.colors.render("colors"),
|
||||
self.width.render("width"),
|
||||
self.tick_rate.render("tick_rate"),
|
||||
self.colors.render("colors", None),
|
||||
self.width.render("width", None),
|
||||
self.tick_rate.render("tick_rate", None),
|
||||
]
|
||||
.concat()
|
||||
}
|
||||
|
@ -19,7 +19,7 @@ impl Default for MovingPixelParams {
|
||||
|
||||
impl FormRender for MovingPixelParams {
|
||||
fn render(&self) -> String {
|
||||
self.color.render("color")
|
||||
self.color.render("color", None)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -25,9 +25,9 @@ impl Default for MovingRainbowParams {
|
||||
impl FormRender for MovingRainbowParams {
|
||||
fn render(&self) -> String {
|
||||
[
|
||||
self.width.render("width"),
|
||||
self.forward.render("forward"),
|
||||
self.skip.render("skip"),
|
||||
self.width.render("width", None),
|
||||
self.forward.render("forward", None),
|
||||
self.skip.render("skip", None),
|
||||
]
|
||||
.concat()
|
||||
}
|
||||
|
@ -25,9 +25,9 @@ impl Default for OrbParams {
|
||||
impl FormRender for OrbParams {
|
||||
fn render(&self) -> String {
|
||||
[
|
||||
self.color.render("color"),
|
||||
self.center_width.render("center_width"),
|
||||
self.backoff_width.render("backoff_width"),
|
||||
self.color.render("color", None),
|
||||
self.center_width.render("center_width", None),
|
||||
self.backoff_width.render("backoff_width", None),
|
||||
]
|
||||
.concat()
|
||||
}
|
||||
|
@ -19,7 +19,7 @@ impl Default for SolidParams {
|
||||
|
||||
impl FormRender for SolidParams {
|
||||
fn render(&self) -> String {
|
||||
self.color.render("color")
|
||||
self.color.render("color", None)
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user