Introduce VirtualMethods::children_changed()

This virtual method mimics the behaviour of mutation observers and make it more
viable than the older child_inserted(), which didn't cover removed nodes and
was called as many times as there were inserted nodes.

A few other shortcomings where remove_child() was called directly instead of
Node::remove() were also fixed while at it.
This commit is contained in:
Anthony Ramine 2015-07-18 14:45:52 +02:00
parent 389a9ff643
commit 7b40cc9fd7
7 changed files with 194 additions and 180 deletions

View file

@ -35,7 +35,8 @@ use dom::document::Document;
use dom::element::ElementTypeId;
use dom::event::Event;
use dom::htmlelement::HTMLElementTypeId;
use dom::node::{Node, NodeHelpers, NodeTypeId, CloneChildrenFlag};
use dom::node::{ChildrenMutation, CloneChildrenFlag, Node, NodeHelpers};
use dom::node::NodeTypeId;
use util::str::DOMString;
@ -97,10 +98,10 @@ pub trait VirtualMethods {
}
}
/// Called on the parent when a node is added to its child list.
fn child_inserted(&self, child: &Node) {
/// Called on the parent when its children are changed.
fn children_changed(&self, mutation: &ChildrenMutation) {
if let Some(ref s) = self.super_type() {
s.child_inserted(child);
s.children_changed(mutation);
}
}