canonrs-interactions-core 0.1.0

CanonRS interactions core types and traits
Documentation
//! Form — native form integration
use wasm_bindgen::JsCast;
use web_sys::Element;

pub fn sync_hidden_input(root: &Element, value: &str) {
    let name = match root.get_attribute("data-rs-name") {
        Some(n) if !n.is_empty() => n,
        _ => return,
    };
    let doc = match web_sys::window().and_then(|w| w.document()) {
        Some(d) => d,
        None => return,
    };
    if let Ok(Some(el)) = root.query_selector("input[data-rs-hidden]") {
        if let Ok(input) = el.dyn_into::<web_sys::HtmlInputElement>() {
            input.set_value(value);
            return;
        }
    }
    if let Ok(el) = doc.create_element("input") {
        if let Ok(input) = el.dyn_into::<web_sys::HtmlInputElement>() {
            let _ = input.set_attribute("type", "hidden");
            let _ = input.set_attribute("data-rs-hidden", "");
            let _ = input.set_attribute("name", &name);
            input.set_value(value);
            let _ = root.append_child(input.unchecked_ref());
        }
    }
}