use crate::reactive::{effect, Signal};
use crate::view::handle::Element;
use crate::view::renderer::{
set_attribute, set_attribute_bool, set_attribute_double, set_attribute_int, set_inline_styles,
};
pub fn apply_styles<V, T>(h: Element, v: V)
where
V: ::std::convert::Into<Signal<T>>,
T: ::std::string::ToString + ::std::clone::Clone + 'static,
{
match v.into() {
Signal::Static(t) => set_inline_styles(h, &t.to_string()),
Signal::Dynamic(sig) => {
effect(move || set_inline_styles(h, &sig.get().to_string()));
}
}
}
pub fn apply_attr<V, T>(h: Element, name: &'static str, v: V)
where
V: ::std::convert::Into<Signal<T>>,
T: ::std::string::ToString + ::std::clone::Clone + 'static,
{
match v.into() {
Signal::Static(t) => set_attribute(h, name, &t.to_string()),
Signal::Dynamic(sig) => {
effect(move || set_attribute(h, name, &sig.get().to_string()));
}
}
}
pub fn apply_attr_int<V>(h: Element, name: &'static str, v: V)
where
V: ::std::convert::Into<Signal<i32>>,
{
match v.into() {
Signal::Static(t) => set_attribute_int(h, name, i64::from(t)),
Signal::Dynamic(sig) => {
effect(move || set_attribute_int(h, name, i64::from(sig.get())));
}
}
}
pub fn apply_attr_bool<V>(h: Element, name: &'static str, v: V)
where
V: ::std::convert::Into<Signal<bool>>,
{
match v.into() {
Signal::Static(t) => set_attribute_bool(h, name, t),
Signal::Dynamic(sig) => {
effect(move || set_attribute_bool(h, name, sig.get()));
}
}
}
pub fn apply_attr_f64<V>(h: Element, name: &'static str, v: V)
where
V: ::std::convert::Into<Signal<f64>>,
{
match v.into() {
Signal::Static(t) => set_attribute_double(h, name, t),
Signal::Dynamic(sig) => {
effect(move || set_attribute_double(h, name, sig.get()));
}
}
}
pub fn apply_attr_owned<V, T>(h: Element, name: String, v: V)
where
V: ::std::convert::Into<Signal<T>>,
T: ::std::string::ToString + ::std::clone::Clone + 'static,
{
match v.into() {
Signal::Static(t) => set_attribute(h, &name, &t.to_string()),
Signal::Dynamic(sig) => {
effect(move || set_attribute(h, &name, &sig.get().to_string()));
}
}
}