@@ -138,7 +138,7 @@ impl Vdom {
138 container.set_inner_html("");
138 container.set_inner_html("");
140 // Create a dummy `<div/>` in our container.
140 // Create a dummy `<div/>` in our container.
141− let current_root = Node::element(&dom_buffers[0], "div", [], [], []);
141+ let current_root = Node::element(&dom_buffers[0], "div", [], [], [], None);
142 let current_root = Some(unsafe { extend_node_lifetime(current_root) });
142 let current_root = Some(unsafe { extend_node_lifetime(current_root) });
143 let window = web_sys::window().expect("should have acess to the Window");
143 let window = web_sys::window().expect("should have acess to the Window");
144 let document = window
144 let document = window
@@ -287,43 +287,32 @@ impl VdomInnerExclusive {
287 self.change_list.emit_set_text(new_text);
287 self.change_list.emit_set_text(new_text);
290− (&Node::Text(_), Node::Element(_))
290+ (&Node::Text(_), Node::Element(_)) => {
291− | (&Node::Text(_), Node::NamespacedElement(_, _)) => {
292 debug!(" replacing a text node with an element");
291 debug!(" replacing a text node with an element");
293 self.create(registry, new);
292 self.create(registry, new);
294 self.change_list.emit_replace_with();
293 self.change_list.emit_replace_with();
296− (&Node::Element(_), Node::Text(_))
295+ (&Node::Element(_), Node::Text(_)) => {
297− | (&Node::NamespacedElement(_, _), Node::Text(_)) => {
298 debug!(" replacing an element with a text node");
296 debug!(" replacing an element with a text node");
299 self.create(registry, new);
297 self.create(registry, new);
300 self.change_list.emit_replace_with();
298 self.change_list.emit_replace_with();
302− (&Node::Element(ref new_element_node), Node::Element(ref old_element_node))
300+ (
304− &Node::NamespacedElement(_, ref new_element_node),
305− Node::Element(ref old_element_node),
308− &Node::Element(ref new_element_node),
309− Node::NamespacedElement(_, ref old_element_node),
312− &Node::NamespacedElement(_, ref new_element_node),
313− Node::NamespacedElement(_, ref old_element_node),
315− let ElementNode {
301+ &Node::Element(ElementNode {
316 tag_name: new_tag_name,
302 tag_name: new_tag_name,
317 listeners: new_listeners,
303 listeners: new_listeners,
318 attributes: new_attributes,
304 attributes: new_attributes,
319 children: new_children,
305 children: new_children,
320− } = new_element_node;
306+ namespace: _,
321− let ElementNode {
308+ Node::Element(ElementNode {
322 tag_name: old_tag_name,
309 tag_name: old_tag_name,
323 listeners: old_listeners,
310 listeners: old_listeners,
324 attributes: old_attributes,
311 attributes: old_attributes,
325 children: old_children,
312 children: old_children,
326− } = old_element_node;
313+ namespace: _,
327 debug!(" updating an element");
316 debug!(" updating an element");
328 if new_tag_name != old_tag_name {
317 if new_tag_name != old_tag_name {
329 debug!(" different tag names; creating new element and replacing old element");
318 debug!(" different tag names; creating new element and replacing old element");
@@ -475,32 +464,13 @@ impl VdomInnerExclusive {
475 listeners,
464 listeners,
476 attributes,
465 attributes,
477 children,
466 children,
469+ if let Some(namespace) = namespace {
470+ self.change_list.emit_create_element_ns(tag_name, namespace);
479− self.change_list.emit_create_element(tag_name);
472+ self.change_list.emit_create_element(tag_name);
480− for l in listeners {
484− self.change_list.emit_new_event_listener(l);
486− for attr in attributes {
487− self.change_list.emit_set_attribute(&attr.name, &attr.value);
489− for child in children {
490− self.create(registry, child.clone());
491− self.change_list.emit_append_child();
494− Node::NamespacedElement(
503− self.change_list.emit_create_element_ns(tag_name, namepsace);
504 for l in listeners {
474 for l in listeners {
506 registry.add(l);
476 registry.add(l);
@@ -508,7 +478,7 @@ impl VdomInnerExclusive {
508 self.change_list.emit_new_event_listener(l);
478 self.change_list.emit_new_event_listener(l);
510 for attr in attributes {
480 for attr in attributes {
511− if attr.name == "xmlns" {
481+ if namespace.is_none() || attr.name == "xmlns" {
512 self.change_list.emit_set_attribute(&attr.name, &attr.value);
482 self.change_list.emit_set_attribute(&attr.name, &attr.value);
514 self.change_list
484 self.change_list