use crate::*;
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);
}