aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script
diff options
context:
space:
mode:
authorMatt Brubeck <mbrubeck@limpet.net>2014-04-14 11:12:00 -0700
committerMatt Brubeck <mbrubeck@limpet.net>2014-04-14 13:39:11 -0700
commit28a013cfc57e406eabf54ea8f02c37aa55d5494b (patch)
tree0a1f20ae77ae9b42fe9e8206eeb855158ce0ba15 /src/components/script
parent18b5453e09e1f67653888a81578325bab7472717 (diff)
downloadservo-28a013cfc57e406eabf54ea8f02c37aa55d5494b.tar.gz
servo-28a013cfc57e406eabf54ea8f02c37aa55d5494b.zip
Move child_inserted into VirtualMethods.
Follow-up from #1984.
Diffstat (limited to 'src/components/script')
-rw-r--r--src/components/script/dom/htmlstyleelement.rs18
-rw-r--r--src/components/script/dom/node.rs16
-rw-r--r--src/components/script/dom/virtualmethods.rs16
3 files changed, 34 insertions, 16 deletions
diff --git a/src/components/script/dom/htmlstyleelement.rs b/src/components/script/dom/htmlstyleelement.rs
index 6596eaec932..ed335dd70eb 100644
--- a/src/components/script/dom/htmlstyleelement.rs
+++ b/src/components/script/dom/htmlstyleelement.rs
@@ -3,7 +3,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use dom::bindings::codegen::HTMLStyleElementBinding;
-use dom::bindings::codegen::InheritTypes::{HTMLStyleElementDerived, NodeCast};
+use dom::bindings::codegen::InheritTypes::{HTMLElementCast, HTMLStyleElementDerived, NodeCast};
use dom::bindings::js::JS;
use dom::bindings::error::ErrorResult;
use dom::document::Document;
@@ -11,6 +11,7 @@ use dom::element::HTMLStyleElementTypeId;
use dom::eventtarget::{EventTarget, NodeTargetTypeId};
use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId, window_from_node};
+use dom::virtualmethods::VirtualMethods;
use html::cssparse::parse_inline_css;
use layout_interface::{AddStylesheetMsg, LayoutChan};
use servo_util::str::DOMString;
@@ -91,3 +92,18 @@ impl StyleElementHelpers for JS<HTMLStyleElement> {
layout_chan.send(AddStylesheetMsg(sheet));
}
}
+
+impl VirtualMethods for JS<HTMLStyleElement> {
+ fn super_type(&self) -> Option<~VirtualMethods:> {
+ let htmlelement: JS<HTMLElement> = HTMLElementCast::from(self);
+ Some(~htmlelement as ~VirtualMethods:)
+ }
+
+ fn child_inserted(&mut self, child: &JS<Node>) {
+ match self.super_type() {
+ Some(ref mut s) => s.child_inserted(child),
+ _ => (),
+ }
+ self.parse_own_css();
+ }
+}
diff --git a/src/components/script/dom/node.rs b/src/components/script/dom/node.rs
index a8c7dbfe961..bf2669512ff 100644
--- a/src/components/script/dom/node.rs
+++ b/src/components/script/dom/node.rs
@@ -6,7 +6,7 @@
use dom::attr::Attr;
use dom::bindings::codegen::InheritTypes::{CommentCast, DocumentCast, DocumentTypeCast};
-use dom::bindings::codegen::InheritTypes::{ElementCast, HTMLStyleElementCast, TextCast, NodeCast};
+use dom::bindings::codegen::InheritTypes::{ElementCast, TextCast, NodeCast};
use dom::bindings::codegen::InheritTypes::{CharacterDataCast, NodeBase, NodeDerived};
use dom::bindings::codegen::InheritTypes::{ProcessingInstructionCast, EventTargetCast};
use dom::bindings::codegen::NodeBinding::NodeConstants;
@@ -21,7 +21,6 @@ use dom::documentfragment::DocumentFragment;
use dom::documenttype::DocumentType;
use dom::element::{Element, ElementTypeId, HTMLAnchorElementTypeId};
use dom::eventtarget::{EventTarget, NodeTargetTypeId};
-use dom::htmlstyleelement::StyleElementHelpers;
use dom::nodelist::{NodeList};
use dom::processinginstruction::ProcessingInstruction;
use dom::text::Text;
@@ -270,8 +269,6 @@ pub trait NodeHelpers {
fn add_child(&mut self, new_child: &mut JS<Node>, before: Option<JS<Node>>);
fn remove_child(&mut self, child: &mut JS<Node>);
- fn child_inserted(&self);
-
fn get_hover_state(&self) -> bool;
fn set_hover_state(&mut self, state: bool);
@@ -411,7 +408,7 @@ impl NodeHelpers for JS<Node> {
}
}
- self.parent_node().map(|parent| parent.child_inserted());
+ self.parent_node().map(|parent| vtable_for(&parent).child_inserted(self));
document.get().content_changed();
}
@@ -503,15 +500,6 @@ impl NodeHelpers for JS<Node> {
child_node.set_parent_node(None);
}
- fn child_inserted(&self) {
- // Parse text content added to an inline stylesheet.
- match HTMLStyleElementCast::to(self) {
- Some(elem) => elem.parse_own_css(),
- None => ()
- }
- }
-
-
fn get_hover_state(&self) -> bool {
self.get().flags.get_in_hover_state()
}
diff --git a/src/components/script/dom/virtualmethods.rs b/src/components/script/dom/virtualmethods.rs
index 866ace84e02..85ae37cb032 100644
--- a/src/components/script/dom/virtualmethods.rs
+++ b/src/components/script/dom/virtualmethods.rs
@@ -7,14 +7,16 @@ use dom::bindings::codegen::InheritTypes::HTMLElementCast;
use dom::bindings::codegen::InheritTypes::HTMLIFrameElementCast;
use dom::bindings::codegen::InheritTypes::HTMLImageElementCast;
use dom::bindings::codegen::InheritTypes::HTMLObjectElementCast;
+use dom::bindings::codegen::InheritTypes::HTMLStyleElementCast;
use dom::bindings::js::JS;
use dom::element::Element;
use dom::element::{ElementTypeId, HTMLImageElementTypeId};
-use dom::element::{HTMLIFrameElementTypeId, HTMLObjectElementTypeId};
+use dom::element::{HTMLIFrameElementTypeId, HTMLObjectElementTypeId, HTMLStyleElementTypeId};
use dom::htmlelement::HTMLElement;
use dom::htmliframeelement::HTMLIFrameElement;
use dom::htmlimageelement::HTMLImageElement;
use dom::htmlobjectelement::HTMLObjectElement;
+use dom::htmlstyleelement::HTMLStyleElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
@@ -58,6 +60,14 @@ pub trait VirtualMethods {
_ => (),
}
}
+
+ /// Called on the parent when a node is added to its child list.
+ fn child_inserted(&mut self, child: &JS<Node>) {
+ match self.super_type() {
+ Some(ref mut s) => s.child_inserted(child),
+ _ => (),
+ }
+ }
}
/// Obtain a VirtualMethods instance for a given Node-derived object. Any
@@ -78,6 +88,10 @@ pub fn vtable_for<'a>(node: &JS<Node>) -> ~VirtualMethods: {
let element: JS<HTMLObjectElement> = HTMLObjectElementCast::to(node).unwrap();
~element as ~VirtualMethods:
}
+ ElementNodeTypeId(HTMLStyleElementTypeId) => {
+ let element: JS<HTMLStyleElement> = HTMLStyleElementCast::to(node).unwrap();
+ ~element as ~VirtualMethods:
+ }
ElementNodeTypeId(ElementTypeId) => {
let element: JS<Element> = ElementCast::to(node).unwrap();
~element as ~VirtualMethods: