1
0
Эх сурвалжийг харах

optimize the remove_attribute function

Evan Almloff 1 жил өмнө
parent
commit
28ae065218

+ 20 - 13
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);
     }
   }
 

+ 26 - 17
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<u8, attr>, ns: &str<u8, ns_cache>) {
-        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$);}"