use super::*;
impl ElementExt for Element {
fn remove_attribute_or_property(&self, name: &str) {
if name == ATTR_VALUE {
if let Some(input) = self.dyn_ref::<HtmlInputElement>() {
input.set_value(EMPTY_STRING);
return;
}
if let Some(textarea) = self.dyn_ref::<HtmlTextAreaElement>() {
textarea.set_value(EMPTY_STRING);
return;
}
if let Some(select) = self.dyn_ref::<HtmlSelectElement>() {
select.set_value(EMPTY_STRING);
return;
}
}
if name == ATTR_CHECKED
&& let Some(input) = self.dyn_ref::<HtmlInputElement>()
{
input.set_checked(false);
return;
}
if name == ATTR_DISABLED {
if let Some(input) = self.dyn_ref::<HtmlInputElement>() {
input.set_disabled(false);
return;
}
if let Some(button) = self.dyn_ref::<HtmlButtonElement>() {
button.set_disabled(false);
return;
}
if let Some(select) = self.dyn_ref::<HtmlSelectElement>() {
select.set_disabled(false);
return;
}
if let Some(textarea) = self.dyn_ref::<HtmlTextAreaElement>() {
textarea.set_disabled(false);
return;
}
}
if name == ATTR_SELECTED
&& let Some(option) = self.dyn_ref::<HtmlOptionElement>()
{
option.set_selected(false);
return;
}
if name == ATTR_READONLY {
if let Some(input) = self.dyn_ref::<HtmlInputElement>() {
input.set_read_only(false);
return;
}
if let Some(textarea) = self.dyn_ref::<HtmlTextAreaElement>() {
textarea.set_read_only(false);
return;
}
}
if name == ATTR_MULTIPLE {
if let Some(input) = self.dyn_ref::<HtmlInputElement>() {
input.set_multiple(false);
return;
}
if let Some(select) = self.dyn_ref::<HtmlSelectElement>() {
select.set_multiple(false);
return;
}
}
let _: Result<(), JsValue> = self.remove_attribute(name);
}
fn set_attribute_or_property(&self, name: &str, value: &str) {
if name == ATTR_VALUE {
if let Some(input) = self.dyn_ref::<HtmlInputElement>() {
input.set_value(value);
return;
}
if let Some(textarea) = self.dyn_ref::<HtmlTextAreaElement>() {
textarea.set_value(value);
return;
}
if let Some(select) = self.dyn_ref::<HtmlSelectElement>() {
select.set_value(value);
return;
}
}
if name == ATTR_CHECKED
&& let Some(input) = self.dyn_ref::<HtmlInputElement>()
{
input.set_checked(value == BOOL_TRUE);
return;
}
if name == ATTR_DISABLED {
if let Some(input) = self.dyn_ref::<HtmlInputElement>() {
input.set_disabled(value == BOOL_TRUE);
return;
}
if let Some(button) = self.dyn_ref::<HtmlButtonElement>() {
button.set_disabled(value == BOOL_TRUE);
return;
}
if let Some(select) = self.dyn_ref::<HtmlSelectElement>() {
select.set_disabled(value == BOOL_TRUE);
return;
}
if let Some(textarea) = self.dyn_ref::<HtmlTextAreaElement>() {
textarea.set_disabled(value == BOOL_TRUE);
return;
}
}
if name == ATTR_SELECTED
&& let Some(option) = self.dyn_ref::<HtmlOptionElement>()
{
option.set_selected(value == BOOL_TRUE);
return;
}
if name == ATTR_READONLY {
if let Some(input) = self.dyn_ref::<HtmlInputElement>() {
input.set_read_only(value == BOOL_TRUE);
return;
}
if let Some(textarea) = self.dyn_ref::<HtmlTextAreaElement>() {
textarea.set_read_only(value == BOOL_TRUE);
return;
}
}
if name == ATTR_MULTIPLE {
if let Some(input) = self.dyn_ref::<HtmlInputElement>() {
input.set_multiple(value == BOOL_TRUE);
return;
}
if let Some(select) = self.dyn_ref::<HtmlSelectElement>() {
select.set_multiple(value == BOOL_TRUE);
return;
}
}
let _: Result<(), JsValue> = self.set_attribute(name, value);
}
fn ensure_euv_id(&self) -> usize {
match self.get_attribute(DATA_EUV_ID) {
Some(id_str) => id_str.parse::<usize>().unwrap_or_else(|_| {
let new_id: usize = NEXT_EUV_ID.fetch_add(1, Ordering::Relaxed);
let _: Result<(), JsValue> = self.set_attribute(DATA_EUV_ID, &new_id.to_string());
new_id
}),
None => {
let new_id: usize = NEXT_EUV_ID.fetch_add(1, Ordering::Relaxed);
let _: Result<(), JsValue> = self.set_attribute(DATA_EUV_ID, &new_id.to_string());
new_id
}
}
}
}