aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script/dom/htmlimageelement.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/script/dom/htmlimageelement.rs')
-rw-r--r--src/components/script/dom/htmlimageelement.rs48
1 files changed, 26 insertions, 22 deletions
diff --git a/src/components/script/dom/htmlimageelement.rs b/src/components/script/dom/htmlimageelement.rs
index 861b8ca5633..af1d70444a2 100644
--- a/src/components/script/dom/htmlimageelement.rs
+++ b/src/components/script/dom/htmlimageelement.rs
@@ -9,6 +9,7 @@ use dom::bindings::js::JS;
use dom::bindings::error::ErrorResult;
use dom::document::Document;
use dom::element::{Element, HTMLImageElementTypeId};
+use dom::element::{AttributeHandlers, AfterSetAttrListener, BeforeRemoveAttrListener};
use dom::eventtarget::{EventTarget, NodeTargetTypeId};
use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId, NodeHelpers, window_from_node};
@@ -91,21 +92,6 @@ impl HTMLImageElement {
}
}
- pub fn AfterSetAttr(&mut self, name: DOMString, value: DOMString) {
- if "src" == name {
- let document = self.htmlelement.element.node.owner_doc().clone();
- let window = document.get().window.get();
- let url = Some(window.get_url());
- self.update_image(Some(value), url);
- }
- }
-
- pub fn BeforeRemoveAttr(&mut self, name: DOMString) {
- if "src" == name {
- self.update_image(None, None);
- }
- }
-
pub fn Alt(&self) -> DOMString {
~""
}
@@ -118,9 +104,10 @@ impl HTMLImageElement {
~""
}
- pub fn SetSrc(&mut self, abstract_self: &JS<HTMLImageElement>, src: DOMString) -> ErrorResult {
- let node = &mut self.htmlelement.element;
- node.set_attr(&ElementCast::from(abstract_self), ~"src", src.clone())
+ pub fn SetSrc(&mut self, abstract_self: &mut JS<HTMLImageElement>, src: DOMString) -> ErrorResult {
+ let mut element: JS<Element> = ElementCast::from(abstract_self);
+ element.set_url_attribute("src", src);
+ Ok(())
}
pub fn CrossOrigin(&self) -> DOMString {
@@ -162,8 +149,7 @@ impl HTMLImageElement {
pub fn SetWidth(&mut self, abstract_self: &JS<HTMLImageElement>, width: u32) -> ErrorResult {
let mut elem: JS<Element> = ElementCast::from(abstract_self);
- let mut elem_clone = elem.clone();
- elem.get_mut().set_attr(&mut elem_clone, ~"width", width.to_str())
+ elem.set_attr(~"width", width.to_str())
}
pub fn Height(&self, abstract_self: &JS<HTMLImageElement>) -> u32 {
@@ -181,8 +167,8 @@ impl HTMLImageElement {
}
pub fn SetHeight(&mut self, abstract_self: &JS<HTMLImageElement>, height: u32) -> ErrorResult {
- let node = &mut self.htmlelement.element;
- node.set_attr(&ElementCast::from(abstract_self), ~"height", height.to_str())
+ let mut elem: JS<Element> = ElementCast::from(abstract_self);
+ elem.set_attr(~"height", height.to_str())
}
pub fn NaturalWidth(&self) -> u32 {
@@ -245,3 +231,21 @@ impl HTMLImageElement {
Ok(())
}
}
+
+impl AfterSetAttrListener for JS<HTMLImageElement> {
+ fn AfterSetAttr(&mut self, name: DOMString, value: DOMString) {
+ if "src" == name {
+ let window = window_from_node(self);
+ let url = Some(window.get().get_url());
+ self.get_mut().update_image(Some(value), url);
+ }
+ }
+}
+
+impl BeforeRemoveAttrListener for JS<HTMLImageElement> {
+ fn BeforeRemoveAttr(&mut self, name: DOMString) {
+ if "src" == name {
+ self.get_mut().update_image(None, None);
+ }
+ }
+}