From 28ae0652189ccbaa229dc295bcc8de7d7d88b684 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Thu, 20 Jul 2023 10:53:24 -0700 Subject: [PATCH] optimize the remove_attribute function --- packages/interpreter/src/interpreter.js | 33 ++++++++------ .../interpreter/src/sledgehammer_bindings.rs | 43 +++++++++++-------- 2 files changed, 46 insertions(+), 30 deletions(-) diff --git a/packages/interpreter/src/interpreter.js b/packages/interpreter/src/interpreter.js index 9b450e30a..0a041df27 100644 --- a/packages/interpreter/src/interpreter.js +++ b/packages/interpreter/src/interpreter.js @@ -159,22 +159,29 @@ class Interpreter { } } RemoveAttribute(root, field, ns) { - const name = field; 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); - } 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 { - node.removeAttribute(name); + node.removeAttributeNS(ns, field); } } diff --git a/packages/interpreter/src/sledgehammer_bindings.rs b/packages/interpreter/src/sledgehammer_bindings.rs index 2eb883500..7d5f44f7d 100644 --- a/packages/interpreter/src/sledgehammer_bindings.rs +++ b/packages/interpreter/src/sledgehammer_bindings.rs @@ -230,23 +230,32 @@ mod js { "{node = nodes[$id$]; SetAttributeInner(node, $field$, $value$, $ns$);}" } fn remove_attribute(id: u32, field: &str, ns: &str) { - r#"{name = $field$; - node = nodes[$id$]; - if (ns == "style") { - node.style.removeProperty(name); - } else if (ns !== null && ns !== undefined && ns !== "") { - 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 { - node.removeAttribute(name); - }}"# + r#"{ + node = nodes[$id$]; + 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); + } else { + node.removeAttributeNS(ns, field); + } + }"# } fn assign_id(ptr: u32, len: u8, id: u32) { "{nodes[$id$] = LoadChild($ptr$, $len$);}"