diff options
author | Matt Brubeck <mbrubeck@limpet.net> | 2014-04-14 11:12:00 -0700 |
---|---|---|
committer | Matt Brubeck <mbrubeck@limpet.net> | 2014-04-14 13:39:11 -0700 |
commit | 28a013cfc57e406eabf54ea8f02c37aa55d5494b (patch) | |
tree | 0a1f20ae77ae9b42fe9e8206eeb855158ce0ba15 /src/components/script | |
parent | 18b5453e09e1f67653888a81578325bab7472717 (diff) | |
download | servo-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.rs | 18 | ||||
-rw-r--r-- | src/components/script/dom/node.rs | 16 | ||||
-rw-r--r-- | src/components/script/dom/virtualmethods.rs | 16 |
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: |