diff --git a/packages/core/src/mutations.rs b/packages/core/src/mutations.rs index bd94d0b71..e6c83f92d 100644 --- a/packages/core/src/mutations.rs +++ b/packages/core/src/mutations.rs @@ -107,6 +107,7 @@ pub enum DomEdit<'bump> { RemoveAttribute { root: u64, name: &'static str, + ns: Option<&'bump str>, }, } @@ -218,8 +219,17 @@ impl<'a> Mutations<'a> { } pub(crate) fn remove_attribute(&mut self, attribute: &Attribute, root: u64) { - let name = attribute.name; - self.edits.push(RemoveAttribute { name, root }); + let Attribute { + name, + namespace, + .. + } = attribute; + + self.edits.push(RemoveAttribute { + name, + ns: *namespace, + root + }); } pub(crate) fn mark_dirty_scope(&mut self, scope: ScopeId) { diff --git a/packages/interpreter/src/bindings.rs b/packages/interpreter/src/bindings.rs index ecd74870d..aa937728b 100644 --- a/packages/interpreter/src/bindings.rs +++ b/packages/interpreter/src/bindings.rs @@ -63,5 +63,5 @@ extern "C" { ); #[wasm_bindgen(method)] - pub fn RemoveAttribute(this: &Interpreter, root: u64, field: &str); + pub fn RemoveAttribute(this: &Interpreter, root: u64, field: &str, ns: Option<&str>); } diff --git a/packages/interpreter/src/interpreter.js b/packages/interpreter/src/interpreter.js index 76da73752..6a4ed0904 100644 --- a/packages/interpreter/src/interpreter.js +++ b/packages/interpreter/src/interpreter.js @@ -105,7 +105,7 @@ export class Interpreter { if (ns === "style") { // @ts-ignore node.style[name] = value; - } else if (ns != null || ns != undefined) { + } else if (ns !== null || ns !== undefined) { node.setAttributeNS(ns, name, value); } else { switch (name) { @@ -133,10 +133,12 @@ export class Interpreter { } } } - RemoveAttribute(root, name) { + RemoveAttribute(root, field, ns) { + const name = field; const node = this.nodes[root]; - - if (name === "value") { + if (ns !== null || ns !== undefined) { + node.removeAttributeNS(ns, name); + } else if (name === "value") { node.value = ""; } else if (name === "checked") { node.checked = false; @@ -260,7 +262,7 @@ export class Interpreter { } } - if (realId == null) { + if (realId === null) { return; } window.ipc.postMessage( @@ -281,7 +283,7 @@ export class Interpreter { this.SetAttribute(edit.root, edit.field, edit.value, edit.ns); break; case "RemoveAttribute": - this.RemoveAttribute(edit.root, edit.name); + this.RemoveAttribute(edit.root, edit.name, edit.ns); break; } } diff --git a/packages/web/src/dom.rs b/packages/web/src/dom.rs index b2eb65d08..3ecfe9913 100644 --- a/packages/web/src/dom.rs +++ b/packages/web/src/dom.rs @@ -127,8 +127,8 @@ impl WebsysDom { self.interpreter.RemoveEventListener(root, event) } - DomEdit::RemoveAttribute { root, name } => { - self.interpreter.RemoveAttribute(root, name) + DomEdit::RemoveAttribute { root, name, ns } => { + self.interpreter.RemoveAttribute(root, name, ns) } DomEdit::CreateTextNode { text, root } => {