aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script/dom/element.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/script/dom/element.rs')
-rw-r--r--src/components/script/dom/element.rs57
1 files changed, 12 insertions, 45 deletions
diff --git a/src/components/script/dom/element.rs b/src/components/script/dom/element.rs
index f27655165fb..f9e3965cd95 100644
--- a/src/components/script/dom/element.rs
+++ b/src/components/script/dom/element.rs
@@ -7,9 +7,7 @@
use dom::attr::Attr;
use dom::attrlist::AttrList;
use dom::bindings::codegen::ElementBinding;
-use dom::bindings::codegen::InheritTypes::{ElementDerived, HTMLImageElementCast};
-use dom::bindings::codegen::InheritTypes::{HTMLIFrameElementCast, NodeCast};
-use dom::bindings::codegen::InheritTypes::HTMLObjectElementCast;
+use dom::bindings::codegen::InheritTypes::{ElementDerived, NodeCast};
use dom::bindings::js::JS;
use dom::bindings::utils::{Reflectable, Reflector};
use dom::bindings::error::{ErrorResult, Fallible, NamespaceError, InvalidCharacter};
@@ -19,11 +17,9 @@ use dom::clientrect::ClientRect;
use dom::clientrectlist::ClientRectList;
use dom::document::Document;
use dom::eventtarget::{EventTarget, NodeTargetTypeId};
-use dom::htmlimageelement::HTMLImageElement;
-use dom::htmliframeelement::HTMLIFrameElement;
-use dom::htmlobjectelement::HTMLObjectElement;
use dom::node::{ElementNodeTypeId, Node, NodeHelpers, NodeIterator, document_from_node};
use dom::htmlserializer::serialize;
+use dom::virtualmethods::{VirtualMethods, vtable_for};
use layout_interface::{ContentBoxQuery, ContentBoxResponse, ContentBoxesQuery};
use layout_interface::{ContentBoxesResponse, ContentChangedDocumentDamage};
use layout_interface::{MatchSelectorsDocumentDamage};
@@ -216,14 +212,6 @@ pub trait AttributeHandlers {
fn set_uint_attribute(&mut self, name: &str, value: u32);
}
-pub trait AfterSetAttrListener {
- fn AfterSetAttr(&mut self, name: DOMString, value: DOMString);
-}
-
-pub trait BeforeRemoveAttrListener {
- fn BeforeRemoveAttr(&mut self, name: DOMString);
-}
-
impl AttributeHandlers for JS<Element> {
fn get_attribute(&self, namespace: Namespace, name: &str) -> Option<JS<Attr>> {
if self.get().html_element_in_html_document() {
@@ -397,23 +385,7 @@ impl AttributeHandlers for JS<Element> {
_ => ()
}
- //XXXjdm We really need something like a vtable so we can call AfterSetAttr.
- // This hardcoding is awful.
- match node.type_id() {
- ElementNodeTypeId(HTMLImageElementTypeId) => {
- let mut elem: JS<HTMLImageElement> = HTMLImageElementCast::to(self).unwrap();
- elem.AfterSetAttr(local_name.clone(), value.clone());
- }
- ElementNodeTypeId(HTMLIFrameElementTypeId) => {
- let mut elem: JS<HTMLIFrameElement> = HTMLIFrameElementCast::to(self).unwrap();
- elem.AfterSetAttr(local_name.clone(), value.clone());
- }
- ElementNodeTypeId(HTMLObjectElementTypeId) => {
- let mut elem: JS<HTMLObjectElement> = HTMLObjectElementCast::to(self).unwrap();
- elem.AfterSetAttr(local_name.clone(), value.clone());
- }
- _ => ()
- }
+ vtable_for(&node).after_set_attr(local_name.clone(), value.clone());
self.notify_attribute_changed(local_name);
}
@@ -454,24 +426,12 @@ impl AttributeHandlers for JS<Element> {
// "borrowed value does not live long enough"
let mut doc = node.get().owner_doc().clone();
let doc = doc.get_mut();
- doc.unregister_named_element(self, old_value);
+ doc.unregister_named_element(self, old_value.clone());
}
_ => ()
}
- //XXXjdm We really need something like a vtable so we can call BeforeRemoveAttr.
- // This hardcoding is awful.
- match node.type_id() {
- ElementNodeTypeId(HTMLImageElementTypeId) => {
- let mut elem: JS<HTMLImageElement> = HTMLImageElementCast::to(self).unwrap();
- elem.BeforeRemoveAttr(local_name.clone());
- }
- ElementNodeTypeId(HTMLIFrameElementTypeId) => {
- let mut elem: JS<HTMLIFrameElement> = HTMLIFrameElementCast::to(self).unwrap();
- elem.BeforeRemoveAttr(local_name.clone());
- }
- _ => ()
- }
+ vtable_for(&node).before_remove_attr(local_name.clone(), old_value);
self.notify_attribute_changed(local_name);
}
@@ -757,3 +717,10 @@ pub fn get_attribute_parts(name: DOMString) -> (Option<~str>, ~str) {
(prefix, local_name)
}
+
+impl VirtualMethods for JS<Element> {
+ fn super_type(&self) -> Option<~VirtualMethods:> {
+ let node: JS<Node> = NodeCast::from(self);
+ Some(~node as ~VirtualMethods:)
+ }
+}