optimize the remove_attribute function

This commit is contained in:
Evan Almloff 2023-07-20 10:53:24 -07:00
parent 79909060cd
commit 28ae065218
2 changed files with 46 additions and 30 deletions

View file

@ -159,22 +159,29 @@ class Interpreter {
} }
} }
RemoveAttribute(root, field, ns) { RemoveAttribute(root, field, ns) {
const name = field;
const node = this.nodes[root]; const node = this.nodes[root];
if (ns == "style") { if (!ns) {
switch (field) {
case "value":
node.value = "";
break;
case "checked":
node.checked = false;
break;
case "selected":
node.selected = false;
break;
case "dangerous_inner_html":
node.innerHTML = "";
break;
default:
node.removeAttribute(field);
break;
}
} else if (ns == "style") {
node.style.removeProperty(name); node.style.removeProperty(name);
} else if (ns !== null || ns !== undefined) {
node.removeAttributeNS(ns, name);
} else if (name === "value") {
node.value = "";
} else if (name === "checked") {
node.checked = false;
} else if (name === "selected") {
node.selected = false;
} else if (name === "dangerous_inner_html") {
node.innerHTML = "";
} else { } else {
node.removeAttribute(name); node.removeAttributeNS(ns, field);
} }
} }

View file

@ -230,23 +230,32 @@ mod js {
"{node = nodes[$id$]; SetAttributeInner(node, $field$, $value$, $ns$);}" "{node = nodes[$id$]; SetAttributeInner(node, $field$, $value$, $ns$);}"
} }
fn remove_attribute(id: u32, field: &str<u8, attr>, ns: &str<u8, ns_cache>) { fn remove_attribute(id: u32, field: &str<u8, attr>, ns: &str<u8, ns_cache>) {
r#"{name = $field$; r#"{
node = nodes[$id$]; node = nodes[$id$];
if (ns == "style") { if (!ns) {
node.style.removeProperty(name); switch (field) {
} else if (ns !== null && ns !== undefined && ns !== "") { case "value":
node.removeAttributeNS(ns, name); node.value = "";
} else if (name === "value") { break;
node.value = ""; case "checked":
} else if (name === "checked") { node.checked = false;
node.checked = false; break;
} else if (name === "selected") { case "selected":
node.selected = false; node.selected = false;
} else if (name === "dangerous_inner_html") { break;
node.innerHTML = ""; case "dangerous_inner_html":
} else { node.innerHTML = "";
node.removeAttribute(name); break;
}}"# default:
node.removeAttribute(field);
break;
}
} else if (ns == "style") {
node.style.removeProperty(name);
} else {
node.removeAttributeNS(ns, field);
}
}"#
} }
fn assign_id(ptr: u32, len: u8, id: u32) { fn assign_id(ptr: u32, len: u8, id: u32) {
"{nodes[$id$] = LoadChild($ptr$, $len$);}" "{nodes[$id$] = LoadChild($ptr$, $len$);}"