use crate::*;
pub(crate) fn is_node_connected<T>(node: &T) -> bool
where
T: AsRef<Node>,
{
let node_ref: &Node = node.as_ref();
let result: Result<JsValue, JsValue> =
Reflect::get(node_ref.as_ref(), &JsValue::from_str("isConnected"));
match result {
Ok(value) => value.is_truthy(),
Err(_) => false,
}
}
pub(crate) fn is_boolean_property(name: &str) -> bool {
matches!(name, "checked" | "disabled" | "selected" | "readonly")
}
pub(crate) fn remove_dom_attribute_or_property(element: &Element, name: &str) {
if name == "value" {
if let Some(input) = element.dyn_ref::<HtmlInputElement>() {
input.set_value("");
return;
}
if let Some(textarea) = element.dyn_ref::<HtmlTextAreaElement>() {
textarea.set_value("");
return;
}
if let Some(select) = element.dyn_ref::<HtmlSelectElement>() {
select.set_value("");
return;
}
}
if name == "checked"
&& let Some(input) = element.dyn_ref::<HtmlInputElement>()
{
input.set_checked(false);
return;
}
if name == "disabled" {
if let Some(input) = element.dyn_ref::<HtmlInputElement>() {
input.set_disabled(false);
return;
}
if let Some(button) = element.dyn_ref::<HtmlButtonElement>() {
button.set_disabled(false);
return;
}
if let Some(select) = element.dyn_ref::<HtmlSelectElement>() {
select.set_disabled(false);
return;
}
if let Some(textarea) = element.dyn_ref::<HtmlTextAreaElement>() {
textarea.set_disabled(false);
return;
}
}
if name == "selected"
&& let Some(option) = element.dyn_ref::<HtmlOptionElement>()
{
option.set_selected(false);
return;
}
if name == "readonly" {
if let Some(input) = element.dyn_ref::<HtmlInputElement>() {
input.set_read_only(false);
return;
}
if let Some(textarea) = element.dyn_ref::<HtmlTextAreaElement>() {
textarea.set_read_only(false);
return;
}
}
let _ = element.remove_attribute(name);
}
pub(crate) fn set_dom_attribute_or_property(element: &Element, name: &str, value: &str) {
if name == "value" {
if let Some(input) = element.dyn_ref::<HtmlInputElement>() {
input.set_value(value);
return;
}
if let Some(textarea) = element.dyn_ref::<HtmlTextAreaElement>() {
textarea.set_value(value);
return;
}
if let Some(select) = element.dyn_ref::<HtmlSelectElement>() {
select.set_value(value);
return;
}
}
if name == "checked"
&& let Some(input) = element.dyn_ref::<HtmlInputElement>()
{
input.set_checked(value == "true");
return;
}
if name == "disabled" {
if let Some(input) = element.dyn_ref::<HtmlInputElement>() {
input.set_disabled(value == "true");
return;
}
if let Some(button) = element.dyn_ref::<HtmlButtonElement>() {
button.set_disabled(value == "true");
return;
}
if let Some(select) = element.dyn_ref::<HtmlSelectElement>() {
select.set_disabled(value == "true");
return;
}
if let Some(textarea) = element.dyn_ref::<HtmlTextAreaElement>() {
textarea.set_disabled(value == "true");
return;
}
}
if name == "selected"
&& let Some(option) = element.dyn_ref::<HtmlOptionElement>()
{
option.set_selected(value == "true");
return;
}
if name == "readonly" {
if let Some(input) = element.dyn_ref::<HtmlInputElement>() {
input.set_read_only(value == "true");
return;
}
if let Some(textarea) = element.dyn_ref::<HtmlTextAreaElement>() {
textarea.set_read_only(value == "true");
return;
}
}
let _ = element.set_attribute(name, value);
}